This is an automated email from the ASF dual-hosted git repository.

doebele pushed a commit to branch version3
in repository https://gitbox.apache.org/repos/asf/empire-db.git


The following commit(s) were added to refs/heads/version3 by this push:
     new aace24e  EMPIREDB-373 if prepared statements is enabled then 
automatically convert where expressions
aace24e is described below

commit aace24e3d0a73d0ab90280f10c31b144f0b1c5c6
Author: Rainer Döbele <[email protected]>
AuthorDate: Tue Feb 15 12:34:10 2022 +0100

    EMPIREDB-373 if prepared statements is enabled then automatically convert 
where expressions
---
 .../empire/samples/db/advanced/CarSalesDB.java     |  4 +--
 .../empire/samples/db/advanced/SampleAdvApp.java   |  1 +
 .../main/java/org/apache/empire/db/DBCommand.java  | 14 +++++++---
 .../main/java/org/apache/empire/db/DBRowSet.java   |  6 ----
 .../empire/db/expr/compare/DBCompareAndOrExpr.java | 12 ++++++++
 .../empire/db/expr/compare/DBCompareColExpr.java   | 32 ++++++++++++++++++++++
 .../empire/db/expr/compare/DBCompareExpr.java      |  7 +++++
 .../empire/db/expr/compare/DBCompareNotExpr.java   | 11 ++++++++
 .../empire/db/expr/compare/DBExistsExpr.java       | 10 +++++++
 .../empire/db/expr/compare/DBParenthesisExpr.java  | 21 +++++++++-----
 10 files changed, 99 insertions(+), 19 deletions(-)

diff --git 
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/CarSalesDB.java
 
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/CarSalesDB.java
index 0fbccc6..90dec27 100644
--- 
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/CarSalesDB.java
+++ 
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/CarSalesDB.java
@@ -334,7 +334,7 @@ public class CarSalesDB extends TDatabase<CarSalesDB>
            .having(SALES.MODEL_ID.count().isGreaterThan(10))
            .orderBy(BRAND.NAME.desc(), MODEL.NAME.asc());
         */
-        DBCommand cmd = createCommand()
+        DBCommand cmd = context.createCommand(this)
            .selectQualified(BRAND.NAME, MODEL.CONFIG_NAME) 
            .select  (MODEL.BASE_PRICE)
            .select  (SALES.MODEL_ID.count(), SALES.PRICE.avg())
