From: <tho...@us...> - 2011-03-03 21:31:32
|
Revision: 4268 http://bigdata.svn.sourceforge.net/bigdata/?rev=4268&view=rev Author: thompsonbry Date: 2011-03-03 21:31:26 +0000 (Thu, 03 Mar 2011) Log Message: ----------- Optimization for BOpUtility#getSharedVariables() with unit test. Modified Paths: -------------- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/BOpUtility.java branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/bop/util/TestBOpUtility_sharedVariables.java Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/BOpUtility.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/BOpUtility.java 2011-03-03 21:27:02 UTC (rev 4267) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/BOpUtility.java 2011-03-03 21:31:26 UTC (rev 4268) @@ -1108,11 +1108,8 @@ // if (p == c) // throw new IllegalArgumentException(); - // The set of variables which are shared. - final Set<IVariable<?>> sharedVars = new LinkedHashSet<IVariable<?>>(); - // Collect the variables appearing anywhere in [p]. - final Set<IVariable<?>> p1vars = new LinkedHashSet<IVariable<?>>(); + Set<IVariable<?>> p1vars = null; { final Iterator<IVariable<?>> itr = BOpUtility @@ -1120,12 +1117,29 @@ while (itr.hasNext()) { + if(p1vars == null) { + + // lazy initialization. + p1vars = new LinkedHashSet<IVariable<?>>(); + + } + p1vars.add(itr.next()); } } + if (p1vars == null) { + + // Fast path when no variables in [p]. + return Collections.emptySet(); + + } + + // The set of variables which are shared. + Set<IVariable<?>> sharedVars = null; + // Consider the variables appearing anywhere in [c]. { @@ -1138,16 +1152,26 @@ if (p1vars.contains(avar)) { - sharedVars.add(avar); + if (sharedVars == null) { + // lazy initialization. + sharedVars = new LinkedHashSet<IVariable<?>>(); + + } + + sharedVars.add(avar); + } } } - return sharedVars; + if (sharedVars == null) + return Collections.emptySet(); + return sharedVars; + } } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/bop/util/TestBOpUtility_sharedVariables.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/bop/util/TestBOpUtility_sharedVariables.java 2011-03-03 21:27:02 UTC (rev 4267) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/bop/util/TestBOpUtility_sharedVariables.java 2011-03-03 21:31:26 UTC (rev 4268) @@ -98,6 +98,14 @@ @SuppressWarnings("unchecked") public void test_getSharedVariables_nothingShared() { + // nothing shared because no variables for one operand. + assertTrue(BOpUtility.getSharedVars(new Constant<Integer>(12), Var.var("y")) + .isEmpty()); + + // nothing shared because no variables for the other operand. + assertTrue(BOpUtility.getSharedVars(Var.var("y"),new Constant<Integer>(12)) + .isEmpty()); + // nothing shared. assertTrue(BOpUtility.getSharedVars(Var.var("x"), Var.var("y")) .isEmpty()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |