Skip to content

Commit 41759ca

Browse files
authored
Merge pull request #143 from rsim/bugfix/case_statement
Fix CASE evaluation and add regression tests.
2 parents 131963d + c63d408 commit 41759ca

3 files changed

Lines changed: 47 additions & 6 deletions

File tree

4 Bytes
Binary file not shown.

mondrian-olap.gemspec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,4 @@ Gem::Specification.new do |gem|
3434
gem.add_development_dependency "activerecord-jdbc-adapter", "~> 61.3"
3535
gem.add_development_dependency "activerecord-oracle_enhanced-adapter", "~> 6.1.6"
3636
gem.add_development_dependency "pry"
37-
gem.add_development_dependency "jar-dependencies", "~> 0.4.1"
3837
end

spec/mondrian_spec.rb

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -347,8 +347,14 @@ def nonempty_crossjoin_from_cube(cube_name)
347347
as("CASE 1 WHEN 1 THEN ([Measures].[one], [Gender].[F]) ELSE ([Measures].[two], [Gender].[M]) END").
348348
with_member('[Measures].[Case 4]').
349349
as("CASE 1 WHEN 1 THEN ([Measures].[one], [Gender].[F]) ELSE 2 END").
350-
columns('[Measures].[Case 1]', '[Measures].[Case 2]', '[Measures].[Case 3]', '[Measures].[Case 4]').execute.
351-
values.should == [1, 1, 1, 1]
350+
with_member('[Measures].[Case 5]').
351+
as("CASE 1 WHEN 1 THEN [Measures].[one] ELSE ([Measures].[two], [Gender].[F]) END").
352+
with_member('[Measures].[Case 6]').
353+
as("CASE 2 WHEN 2 THEN ([Measures].[two], [Gender].[F]) ELSE [Measures].[one] END").
354+
columns(
355+
'[Measures].[Case 1]', '[Measures].[Case 2]', '[Measures].[Case 3]', '[Measures].[Case 4]', '[Measures].[Case 5]',
356+
'[Measures].[Case 6]'
357+
).execute.values.should == [1, 1, 1, 1, 1, 2]
352358
end
353359

354360
it "should return member or tuple as result" do
@@ -365,7 +371,22 @@ def nonempty_crossjoin_from_cube(cube_name)
365371
as("CASE 2 WHEN 1 THEN ([Measures].[one], [Gender].[F]) ELSE ([Measures].[two], [Gender].[M]) END.Item(0).Name").
366372
columns('[Measures].[Case 1]', '[Measures].[Case 2]', '[Measures].[Case 3]', '[Measures].[Case 4]').execute.
367373
values.should == ['one', 'two', 'one', 'two']
368-
end
374+
end
375+
376+
it "should allow members and NULLs as scalar result values" do
377+
@olap.from('Sales').
378+
with_member('[Measures].[one]').as('1').
379+
with_member('[Measures].[Case 1]').
380+
as("CASE 1 WHEN 1 THEN NULL ELSE [Measures].[one] END").
381+
with_member('[Measures].[Case 2]').
382+
as("CASE 2 WHEN 1 THEN NULL ELSE [Measures].[one] END").
383+
with_member('[Measures].[Case 3]').
384+
as("CASE 1 WHEN 1 THEN [Measures].[one] ELSE NULL END").
385+
with_member('[Measures].[Case 4]').
386+
as("CASE 2 WHEN 1 THEN [Measures].[one] ELSE NULL END").
387+
columns('[Measures].[Case 1]', '[Measures].[Case 2]', '[Measures].[Case 3]', '[Measures].[Case 4]').execute.
388+
values.should == [nil, 1, 1, nil]
389+
end
369390
end
370391

371392
describe "CASE test statement" do
@@ -403,8 +424,14 @@ def nonempty_crossjoin_from_cube(cube_name)
403424
as("CASE WHEN 1 = 1 THEN ([Measures].[one], [Gender].[F]) ELSE ([Measures].[two], [Gender].[M]) END").
404425
with_member('[Measures].[Case 4]').
405426
as("CASE WHEN 1 = 1 THEN ([Measures].[one], [Gender].[F]) ELSE 2 END").
406-
columns('[Measures].[Case 1]', '[Measures].[Case 2]', '[Measures].[Case 3]', '[Measures].[Case 4]').execute.
407-
values.should == [1, 1, 1, 1]
427+
with_member('[Measures].[Case 5]').
428+
as("CASE WHEN 1 = 1 THEN [Measures].[one] ELSE ([Measures].[two], [Gender].[F]) END").
429+
with_member('[Measures].[Case 6]').
430+
as("CASE WHEN 2 = 2 THEN ([Measures].[two], [Gender].[F]) ELSE [Measures].[one] END").
431+
columns(
432+
'[Measures].[Case 1]', '[Measures].[Case 2]', '[Measures].[Case 3]', '[Measures].[Case 4]', '[Measures].[Case 5]',
433+
'[Measures].[Case 6]'
434+
).execute.values.should == [1, 1, 1, 1, 1, 2]
408435
end
409436

410437
it "should return member or tuple as result" do
@@ -422,6 +449,21 @@ def nonempty_crossjoin_from_cube(cube_name)
422449
columns('[Measures].[Case 1]', '[Measures].[Case 2]', '[Measures].[Case 3]', '[Measures].[Case 4]').execute.
423450
values.should == ['one', 'two', 'one', 'two']
424451
end
452+
453+
it "should allow members and NULLs as scalar result values" do
454+
@olap.from('Sales').
455+
with_member('[Measures].[one]').as('1').
456+
with_member('[Measures].[Case 1]').
457+
as("CASE WHEN 1 = 1 THEN NULL ELSE [Measures].[one] END").
458+
with_member('[Measures].[Case 2]').
459+
as("CASE WHEN 1 = 2 THEN NULL ELSE [Measures].[one] END").
460+
with_member('[Measures].[Case 3]').
461+
as("CASE WHEN 1 = 1 THEN [Measures].[one] ELSE NULL END").
462+
with_member('[Measures].[Case 4]').
463+
as("CASE WHEN 1 = 2 THEN [Measures].[one] ELSE NULL END").
464+
columns('[Measures].[Case 1]', '[Measures].[Case 2]', '[Measures].[Case 3]', '[Measures].[Case 4]').execute.
465+
values.should == [nil, 1, 1, nil]
466+
end
425467
end
426468

427469
describe "Generate" do

0 commit comments

Comments
 (0)