Author: michiel
Date: 2010-03-19 18:55:45 +0100 (Fri, 19 Mar 2010)
New Revision: 41543
Added:
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/QueryContext.java
Modified:
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ClusterQueries.java
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/legacy/ConstraintParser.java
Log:
to fix MMB-1936, factoring out core dependencies of ConstraintParser
Modified:
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ClusterQueries.java
===================================================================
---
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ClusterQueries.java
2010-03-19 15:55:44 UTC (rev 41542)
+++
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ClusterQueries.java
2010-03-19 17:55:45 UTC (rev 41543)
@@ -18,11 +18,10 @@
import org.mmbase.util.logging.*;
/**
- * This g
*
* @author michiel
* @author Rob van Maris (ClusterBuilder)
- * @version $Id: $
+ * @version $Id$
*/
public abstract class ClusterQueries {
@@ -490,6 +489,8 @@
// package visibility!
public void addSortOrders(BasicSearchQuery query, List<String> fieldNames,
List<String> directions, Map<String, BasicStepField> fieldsByAlias) {
+ final QueryContext queryContext =
org.mmbase.module.core.CoreQueryContext.INSTANCE;
+
// Test if fieldnames are specified.
if (fieldNames == null || fieldNames.size() == 0) {
return;
@@ -509,7 +510,7 @@
StepField field= fieldsByAlias.get(fieldName);
if (field == null) {
// Field has not been added.
- field= ConstraintParser.getField(fieldName, query.getSteps());
+ field = ConstraintParser.getField(queryContext, fieldName,
query.getSteps());
}
if (field == null) {
throw new IllegalArgumentException("Invalid fieldname: \"" +
fieldName + "\"");
Property changes on:
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/ClusterQueries.java
___________________________________________________________________
Name: svn:keywords
+ Id
Added:
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/QueryContext.java
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/storage/search/QueryContext.java
(rev 0)
+++ mmbase/trunk/core/src/main/java/org/mmbase/storage/search/QueryContext.java
2010-03-19 17:55:45 UTC (rev 41543)
@@ -0,0 +1,45 @@
+/*
+
+This software is OSI Certified Open Source Software.
+OSI Certified is a certification mark of the Open Source Initiative.
+
+The license (Mozilla version 1.0) can be read at the MMBase site.
+See http://www.MMBase.org/license
+
+*/
+package org.mmbase.storage.search;
+
+import java.util.*;
+import org.mmbase.bridge.*;
+
+/**
+ * How there is dealt with SearchQuery object may depend a bit on the actual
implementation of the bridge and storage.
+ * This is collected in implemetnations of this interface
+ *
+ *
+ * @author Michiel Meeuwissen
+ * @version $Id: Step.java 36486 2009-06-29 17:33:41Z michiel $
+ * @since MMBase-2.0
+ */
+public interface QueryContext {
+
+ String getStorageIdentifier(String s);
+ Field getField(String builder, String fieldName);
+
+
+ public static class Bridge implements QueryContext {
+
+ protected final Cloud cloud;
+ public Bridge(Cloud c) {
+ cloud = c;
+ }
+ public String getStorageIdentifier(String s) {
+ return s;
+ }
+ public Field getField(String builder, String fieldName) {
+ return cloud.getNodeManager(builder).getField(fieldName);
+ }
+ }
+
+
+}
Modified:
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/legacy/ConstraintParser.java
===================================================================
---
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/legacy/ConstraintParser.java
2010-03-19 15:55:44 UTC (rev 41542)
+++
mmbase/trunk/core/src/main/java/org/mmbase/storage/search/legacy/ConstraintParser.java
2010-03-19 17:55:45 UTC (rev 41543)
@@ -10,10 +10,7 @@
package org.mmbase.storage.search.legacy;
import java.util.*;
-import org.mmbase.bridge.Field;
-import org.mmbase.core.CoreField;
-import org.mmbase.module.core.*;
-import org.mmbase.storage.StorageManagerFactory;
+import org.mmbase.bridge.*;
import org.mmbase.storage.search.*;
import org.mmbase.storage.search.implementation.*;
import org.mmbase.util.logging.*;
@@ -131,8 +128,7 @@
* @return Converted constraint
* @since MMBase-1.8.1 (moved from org.mmbase.bridge.util.Queries)
*/
- private static String convertClausePartToDBS(String constraints) {
- StorageManagerFactory<?> factory =
MMBase.getMMBase().getStorageManagerFactory();
+ private static String convertClausePartToDBS(QueryContext queryContext,
String constraints) {
StringBuilder result = new StringBuilder();
int posa = constraints.indexOf('[');
while (posa > -1) {
@@ -143,9 +139,10 @@
String fieldName = constraints.substring(posa + 1, posb);
int posc = fieldName.indexOf('.');
if (posc == -1) {
- fieldName = factory != null ?
factory.getStorageIdentifier(fieldName).toString() : fieldName;
+ fieldName = queryContext.getStorageIdentifier(fieldName);
} else {
- fieldName = fieldName.substring(0, posc + 1) + (factory !=
null ? factory.getStorageIdentifier(fieldName.substring(posc + 1)) :
fieldName.substring(posc + 1));
+ fieldName = fieldName.substring(0, posc + 1) +
+
queryContext.getStorageIdentifier(fieldName.substring(posc + 1));
}
result.append(constraints.substring(0,
posa)).append(fieldName);
constraints = constraints.substring(posb + 1);
@@ -164,7 +161,7 @@
* @return converted constraint
* @since MMBase-1.8.1 (moved from org.mmbase.bridge.util.Queries)
*/
- public static String convertClauseToDBS(String constraints) {
+ public static String convertClauseToDBS(QueryContext queryContext, String
constraints) {
if (constraints.startsWith("MMNODE")) {
// wil probably not work
// @todo check
@@ -194,14 +191,14 @@
String part = constraints.substring(0, quoteOpen);
//append to the string buffer "part" the first part
- result.append(convertClausePartToDBS(part));
+ result.append(convertClausePartToDBS(queryContext, part));
result.append(constraints.substring(quoteOpen, quoteClose + 1));
constraints = constraints.substring(quoteClose + 1);
quoteOpen = constraints.indexOf('\'');
}
- result.append(convertClausePartToDBS(constraints));
+ result.append(convertClausePartToDBS(queryContext, constraints));
return result.toString();
}
@@ -394,8 +391,8 @@
* @return The field.
*/
- public static StepField getField(String token, List<? extends Step> steps)
{
- return getField(token, (List<BasicStep>) steps, null);
+ public static StepField getField(QueryContext queryContext, String token,
List<? extends Step> steps) {
+ return getField(queryContext, token, (List<BasicStep>) steps, null);
}
/**
* Creates <code>StepField</code> corresponding to field indicated by
@@ -416,7 +413,7 @@
* @since MMBase-1.7.1
*/
- static StepField getField(String token, List<BasicStep> steps, SearchQuery
query) {
+ static StepField getField(QueryContext queryContext, String token,
List<BasicStep> steps, SearchQuery query) {
BasicStep step = null;
int bracketOffset = (token.startsWith("[") && token.endsWith("]")) ? 1
: 0;
int idx = token.indexOf('.');
@@ -436,7 +433,8 @@
} else {
step = getStep(token.substring(bracketOffset, idx), steps);
}
- MMObjectBuilder builder = step.getBuilder();
+
+ String builder = step.getTableName();
String fieldName;
if (idx == -1) {
fieldName = token.substring(bracketOffset, token.length() -
bracketOffset);
@@ -444,20 +442,20 @@
fieldName = token.substring(idx + 1, token.length() -
bracketOffset);
}
- CoreField coreField = builder.getField(fieldName);
+ Field coreField = queryContext.getField(builder, fieldName);
// maybe the field was already escaped with getAllowedField
// otherwise it will definitely fail!
if (coreField == null) {
- String escapedFieldName =
MMBase.getMMBase().getStorageManagerFactory().getStorageIdentifier(fieldName).toString();
+ String escapedFieldName =
queryContext.getStorageIdentifier(fieldName);
if (! escapedFieldName.equals(fieldName)) {
- coreField = builder.getField(fieldName);
+ coreField = queryContext.getField(builder, fieldName);
if (coreField == null) {
- throw new IllegalArgumentException("Unknown field (of
builder " + builder.getTableName() + "): \"" + escapedFieldName + "\"");
+ throw new IllegalArgumentException("Unknown field (of
builder " + builder + "): \"" + escapedFieldName + "\"");
}
}
}
if (coreField == null) {
- throw new IllegalArgumentException("Unknown field (of builder " +
builder.getTableName() + "): \"" + fieldName + "\"");
+ throw new IllegalArgumentException("Unknown field (of builder " +
builder + "): \"" + fieldName + "\"");
}
BasicStepField field = new BasicStepField(step, coreField);
return field;
@@ -487,10 +485,12 @@
throw new IllegalArgumentException("Unknown table alias: \"" + alias +
"\"");
}
+ protected QueryContext queryContext = BRIDGE;
+
/** Creates a new instance of ConstraintParser
* @param query
*/
- public ConstraintParser(SearchQuery query) {
+ protected ConstraintParser(SearchQuery query) {
this.query = query;
this.steps = query.getSteps();
}
@@ -521,7 +521,7 @@
+ "\n exception: " + e.getMessage()
+ "\nFalling back to BasicLegacyConstraint...", e);
}
- String escapedSqlConstraint = convertClauseToDBS(sqlConstraint);
+ String escapedSqlConstraint = convertClauseToDBS(queryContext,
sqlConstraint);
if (! validConstraints(escapedSqlConstraint)) {
throw new IllegalArgumentException("Invalid constraints: " +
sqlConstraint);
}
@@ -547,7 +547,7 @@
*/
// package visibility!
StepField getField(String token) {
- return getField(token, (List<BasicStep>) steps, query);
+ return getField(queryContext, token, (List<BasicStep>) steps, query);
}
/**
@@ -1075,4 +1075,9 @@
return result;
}
+
+
+
+ protected static final QueryContext BRIDGE = new
QueryContext.Bridge(org.mmbase.bridge.ContextProvider.getDefaultCloudContext().getCloud("mmbase"));
+
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs