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 98703f7 EMPIREDB-362 return EnumType for column Functions
98703f7 is described below
commit 98703f7d804f26bbf52f090cbc639eeb00c934ff
Author: Rainer Döbele <[email protected]>
AuthorDate: Tue Feb 22 13:40:20 2022 +0100
EMPIREDB-362 return EnumType for column Functions
---
.../empire/db/expr/column/DBAbstractFuncExpr.java | 4 ++--
.../apache/empire/db/expr/column/DBDecodeExpr.java | 22 ++++++++++++++++++++++
.../apache/empire/db/expr/column/DBFuncExpr.java | 10 ++++++++++
3 files changed, 34 insertions(+), 2 deletions(-)
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 9294fa8..d124dec 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
@@ -109,8 +109,8 @@ public abstract class DBAbstractFuncExpr extends
DBColumnExpr
@Override
public Class<Enum<?>> getEnumType()
{
- // TODO maybe find a better solution? (allow/denylist for functions?)
- return expr.getEnumType();
+ // Override to set EnumType
+ return null;
}
/**
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 1daf01b..45380e3 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
@@ -68,6 +68,15 @@ public class DBDecodeExpr extends DBAbstractFuncExpr
}
@Override
+ public Class<Enum<?>> getEnumType()
+ {
+ DBColumnExpr firstExpr = getFirstColumnExpr();
+ if (firstExpr!=null)
+ return firstExpr.getEnumType();
+ return super.getEnumType();
+ }
+
+ @Override
public void addReferencedColumns(Set<DBColumn> list)
{
expr.addReferencedColumns(list);
@@ -114,5 +123,18 @@ public class DBDecodeExpr extends DBAbstractFuncExpr
String template = dbms.getSQLPhrase(DBSqlPhrase.SQL_FUNC_DECODE);
super.addSQL(sql, template, new Object[] { param }, context);
}
+
+ private DBColumnExpr getFirstColumnExpr()
+ {
+ for (Object val : valueMap.values())
+ {
+ if (val instanceof DBColumnExpr)
+ return (DBColumnExpr)val;
+ }
+ if (elseExpr instanceof DBColumnExpr)
+ return (DBColumnExpr)elseExpr;
+ // 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 efa7a6d..601516e 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
@@ -118,6 +118,16 @@ public class DBFuncExpr extends DBAbstractFuncExpr
}
return "FUNC";
}
+
+ @Override
+ public Class<Enum<?>> getEnumType()
+ {
+ // check for functions which preserve the enumType
+ if (phrase==DBSqlPhrase.SQL_FUNC_COALESCE)
+ return expr.getEnumType();
+ // Check SQL-Phrase
+ return super.getEnumType();
+ }
/**
* @see org.apache.empire.db.DBExpr#addReferencedColumns(Set)