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)

Reply via email to