EMPIREDB-362 code cleanup
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 @@
         // 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 @@
             context.commit();
         }
         
-        subqueryQueryDemo();
-        
         // do simple stuff
-        simpleQueryDemo();
         simpleUpdateDemo();
+
+        
+        simpleQueryDemo();
         queryViewDemo();
+        subqueryQueryDemo();
         paramQueryDemo();
         
         // Remember RollbackHandling
@@ -538,16 +539,36 @@
             .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 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 @@
      * @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 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 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 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 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 DBColumnExpr reverse()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_REVERSE, null, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_REVERSE, null);
     }
 
     /**
@@ -853,7 +853,7 @@
      */
     public DBColumnExpr trim()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_TRIM, null, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_TRIM, null);
     }
 
     /**
@@ -863,7 +863,7 @@
      */
     public DBColumnExpr trimLeft()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_LTRIM, null, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_LTRIM, null);
     }
 
     /**
@@ -873,7 +873,7 @@
      */
     public DBColumnExpr trimRight()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_RTRIM, null, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_RTRIM, null);
     }
     
     /**
@@ -884,7 +884,7 @@
      */
     public DBColumnExpr upper()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_UPPER, null, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_UPPER, null);
     }
 
     /**
@@ -895,7 +895,7 @@
      */
     public DBColumnExpr lower()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_LOWER, null, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_LOWER, null);
     }
 
     /**
@@ -907,7 +907,7 @@
      */
     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 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 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 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 DBColumnExpr abs()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_ABS, null, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_ABS, null);
     }
 
     /**
@@ -975,7 +975,7 @@
      */
     public DBColumnExpr floor()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_FLOOR, null, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_FLOOR, null);
     }
 
     /**
@@ -985,7 +985,7 @@
      */
     public DBColumnExpr ceiling()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_CEILING, null, getUpdateColumn(), false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_CEILING, null);
     }
 
     /**
@@ -997,7 +997,7 @@
      */
     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 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 DBColumnExpr year()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_YEAR, null, null, false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_YEAR, null);
     }
 
     /**
@@ -1031,7 +1031,7 @@
      */
     public DBColumnExpr month()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MONTH, null, null, false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MONTH, null);
     }
 
     /**
@@ -1042,7 +1042,7 @@
      */
     public DBColumnExpr day()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_DAY, null, null, false);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_DAY, null);
     }
 
     /**
@@ -1053,7 +1053,7 @@
      */
     public DBColumnExpr sum()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_SUM, null, null, true);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_SUM, null);
     }
 
     /**
@@ -1064,7 +1064,7 @@
      */
     public DBColumnExpr min()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MIN, null, null, true);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MIN, null);
     }
 
     /**
@@ -1075,7 +1075,7 @@
      */
     public DBColumnExpr max()
     {
-        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MAX, null, null, true);
+        return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_MAX, null);
     }
 
     /**
@@ -1086,7 +1086,7 @@
      */
     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 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 @@
     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 @@
      * @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 @@
     @Override
     public DBColumn getUpdateColumn()
     {
-        return updateColumn;
+        return expr.getUpdateColumn();
     }
 
     /**
@@ -262,24 +260,24 @@
     @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);
-        }
-        // Done
+        // 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
         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 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 @@
     }
 
     @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 @@
             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 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 @@
     {
         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 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 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 @@
     @Override
     protected String getFunctionName()
     {
-        return "decode";
+        return "DECODE";
+    }
+
+    @Override
+    public DBColumn getUpdateColumn()
+    {
+        return null;
     }
 
     @Override
@@ -136,5 +142,4 @@
         // 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 @@
      * @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 @@
      * @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 @@
     @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 @@
         // 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 {