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