[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