[jboss-cvs] JBossAS SVN: r105948 - in branches/JBPAPP_4_2_0_GA_CP: server/src/main/org/jboss/ejb/plugins/cmp/jdbc and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jun 11 00:15:00 EDT 2010


Author: jiwils
Date: 2010-06-11 00:14:55 -0400 (Fri, 11 Jun 2010)
New Revision: 105948

Added:
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AbstractMappedTypeFunction.java
Modified:
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAbs.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAvg.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTConcat.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTCount.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTLCase.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMax.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMin.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMod.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSubstring.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSum.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTUCase.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AggregateFunction.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/EJBQLToSQL92Compiler.java
   branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java
   branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildCMPBean.java
   branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildLocalHome.java
   branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/Facade.java
   branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/FacadeSessionBean.java
   branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/test/EnumUnitTestCase.java
   branches/JBPAPP_4_2_0_GA_CP/testsuite/src/resources/cmp2/enums/META-INF/ejb-jar.xml
   branches/JBPAPP_4_2_0_GA_CP/testsuite/src/resources/cmp2/enums/META-INF/jbosscmp-jdbc.xml
Log:
Fix for JBPAPP-4029 so that user-type-mapped types work in EJBQL aggregate functions.

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAbs.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAbs.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAbs.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -22,11 +22,7 @@
 package org.jboss.ejb.plugins.cmp.ejbql;
 
 import org.jboss.ejb.plugins.cmp.jdbc.JDBCResultSetReader;
-import org.jboss.logging.Logger;
 
-import java.sql.SQLException;
-import java.sql.ResultSet;
-
 /**
  * This abstract syntax node represents an ABS function.
  *
@@ -35,31 +31,20 @@
  * @version $Revision$
  */
 public final class ASTAbs
-   extends SimpleNode
-   implements SelectFunction
+   extends AbstractMappedTypeFunction
 {
-   private final Logger log;
-
    public ASTAbs(int id)
    {
       super(id);
-      log = Logger.getLogger(getClass());
+      resultReader = JDBCResultSetReader.LONG_READER;
+      resultType = Long.class;
    }
-
-   /** Accept the visitor. **/
+   
+   /**
+    * Accept the visitor. *
+    */
    public Object jjtAccept(JBossQLParserVisitor visitor, Object data)
    {
       return visitor.visit(this, data);
    }
-
-   /**
-    * Reads results.
-    * @param rs  the result set to read from.
-    * @return  the result of the function
-    * @throws SQLException
-    */
-   public Object readResult(ResultSet rs) throws SQLException
-   {
-      return JDBCResultSetReader.LONG_READER.get(rs, 1, Long.class, log);
-   }
 }

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAvg.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAvg.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAvg.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -30,13 +30,12 @@
  */
 public final class ASTAvg
    extends AggregateFunction
