From f0a1a2ee0a43645762ef8f73d425c049073cfc5e Mon Sep 17 00:00:00 2001 From: Paul Stoellberger Date: Mon, 27 Feb 2012 21:43:58 +0000 Subject: [PATCH] in query model use Exists(,).Count > 0 instead of mondrian-specific IN git-svn-id: https://olap4j.svn.sourceforge.net/svnroot/olap4j/trunk@516 c6a108a4-781c-0410-a6c6-c2d559e19af0 --- src/org/olap4j/query/Olap4jNodeConverter.java | 18 +++++++++++++++--- testsrc/org/olap4j/OlapTest.java | 6 +++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/org/olap4j/query/Olap4jNodeConverter.java b/src/org/olap4j/query/Olap4jNodeConverter.java index bce2486..fc5b60c 100644 --- a/src/org/olap4j/query/Olap4jNodeConverter.java +++ b/src/org/olap4j/query/Olap4jNodeConverter.java @@ -634,11 +634,23 @@ private static ParseTreeNode toHierarchyConsistentNode( generateListSetCall(ancestorList); CallNode inClause = new CallNode( null, - "IN", - Syntax.Infix, + "Exists", + Syntax.Function, ancestorNode, ancestorSet); - inConditions.add(inClause); + CallNode count = + new CallNode( + null, + "Count", + Syntax.Property, + inClause); + CallNode greaterZero = + new CallNode( + null, + " > 0", + Syntax.Postfix, + count); + inConditions.add(greaterZero); } } } diff --git a/testsrc/org/olap4j/OlapTest.java b/testsrc/org/olap4j/OlapTest.java index a181618..8996e82 100644 --- a/testsrc/org/olap4j/OlapTest.java +++ b/testsrc/org/olap4j/OlapTest.java @@ -1480,8 +1480,8 @@ public void testHierarchyConsistency() throws Exception { String mdxString = query.getSelect().toString(); TestContext.assertEqualsVerbose( "SELECT\n" - + "{{[Product].[All Products]}, {[Product].[Food]}, Filter({{[Product].[Food].[Deli], [Product].[Food].[Dairy]}}, (Ancestor([Product].CurrentMember, [Product].[Product Family]) IN {[Product].[Food]})), Filter({{[Product].[Product Category].Members}}, ((Ancestor([Product].CurrentMember, [Product].[Product Family]) IN {[Product].[Food]}) AND (Ancestor([Product].CurrentMember, [Product].[Product Department]) IN {[Product].[Food].[Deli], [Product].[Food].[Dairy]})))} ON COLUMNS,\n" - + "{{[Time].[1997]}, Filter({{[Time].[1997].[Q3].[7], [Time].[1997].[Q4].[11]}}, (Ancestor([Time].CurrentMember, [Time].[Year]) IN {[Time].[1997]}))} ON ROWS\n" + + "{{[Product].[All Products]}, {[Product].[Food]}, Filter({{[Product].[Food].[Deli], [Product].[Food].[Dairy]}}, (Exists(Ancestor([Product].CurrentMember, [Product].[Product Family]), {[Product].[Food]}).Count > 0)), Filter({{[Product].[Product Category].Members}}, ((Exists(Ancestor([Product].CurrentMember, [Product].[Product Family]), {[Product].[Food]}).Count > 0) AND (Exists(Ancestor([Product].CurrentMember, [Product].[Product Department]), {[Product].[Food].[Deli], [Product].[Food].[Dairy]}).Count > 0)))} ON COLUMNS,\n" + + "{{[Time].[1997]}, Filter({{[Time].[1997].[Q3].[7], [Time].[1997].[Q4].[11]}}, (Exists(Ancestor([Time].CurrentMember, [Time].[Year]), {[Time].[1997]}).Count > 0))} ON ROWS\n" + "FROM [Sales]", mdxString); @@ -1538,7 +1538,7 @@ public void testHierarchyConsistency() throws Exception { TestContext.assertEqualsVerbose( "SELECT\n" + "{[Product].[Food]} ON COLUMNS,\n" - + "Hierarchize(Union(CrossJoin(Filter({[Time].[1997].[Q3].[7]}, (Ancestor([Time].CurrentMember, [Time].[Year]) IN {[Time].[1997]})), {[Measures].[Sales Count]}), Union(CrossJoin(Filter({[Time].[1997].[Q4].[11]}, (Ancestor([Time].CurrentMember, [Time].[Year]) IN {[Time].[1997]})), {[Measures].[Sales Count]}), CrossJoin({[Time].[1997]}, {[Measures].[Sales Count]})))) ON ROWS\n" + + "Hierarchize(Union(CrossJoin(Filter({[Time].[1997].[Q3].[7]}, (Exists(Ancestor([Time].CurrentMember, [Time].[Year]), {[Time].[1997]}).Count > 0)), {[Measures].[Sales Count]}), Union(CrossJoin(Filter({[Time].[1997].[Q4].[11]}, (Exists(Ancestor([Time].CurrentMember, [Time].[Year]), {[Time].[1997]}).Count > 0)), {[Measures].[Sales Count]}), CrossJoin({[Time].[1997]}, {[Measures].[Sales Count]})))) ON ROWS\n" + "FROM [Sales]", mdxString2);