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 04128d2  EMPIREDB-362 new DBColumnExpr class for Parenthesis wrapper
04128d2 is described below

commit 04128d2d06910a4c376959fbd6f2c381702178ac
Author: Rainer Döbele <[email protected]>
AuthorDate: Wed Feb 23 21:26:48 2022 +0100

    EMPIREDB-362 new DBColumnExpr class for Parenthesis wrapper
---
 .../org/apache/empire/data/list/DataListHead.java  | 17 ++--
 .../java/org/apache/empire/db/DBColumnExpr.java    |  5 +-
 .../java/org/apache/empire/db/DBRecordData.java    | 17 ++--
 .../apache/empire/db/expr/column/DBAliasExpr.java  |  4 +-
 .../{DBAliasExpr.java => DBParenthesisExpr.java}   | 90 +++++++---------------
 .../apache/empire/db/expr/column/DBValueExpr.java  | 30 +++++++-
 .../empire/db/expr/compare/DBCompareAndOrExpr.java |  2 +-
 .../empire/db/expr/compare/DBCompareNotExpr.java   | 10 +++
 ...esisExpr.java => DBCompareParenthesisExpr.java} |  6 +-
 .../empire/db/expr/join/DBCompareJoinExpr.java     | 12 ++-
 10 files changed, 95 insertions(+), 98 deletions(-)

diff --git 
a/empire-db/src/main/java/org/apache/empire/data/list/DataListHead.java 
b/empire-db/src/main/java/org/apache/empire/data/list/DataListHead.java
index d486b83..8ccea11 100644
--- a/empire-db/src/main/java/org/apache/empire/data/list/DataListHead.java
+++ b/empire-db/src/main/java/org/apache/empire/data/list/DataListHead.java
@@ -110,23 +110,20 @@ public class DataListHead implements Serializable
         {   // lookup option
             text = options.get(value);
         }
-        else if (ObjectUtils.isEmpty(value))
-        {   // empty
-            value = column.getAttribute(Column.COLATTR_NULLTEXT);
-            text = (value!=null ? value.toString() : StringUtils.EMPTY);
-        }
         else if (value instanceof String)
         {   // we already have a string
             text = (String)value;
         }
