Author: doogie
Date: Sun Nov 22 20:07:29 2009
New Revision: 883138

URL: http://svn.apache.org/viewvc?rev=883138&view=rev
Log:
Add flags to disable joins on DELETE and UPDATE.

Modified:
    ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/SQLUtil.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Parser.jj

Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/SQLUtil.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/SQLUtil.java?rev=883138&r1=883137&r2=883138&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/SQLUtil.java 
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/sql/SQLUtil.java Sun Nov 
22 20:07:29 2009
@@ -19,17 +19,24 @@
 package org.ofbiz.entity.sql;
 
 import java.io.StringReader;
+import java.util.List;
 
 import org.ofbiz.entity.condition.EntityCondition;
 
 import org.ofbiz.sql.Parser;
 import org.ofbiz.sql.ParseException;
+import org.ofbiz.sql.SQLPlan;
+import org.ofbiz.sql.SQLStatement;
 
 public class SQLUtil {
     private static final EntityPlanner planner = new EntityPlanner();
 
+    private static Parser updateParserFlags(Parser parser) {
+        return parser.deleteSupportsUsing(false).updateSupportsFrom(false);
+    }
+
     public static EntitySelectPlan parseSelect(String sql) throws 
ParseException {
-       return planner.planSelect(new Parser(new 
StringReader(sql)).SelectStatement());
+       return planner.planSelect(updateParserFlags(new Parser(new 
StringReader(sql))).SelectStatement());
     }
     /*
     public static EntityCondition parseCondition(String condition) throws 
ParseException {

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Parser.jj
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Parser.jj?rev=883138&r1=883137&r2=883138&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Parser.jj (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/Parser.jj Sun Nov 22 20:07:29 
2009
@@ -47,6 +47,19 @@
 import javolution.util.FastMap;
 
 public final class Parser {
+       private boolean deleteSupportsUsing = true;
+       private boolean updateSupportsFrom = true;
+
+       public Parser deleteSupportsUsing(boolean value) {
+               deleteSupportsUsing = value;
+               return this;
+       }
+
+       public Parser updateSupportsFrom(boolean value) {
+               updateSupportsFrom = value;
+               return this;
+       }
+
        private Condition reduce(List<Condition> conditions, Joiner joiner) {
                if (conditions.size() == 1) {
                        return conditions.get(0);
@@ -306,7 +319,7 @@
        <SET>
        setFields=SetField() { allSetFields.addAll(setFields); }
        ( <COMMA> setFields=SetField() { allSetFields.addAll(setFields); } )*
-       ( <FROM> joined=JoinedRest(false, tableName) )?
+       ( LOOKAHEAD(<FROM>, {updateSupportsFrom}) <FROM> 
joined=JoinedRest(false, tableName) )?
        ( <WHERE> whereCondition=ConditionExpression() )?
        { return new SQLUpdate(new Table(tableName, joined), allSetFields, 
whereCondition); }
 }
@@ -320,7 +333,7 @@
 }
 {
        <DELETE> <FROM> tableName=TableName()
-       ( <USING> joined=JoinedRest(false, tableName) )?
+       ( LOOKAHEAD(<USING>, {deleteSupportsUsing}) <USING> 
joined=JoinedRest(false, tableName) )?
        ( <WHERE> whereCondition=ConditionExpression() )?
        { return new SQLDelete(new Table(tableName, joined), whereCondition); }
 }


Reply via email to