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 2014/01/28 11:44:12 UTC
svn commit: r1562030 - in /cayenne/main/trunk/cayenne-server/src:
main/java/org/apache/cayenne/dba/derby/ test/java/org/apache/cayenne/access/
Author: aadamchik
Date: Tue Jan 28 10:44:11 2014
New Revision: 1562030
URL: http://svn.apache.org/r1562030
Log:
CAY-1480 Implement cross-db functional expressions
Added:
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLConditionTranslator.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLTranslatorFactory.java
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFunctionalExpressions.java
- copied, changed from r1561514, cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFunctionalExpressionsTemp.java
Removed:
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFunctionalExpressionsTemp.java
Modified:
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java?rev=1562030&r1=1562029&r2=1562030&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java Tue Jan 28 10:44:11 2014
@@ -25,6 +25,8 @@ import java.sql.Types;
import java.util.List;
import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.access.jdbc.EJBQLTranslatorFactory;
+import org.apache.cayenne.access.jdbc.JdbcEJBQLTranslatorFactory;
import org.apache.cayenne.access.trans.QualifierTranslator;
import org.apache.cayenne.access.trans.QueryAssembler;
import org.apache.cayenne.access.types.ByteType;
@@ -196,6 +198,16 @@ public class DerbyAdapter extends JdbcAd
translator.setCaseInsensitive(caseInsensitiveCollations);
return translator;
}
+
+ /**
+ * @since 3.1
+ */
+ @Override
+ protected EJBQLTranslatorFactory createEJBQLTranslatorFactory() {
+ JdbcEJBQLTranslatorFactory translatorFactory = new DerbyEJBQLTranslatorFactory();
+ translatorFactory.setCaseInsensitive(caseInsensitiveCollations);
+ return translatorFactory;
+ }
@Override
public MergerFactory mergerFactory() {
Added: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLConditionTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLConditionTranslator.java?rev=1562030&view=auto
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLConditionTranslator.java (added)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLConditionTranslator.java Tue Jan 28 10:44:11 2014
@@ -0,0 +1,55 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.dba.derby;
+
+import org.apache.cayenne.access.jdbc.EJBQLConditionTranslator;
+import org.apache.cayenne.access.jdbc.EJBQLTranslationContext;
+import org.apache.cayenne.ejbql.EJBQLExpression;
+
+/**
+ * @since 3.1
+ */
+public class DerbyEJBQLConditionTranslator extends EJBQLConditionTranslator {
+
+ public DerbyEJBQLConditionTranslator(EJBQLTranslationContext context) {
+ super(context);
+ }
+
+ @Override
+ public boolean visitCurrentTimestamp(EJBQLExpression expression) {
+ context.append(" CURRENT_TIMESTAMP");
+ return false;
+ }
+
+ @Override
+ public boolean visitConcat(EJBQLExpression expression, int finishedChildIndex) {
+
+ // note that for CHAR columns, CONCAT would include padding ... Should
+ // we use TRIM here?
+ if (finishedChildIndex < 0) {
+ context.append(" (");
+ } else if (finishedChildIndex + 1 == expression.getChildrenCount()) {
+ context.append(")");
+ } else {
+ context.append(" ||");
+ }
+
+ return true;
+ }
+}
Added: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLTranslatorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLTranslatorFactory.java?rev=1562030&view=auto
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLTranslatorFactory.java (added)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyEJBQLTranslatorFactory.java Tue Jan 28 10:44:11 2014
@@ -0,0 +1,36 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.dba.derby;
+
+import org.apache.cayenne.access.jdbc.EJBQLTranslationContext;
+import org.apache.cayenne.access.jdbc.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
+
+/**
+ * @since 3.1
+ */
+public class DerbyEJBQLTranslatorFactory extends JdbcEJBQLTranslatorFactory {
+
+ @Override
+ public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
+ context.setCaseInsensitive(caseInsensitive);
+ return new DerbyEJBQLConditionTranslator(context);
+ }
+
+}
Copied: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFunctionalExpressions.java (from r1561514, cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFunctionalExpressionsTemp.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFunctionalExpressions.java?p2=cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFunctionalExpressions.java&p1=cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFunctionalExpressionsTemp.java&r1=1561514&r2=1562030&rev=1562030&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFunctionalExpressionsTemp.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFunctionalExpressions.java Tue Jan 28 10:44:11 2014
@@ -41,7 +41,7 @@ import org.apache.cayenne.unit.di.server
// TODO: renamed as it fails on DB's like Derby. See CAY-1480.
@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
-public class DataContextEJBQLFunctionalExpressionsTemp extends ServerCase {
+public class DataContextEJBQLFunctionalExpressions extends ServerCase {
@Inject
protected DBHelper dbHelper;
@@ -217,15 +217,15 @@ public class DataContextEJBQLFunctionalE
public void testCONCAT() {
- Artist a1 = context.newObject(Artist.class);
- a1.setArtistName("a1");
+ Painting a1 = context.newObject(Painting.class);
+ a1.setPaintingTitle("a1");
- Artist a2 = context.newObject(Artist.class);
- a2.setArtistName("a2");
+ Painting a2 = context.newObject(Painting.class);
+ a2.setPaintingTitle("a2");
context.commitChanges();
EJBQLQuery query = new EJBQLQuery(
- "SELECT a FROM Artist a WHERE CONCAT(a.artistName, a.artistName) = 'a1a1'");
+ "SELECT a FROM Painting a WHERE CONCAT(a.paintingTitle, a.paintingTitle) = 'a1a1'");
List<?> objects = context.performQuery(query);
assertEquals(1, objects.size());
assertTrue(objects.contains(a1));