-        else if (value instanceof Enum<?>)
-        {   // convert from enum
-            value = ObjectUtils.getEnumValue((Enum<?>)value, 
column.getDataType().isNumeric());
-            text  = StringUtils.toString(value, StringUtils.EMPTY);
+        else if (ObjectUtils.isEmpty(value))
+        {   // empty
+            value = column.getAttribute(Column.COLATTR_NULLTEXT);
+            text = (value!=null ? value.toString() : StringUtils.EMPTY);
         }
         else
-        {   // convert to String
+        {   // format value
             text = formatValue(column, value);
+            if (text== null)
+                text = StringUtils.EMPTY; 
         }
         // Done
         return text;
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 fb1a5e3..34f47b3 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
@@ -40,6 +40,7 @@ import org.apache.empire.db.expr.column.DBConvertExpr;
 import org.apache.empire.db.expr.column.DBCountExpr;
 import org.apache.empire.db.expr.column.DBDecodeExpr;
 import org.apache.empire.db.expr.column.DBFuncExpr;
+import org.apache.empire.db.expr.column.DBParenthesisExpr;
 import org.apache.empire.db.expr.column.DBValueExpr;
 import org.apache.empire.db.expr.compare.DBCompareColExpr;
 import org.apache.empire.db.expr.compare.DBCompareExpr;
@@ -48,7 +49,6 @@ import org.apache.empire.dbms.DBSqlPhrase;
 import org.apache.empire.exceptions.InvalidArgumentException;
 import org.w3c.dom.Element;
 
-
 /**
  * This class is the base class for all expressions that represent a single 
value.
  * It provides a set of factory functions for SQL functions.
@@ -700,7 +700,7 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr parenthesis()
     { 
-        return new DBFuncExpr(this, "(?)", null, getUpdateColumn(), false, 
getDataType());
+        return new DBParenthesisExpr(this);
     }
 
     /**
@@ -711,7 +711,6 @@ public abstract class DBColumnExpr extends DBExpr
      */
     public DBColumnExpr coalesce(Object nullValue)
     {
-        // return getExprFromPhrase(DBSqlPhrase.SQL_FUNC_COALESCE, new 
Object[] { nullValue }, getUpdateColumn(), false);
         return new DBCoalesceExpr(this, nullValue);
     }
 
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java 
b/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java
index 415b518..c4a9170 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java
@@ -473,23 +473,20 @@ public abstract class DBRecordData extends DBObject
         {   // lookup option
             text = options.get(value);
         }
-        else if (ObjectUtils.isEmpty(value))
-        {   // empty
-            value = column.getAttribute(Column.COLATTR_NULLTEXT);
-            text = (value!=null ? value.toString() : StringUtils.EMPTY);
-        }
         else if (value instanceof String)
         {   // we already have a string
             text = (String)value;
         }
-        else if (value instanceof Enum<?>)
-        {   // convert from enum
-            value = ObjectUtils.getEnumValue((Enum<?>)value, 
column.getDataType().isNumeric());
-            text  = StringUtils.toString(value, StringUtils.EMPTY);
+        else if (ObjectUtils.isEmpty(value))
+        {   // empty
+            value = column.getAttribute(Column.COLATTR_NULLTEXT);
+            text = (value!=null ? value.toString() : StringUtils.EMPTY);
         }
         else
-        {   // convert to String
+        {   // format value
             text = formatValue(column, value);
+            if (text== null)
+                text = StringUtils.EMPTY; 
         }
         // done
         return text;
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
index 2f7e77f..dea582f 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
@@ -169,8 +169,8 @@ public class DBAliasExpr extends DBColumnExpr
         {   // Compare with another alias expression
             DBAliasExpr otherExpr = ((DBAliasExpr)other);
             return this.alias.equalsIgnoreCase(otherExpr.getName()) &&
-                   this.expr.equals(otherExpr.unwrap());
-        }
+                   this.expr.equals(otherExpr.expr);
+        }        
         return false;
     }
 
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBParenthesisExpr.java
similarity index 65%
copy from 
empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
copy to 
empire-db/src/main/java/org/apache/empire/db/expr/column/DBParenthesisExpr.java
index 2f7e77f..699eb0f 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBParenthesisExpr.java
@@ -20,14 +20,10 @@ package org.apache.empire.db.expr.column;
 
 import java.util.Set;
 
-// Java
-import org.apache.empire.commons.StringUtils;
 import org.apache.empire.data.DataType;
 import org.apache.empire.db.DBColumn;
 import org.apache.empire.db.DBColumnExpr;
 import org.apache.empire.db.DBDatabase;
-import org.apache.empire.dbms.DBMSHandler;
-import org.apache.empire.dbms.DBSqlPhrase;
 import org.w3c.dom.Element;
 
 /**
@@ -36,12 +32,11 @@ import org.w3c.dom.Element;
  * There is no need to explicitly create instances of this class.<BR>
  * Instead use {@link DBColumnExpr#as(String) }
  */
-public class DBAliasExpr extends DBColumnExpr
+public class DBParenthesisExpr extends DBColumnExpr
 {
     // *Deprecated* private static final long serialVersionUID = 1L;
   
-    private final DBColumnExpr expr;
-    private final String       alias;
+    private final DBColumnExpr wrapped;
 
     /**
      * Constructs a DBAliasExpr object combine the DBColumnExpr object with 
the alias name.
@@ -49,15 +44,13 @@ public class DBAliasExpr extends DBColumnExpr
      * @param expr an DBColumnExpr object, one column
      * @param alias the alias name of the column
      */
-    public DBAliasExpr(DBColumnExpr expr, String alias)
+    public DBParenthesisExpr(DBColumnExpr expr)
     {
         // Check whether already a AliasExpr
         if (expr.getClass().equals(getClass()))
-            this.expr = ((DBAliasExpr) expr).expr;
+            this.wrapped = ((DBParenthesisExpr) expr).wrapped;
         else
-            this.expr = expr;
-        // Set alias name
-        this.alias = alias; // .toUpperCase() Why?;
+            this.wrapped = expr;
     }
 
     /**
@@ -69,7 +62,7 @@ public class DBAliasExpr extends DBColumnExpr
     @Override
     public final DBDatabase getDatabase()
     {
-        return expr.getDatabase();
+        return wrapped.getDatabase();
     }
     
     /**
@@ -80,7 +73,7 @@ public class DBAliasExpr extends DBColumnExpr
     @Override
     public DataType getDataType()
     {
-        return expr.getDataType();
+        return wrapped.getDataType();
     }
 
     /**
@@ -90,7 +83,7 @@ public class DBAliasExpr extends DBColumnExpr
     @Override
     public Class<Enum<?>> getEnumType()
     {
-        return expr.getEnumType();
+        return wrapped.getEnumType();
     }
 
     /**
@@ -101,7 +94,7 @@ public class DBAliasExpr extends DBColumnExpr
     @Override
     public String getName()
     {
-        return alias;
+        return wrapped.getName();
     }
 
     /**
@@ -110,7 +103,7 @@ public class DBAliasExpr extends DBColumnExpr
     @Override
     public DBColumn getSourceColumn()
     {
-        return expr.getSourceColumn();
+        return wrapped.getSourceColumn();
     }
 
     /**
@@ -121,7 +114,7 @@ public class DBAliasExpr extends DBColumnExpr
     @Override
     public DBColumn getUpdateColumn()
     {
-        return expr.getUpdateColumn();
+        return wrapped.getUpdateColumn();
     }
     
     /**
@@ -141,7 +134,7 @@ public class DBAliasExpr extends DBColumnExpr
     @Override
     public DBColumnExpr unwrap()
     {
-        return expr;
+        return wrapped;
     }
 
     /**
@@ -152,7 +145,7 @@ public class DBAliasExpr extends DBColumnExpr
     @Override
     public boolean isAggregate()
     {
-        return expr.isAggregate();
+        return wrapped.isAggregate();
     }
     
     /**
@@ -164,12 +157,11 @@ public class DBAliasExpr extends DBColumnExpr
     {
         if (other==this)
             return true;
-        // Check for another Alias Expression
-        if (other instanceof DBAliasExpr)
-        {   // Compare with another alias expression
-            DBAliasExpr otherExpr = ((DBAliasExpr)other);
-            return this.alias.equalsIgnoreCase(otherExpr.getName()) &&
-                   this.expr.equals(otherExpr.unwrap());
+        // Check for another expression
+        if (other instanceof DBParenthesisExpr)
+        {   // Compare expr
+            DBParenthesisExpr otherExpr = ((DBParenthesisExpr)other);
+            return wrapped.equals(otherExpr.wrapped);
         }
         return false;
     }
@@ -180,7 +172,7 @@ public class DBAliasExpr extends DBColumnExpr
     @Override
     public void addReferencedColumns(Set<DBColumn> list)
     {
-        expr.addReferencedColumns(list);
+        wrapped.addReferencedColumns(list);
     }
 
     /**
@@ -191,51 +183,21 @@ public class DBAliasExpr extends DBColumnExpr
      */
     @Override
     public void addSQL(StringBuilder buf, long context)
-    { // Append alias
-        if((context & CTX_ALIAS)!=0)
-        {   // Add the column expression
-            expr.addSQL(buf, context);
-            // Rename
-            DBMSHandler dbms = getDatabase().getDbms();
-            String asExpr = dbms.getSQLPhrase(DBSqlPhrase.SQL_RENAME_COLUMN);
-            if (asExpr!=null)
-            {
-                buf.append(asExpr);
-                dbms.appendObjectName(buf, alias, null);
-            }
-        } 
-        else
-        {
-            expr.addSQL(buf, context);
-        }
+    {   // Append alias
+        buf.append("(");
+        wrapped.addSQL(buf, context); // |CTX_NOPARENTHESES
+        buf.append(")");
     }
 
     /**
      * This function set the alias name to the XML tag.
-     *
      * @return the XML tag (with the alias name)
      */
     @Override
     public Element addXml(Element parent, long flags)
     { // Set name to Alias
-        Element field = expr.addXml(parent, flags);
-        if (field != null)
-        {   // Set Name
-            if (field.hasAttribute("name"))
-                field.setAttribute("source", 
StringUtils.toString(field.getAttribute("name")));
-            field.setAttribute("name", alias);
-        }
+        Element field = wrapped.addXml(parent, flags);
+        field.setAttribute("parenthesis", String.valueOf(true));
         return field;
     }
-
-    /**
-     * Overrides the toString method.
-     *
-     * @return the alias name
-     */
-    @Override
-    public String toString()
-    {
-        return alias;
-    }
-}
\ No newline at end of file
+}
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBValueExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBValueExpr.java
index d9150b8..f3e69a0 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBValueExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBValueExpr.java
@@ -47,6 +47,7 @@ public class DBValueExpr extends DBColumnExpr
     public final DBDatabase   db;
     public final DataType     type;
     protected Object          value;
+    private String name;
 
     /**
      * Constructs a new DBValueExpr object.
@@ -78,6 +79,7 @@ public class DBValueExpr extends DBColumnExpr
     public void setValue(Object value)
     {
         this.value = value;
+        this.name = null;
     }
 
     /**
@@ -125,7 +127,33 @@ public class DBValueExpr extends DBColumnExpr
     @Override
     public String getName()
     {
-        return "VAL_"+String.valueOf(value); 
+        if (name==null)
+        {   // generate name
+            String str = String.valueOf(value);
+            int i = 0;
+            int l = Math.min(str.length(), 20);
+            for (boolean valid = true; i<l; i++)
+            {   char c = str.charAt(i);
+                if (c=='-' && i==0)
+                    continue;
+                valid = (c==' ' || (c>='0' && c<='9') || (c>='A' && c<='Z') || 
(c>='a' && c<='z'));
+                if (!valid)
+                    break;
+            }
+            str = str.substring((str.charAt(0)=='-' ? 1 : 0), i);
+            if (str.length()>0)
+            {   // generate from value string
+                char c = str.charAt(0);
+                if (c>='0' && c<='9')
+                    str = "N"+str;
+                name = "VAL_"+str.replace(' ','_').toUpperCase(); 
+            }
+            else
+            {   // default
+                name = "VALUE";
+            }
+        }
+        return name;
     }
 
     /** this helper function calls the DBColumnExpr.addXML(Element, long) 
method */
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 3455a2b..10a8c78 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
@@ -191,7 +191,7 @@ public class DBCompareAndOrExpr extends DBCompareExpr
        public DBCompareExpr parenthesis()
        {
                // create parenthesis Expression
-               return new DBParenthesisExpr(this);
+               return new DBCompareParenthesisExpr(this);
        }
     
 }
