[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