norikra 1.2.0-java → 1.2.1-java
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.
- 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
|