[Mulgara-svn] r1860 - in branches/distinct_queries/src/jar: query/java/org/mulgara/query resolver-lucene/java/org/mulgara/resolver/lucene resolver-relational/java/org/mulgara/resolver/relational resolver-spi/java/org/mulgara/resolver/spi resolver-test/java/org/mulgara/resolver/test resolver-xsd/java/org/mulgara/resolver/xsd
pag at mulgara.org
pag at mulgara.org
Mon Nov 30 19:08:48 UTC 2009
Author: pag
Date: 2009-11-30 11:08:47 -0800 (Mon, 30 Nov 2009)
New Revision: 1860
Modified:
branches/distinct_queries/src/jar/query/java/org/mulgara/query/AbstractConstraintExpression.java
branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintAssignment.java
branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintDifference.java
branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintExpression.java
branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintFalse.java
branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintFilter.java
branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintIn.java
branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintOperation.java
branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintTrue.java
branches/distinct_queries/src/jar/query/java/org/mulgara/query/SingleTransitiveConstraint.java
branches/distinct_queries/src/jar/query/java/org/mulgara/query/TransitiveConstraint.java
branches/distinct_queries/src/jar/query/java/org/mulgara/query/WalkConstraint.java
branches/distinct_queries/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/LuceneConstraint.java
branches/distinct_queries/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalConstraint.java
branches/distinct_queries/src/jar/resolver-spi/java/org/mulgara/resolver/spi/ConjunctiveTransformerUnitTest.java
branches/distinct_queries/src/jar/resolver-test/java/org/mulgara/resolver/test/TestConstraint.java
branches/distinct_queries/src/jar/resolver-xsd/java/org/mulgara/resolver/xsd/IntervalConstraint.java
Log:
All constraints are now marked as either associative or not. This allows an associativity optimization to be applied to those binary operations that are associative, without affecting binary operations like minus
Modified: branches/distinct_queries/src/jar/query/java/org/mulgara/query/AbstractConstraintExpression.java
===================================================================
--- branches/distinct_queries/src/jar/query/java/org/mulgara/query/AbstractConstraintExpression.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/query/java/org/mulgara/query/AbstractConstraintExpression.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -79,4 +79,13 @@
return false;
}
}
+
+ /**
+ * Indicates if this operation is associative.
+ * @return <code>true</code> iff this operation is associative.
+ */
+ public boolean isAssociative() {
+ return true;
+ }
+
}
Modified: branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintAssignment.java
===================================================================
--- branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintAssignment.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintAssignment.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -180,4 +180,13 @@
buffer.append(var).append(" := ").append(expr).append(")");
return buffer.toString();
}
+
+ /**
+ * This expression is non associative.
+ * @return <code>false</code> since this operation is not associative.
+ */
+ public boolean isAssociative() {
+ return false;
+ }
+
}
Modified: branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintDifference.java
===================================================================
--- branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintDifference.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintDifference.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -77,4 +77,12 @@
return " minus ";
}
+ /**
+ * Minus is not an associative operation.
+ * @return <code>false</code> since this operation is not associative.
+ */
+ public boolean isAssociative() {
+ return true;
+ }
+
}
Modified: branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintExpression.java
===================================================================
--- branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintExpression.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintExpression.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -66,4 +66,11 @@
* @return A set containing all variable constraints.
*/
public Set<Variable> getVariables();
+
+ /**
+ * Indicates if this operation is associative.
+ * @return <code>true</code> iff this operation is associative.
+ */
+ boolean isAssociative();
+
}
Modified: branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintFalse.java
===================================================================
--- branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintFalse.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintFalse.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -142,4 +142,13 @@
public String toString() {
return "no";
}
+
+ /**
+ * This expression is unary, so associativity is irrelevant.
+ * @return <code>false</code> to indicate that this operation is not associative.
+ */
+ public boolean isAssociative() {
+ return false;
+ }
+
}
Modified: branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintFilter.java
===================================================================
--- branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintFilter.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintFilter.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -104,4 +104,13 @@
// can't do an equals() on filter, as this evaluates the filter in context
return constraintExpr.equals(other.constraintExpr) && filter == other.filter;
}
+
+ /**
+ * This expression is unary, so associativity is irrelevant.
+ * @return <code>false</code> to indicate that this operation is not associative.
+ */
+ public boolean isAssociative() {
+ return false;
+ }
+
}
Modified: branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintIn.java
===================================================================
--- branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintIn.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintIn.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -128,4 +128,12 @@
return constraint.equals(other.constraint) && graph.equals(other.graph);
}
+ /**
+ * This expression is unary, so associativity is irrelevant.
+ * @return <code>false</code> to indicate that this operation is not associative.
+ */
+ public boolean isAssociative() {
+ return false;
+ }
+
}
Modified: branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintOperation.java
===================================================================
--- branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintOperation.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintOperation.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -90,14 +90,14 @@
elements = new ArrayList<ConstraintExpression>(2);
// Add the LHS
- if (lhs.getClass().equals(getClass())) {
+ if (isAssociative() && lhs.getClass().equals(getClass())) {
elements.addAll(((ConstraintOperation)lhs).getElements());
} else {
elements.add(lhs);
}
// Add the RHS
- if (rhs.getClass().equals(getClass())) {
+ if (isAssociative() && rhs.getClass().equals(getClass())) {
elements.addAll( ( (ConstraintOperation) rhs).getElements());
} else {
elements.add(rhs);
@@ -119,7 +119,7 @@
// add all the elements, flattening if needed
for (ConstraintExpression op: elements) {
- if (op.getClass().equals(getClass())) {
+ if (op.isAssociative() && op.getClass().equals(getClass())) {
this.elements.addAll(((ConstraintOperation)op).getElements());
} else {
this.elements.add(op);
@@ -220,6 +220,14 @@
}
/**
+ * Indicates if this operation is associative.
+ * @return <code>true</code> iff this operation is associative.
+ */
+ public boolean isAssociative() {
+ return true;
+ }
+
+ /**
* Gets the Name attribute of the ConstraintOperation object
*
* @return The Name value
Modified: branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintTrue.java
===================================================================
--- branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintTrue.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/query/java/org/mulgara/query/ConstraintTrue.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -140,4 +140,13 @@
public String toString() {
return "yes";
}
+
+ /**
+ * This expression is unary, so associativity is irrelevant.
+ * @return <code>false</code> to indicate that this operation is not associative.
+ */
+ public boolean isAssociative() {
+ return false;
+ }
+
}
Modified: branches/distinct_queries/src/jar/query/java/org/mulgara/query/SingleTransitiveConstraint.java
===================================================================
--- branches/distinct_queries/src/jar/query/java/org/mulgara/query/SingleTransitiveConstraint.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/query/java/org/mulgara/query/SingleTransitiveConstraint.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -209,4 +209,14 @@
}
return buffer.toString();
}
+
+
+ /**
+ * Not sure what associativity would mean here, but it shouldn't be possible.
+ * @return <code>false</code> to indicate that this operation is not associative.
+ */
+ public boolean isAssociative() {
+ return false;
+ }
+
}
Modified: branches/distinct_queries/src/jar/query/java/org/mulgara/query/TransitiveConstraint.java
===================================================================
--- branches/distinct_queries/src/jar/query/java/org/mulgara/query/TransitiveConstraint.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/query/java/org/mulgara/query/TransitiveConstraint.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -208,4 +208,13 @@
buffer.append("]");
return buffer.toString();
}
+
+ /**
+ * Not sure what associativity would mean here, but it shouldn't be possible.
+ * @return <code>false</code> to indicate that this operation is not associative.
+ */
+ public boolean isAssociative() {
+ return false;
+ }
+
}
Modified: branches/distinct_queries/src/jar/query/java/org/mulgara/query/WalkConstraint.java
===================================================================
--- branches/distinct_queries/src/jar/query/java/org/mulgara/query/WalkConstraint.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/query/java/org/mulgara/query/WalkConstraint.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -221,4 +221,13 @@
buffer.append("]");
return buffer.toString();
}
+
+ /**
+ * Not sure what associativity would mean here, but it shouldn't be possible.
+ * @return <code>false</code> to indicate that this operation is not associative.
+ */
+ public boolean isAssociative() {
+ return false;
+ }
+
}
Modified: branches/distinct_queries/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/LuceneConstraint.java
===================================================================
--- branches/distinct_queries/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/LuceneConstraint.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/LuceneConstraint.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -259,4 +259,12 @@
return "LC{subj=" + subject + ", pred=" + predicate + ", obj=" + object + ", score=" + score +
", binder=" + binder + "}";
}
+
+ /**
+ * Not a binary operation, so not associative
+ * @return <code>false</code>
+ */
+ public boolean isAssociative() {
+ return false;
+ }
}
Modified: branches/distinct_queries/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalConstraint.java
===================================================================
--- branches/distinct_queries/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalConstraint.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalConstraint.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -195,6 +195,14 @@
return variables;
}
+ /**
+ * Not a binary operation, so not a binary constraint.
+ * @return <code>false</code> to indicate that this operation is not associative.
+ */
+ public boolean isAssociative() {
+ return false;
+ }
+
static RelationalConstraint localize(QueryEvaluationContext context, RelationalConstraint constraint) throws Exception {
RelationalConstraint localized = new RelationalConstraint();
Modified: branches/distinct_queries/src/jar/resolver-spi/java/org/mulgara/resolver/spi/ConjunctiveTransformerUnitTest.java
===================================================================
--- branches/distinct_queries/src/jar/resolver-spi/java/org/mulgara/resolver/spi/ConjunctiveTransformerUnitTest.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/resolver-spi/java/org/mulgara/resolver/spi/ConjunctiveTransformerUnitTest.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -643,5 +643,9 @@
public String toString() {
return "[TC:" + id + "]";
}
+
+ public boolean isAssociative() {
+ return false;
+ }
}
}
Modified: branches/distinct_queries/src/jar/resolver-test/java/org/mulgara/resolver/test/TestConstraint.java
===================================================================
--- branches/distinct_queries/src/jar/resolver-test/java/org/mulgara/resolver/test/TestConstraint.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/resolver-test/java/org/mulgara/resolver/test/TestConstraint.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -159,4 +159,8 @@
testSelection.equals(rhs.testSelection) &&
testParam.equals(rhs.testParam);
}
+
+ public boolean isAssociative() {
+ return false;
+ }
}
Modified: branches/distinct_queries/src/jar/resolver-xsd/java/org/mulgara/resolver/xsd/IntervalConstraint.java
===================================================================
--- branches/distinct_queries/src/jar/resolver-xsd/java/org/mulgara/resolver/xsd/IntervalConstraint.java 2009-11-30 19:07:25 UTC (rev 1859)
+++ branches/distinct_queries/src/jar/resolver-xsd/java/org/mulgara/resolver/xsd/IntervalConstraint.java 2009-11-30 19:08:47 UTC (rev 1860)
@@ -337,4 +337,12 @@
buffer.append("]");
return buffer.toString();
}
+
+ /**
+ * Not a binary operation, so not a binary constraint.
+ * @return <code>false</code> to indicate that this operation is not associative.
+ */
+ public boolean isAssociative() {
+ return false;
+ }
}
More information about the Mulgara-svn
mailing list