You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/08/05 17:22:38 UTC
svn commit: r562888 - in
/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src:
main/java/org/apache/cayenne/access/jdbc/ main/java/org/apache/cayenne/ejbql/
main/java/org/apache/cayenne/ejbql/parser/
test/java/org/apache/cayenne/access/ test/re...
Author: aadamchik
Date: Sun Aug 5 08:22:37 2007
New Revision: 562888
URL: http://svn.apache.org/viewvc?view=rev&rev=562888
Log:
CAY-841 EJBQL Support for LIKE/ESCAPE and IN conditions
(basic IN support)
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLBaseVisitor.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLExpressionVisitor.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLIn.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLConditionsTest.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/resources/dml/access.DataContextEJBQLConditionsTest.xml
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java?view=diff&rev=562888&r1=562887&r2=562888
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java Sun Aug 5 08:22:37 2007
@@ -241,6 +241,23 @@
return true;
}
+ public boolean visitIn(EJBQLExpression expression, int finishedChildIndex) {
+ if (finishedChildIndex == 0) {
+ if (expression.isNegated()) {
+ context.append(" NOT");
+ }
+ context.append(" IN (");
+ }
+ else if(finishedChildIndex == expression.getChildrenCount() - 1) {
+ context.append(")");
+ }
+ else if(finishedChildIndex > 0) {
+ context.append(',');
+ }
+
+ return true;
+ }
+
protected void afterChild(EJBQLExpression e, String text, int childIndex) {
if (childIndex >= 0) {
if (childIndex + 1 < e.getChildrenCount()) {
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLBaseVisitor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLBaseVisitor.java?view=diff&rev=562888&r1=562887&r2=562888
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLBaseVisitor.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLBaseVisitor.java Sun Aug 5 08:22:37 2007
@@ -186,7 +186,7 @@
return continueFlag;
}
- public boolean visitIn(EJBQLExpression expression) {
+ public boolean visitIn(EJBQLExpression expression, int finishedChildIndex) {
return continueFlag;
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLExpressionVisitor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLExpressionVisitor.java?view=diff&rev=562888&r1=562887&r2=562888
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLExpressionVisitor.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/EJBQLExpressionVisitor.java Sun Aug 5 08:22:37 2007
@@ -163,7 +163,7 @@
boolean visitIdentifier(EJBQLExpression expression);
- boolean visitIn(EJBQLExpression expression);
+ boolean visitIn(EJBQLExpression expression, int finishedChildIndex);
boolean visitInnerFetchJoin(EJBQLJoin join);
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLIn.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLIn.java?view=diff&rev=562888&r1=562887&r2=562888
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLIn.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/ejbql/parser/EJBQLIn.java Sun Aug 5 08:22:37 2007
@@ -31,6 +31,11 @@
}
protected boolean visitNode(EJBQLExpressionVisitor visitor) {
- return visitor.visitIn(this);
+ return visitor.visitIn(this, -1);
+ }
+
+ protected boolean visitChild(EJBQLExpressionVisitor visitor, int childIndex) {
+ return super.visitChild(visitor, childIndex)
+ && visitor.visitIn(this, childIndex);
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLConditionsTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLConditionsTest.java?view=diff&rev=562888&r1=562887&r2=562888
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLConditionsTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLConditionsTest.java Sun Aug 5 08:22:37 2007
@@ -112,4 +112,43 @@
assertTrue(ids.contains(new Integer(33005)));
}
+ public void testIn() throws Exception {
+ createTestData("prepareIn");
+
+ String ejbql = "SELECT p FROM Painting p WHERE p.paintingTitle IN ('A', 'B')";
+
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ List objects = createDataContext().performQuery(query);
+ assertEquals(2, objects.size());
+
+ Set ids = new HashSet();
+ Iterator it = objects.iterator();
+ while (it.hasNext()) {
+ Object id = DataObjectUtils.pkForObject((Persistent) it.next());
+ ids.add(id);
+ }
+
+ assertTrue(ids.contains(new Integer(33006)));
+ assertTrue(ids.contains(new Integer(33007)));
+ }
+
+ public void testNotIn() throws Exception {
+ createTestData("prepareIn");
+
+ String ejbql = "SELECT p FROM Painting p WHERE p.paintingTitle NOT IN ('A', 'B')";
+
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ List objects = createDataContext().performQuery(query);
+ assertEquals(1, objects.size());
+
+ Set ids = new HashSet();
+ Iterator it = objects.iterator();
+ while (it.hasNext()) {
+ Object id = DataObjectUtils.pkForObject((Persistent) it.next());
+ ids.add(id);
+ }
+
+ assertTrue(ids.contains(new Integer(33008)));
+ }
+
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/resources/dml/access.DataContextEJBQLConditionsTest.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/resources/dml/access.DataContextEJBQLConditionsTest.xml?view=diff&rev=562888&r1=562887&r2=562888
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/resources/dml/access.DataContextEJBQLConditionsTest.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/resources/dml/access.DataContextEJBQLConditionsTest.xml Sun Aug 5 08:22:37 2007
@@ -62,6 +62,43 @@
</value>
</constructor-arg>
</bean>
+
+ <bean id="P6" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class">
+ <value>org.apache.art.Painting</value>
+ </constructor-arg>
+ <constructor-arg>
+ <value>
+ INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE)
+ VALUES (33006, 'A', 5000)
+ </value>
+ </constructor-arg>
+ </bean>
+
+ <bean id="P7" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class">
+ <value>org.apache.art.Painting</value>
+ </constructor-arg>
+ <constructor-arg>
+ <value>
+ INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE)
+ VALUES (33007, 'B', 5000)
+ </value>
+ </constructor-arg>
+ </bean>
+
+ <bean id="P8" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class">
+ <value>org.apache.art.Painting</value>
+ </constructor-arg>
+ <constructor-arg>
+ <value>
+ INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE)
+ VALUES (33008, 'C', 5000)
+ </value>
+ </constructor-arg>
+ </bean>
+
<!-- ======================================= -->
@@ -76,6 +113,16 @@
<ref bean="P3" />
<ref bean="P4" />
<ref bean="P5" />
+ </list>
+ </constructor-arg>
+ </bean>
+
+ <bean id="prepareIn" class="java.util.ArrayList">
+ <constructor-arg>
+ <list>
+ <ref bean="P6" />
+ <ref bean="P7" />
+ <ref bean="P8" />
</list>
</constructor-arg>
</bean>