@@ -365,7 +365,7 @@ public class CarSalesDB extends TDatabase<CarSalesDB>
     public void updateDemo(DBContext context)
     {
         
-        DBCommand cmd = createCommand()
+        DBCommand cmd = context.createCommand(this)
             .set  (MODEL.BASE_PRICE.to(55000))  // set the price-tag
             .join (MODEL.BRAND_ID, BRAND.ID)
             .where(BRAND.NAME.is("Tesla"))
diff --git 
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
 
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
index c5a1484..b52ac4c 100644
--- 
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
+++ 
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
@@ -115,6 +115,7 @@ public class SampleAdvApp
         db.open(context);
         carSales.open(context);
         carSales.queryDemo(context);
+        carSales.updateDemo(context);
 
         // STEP 5: Clear Database (Delete all records)
         System.out.println("*** Step 5: clearDatabase() ***");
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java 
b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
index 7106c75..0a49d6d 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
@@ -427,7 +427,7 @@ public abstract class DBCommand extends DBCommandExpr
         {
             DBSetExpr chk = set.get(i);
             if (chk.column.equals(expr.column))
-            { // Overwrite existing value
+            {   // Overwrite existing value
                 if (useCmdParam(expr.column, expr.value))
                 {   // replace parameter value
                     // int index = ((DBCommandParam) chk.value).index;
@@ -1176,7 +1176,7 @@ public abstract class DBCommand extends DBCommandExpr
     /**
      * returns true if a cmdParam should be used for the given column or false 
otherwise
      */
-    protected boolean useCmdParam(DBColumn col, Object value)
+    protected boolean useCmdParam(DBColumnExpr col, Object value)
     {
         // Cannot wrap DBExpr or DBSystemDate
         if (value==null || value instanceof DBExpr || value instanceof 
DBDatabase.DBSystemDate)
@@ -1195,9 +1195,15 @@ public abstract class DBCommand extends DBCommandExpr
      * @param expr the DBCompareExpr object
      */
     protected void setConstraint(List<DBCompareExpr> list, DBCompareExpr expr)
-    { // adds a comparison to the where or having list
+    {
+        // Check if prepared statements are enabled
+        if (isPreparedStatementsEnabled())
+        {   // use command params
+            expr.prepareCommand(this);
+        }
+        // adds a comparison to the where or having list
         for (int i = 0; i < list.size(); i++)
-        { // check expression
+        {   // check expression
                DBCompareExpr other = list.get(i);
             if (expr.isMutuallyExclusive(other)==false)
                 continue;
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java 
b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
index 7d9eb7f..540f0aa 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
@@ -761,8 +761,6 @@ public abstract class DBRowSet extends DBExpr implements 
EntityType
         {   // prepare key value
             DBColumn column = keyColumns[i];
             Object value = key[i];
-            if (db.isPreparedStatementsEnabled())
-                value = cmd.addParam(column, value);
             // set key column constraint
             cmd.where(column.is(value));
         }    
@@ -1034,16 +1032,12 @@ public abstract class DBRowSet extends DBExpr 
implements EntityType
                         log.warn("updateRecord: " + name + " primary has been 
modified!");
                     }
                     // set pk constraint
-                    if (db.isPreparedStatementsEnabled())
-                        value = cmd.addParam(col, value);
                     cmd.where(col.is(value));
                 } 
                 else if (timestampColumn == col)
                 {   // Check the update-timestamp
                        if (empty==false) 
                        {   // set timestamp constraint
-                        if (db.isPreparedStatementsEnabled())
-                            value = cmd.addParam(col, value);
                         cmd.where(col.is(value));
                        }    
                        // set new timestamp
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareAndOrExpr.java
 
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareAndOrExpr.java
index 85b7ff7..9acf423 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareAndOrExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareAndOrExpr.java
@@ -21,6 +21,7 @@ package org.apache.empire.db.expr.compare;
 import java.util.Set;
 
 import org.apache.empire.db.DBColumn;
+import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBDatabase;
 
 
@@ -82,6 +83,17 @@ public class DBCompareAndOrExpr extends DBCompareExpr
     }
 
     /**
+     * Prepare function
+     * @param cmd
+     */
+    @Override
+    public void prepareCommand(DBCommand cmd) 
+    {
+        left.prepareCommand(cmd);
+        right.prepareCommand(cmd);
+    }
+
+    /**
      * @see org.apache.empire.db.DBExpr#addReferencedColumns(Set)
      */
     @Override
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareColExpr.java
 
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareColExpr.java
index e650598..72fb654 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareColExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareColExpr.java
@@ -20,9 +20,11 @@ package org.apache.empire.db.expr.compare;
 
 import java.util.Set;
 
+import org.apache.empire.db.DBCmdParam;
 import org.apache.empire.db.DBCmpType;
 import org.apache.empire.db.DBColumn;
 import org.apache.empire.db.DBColumnExpr;
+import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBDatabase;
 import org.apache.empire.db.DBExpr;
 import org.apache.empire.db.expr.column.DBAbstractFuncExpr;
@@ -112,6 +114,36 @@ public class DBCompareColExpr extends DBCompareExpr
     }
 
     /**
+     * Prepare function
+     * @param cmd
+     */
+    @Override
+    public void prepareCommand(DBCommand cmd) 
+    {
+        // Cannot user DBExpr or DBSystemDate as parameter
+        if (value==null || value instanceof DBCmdParam || value instanceof 
DBExpr || value instanceof DBDatabase.DBSystemDate)
+            return;
+        // check operator
+        switch(cmpop)
+        {
+            case EQUAL:
+            case NOTEQUAL:
+            case LESSTHAN:
+            case MOREOREQUAL:
+            case GREATERTHAN:
+            case LESSOREQUAL:
+            case LIKE:
+            case NOTLIKE:
+                // create command param
+                value = cmd.addParam(expr.getDataType(), value);
+                break;
+            default:
+                // not supported
+                return;
+        }
+    }
+    
+    /**
      * @see org.apache.empire.db.DBExpr#addReferencedColumns(Set)
      */
     @Override
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareExpr.java
index c66a859..b721c4b 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareExpr.java
@@ -18,6 +18,7 @@
  */
 package org.apache.empire.db.expr.compare;
 
+import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBExpr;
 
 /**
@@ -63,5 +64,11 @@ public abstract class DBCompareExpr extends DBExpr
        {
                return new DBCompareNotExpr(this);
        }
+       
+       /**
+        * internally used for preapred statement generation
+        * @param cmd
+        */
+       public abstract void prepareCommand(DBCommand cmd); 
 
 }
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareNotExpr.java
 
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareNotExpr.java
index bd280e4..9c01eb4 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareNotExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareNotExpr.java
@@ -19,6 +19,7 @@
 package org.apache.empire.db.expr.compare;
 
 import org.apache.empire.db.DBColumn;
+import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBDatabase;
 
 import java.util.Set;
@@ -61,6 +62,16 @@ public class DBCompareNotExpr extends DBCompareExpr
     }
 
     /**
+     * Prepare function
+     * @param cmd
+     */
+    @Override
+    public void prepareCommand(DBCommand cmd) 
+    {
+        expr.prepareCommand(cmd);
+    }
+
+    /**
      * @see org.apache.empire.db.DBExpr#addReferencedColumns(Set)
      */
     @Override
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBExistsExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBExistsExpr.java
index a56e399..032ba99 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBExistsExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBExistsExpr.java
@@ -77,6 +77,16 @@ public class DBExistsExpr extends DBCompareExpr
     }
 
     /**
+     * Prepare function
+     * @param cmd
+     */
+    @Override
+    public void prepareCommand(DBCommand cmd) 
+    {
+        /* nothing yet */
+    }
+
+    /**
      * @see org.apache.empire.db.DBExpr#addReferencedColumns(Set)
      */
     @Override
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBParenthesisExpr.java
 
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBParenthesisExpr.java
index dab3138..dffdf0f 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBParenthesisExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBParenthesisExpr.java
@@ -21,6 +21,7 @@ package org.apache.empire.db.expr.compare;
 import java.util.Set;
 
 import org.apache.empire.db.DBColumn;
+import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBDatabase;
 
 /**
@@ -30,42 +31,48 @@ import org.apache.empire.db.DBDatabase;
 public class DBParenthesisExpr extends DBCompareExpr
 {
     // *Deprecated* private static final long serialVersionUID = 1L;
-    private final DBCompareExpr wrap;
+    private final DBCompareExpr wrapped;
     
     public DBParenthesisExpr(DBCompareExpr wrap)
     {
-        this.wrap = wrap;
+        this.wrapped = wrap;
     }
     
     public DBCompareExpr getWrapped()
     {
-        return wrap;
+        return wrapped;
     }
 
     @SuppressWarnings("unchecked")
     @Override
     public final DBDatabase getDatabase()
     {
-        return wrap.getDatabase();
+        return wrapped.getDatabase();
     }
     
     @Override
     public boolean isMutuallyExclusive(DBCompareExpr other)
     {
-        return wrap.isMutuallyExclusive(other);
+        return wrapped.isMutuallyExclusive(other);
+    }
+
+    @Override
+    public void prepareCommand(DBCommand cmd) 
+    {
+        wrapped.prepareCommand(cmd);
     }
 
     @Override
     public void addReferencedColumns(Set<DBColumn> list)
     {
-        wrap.addReferencedColumns(list);
+        wrapped.addReferencedColumns(list);
     }
 
     @Override
     public void addSQL(StringBuilder buf, long context)
     {
         buf.append("(");
-        wrap.addSQL(buf, context|CTX_NOPARENTHESES);
+        wrapped.addSQL(buf, context|CTX_NOPARENTHESES);
         buf.append(")");
     }
 }

Reply via email to