User: dsundstrom
Date: 02/04/14 11:59:30
Modified: src/main/org/jboss/ejb/plugins/cmp/jdbc
JDBCEJBQLCompiler.java SQLUtil.java
Log:
Added support for comparisons of dependent value classes to JBossQL.
Revision Changes Path
1.6 +66 -4
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java
Index: JDBCEJBQLCompiler.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- JDBCEJBQLCompiler.java 14 Apr 2002 17:28:56 -0000 1.5
+++ JDBCEJBQLCompiler.java 14 Apr 2002 18:59:30 -0000 1.6
@@ -62,6 +62,7 @@
import org.jboss.ejb.plugins.cmp.ejbql.ASTStringParenthetical;
import org.jboss.ejb.plugins.cmp.ejbql.ASTSubstring;
import org.jboss.ejb.plugins.cmp.ejbql.ASTUCase;
+import org.jboss.ejb.plugins.cmp.ejbql.ASTValueClassComparison;
import org.jboss.ejb.plugins.cmp.ejbql.ASTWhere;
import org.jboss.ejb.plugins.cmp.ejbql.SimpleNode;
@@ -86,7 +87,7 @@
* Compiles EJB-QL and JBossQL into SQL.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Dain Sundstrom</a>
- * @version $Revision: 1.5 $
+ * @version $Revision: 1.6 $
*/
public class JDBCEJBQLCompiler extends BasicVisitor {
@@ -305,7 +306,7 @@
}
// verify that parameter is the same type as the entity
- private void verrifyParameterEntityType(
+ private void verifyParameterEntityType(
int number,
JDBCEntityBridge entity) {
@@ -345,7 +346,7 @@
ASTParameter toParam = (ASTParameter)toNode;
// can only compare like kind entities
- verrifyParameterEntityType(toParam.number, fromEntity);
+ verifyParameterEntityType(toParam.number, fromEntity);
inputParameters.addAll(QueryParameter.createParameters(
toParam.number - 1,
@@ -869,7 +870,7 @@
ASTParameter fromParam = (ASTParameter)node.jjtGetChild(0);
// can only compare like kind entities
- verrifyParameterEntityType(fromParam.number, toChildEntity);
+ verifyParameterEntityType(fromParam.number, toChildEntity);
fromParamNumber = fromParam.number;
} else {
@@ -983,6 +984,67 @@
buf.append(")");
+ return buf;
+ }
+
+ public Object visit(ASTValueClassComparison node, Object data) {
+ BlockStringBuffer buf = (BlockStringBuffer)data;
+
+ boolean not = (node.opp == "<>");
+ buf.append("(");
+ if(not) {
+ buf.append("NOT(");
+ }
+
+ // setup the from path
+ ASTPath fromPath = (ASTPath)node.jjtGetChild(0);
+ joinPaths.add(fromPath);
+ String fromAlias = getAlias((String)fromPath.getPath(fromPath.size()-2));
+ JDBCCMPFieldBridge fromCMPField =
+ (JDBCCMPFieldBridge)fromPath.getCMPField();
+
+ Node toNode = node.jjtGetChild(1);
+ if(toNode instanceof ASTParameter) {
+ ASTParameter toParam = (ASTParameter)toNode;
+
+ // can only compare like kind entities
+ Class parameterType = getParameterType(toParam.number);
+ if(!(fromCMPField.getFieldType().equals(parameterType))) {
+ throw new IllegalStateException("Only like types can be " +
+ "compared: from CMP field=" + fromCMPField.getFieldType() +
+ " to parameter=" + parameterType);
+ }
+
+ inputParameters.addAll(QueryParameter.createParameters(
+ toParam.number - 1,
+ fromCMPField));
+
+ buf.append(SQLUtil.getWhereClause(fromCMPField, fromAlias));
+ } else {
+ ASTPath toPath = (ASTPath)toNode;
+ joinPaths.add(toPath);
+ String toAlias = getAlias((String)toPath.getPath(toPath.size()-2));
+ JDBCCMPFieldBridge toCMPField =
+ (JDBCCMPFieldBridge)toPath.getCMPField();
+
+ // can only compare like kind entities
+ if(!(fromCMPField.getFieldType().equals(toCMPField.getFieldType()))) {
+ throw new IllegalStateException("Only like types can be " +
+ "compared: from CMP field=" + fromCMPField.getFieldType() +
+ " to CMP field=" + toCMPField.getFieldType());
+ }
+
+ buf.append(SQLUtil.getSelfCompareWhereClause(
+ fromCMPField,
+ fromAlias,
+ toAlias));
+ }
+
+ if(not) {
+ buf.append(")");
+ }
+ buf.append(")");
+
return buf;
}
1.12 +8 -1 jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java
Index: SQLUtil.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- SQLUtil.java 13 Apr 2002 01:26:58 -0000 1.11
+++ SQLUtil.java 14 Apr 2002 18:59:30 -0000 1.12
@@ -27,7 +27,7 @@
* SQLUtil helps with building sql statements.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Dain Sundstrom</a>
- * @version $Revision: 1.11 $
+ * @version $Revision: 1.12 $
*/
public class SQLUtil {
public static String fixTableName(String tableName, DataSource dataSource)
@@ -594,6 +594,13 @@
// [AND fromIdentifier.pkColumnName1=toIdentifier.fkColumnName1
// [AND fromIdentifier.pkColumnName2=toIdentifier.fkColumnName2 [...]]]
// =======================================================================
+
+ public static String getSelfCompareWhereClause(
+ JDBCFieldBridge field, String fromIdentifier, String toIdentifier) {
+
+ return getSelfCompareWhereClause(
+ field.getJDBCType(), fromIdentifier, toIdentifier);
+ }
public static String getSelfCompareWhereClause(
List fields, String fromIdentifier, String toIdentifier) {
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development