| /*========================================================================= |
| * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved. |
| * This product is protected by U.S. and international copyright |
| * and intellectual property laws. Pivotal products are covered by |
| * one or more patents listed at http://www.pivotal.io/patents. |
| *========================================================================= |
| */ |
| /* |
| * Created on Nov 15, 2005 |
| * |
| * TODO To change the template for this generated file go to |
| * Window - Preferences - Java - Code Style - Code Templates |
| */ |
| package com.gemstone.gemfire.cache.query.internal; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertTrue; |
| import static org.junit.Assert.fail; |
| |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.experimental.categories.Category; |
| |
| import com.gemstone.gemfire.LogWriter; |
| import com.gemstone.gemfire.cache.Region; |
| import com.gemstone.gemfire.cache.query.CacheUtils; |
| import com.gemstone.gemfire.cache.query.IndexType; |
| import com.gemstone.gemfire.cache.query.QueryService; |
| import com.gemstone.gemfire.cache.query.data.Address; |
| import com.gemstone.gemfire.cache.query.data.Employee; |
| import com.gemstone.gemfire.cache.query.data.Portfolio; |
| import com.gemstone.gemfire.cache.query.internal.index.IndexManager; |
| import com.gemstone.gemfire.cache.query.internal.parse.OQLLexerTokenTypes; |
| import com.gemstone.gemfire.internal.cache.LocalRegion; |
| import com.gemstone.gemfire.test.junit.categories.IntegrationTest; |
| |
| /** |
| * @author ashahid |
| * |
| * |
| */ |
| @Category(IntegrationTest.class) |
| public class CompiledJunctionInternalsJUnitTest { |
| |
| Region region; |
| QueryService qs; |
| |
| @Before |
| public void setUp() throws Exception { |
| CacheUtils.startCache(); |
| region = CacheUtils.createRegion("portfolio", Portfolio.class); |
| region.put("0", new Portfolio(0)); |
| region.put("1", new Portfolio(1)); |
| region.put("2", new Portfolio(2)); |
| region.put("3", new Portfolio(3)); |
| qs = CacheUtils.getQueryService(); |
| } |
| |
| /************************************************* |
| AND JUNCTION TESTS. |
| RangeJunction related tests when part of GroupJunction, |
| CompositeGroupJunction or AllGroupJunction |
| **************************************************/ |
| |
| // Case 1: When a Single GroupJunction contains multiple |
| // RangeJunctionEvaluators for AND |
| @Test |
| public void testMultipleRangeJunctionsInAGroupJunction() { |
| QCompiler compiler = new QCompiler(); |
| List list = compiler.compileFromClause("/portfolio p, p.positions"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils.getCache()); |
| context.newScope(context.assosciateScopeID()); |
| try { |
| qs.createIndex("statusIndex", IndexType.FUNCTIONAL, "status", |
| "/portfolio"); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef)iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| |
| // case id > 7 and id < 10 and status > abc and status < xyz |
| CompiledComparison cv[] = new CompiledComparison[4]; |
| |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral(new String("abc")), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(10)), OQLLexerTokenTypes.TOK_LT); |
| cv[3] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral("xyz"), OQLLexerTokenTypes.TOK_LT); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("The Organized operand object is null", oo); |
| assertTrue( |
| "Filter Operand did not happen to be an instance of GroupJunction", |
| oo.filterOperand instanceof GroupJunction); |
| assertNull("Iterate Operand not coming out to be null", |
| oo.iterateOperand); |
| assertTrue("The Conditions in GroupJunction not equal to 2", |
| ((GroupJunction)oo.filterOperand).getOperands().size() == 2); |
| GroupJunction gj = (GroupJunction)oo.filterOperand; |
| assertTrue(gj.getOperands().get(0) instanceof RangeJunction); |
| assertTrue(gj.getOperands().get(1) instanceof RangeJunction); |
| RangeJunction r1 = (RangeJunction)gj.getOperands().get(0); |
| RangeJunction r2 = (RangeJunction)gj.getOperands().get(1); |
| assertEquals(2, r1._operands.length); |
| assertEquals(2, r2._operands.length); |
| OrganizedOperands oo2 = r1.organizeOperands(context); |
| assertTrue(RangeJunction |
| .isInstanceOfDoubleCondnRangeJunctionEvaluator(oo2.filterOperand)); |
| oo2 = r2.organizeOperands(context); |
| assertTrue(RangeJunction |
| .isInstanceOfDoubleCondnRangeJunctionEvaluator(oo2.filterOperand)); |
| |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed sue to Exception = " + e); |
| } |
| } |
| |
| |
| // Case 2: When a Single GroupJunction contains multiple |
| // RangeJunctions and a sinlge indexable compiledcomparison for AND |
| @Test |
| public void testMultipleRangeJunctionsAndAnIndexableConditionInAGroupJunction() { |
| QCompiler compiler = new QCompiler(); |
| List list = compiler.compileFromClause("/portfolio p, p.positions"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils.getCache()); |
| context.newScope(context.assosciateScopeID()); |
| try { |
| qs.createIndex("statusIndex", IndexType.FUNCTIONAL, "status", |
| "/portfolio"); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio"); |
| qs.createIndex("createTime", IndexType.FUNCTIONAL, "createTime", |
| "/portfolio"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef)iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| |
| // case id > 7 and id < 10 and status > abc and status < xyz and |
| // createTime >7 |
| CompiledComparison cv[] = new CompiledComparison[5]; |
| |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral(new String("abc")), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(10)), OQLLexerTokenTypes.TOK_LT); |
| cv[3] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral("xyz"), OQLLexerTokenTypes.TOK_LT); |
| cv[4] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "createTime"), new CompiledLiteral(new Integer(7)), |
| OQLLexerTokenTypes.TOK_GT); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("The Organized operand object is null", oo); |
| assertTrue( |
| "Filter Operand did not happen to be an instance of GroupJunction", |
| oo.filterOperand instanceof GroupJunction); |
| assertNull("Iterate Operand not coming out to be null", |
| oo.iterateOperand); |
| assertTrue("The Conditions in GroupJunction not equal to 3", |
| ((GroupJunction)oo.filterOperand).getOperands().size() == 3); |
| GroupJunction gj = (GroupJunction)oo.filterOperand; |
| CompiledValue ops[] = gj._operands; |
| int index = -1; |
| int one = -1; |
| int two = -1; |
| if (ops[0] == cv[4]) { |
| index = 0; |
| one = 1; |
| two = 2; |
| } |
| else if (ops[1] == cv[4]) { |
| index = 1; |
| one = 0; |
| two = 2; |
| } |
| else if (ops[2] == cv[4]) { |
| index = 2; |
| one = 0; |
| two = 1; |
| } |
| else { |
| fail("Missing single condition"); |
| } |
| assertTrue(ops[index] == cv[4]); |
| assertTrue(ops[one] instanceof RangeJunction); |
| assertTrue(ops[two] instanceof RangeJunction); |
| |
| RangeJunction r1 = (RangeJunction)gj._operands[one]; |
| RangeJunction r2 = (RangeJunction)gj._operands[two]; |
| assertEquals(2, r1._operands.length); |
| assertEquals(2, r2._operands.length); |
| OrganizedOperands oo2 = r1.organizeOperands(context); |
| assertTrue(RangeJunction |
| .isInstanceOfDoubleCondnRangeJunctionEvaluator(oo2.filterOperand)); |
| oo2 = r2.organizeOperands(context); |
| assertTrue(RangeJunction |
| .isInstanceOfDoubleCondnRangeJunctionEvaluator(oo2.filterOperand)); |
| |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed sue to Exception = " + e); |
| } |
| } |
| |
| // Case 3: A Composite GroupJunction containing just a single RangeJunction |
| // FOR AND clause. In such case a CompisteGroupJunction should contain a |
| // GroupJunction and the GroupJunction should contain a CompiledJunction as |
| // iter operand |
| // portfolio.id= employee.id and p.id > 3 and p.id <10 and p.status =active |
| // and p.type=abc |
| // and emp.age = 1 |
| @Test |
| public void testSingleRangeJunctionInACompositeGroupJunction() { |
| try { |
| Region r3 = CacheUtils.createRegion("employees", Employee.class); |
| Set add1 = new HashSet(); |
| add1.add(new Address("411045", "Baner")); |
| add1.add(new Address("411001", "DholePatilRd")); |
| for (int i = 0; i < 4; i++) { |
| r3.put(i + "", new Employee("empName", (20 + i), i, "Mr.", (5000 + i), |
| add1)); |
| } |
| // compileFromClause returns a List<CompiledIteratorDef> |
| QCompiler compiler = new QCompiler(); |
| List list = compiler |
| .compileFromClause("/portfolio p, p.positions,/employees e"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| context.newScope(context.assosciateScopeID()); |
| |
| // qs.createIndex("statusIndex", |
| // IndexType.FUNCTIONAL,"status","/portfolio"); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio"); |
| qs.createIndex("empid", IndexType.FUNCTIONAL, "empId", "/employees"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef)iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| CompiledComparison cv[] = new CompiledComparison[6]; |
| cv[0] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral(new String("active")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "type"), new CompiledLiteral(new String("type1")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[2] = new CompiledComparison(new CompiledPath(new CompiledID("e"), |
| "age"), new CompiledLiteral(new Integer(1)), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[3] = new CompiledComparison(new CompiledPath(new CompiledID("e"), |
| "empId"), new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(3)), OQLLexerTokenTypes.TOK_GT); |
| cv[5] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(10)), OQLLexerTokenTypes.TOK_LT); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("OO is null", oo); |
| assertTrue("Filter operand of OO not CompositeGroupJunction", |
| oo.filterOperand instanceof CompositeGroupJunction); |
| CompositeGroupJunction cgj = (CompositeGroupJunction)oo.filterOperand; |
| List filterableCC = cgj.getFilterableCCList(); |
| assertTrue("No. of filterable CC not equal to 1", |
| filterableCC.size() == 1); |
| assertNotNull( |
| "1 RangeJunction inside CompositeGroupJunction should have existed", |
| cgj.getGroupJunctionList()); |
| assertTrue(" Complete expansion flag should have been true", cgj |
| .getExpansionFlag()); |
| assertNotNull("Iter operands list in CGJ should be not null", cgj |
| .getIterOperands()); |
| List ietrOps = cgj.getIterOperands(); |
| assertTrue(ietrOps.contains(cv[2])); |
| assertTrue(cgj.getGroupJunctionList().size() == 1); |
| assertTrue(cgj.getGroupJunctionList().get(0) instanceof RangeJunction); |
| RangeJunction rg = (RangeJunction)cgj.getGroupJunctionList().get(0); |
| OrganizedOperands oo1 = rg.organizeOperands(context); |
| assertTrue(((CompiledJunction)oo1.iterateOperand).getOperands().contains( |
| cv[0])); |
| assertTrue(((CompiledJunction)oo1.iterateOperand).getOperands().contains( |
| cv[1])); |
| assertTrue(RangeJunction |
| .isInstanceOfDoubleCondnRangeJunctionEvaluator(oo1.filterOperand)); |
| assertTrue(RangeJunction.getDoubleCondnEvaluatorGreaterKey( |
| oo1.filterOperand).equals(new Integer(3))); |
| assertTrue(RangeJunction |
| .getDoubleCondnEvaluatorLESSKey(oo1.filterOperand).equals( |
| new Integer(10))); |
| /* |
| * assertTrue( " The size of itr operands should be 3 but size happens to |
| * be = " + cgj.getIterOperands().size(), cgj.getIterOperands().size() == |
| * 3); |
| */ |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed sue to Exception = " + e); |
| } |
| } |
| |
| /** |
| * Tests that the organized operands work correctly whether it is multiple |
| * GroupJunctions as part of AllGroupJunction or a RangeJunction and |
| * GroupJunction. Since where previously it used to be only Group can now be |
| * Group or Range , the source code needs to ensure that it does not type cast |
| * wrongly a RangeJunction into a GroupJunction. Instead the source code |
| * should only type cast it to AbstractGroupOrRangeJunction Case p.status = |
| * active and p.type = type1 and emp.id >10 and p.id > 10 and p.id > 15 |
| */ |
| @Test |
| public void testMultipleIndependentRegionsWithOnlyOneRegionHavingFilterEvaluatableCondition() { |
| // Here there will be a single RangeJunction with the iter evaluatable |
| // conditions of the other |
| // independent iterator becoming the part of this single RangeJunction |
| try { |
| Region r3 = CacheUtils.createRegion("employees", Employee.class); |
| Set add1 = new HashSet(); |
| add1.add(new Address("411045", "Baner")); |
| add1.add(new Address("411001", "DholePatilRd")); |
| for (int i = 0; i < 4; i++) { |
| r3.put(i + "", new Employee("empName", (20 + i), i, "Mr.", (5000 + i), |
| add1)); |
| } |
| // compileFromClause returns a List<CompiledIteratorDef> |
| QCompiler compiler = new QCompiler(); |
| List list = compiler |
| .compileFromClause("/portfolio p, p.positions,/employees e"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| context.newScope(context.assosciateScopeID()); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio p"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef)iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| CompiledComparison cv[] = new CompiledComparison[5]; |
| cv[0] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral(new String("active")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "type"), new CompiledLiteral(new String("type1")), |
| OQLLexerTokenTypes.TOK_EQ); |
| |
| cv[2] = new CompiledComparison(new CompiledPath(new CompiledID("e"), |
| "empId"), new CompiledLiteral(new Integer(10)), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(10)), OQLLexerTokenTypes.TOK_GT); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(15)), OQLLexerTokenTypes.TOK_GT); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("OO is null", oo); |
| assertTrue("Filter operand of OO not a RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertTrue(((CompiledJunction)oo1.iterateOperand).getOperands().contains( |
| cv[0])); |
| assertTrue(((CompiledJunction)oo1.iterateOperand).getOperands().contains( |
| cv[1])); |
| assertTrue(((CompiledJunction)oo1.iterateOperand).getOperands().contains( |
| cv[2])); |
| assertTrue(oo1.filterOperand == cv[4]); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed sue to Exception = " + e); |
| } |
| } |
| /** |
| * Tests that the organized operands work correctly whether it is multiple |
| * GroupJunctions as part of AllGroupJunction or a RangeJunction and |
| * GroupJunction. Since where previously it used to be only Group can now be |
| * Group or Range , the source code needs to ensure that it does not type cast |
| * wrongly a RangeJunction into a GroupJunction. Instead the source code |
| * should only type cast it to AbstractGroupOrRangeJunction Case p.status = |
| * active and p.type = type1 and emp.id >10 and p.id > 10 and p.id > 15 |
| */ |
| @Test |
| public void testMultipleIndependentRegionsWithRangeJunction() { |
| |
| try { |
| Region r3 = CacheUtils.createRegion("employees", Employee.class); |
| Set add1 = new HashSet(); |
| add1.add(new Address("411045", "Baner")); |
| add1.add(new Address("411001", "DholePatilRd")); |
| for (int i = 0; i < 4; i++) { |
| r3.put(i + "", new Employee("empName", (20 + i), i, "Mr.", (5000 + i), |
| add1)); |
| } |
| // compileFromClause returns a List<CompiledIteratorDef> |
| QCompiler compiler = new QCompiler(); |
| List list = compiler |
| .compileFromClause("/portfolio p, p.positions,/employees e"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| context.newScope(context.assosciateScopeID()); |
| |
| // qs.createIndex("statusIndex", |
| // IndexType.FUNCTIONAL,"status","/portfolio"); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio p"); |
| qs.createIndex("empid", IndexType.FUNCTIONAL, "empId", "/employees e"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef)iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| CompiledComparison cv[] = new CompiledComparison[5]; |
| cv[0] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral(new String("active")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "type"), new CompiledLiteral(new String("type1")), |
| OQLLexerTokenTypes.TOK_EQ); |
| |
| cv[2] = new CompiledComparison(new CompiledPath(new CompiledID("e"), |
| "empId"), new CompiledLiteral(new Integer(10)), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(10)), OQLLexerTokenTypes.TOK_GT); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(15)), OQLLexerTokenTypes.TOK_GT); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("OO is null", oo); |
| assertTrue("Filter operand of OO not AllGroupJunction", |
| oo.filterOperand instanceof AllGroupJunction); |
| AllGroupJunction agj = (AllGroupJunction)oo.filterOperand; |
| List filterableCC = agj.getGroupOperands(); |
| assertTrue(agj.getIterOperands().isEmpty()); |
| assertTrue(agj.getGroupOperands().size() == 2); |
| assertTrue(agj.getGroupOperands().get(0) instanceof GroupJunction |
| || agj.getGroupOperands().get(1) instanceof GroupJunction); |
| assertTrue(agj.getGroupOperands().get(0) instanceof RangeJunction |
| || agj.getGroupOperands().get(1) instanceof RangeJunction); |
| RangeJunction rj = null; |
| if (agj.getGroupOperands().get(0) instanceof RangeJunction) { |
| rj = (RangeJunction)agj.getGroupOperands().get(0); |
| } |
| else { |
| rj = (RangeJunction)agj.getGroupOperands().get(1); |
| } |
| |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[4]); |
| assertNotNull(oo1.iterateOperand); |
| assertTrue(((CompiledJunction)oo1.iterateOperand).getOperands().contains( |
| cv[0])); |
| assertTrue(((CompiledJunction)oo1.iterateOperand).getOperands().contains( |
| cv[1])); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed sue to Exception = " + e); |
| } |
| |
| } |
| |
| /** ********************************************************************** */ |
| // Asif: Since this is a single region & part fropm Group Junction |
| // no other filter is there , we shoudl get a SingleGroupJucntion as |
| // filter operand of CompiledJunction & not iter operand in Compiled |
| // Juncion |
| @Test |
| public void testOrganizedOperandsSingleGroupJunctionSingleFilter() { |
| // compileFromClause returns a List<CompiledIteratorDef> |
| QCompiler compiler = new QCompiler(); |
| List list = compiler.compileFromClause("/portfolio p, p.positions"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils.getCache()); |
| context.newScope(context.assosciateScopeID()); |
| try { |
| qs.createIndex("statusIndex", IndexType.FUNCTIONAL, "status", |
| "/portfolio"); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef)iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| CompiledComparison cv[] = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral(new String("active")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[2] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "type"), new CompiledLiteral(new String("type1")), |
| OQLLexerTokenTypes.TOK_EQ); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("The Organized operand object is null", oo); |
| assertTrue( |
| "Filter Operand did not happen to be an instance of GroupJunction", |
| oo.filterOperand instanceof GroupJunction); |
| assertNull("Iterate Operand not coming out to be null", |
| oo.iterateOperand); |
| assertTrue("The Conditions in GroupJunction not equal to 3", |
| ((GroupJunction)oo.filterOperand).getOperands().size() == 3); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed sue to Exception = " + e); |
| } |
| } |
| |
| // Asif: Since this is a single region & apart from GroupJunction |
| // there exists another filter , We shoudl get two Filter operands |
| // One as GroupJunction & the other one the other Filter operand. |
| // The un indexed condition should become part of iter operand |
| // of CompiledJunction |
| @Test |
| public void testOrganizedOperandsSingleGroupJunctionMultipleFilter() { |
| // compileFromClause returns a List<CompiledIteratorDef> |
| QCompiler compiler = new QCompiler(); |
| List list = compiler.compileFromClause("/portfolio p, p.positions"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils.getCache()); |
| context.newScope(context.assosciateScopeID()); |
| try { |
| qs.createIndex("statusIndex", IndexType.FUNCTIONAL, "status", |
| "/portfolio"); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef)iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| CompiledComparison cv[] = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral(new String("active")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[2] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "type"), new CompiledLiteral(new String("type1")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[3] = new CompiledComparison(new CompiledLiteral(Boolean.TRUE), |
| new CompiledLiteral(Boolean.TRUE), OQLLexerTokenTypes.TOK_EQ); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("OrganizedOperand object is null", oo); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type CompiledJunction", |
| oo.filterOperand instanceof CompiledJunction); |
| CompiledJunction temp = (CompiledJunction)oo.filterOperand; |
| List operands = temp.getOperands(); |
| assertTrue("The number of Filter operands not coming to be 2", operands |
| .size() == 2); |
| assertTrue( |
| "The independent operand shoudl be the first operand of the set of Filter Operands", |
| operands.get(0) == cv[3]); |
| assertTrue(operands.get(1) instanceof GroupJunction); |
| List temp1 = ((GroupJunction)operands.get(1)).getOperands(); |
| assertTrue( |
| "The number & nature of CompiledComparison of Group Junction not as expected", |
| temp1.get(0) == cv[0]); |
| assertTrue( |
| "The number & nature of CompiledComparison of Group Junction not as expected", |
| temp1.get(1) == cv[1]); |
| assertNotNull("The iter operand of OO is null", oo.iterateOperand); |
| assertTrue("IterOperand of OO not as expectd", oo.iterateOperand == cv[2]); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed sue to Exception = " + e); |
| } |
| } |
| |
| //Asif: There are two regions in query but since the conditions in where |
| // clause |
| //pertain to single region , we still will have a GroupJunction as a filter |
| // operand. |
| // Since there is only One Filter condition , we should have iter operand |
| // as null; |
| @Test |
| public void testOrganizedOperandsGroupJunctionSingleFilterDoubleRegion() { |
| try { |
| Region r3 = CacheUtils.createRegion("employees", Employee.class); |
| Set add1 = new HashSet(); |
| add1.add(new Address("411045", "Baner")); |
| add1.add(new Address("411001", "DholePatilRd")); |
| for (int i = 0; i < 4; i++) { |
| r3.put(i + "", new Employee("empName", (20 + i), i, "Mr.", (5000 + i), |
| add1)); |
| } |
| // compileFromClause returns a List<CompiledIteratorDef> |
| QCompiler compiler = new QCompiler(); |
| List list = compiler |
| .compileFromClause("/portfolio p, p.positions,/employees e"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils.getCache()); |
| context.newScope(context.assosciateScopeID()); |
| |
| qs.createIndex("statusIndex", IndexType.FUNCTIONAL, "status", |
| "/portfolio"); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef) iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| CompiledComparison cv[] = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral(new String("active")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[2] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "type"), new CompiledLiteral(new String("type1")), |
| OQLLexerTokenTypes.TOK_EQ); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("OO turning out to be null", oo); |
| assertTrue("Filter operand of OO not a GroupJunction", |
| oo.filterOperand instanceof GroupJunction); |
| GroupJunction temp = (GroupJunction) oo.filterOperand; |
| List operands = temp.getOperands(); |
| assertTrue( |
| "No. of conditions in Group Junction not as expected of size 3", |
| operands.size() == 3); |
| assertNull("The iter operand of OO should have bee null", |
| oo.iterateOperand); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed due to Exception = " + e); |
| } |
| } |
| |
| //Asif: There are two regions in query with a equi join condition. The other |
| // conditions do not have index |
| // on them. In such case we should have single CompositeGroupJunction . The |
| // filterable cc list |
| // size should be 1. |
| @Test |
| public void testOrganizedOperandsSingleCompositeGroupJunctionSingleFilterDoubleRegionWithNoGroupJunction() { |
| try { |
| Region r3 = CacheUtils.createRegion("employees", Employee.class); |
| Set add1 = new HashSet(); |
| add1.add(new Address("411045", "Baner")); |
| add1.add(new Address("411001", "DholePatilRd")); |
| for (int i = 0; i < 4; i++) { |
| r3.put(i + "", new Employee("empName", (20 + i), i, "Mr.", (5000 + i), |
| add1)); |
| } |
| // compileFromClause returns a List<CompiledIteratorDef> |
| QCompiler compiler = new QCompiler(); |
| List list = compiler |
| .compileFromClause("/portfolio p, p.positions,/employees e"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils.getCache()); |
| context.newScope(context.assosciateScopeID()); |
| |
| //qs.createIndex("statusIndex", |
| // IndexType.FUNCTIONAL,"status","/portfolio"); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio"); |
| qs.createIndex("empid", IndexType.FUNCTIONAL, "empId", "/employees"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef) iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| CompiledComparison cv[] = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral(new String("active")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "type"), new CompiledLiteral(new String("type1")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[2] = new CompiledComparison(new CompiledPath(new CompiledID("e"), |
| "age"), new CompiledLiteral(new Integer(1)), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[3] = new CompiledComparison(new CompiledPath(new CompiledID("e"), |
| "empId"), new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_EQ); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("OO is null", oo); |
| assertTrue("Filter operand of OO not CompositeGroupJunction", |
| oo.filterOperand instanceof CompositeGroupJunction); |
| CompositeGroupJunction cgj = (CompositeGroupJunction) oo.filterOperand; |
| List filterableCC = cgj.getFilterableCCList(); |
| assertTrue("No. of filterable CC not equal to 1", |
| filterableCC.size() == 1); |
| assertNull( |
| "No GroupJunction inside CompositeGroupJunction should have existed", |
| cgj.getGroupJunctionList()); |
| assertTrue(" Complete expansion flag should have been true", cgj |
| .getExpansionFlag()); |
| assertNotNull("Iter operands list in CGJ should not be null", cgj |
| .getIterOperands()); |
| assertTrue( |
| " The size of itr operands should be 3 but size happens to be = " |
| + cgj.getIterOperands().size(), cgj.getIterOperands().size() == 3); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed sue to Exception = " + e); |
| } |
| } |
| |
| // Asif: There are two regions in query with the conditions in where clause |
| //for both the regions ,but as only conditions belonging to only |
| // one group is filter evaluatable , we will have a GroupJunction as a filter |
| // operand. |
| // Since there are two filter operands, the iter operands belonging to the |
| // other Group ( which |
| // is not filter evaluatable , should get added to the iter operands of |
| // CompiledJunction |
| // So the iter operand of CompiledJunction should |
| // have one value ( which originally would have gone to GroupJunction) |
| @Test |
| public void testOrganizedOperandsGroupJunctionDoubleFilterDoubleRegion() { |
| try { |
| Region r3 = CacheUtils.createRegion("employees", Employee.class); |
| Set add1 = new HashSet(); |
| add1.add(new Address("411045", "Baner")); |
| add1.add(new Address("411001", "DholePatilRd")); |
| for (int i = 0; i < 4; i++) { |
| r3.put(i + "", new Employee("empName", (20 + i), i, "Mr.", (5000 + i), |
| add1)); |
| } |
| // compileFromClause returns a List<CompiledIteratorDef> |
| QCompiler compiler = new QCompiler(); |
| List list = compiler |
| .compileFromClause("/portfolio p, p.positions,/employees e"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils.getCache()); |
| context.newScope(context.assosciateScopeID()); |
| |
| qs.createIndex("statusIndex", IndexType.FUNCTIONAL, "status", |
| "/portfolio"); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef) iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| CompiledComparison cv[] = new CompiledComparison[5]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral(new String("active")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[2] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "type"), new CompiledLiteral(new String("type1")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[3] = new CompiledComparison(new CompiledPath(new CompiledID("e"), |
| "age"), new CompiledLiteral(new Integer(1)), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[4] = new CompiledComparison(new CompiledLiteral(Boolean.TRUE), |
| new CompiledLiteral(Boolean.TRUE), OQLLexerTokenTypes.TOK_EQ); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("OO is null", oo); |
| assertTrue("Filter Operand of OO is not CompiledJunction", |
| oo.filterOperand instanceof CompiledJunction); |
| CompiledJunction cj1 = ((CompiledJunction) oo.filterOperand); |
| assertTrue("Filter opreands of OO not of size 2", cj1.getOperands() |
| .size() == 2); |
| assertTrue("Indpenednet operand is not the first operand of OO filter", |
| cj1.getOperands().get(0) == cv[4]); |
| assertTrue("Second Operand of OO Filter not a GroupJunction ", cj1 |
| .getOperands().get(1) instanceof GroupJunction); |
| GroupJunction gj = ((GroupJunction) cj1.getOperands().get(1)); |
| List opsGJ = gj.getOperands(); |
| //List its = agj.getIterOperands(); |
| assertTrue("Operands in GroupJunction not of size 3", opsGJ.size() == 3); |
| assertTrue("Complete expansion flag of GroupJunction should be true", gj |
| .getExpansionFlag()); |
| assertNotNull("Iter operand of OO is null", oo.iterateOperand); |
| assertTrue("IterOperand of OO not the condition which was expected", |
| oo.iterateOperand == cv[3]); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed sue to Exception = " + e); |
| } |
| } |
| |
| // Asif: There are two regions in query with the conditions in where clause |
| //for both the regions such that both the GroupJunctions are filter |
| // evaluatable |
| // So we should get an AllGroupJunction as a result of organizeOperands of |
| // CompiledJunction |
| @Test |
| public void testOrganizedOperandsAllGroupJunctionWithTwoGroupJunctions() { |
| try { |
| Region r3 = CacheUtils.createRegion("employees", Employee.class); |
| Set add1 = new HashSet(); |
| add1.add(new Address("411045", "Baner")); |
| add1.add(new Address("411001", "DholePatilRd")); |
| for (int i = 0; i < 4; i++) { |
| r3.put(i + "", new Employee("empName", (20 + i), i, "Mr.", (5000 + i), |
| add1)); |
| } |
| // compileFromClause returns a List<CompiledIteratorDef> |
| QCompiler compiler = new QCompiler(); |
| List list = compiler |
| .compileFromClause("/portfolio p, p.positions,/employees e"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils.getCache()); |
| context.newScope(context.assosciateScopeID()); |
| |
| qs.createIndex("statusIndex", IndexType.FUNCTIONAL, "status", |
| "/portfolio"); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio"); |
| qs.createIndex("empidIndex", IndexType.FUNCTIONAL, "empId", "/employees"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef) iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| CompiledComparison cv[] = new CompiledComparison[5]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral(new String("active")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[2] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "type"), new CompiledLiteral(new String("type1")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[3] = new CompiledComparison(new CompiledPath(new CompiledID("e"), |
| "age"), new CompiledLiteral(new Integer(1)), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[4] = new CompiledComparison(new CompiledPath(new CompiledID("e"), |
| "empId"), new CompiledLiteral(new Integer(1)), |
| OQLLexerTokenTypes.TOK_EQ); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("OO is null", oo); |
| assertTrue("Filter Operand of OO is not AllGroupJunction", |
| oo.filterOperand instanceof AllGroupJunction); |
| AllGroupJunction agj = ((AllGroupJunction) oo.filterOperand); |
| assertTrue("No of GroupJunctions should be2", agj.getGroupOperands() |
| .size() == 2); |
| assertNull("Iter operand of OO is not null", oo.iterateOperand); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed sue to Exception = " + e); |
| } |
| } |
| |
| //Asif: There are 3 regions in the query. Two regionsare tied by a join which |
| // will create |
| // a CompositeGroupJunction . One region has an independent condition & so it |
| // will |
| // form a GroupJunction . Sinc ethis GroupJunction is outside |
| // CompositeGroupJunction |
| // we will have an AllGroupJunction. Within the CompositeGroupJunction , we |
| // will have one |
| //GroupJunction. One Filterable CC & no iter operand. Howver th eiet operand |
| // of |
| //allGroupJunction will be null & will contain one operand |
| @Test |
| public void testOrganizedOperandsAllGroupJunctionWithOneGroupJunctionAndOneCompositeGroupJunction() { |
| try { |
| Region r3 = CacheUtils.createRegion("employees", Employee.class); |
| Set add1 = new HashSet(); |
| add1.add(new Address("411045", "Baner")); |
| add1.add(new Address("411001", "DholePatilRd")); |
| for (int i = 0; i < 4; i++) { |
| r3.put(i + "", new Employee("empName", (20 + i), i, "Mr.", (5000 + i), |
| add1)); |
| } |
| Region r4 = CacheUtils.createRegion("portfolio1", Portfolio.class); |
| for (int i = 0; i < 4; i++) { |
| r4.put(i + "", new Portfolio(i)); |
| } |
| // compileFromClause returns a List<CompiledIteratorDef> |
| QCompiler compiler = new QCompiler(); |
| List list = compiler |
| .compileFromClause("/portfolio p, p.positions,/employees e, /portfolio1 p1"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils.getCache()); |
| context.newScope(context.assosciateScopeID()); |
| |
| qs.createIndex("statusIndex", IndexType.FUNCTIONAL, "status", |
| "/portfolio"); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio"); |
| qs.createIndex("idIndex1", IndexType.FUNCTIONAL, "ID", "/portfolio1"); |
| qs.createIndex("empidIndex", IndexType.FUNCTIONAL, "empId", "/employees"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef) iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| CompiledComparison cv[] = new CompiledComparison[5]; |
| cv[0] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "status"), new CompiledLiteral(new String("active")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "type"), new CompiledLiteral(new String("type1")), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[2] = new CompiledComparison(new CompiledPath(new CompiledID("e"), |
| "age"), new CompiledLiteral(new Integer(1)), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[3] = new CompiledComparison(new CompiledPath(new CompiledID("e"), |
| "empId"), new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[4] = new CompiledComparison(new CompiledPath(new CompiledID("p1"), |
| "ID"), new CompiledLiteral(new Integer(2)), OQLLexerTokenTypes.TOK_EQ); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("OO is null", oo); |
| assertTrue("Filter Operand of OO is not AllGroupJunction", |
| oo.filterOperand instanceof AllGroupJunction); |
| AllGroupJunction agj = ((AllGroupJunction) oo.filterOperand); |
| assertTrue("No of GroupJunctions should be 2", agj.getGroupOperands() |
| .size() == 2); |
| assertNotNull("The Iter operand should be not null", agj |
| .getIterOperands()); |
| assertTrue("The Iter operand should be of size = 1", agj |
| .getIterOperands().size() == 1); |
| assertTrue( |
| "The Iter operand not matching the correct compiled comaprison", agj |
| .getIterOperands().get(0) == cv[2]); |
| //The List below should have two elements . One a GroupJunction & another |
| // a CompositeGroupJunction |
| List groupOps = agj.getGroupOperands(); |
| Iterator itr = groupOps.iterator(); |
| CompositeGroupJunction cgj = null; |
| GroupJunction gj = null; |
| while (itr.hasNext()) { |
| Object temp = itr.next(); |
| if (temp instanceof CompositeGroupJunction) { |
| cgj = (CompositeGroupJunction) temp; |
| } |
| else if (temp instanceof GroupJunction) { |
| gj = (GroupJunction) temp; |
| } |
| else { |
| fail(" The junction list in AllGroupJunction is not correct"); |
| } |
| } |
| assertTrue(" The CGJ formed is incorrect", |
| cgj.getGroupJunctionList() != null |
| && cgj.getGroupJunctionList().size() == 1 |
| && cgj.getIterOperands() == null |
| && cgj.getFilterableCCList().get(0) == cv[3] |
| && !cgj.getExpansionFlag()); |
| assertTrue(" The GJ inside CGJ is incorrect", ((GroupJunction) cgj |
| .getGroupJunctionList().get(0)).getOperands().size() == 2 |
| && !((GroupJunction) cgj.getGroupJunctionList().get(0)) |
| .getExpansionFlag()); |
| assertTrue(" The GJ of AllGroupJunction is incorrect", !gj |
| .getExpansionFlag() |
| && gj.getOperands().size() == 1 && gj.getOperands().get(0) == cv[4]); |
| assertNull("Iter operand of OO is not null", oo.iterateOperand); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed sue to Exception = " + e); |
| } |
| } |
| |
| //Asif: There are two regions in query with a equi join condition. The other |
| // conditions do not have index |
| // on them. In such case we should have single CompositeGroupJunction . The |
| // filterable cc list |
| // size should be 1. |
| @Test |
| public void testOrganizedOperandsSingleCompositeGroupJunctionSingleFilterFourRegionsWithNoGroupJunction() { |
| try { |
| Region r3 = CacheUtils.createRegion("employees", Employee.class); |
| Set add1 = new HashSet(); |
| add1.add(new Address("411045", "Baner")); |
| add1.add(new Address("411001", "DholePatilRd")); |
| for (int i = 0; i < 4; i++) { |
| r3.put(i + "", new Employee("empName", (20 + i), i, "Mr.", (5000 + i), |
| add1)); |
| } |
| Region r2 = CacheUtils.createRegion("employees1", Employee.class); |
| Set add2 = new HashSet(); |
| add2.add(new Address("411045", "Baner")); |
| add2.add(new Address("411001", "DholePatilRd")); |
| for (int i = 0; i < 4; i++) { |
| r2.put(i + "", new Employee("empName", (20 + i), i, "Mr.", (5000 + i), |
| add1)); |
| } |
| Region r4 = CacheUtils.createRegion("portfolio1", Portfolio.class); |
| for (int i = 0; i < 4; i++) { |
| r4.put(i + "", new Portfolio(i)); |
| } |
| // compileFromClause returns a List<CompiledIteratorDef> |
| QCompiler compiler = new QCompiler(); |
| List list = compiler |
| .compileFromClause("/portfolio p, p.positions,/employees e, /employees1 e1, /portfolio p1"); |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils.getCache()); |
| context.newScope(context.assosciateScopeID()); |
| |
| //qs.createIndex("statusIndex", |
| // IndexType.FUNCTIONAL,"status","/portfolio"); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio"); |
| qs.createIndex("empid", IndexType.FUNCTIONAL, "empId", "/employees"); |
| qs.createIndex("empid1", IndexType.FUNCTIONAL, "empId", "/employees1"); |
| qs.createIndex("idIndex1", IndexType.FUNCTIONAL, "ID", "/portfolio1"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef) iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| CompiledComparison cv[] = new CompiledComparison[3]; |
| /* |
| * cv[0] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| * "status"), new CompiledLiteral(new String("active")), |
| * OQLLexerTokenTypes.TOK_EQ); cv[1] = new CompiledComparison(new |
| * CompiledPath(new CompiledID("p"), "type"), new CompiledLiteral(new |
| * String("type1")), OQLLexerTokenTypes.TOK_EQ); cv[2] = new |
| * CompiledComparison(new CompiledPath(new CompiledID("e"), "age"), new |
| * CompiledLiteral(new Integer(1)), OQLLexerTokenTypes.TOK_EQ); |
| */ |
| cv[0] = new CompiledComparison(new CompiledPath(new CompiledID("e"), |
| "empId"), new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison(new CompiledPath(new CompiledID("e1"), |
| "empId"), new CompiledPath(new CompiledID("p1"), "ID"), |
| OQLLexerTokenTypes.TOK_EQ); |
| cv[2] = new CompiledComparison(new CompiledPath(new CompiledID("e1"), |
| "empId"), new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_EQ); |
| CompiledJunction cj = new CompiledJunction(cv, |
| OQLLexerTokenTypes.LITERAL_and); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| OrganizedOperands oo = cj.testOrganizedOperands(context); |
| assertNotNull("OO is null", oo); |
| assertTrue("Filter operand of OO not CompositeGroupJunction", |
| oo.filterOperand instanceof CompositeGroupJunction); |
| CompositeGroupJunction cgj = (CompositeGroupJunction) oo.filterOperand; |
| List filterableCC = cgj.getFilterableCCList(); |
| assertTrue("No. of filterable CC not equal to 3", |
| filterableCC.size() == 3); |
| assertNull( |
| "No GroupJunction inside CompositeGroupJunction should have existed", |
| cgj.getGroupJunctionList()); |
| assertTrue(" Complete expansion flag should have been true", cgj |
| .getExpansionFlag()); |
| /* |
| * assertNotNull("Iter operands list in CGJ should not be null", cgj |
| * .getIterOperands()); assertTrue( " The size of itr operands should be 3 |
| * but size happens to be = " + cgj.getIterOperands().size(), |
| * cgj.getIterOperands().size() == 3); |
| */ |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Test failed sue to Exception = " + e); |
| } |
| } |
| |
| |
| // Tests for plain creation of RangeJunction ( single or within a Group or CompositeGroup or AllGroup ) |
| //which is agnostic of whether the RangeJunction is of type AND or OR |
| ////////////////////////////////////////////////////////////////////////////////////// |
| /** |
| * Tests the creation of a single RangeJunction if the CompiledJunction only |
| * contains same index condition without iter operand for AND |
| */ |
| @Test |
| public void testOrganizedOperandsSingleRangeJunctionCreationWithNoIterOperandForAND() { |
| LogWriter logger = CacheUtils.getLogger(); |
| try { |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| CompiledComparison cv[] = null; |
| cv = new CompiledComparison[12]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[5] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| cv[6] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_EQ); |
| cv[7] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| cv[8] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[9] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[10] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[11] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertNotNull("OrganizedOperand object is null", oo); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| assertEquals(cv.length, rj.getOperands().size()); |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| } |
| |
| /** |
| * Tests the creation of a single RangeJunction if the CompiledJunction only |
| * contains same index condition and an iter operand for AND |
| */ |
| @Test |
| public void testOrganizedOperandsSingleRangeJunctionCreationWithIterOperandForAND() { |
| LogWriter logger = CacheUtils.getCache().getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| cv = new CompiledComparison[13]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[5] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| cv[6] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_EQ); |
| cv[7] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| cv[8] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[9] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[10] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[11] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| cv[12] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "createTime"), new CompiledLiteral(new Long(7)), |
| OQLLexerTokenTypes.TOK_NE); |
| |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertNotNull("OrganizedOperand object is null", oo); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| assertEquals(cv.length, rj.getOperands().size()); |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| } |
| |
| /** |
| * Tests the creation of a single RangeJunction if the CompiledJunction only |
| * contains same index condition without iter operand for OR |
| */ |
| public void _testOrganizedOperandsSingleRangeJunctionCreationWithNoIterOperandForOR() { |
| LogWriter logger = CacheUtils.getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| cv = new CompiledComparison[12]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[5] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| cv[6] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_EQ); |
| cv[7] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| cv[8] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[9] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[10] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[11] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_or, cv, context); |
| assertNotNull("OrganizedOperand object is null", oo); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type CompiledJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| assertEquals(cv.length, rj.getOperands().size()); |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| } |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| ///***************************BEGIN*********************************************// |
| //Tests the RangeJunction's organizeOperands for the correct creation of Evaluator. |
| //These tests are dependent on whether the RangeJunction is of type AND or OR |
| // All the tests below are for AND |
| /** |
| * Tests the functionality of organizedOperands function of a RangeJunction |
| * which is an AND with no IterOperand. If the RangeJunction boils down to a |
| * single condition which can be evalauted as a CompiledComparison then the |
| * filter operand will be a CompiledComparison |
| * |
| */ |
| @Test |
| public void testOrganizedOperandsOfSingleRangeJunctionWithNoIterOperandForAND_1() { |
| LogWriter logger = CacheUtils.getCache().getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_LT); |
| |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertNotNull("OrganizedOperand object is null", oo); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| assertEquals(cv.length, rj.getOperands().size()); |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertNotNull(oo1); |
| assertNull(oo1.iterateOperand); |
| assertNotNull(oo1.filterOperand); |
| assertEquals(oo1.filterOperand, cv[2]); |
| |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| } |
| |
| /** |
| * Tests the functionality of organizedOperands function of a RangeJunction |
| * which is an AND with no IterOperand but where the operator needs |
| * reflection. as the condition is Key > Path ( which means Path less than |
| * Key) If the RangeJunction boils down toa single condition which can be |
| * evalauted as a CompiledComparison then the filter operand will be a |
| * CompiledComparison |
| * |
| */ |
| @Test |
| public void testOrganizedOperandsOfSingleRangeJunctionWithNoIterOperandForAND_2() { |
| LogWriter logger = CacheUtils.getCache().getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison(new CompiledLiteral(new Integer(2)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_GT); |
| |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertNotNull("OrganizedOperand object is null", oo); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| assertEquals(cv.length, rj.getOperands().size()); |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertNotNull(oo1); |
| assertNull(oo1.iterateOperand); |
| assertNotNull(oo1.filterOperand); |
| assertEquals(oo1.filterOperand, cv[2]); |
| |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| } |
| |
| |
| |
| |
| /** |
| * Tests the functionality of organizedOperands function of a RangeJunction |
| * which is an AND with a IterOperand but where the operator needs reflection. |
| * as the condition is Key > Path ( which means Path less than Key) The |
| * RangeJunction boils down to a single condition which can be evalauted as a |
| * CompiledComparison so the filter operand will be a CompiledComparison. Thus |
| * the organizdeOperand's filter operand will be a CompiledComparison while |
| * its Iteroperand will be a CompiledComparison |
| * |
| */ |
| @Test |
| public void testOrganizedOperandsOfSingleRangeJunctionWithIterOperandForAND_1() { |
| LogWriter logger = CacheUtils.getCache().getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison(new CompiledLiteral(new Integer(2)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[3] = new CompiledComparison(new CompiledLiteral(new Integer(2)), |
| new CompiledPath(new CompiledID("p"), "createTime"), |
| OQLLexerTokenTypes.TOK_GT); |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertNotNull("OrganizedOperand object is null", oo); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| assertEquals(cv.length, rj.getOperands().size()); |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertNotNull(oo1); |
| assertEquals(cv[3], oo1.iterateOperand); |
| assertEquals(oo1.filterOperand, cv[2]); |
| |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| } |
| |
| |
| /** |
| * Tests the functionality of organizedOperands function of a RangeJunction |
| * which is an AND with two IterOperands but where the operator needs |
| * reflection. as the condition is Key > Path ( which means Path less than |
| * Key) The RangeJunction boils down to a single condition which can be |
| * evalauted as a CompiledComparison so the filter operand will be a |
| * CompiledComparison. Thus the organizdeOperand's filter operand will be a |
| * CompiledComparison while its Iteroperand will be a CompiledJunction |
| * |
| */ |
| @Test |
| public void testOrganizedOperandsOfSingleRangeJunctionWithTwoIterOperandsForAND_2() { |
| LogWriter logger = CacheUtils.getCache().getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| cv = new CompiledComparison[5]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison(new CompiledLiteral(new Integer(2)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[3] = new CompiledComparison(new CompiledLiteral(new Integer(2)), |
| new CompiledPath(new CompiledID("p"), "createTime"), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[4] = new CompiledComparison(new CompiledLiteral(new String("xyz")), |
| new CompiledPath(new CompiledID("p"), "getPk"), |
| OQLLexerTokenTypes.TOK_GT); |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertNotNull("OrganizedOperand object is null", oo); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| assertEquals(cv.length, rj.getOperands().size()); |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertNotNull(oo1); |
| assertTrue(oo1.iterateOperand instanceof CompiledJunction); |
| assertTrue(oo1.iterateOperand.getChildren().size() == 2); |
| assertTrue(oo1.iterateOperand.getChildren().get(0) == cv[3]); |
| assertTrue(oo1.iterateOperand.getChildren().get(1) == cv[4]); |
| assertEquals(oo1.filterOperand, cv[2]); |
| |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| } |
| |
| /** |
| * Tests the functionality of organizedOperands function of a RangeJunction |
| * which is an AND with two IterOperands but where the operator needs |
| * reflection. as the condition is Key > Path ( which means Path less than |
| * Key) The RangeJunction boils down to a condition and a NOT EQUAL which will |
| * be evalauted as a SingleCondnEvaluator so the filter operand will be a |
| * SingleCondnEvaluator. Its Iter operand will be a CompiledJunction |
| * |
| */ |
| @Test |
| public void testOrganizedOperandsOfSingleRangeJunctionWithTwoIterOperandsForAND_3() { |
| LogWriter logger = CacheUtils.getCache().getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| // case1: a <7 and a<=5 and 2>a and 2> createTime and "xyz" > pid |
| // and 100 != a and 200 !=a and 1 != a |
| cv = new CompiledComparison[8]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison(new CompiledLiteral(new Integer(2)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[3] = new CompiledComparison(new CompiledLiteral(new Integer(2)), |
| new CompiledPath(new CompiledID("p"), "createTime"), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[4] = new CompiledComparison(new CompiledLiteral(new String("xyz")), |
| new CompiledPath(new CompiledID("p"), "getPk"), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[5] = new CompiledComparison(new CompiledLiteral(new Integer(100)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_NE); |
| cv[6] = new CompiledComparison(new CompiledLiteral(new Integer(200)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_NE); |
| |
| cv[7] = new CompiledComparison(new CompiledLiteral(new Integer(1)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_NE); |
| |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertNotNull("OrganizedOperand object is null", oo); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| assertEquals(cv.length, rj.getOperands().size()); |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertNotNull(oo1); |
| assertTrue(oo1.iterateOperand instanceof CompiledJunction); |
| assertTrue(oo1.iterateOperand.getChildren().size() == 2); |
| assertTrue(oo1.iterateOperand.getChildren().get(0) == cv[3]); |
| assertTrue(oo1.iterateOperand.getChildren().get(1) == cv[4]); |
| assertTrue(RangeJunction |
| .isInstanceOfSingleCondnEvaluator(oo1.filterOperand)); |
| Set keysToRemove = RangeJunction.getKeysToBeRemoved(oo1.filterOperand); |
| assertEquals(1, keysToRemove.size()); |
| assertTrue(keysToRemove.contains(new Integer(1))); |
| |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| } |
| |
| /** |
| * Tests the functionality of organizedOperands function of a RangeJunction |
| * which is an AND with two IterOperands but where the operator needs |
| * reflection. as the condition is Key <= Path ( which means Path less than |
| * Key) The RangeJunction boils down to a condition and a NOT EQUAL which will |
| * be evalauted as a SingleCondnEvaluator so the filter operand will be a |
| * SingleCondnEvaluator. Its Iter operand will be a CompiledJunction. This |
| * checks for the SingleCondnEvaluator with > operator |
| * |
| */ |
| @Test |
| public void testOrganizedOperandsOfSingleRangeJunctionWithTwoIterOperandsForAND_4() { |
| LogWriter logger = CacheUtils.getCache().getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| cv = new CompiledComparison[7]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_GT); |
| cv[2] = new CompiledComparison(new CompiledLiteral(new Integer(2)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_LT); |
| cv[3] = new CompiledComparison(new CompiledLiteral(new Integer(2)), |
| new CompiledPath(new CompiledID("p"), "createTime"), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[4] = new CompiledComparison(new CompiledLiteral(new String("xyz")), |
| new CompiledPath(new CompiledID("p"), "getPk"), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[5] = new CompiledComparison(new CompiledLiteral(new Integer(100)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_NE); |
| cv[6] = new CompiledComparison(new CompiledLiteral(new Integer(200)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_NE); |
| |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertNotNull("OrganizedOperand object is null", oo); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| assertEquals(cv.length, rj.getOperands().size()); |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertNotNull(oo1); |
| assertTrue(oo1.iterateOperand instanceof CompiledJunction); |
| assertTrue(oo1.iterateOperand.getChildren().size() == 2); |
| assertTrue(oo1.iterateOperand.getChildren().get(0) == cv[3]); |
| assertTrue(oo1.iterateOperand.getChildren().get(1) == cv[4]); |
| assertTrue(RangeJunction |
| .isInstanceOfSingleCondnEvaluator(oo1.filterOperand)); |
| Set keysToRemove = RangeJunction.getKeysToBeRemoved(oo1.filterOperand); |
| assertEquals(2, keysToRemove.size()); |
| assertTrue(keysToRemove.contains(new Integer(100))); |
| assertTrue(keysToRemove.contains(new Integer(200))); |
| |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| } |
| |
| /** |
| * Tests the functionality of organizedOperands function of a RangeJunction |
| * for various combinations of GREATER THAN and Not equal conditions etc which |
| * results in a SingleCondnEvaluator or CompiledComparison for a AND junction. |
| * It checks the correctness of the operator & the evaluated key |
| * |
| */ |
| @Test |
| public void testOrganizedOperandsSingleCondnEvalMultipleGreaterThanInEqualities_AND() { |
| LogWriter logger = CacheUtils.getCache().getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| /** **********For ALL greater or greater than combinations********* */ |
| // Case 1 : a >7 and a >=4 and a > 5 and a > 7 |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_GE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_GT); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[0] || oo1.filterOperand == cv[3]); |
| // Case2: a>=8 and a >4 and a>=6 and a>=8 |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_GE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_GE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[0] || oo1.filterOperand == cv[3]); |
| cv = new CompiledComparison[5]; |
| // Case 3 : 7 < a and a >=4 and a > 5 and a >= 7 and a != 15 |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_GE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_GT); |
| cv[3] = new CompiledComparison(new CompiledLiteral(new Integer(7)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_LT); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(15)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction |
| .isInstanceOfSingleCondnEvaluator(oo1.filterOperand)); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_GT); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(7))); |
| assertTrue(RangeJunction.getIndex(oo1.filterOperand).getName().equals( |
| "idIndex")); |
| assertTrue(RangeJunction.getKeysToBeRemoved(oo1.filterOperand).size() == 1 |
| && RangeJunction.getKeysToBeRemoved(oo1.filterOperand).iterator() |
| .next().equals(new Integer(15))); |
| // Case 4 : 7 < a and a >=7 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison(new CompiledLiteral(new Integer(7)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_LT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[0]); |
| // Case 5 : a > 7 and a >=7 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[0]); |
| |
| // Case 6 : a >= 7 and a >7 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[1]); |
| |
| // Case 7 : a >= 8 and a >7 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[0]); |
| |
| // Case 8 : a >=8 and a > =7 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[0]); |
| |
| // Case 9 : a >=7 and a > =8 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[1]); |
| |
| // Case 10 : 7 < a and a >=7 and a != 13 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison(new CompiledLiteral(new Integer(7)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_LT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(13)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(7))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_GT); |
| |
| // Case 11 : a > 7 and a >=7 and a != 13 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(13)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(7))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_GT); |
| |
| // Case 12 : a >= 7 and a >7 and a != 13 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(13)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(7))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_GT); |
| |
| // Case 13 : a >= 8 and a >7 and a != 13 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(13)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(8))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_GE); |
| |
| // Case 14 : a >=8 and a > =7 and a !=13 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(13)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(8))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_GE); |
| |
| // Case 15 : a >=7 and a > =8 and a != 13 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(13)), OQLLexerTokenTypes.TOK_NE); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(8))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_GE); |
| // Case 15 : a >=7 and a > =8 and a != 8 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(8))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_GE); |
| assertTrue(RangeJunction.getKeysToBeRemoved((oo1.filterOperand)) |
| .iterator().next().equals(new Integer(8))); |
| |
| // Case 16 : a >=7 and a > =8 and a != 7 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[1]); |
| |
| // Case 17 : a >=7 and a > =8 and a != 7 and a!=4 and a != 3 |
| cv = new CompiledComparison[5]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_NE); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(3)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[1]); |
| // Case 18 : a >=7 and a > =8 and a != 7 and a!=4 and a != 3 and a != 20 |
| // and a != 8 |
| cv = new CompiledComparison[7]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_NE); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(3)), OQLLexerTokenTypes.TOK_NE); |
| cv[5] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(20)), OQLLexerTokenTypes.TOK_NE); |
| cv[6] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_NE); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(8))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_GE); |
| Iterator itr = RangeJunction.getKeysToBeRemoved((oo1.filterOperand)) |
| .iterator(); |
| Object temp; |
| assertTrue((temp = itr.next()).equals(new Integer(8)) |
| || temp.equals(new Integer(20))); |
| assertTrue((temp = itr.next()).equals(new Integer(8)) |
| || temp.equals(new Integer(20))); |
| assertFalse(itr.hasNext()); |
| |
| // ////////////////////////////////////////////////////////////// |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| } |
| |
| /** |
| * Tests the functionality of organizedOperands function of a RangeJunction |
| * for various combinations of LESS THAN and Not equal conditions etc which |
| * results in a SingleCondnEvaluator or CompiledComparison for a AND junction. |
| * It checks the correctness of the operator & the evaluated key |
| * |
| */ |
| @Test |
| public void testOrganizedOperandsSingleCondnEvalMultipleLessThanInEqualities_AND() { |
| LogWriter logger = CacheUtils.getCache().getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| /** |
| * ******************For all LESS THAN OR LESS THAN EQUAL To |
| * ******************** |
| */ |
| // Case 1 : a < 7 and a <=4 and a < 5 and a <=4 |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LT); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_LE); |
| |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[1] || oo1.filterOperand == cv[3]); |
| // Case2: a<=8 and a < 12 and a <=10 and a<=8 |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(12)), OQLLexerTokenTypes.TOK_LT); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(10)), OQLLexerTokenTypes.TOK_LT); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_LT); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[0] || oo1.filterOperand == cv[3]); |
| cv = new CompiledComparison[5]; |
| // Case 3 : 3 >= a and a <=4 and a < 5 and a <= 3 and a != 1 |
| cv[0] = new CompiledComparison(new CompiledLiteral(new Integer(3)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LT); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(3)), OQLLexerTokenTypes.TOK_LE); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(1)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction |
| .isInstanceOfSingleCondnEvaluator(oo1.filterOperand)); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_LE); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(3))); |
| assertTrue(RangeJunction.getIndex(oo1.filterOperand).getName().equals( |
| "idIndex")); |
| assertTrue(RangeJunction.getKeysToBeRemoved(oo1.filterOperand).size() == 1 |
| && RangeJunction.getKeysToBeRemoved(oo1.filterOperand).iterator() |
| .next().equals(new Integer(1))); |
| // Case 4 : 3 > a and a <=2 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison(new CompiledLiteral(new Integer(3)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_LE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[1]); |
| // Case 5 : a < 7 and a <=7 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[0]); |
| |
| // Case 6 : a <= 7 and a <7 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[1]); |
| |
| // Case 7 : a <= 8 and a <9 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(9)), OQLLexerTokenTypes.TOK_LT); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[0]); |
| |
| // Case 8 : a <=8 and a <=10 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(10)), OQLLexerTokenTypes.TOK_LE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[0]); |
| |
| // Case 9 : a <=6 and a <= 5 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[1]); |
| |
| // Case 10 : 7 > a and a <=7 and a != 2 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison(new CompiledLiteral(new Integer(7)), |
| new CompiledPath(new CompiledID("p"), "ID"), |
| OQLLexerTokenTypes.TOK_GT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(7))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_LT); |
| assertTrue(RangeJunction.getKeysToBeRemoved(oo1.filterOperand).iterator() |
| .next().equals(new Integer(2))); |
| // Case 11 : a < 7 and a <=7 and a != 1 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(1)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(7))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_LT); |
| assertTrue(RangeJunction.getKeysToBeRemoved(oo1.filterOperand).iterator() |
| .next().equals(new Integer(1))); |
| // Case 12 : a <= 7 and a <7 and a != 1 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(1)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(7))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_LT); |
| assertTrue(RangeJunction.getKeysToBeRemoved(oo1.filterOperand).iterator() |
| .next().equals(new Integer(1))); |
| // Case 13 : a <= 8 and a <9 and a !=1 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(9)), OQLLexerTokenTypes.TOK_LT); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(1)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(8))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_LE); |
| assertTrue(RangeJunction.getKeysToBeRemoved(oo1.filterOperand).iterator() |
| .next().equals(new Integer(1))); |
| |
| // Case 14 : a <=8 and a <=9 and a !=1 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(9)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(1)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(8))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_LE); |
| assertTrue(RangeJunction.getKeysToBeRemoved(oo1.filterOperand).iterator() |
| .next().equals(new Integer(1))); |
| // Case 15 : a <=7 and a <=6 and a != 1 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(1)), OQLLexerTokenTypes.TOK_NE); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(6))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_LE); |
| assertTrue(RangeJunction.getKeysToBeRemoved(oo1.filterOperand).iterator() |
| .next().equals(new Integer(1))); |
| // Case 15 : a <=7 and a <= 6and a != 6 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(6))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_LE); |
| assertTrue(RangeJunction.getKeysToBeRemoved((oo1.filterOperand)) |
| .iterator().next().equals(new Integer(6))); |
| |
| // Case 16 : a <=7 and a <=6 and a != 7 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[1]); |
| |
| // Case 17 : a <=7 and a <=6 and a != 7 and a!=10 and a != 8 |
| cv = new CompiledComparison[5]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(10)), OQLLexerTokenTypes.TOK_NE); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[1]); |
| // Case 18 : a <=7 and a <=6 and a != 7 and a!=8 and a !=9 and a != 2 and |
| // a != 6 |
| cv = new CompiledComparison[7]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_NE); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(9)), OQLLexerTokenTypes.TOK_NE); |
| cv[5] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_NE); |
| cv[6] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_NE); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorKey(oo1.filterOperand) |
| .equals(new Integer(6))); |
| assertTrue(RangeJunction |
| .getSingleCondnEvaluatorOperator(oo1.filterOperand) == OQLLexerTokenTypes.TOK_LE); |
| Iterator itr = RangeJunction.getKeysToBeRemoved((oo1.filterOperand)) |
| .iterator(); |
| Object temp; |
| assertTrue((temp = itr.next()).equals(new Integer(2)) |
| || temp.equals(new Integer(6))); |
| assertTrue((temp = itr.next()).equals(new Integer(2)) |
| || temp.equals(new Integer(6))); |
| assertFalse(itr.hasNext()); |
| // ////////////////////////////////////////////////////////////// |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| } |
| |
| /** |
| * Tests the correct creation of NotEqualConditionEvaluator For AND junction |
| * |
| */ |
| @Test |
| public void testNotEqualConditionEvaluator_AND() { |
| LogWriter logger = CacheUtils.getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| /** |
| * ******************For all LESS THAN OR LESS THAN EQUAL To |
| * ******************** |
| */ |
| // Case 1 : a != 7 and a !=4 and a != 5 and a != 5 |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_NE); |
| |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction |
| .isInstanceOfNotEqualConditionEvaluator(oo1.filterOperand)); |
| Set keysRemove = RangeJunction.getKeysToBeRemoved(oo1.filterOperand); |
| assertTrue(keysRemove.size() == 3); |
| assertTrue(keysRemove.contains(new Integer(5))); |
| assertTrue(keysRemove.contains(new Integer(7))); |
| assertTrue(keysRemove.contains(new Integer(4))); |
| // Case 2 : a != 7 and a != null and a != undefined |
| CompiledValue[] cv1 = new CompiledValue[3]; |
| cv1[0] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| cv1[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(null), OQLLexerTokenTypes.TOK_NE); |
| cv1[2] = new CompiledUndefined( |
| new CompiledPath(new CompiledID("p"), "ID"), false); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv1, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof GroupJunction); |
| CompiledValue[] ops = ((GroupJunction)oo1.filterOperand)._operands; |
| // assertTrue(cv1[0] == ops[0] || cv1[0] == ops[1] || cv1[0] == ops[2]); |
| if (RangeJunction.isInstanceOfNotEqualConditionEvaluator(ops[0])) { |
| assertTrue(RangeJunction.getKeysToBeRemoved(ops[0]).iterator().next() |
| .equals(new Integer(7))); |
| } |
| else if (RangeJunction.isInstanceOfNotEqualConditionEvaluator(ops[1])) { |
| assertTrue(RangeJunction.getKeysToBeRemoved(ops[1]).iterator().next() |
| .equals(new Integer(7))); |
| } |
| else if (RangeJunction.isInstanceOfNotEqualConditionEvaluator(ops[2])) { |
| assertTrue(RangeJunction.getKeysToBeRemoved(ops[2]).iterator().next() |
| .equals(new Integer(7))); |
| } |
| else { |
| fail("NotEqualConditionEvaluator not found"); |
| } |
| assertTrue(cv1[1] == ops[0] || cv1[1] == ops[1] || cv1[1] == ops[2]); |
| assertTrue(cv1[2] == ops[0] || cv1[2] == ops[1] || cv1[2] == ops[2]); |
| } |
| catch (Exception e) { |
| logger.error(e.toString()); |
| fail(e.toString()); |
| } |
| } |
| |
| /** |
| * If possible , in case where RangeJunction contains something like a != 7 |
| * and a != undefined & a != null, since undefined & null are not groupable , |
| * the a != 7 is also evaluated individually. In such case, it makes sense not |
| * to create an Object of rangeJunction.NotEqualConditionEvaluator for |
| * evaluating a !=7 , which however is the case now. May be at some point, we |
| * should either try to club null & undefined as a part of |
| * RangeJunctionEvaluator or we should not create an object of |
| * NotEqualConditionEvaluator. |
| * |
| */ |
| public void _testNotEqualCoupledWithUndefinedAndNotNull() { |
| LogWriter logger = CacheUtils.getLogger(); |
| try { |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| // Case 2 : a != 7 and a != null and a != undefined |
| CompiledValue[] cv1 = new CompiledValue[3]; |
| cv1[0] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| cv1[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(null), OQLLexerTokenTypes.TOK_NE); |
| cv1[2] = new CompiledUndefined( |
| new CompiledPath(new CompiledID("p"), "ID"), false); |
| |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv1, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof GroupJunction); |
| CompiledValue[] ops = ((GroupJunction)oo1.filterOperand)._operands; |
| assertTrue(cv1[0] == ops[0] || cv1[0] == ops[1] || cv1[0] == ops[2]); |
| assertTrue(cv1[1] == ops[0] || cv1[1] == ops[1] || cv1[1] == ops[2]); |
| assertTrue(cv1[2] == ops[0] || cv1[2] == ops[1] || cv1[2] == ops[2]); |
| } |
| catch (Exception e) { |
| logger.error(e.toString()); |
| fail(e.toString()); |
| } |
| } |
| |
| /** |
| * Test presence of equal condition in a AND RangeJunction An equal condition |
| * if accompanied by any other condition in a RangeJunction ( except not null) |
| * should always return the equal condition or a boolean false indicating |
| * empty resultset |
| */ |
| @Test |
| public void testEqualConditionInRangeJunction_AND() { |
| LogWriter logger = CacheUtils.getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| /** |
| * ******************For all LESS THAN OR LESS THAN EQUAL To |
| * ******************** |
| */ |
| // Case 1 : a = 7 and a !=4 and a != 5 and a != 8 |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_EQ); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_NE); |
| |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertEquals(oo1.filterOperand, cv[0]); |
| // Case 2 : a > 7 and a !=4 and a != 5 and a = 8 |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_EQ); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertEquals(oo1.filterOperand, cv[3]); |
| |
| // Case3 : a < 7 and a !=4 and a =8 and a != 5 |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_LT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_EQ); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_NE); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof CompiledLiteral); |
| assertFalse(((Boolean)((CompiledLiteral)oo1.filterOperand) |
| .evaluate(context)).booleanValue()); |
| |
| // Case4 : a > 7 and a !=4 and a !=8 and a = 14 |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(14)), OQLLexerTokenTypes.TOK_EQ); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[3]); |
| |
| // Case5 : a <= 14 and a !=4 and a !=8 and a = 14 |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(14)), OQLLexerTokenTypes.TOK_LE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(14)), OQLLexerTokenTypes.TOK_EQ); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[3]); |
| |
| // Case6 : a >= 14 and a !=4 and a !=8 and a = 14 |
| |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(14)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(14)), OQLLexerTokenTypes.TOK_EQ); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[3]); |
| |
| // Case7 : a >= 14 and a !=4 and a =9 and a = 14 |
| |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(14)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(9)), OQLLexerTokenTypes.TOK_EQ); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(14)), OQLLexerTokenTypes.TOK_EQ); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof CompiledLiteral); |
| assertFalse(((Boolean)((CompiledLiteral)oo1.filterOperand) |
| .evaluate(context)).booleanValue()); |
| |
| // Case8 : a > 7 and a !=4 and a !=8 and a = 14 and a <18 |
| cv = new CompiledComparison[5]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(14)), OQLLexerTokenTypes.TOK_EQ); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(18)), OQLLexerTokenTypes.TOK_LT); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand == cv[3]); |
| |
| // case9:a > 7 and a !=4 and a !=8 and a = 14 and a <14 |
| cv = new CompiledComparison[5]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(14)), OQLLexerTokenTypes.TOK_GT); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(4)), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(9)), OQLLexerTokenTypes.TOK_EQ); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(14)), OQLLexerTokenTypes.TOK_EQ); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(14)), OQLLexerTokenTypes.TOK_LT); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof CompiledLiteral); |
| assertFalse(((Boolean)((CompiledLiteral)oo1.filterOperand) |
| .evaluate(context)).booleanValue()); |
| |
| } |
| catch (Exception e) { |
| logger.error(e.toString()); |
| } |
| } |
| |
| @Test |
| public void testOrganizeOpsOfRangeJunctionForNonRangeEvaluatableOperand() { |
| |
| LogWriter logger = CacheUtils.getLogger(); |
| try { |
| CompiledValue cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| // Case 1 : a != null and a != null and a != undefined |
| cv = new CompiledValue[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), |
| new CompiledLiteral(null), OQLLexerTokenTypes.TOK_NE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), |
| new CompiledLiteral(null), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledUndefined( |
| new CompiledPath(new CompiledID("p"), "ID"), false); |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof GroupJunction); |
| CompiledValue[] ops = ((GroupJunction)oo1.filterOperand)._operands; |
| assertTrue(ops[0] == cv[0] || ops[0] == cv[1] || ops[0] == cv[2]); |
| assertTrue(ops[1] == cv[0] || ops[1] == cv[1] || ops[1] == cv[2]); |
| assertTrue(ops[2] == cv[0] || ops[2] == cv[1] || ops[2] == cv[2]); |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| |
| } |
| |
| /** |
| * Tests the genuine range condition evaluator ( having a upper and lower |
| * bound) formed from a RangeJunction of type AND |
| */ |
| @Test |
| public void testDoubleCondnRangeJunctionEvaluator_AND() { |
| LogWriter logger = CacheUtils.getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| // Case 1 : a >= 7 and a <=10 |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(10)), OQLLexerTokenTypes.TOK_LE); |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction |
| .isInstanceOfDoubleCondnRangeJunctionEvaluator((oo1.filterOperand))); |
| assertTrue(RangeJunction.getDoubleCondnEvaluatorGreaterKey( |
| (oo1.filterOperand)).equals(new Integer(7))); |
| assertTrue(RangeJunction |
| .getDoubleCondnEvaluatorOperatorOfGreaterType((oo1.filterOperand)) == OQLLexerTokenTypes.TOK_GE); |
| assertTrue(RangeJunction.getDoubleCondnEvaluatorLESSKey( |
| (oo1.filterOperand)).equals(new Integer(10))); |
| assertTrue(RangeJunction |
| .getDoubleCondnEvaluatorOperatorOfLessType((oo1.filterOperand)) == OQLLexerTokenTypes.TOK_LE); |
| assertTrue(RangeJunction.getKeysToBeRemoved((oo1.filterOperand)) == null); |
| |
| // Case2 : a >= 7 and a <=10 a >=5 and a <=11 and a != 7 |
| cv = new CompiledComparison[5]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(10)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_GE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(11)), OQLLexerTokenTypes.TOK_LE); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction |
| .isInstanceOfDoubleCondnRangeJunctionEvaluator((oo1.filterOperand))); |
| assertTrue(RangeJunction.getDoubleCondnEvaluatorGreaterKey( |
| (oo1.filterOperand)).equals(new Integer(7))); |
| assertTrue(RangeJunction |
| .getDoubleCondnEvaluatorOperatorOfGreaterType((oo1.filterOperand)) == OQLLexerTokenTypes.TOK_GE); |
| assertTrue(RangeJunction.getDoubleCondnEvaluatorLESSKey( |
| (oo1.filterOperand)).equals(new Integer(10))); |
| assertTrue(RangeJunction |
| .getDoubleCondnEvaluatorOperatorOfLessType((oo1.filterOperand)) == OQLLexerTokenTypes.TOK_LE); |
| Set keysToRemove = RangeJunction.getKeysToBeRemoved((oo1.filterOperand)); |
| assertTrue(keysToRemove.size() == 1); |
| assertTrue(keysToRemove.iterator().next().equals(new Integer(7))); |
| |
| // Case3 : a >= 7 and a <=6 and a >=8 and a <=5 and a != 7 |
| cv = new CompiledComparison[5]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| cv[4] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof CompiledLiteral); |
| assertFalse(((Boolean)((CompiledLiteral)oo1.filterOperand) |
| .evaluate(context)).booleanValue()); |
| |
| // Case4 : a >= 7 and a <=6 and a >=8 and a <=5 |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_GE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_LE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof CompiledLiteral); |
| assertFalse(((Boolean)((CompiledLiteral)oo1.filterOperand) |
| .evaluate(context)).booleanValue()); |
| |
| // Case5 : a >= 1 and a <=6 and a !=8 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(1)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_NE); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction |
| .isInstanceOfDoubleCondnRangeJunctionEvaluator((oo1.filterOperand))); |
| assertTrue(RangeJunction.getDoubleCondnEvaluatorGreaterKey( |
| (oo1.filterOperand)).equals(new Integer(1))); |
| assertTrue(RangeJunction |
| .getDoubleCondnEvaluatorOperatorOfGreaterType((oo1.filterOperand)) == OQLLexerTokenTypes.TOK_GE); |
| assertTrue(RangeJunction.getDoubleCondnEvaluatorLESSKey( |
| (oo1.filterOperand)).equals(new Integer(6))); |
| assertTrue(RangeJunction |
| .getDoubleCondnEvaluatorOperatorOfLessType((oo1.filterOperand)) == OQLLexerTokenTypes.TOK_LE); |
| keysToRemove = RangeJunction.getKeysToBeRemoved((oo1.filterOperand)); |
| assertTrue(keysToRemove == null); |
| |
| // Case6 : a >= 1 and a <=6 and a !=8 and a!=2 |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(1)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(8)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(2)), OQLLexerTokenTypes.TOK_NE); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction |
| .isInstanceOfDoubleCondnRangeJunctionEvaluator((oo1.filterOperand))); |
| assertTrue(RangeJunction.getDoubleCondnEvaluatorGreaterKey( |
| (oo1.filterOperand)).equals(new Integer(1))); |
| assertTrue(RangeJunction |
| .getDoubleCondnEvaluatorOperatorOfGreaterType((oo1.filterOperand)) == OQLLexerTokenTypes.TOK_GE); |
| assertTrue(RangeJunction.getDoubleCondnEvaluatorLESSKey( |
| (oo1.filterOperand)).equals(new Integer(6))); |
| assertTrue(RangeJunction |
| .getDoubleCondnEvaluatorOperatorOfLessType((oo1.filterOperand)) == OQLLexerTokenTypes.TOK_LE); |
| keysToRemove = RangeJunction.getKeysToBeRemoved((oo1.filterOperand)); |
| assertTrue(keysToRemove.size() == 1); |
| assertTrue(keysToRemove.iterator().next().equals(new Integer(2))); |
| |
| // Case7 : a >= 1 and a <=6 and a !=6 and a!=0 |
| cv = new CompiledComparison[4]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(1)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_LE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(6)), OQLLexerTokenTypes.TOK_NE); |
| cv[3] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(0)), OQLLexerTokenTypes.TOK_NE); |
| |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(RangeJunction |
| .isInstanceOfDoubleCondnRangeJunctionEvaluator((oo1.filterOperand))); |
| assertTrue(RangeJunction.getDoubleCondnEvaluatorGreaterKey( |
| (oo1.filterOperand)).equals(new Integer(1))); |
| assertTrue(RangeJunction |
| .getDoubleCondnEvaluatorOperatorOfGreaterType((oo1.filterOperand)) == OQLLexerTokenTypes.TOK_GE); |
| assertTrue(RangeJunction.getDoubleCondnEvaluatorLESSKey( |
| (oo1.filterOperand)).equals(new Integer(6))); |
| assertTrue(RangeJunction |
| .getDoubleCondnEvaluatorOperatorOfLessType((oo1.filterOperand)) == OQLLexerTokenTypes.TOK_LE); |
| keysToRemove = RangeJunction.getKeysToBeRemoved((oo1.filterOperand)); |
| assertTrue(keysToRemove.size() == 1); |
| assertTrue(keysToRemove.iterator().next().equals(new Integer(6))); |
| |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| } |
| |
| /** |
| * Tests if the presence of UNDEFINED operand is treated as a separate eval |
| * operand & not made a part of SingleCondn or DoubleCondn evaluator |
| */ |
| @Test |
| public void testNullorNotNullorUndefinedBehaviour() { |
| LogWriter logger = CacheUtils.getLogger(); |
| try { |
| CompiledComparison cv[] = null; |
| ExecutionContext context = new QueryExecutionContext(null, CacheUtils |
| .getCache()); |
| this.bindIteratorsAndCreateIndex(context); |
| // Case 1 : a >= 7 and a != null |
| cv = new CompiledComparison[2]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), |
| new CompiledLiteral(null), OQLLexerTokenTypes.TOK_EQ); |
| OrganizedOperands oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| RangeJunction rj = (RangeJunction)oo.filterOperand; |
| OrganizedOperands oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof GroupJunction); |
| CompiledValue[] operands = ((GroupJunction)oo1.filterOperand)._operands; |
| assertEquals(2, operands.length); |
| assertTrue(operands[0] == cv[0] || operands[0] == cv[1]); |
| assertTrue(operands[1] == cv[0] || operands[1] == cv[1]); |
| |
| // Case 2 : a >= 7 and a != null and a!=5 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), |
| new CompiledLiteral(null), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(5)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof GroupJunction); |
| operands = ((GroupJunction)oo1.filterOperand)._operands; |
| assertEquals(2, operands.length); |
| assertTrue(cv[1] == operands[0] || cv[1] == operands[1]); |
| assertTrue(cv[0] == operands[0] || cv[0] == operands[1]); |
| // Case 3 : a >= 7 and a != null and a!=7 |
| cv = new CompiledComparison[3]; |
| cv[0] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv[1] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), |
| new CompiledLiteral(null), OQLLexerTokenTypes.TOK_NE); |
| cv[2] = new CompiledComparison( |
| new CompiledPath(new CompiledID("p"), "ID"), new CompiledLiteral( |
| new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof GroupJunction); |
| operands = ((GroupJunction)oo1.filterOperand)._operands; |
| assertEquals(2, operands.length); |
| assertTrue(cv[1] == operands[0] || cv[1] == operands[1]); |
| assertTrue(RangeJunction.isInstanceOfSingleCondnEvaluator(operands[0]) |
| || RangeJunction.isInstanceOfSingleCondnEvaluator(operands[1])); |
| int x = -1; |
| if (RangeJunction.isInstanceOfSingleCondnEvaluator(operands[0])) { |
| x = 0; |
| } |
| else if (RangeJunction.isInstanceOfSingleCondnEvaluator(operands[1])) { |
| x = 1; |
| } |
| |
| Object key = RangeJunction.getSingleCondnEvaluatorKey(operands[x]); |
| assertTrue(key.equals(new Integer(7))); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorOperator(operands[x]) == OQLLexerTokenTypes.TOK_GE); |
| assertTrue(RangeJunction.getKeysToBeRemoved(operands[x]).size() == 1); |
| assertTrue(RangeJunction.getKeysToBeRemoved(operands[x]).iterator() |
| .next().equals(new Integer(7))); |
| |
| // Case 4 : a >= 7 and a == null and a!=7 and a = undefined |
| CompiledValue[] cv1 = new CompiledValue[4]; |
| cv1[0] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv1[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(null), OQLLexerTokenTypes.TOK_EQ); |
| cv1[2] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(7)), OQLLexerTokenTypes.TOK_NE); |
| cv1[3] = new CompiledUndefined( |
| new CompiledPath(new CompiledID("p"), "ID"), false); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv1, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof GroupJunction); |
| assertEquals(((GroupJunction)oo1.filterOperand)._operands.length, 3); |
| CompiledValue[] ops = ((GroupJunction)oo1.filterOperand)._operands; |
| assertTrue(ops[0] == cv1[1] || ops[1] == cv1[1] || ops[2] == cv1[1]); |
| assertTrue(ops[0] == cv1[3] || ops[1] == cv1[3] || ops[2] == cv1[3]); |
| assertTrue(RangeJunction.isInstanceOfSingleCondnEvaluator(ops[0]) |
| || RangeJunction.isInstanceOfSingleCondnEvaluator(ops[1]) |
| || RangeJunction.isInstanceOfSingleCondnEvaluator(ops[2])); |
| x = -1; |
| if (RangeJunction.isInstanceOfSingleCondnEvaluator(ops[0])) { |
| x = 0; |
| } |
| else if (RangeJunction.isInstanceOfSingleCondnEvaluator(ops[1])) { |
| x = 1; |
| } |
| else if (RangeJunction.isInstanceOfSingleCondnEvaluator(ops[2])) { |
| x = 2; |
| } |
| key = RangeJunction.getSingleCondnEvaluatorKey(ops[x]); |
| assertTrue(key.equals(new Integer(7))); |
| assertTrue(RangeJunction.getSingleCondnEvaluatorOperator(ops[x]) == OQLLexerTokenTypes.TOK_GE); |
| assertTrue(RangeJunction.getKeysToBeRemoved(ops[x]).size() == 1); |
| assertTrue(RangeJunction.getKeysToBeRemoved(ops[x]).iterator().next() |
| .equals(new Integer(7))); |
| |
| // Case 5 : a >= 7 and a == null and a == 6 and a = undefined and |
| // createTime = 6 |
| cv1 = new CompiledValue[5]; |
| cv1[0] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv1[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(null), OQLLexerTokenTypes.TOK_EQ); |
| cv1[2] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(6)), OQLLexerTokenTypes.TOK_EQ); |
| cv1[3] = new CompiledUndefined( |
| new CompiledPath(new CompiledID("p"), "ID"), false); |
| cv1[4] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "createTime"), new CompiledLiteral(new Long(6)), |
| OQLLexerTokenTypes.TOK_EQ); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv1, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof CompiledLiteral); |
| assertFalse(((Boolean)((CompiledLiteral)oo1.filterOperand) |
| .evaluate(context)).booleanValue()); |
| assertNull(oo1.iterateOperand); |
| |
| // Case 6 : a >= 7 and a == null and a == 8 and a = undefined and |
| // createTime = 6 |
| cv1 = new CompiledValue[5]; |
| cv1[0] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(7)), OQLLexerTokenTypes.TOK_GE); |
| cv1[1] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(null), OQLLexerTokenTypes.TOK_EQ); |
| cv1[2] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "ID"), new CompiledLiteral(new Integer(8)), OQLLexerTokenTypes.TOK_EQ); |
| cv1[3] = new CompiledUndefined( |
| new CompiledPath(new CompiledID("p"), "ID"), false); |
| cv1[4] = new CompiledComparison(new CompiledPath(new CompiledID("p"), |
| "createTime"), new CompiledLiteral(new Long(6)), |
| OQLLexerTokenTypes.TOK_EQ); |
| oo = this.oganizedOperandsSingleRangeJunctionCreation( |
| OQLLexerTokenTypes.LITERAL_and, cv1, context); |
| assertTrue( |
| "Filter Openad of OrganizedOperand is not of type RangeJunction", |
| oo.filterOperand instanceof RangeJunction); |
| rj = (RangeJunction)oo.filterOperand; |
| oo1 = rj.organizeOperands(context); |
| assertTrue(oo1.filterOperand instanceof GroupJunction); |
| operands = ((GroupJunction)oo1.filterOperand)._operands; |
| assertEquals(operands.length, 3); |
| assertTrue(cv1[1] == operands[0] || cv1[1] == operands[1] |
| || cv1[1] == operands[2]); |
| assertTrue(cv1[2] == operands[0] || cv1[2] == operands[1] |
| || cv1[2] == operands[2]); |
| assertTrue(cv1[3] == operands[0] || cv1[3] == operands[1] |
| || cv1[3] == operands[2]); |
| assertTrue(oo1.iterateOperand == cv1[4]); |
| |
| } |
| catch (Exception e) { |
| logger.error(e.toString()); |
| fail(e.toString()); |
| } |
| } |
| |
| private void bindIteratorsAndCreateIndex(ExecutionContext context) |
| throws Exception { |
| QCompiler compiler = new QCompiler(); |
| List list = compiler.compileFromClause("/portfolio p, p.positions"); |
| context.newScope(context.assosciateScopeID()); |
| qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/portfolio"); |
| Iterator iter = list.iterator(); |
| while (iter.hasNext()) { |
| CompiledIteratorDef iterDef = (CompiledIteratorDef)iter.next(); |
| context.addDependencies(new CompiledID("dummy"), iterDef |
| .computeDependencies(context)); |
| RuntimeIterator rIter = iterDef.getRuntimeIterator(context); |
| context.bindIterator(rIter); |
| context.addToIndependentRuntimeItrMap(iterDef); |
| } |
| } |
| |
| /** |
| * Tests the creation of a single RangeJunction if the CompiledJunction only |
| * contains same index condition with or without iter operand |
| */ |
| private OrganizedOperands oganizedOperandsSingleRangeJunctionCreation( |
| int junctionType, CompiledValue[] operandsForCJ, ExecutionContext context) { |
| LogWriter logger = CacheUtils.getCache().getLogger(); |
| OrganizedOperands oo = null; |
| try { |
| CompiledJunction cj = new CompiledJunction(operandsForCJ, junctionType); |
| context.addDependencies(new CompiledID("dummy"), cj |
| .computeDependencies(context)); |
| cj.getPlanInfo(context); |
| oo = cj.testOrganizedOperands(context); |
| return oo; |
| } |
| catch (Exception e) { |
| logger.error(e); |
| fail(e.toString()); |
| } |
| return oo; |
| } |
| |
| @After |
| public void tearDown() throws Exception { |
| CacheUtils.closeCache(); |
| IndexManager indexManager = ((LocalRegion) region).getIndexManager(); |
| if (indexManager != null) indexManager.destroy(); |
| } |
| } |