Update of /var/cvs/src/org/mmbase/storage/search/implementation/database
In directory james.mmbase.org:/tmp/cvs-serv31821/database

Modified Files:
        BasicSqlHandler.java 
Log Message:
MMB-1036, MMB-1732


See also: 
http://cvs.mmbase.org/viewcvs/src/org/mmbase/storage/search/implementation/database
See also: http://www.mmbase.org/jira/browse/MMB-1036
See also: http://www.mmbase.org/jira/browse/MMB-1732


Index: BasicSqlHandler.java
===================================================================
RCS file: 
/var/cvs/src/org/mmbase/storage/search/implementation/database/BasicSqlHandler.java,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -b -r1.76 -r1.77
--- BasicSqlHandler.java        13 Aug 2008 09:02:00 -0000      1.76
+++ BasicSqlHandler.java        25 Nov 2008 13:20:10 -0000      1.77
@@ -23,7 +23,7 @@
  * Basic implementation.
  *
  * @author Rob van Maris
- * @version $Id: BasicSqlHandler.java,v 1.76 2008/08/13 09:02:00 pierre Exp $
+ * @version $Id: BasicSqlHandler.java,v 1.77 2008/11/25 13:20:10 michiel Exp $
  * @since MMBase-1.7
  */
 
@@ -661,6 +661,10 @@
         return sb;
     }
 
+    protected StringBuilder appendRegularExpressionOperator(StringBuilder sb, 
boolean caseSensitive) {
+        throw new UnsupportedOperationException();
+    }
+
     /**
      * @javadoc
      */
@@ -704,8 +708,7 @@
     // javadoc is inherited
     // XXX what exception to throw when an unsupported constraint is
     // encountered (currently throws UnsupportedOperationException)?
-    public void appendConstraintToSql(StringBuilder sb, Constraint constraint,
-    SearchQuery query, boolean inverse, boolean inComposite) {
+    public void appendConstraintToSql(StringBuilder sb, Constraint constraint, 
SearchQuery query, boolean inverse, boolean inComposite)  throws 
SearchQueryException {
 
         // Net effect of inverse setting with constraint inverse property.
         boolean overallInverse = inverse ^ constraint.isInverse();
@@ -763,7 +766,21 @@
                     appendFieldValue(sb, values.first(),
                         !fieldConstraint.isCaseSensitive(), fieldType);
                 }
-
+            } else if (fieldConstraint instanceof FieldValueInQueryConstraint) 
{
+                FieldValueInQueryConstraint queryConstraint = 
(FieldValueInQueryConstraint) fieldConstraint;
+                String subQuery = toSql(queryConstraint.getInQuery(), this);
+                if (isRelevantCaseInsensitive(fieldConstraint)) {
+                    // case insensitive
+                    sb.append("LOWER(");
+                    appendField(sb, step, fieldName, multipleSteps);
+                    sb.append(")");
+                } else {
+                    // case sensitive or case irrelevant
+                    appendField(sb, step, fieldName, multipleSteps);
+                }
+                sb.append(overallInverse? " NOT IN (": " IN (");
+                sb.append(subQuery);
+                sb.append(")");
             } else if (fieldConstraint instanceof FieldValueBetweenConstraint) 
{
 
                 // Field value-between constraint
@@ -840,11 +857,12 @@
                     }
                     appendLikeOperator(sb, fieldConstraint.isCaseSensitive());
                     break;
-                    /*
                 case FieldValueConstraint.REGEXP:
-                    sb.append(getRegularExpressionOperator());
+                    if (overallInverse) {
+                        sb.append(" NOT");
+                    }
+                    appendRegularExpressionOperator(sb, 
fieldConstraint.isCaseSensitive());
                     break;
-                    */
                 default:
                     throw new IllegalStateException("Unknown operator value in 
constraint: " + fieldCompareConstraint.getOperator());
                 }
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to