[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