· 7 years ago · Oct 21, 2018, 02:34 AM
1#!/usr/bin/env ruby
2#
3# A standalone example of the aggregate method
4require 'rubygems'
5require 'dm-core'
6require 'dm-migrations'
7require 'dm-aggregates'
8
9
10# setup the logger
11DataMapper::Logger.new($stdout, :debug)
12
13# connect to the DB
14DataMapper.setup(:default, 'sqlite3::memory:')
15
16class Example
17 include DataMapper::Resource
18
19 # properties
20 property :id, Serial
21 property :total, Float
22 property :name, String
23end
24
25DataMapper.finalize.auto_migrate!
26
2710.times do |n|
28 Example.create(:name => (n % 2), :total => n)
29end
30
31p Example.aggregate(:name, :total.sum)
32
33
34__END__
35
36
37 ~ (0.000102) SELECT sqlite_version(*)
38 ~ (0.000206) DROP TABLE IF EXISTS "examples"
39 ~ (0.000024) PRAGMA table_info("examples")
40 ~ (0.000496) CREATE TABLE "examples" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "total" FLOAT, "name" VARCHAR(50))
41 ~ (0.000119) INSERT INTO "examples" ("total", "name") VALUES (0.0, '0')
42 ~ (0.000107) INSERT INTO "examples" ("total", "name") VALUES (1.0, '1')
43 ~ (0.000090) INSERT INTO "examples" ("total", "name") VALUES (2.0, '0')
44 ~ (0.000103) INSERT INTO "examples" ("total", "name") VALUES (3.0, '1')
45 ~ (0.000093) INSERT INTO "examples" ("total", "name") VALUES (4.0, '0')
46 ~ (0.000088) INSERT INTO "examples" ("total", "name") VALUES (5.0, '1')
47 ~ (0.000089) INSERT INTO "examples" ("total", "name") VALUES (6.0, '0')
48 ~ (0.000098) INSERT INTO "examples" ("total", "name") VALUES (7.0, '1')
49 ~ (0.000090) INSERT INTO "examples" ("total", "name") VALUES (8.0, '0')
50 ~ (0.000089) INSERT INTO "examples" ("total", "name") VALUES (9.0, '1')
51 ~ (0.000100) SELECT "name", SUM("total") FROM "examples" GROUP BY "name" ORDER BY "name"
52[["0", 20.0], ["1", 25.0]]