norikra 1.2.0-java → 1.2.1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changes.md +2 -0
- data/lib/norikra/query.rb +32 -9
- data/lib/norikra/version.rb +1 -1
- data/spec/query_spec.rb +36 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e2938132b83a49bb328d060517750c5cb9d7e95
|
4
|
+
data.tar.gz: 7c20e09c3795b209946f08f49d3503ccccec3caf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a684145944825a6c813ec8695a7eee3ee6411de5654af120a90a77f7ee4e0fae9becef6535c476b5afce4754a7923d9188a8feca8c912a0c55393f2a6989794
|
7
|
+
data.tar.gz: 4140d210916fcb7d575527fce40f9b3bda7d7fc3a9f7af9d88b2ef1c6202678d63b28c7369f71d227df399548d708486ccfea5aca2b7bfeb6f771acfda88e773
|
data/Changes.md
CHANGED
data/lib/norikra/query.rb
CHANGED
@@ -261,16 +261,39 @@ module Norikra
|
|
261
261
|
def self.rewrite_nullable_fields(statement_model)
|
262
262
|
# NULLABLE(field) -> field
|
263
263
|
## NOTICE: NULLABLE(...) cannot be used in view parameters. ex: target.std:unique(NULLABLE(a)) -> x
|
264
|
+
check_nullable = lambda {|exp|
|
265
|
+
# top-level lib function
|
266
|
+
# exp.getChain[0] #=> Java::ComEspertechEsperClientSoda::DotExpressionItem
|
267
|
+
exp &&
|
268
|
+
exp.is_a?(Java::ComEspertechEsperClientSoda::DotExpression) &&
|
269
|
+
exp.getChain.size == 1 &&
|
270
|
+
exp.getChain[0].name.upcase == 'NULLABLE'
|
271
|
+
}
|
272
|
+
fetch_field = lambda {|exp| exp.getChain[0].getParameters[0] }
|
273
|
+
|
264
274
|
rewriter = lambda {|node|
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
275
|
+
# without loop of parameters because this code shows which parameter cause errors in user's environment
|
276
|
+
if node.respond_to?(:getExpression) && check_nullable.(node.getExpression)
|
277
|
+
node.setExpression(fetch_field.(node.getExpression))
|
278
|
+
end
|
279
|
+
|
280
|
+
if node.respond_to?(:getFilter) && check_nullable.(node.getFilter)
|
281
|
+
node.setFilter(fetch_field.(node.getFilter))
|
282
|
+
end
|
283
|
+
|
284
|
+
if node.respond_to?(:getChildren) && node.getChildren.any?{|exp| check_nullable.(exp) }
|
285
|
+
node.setChildren(node.getChildren.map{|e| check_nullable.(e) ? fetch_field.(e) : e })
|
286
|
+
end
|
287
|
+
|
288
|
+
if node.respond_to?(:getParameters) && node.getParameters.any?{|exp| check_nullable.(exp) }
|
289
|
+
node.setParameters(node.getParameters.map{|e| check_nullable.(e) ? fetch_field.(e) : e })
|
290
|
+
end
|
291
|
+
if node.respond_to?(:getChain) && node.getChain.any?{|exp| check_nullable.(exp) }
|
292
|
+
node.setChain(node.getChain.map{|e| check_nullable.(e) ? fetch_field.(e) : e })
|
293
|
+
end
|
294
|
+
|
295
|
+
if node.respond_to?(:getExpressions) && node.getExpressions.any?{|exp| check_nullable.(exp) }
|
296
|
+
node.setExpressions(node.getExpressions.map{|e| check_nullable.(e) ? fetch_field.(e) : e })
|
274
297
|
end
|
275
298
|
}
|
276
299
|
recaller = lambda {|node|
|
data/lib/norikra/version.rb
CHANGED
data/spec/query_spec.rb
CHANGED
@@ -158,6 +158,27 @@ describe Norikra::Query do
|
|
158
158
|
|
159
159
|
expect(q.invalid?).to be_falsy
|
160
160
|
end
|
161
|
+
|
162
|
+
it 'returns query instances correctly parsed, with built-in NULLABLE() in CASE' do
|
163
|
+
expression = 'SELECT CASE WHEN eventType = 1 AND NULLABLE(detail.type) = 1 THEN 1 ELSE 0 END AS type, COUNT(*) AS c FROM TestTable.win:time_batch(10 sec) GROUP BY CASE WHEN eventType = 1 AND NULLABLE(detail.type) = 1 THEN 1 ELSE 0 END'
|
164
|
+
q = Norikra::Query.new(
|
165
|
+
:name => 'TestTable query1', :expression => expression
|
166
|
+
)
|
167
|
+
expect(q.name).to eql('TestTable query1')
|
168
|
+
expect(q.group).to be_nil
|
169
|
+
expect(q.expression).to eql(expression)
|
170
|
+
expect(q.targets).to eql(['TestTable'])
|
171
|
+
|
172
|
+
expect(q.fields).to eql(['detail.type', 'eventType'])
|
173
|
+
expect(q.fields('TestTable')).to eql(['detail.type', 'eventType'])
|
174
|
+
expect(q.fields(nil)).to eql([])
|
175
|
+
|
176
|
+
expect(q.nullable_fields).to eql(['detail.type'])
|
177
|
+
expect(q.nullable_fields('TestTable')).to eql(['detail.type'])
|
178
|
+
expect(q.nullable_fields(nil)).to eql([])
|
179
|
+
|
180
|
+
expect(q.invalid?).to be_falsy
|
181
|
+
end
|
161
182
|
end
|
162
183
|
|
163
184
|
context 'with order by' do
|
@@ -491,7 +512,7 @@ describe Norikra::Query do
|
|
491
512
|
it 'returns query without NULLABLE()' do
|
492
513
|
with_engine do
|
493
514
|
model = administrator.compileEPL(expression)
|
494
|
-
expect(Norikra::Query.
|
515
|
+
expect(Norikra::Query.rewrite_nullable_fields(model).toEPL).to eql(expected)
|
495
516
|
end
|
496
517
|
end
|
497
518
|
end
|
@@ -502,18 +523,29 @@ describe Norikra::Query do
|
|
502
523
|
it 'returns query without NULLABLE()' do
|
503
524
|
with_engine do
|
504
525
|
model = administrator.compileEPL(expression)
|
505
|
-
expect(Norikra::Query.
|
526
|
+
expect(Norikra::Query.rewrite_nullable_fields(model).toEPL).to eql(expected)
|
527
|
+
end
|
528
|
+
end
|
529
|
+
end
|
530
|
+
|
531
|
+
context 'with NULLABLE() in CASE' do
|
532
|
+
expression = 'select case when eventType=1 and nullable(detail.type)=1 then 1 else 0 end as type, count(*) AS c from TestTable.win:time_batch(10 seconds) group by case when eventType=1 and nullable(detail.type)=1 then 1 else 0 end'
|
533
|
+
expected = 'select case when eventType=1 and detail.type=1 then 1 else 0 end as type, count(*) as c from TestTable.win:time_batch(10 seconds) group by case when eventType=1 and detail.type=1 then 1 else 0 end'
|
534
|
+
it 'returns query without NULLABLE()' do
|
535
|
+
with_engine do
|
536
|
+
model = administrator.compileEPL(expression)
|
537
|
+
expect(Norikra::Query.rewrite_nullable_fields(model).toEPL).to eql(expected)
|
506
538
|
end
|
507
539
|
end
|
508
540
|
end
|
509
541
|
|
510
542
|
context 'with some NULLABLE()' do
|
511
543
|
expression = 'select a, NULLABLE(b), NULLABLE(c), count(*) as cnt from TestTable.win:time_batch(10 seconds) where c>0 group by a, b, c'
|
512
|
-
expected = 'select a, b, c, count(*)
|
544
|
+
expected = 'select a, b, c, count(*) as cnt from TestTable.win:time_batch(10 seconds) where c>0 group by a, b, c'
|
513
545
|
it 'returns query without NULLABLE()' do
|
514
546
|
with_engine do
|
515
547
|
model = administrator.compileEPL(expression)
|
516
|
-
expect(Norikra::Query.
|
548
|
+
expect(Norikra::Query.rewrite_nullable_fields(model).toEPL).to eql(expected)
|
517
549
|
end
|
518
550
|
end
|
519
551
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: norikra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- TAGOMORI Satoshi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mizuno
|