-   implements SelectFunction
 {
    public ASTAvg(int id)
    {
       super(id);
    }
-
+   
    /**
     * Accept the visitor. *
     */

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTConcat.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTConcat.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTConcat.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -21,13 +21,8 @@
  */
 package org.jboss.ejb.plugins.cmp.ejbql;
 
-import org.jboss.ejb.plugins.cmp.jdbc.JDBCUtil;
 import org.jboss.ejb.plugins.cmp.jdbc.JDBCResultSetReader;
-import org.jboss.logging.Logger;
 
-import java.sql.SQLException;
-import java.sql.ResultSet;
-
 /**
  * This abstract syntax node represents a concat function.
  *
@@ -36,31 +31,20 @@
  * @version $Revision$
  */
 public final class ASTConcat
-   extends SimpleNode
-   implements SelectFunction
+   extends AbstractMappedTypeFunction
 {
-   private final Logger log;
-
    public ASTConcat(int id)
    {
       super(id);
-      log = Logger.getLogger(getClass());
+      resultReader = JDBCResultSetReader.STRING_READER;
+      resultType = String.class;
    }
-
-   /** Accept the visitor. **/
+   
+   /**
+    * Accept the visitor. *
+    */
    public Object jjtAccept(JBossQLParserVisitor visitor, Object data)
    {
       return visitor.visit(this, data);
    }
-
-   /**
-    * Reads results.
-    * @param rs  the result set to read from.
-    * @return  the result of the function
-    * @throws SQLException
-    */
-   public Object readResult(ResultSet rs) throws SQLException
-   {
-      return JDBCResultSetReader.STRING_READER.get(rs, 1, String.class, log);
-   }
 }

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTCount.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTCount.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTCount.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -30,7 +30,6 @@
  */
 public final class ASTCount
    extends AggregateFunction
-   implements SelectFunction
 {
    public ASTCount(int id)
    {

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTLCase.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTLCase.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTLCase.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -22,11 +22,7 @@
 package org.jboss.ejb.plugins.cmp.ejbql;
 
 import org.jboss.ejb.plugins.cmp.jdbc.JDBCResultSetReader;
-import org.jboss.logging.Logger;
 
-import java.sql.SQLException;
-import java.sql.ResultSet;
-
 /**
  * This abstract syntax node represents a LCase function.
  *
@@ -35,31 +31,20 @@
  * @version $Revision$
  */
 public final class ASTLCase
-   extends SimpleNode
-   implements SelectFunction
+   extends AbstractMappedTypeFunction
 {
-   private final Logger log;
-
    public ASTLCase(int id)
    {
       super(id);
-      log = Logger.getLogger(getClass());
+      resultReader = JDBCResultSetReader.STRING_READER;
+      resultType = String.class;
    }
-
-   /** Accept the visitor. **/
+   
+   /**
+    * Accept the visitor. *
+    */
    public Object jjtAccept(JBossQLParserVisitor visitor, Object data)
    {
       return visitor.visit(this, data);
    }
-
-   /**
-    * Reads results.
-    * @param rs  the result set to read from.
-    * @return  the result of the function
-    * @throws SQLException
-    */
-   public Object readResult(ResultSet rs) throws SQLException
-   {
-      return JDBCResultSetReader.STRING_READER.get(rs, 1, String.class, log);
-   }
 }

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMax.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMax.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMax.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -30,13 +30,15 @@
  */
 public final class ASTMax
    extends AggregateFunction
-   implements SelectFunction
 {
    public ASTMax(int id)
    {
       super(id);
    }
-
+   
+   /**
+    * Accept the visitor. *
+    */
    public Object jjtAccept(JBossQLParserVisitor visitor, Object data)
    {
       return visitor.visit(this, data);

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMin.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMin.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMin.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -30,13 +30,15 @@
  */
 public final class ASTMin
    extends AggregateFunction
-   implements SelectFunction
 {
    public ASTMin(int id)
    {
       super(id);
    }
-
+   
+   /**
+    * Accept the visitor. *
+    */
    public Object jjtAccept(JBossQLParserVisitor visitor, Object data)
    {
       return visitor.visit(this, data);

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMod.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMod.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMod.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -21,12 +21,8 @@
  */
 package org.jboss.ejb.plugins.cmp.ejbql;
 
-import org.jboss.logging.Logger;
 import org.jboss.ejb.plugins.cmp.jdbc.JDBCResultSetReader;
 
-import java.sql.SQLException;
-import java.sql.ResultSet;
-
 /**
  * This abstract syntax node represents an ABS function.
  *
@@ -35,31 +31,20 @@
  * @version $Revision$
  */
 public final class ASTMod
-   extends SimpleNode
-   implements SelectFunction
+   extends AbstractMappedTypeFunction
 {
-   private final Logger log;
-
    public ASTMod(int id)
    {
       super(id);
-      log = Logger.getLogger(getClass());
+      resultReader = JDBCResultSetReader.LONG_READER;
+      resultType = Long.class;
    }
-
-   /** Accept the visitor. **/
+   
+   /**
+    * Accept the visitor. *
+    */
    public Object jjtAccept(JBossQLParserVisitor visitor, Object data)
    {
       return visitor.visit(this, data);
    }
-
-   /**
-    * Reads results.
-    * @param rs  the result set to read from.
-    * @return  the result of the function
-    * @throws SQLException
-    */
-   public Object readResult(ResultSet rs) throws SQLException
-   {
-      return JDBCResultSetReader.LONG_READER.get(rs, 1, Long.class, log);
-   }
 }

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSubstring.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSubstring.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSubstring.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -22,11 +22,7 @@
 package org.jboss.ejb.plugins.cmp.ejbql;
 
 import org.jboss.ejb.plugins.cmp.jdbc.JDBCResultSetReader;
-import org.jboss.logging.Logger;
 
-import java.sql.SQLException;
-import java.sql.ResultSet;
-
 /**
  * This abstract syntax node represents a substring function.
  *
@@ -35,31 +31,20 @@
  * @version $Revision$
  */
 public final class ASTSubstring
-   extends SimpleNode
-   implements SelectFunction
+   extends AbstractMappedTypeFunction
 {
-   private final Logger log;
-
    public ASTSubstring(int id)
    {
       super(id);
-      log = Logger.getLogger(getClass());
+      resultReader = JDBCResultSetReader.STRING_READER;
+      resultType = String.class;
    }
-
-   /** Accept the visitor. **/
+   
+   /**
+    * Accept the visitor. *
+    */
    public Object jjtAccept(JBossQLParserVisitor visitor, Object data)
    {
       return visitor.visit(this, data);
    }
-
-   /**
-    * Reads results.
-    * @param rs  the result set to read from.
-    * @return  the result of the function
-    * @throws SQLException
-    */
-   public Object readResult(ResultSet rs) throws SQLException
-   {
-      return JDBCResultSetReader.STRING_READER.get(rs, 1, String.class, log);
-   }
 }

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSum.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSum.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSum.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -30,14 +30,17 @@
  */                            
 public final class ASTSum
    extends AggregateFunction
-   implements SelectFunction
 {
-   public ASTSum(int id) {
+   public ASTSum(int id)
+   {
       super(id);
    }
-
-   /** Accept the visitor. **/
-   public Object jjtAccept(JBossQLParserVisitor visitor, Object data) {
+   
+   /**
+    * Accept the visitor. *
+    */
+   public Object jjtAccept(JBossQLParserVisitor visitor, Object data)
+   {
       return visitor.visit(this, data);
    }
 }

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTUCase.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTUCase.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTUCase.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -22,11 +22,7 @@
 package org.jboss.ejb.plugins.cmp.ejbql;
 
 import org.jboss.ejb.plugins.cmp.jdbc.JDBCResultSetReader;
-import org.jboss.logging.Logger;
 
-import java.sql.SQLException;
-import java.sql.ResultSet;
-
 /**
  * This abstract syntax node represents a UCase function.
  *
@@ -35,31 +31,20 @@
  * @version $Revision$
  */
 public final class ASTUCase
-   extends SimpleNode
-   implements SelectFunction
+   extends AbstractMappedTypeFunction
 {
-   private final Logger log;
-
    public ASTUCase(int id)
    {
       super(id);
-      log = Logger.getLogger(getClass());
+      resultReader = JDBCResultSetReader.STRING_READER;
+      resultType = String.class;
    }
-
-   /** Accept the visitor. **/
+   
+   /**
+    * Accept the visitor. *
+    */
    public Object jjtAccept(JBossQLParserVisitor visitor, Object data)
    {
       return visitor.visit(this, data);
    }
-
-   /**
-    * Reads results.
-    * @param rs  the result set to read from.
-    * @return  the result of the function
-    * @throws SQLException
-    */
-   public Object readResult(ResultSet rs) throws SQLException
-   {
-      return JDBCResultSetReader.STRING_READER.get(rs, 1, String.class, log);
-   }
 }

Copied: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AbstractMappedTypeFunction.java (from rev 102957, trunk/server/src/main/java/org/jboss/ejb/plugins/cmp/ejbql/AbstractMappedTypeFunction.java)
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AbstractMappedTypeFunction.java	                        (rev 0)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AbstractMappedTypeFunction.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -0,0 +1,70 @@
+package org.jboss.ejb.plugins.cmp.ejbql;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Collection;
+
+import org.jboss.ejb.plugins.cmp.jdbc.JDBCResultSetReader;
+import org.jboss.ejb.plugins.cmp.jdbc.JDBCType;
+import org.jboss.ejb.plugins.cmp.jdbc.JDBCUtil;
+import org.jboss.logging.Logger;
+
+/**
+ * A AbstractMappedTypeFunction.
+ * 
+ * @author <a href="alex at jboss.com">Alexey Loubyansky</a>
+ * @version $Revision: 1.1 $
+ */
+public abstract class AbstractMappedTypeFunction extends SimpleNode implements SelectFunction
+{
+   protected final Logger log;
+   protected Class resultType;
+   protected JDBCResultSetReader resultReader;
+   
+   public AbstractMappedTypeFunction(int i)
+   {
+      super(i);
+      log = Logger.getLogger(getClass());
+   }
+
+   public void setResultType(Class type)
+   {
+      if(Collection.class.isAssignableFrom(type))
+      {
+         resultType = getDefaultResultType();
+      }
+      else
+      {
+         this.resultType = type;
+      }
+      this.resultReader = JDBCUtil.getResultReaderByType(resultType);
+   }
+
+   protected Class getDefaultResultType()
+   {
+      return Double.class;
+   }
+
+   public void setJDBCType(final JDBCType jdbcType)
+   {
+      if(resultReader != null)
+      {
+         final JDBCResultSetReader jdbcResultReader = this.resultReader;
+         resultReader = new JDBCResultSetReader()
+         {
+            public Object get(ResultSet rs, int index, Class destination, Logger log) throws SQLException
+            {
+               Object jdbcResult = jdbcResultReader.get(rs, index, destination, log);
+               return jdbcType.setColumnValue(0, null, jdbcResult);
+            }
+         };
+      }
+   }
+
+   // SelectFunction implementation
+
+   public Object readResult(ResultSet rs) throws SQLException
+   {
+      return resultReader.get(rs, 1, resultType, log);
+   }
+}

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AggregateFunction.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AggregateFunction.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AggregateFunction.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -21,56 +21,18 @@
  */
 package org.jboss.ejb.plugins.cmp.ejbql;
 
-import org.jboss.ejb.plugins.cmp.jdbc.JDBCUtil;
-import org.jboss.ejb.plugins.cmp.jdbc.JDBCResultSetReader;
-import org.jboss.logging.Logger;
 
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Collection;
-
 /**
  * @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
  * @version <tt>$Revision$</tt>
  */
 public abstract class AggregateFunction
-   extends SimpleNode
-   implements SelectFunction
+   extends AbstractMappedTypeFunction
 {
-   private final Logger log;
-   private JDBCResultSetReader resultReader;
-   private Class resultType;
-
    public String distinct = "";
 
    public AggregateFunction(int i)
    {
       super(i);
-      log = Logger.getLogger(getClass());
    }
-
-   public void setResultType(Class type)
-   {
-      if(Collection.class.isAssignableFrom(type))
-      {
-         resultType = getDefaultResultType();
-      }
-      else
-      {
-         this.resultType = type;
-      }
-      this.resultReader = JDBCUtil.getResultReaderByType(resultType);
-   }
-
-   protected Class getDefaultResultType()
-   {
-      return Double.class;
-   }
-
-   // SelectFunction implementation
-
-   public Object readResult(ResultSet rs) throws SQLException
-   {
-      return resultReader.get(rs, 1, resultType, log);
-   }
 }

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/EJBQLToSQL92Compiler.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/EJBQLToSQL92Compiler.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/EJBQLToSQL92Compiler.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -81,6 +81,7 @@
    private JDBCEntityPersistenceStore selectManager;
    private Object selectObject;
    private List inputParameters = new ArrayList();
+   private JDBCType functionJDBCType;
 
    private List leftJoinCMRList = new ArrayList();
    private StringBuffer onFindCMRJoin;
@@ -506,6 +507,8 @@
             JDBCFieldBridge selectField = (JDBCFieldBridge) path.getCMPField();
             selectManager = selectField.getManager();
             setTypeFactory(selectManager.getJDBCTypeFactory());
+            if(selectField.getJDBCType().hasMapper())
+               this.functionJDBCType = selectField.getJDBCType();
          }
          else if(path.isCMRField())
          {
@@ -1144,7 +1147,13 @@
 
    public Object visit(ASTAvg node, Object data)
    {
-      node.setResultType(returnType);
+      if(functionJDBCType != null)
+      {
+         node.setResultType(functionJDBCType.getJavaTypes()[0]);
+         node.setJDBCType(functionJDBCType);
+      }
+      else
+         node.setResultType(returnType);
       StringBuffer buf = (StringBuffer) data;
       Object[] args = new Object[]{
          node.distinct,
@@ -1156,7 +1165,13 @@
 
    public Object visit(ASTMax node, Object data)
    {
-      node.setResultType(returnType);
+      if(functionJDBCType != null)
+      {
+         node.setResultType(functionJDBCType.getJavaTypes()[0]);
+         node.setJDBCType(functionJDBCType);
+      }
+      else
+         node.setResultType(returnType);      
       StringBuffer buf = (StringBuffer) data;
       Object[] args = new Object[]{
          node.distinct,
@@ -1168,7 +1183,13 @@
 
    public Object visit(ASTMin node, Object data)
    {
-      node.setResultType(returnType);
+      if(functionJDBCType != null)
+      {
+         node.setResultType(functionJDBCType.getJavaTypes()[0]);
+         node.setJDBCType(functionJDBCType);
+      }
+      else
+         node.setResultType(returnType);
       StringBuffer buf = (StringBuffer) data;
       Object[] args = new Object[]{
          node.distinct,
@@ -1180,7 +1201,13 @@
 
    public Object visit(ASTSum node, Object data)
    {
-      node.setResultType(returnType);
+      if(functionJDBCType != null)
+      {
+         node.setResultType(functionJDBCType.getJavaTypes()[0]);
+         node.setJDBCType(functionJDBCType);
+      }
+      else
+         node.setResultType(returnType);
       StringBuffer buf = (StringBuffer) data;
       Object[] args = new Object[]{
          node.distinct,
@@ -1624,5 +1651,6 @@
       identifierToTable.clear();
       joinedAliases.clear();
       selectDistinct = false;
+      functionJDBCType = null;
    }
 }

Modified: branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -128,6 +128,7 @@
    private JDBCStoreManager selectManager;
    private Object selectObject;
    private List inputParameters = new ArrayList();
+   private JDBCType functionJDBCType;
 
    /**
     * deep read ahead for cmrs
@@ -252,6 +253,7 @@
       countCompositePk = false;
       selectAlias = null;
       selectDistinct = false;
+      functionJDBCType = null;
    }
 
    public String getSQL()
@@ -1029,7 +1031,6 @@
             selectManager = (JDBCStoreManager) selectField.getManager();
             selectObject = selectField;
             setTypeFactory(selectManager.getJDBCTypeFactory());
-
             addJoinPath(path);
             selectAlias = aliasManager.getAlias(path.getPath(path.size() - 2));
             SQLUtil.getColumnNamesClause(selectField, selectAlias, buf);
@@ -1058,6 +1059,8 @@
          {
             JDBCCMPFieldBridge selectField = (JDBCCMPFieldBridge) path.getCMPField();
             selectManager = (JDBCStoreManager) selectField.getManager();
+            if(selectField.getJDBCType().hasMapper())
+               this.functionJDBCType = selectField.getJDBCType();
          }
          else if(path.isCMRField())
          {
@@ -1581,7 +1584,13 @@
 
    public Object visit(ASTMax node, Object data)
    {
-      node.setResultType(returnType);
+      if(functionJDBCType != null)
+      {
+         node.setResultType(functionJDBCType.getJavaTypes()[0]);
+         node.setJDBCType(functionJDBCType);
+      }
+      else
+         node.setResultType(returnType);
       StringBuffer buf = (StringBuffer) data;
       Object[] args = new Object[]{
          node.distinct,
@@ -1592,7 +1601,13 @@
 
    public Object visit(ASTMin node, Object data)
    {
-      node.setResultType(returnType);
+      if(functionJDBCType != null)
+      {
+         node.setResultType(functionJDBCType.getJavaTypes()[0]);
+         node.setJDBCType(functionJDBCType);
+      }
+      else
+         node.setResultType(returnType);
       StringBuffer buf = (StringBuffer) data;
       Object[] args = new Object[]{
          node.distinct,
@@ -1603,7 +1618,14 @@
 
    public Object visit(ASTAvg node, Object data)
    {
-      node.setResultType(returnType);
+      if(functionJDBCType != null)
+      {
+         node.setResultType(functionJDBCType.getJavaTypes()[0]);
+         node.setJDBCType(functionJDBCType);
+      }
+      else
+         node.setResultType(returnType);
+
       StringBuffer buf = (StringBuffer) data;
       Object[] args = new Object[]{
          node.distinct,
@@ -1614,7 +1636,13 @@
 
    public Object visit(ASTSum node, Object data)
    {
-      node.setResultType(returnType);
+      if(functionJDBCType != null)
+      {
+         node.setResultType(functionJDBCType.getJavaTypes()[0]);
+         node.setJDBCType(functionJDBCType);
+      }
+      else
+         node.setResultType(returnType);
       StringBuffer buf = (StringBuffer) data;
       Object[] args = new Object[]{
          node.distinct,

Modified: branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildCMPBean.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildCMPBean.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildCMPBean.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -23,6 +23,7 @@
 
 import javax.ejb.EntityBean;
 import javax.ejb.EntityContext;
+import javax.ejb.FinderException;
 import javax.ejb.RemoveException;
 import javax.ejb.CreateException;
 
@@ -111,6 +112,39 @@
     */
    public abstract void setAnimal(AnimalEnum animal);
 
+   public abstract ColorEnum ejbSelectMinColor() throws FinderException;
+
+   public ColorEnum ejbHomeSelectMinColor() throws FinderException
+   {
+      return ejbSelectMinColor();
+   }
+
+   public abstract ColorEnum ejbSelectMaxColor() throws FinderException;
+
+   public ColorEnum ejbHomeSelectMaxColor() throws FinderException
+   {
+      return ejbSelectMaxColor();
+   }
+
+   public abstract ColorEnum ejbSelectAvgColor() throws FinderException;
+
+   public ColorEnum ejbHomeSelectAvgColor() throws FinderException
+   {
+      return ejbSelectAvgColor();
+   }
+
+   /**
+    * @ejb.select
+    * @ejb.interface-method view-type="local"
+    * @jboss.query query="SELECT c.color FROM Child c where c.id=?1"
+    */
+   public abstract ColorEnum ejbSelectColor(IDClass id) throws FinderException;
+
+   public ColorEnum ejbHomeSelectColor(IDClass id) throws FinderException
+   {
+      return ejbSelectColor(id);
+   }
+
    // EntityBean implementation -------------------------------------
    /**
     * @ejb.create-method

Modified: branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildLocalHome.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildLocalHome.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildLocalHome.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -48,4 +48,11 @@
    public ChildLocal findByPrimaryKey( IDClass pk)
       throws javax.ejb.FinderException;
 
+   public org.jboss.test.cmp2.enums.ejb.ColorEnum selectMinColor() throws javax.ejb.FinderException;
+
+   public org.jboss.test.cmp2.enums.ejb.ColorEnum selectMaxColor() throws javax.ejb.FinderException;
+
+   public org.jboss.test.cmp2.enums.ejb.ColorEnum selectAvgColor() throws javax.ejb.FinderException;
+
+   public org.jboss.test.cmp2.enums.ejb.ColorEnum selectColor(IDClass id) throws javax.ejb.FinderException;
 }

Modified: branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/Facade.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/Facade.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/Facade.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -58,4 +58,11 @@
    public java.util.List findLowColor(  ColorEnum color )
       throws Exception, java.rmi.RemoteException;
 
+   public ColorEnum selectMinColor() throws java.lang.Exception, java.rmi.RemoteException;
+
+   public ColorEnum selectMaxColor() throws java.lang.Exception, java.rmi.RemoteException;
+
+   public ColorEnum selectAvgColor() throws java.lang.Exception, java.rmi.RemoteException;
+
+   public ColorEnum selectColor(IDClass id) throws java.lang.Exception, java.rmi.RemoteException;
 }

Modified: branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/FacadeSessionBean.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/FacadeSessionBean.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/FacadeSessionBean.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -147,6 +147,26 @@
       return ids;
    }
 
+   public ColorEnum selectMinColor() throws Exception
+   {
+      return ChildUtil.getLocalHome().selectMinColor();
+   }
+
+   public ColorEnum selectMaxColor() throws Exception
+   {
+      return ChildUtil.getLocalHome().selectMaxColor();
+   }
+
+   public ColorEnum selectAvgColor() throws Exception
+   {
+      return ChildUtil.getLocalHome().selectAvgColor();
+   }
+
+   public ColorEnum selectColor(IDClass id) throws Exception
+   {
+      return ChildUtil.getLocalHome().selectColor(id);
+   }
+
    // SessionBean implementation
 
    /**

Modified: branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/test/EnumUnitTestCase.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/test/EnumUnitTestCase.java	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/testsuite/src/main/org/jboss/test/cmp2/enums/test/EnumUnitTestCase.java	2010-06-11 04:14:55 UTC (rev 105948)
@@ -151,4 +151,54 @@
          facade.removeChild(childId);
       }
    }
+
+   public void testSelectColors() throws Exception
+   {
+      Facade facade = FacadeUtil.getHome().create();
+      IDClass[] ids = new IDClass[]{new IDClass(555), new IDClass(666), new IDClass(777)};
+
+      try
+      {
+         facade.createChild(ids[0]);
+         ColorEnum min = ColorEnum.RED.valueOf(0);
+         facade.setColor(ids[0], min);
+
+         facade.createChild(ids[1]);
+         ColorEnum avg = ColorEnum.RED.valueOf(1);
+         facade.setColor(ids[1], avg);
+
+         facade.createChild(ids[2]);
+         ColorEnum max = ColorEnum.RED.valueOf(2);
+         facade.setColor(ids[2], max);
+
+         ColorEnum color = facade.selectMinColor();
+         assertEquals(min, color);      
+         color = facade.selectMaxColor();
+         assertEquals(max, color);
+         color = facade.selectAvgColor();
+         assertEquals(avg, color);
+      }
+      finally
+      {
+         for(int i = 0; i < ids.length; ++i)
+            facade.removeChild(ids[i]);
+      }
+   }
+
+   public void testSelectColor() throws Exception
+   {
+      Facade facade = FacadeUtil.getHome().create();
+      IDClass childId = new IDClass(6);
+      facade.createChild(childId);
+      try
+      {
+         facade.setColor(childId, ColorEnum.RED);
+         ColorEnum color = facade.selectColor(childId);
+         assertEquals(ColorEnum.RED, color);
+      }
+      finally
+      {
+         facade.removeChild(childId);
+      }
+   }
 }

Modified: branches/JBPAPP_4_2_0_GA_CP/testsuite/src/resources/cmp2/enums/META-INF/ejb-jar.xml
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/testsuite/src/resources/cmp2/enums/META-INF/ejb-jar.xml	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/testsuite/src/resources/cmp2/enums/META-INF/ejb-jar.xml	2010-06-11 04:14:55 UTC (rev 105948)
@@ -88,6 +88,46 @@
             </query-method>
             <ejb-ql><![CDATA[select object(o) from Child o where o.color < ?1]]></ejb-ql>
          </query>
+
+         <query>
+            <description><![CDATA[]]></description>
+            <query-method>
+               <method-name>ejbSelectMinColor</method-name>
+               <method-params>
+               </method-params>
+            </query-method>
+            <ejb-ql><![CDATA[SELECT MIN(c.color) FROM Child AS c]]></ejb-ql>
+         </query>
+         <query>
+            <description><![CDATA[]]></description>
+            <query-method>
+               <method-name>ejbSelectMaxColor</method-name>
+               <method-params>
+               </method-params>
+            </query-method>
+            <ejb-ql><![CDATA[SELECT MAX(c.color) FROM Child AS c]]></ejb-ql>
+         </query>
+         <query>
+            <description><![CDATA[]]></description>
+            <query-method>
+               <method-name>ejbSelectAvgColor</method-name>
+               <method-params>
+               </method-params>
+            </query-method>
+            <ejb-ql><![CDATA[SELECT AVG(c.color) FROM Child AS c]]></ejb-ql>
+         </query>
+
+         <query>
+            <description><![CDATA[]]></description>
+            <query-method>
+               <method-name>ejbSelectColor</method-name>
+               <method-params>
+                  <method-param>org.jboss.test.cmp2.enums.ejb.IDClass</method-param>
+               </method-params>
+            </query-method>
+            <ejb-ql><![CDATA[SELECT c.color FROM Child AS c WHERE c.id=?1]]></ejb-ql>
+         </query>
+
       </entity>
 
    </enterprise-beans>

Modified: branches/JBPAPP_4_2_0_GA_CP/testsuite/src/resources/cmp2/enums/META-INF/jbosscmp-jdbc.xml
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/testsuite/src/resources/cmp2/enums/META-INF/jbosscmp-jdbc.xml	2010-06-11 01:50:27 UTC (rev 105947)
+++ branches/JBPAPP_4_2_0_GA_CP/testsuite/src/resources/cmp2/enums/META-INF/jbosscmp-jdbc.xml	2010-06-11 04:14:55 UTC (rev 105948)
@@ -62,6 +62,27 @@
             </query-method>
             <jboss-ql><![CDATA[select object(o) from Child o where o.color < ?1]]></jboss-ql>
          </query>
+
+         <query>
+            <description><![CDATA[]]></description>
+            <query-method>
+               <method-name>ejbSelectMinColor</method-name>
+               <method-params>
+               </method-params>
+            </query-method>
+            <jboss-ql><![CDATA[SELECT MIN(c.color) FROM Child AS c]]></jboss-ql>
+         </query>
+         <query>
+            <description><![CDATA[]]></description>
+            <query-method>
+               <method-name>ejbSelectColor</method-name>
+               <method-params>
+                  <method-param>org.jboss.test.cmp2.enums.ejb.IDClass</method-param>
+               </method-params>
+            </query-method>
+            <jboss-ql><![CDATA[SELECT c.color FROM Child AS c WHERE c.id=?1]]></jboss-ql>
+         </query>
+
       </entity>
    </enterprise-beans>
 



More information about the jboss-cvs-commits mailing list