[jboss-cvs] JBossAS SVN: r106022 - in branches/JBPAPP_5_1: 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
Mon Jun 14 01:45:28 EDT 2010
Author: jiwils
Date: 2010-06-14 01:45:26 -0400 (Mon, 14 Jun 2010)
New Revision: 106022
Added:
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AbstractMappedTypeFunction.java
Modified:
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAbs.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAvg.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTConcat.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTCount.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTLCase.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMax.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMin.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMod.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSubstring.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSum.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTUCase.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AggregateFunction.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/EJBQLToSQL92Compiler.java
branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java
branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildCMPBean.java
branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildLocalHome.java
branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/Facade.java
branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/FacadeSessionBean.java
branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/test/EnumUnitTestCase.java
branches/JBPAPP_5_1/testsuite/src/resources/cmp2/enums/META-INF/ejb-jar.xml
branches/JBPAPP_5_1/testsuite/src/resources/cmp2/enums/META-INF/jbosscmp-jdbc.xml
Log:
Fix for JBPAPP-4471 so that user-type-mapped types work in EJBQL aggregate functions.
Modified: branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAbs.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAbs.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAbs.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAvg.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAvg.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTAvg.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -30,13 +30,12 @@
*/
public final class ASTAvg
extends AggregateFunction
- implements SelectFunction
{
public ASTAvg(int id)
{
super(id);
}
-
+
/**
* Accept the visitor. *
*/
Modified: branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTConcat.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTConcat.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTConcat.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTCount.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTCount.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTCount.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -30,7 +30,6 @@
*/
public final class ASTCount
extends AggregateFunction
- implements SelectFunction
{
public ASTCount(int id)
{
Modified: branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTLCase.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTLCase.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTLCase.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMax.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMax.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMax.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMin.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMin.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMin.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMod.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMod.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTMod.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSubstring.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSubstring.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSubstring.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSum.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSum.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTSum.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTUCase.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTUCase.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/ASTUCase.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/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_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AbstractMappedTypeFunction.java (rev 0)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AbstractMappedTypeFunction.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AggregateFunction.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AggregateFunction.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/ejbql/AggregateFunction.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/EJBQLToSQL92Compiler.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/EJBQLToSQL92Compiler.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/EJBQLToSQL92Compiler.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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())
{
@@ -1153,7 +1156,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,
@@ -1165,7 +1174,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,
@@ -1177,7 +1192,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,
@@ -1189,7 +1210,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,
@@ -1633,5 +1660,6 @@
identifierToTable.clear();
joinedAliases.clear();
selectDistinct = false;
+ functionJDBCType = null;
}
}
Modified: branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java
===================================================================
--- branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildCMPBean.java
===================================================================
--- branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildCMPBean.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildCMPBean.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildLocalHome.java
===================================================================
--- branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildLocalHome.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/ChildLocalHome.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -30,4 +30,11 @@
public org.jboss.test.cmp2.enums.ejb.ChildLocal findByPrimaryKey(org.jboss.test.cmp2.enums.ejb.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_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/Facade.java
===================================================================
--- branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/Facade.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/Facade.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -40,4 +40,11 @@
public java.util.List findLowColor( org.jboss.test.cmp2.enums.ejb.ColorEnum color )
throws java.lang.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_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/FacadeSessionBean.java
===================================================================
--- branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/FacadeSessionBean.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/ejb/FacadeSessionBean.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/test/EnumUnitTestCase.java
===================================================================
--- branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/test/EnumUnitTestCase.java 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/testsuite/src/main/org/jboss/test/cmp2/enums/test/EnumUnitTestCase.java 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/testsuite/src/resources/cmp2/enums/META-INF/ejb-jar.xml
===================================================================
--- branches/JBPAPP_5_1/testsuite/src/resources/cmp2/enums/META-INF/ejb-jar.xml 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/testsuite/src/resources/cmp2/enums/META-INF/ejb-jar.xml 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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_5_1/testsuite/src/resources/cmp2/enums/META-INF/jbosscmp-jdbc.xml
===================================================================
--- branches/JBPAPP_5_1/testsuite/src/resources/cmp2/enums/META-INF/jbosscmp-jdbc.xml 2010-06-14 04:41:06 UTC (rev 106021)
+++ branches/JBPAPP_5_1/testsuite/src/resources/cmp2/enums/META-INF/jbosscmp-jdbc.xml 2010-06-14 05:45:26 UTC (rev 106022)
@@ -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