\ No newline at end of file
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 f386872..4d19867 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
@@ -51,6 +51,16 @@ public class DBCompareNotExpr extends DBCompareExpr
     }
 
     /**
+     * Returns the wrapped expression
+     * 
+     * @return the expression wrapped by not()
+     */
+    public DBCompareExpr getExpr()
+    {
+        return expr;
+    }
+
+    /**
      * Returns the current DBDatabase object.
      * 
      * @return the current DBDatabase object
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/DBCompareParenthesisExpr.java
similarity index 87%
rename from 
empire-db/src/main/java/org/apache/empire/db/expr/compare/DBParenthesisExpr.java
rename to 
empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareParenthesisExpr.java
index a201d85..f964516 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/DBCompareParenthesisExpr.java
@@ -29,12 +29,12 @@ import org.apache.empire.db.DBDatabase;
  * This class wraps an existing compare expression with parenthesis.
  * <P>
  */
-public class DBParenthesisExpr extends DBCompareExpr implements 
Unwrappable<DBCompareExpr>
+public class DBCompareParenthesisExpr extends DBCompareExpr implements 
Unwrappable<DBCompareExpr>
 {
     // *Deprecated* private static final long serialVersionUID = 1L;
     private final DBCompareExpr wrapped;
     
-    public DBParenthesisExpr(DBCompareExpr expr)
+    public DBCompareParenthesisExpr(DBCompareExpr expr)
     {
         this.wrapped = expr;
     }
@@ -73,7 +73,7 @@ public class DBParenthesisExpr extends DBCompareExpr 
implements Unwrappable<DBCo
     @Override
     public DBCompareExpr copy(DBCommand newCmd)
     {
-        return new DBParenthesisExpr(wrapped.copy(newCmd));
+        return new DBCompareParenthesisExpr(wrapped.copy(newCmd));
     }
 
     @Override
diff --git 
a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java 
b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
index fff3904..97c91d1 100644
--- 
a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
+++ 
b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
@@ -25,7 +25,8 @@ import org.apache.empire.db.DBRowSet;
 import org.apache.empire.db.expr.compare.DBCompareAndOrExpr;
 import org.apache.empire.db.expr.compare.DBCompareColExpr;
 import org.apache.empire.db.expr.compare.DBCompareExpr;
-import org.apache.empire.db.expr.compare.DBParenthesisExpr;
+import org.apache.empire.db.expr.compare.DBCompareNotExpr;
+import org.apache.empire.db.expr.compare.DBCompareParenthesisExpr;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -47,12 +48,15 @@ public class DBCompareJoinExpr extends DBColumnJoinExpr
     private static DBColumnExpr findFirstColumn(DBCompareExpr expr)
     {
         // DBParenthesisExpr
-        if (expr instanceof DBParenthesisExpr)
-            return findFirstColumn(((DBParenthesisExpr)expr).unwrap());
+        if (expr instanceof DBCompareParenthesisExpr)
+            return findFirstColumn(((DBCompareParenthesisExpr)expr).unwrap());
         // DBCompareORExpr
         if (expr instanceof DBCompareAndOrExpr)
             return findFirstColumn(((DBCompareAndOrExpr)expr).getLeft());
-        // Get Colum Expr
+        // DBCompareNot
+        if (expr instanceof DBCompareNotExpr)
+            return findFirstColumn(((DBCompareNotExpr)expr).getExpr());
+        // Get Column Expr
         if (expr instanceof DBCompareColExpr)
             return ((DBCompareColExpr)expr).getColumn();
         // Error

Reply via email to