[Mulgara-svn] r413 - branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver

andrae at mulgara.org andrae at mulgara.org
Mon Sep 10 10:17:54 UTC 2007


Author: andrae
Date: 2007-09-10 05:17:54 -0500 (Mon, 10 Sep 2007)
New Revision: 413

Modified:
   branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/AppendAggregateTuples.java
   branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/LocalQuery.java
   branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/LocalQueryResolver.java
Log:
Finished decoupling AppendAggregateTuples from LocalQuery.
Now depends on LocalQueryResolver - but will eventually depend on
QueryEvaluationContext, along with the rest of the evaluation logic.

LocalQueryResolver also now directly calls into DatabaseOperationContext rather
than indirectly via LocalQuery.



Modified: branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/AppendAggregateTuples.java
===================================================================
--- branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/AppendAggregateTuples.java	2007-09-10 09:51:45 UTC (rev 412)
+++ branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/AppendAggregateTuples.java	2007-09-10 10:17:54 UTC (rev 413)
@@ -96,7 +96,7 @@
   private boolean[] isCacheValid;
 
   /** Exists *only* so we can call resolveMap() */
-  private LocalQuery localQuery;
+  private LocalQueryResolver context;
 
   /**
    * Wrap an {@link Answer} instance.
@@ -112,7 +112,7 @@
    * @throws TuplesException  if there's trouble reading <var>tuples</var>
    */
   AppendAggregateTuples(ResolverSession session,
-      LocalQuery localQuery, Tuples tuples,
+      LocalQueryResolver context, Tuples tuples,
       List variableList) throws TuplesException {
     if (logger.isDebugEnabled()) {
       logger.debug("Generating variable list for " + tuples + " and " +
@@ -127,7 +127,7 @@
     }
 
     // Initialize fields
-    this.localQuery = localQuery;
+    this.context = context;
     this.columnIsAggregate = new boolean[variableList.size()];
     this.columnAggregateIndex = new int[variableList.size()];
     this.session = session;
@@ -265,7 +265,7 @@
         }
 
         // Evaluate the aggregate query
-        Tuples tuples = localQuery.resolveMap(query, createBindingMap(this.tuples));
+        Tuples tuples = context.resolveMap(query, createBindingMap(this.tuples));
 
         if (logger.isDebugEnabled()) {
           logger.debug("Resolved aggregate to " + tuples);

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-10 09:51:45 UTC (rev 412)
+++ branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/LocalQuery.java	2007-09-10 10:17:54 UTC (rev 413)
@@ -77,9 +77,6 @@
   /** The current localisation/globalisation session.  */
   private final ResolverSession resolverSession;
 
-  /** The session this query is local to.  */
-  private final DatabaseOperationContext context;
-
   /** The constraint expression. */
   private ConstraintExpression constraintExpression;
 
@@ -98,7 +95,7 @@
   /** Variable list from select clause */
   private List select;
 
-  private QueryEvaluationContext context;
+  private LocalQueryResolver context;
 
   //
   // Constructor
@@ -132,9 +129,9 @@
     }
 
     // Initialize fields
-    this.constraintExpression = query.getConstraintExpression();
+    this.context = new LocalQueryResolver(context, resolverSession);
     this.resolverSession = resolverSession;
-    this.context = context;
+    this.constraintExpression = query.getConstraintExpression();
     this.modelExpression = (ModelExpression)query.getModelExpression().clone();
     this.orderList = query.getOrderList();
     this.offset = query.getOffset();
@@ -164,47 +161,6 @@
   // API methods
   //
 
-  Tuples resolveMap(Query query, Map outerBindings) throws QueryException
-  {
-    try {
-      Query newQuery = new Query(
-          query.getVariableList(),
-          query.getModelExpression(),
-          new ConstraintConjunction(
-              ConstraintOperations.bindVariables(outerBindings, query.getConstraintExpression()),
-              constrainBindings(outerBindings)),
-          query.getHavingExpression(),
-          query.getOrderList(),
-          query.getLimit(),
-          query.getOffset(),
-          (Answer)query.getGiven().clone());
-          
-      return context.innerCount(newQuery);
-    } catch (LocalizeException el) {
-      throw new QueryException("Failed to resolve inner local query", el);
-    }
-  }
-
-
-  // FIXME: This method should be using a LiteralTuples.  Also I believe MULGARA_IS is now preallocated.
-  // Someone needs to try making the change and testing.
-  private ConstraintExpression constrainBindings(Map bindings) throws LocalizeException {
-    List args = new ArrayList();
-    Iterator i = bindings.entrySet().iterator();
-    logger.info("FIXME:localize should be lookup, need to preallocate MULGARA_IS");
-    while (i.hasNext()) {
-      Map.Entry entry = (Map.Entry)i.next();
-      args.add(ConstraintIs.newLocalConstraintIs(
-                  (Variable)entry.getKey(),
-                  new LocalNode(resolverSession.localize(ConstraintIs.MULGARA_IS)),
-                  (Value)entry.getValue(),
-                  null));
-    }
-
-    return new ConstraintConjunction(args);
-  }
-
-
   /**
    * @return the solution to this query
    * @throws QueryException if resolution can't be obtained
@@ -220,8 +176,7 @@
         logger.debug("Stacktrace: ", new Throwable());
       }
 
-      Tuples result = ConstraintOperations.resolveConstraintExpression(
-          new LocalQueryResolver(context, resolverSession), modelExpression, constraintExpression);
+      Tuples result = ConstraintOperations.resolveConstraintExpression(context, modelExpression, constraintExpression);
 
       if (logger.isDebugEnabled()) {
         logger.debug("Tuples result = " + TuplesOperations.formatTuplesTree(result));
@@ -275,7 +230,7 @@
   {
     if (result.getRowCardinality() != Tuples.ZERO) {
       Tuples tmp = result;
-      result = new AppendAggregateTuples(resolverSession, this, result, filterSubqueries(select));
+      result = new AppendAggregateTuples(resolverSession, context, result, filterSubqueries(select));
       tmp.close();
     }
 

Modified: branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/LocalQueryResolver.java
===================================================================
--- branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/LocalQueryResolver.java	2007-09-10 09:51:45 UTC (rev 412)
+++ branches/mgr-69/src/jar/resolver/java/org/mulgara/resolver/LocalQueryResolver.java	2007-09-10 10:17:54 UTC (rev 413)
@@ -472,4 +472,44 @@
   public ResolverSession getResolverSession() {
     return resolverSession;
   }
+
+  Tuples resolveMap(Query query, Map outerBindings) throws QueryException
+  {
+    try {
+      Query newQuery = new Query(
+          query.getVariableList(),
+          query.getModelExpression(),
+          new ConstraintConjunction(
+              ConstraintOperations.bindVariables(outerBindings, query.getConstraintExpression()),
+              constrainBindings(outerBindings)),
+          query.getHavingExpression(),
+          query.getOrderList(),
+          query.getLimit(),
+          query.getOffset(),
+          (Answer)query.getGiven().clone());
+          
+      return operationContext.innerCount(newQuery);
+    } catch (LocalizeException el) {
+      throw new QueryException("Failed to resolve inner local query", el);
+    }
+  }
+
+
+  // FIXME: This method should be using a LiteralTuples.  Also I believe MULGARA_IS is now preallocated.
+  // Someone needs to try making the change and testing.
+  private ConstraintExpression constrainBindings(Map bindings) throws LocalizeException {
+    List args = new ArrayList();
+    Iterator i = bindings.entrySet().iterator();
+    logger.info("FIXME:localize should be lookup, need to preallocate MULGARA_IS");
+    while (i.hasNext()) {
+      Map.Entry entry = (Map.Entry)i.next();
+      args.add(ConstraintIs.newLocalConstraintIs(
+                  (Variable)entry.getKey(),
+                  new LocalNode(resolverSession.localize(ConstraintIs.MULGARA_IS)),
+                  (Value)entry.getValue(),
+                  null));
+    }
+
+    return new ConstraintConjunction(args);
+  }
 }




More information about the Mulgara-svn mailing list