EMPIREDB-318
DBQuery code optimization
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 @@
     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 @@
             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 @@
         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 @@
     {

         DBColumn column = columns.get(index);

         if (column instanceof DBQueryColumn)

-            return ((DBQueryColumn)column).expr;  // unwrap

+            return ((DBQueryExprColumn)column).expr;  // unwrap

         // use column

         return column;

     }