[Mulgara-svn] r420 - in branches/mgr-69/src/jar: query/java/org/mulgara/query resolver/java/org/mulgara/resolver

andrae at mulgara.org andrae at mulgara.org
Tue Sep 11 06:37:22 UTC 2007


Author: andrae
Date: 2007-09-11 01:37:22 -0500 (Tue, 11 Sep 2007)
New Revision: 420

Modified:
   branches/mgr-69/src/jar/query/java/org/mulgara/query/Query.java
   branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/LocalQuery.java
   branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/SubqueryAnswer.java
Log:
Added a new constructor to Query to allow easy duplication with altered
where-clause.  This needs to be done by both LocalQuery and SubqueryAnswer, and
is better done in only one place.



Modified: branches/mgr-69/src/jar/query/java/org/mulgara/query/Query.java
===================================================================
--- branches/mgr-69/src/jar/query/java/org/mulgara/query/Query.java	2007-09-11 06:00:44 UTC (rev 419)
+++ branches/mgr-69/src/jar/query/java/org/mulgara/query/Query.java	2007-09-11 06:37:22 UTC (rev 420)
@@ -207,7 +207,23 @@
     this.answer = answer;
   }
 
+ 
   /**
+   * Construct a new query equivalent to substituing 'where' for the
+   * where-clause in the original query.
+   */
+  public Query(Query query, ConstraintExpression where) {
+      this(query.getVariableList(),
+          query.getModelExpression(),
+          where,
+          query.getHavingExpression(),
+          query.getOrderList(),
+          query.getLimit(),
+          query.getOffset(),
+          query.getGiven());
+  }
+
+  /**
    * Cloning must always be supported.
    */
   public Object clone() {

Modified: branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/LocalQuery.java
===================================================================
--- branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/LocalQuery.java	2007-09-11 06:00:44 UTC (rev 419)
+++ branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/LocalQuery.java	2007-09-11 06:37:22 UTC (rev 420)
@@ -80,21 +80,6 @@
   /** The constraint expression. */
   private ConstraintExpression constraintExpression;
 
-  /** The model expression. */
-  private ModelExpression modelExpression;
-
-  /** The having clause */
-  private ConstraintHaving having;
-
-  /** The various components of the select clause. */
-  private final List orderList;
-  private final int offset;
-  private final Integer limit;
-  private Tuples given;
-
-  /** Variable list from select clause */
-  private List select;
-
   private LocalQueryResolver context;
 
   private Query query;
@@ -136,14 +121,6 @@
     this.context = new LocalQueryResolver(context, resolverSession);
     this.resolverSession = resolverSession;
     this.constraintExpression = query.getConstraintExpression();
-    this.modelExpression = (ModelExpression)query.getModelExpression().clone();
-    this.orderList = query.getOrderList();
-    this.offset = query.getOffset();
-    this.limit = query.getLimit();
-    this.given = new LocalizedTuples(resolverSession, query.getGiven());
-    this.having = query.getHavingExpression();
-    this.select = query.getVariableList();
-
     if (logger.isDebugEnabled()) {
       logger.debug("Constructed local query");
     }
@@ -153,12 +130,6 @@
     this.constraintExpression = constraintExpression;
     this.resolverSession = localQuery.resolverSession;
     this.context = localQuery.context;
-    this.modelExpression = localQuery.modelExpression;
-    this.orderList = localQuery.orderList;
-    this.offset = localQuery.offset;
-    this.limit = localQuery.limit;
-    this.given = (Tuples)localQuery.given.clone();
-    this.select = localQuery.select;
   }
 
   //
@@ -173,7 +144,7 @@
   {
     try {
       if (logger.isDebugEnabled()) {
-        logger.debug("Resolving query " + modelExpression + " . " + constraintExpression);
+        logger.debug("Resolving query " + query);
       }
 
       if (logger.isDebugEnabled()) {
@@ -205,7 +176,7 @@
     if (result.getRowCardinality() > Cursor.ZERO) {
       Tuples tmp = result;
       try {
-        List variables = new ArrayList(select.size());
+        List variables = new ArrayList();
 
       /*
        * Note that this code need not concern itself with the order of the select-list,
@@ -215,7 +186,7 @@
        */
         Variable[] vars = result.getVariables();
         for (int i = 0; i < vars.length; i++) {
-          if (select.contains(vars[i])) {
+          if (query.getVariableList().contains(vars[i])) {
             variables.add(vars[i]);
           }
         }
@@ -234,7 +205,8 @@
   {
     if (result.getRowCardinality() != Tuples.ZERO) {
       Tuples tmp = result;
-      result = new AppendAggregateTuples(resolverSession, context, result, filterSubqueries(select));
+      result = new AppendAggregateTuples(resolverSession, context, result,
+          filterSubqueries(query.getVariableList()));
       tmp.close();
     }
 
@@ -243,9 +215,7 @@
 
   private List filterSubqueries(List select) {
     List result = new ArrayList();
-    Iterator i = select.iterator();
-    while (i.hasNext()) {
-      Object o = i.next();
+    for (Object o : select) {
       if (!(o instanceof Subquery)) {
         result.add(o);
       }
@@ -256,6 +226,7 @@
 
 
   private Tuples applyHaving(Tuples result) throws TuplesException {
+    ConstraintHaving having = query.getHavingExpression();
     Tuples tmp = result;
     if (having != null) {
       result = TuplesOperations.restrict(
@@ -268,6 +239,7 @@
 
 
   private Tuples orderResult(Tuples result) throws TuplesException, QueryException {
+    List orderList = query.getOrderList();
     if (orderList.size() > 0 && result.getRowCardinality() > Cursor.ONE) {
       Tuples tmp = result;
       result = TuplesOperations.sort(result,
@@ -280,6 +252,7 @@
 
   private Tuples offsetResult(Tuples result) throws TuplesException
   {
+    int offset = query.getOffset();
     if (offset > 0) {
       Tuples tmp = result;
       result = TuplesOperations.offset(result, offset);
@@ -292,6 +265,7 @@
 
   private Tuples limitResult(Tuples result)  throws TuplesException
   {
+    Integer limit = query.getLimit();
     if (limit != null) {
       Tuples tmp = result;
       result = TuplesOperations.limit(result, limit.intValue());
@@ -306,8 +280,6 @@
   {
     try {
       LocalQuery query = (LocalQuery)super.clone();
-      query.modelExpression = (ModelExpression)modelExpression.clone();
-      query.given = (Tuples)given.clone();
 
       return query;
     } catch (CloneNotSupportedException ec) {
@@ -319,10 +291,9 @@
   public void close() throws QueryException
   {
     try {
-      given.close();
       query.close();
     } catch (TuplesException et) {
-      throw new QueryException("Failed to close given clause", et);
+      throw new QueryException("Failed to close query", et);
     }
   }
 

Modified: branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/SubqueryAnswer.java
===================================================================
--- branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/SubqueryAnswer.java	2007-09-11 06:00:44 UTC (rev 419)
+++ branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/SubqueryAnswer.java	2007-09-11 06:37:22 UTC (rev 420)
@@ -288,14 +288,7 @@
           ConstraintOperations.bindVariables(bindings, query.getConstraintExpression()),
           constrainBindings(bindings));
 
-      query = new Query(query.getVariableList(),
-          query.getModelExpression(),
-          where,
-          null,
-          query.getOrderList(),
-          query.getLimit(),
-          query.getOffset(),
-          query.getGiven());
+      query = new Query(query, where);
 
       if (logger.isDebugEnabled()) {
         logger.debug("Generated subquery: " + query);




More information about the Mulgara-svn mailing list