rgviz-rails 0.30 → 0.31
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.
@@ -56,6 +56,13 @@ module Rgviz
|
|
56
56
|
visitor << "lower("
|
57
57
|
node.arguments[0].accept visitor
|
58
58
|
visitor << ")"
|
59
|
+
when ScalarFunctionColumn::Concat
|
60
|
+
visitor << "concat("
|
61
|
+
node.arguments.each_with_index do |arg, i|
|
62
|
+
visitor << ", " if i > 0
|
63
|
+
arg.accept visitor
|
64
|
+
end
|
65
|
+
visitor << ")"
|
59
66
|
end
|
60
67
|
end
|
61
68
|
end
|
@@ -62,6 +62,13 @@ module Rgviz
|
|
62
62
|
visitor << "lower("
|
63
63
|
node.arguments[0].accept visitor
|
64
64
|
visitor << ")"
|
65
|
+
when ScalarFunctionColumn::Concat
|
66
|
+
visitor << "("
|
67
|
+
node.arguments.each_with_index do |arg, i|
|
68
|
+
visitor << " || " if i > 0
|
69
|
+
arg.accept visitor
|
70
|
+
end
|
71
|
+
visitor << ")"
|
65
72
|
end
|
66
73
|
end
|
67
74
|
end
|
@@ -54,6 +54,13 @@ module Rgviz
|
|
54
54
|
visitor << "lower("
|
55
55
|
node.arguments[0].accept visitor
|
56
56
|
visitor << ")"
|
57
|
+
when ScalarFunctionColumn::Concat
|
58
|
+
visitor << "("
|
59
|
+
node.arguments.each_with_index do |arg, i|
|
60
|
+
visitor << " || " if i > 0
|
61
|
+
arg.accept visitor
|
62
|
+
end
|
63
|
+
visitor << ")"
|
57
64
|
end
|
58
65
|
end
|
59
66
|
end
|
data/lib/rgviz_rails/executor.rb
CHANGED
@@ -6,7 +6,6 @@ module Rgviz
|
|
6
6
|
def initialize(model_class, query)
|
7
7
|
@model_class = model_class
|
8
8
|
@query = query
|
9
|
-
@query = Parser.new(query).parse unless query.kind_of?(Query)
|
10
9
|
@selects = []
|
11
10
|
@joins = {}
|
12
11
|
@labels = {}
|
@@ -24,6 +23,8 @@ module Rgviz
|
|
24
23
|
end
|
25
24
|
|
26
25
|
def execute(options = {})
|
26
|
+
@query = Parser.parse(@query, options) unless @query.kind_of?(Query)
|
27
|
+
|
27
28
|
@table = Table.new
|
28
29
|
@extra_conditions = options[:conditions]
|
29
30
|
|
@@ -97,6 +98,8 @@ module Rgviz
|
|
97
98
|
|
98
99
|
# Select pivot columns and group by columns
|
99
100
|
if @query.pivot
|
101
|
+
@max_before_pivot_columns = @original_columns.length
|
102
|
+
|
100
103
|
@query.pivot.columns.each do |col|
|
101
104
|
col_to_s = col.to_s
|
102
105
|
|
@@ -164,7 +167,9 @@ module Rgviz
|
|
164
167
|
:offset => @query.offset,
|
165
168
|
:joins => @joins
|
166
169
|
|
167
|
-
if @pivots.empty?
|
170
|
+
if @pivots.empty? || results.empty?
|
171
|
+
@table.cols = @table.cols[0 ... @max_before_pivot_columns] if @pivots.present?
|
172
|
+
|
168
173
|
# Simple, just convert the results to a table
|
169
174
|
results.each do |result|
|
170
175
|
row = Row.new
|
@@ -175,13 +180,13 @@ module Rgviz
|
|
175
180
|
hash = {}
|
176
181
|
hash[:v] = column_value(col, result.send("c#{i}")) unless @query.options && @query.options.no_values
|
177
182
|
row.c << Cell.new(hash)
|
178
|
-
i += 1
|
183
|
+
i += 1
|
179
184
|
end
|
180
185
|
end
|
181
186
|
else
|
182
187
|
# A little more complicated...
|
183
|
-
|
184
|
-
# This
|
188
|
+
|
189
|
+
# This is grouping => pivot => [selections]
|
185
190
|
fin = ActiveSupport::OrderedHash.new
|
186
191
|
|
187
192
|
# The uniq pivot values
|
@@ -189,7 +194,6 @@ module Rgviz
|
|
189
194
|
|
190
195
|
# Fill fin and uniq_pivots
|
191
196
|
results.each do |result|
|
192
|
-
|
193
197
|
# The grouping key of this result
|
194
198
|
grouped_by = []
|
195
199
|
|
@@ -305,7 +309,7 @@ module Rgviz
|
|
305
309
|
:datetime
|
306
310
|
when ScalarFunctionColumn::ToDate
|
307
311
|
:date
|
308
|
-
when ScalarFunctionColumn::Upper, ScalarFunctionColumn::Lower
|
312
|
+
when ScalarFunctionColumn::Upper, ScalarFunctionColumn::Lower, ScalarFunctionColumn::Concat
|
309
313
|
:string
|
310
314
|
else
|
311
315
|
:number
|
data/rails/init.rb
CHANGED
@@ -13,15 +13,17 @@ config.after_initialize do
|
|
13
13
|
else
|
14
14
|
model = hash[:rgviz]
|
15
15
|
conditions = hash[:conditions]
|
16
|
+
extensions = hash[:extensions]
|
16
17
|
query = params[:tq]
|
17
18
|
tqx = params[:tqx] || ''
|
18
19
|
|
19
20
|
tqx = Rgviz::Tqx.parse(tqx)
|
20
21
|
|
21
22
|
begin
|
22
|
-
executor = Rgviz::Executor.new model,
|
23
|
+
executor = Rgviz::Executor.new model, query
|
23
24
|
options = {}
|
24
25
|
options[:conditions] = conditions if conditions
|
26
|
+
options[:extensions] = extensions if extensions
|
25
27
|
table = executor.execute options
|
26
28
|
|
27
29
|
yield table if block_given?
|
data/spec/rgviz/executor_spec.rb
CHANGED
@@ -7,13 +7,9 @@ describe Executor do
|
|
7
7
|
before :each do
|
8
8
|
[Person, City, Country].each &:delete_all
|
9
9
|
end
|
10
|
-
|
11
|
-
def parse(string)
|
12
|
-
Parser.new(string).parse
|
13
|
-
end
|
14
10
|
|
15
11
|
def exec(query, options = {})
|
16
|
-
exec = Executor.new Person,
|
12
|
+
exec = Executor.new Person, query
|
17
13
|
exec.execute options
|
18
14
|
end
|
19
15
|
|
@@ -25,7 +21,7 @@ describe Executor do
|
|
25
21
|
date.strftime "%Y-%m-%d"
|
26
22
|
end
|
27
23
|
|
28
|
-
def self.it_processes_single_select_column(query, id, type, value, label)
|
24
|
+
def self.it_processes_single_select_column(query, id, type, value, label, options = {})
|
29
25
|
it "processes select #{query}" do
|
30
26
|
if block_given?
|
31
27
|
yield
|
@@ -33,7 +29,7 @@ describe Executor do
|
|
33
29
|
Person.make
|
34
30
|
end
|
35
31
|
|
36
|
-
table = exec "select #{query}"
|
32
|
+
table = exec "select #{query}", options
|
37
33
|
table.cols.length.should == 1
|
38
34
|
|
39
35
|
table.cols[0].id.should == id
|
@@ -270,6 +266,14 @@ describe Executor do
|
|
270
266
|
Person.make :name => 'FOO'
|
271
267
|
end
|
272
268
|
|
269
|
+
it_processes_single_select_column "concat(age)", 'c0', :string, '20', "concat(age)", :extensions => true do
|
270
|
+
Person.make :age => 20
|
271
|
+
end
|
272
|
+
|
273
|
+
it_processes_single_select_column "concat(name, 'bar')", 'c0', :string, 'foobar', "concat(name, 'bar')", :extensions => true do
|
274
|
+
Person.make :name => 'foo'
|
275
|
+
end
|
276
|
+
|
273
277
|
it_processes_single_select_column "name label name 'my name'", 'name', :string, 'foo', "my name" do
|
274
278
|
Person.make :name => 'foo'
|
275
279
|
end
|
@@ -393,6 +397,24 @@ describe Executor do
|
|
393
397
|
end
|
394
398
|
end
|
395
399
|
|
400
|
+
it "processes pivot with no results" do
|
401
|
+
Person.make :name => 'Eng', :birthday => '2000-01-12', :age => 10
|
402
|
+
Person.make :name => 'Sales', :birthday => '2001-02-12', :age => 20
|
403
|
+
|
404
|
+
table = exec 'select birthday, sum(age) where 1 = 2 group by month(birthday) pivot name order by name'
|
405
|
+
|
406
|
+
table.cols.length.should == 2
|
407
|
+
|
408
|
+
i = 0
|
409
|
+
[['birthday', :date, 'birthday'],
|
410
|
+
['c1', :number, 'sum(age)']].each do |id, type, label|
|
411
|
+
table.cols[i].id.should == id
|
412
|
+
table.cols[i].type.should == type
|
413
|
+
table.cols[i].label.should == label
|
414
|
+
i += 1
|
415
|
+
end
|
416
|
+
end
|
417
|
+
|
396
418
|
it "processes pivot with group by not in select" do
|
397
419
|
Person.make :name => 'Eng', :birthday => '2000-01-12', :age => 10
|
398
420
|
Person.make :name => 'Sales', :birthday => '2001-02-12', :age => 20
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rgviz-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 53
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: "0.
|
8
|
+
- 31
|
9
|
+
version: "0.31"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ary Borenszweig
|