DataMapper::Aggregates::DataObjectsAdapter

Public Instance Methods

aggregate(query) click to toggle source
    # File lib/dm-aggregates/adapters/dm-do-adapter.rb, line 6
 6:       def aggregate(query)
 7:         fields = query.fields
 8:         types  = fields.map { |p| p.respond_to?(:operator) ? String : p.primitive }
 9: 
10:         field_size = fields.size
11: 
12:         records = []
13: 
14:         with_connection do |connection|
15:           statement, bind_values = select_statement(query)
16: 
17:           command = connection.create_command(statement)
18:           command.set_types(types)
19: 
20:           reader = command.execute_reader(*bind_values)
21: 
22:           begin
23:             while(reader.next!)
24:               row = fields.zip(reader.values).map do |field, value|
25:                 if field.respond_to?(:operator)
26:                   send(field.operator, field.target, value)
27:                 else
28:                   field.load(value)
29:                 end
30:               end
31: 
32:               records << (field_size > 1 ? row : row[0])
33:             end
34:           ensure
35:             reader.close
36:           end
37:         end
38: 
39:         records
40:       end

Private Instance Methods

aggregate_field_statement(aggregate_function, property, qualify) click to toggle source
    # File lib/dm-aggregates/adapters/dm-do-adapter.rb, line 79
79:       def aggregate_field_statement(aggregate_function, property, qualify)
80:         column_name = if aggregate_function == :count && property == :all
81:           '*'
82:         else
83:           property_to_column_name(property, qualify)
84:         end
85: 
86:         function_name = case aggregate_function
87:           when :count then 'COUNT'
88:           when :min   then 'MIN'
89:           when :max   then 'MAX'
90:           when :avg   then 'AVG'
91:           when :sum   then 'SUM'
92:           else raise "Invalid aggregate function: #{aggregate_function.inspect}"
93:         end
94: 
95:         "#{function_name}(#{column_name})"
96:       end
avg(property, value) click to toggle source
    # File lib/dm-aggregates/adapters/dm-do-adapter.rb, line 56
56:       def avg(property, value)
57:         property.primitive == ::Integer ? value.to_f : property.load(value)
58:       end
count(property, value) click to toggle source
    # File lib/dm-aggregates/adapters/dm-do-adapter.rb, line 44
44:       def count(property, value)
45:         value.to_i
46:       end
max(property, value) click to toggle source
    # File lib/dm-aggregates/adapters/dm-do-adapter.rb, line 52
52:       def max(property, value)
53:         property.load(value)
54:       end
min(property, value) click to toggle source
    # File lib/dm-aggregates/adapters/dm-do-adapter.rb, line 48
48:       def min(property, value)
49:         property.load(value)
50:       end
property_to_column_name(property, qualify) click to toggle source
    # File lib/dm-aggregates/adapters/dm-do-adapter.rb, line 65
65:         def property_to_column_name(property, qualify)
66:           case property
67:             when DataMapper::Query::Operator
68:               aggregate_field_statement(property.operator, property.target, qualify)
69: 
70:             when Property, DataMapper::Query::Path
71:               super
72: 
73:             else
74:               raise ArgumentError, "+property+ must be a DataMapper::Query::Operator, a DataMapper::Property or a Query::Path, but was a #{property.class} (#{property.inspect})"
75:           end
76:         end
sum(property, value) click to toggle source
    # File lib/dm-aggregates/adapters/dm-do-adapter.rb, line 60
60:       def sum(property, value)
61:         property.load(value)
62:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.