mochigome 0.1.15 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/mochigome_ver.rb +1 -1
- data/lib/query.rb +10 -3
- data/lib/relation.rb +10 -9
- data/test/unit/query_test.rb +12 -0
- metadata +4 -4
data/lib/mochigome_ver.rb
CHANGED
data/lib/query.rb
CHANGED
@@ -86,6 +86,10 @@ module Mochigome
|
|
86
86
|
|
87
87
|
private
|
88
88
|
|
89
|
+
def connection
|
90
|
+
ActiveRecord::Base.connection
|
91
|
+
end
|
92
|
+
|
89
93
|
def create_node_tree(cond)
|
90
94
|
root = DataNode.new(:report, @name)
|
91
95
|
root.comment = <<-eos
|
@@ -100,8 +104,11 @@ module Mochigome
|
|
100
104
|
|
101
105
|
r = @ids_rel.clone
|
102
106
|
r.apply_condition(cond)
|
103
|
-
|
104
|
-
|
107
|
+
ids_sql = r.to_sql
|
108
|
+
if ids_sql
|
109
|
+
ids_table = connection.select_all(ids_sql)
|
110
|
+
fill_layers(ids_table, {[] => root}, @layer_types)
|
111
|
+
end
|
105
112
|
|
106
113
|
root
|
107
114
|
end
|
@@ -153,7 +160,7 @@ module Mochigome
|
|
153
160
|
rel_funcs.each do |rel_func|
|
154
161
|
q = rel_func.call(cond)
|
155
162
|
data_tree = {}
|
156
|
-
|
163
|
+
connection.select_all(q.to_sql).each do |row|
|
157
164
|
group_values = row.keys.select{|k| k.start_with?("g")}.sort.map{|k| row[k]}
|
158
165
|
data_values = row.keys.select{|k| k.start_with?("d")}.sort.map{|k| row[k]}
|
159
166
|
if group_values.empty?
|
data/lib/relation.rb
CHANGED
@@ -13,34 +13,34 @@ module Mochigome
|
|
13
13
|
@joins = []
|
14
14
|
|
15
15
|
@spine_layers.map(&:to_real_model).uniq.each do |m|
|
16
|
-
|
17
|
-
join_to_model(m)
|
18
|
-
else
|
19
|
-
@rel = @model_graph.relation_init(m)
|
20
|
-
@models.add m
|
21
|
-
end
|
16
|
+
join_to_model(m)
|
22
17
|
@spine << m
|
23
18
|
end
|
24
19
|
@spine_layers.each{|m| select_model_id(m)}
|
25
20
|
end
|
26
21
|
|
27
22
|
def to_arel
|
28
|
-
@rel.clone
|
23
|
+
@rel.try(:clone)
|
29
24
|
end
|
30
25
|
|
31
26
|
def to_sql
|
32
|
-
@rel.to_sql
|
27
|
+
@rel.try(:to_sql)
|
33
28
|
end
|
34
29
|
|
35
30
|
def clone
|
36
31
|
c = super
|
37
32
|
c.instance_variable_set :@models, @models.clone
|
38
|
-
c.instance_variable_set :@rel, @rel.clone
|
33
|
+
c.instance_variable_set :@rel, @rel.clone if @rel
|
39
34
|
c
|
40
35
|
end
|
41
36
|
|
42
37
|
def join_to_model(model)
|
43
38
|
return if @models.include?(model)
|
39
|
+
unless @rel
|
40
|
+
@rel = @model_graph.relation_init(model)
|
41
|
+
@models.add model
|
42
|
+
return
|
43
|
+
end
|
44
44
|
|
45
45
|
# Route to it in as few steps as possible, closer to spine end if tie.
|
46
46
|
best_path = nil
|
@@ -84,6 +84,7 @@ module Mochigome
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def select_model_id(m)
|
87
|
+
join_to_model(m)
|
87
88
|
@rel = @rel.project(m.arel_primary_key.as("#{m.name}_id"))
|
88
89
|
end
|
89
90
|
|
data/test/unit/query_test.rb
CHANGED
@@ -275,6 +275,18 @@ describe Mochigome::Query do
|
|
275
275
|
assert_equal (2*@product_c.price).to_f.to_s, (data_node/1/0/0)['Gross'].to_f.to_s
|
276
276
|
end
|
277
277
|
|
278
|
+
it "can collect aggregate data without any layers" do
|
279
|
+
q = Mochigome::Query.new(
|
280
|
+
[],
|
281
|
+
:aggregate_sources => [Product]
|
282
|
+
)
|
283
|
+
|
284
|
+
data_node = q.run
|
285
|
+
assert_equal Product.all.map(&:price).sum.to_s,
|
286
|
+
data_node["Products sum price"].to_s
|
287
|
+
assert_empty data_node.children
|
288
|
+
end
|
289
|
+
|
278
290
|
it "can use a named aggregate data setting" do
|
279
291
|
q = Mochigome::Query.new(
|
280
292
|
[Owner],
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mochigome
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 59
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 16
|
10
|
+
version: 0.1.16
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- David Mike Simon
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-06-
|
18
|
+
date: 2012-06-05 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|