From: <jer...@us...> - 2013-11-20 22:41:42
|
Revision: 7576 http://bigdata.svn.sourceforge.net/bigdata/?rev=7576&view=rev Author: jeremy_carroll Date: 2013-11-20 22:41:35 +0000 (Wed, 20 Nov 2013) Log Message: ----------- some mods to avoid exposing db so much in optimizer after code review of 773 Modified Paths: -------------- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/ArbitraryLengthPathNode.java branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/IReorderableNode.java branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/JoinGroupNode.java branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/StatementPatternNode.java branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/StaticAnalysisBase.java branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/UnionNode.java branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/ASTStaticJoinOptimizer.java branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/StaticOptimizer.java branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/optimizers/TestALPPinTrac773.java Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/ArbitraryLengthPathNode.java =================================================================== --- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/ArbitraryLengthPathNode.java 2013-11-20 14:34:33 UTC (rev 7575) +++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/ArbitraryLengthPathNode.java 2013-11-20 22:41:35 UTC (rev 7576) @@ -220,17 +220,17 @@ } -// @Override - public boolean isReorderable(ITripleStore db) { + @Override + public boolean isReorderable() { - final long estCard = getEstimatedCardinality(null, db); + final long estCard = getEstimatedCardinality(null); return estCard >= 0 && estCard < Long.MAX_VALUE; } -// @Override - public long getEstimatedCardinality(StaticOptimizer opt, ITripleStore db) { + @Override + public long getEstimatedCardinality(StaticOptimizer opt) { final JoinGroupNode group = subgroup(); @@ -256,7 +256,10 @@ zeroMatchAdjustment = 1; break; case 2: - zeroMatchAdjustment = db.getURICount() + db.getBNodeCount(); // this is too big when we are looking in a reduced dataset + zeroMatchAdjustment = Long.MAX_VALUE / 2; + // The following is more accurate, but more expensive and unnecessary. + // db.getURICount() + db.getBNodeCount(); + System.err.println("adj: "+zeroMatchAdjustment); break; } } Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/IReorderableNode.java =================================================================== --- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/IReorderableNode.java 2013-11-20 14:34:33 UTC (rev 7575) +++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/IReorderableNode.java 2013-11-20 22:41:35 UTC (rev 7576) @@ -44,7 +44,7 @@ * by examining the type - individual instances of a particular type * may or may not be reorderable. */ - boolean isReorderable(ITripleStore db); + boolean isReorderable(); /** * Return the estimated cardinality - either the range count of a @@ -52,6 +52,6 @@ * group. * @param opt This optimizer can be used to help work out the estimate */ - long getEstimatedCardinality(StaticOptimizer opt, ITripleStore db); + long getEstimatedCardinality(StaticOptimizer opt); } Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/JoinGroupNode.java =================================================================== --- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/JoinGroupNode.java 2013-11-20 14:34:33 UTC (rev 7575) +++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/JoinGroupNode.java 2013-11-20 22:41:35 UTC (rev 7576) @@ -349,12 +349,12 @@ } - public List<IReorderableNode> getReorderableChildren(ITripleStore db) { + public List<IReorderableNode> getReorderableChildren() { final List<IReorderableNode> nodes = getChildren(IReorderableNode.class); final Iterator<IReorderableNode> it = nodes.iterator(); while (it.hasNext()) { final IReorderableNode node = it.next(); - if (!node.isReorderable(db)) { + if (!node.isReorderable()) { it.remove(); } } Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/StatementPatternNode.java =================================================================== --- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/StatementPatternNode.java 2013-11-20 14:34:33 UTC (rev 7575) +++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/StatementPatternNode.java 2013-11-20 22:41:35 UTC (rev 7576) @@ -636,7 +636,7 @@ * @see com.bigdata.rdf.sparql.ast.IReorderableNode#isReorderable() */ @Override - public boolean isReorderable(ITripleStore db) { + public boolean isReorderable() { return !isOptional(); @@ -646,7 +646,7 @@ * @see com.bigdata.rdf.sparql.ast.IReorderableNode#getEstimatedCardinality() */ @Override - public long getEstimatedCardinality(StaticOptimizer opt, ITripleStore db) { + public long getEstimatedCardinality(StaticOptimizer opt) { return getProperty(AST2BOpBase.Annotations.ESTIMATED_CARDINALITY, -1l); Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/StaticAnalysisBase.java =================================================================== --- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/StaticAnalysisBase.java 2013-11-20 14:34:33 UTC (rev 7575) +++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/StaticAnalysisBase.java 2013-11-20 22:41:35 UTC (rev 7576) @@ -472,9 +472,5 @@ return set; } - - public ITripleStore getDB() { - return evaluationContext.getAbstractTripleStore(); - } } Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/UnionNode.java =================================================================== --- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/UnionNode.java 2013-11-20 14:34:33 UTC (rev 7575) +++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/UnionNode.java 2013-11-20 22:41:35 UTC (rev 7576) @@ -93,22 +93,22 @@ @Override - public long getEstimatedCardinality(StaticOptimizer optimizer, ITripleStore db) { + public long getEstimatedCardinality(StaticOptimizer optimizer) { long cardinality = 0; for (JoinGroupNode child : this) { - StaticOptimizer opt = new StaticOptimizer(optimizer, child.getReorderableChildren(db)); + StaticOptimizer opt = new StaticOptimizer(optimizer, child.getReorderableChildren()); cardinality += opt.getCardinality(); } return cardinality; } @Override - public boolean isReorderable(ITripleStore db) { + public boolean isReorderable() { for (JoinGroupNode child : this) { for (IGroupMemberNode grandchild : child) { if (! (grandchild instanceof IReorderableNode)) return false; - if (! ((IReorderableNode)grandchild).isReorderable(db)) + if (! ((IReorderableNode)grandchild).isReorderable()) return false; } } Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/ASTStaticJoinOptimizer.java =================================================================== --- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/ASTStaticJoinOptimizer.java 2013-11-20 14:34:33 UTC (rev 7575) +++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/ASTStaticJoinOptimizer.java 2013-11-20 22:41:35 UTC (rev 7576) @@ -466,7 +466,7 @@ /* * Let the optimizer handle the simple optionals too. */ - final List<IReorderableNode> nodes = joinGroup.getReorderableChildren(ctx.getAbstractTripleStore()); + final List<IReorderableNode> nodes = joinGroup.getReorderableChildren(); if (!nodes.isEmpty()) { Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/StaticOptimizer.java =================================================================== --- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/StaticOptimizer.java 2013-11-20 14:34:33 UTC (rev 7575) +++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/StaticOptimizer.java 2013-11-20 22:41:35 UTC (rev 7576) @@ -512,7 +512,7 @@ if (rangeCount[tailIndex] == -1L) { - final long rangeCount = (long) nodes.get(tailIndex).getEstimatedCardinality(this, sa.getDB()); + final long rangeCount = (long) nodes.get(tailIndex).getEstimatedCardinality(this); this.rangeCount[tailIndex] = rangeCount; Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/optimizers/TestALPPinTrac773.java =================================================================== --- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/optimizers/TestALPPinTrac773.java 2013-11-20 14:34:33 UTC (rev 7575) +++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/optimizers/TestALPPinTrac773.java 2013-11-20 22:41:35 UTC (rev 7576) @@ -28,6 +28,7 @@ import com.bigdata.rdf.internal.IV; import com.bigdata.rdf.sparql.ast.ArbitraryLengthPathNode; +import com.bigdata.rdf.sparql.ast.GroupMemberNodeBase; import com.bigdata.rdf.sparql.ast.StatementPatternNode; import com.bigdata.rdf.sparql.ast.VarNode; import com.bigdata.rdf.store.AbstractTripleStore; @@ -53,13 +54,15 @@ public NotNestedHelper(HelperFlag zero_or_one_to_one_or_more, String sym, boolean switchOrdering) { String pattern = "c" + sym; - given = select( varNode(z), + StatementPatternNode spn1 = statementPatternNode(varNode(y), constantNode(c), varNode(x), 15431); + StatementPatternNode spn2 = statementPatternNode(varNode(z), constantNode(a), varNode(w), 2054); + given = select( varNode(z), where ( joinGroupNode(propertyPathNode(varNode(x),pattern, constantNode(b))), - statementPatternNode(varNode(y), constantNode(c), varNode(x), 15431), + spn1, propertyPathNode(varNode(x),pattern, varNode(z)), - statementPatternNode(varNode(z), constantNode(a), varNode(w), 2054) + spn2 ) ); varCount = 0; @@ -74,16 +77,12 @@ } else { alpp1 = alpp1(zero_or_one_to_one_or_more); alpp2 = alpp2(zero_or_one_to_one_or_more); - } + final GroupMemberNodeBase<?> gmn[] = alpp1.lowerBound() == 0 + ? new GroupMemberNodeBase[]{alpp1, spn1, alpp2, spn2} + : new GroupMemberNodeBase[]{alpp1, alpp2, spn2, spn1}; - expected = select( varNode(z), - where ( - alpp1, - alpp2, - statementPatternNode(varNode(z), constantNode(a), varNode(w), 2054), - statementPatternNode(varNode(y), constantNode(c), varNode(x), 15431) - ) ); + expected = select( varNode(z), where ( gmn ) ); varCount = 0; } @@ -99,30 +98,33 @@ private class NestedHelper extends Helper { public NestedHelper(HelperFlag zero_or_one_to_one_or_more, String sym) { - String pattern = "c" + sym; + String pattern = "d" + sym; - given = select( varNode(z), + StatementPatternNode spn1 = statementPatternNode(varNode(y), constantNode(c), varNode(x), 15431); + StatementPatternNode spn2 = statementPatternNode(varNode(z), constantNode(a), varNode(w), 2054); + given = select( varNode(z), where ( joinGroupNode(propertyPathNode(varNode(x),pattern, constantNode(b))), - statementPatternNode(varNode(y), constantNode(c), varNode(x), 15431), + spn1, joinGroupNode(propertyPathNode(varNode(x),pattern, varNode(z))), - statementPatternNode(varNode(z), constantNode(a), varNode(w), 2054) + spn2 ) ); varCount = 0; - expected = select( varNode(z), - where ( - arbitartyLengthPropertyPath(varNode(x), constantNode(b), zero_or_one_to_one_or_more, - joinGroupNode( - statementPatternNode(leftVar(), constantNode(c), rightVar(), 26) - ) ), - arbitartyLengthPropertyPath(varNode(x), varNode(z), zero_or_one_to_one_or_more, - joinGroupNode( - statementPatternNode(leftVar(), constantNode(c), rightVar(), 3135) - ) ), - statementPatternNode(varNode(z), constantNode(a), varNode(w), 2054), - statementPatternNode(varNode(y), constantNode(c), varNode(x), 15431) - ) ); + ArbitraryLengthPathNode alpp1 = arbitartyLengthPropertyPath(varNode(x), constantNode(b), zero_or_one_to_one_or_more, + joinGroupNode( + statementPatternNode(leftVar(), constantNode(d), rightVar(), 26) + ) ); + ArbitraryLengthPathNode alpp2 = arbitartyLengthPropertyPath(varNode(x), varNode(z), zero_or_one_to_one_or_more, + joinGroupNode( + statementPatternNode(leftVar(), constantNode(d), rightVar(), 3135) + ) ); + + final GroupMemberNodeBase<?> gmn[] = alpp1.lowerBound() == 0 + ? new GroupMemberNodeBase[]{alpp1, spn1, alpp2, spn2} + : new GroupMemberNodeBase[]{alpp1, alpp2, spn2, spn1}; + + expected = select( varNode(z), where ( gmn ) ); varCount = 0; } @@ -195,7 +197,7 @@ joinGroupNode( arbitartyLengthPropertyPath(varNode(x), constantNode(b), ZERO_OR_MORE, joinGroupNode( - statementPatternNode(leftVar(), constantNode(c), rightVar(), 26) + statementPatternNode(leftVar(), constantNode(d), rightVar(), 26) ) ) ), @@ -203,7 +205,7 @@ joinGroupNode( arbitartyLengthPropertyPath(varNode(x), varNode(z), ZERO_OR_MORE, joinGroupNode( - statementPatternNode(leftVar(), constantNode(c), rightVar(), 3135) + statementPatternNode(leftVar(), constantNode(d), rightVar(), 3135) ) ) ), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |