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 984b9b8  EMPIREDB-362 code cleanup
984b9b8 is described below

commit 984b9b83716fe1f2adea92d79d913cd83309e523
Author: Rainer Döbele <[email protected]>
AuthorDate: Wed Mar 2 01:34:00 2022 +0100

    EMPIREDB-362 code cleanup
---
 .../empire/samples/db/advanced/SampleAdvApp.java   | 35 +++++++++---
 .../java/org/apache/empire/db/DBColumnExpr.java    | 62 +++++++++++-----------
 .../java/org/apache/empire/db/DBCommandExpr.java   |  2 -
 .../empire/db/expr/column/DBAbstractFuncExpr.java  | 38 +++++++------
 .../empire/db/expr/column/DBCoalesceExpr.java      |  2 +-
 .../apache/empire/db/expr/column/DBConcatExpr.java | 55 +++++++++++++------
 .../empire/db/expr/column/DBConcatFuncExpr.java    |  9 +++-
 .../empire/db/expr/column/DBConvertExpr.java       |  2 +-
 .../apache/empire/db/expr/column/DBDecodeExpr.java | 11 ++--
 .../apache/empire/db/expr/column/DBFuncExpr.java   |  8 +--
 .../org/apache/empire/dbms/hsql/DBCommandHSql.java | 11 ----
 .../test/java/org/apache/empire/db/MockDriver.java |  2 +-
 .../apache/empire/db/PreparedStatementTest.java    |  2 +-
 13 files changed, 139 insertions(+), 100 deletions(-)

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 118df1c..291bb32 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
@@ -120,7 +120,7 @@ public class SampleAdvApp
         // STEP 2.2: Create a Context
         context = new SampleContext(carSales, dbms, conn);
         // set optional context features
-        context.setPreparedStatementsEnabled(false);
+        context.setPreparedStatementsEnabled(true);
         context.setRollbackHandlingEnabled(false);
 
         // STEP 3: Open Database (and create if not existing)
@@ -134,12 +134,13 @@ public class SampleAdvApp
             context.commit();
         }
         
-        subqueryQueryDemo();
-        
         // do simple stuff
-        simpleQueryDemo();
         simpleUpdateDemo();
+
+        
+        simpleQueryDemo();
         queryViewDemo();
+        subqueryQueryDemo();
         paramQueryDemo();
         
         // Remember RollbackHandling
@@ -538,16 +539,36 @@ public class SampleAdvApp
             .where(BRAND.NAME.is("Tesla"))
             .where(MODEL.NAME.is("Model 3").and(MODEL.TRIM.is("Performance")));
         */
+        
+        DBCommand sub = context.createCommand();
+        sub.select(BRAND.WMI, BRAND.NAME);
+        sub.where (BRAND.COUNTRY.is("Deutschland"));
+        DBQuery qqry = new DBQuery(sub, "qt");
 
         // create command
         DBCommand cmd = context.createCommand()
             // increase model base prices by 5%
-            .set  
(MODEL.BASE_PRICE.to(MODEL.BASE_PRICE.multiplyWith(105).divideBy(100).round(0)))
-            .join (MODEL.WMI, BRAND.WMI)
+            .select(MODEL.BASE_PRICE.multiplyWith(105).divideBy(100).round(0))
+            .set  (MODEL.BASE_PRICE.to(55225))
+            .join (MODEL.WMI, BRAND.WMI) // , BRAND.NAME.is("Tesla")
+            // .join (MODEL.WMI, qqry.column(BRAND.WMI), 
qqry.column(BRAND.NAME).like("V%"))
             // on all Volkswagen Tiguan with Diesel engine
-            .where(BRAND.NAME.is("Volkswagen"))
+            .where(BRAND.NAME.like("Volkswagen%"))
             
.where(MODEL.NAME.is("Tiguan").and(MODEL.ENGINE_TYPE.is(EngineType.D)));
         
+
+        String sql = cmd.getSelect();
+        Object[] params = cmd.getParamValues();
+        System.out.println(sql);
+        System.out.println(StringUtils.arrayToString(params, "|"));
+        
+        // 
cmd.removeWhereConstraint(MODEL.NAME.is("Tiguan").and(MODEL.ENGINE_TYPE.is(EngineType.D)));
+        // cmd.removeWhereConstraintOn(BRAND.NAME);
+        sql = cmd.getUpdate();
+        params = cmd.getParamValues();
+        System.out.println(sql);
+        System.out.println(StringUtils.arrayToString(params, "|"));
+        
         // execute Update statement
         int count = context.executeUpdate(cmd);
         log.info("{} models affected", count);
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBColumnExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/DBColumnExpr.java
index 53bec52..8cccc1e 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBColumnExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBColumnExpr.java
@@ -409,7 +409,7 @@ public abstract class DBColumnExpr extends DBExpr
     public DBCompareColExpr like(String value, char escape)
     {
         DBValueExpr  textExpr = new DBValueExpr(getDatabase(), value, 
DataType.VARCHAR);
-        DBFuncExpr escapeExpr = new DBFuncExpr(textExpr, 
DBSqlPhrase.SQL_FUNC_ESCAPE, new Object[] { String.valueOf(escape) }, 
getUpdateColumn(), false, DataType.VARCHAR );
+        DBFuncExpr escapeExpr = new DBFuncExpr(textExpr, 
DBSqlPhrase.SQL_FUNC_ESCAPE, new Object[] { String.valueOf(escape) }, 
DataType.VARCHAR);
         return cmp(DBCmpType.LIKE, escapeExpr);
     }
 
@@ -690,14 +690,14 @@ public abstract class DBColumnExpr extends DBExpr
      * @param dataType the resulting data Type
      * @return the new DBCalcExpr object
      */
-    protected DBColumnExpr getExprFromPhrase(DBSqlPhrase phrase, Object[] 
params, DBColumn updateColumn, boolean isAggregate, DataType dataType)
+    protected DBColumnExpr getExprFromPhrase(DBSqlPhrase phrase, Object[] 
params, DataType dataType)
     {
-        return new DBFuncExpr(this, phrase, params, updateColumn, isAggregate, 
dataType);
+        return new DBFuncExpr(this, phrase, params, dataType);
     }
 
-    protected DBColumnExpr getExprFromPhrase(DBSqlPhrase phrase, Object[] 
params, DBColumn updateColumn, boolean isAggregate)
+    protected DBColumnExpr getExprFromPhrase(DBSqlPhrase phrase, Object[] 
params)
     {
-        return getExprFromPhrase(phrase, params, updateColumn, isAggregate, 
getDataType());
+        return getExprFromPhrase(phrase, params, getDataType());
     }
 
     /**
@@ -730,7 +730,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr modulo(Object divisor)
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MODULO, new Object[] { 
divisor }, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MODULO, new Object[] { 
divisor });
     }
 
     /**
@@ -756,7 +756,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr substring(DBExpr pos)
     {   // Get Expression
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_SUBSTRING, new Object[] 
{ pos }, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_SUBSTRING, new Object[] 
{ pos });
     }
 
     /**
@@ -781,7 +781,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr substring(DBExpr pos, DBExpr count)
     {   // Get Expression
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_SUBSTRINGEX, new 
Object[] { pos, count }, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_SUBSTRINGEX, new 
Object[] { pos, count });
     }
 
     /**
@@ -833,7 +833,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr replace(Object match, Object replace)
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_REPLACE, new Object[] { 
match, replace }, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_REPLACE, new Object[] { 
match, replace });
     }
 
     /**
@@ -843,7 +843,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr reverse()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_REVERSE, null, 
getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_REVERSE, null);
     }
 
     /**
@@ -853,7 +853,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr trim()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_TRIM, null, 
getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_TRIM, null);
     }
 
     /**
@@ -863,7 +863,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr trimLeft()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_LTRIM, null, 
getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_LTRIM, null);
     }
 
     /**
@@ -873,7 +873,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr trimRight()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_RTRIM, null, 
getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_RTRIM, null);
     }
     
     /**
@@ -884,7 +884,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr upper()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_UPPER, null, 
getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_UPPER, null);
     }
 
     /**
@@ -895,7 +895,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr lower()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_LOWER, null, 
getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_LOWER, null);
     }
 
     /**
@@ -907,7 +907,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr format(String format)
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_FORMAT, new Object[] { 
format }, getUpdateColumn(), false, DataType.VARCHAR);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_FORMAT, new Object[] { 
format }, DataType.VARCHAR);
     }
     
     /**
@@ -917,7 +917,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr length()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_LENGTH, null, 
getUpdateColumn(), false, DataType.INTEGER);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_LENGTH, null, 
DataType.INTEGER);
     }
 
     /**
@@ -929,7 +929,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr indexOf(Object str)
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_STRINDEX, new Object[] { 
str }, getUpdateColumn(), false, DataType.INTEGER);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_STRINDEX, new Object[] { 
str }, DataType.INTEGER);
     }
 
     /**
@@ -942,7 +942,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr indexOf(Object str, DBExpr fromPos)
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_STRINDEXFROM, new 
Object[] { str, fromPos }, getUpdateColumn(), false, DataType.INTEGER);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_STRINDEXFROM, new 
Object[] { str, fromPos }, DataType.INTEGER);
     }
 
     /**
@@ -965,7 +965,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr abs()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_ABS, null, 
getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_ABS, null);
     }
 
     /**
@@ -975,7 +975,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr floor()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_FLOOR, null, 
getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_FLOOR, null);
     }
 
     /**
@@ -985,7 +985,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr ceiling()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_CEILING, null, 
getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_CEILING, null);
     }
 
     /**
@@ -997,7 +997,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr round(int decimals)
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_ROUND, new Object[] { 
new Integer(decimals) }, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_ROUND, new Object[] { 
new Integer(decimals) });
     }
 
     /**
@@ -1009,7 +1009,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr trunc(int decimals)
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_TRUNC, new Object[] { 
new Integer(decimals) }, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_TRUNC, new Object[] { 
new Integer(decimals) });
     }
 
     /**
@@ -1020,7 +1020,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr year()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_YEAR, null, null, false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_YEAR, null);
     }
 
     /**
@@ -1031,7 +1031,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr month()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MONTH, null, null, 
false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MONTH, null);
     }
 
     /**
@@ -1042,7 +1042,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr day()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_DAY, null, null, false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_DAY, null);
     }
 
     /**
@@ -1053,7 +1053,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr sum()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_SUM, null, null, true);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_SUM, null);
     }
 
     /**
@@ -1064,7 +1064,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr min()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MIN, null, null, true);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MIN, null);
     }
 
     /**
@@ -1075,7 +1075,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr max()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MAX, null, null, true);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MAX, null);
     }
 
     /**
@@ -1086,7 +1086,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr avg()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_AVG, null, null, true);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_AVG, null);
     }
 
     /**
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
index 24fac9a..934e3f4 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
@@ -26,9 +26,7 @@ import java.util.Set;
 import org.apache.empire.commons.Options;
 import org.apache.empire.data.DataType;
 import org.apache.empire.db.expr.compare.DBCompareExpr;
-import org.apache.empire.db.expr.join.DBJoinExpr;
 import org.apache.empire.db.expr.order.DBOrderByExpr;
-import org.apache.empire.db.expr.set.DBSetExpr;
 import org.apache.empire.dbms.DBMSHandler;
 import org.apache.empire.exceptions.InternalException;
 import org.apache.empire.exceptions.InvalidArgumentException;
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAbstractFuncExpr.java
 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAbstractFuncExpr.java
index 54704cc..b2cf4a5 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAbstractFuncExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAbstractFuncExpr.java
@@ -43,7 +43,6 @@ public abstract class DBAbstractFuncExpr extends DBColumnExpr
     protected static final Logger log = 
LoggerFactory.getLogger(DBAbstractFuncExpr.class);
   
     protected final DBColumnExpr expr;
-    protected final DBColumn     updateColumn; // optional
     protected final boolean      isAggregate;
     protected final DataType     dataType;
 
@@ -56,10 +55,9 @@ public abstract class DBAbstractFuncExpr extends DBColumnExpr
      * @param isAggregate indicates whether the function is an aggregate 
function (sum, min, max, avg, ...)
      * @param dataType indicates the data type of the function result 
      */
-    public DBAbstractFuncExpr(DBColumnExpr expr, DBColumn updateColumn, 
boolean isAggregate, DataType dataType)
+    public DBAbstractFuncExpr(DBColumnExpr expr, boolean isAggregate, DataType 
dataType)
     {
         this.expr = expr;
-        this.updateColumn = updateColumn;
         this.isAggregate = isAggregate || expr.isAggregate(); 
         this.dataType = dataType;
     }
@@ -143,7 +141,7 @@ public abstract class DBAbstractFuncExpr extends 
DBColumnExpr
     @Override
     public DBColumn getUpdateColumn()
     {
-        return updateColumn;
+        return expr.getUpdateColumn();
     }
 
     /**
@@ -262,24 +260,24 @@ public abstract class DBAbstractFuncExpr extends 
DBColumnExpr
     @Override
     public Element addXml(Element parent, long flags)
     {
-        Element elem;
-        if (updateColumn!=null)
-        {   // Update Column
-            elem = updateColumn.addXml(parent, flags);
-        }
-        else
-        {   // Add a column expression for this function
-            elem = XMLUtil.addElement(parent, "column");
-            elem.setAttribute("name", getName());
-            // Add Other Attributes
-            if (attributes!=null)
-                attributes.addXml(elem, flags);
-            // add All Options
-            if (options!=null)
-                options.addXml(elem, this.dataType);
+        // Add a column expression for this function
+        Element elem = XMLUtil.addElement(parent, "column");
+        elem.setAttribute("name", getName());
+        elem.setAttribute("function", getFunctionName());
+        elem.setAttribute("dataType", getDataType().name());
+        elem.setAttribute("aggregate", String.valueOf(isAggregate));
+        DBColumn source = getSourceColumn();
+        if (source!=null)
+        {   Element elemSource = XMLUtil.addElement(elem, "source");
+            source.addXml(elemSource, flags);
         }
+        // Add Other Attributes
+        if (attributes!=null)
+            attributes.addXml(elem, flags);
+        // add All Options
+        if (options!=null)
+            options.addXml(elem, this.dataType);
         // Done
-        elem.setAttribute("function", getFunctionName());
         return elem;
     }
 }
\ No newline at end of file
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBCoalesceExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBCoalesceExpr.java
index ec5891e..2c0d136 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBCoalesceExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBCoalesceExpr.java
@@ -17,7 +17,7 @@ public class DBCoalesceExpr extends DBAbstractFuncExpr
     
     public DBCoalesceExpr(DBColumnExpr expr, Object nullValue)
     {
-        super(expr, expr.getUpdateColumn(), false, expr.getDataType());
+        super(expr, false, expr.getDataType());
         // set the null value
         this.nullValue = nullValue;
     }
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConcatExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConcatExpr.java
index cc7d616..ff376b4 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConcatExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConcatExpr.java
@@ -97,22 +97,6 @@ public class DBConcatExpr extends DBColumnExpr
     }
 
     @Override
-    public Element addXml(Element parent, long flags)
-    {
-        Element elem = XMLUtil.addElement(parent, "column");
-        elem.setAttribute("name", getName());
-        elem.setAttribute("function", "concat");
-        // Add Other Attributes
-        if (attributes!=null)
-            attributes.addXml(elem, flags);
-        // add All Options
-        if (options!=null)
-            options.addXml(elem, getDataType());
-        // Done
-        return elem;
-    }
-
-    @Override
     public DBColumn getSourceColumn()
     {
         return left.getSourceColumn();
@@ -188,7 +172,44 @@ public class DBConcatExpr extends DBColumnExpr
             left.addSQL(buf, context);
             buf.append(template);
             buf.append(getObjectValue(getDataType(), right, context, 
template));
+        }        
+    }
+
+    @Override
+    public Element addXml(Element parent, long flags)
+    {
+        Element elem = XMLUtil.addElement(parent, "column");
+        elem.setAttribute("name", getName());
+        elem.setAttribute("function", "concat");
+        DBColumn source = getSourceColumn();
+        if (source!=null)
+        {   Element elemSource = XMLUtil.addElement(elem, "source");
+            source.addXml(elemSource, flags);
+            // more
+            Object with = right;
+            while (with instanceof DBExpr)
+            {
+                if (with instanceof DBConcatExpr)
+                {
+                   ((DBConcatExpr)with).getSourceColumn().addXml(elemSource, 
flags);
+                    with = ((DBConcatExpr)with).right;
+                    continue;
+                }
+                if (with instanceof DBColumnExpr)
+                {
+                    ((DBColumnExpr)with).addXml(elemSource, flags);
+                }
+                with = null;
+            }
         }
-        
+        // Add Other Attributes
+        if (attributes!=null)
+            attributes.addXml(elem, flags);
+        // add All Options
+        if (options!=null)
+            options.addXml(elem, getDataType());
+        // Done
+        return elem;
     }
+    
 }
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConcatFuncExpr.java
 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConcatFuncExpr.java
index 1ded662..0ad9ec9 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConcatFuncExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConcatFuncExpr.java
@@ -19,6 +19,7 @@
 package org.apache.empire.db.expr.column;
 
 import org.apache.empire.data.DataType;
+import org.apache.empire.db.DBColumn;
 import org.apache.empire.db.DBColumnExpr;
 import org.apache.empire.dbms.DBSqlPhrase;
 
@@ -40,7 +41,7 @@ public class DBConcatFuncExpr extends DBAbstractFuncExpr
      */
     public DBConcatFuncExpr(DBColumnExpr first, String separator, 
DBColumnExpr... others)
     {
-        super(first, null, false, DataType.VARCHAR);
+        super(first, false, DataType.VARCHAR);
         // remember
         this.first = first;
         this.separator = separator;
@@ -74,6 +75,12 @@ public class DBConcatFuncExpr extends DBAbstractFuncExpr
     {
         return "CONCAT";
     }
+
+    @Override
+    public DBColumn getUpdateColumn()
+    {
+        return null;
+    }
     
     /**
      * Returns true if other is equal to this expression  
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConvertExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConvertExpr.java
index 34c4678..cbf9b6c 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConvertExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBConvertExpr.java
@@ -44,7 +44,7 @@ public class DBConvertExpr extends DBAbstractFuncExpr
      */
     public DBConvertExpr(DBColumnExpr expr, DataType dataType, Object format)
     {
-        super(expr, expr.getUpdateColumn(), false, dataType);
+        super(expr, false, dataType);
         // Save Info
         this.format = format;
     }
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBDecodeExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBDecodeExpr.java
index 45380e3..9be80c8 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBDecodeExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBDecodeExpr.java
@@ -55,7 +55,7 @@ public class DBDecodeExpr extends DBAbstractFuncExpr
      */
     public DBDecodeExpr(DBColumnExpr expr, Map<?,?> valueMap, Object elseExpr, 
DataType dataType)
     {
-        super(expr, expr.getUpdateColumn(), false, dataType);
+        super(expr, false, dataType);
         // Save Info
         this.valueMap = valueMap;
         this.elseExpr = elseExpr; 
@@ -64,7 +64,13 @@ public class DBDecodeExpr extends DBAbstractFuncExpr
     @Override
     protected String getFunctionName()
     {
-        return "decode";
+        return "DECODE";
+    }
+
+    @Override
+    public DBColumn getUpdateColumn()
+    {
+        return null;
     }
 
     @Override
@@ -136,5 +142,4 @@ public class DBDecodeExpr extends DBAbstractFuncExpr
         // No DBColumnExpr found
         return null;
     }
-
 }
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBFuncExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBFuncExpr.java
index 6751330..0bbd93c 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBFuncExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBFuncExpr.java
@@ -62,9 +62,9 @@ public class DBFuncExpr extends DBAbstractFuncExpr
      * @param isAggregate indicates whether the function is an aggregate 
function (sum, min, max, avg, ...)
      * @param dataType indicates the data type of the function result 
      */
-    public DBFuncExpr(DBColumnExpr expr, DBSqlPhrase phrase, Object[] params, 
DBColumn updateColumn, boolean isAggregate, DataType dataType)
+    public DBFuncExpr(DBColumnExpr expr, DBSqlPhrase phrase, Object[] params, 
DataType dataType)
     {
-        super(expr, updateColumn, isAggregate, dataType);
+        super(expr, phrase.isAggregate(), dataType);
         // Set Phrase and Params
         this.phrase = phrase;
         this.params = params;
@@ -87,9 +87,9 @@ public class DBFuncExpr extends DBAbstractFuncExpr
      * @param isAggregate indicates whether the function is an aggregate 
function (sum, min, max, avg, ...)
      * @param dataType indicates the data type of the function result 
      */
-    public DBFuncExpr(DBColumnExpr expr, String template, Object[] params, 
DBColumn updateColumn, boolean isAggregate, DataType dataType)
+    public DBFuncExpr(DBColumnExpr expr, String template, Object[] params, 
boolean isAggregate, DataType dataType)
     {
-        super(expr, updateColumn, isAggregate, dataType);
+        super(expr, isAggregate, dataType);
         // Set Phrase and Params
         this.phrase = null;
         this.params = params;
diff --git 
a/empire-db/src/main/java/org/apache/empire/dbms/hsql/DBCommandHSql.java 
b/empire-db/src/main/java/org/apache/empire/dbms/hsql/DBCommandHSql.java
index d9a3c39..be53a54 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/hsql/DBCommandHSql.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/hsql/DBCommandHSql.java
@@ -18,21 +18,10 @@
  */
 package org.apache.empire.dbms.hsql;
 
-import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
-import org.apache.empire.data.DataType;
-import org.apache.empire.db.DBCmdParam;
-import org.apache.empire.db.DBColumn;
-import org.apache.empire.db.DBColumnExpr;
 import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBRowSet;
-import org.apache.empire.db.expr.column.DBAliasExpr;
-import org.apache.empire.db.expr.column.DBValueExpr;
-import org.apache.empire.db.expr.compare.DBCompareColExpr;
-import org.apache.empire.db.expr.compare.DBCompareExpr;
 import org.apache.empire.db.expr.join.DBColumnJoinExpr;
 import org.apache.empire.db.expr.join.DBJoinExpr;
 import org.apache.empire.db.expr.set.DBSetExpr;
diff --git a/empire-db/src/test/java/org/apache/empire/db/MockDriver.java 
b/empire-db/src/test/java/org/apache/empire/db/MockDriver.java
index ed6521e..7bc47f5 100644
--- a/empire-db/src/test/java/org/apache/empire/db/MockDriver.java
+++ b/empire-db/src/test/java/org/apache/empire/db/MockDriver.java
@@ -48,7 +48,7 @@ public class MockDriver extends DBMSHandlerBase {
     @Override
     public DBColumnExpr getNextSequenceValueExpr(DBTableColumn column)
     {
-        return new DBFuncExpr(column, "nextval()", null, column, false, 
DataType.INTEGER);
+        return new DBFuncExpr(column, "nextval()", null, false, 
DataType.INTEGER);
     }
 
     @Override
diff --git 
a/empire-db/src/test/java/org/apache/empire/db/PreparedStatementTest.java 
b/empire-db/src/test/java/org/apache/empire/db/PreparedStatementTest.java
index 34a4ab6..ee97b36 100644
--- a/empire-db/src/test/java/org/apache/empire/db/PreparedStatementTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/PreparedStatementTest.java
@@ -76,8 +76,8 @@ public class PreparedStatementTest{
         // set param value
         empIdParam.setValue(id);
         // check command
-        assertNotNull(cmd.getParamValues());
         assertTrue(cmd.getSelect().indexOf('?') > 0);
+        assertNotNull(cmd.getParamValues());
 
         DBReader r = new DBReader(context);
         try {

Reply via email to