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

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


The following commit(s) were added to refs/heads/master by this push:
     new b181399  EMPIREDB-318 DBQuery code optimization
b181399 is described below

commit b181399f2816876f17cb24e33482ab2cce1ca85b
Author: Rainer Döbele <[email protected]>
AuthorDate: Fri Nov 8 11:15:35 2019 +0100

    EMPIREDB-318
    DBQuery code optimization
---
 .../main/java/org/apache/empire/db/DBQuery.java    | 39 ++++++++++++++++++++--
 1 file changed, 36 insertions(+), 3 deletions(-)

diff --git a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java 
b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
index 9a8ae57..4347a89 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
@@ -60,6 +60,39 @@ public class DBQuery extends DBRowSet
     private final static long serialVersionUID = 1L;
 
     private static AtomicInteger queryCount = new AtomicInteger(0);
+    
+    /**
+     * DBQueryExprColumn 
+     * @author doebele
+     */
+    protected static class DBQueryExprColumn extends DBQueryColumn
+    {
+        private static final long serialVersionUID = 1L;
+        
+        protected DBQueryExprColumn(DBQuery q, String name, DBColumnExpr expr)
+        {
+            super(q, name, expr);
+        }
+        
+        @Override
+        public DBColumn getUpdateColumn()
+        {
+            return expr.getUpdateColumn();
+        }
+        
+        @Override
+        public boolean equals(Object other)
+        {
+            if (super.equals(other))
+                return true;
+            if (other instanceof DBQueryColumn)
+            {   // compare expressions
+                DBQueryColumn oc = (DBQueryColumn)other;
+                return (this.rowset.equals(oc.getRowSet()) && 
this.expr.equals(oc.getExpr()));
+            }
+            return false;
+        }
+    }
 
     protected final DBCommandExpr   cmdExpr;
     protected final DBColumn[]      keyColumns;
@@ -89,7 +122,7 @@ public class DBQuery extends DBRowSet
             DBColumn column = exprList[i].getUpdateColumn();
             if (column==null || (exprList[i] instanceof DBAliasExpr))
             {   // user QueryColumn
-                column = queryColumns[i]; 
+                column = new DBQueryExprColumn(this, 
queryColumns[i].getName(), exprList[i]); 
             }
             columns.add(column);
         }
@@ -632,7 +665,7 @@ public class DBQuery extends DBRowSet
         index=0;
         for (DBColumn c : columns)
         {   // check update column
-            if ((c instanceof DBQueryColumn) && 
column.equals(((DBQueryColumn)c).expr.getUpdateColumn()))
+            if ((c instanceof DBQueryExprColumn) && 
column.equals(c.getUpdateColumn()))
                  return index;
             // next
             index++;
@@ -646,7 +679,7 @@ public class DBQuery extends DBRowSet
     {
         DBColumn column = columns.get(index);
         if (column instanceof DBQueryColumn)
-            return ((DBQueryColumn)column).expr;  // unwrap
+            return ((DBQueryExprColumn)column).expr;  // unwrap
         // use column
         return column;
     }

Reply via email to