You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2017/01/13 09:28:54 UTC
cayenne git commit: Update firebird support - fix EJBQL functions -
fix function call expressions - fix tests (explicitly clear self reference as
delete all query can't handle it on Firebird)
Repository: cayenne
Updated Branches:
refs/heads/master 4f860180d -> cde608b11
Update firebird support
- fix EJBQL functions
- fix function call expressions
- fix tests (explicitly clear self reference as delete all query can't handle it on Firebird)
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/cde608b1
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/cde608b1
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/cde608b1
Branch: refs/heads/master
Commit: cde608b11627922553f573ce65752b879e29f629
Parents: 4f86018
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Jan 13 11:17:08 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Jan 13 11:17:08 2017 +0300
----------------------------------------------------------------------
.../cayenne/dba/firebird/FirebirdAdapter.java | 6 +-
.../FirebirdEJBQLConditionTranslator.java | 105 +++++++++++++++++++
.../FirebirdEJBQLTranslatorFactory.java | 37 +++++++
.../firebird/FirebirdQualifierTranslator.java | 37 ++++++-
.../org/apache/cayenne/CDOReflexiveRelIT.java | 3 +
.../CayenneDataObjectRelationshipsIT.java | 18 ++++
.../cayenne/access/DataContextPrefetchIT.java | 3 +
.../AshwoodEntitySorter_RelationshipsIT.java | 4 +
.../apache/cayenne/query/ColumnSelectIT.java | 10 --
.../query/ObjectSelect_PrimitiveColumnsIT.java | 11 +-
.../cayenne/query/ObjectSelect_RunIT.java | 10 --
.../cayenne/unit/FirebirdUnitDbAdapter.java | 17 ++-
.../cayenne/unit/di/server/SchemaBuilder.java | 32 ++++++
.../cayenne/unit/di/server/ServerCase.java | 6 +-
.../org/apache/cayenne/unit/jira/CAY_194IT.java | 3 +
pom.xml | 4 +-
16 files changed, 267 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java
index c88c88f..6bc26be 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdAdapter.java
@@ -20,6 +20,7 @@
package org.apache.cayenne.dba.firebird;
import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslatorFactory;
import org.apache.cayenne.access.translator.select.QualifierTranslator;
import org.apache.cayenne.access.translator.select.QueryAssembler;
import org.apache.cayenne.access.types.ByteArrayType;
@@ -107,5 +108,8 @@ public class FirebirdAdapter extends JdbcAdapter {
return new FirebirdQualifierTranslator(queryAssembler);
}
-
+ @Override
+ public EJBQLTranslatorFactory getEjbqlTranslatorFactory() {
+ return new FirebirdEJBQLTranslatorFactory();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLConditionTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLConditionTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLConditionTranslator.java
new file mode 100644
index 0000000..6d0f272d
--- /dev/null
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLConditionTranslator.java
@@ -0,0 +1,105 @@
+/*****************************************************************
+ * 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.firebird;
+
+import org.apache.cayenne.access.translator.ejbql.EJBQLConditionTranslator;
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
+import org.apache.cayenne.ejbql.EJBQLExpression;
+import org.apache.cayenne.ejbql.parser.EJBQLTrimSpecification;
+
+/**
+ * @since 4.0
+ */
+public class FirebirdEJBQLConditionTranslator extends EJBQLConditionTranslator {
+
+ public FirebirdEJBQLConditionTranslator(EJBQLTranslationContext context) {
+ super(context);
+ }
+
+ @Override
+ public boolean visitTrim(EJBQLExpression expression, int finishedChildIndex) {
+ if (finishedChildIndex < 0) {
+ if (!(expression.getChild(0) instanceof EJBQLTrimSpecification)) {
+ context.append(" {fn TRIM(");
+ }
+ } else if (finishedChildIndex + 1 == expression.getChildrenCount()) {
+ context.append(")}");
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean visitTrimLeading(EJBQLExpression expression) {
+ context.append(" {fn TRIM(LEADING FROM ");
+ return false;
+ }
+
+ @Override
+ public boolean visitTrimTrailing(EJBQLExpression expression) {
+ context.append(" {fn TRIM(TRAILING FROM ");
+ return false;
+ }
+
+ @Override
+ public boolean visitTrimBoth(EJBQLExpression expression) {
+ context.append(" {fn TRIM(");
+ return false;
+ }
+
+ @Override
+ public boolean visitLower(EJBQLExpression expression, int finishedChildIndex) {
+ if (finishedChildIndex < 0) {
+ context.append(" {fn LOWER(");
+ return true;
+ } else {
+ return super.visitLower(expression, finishedChildIndex);
+ }
+ }
+
+ @Override
+ public boolean visitLocate(EJBQLExpression expression, int finishedChildIndex) {
+ if (finishedChildIndex < 0) {
+ context.append(" {fn POSITION(");
+ return true;
+ } else {
+ return super.visitLocate(expression, finishedChildIndex);
+ }
+ }
+
+ @Override
+ public boolean visitSubstring(EJBQLExpression expression, int finishedChildIndex) {
+ if (finishedChildIndex < 0) {
+ context.append(" SUBSTRING(");
+ } else {
+ if (finishedChildIndex + 1 == expression.getChildrenCount()) {
+ context.append(" AS INTEGER))");
+ } else {
+ if(finishedChildIndex == 0) {
+ context.append(" FROM CAST(");
+ } else if(finishedChildIndex == 1) {
+ context.append(" AS INTEGER) FOR CAST(");
+ }
+ }
+ }
+
+ return true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLTranslatorFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLTranslatorFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLTranslatorFactory.java
new file mode 100644
index 0000000..aea4437
--- /dev/null
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdEJBQLTranslatorFactory.java
@@ -0,0 +1,37 @@
+/*****************************************************************
+ * 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.firebird;
+
+import org.apache.cayenne.access.translator.ejbql.EJBQLTranslationContext;
+import org.apache.cayenne.access.translator.ejbql.JdbcEJBQLTranslatorFactory;
+import org.apache.cayenne.ejbql.EJBQLExpressionVisitor;
+
+/**
+ * @since 4.0
+ */
+public class FirebirdEJBQLTranslatorFactory extends JdbcEJBQLTranslatorFactory {
+
+ @Override
+ public EJBQLExpressionVisitor getConditionTranslator(EJBQLTranslationContext context) {
+ context.setCaseInsensitive(caseInsensitive);
+ return new FirebirdEJBQLConditionTranslator(context);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdQualifierTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdQualifierTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdQualifierTranslator.java
index 9965b12..503358f 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdQualifierTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/firebird/FirebirdQualifierTranslator.java
@@ -25,6 +25,8 @@ import org.apache.cayenne.dba.oracle.OracleQualifierTranslator;
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.exp.parser.ASTFunctionCall;
+import java.io.IOException;
+
public class FirebirdQualifierTranslator extends QualifierTranslator {
private int substringArg = 0;
@@ -67,6 +69,36 @@ public class FirebirdQualifierTranslator extends QualifierTranslator {
}
/**
+ * A little bit ugly code that wraps String scalars to CAST(? AS VARCHAR(length))
+ * because otherwise derby don't know what type will be at the placeholder and
+ * use LONG VARCHAR that isn't comparable what leads to statement preparation failure.
+ *
+ * @since 4.0
+ */
+ protected void appendFunctionArg(Object value, ASTFunctionCall functionExpression) throws IOException {
+ if("CONCAT".equals(functionExpression.getFunctionName())) {
+ if(value instanceof String) {
+ out.append("CAST(");
+ }
+ super.appendFunctionArg(value, functionExpression);
+ if(value instanceof String) {
+ clearLastFunctionArgDivider(functionExpression);
+ out.append(" AS VARCHAR(").append(((String)value).length()).append("))");
+ appendFunctionArgDivider(functionExpression);
+ }
+ } else if("SUBSTRING".equals(functionExpression.getFunctionName())) {
+ out.append("CAST(");
+ super.appendFunctionArg(value, functionExpression);
+ clearLastFunctionArgDivider(functionExpression);
+ substringArg--;
+ out.append(" AS INTEGER)");
+ appendFunctionArgDivider(functionExpression);
+ } else {
+ super.appendFunctionArg(value, functionExpression);
+ }
+ }
+
+ /**
* @since 4.0
*/
@Override
@@ -100,8 +132,9 @@ public class FirebirdQualifierTranslator extends QualifierTranslator {
out.delete(out.length() - 4, out.length());
break;
case "SUBSTRING":
- // no offset arg
- if(substringArg == 2) {
+ if(substringArg == 1) {
+ out.delete(out.length() - " FROM ".length(), out.length());
+ } else if(substringArg == 2) {
out.delete(out.length() - " FOR ".length(), out.length());
}
break;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/test/java/org/apache/cayenne/CDOReflexiveRelIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/CDOReflexiveRelIT.java b/cayenne-server/src/test/java/org/apache/cayenne/CDOReflexiveRelIT.java
index 56dfd47..24f5777 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/CDOReflexiveRelIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/CDOReflexiveRelIT.java
@@ -123,6 +123,9 @@ public class CDOReflexiveRelIT extends ServerCase {
childGroup1.setName("child1");
childGroup1.setToParentGroup(parentGroup);
context.commitChanges();
+
+ childGroup1.setToParentGroup(null);
+ context.commitChanges();
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/test/java/org/apache/cayenne/CayenneDataObjectRelationshipsIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/CayenneDataObjectRelationshipsIT.java b/cayenne-server/src/test/java/org/apache/cayenne/CayenneDataObjectRelationshipsIT.java
index 35bc8fe..6c13706 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/CayenneDataObjectRelationshipsIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/CayenneDataObjectRelationshipsIT.java
@@ -193,6 +193,9 @@ public class CayenneDataObjectRelationshipsIT extends ServerCase {
childGroup1.setName("child1");
childGroup1.setToParentGroup(parentGroup);
context.commitChanges();
+
+ childGroup1.setToParentGroup(null);
+ context.commitChanges();
}
@Test
@@ -207,6 +210,9 @@ public class CayenneDataObjectRelationshipsIT extends ServerCase {
childGroup1.setToParentGroup(parentGroup);
context.commitChanges();
+
+ childGroup1.setToParentGroup(null);
+ context.commitChanges();
}
@Test
@@ -226,6 +232,12 @@ public class CayenneDataObjectRelationshipsIT extends ServerCase {
childGroup2.setToParentGroup(parentGroup);
context.commitChanges();
+
+ childGroup1.setToParentGroup(null);
+ context.commitChanges();
+
+ childGroup2.setToParentGroup(null);
+ context.commitChanges();
}
@Test
@@ -245,6 +257,12 @@ public class CayenneDataObjectRelationshipsIT extends ServerCase {
childGroup2.setToParentGroup(childGroup1);
context.commitChanges();
+
+ childGroup1.setToParentGroup(null);
+ context.commitChanges();
+
+ childGroup2.setToParentGroup(null);
+ context.commitChanges();
}
@Test
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchIT.java
index 71fb837..72ea5cc 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextPrefetchIT.java
@@ -510,6 +510,9 @@ public class DataContextPrefetchIT extends ServerCase {
assertEquals(PersistenceState.COMMITTED, fetchedChild.getToParentGroup().getPersistenceState());
}
});
+
+ child.setToParentGroup(null);
+ context.commitChanges();
}
@Test
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/test/java/org/apache/cayenne/ashwood/AshwoodEntitySorter_RelationshipsIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/ashwood/AshwoodEntitySorter_RelationshipsIT.java b/cayenne-server/src/test/java/org/apache/cayenne/ashwood/AshwoodEntitySorter_RelationshipsIT.java
index 56d3020..9ed803a 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/ashwood/AshwoodEntitySorter_RelationshipsIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/ashwood/AshwoodEntitySorter_RelationshipsIT.java
@@ -84,5 +84,9 @@ public class AshwoodEntitySorter_RelationshipsIT extends ServerCase {
assertEquals("r3", ((ReflexiveAndToOne) objects.get(0)).getName());
assertEquals("r2", ((ReflexiveAndToOne) objects.get(1)).getName());
assertEquals("r1", ((ReflexiveAndToOne) objects.get(2)).getName());
+
+ tReflexiveAndToOne.delete().where("PARENT_ID", 2).execute();
+ tReflexiveAndToOne.delete().where("PARENT_ID", 1).execute();
+ tReflexiveAndToOne.deleteAll();
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
index a4dcada..025796c 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
@@ -21,7 +21,6 @@ package org.apache.cayenne.query;
import java.sql.Types;
import java.text.DateFormat;
-import java.util.Arrays;
import java.util.Locale;
import org.apache.cayenne.CayenneRuntimeException;
@@ -35,7 +34,6 @@ import org.apache.cayenne.unit.UnitDbAdapter;
import org.apache.cayenne.unit.di.server.CayenneProjects;
import org.apache.cayenne.unit.di.server.ServerCase;
import org.apache.cayenne.unit.di.server.UseServerRuntime;
-import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
@@ -90,14 +88,6 @@ public class ColumnSelectIT extends ServerCase {
tPaintings.insert(21, "painting21", 2, 1);
}
- @After
- public void clearArtistsDataSet() throws Exception {
- for(String table : Arrays.asList("PAINTING", "ARTIST", "GALLERY")) {
- TableHelper tHelper = new TableHelper(dbHelper, table);
- tHelper.deleteAll();
- }
- }
-
@Test
public void testSelectGroupBy() throws Exception {
Property<Long> count = Property.create(countExp(), Long.class);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_PrimitiveColumnsIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_PrimitiveColumnsIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_PrimitiveColumnsIT.java
index 9906375..7654bca 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_PrimitiveColumnsIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_PrimitiveColumnsIT.java
@@ -31,7 +31,6 @@ import org.apache.cayenne.testdo.primitive.PrimitivesTestEntity;
import org.apache.cayenne.unit.di.server.CayenneProjects;
import org.apache.cayenne.unit.di.server.ServerCase;
import org.apache.cayenne.unit.di.server.UseServerRuntime;
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -60,12 +59,6 @@ public class ObjectSelect_PrimitiveColumnsIT extends ServerCase {
}
}
- @After
- public void cleanTestRecords() throws Exception {
- TableHelper tPrimitives = new TableHelper(dbHelper, "PRIMITIVES_TEST");
- tPrimitives.deleteAll();
- }
-
@Test
public void test_SelectIntegerColumn() throws Exception {
int intColumn2 = ObjectSelect.query(PrimitivesTestEntity.class)
@@ -88,13 +81,13 @@ public class ObjectSelect_PrimitiveColumnsIT extends ServerCase {
@Test
public void test_SelectIntegerExpColumn() throws Exception {
Property<Integer> property = Property.create("intColumn",
- ExpressionFactory.exp("(obj:intColumn + 1)"), Integer.class);
+ ExpressionFactory.exp("(obj:intColumn + obj:intColumn)"), Integer.class);
int intColumn2 = ObjectSelect.query(PrimitivesTestEntity.class)
.column(property)
.orderBy(PrimitivesTestEntity.INT_COLUMN.asc())
.selectFirst(context);
- assertEquals(11, intColumn2);
+ assertEquals(20, intColumn2);
}
@Test
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java
index ca4a7ce..30b4f0c 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java
@@ -25,7 +25,6 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
-import java.util.Arrays;
import java.util.List;
import org.apache.cayenne.CayenneRuntimeException;
@@ -46,7 +45,6 @@ import org.apache.cayenne.testdo.testmap.Painting;
import org.apache.cayenne.unit.di.server.CayenneProjects;
import org.apache.cayenne.unit.di.server.ServerCase;
import org.apache.cayenne.unit.di.server.UseServerRuntime;
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -80,14 +78,6 @@ public class ObjectSelect_RunIT extends ServerCase {
}
}
- @After
- public void clearArtistsDataSet() throws Exception {
- for(String table : Arrays.asList("PAINTING", "ARTIST", "GALLERY")) {
- TableHelper tHelper = new TableHelper(dbHelper, table);
- tHelper.deleteAll();
- }
- }
-
@Test
public void test_SelectObjects() throws Exception {
List<Artist> result = ObjectSelect.query(Artist.class).select(context);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/test/java/org/apache/cayenne/unit/FirebirdUnitDbAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/FirebirdUnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/FirebirdUnitDbAdapter.java
index ba1f237..54e333a 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/FirebirdUnitDbAdapter.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/FirebirdUnitDbAdapter.java
@@ -26,20 +26,29 @@ public class FirebirdUnitDbAdapter extends UnitDbAdapter {
public FirebirdUnitDbAdapter(DbAdapter adapter) {
super(adapter);
}
-
+
+ @Override
public boolean supportsBoolean() {
return true;
}
-
+
+ @Override
public boolean supportsLobs() {
return true;
}
-
+
+ @Override
public boolean supportsFKConstraints(DbEntity entity) {
return !entity.getName().contains("CLOB");
}
-
+
+ @Override
public boolean supportsBinaryPK() {
return false;
}
+
+ @Override
+ public boolean supportsPKGeneratorConcurrency() {
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
index 8cab9b1..22923c3 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
@@ -160,6 +160,7 @@ public class SchemaBuilder {
for (Procedure proc : map.getProcedures()) {
unitDbAdapter.tweakProcedure(proc);
}
+ filterDataMap(map);
node.addDataMap(map);
@@ -170,6 +171,37 @@ public class SchemaBuilder {
domain.addNode(node);
}
+ /**
+ * Remote binary pk {@link DbEntity} for {@link DbAdapter} not supporting
+ * that and so on.
+ */
+ protected void filterDataMap(DataMap map) {
+ boolean supportsBinaryPK = unitDbAdapter.supportsBinaryPK();
+
+ if (supportsBinaryPK) {
+ return;
+ }
+
+ List<DbEntity> entitiesToRemove = new ArrayList<DbEntity>();
+
+ for (DbEntity ent : map.getDbEntities()) {
+ for (DbAttribute attr : ent.getAttributes()) {
+ // check for BIN PK or FK to BIN Pk
+ if (attr.getType() == Types.BINARY || attr.getType() == Types.VARBINARY
+ || attr.getType() == Types.LONGVARBINARY) {
+ if (attr.isPrimaryKey() || attr.isForeignKey()) {
+ entitiesToRemove.add(ent);
+ break;
+ }
+ }
+ }
+ }
+
+ for (DbEntity e : entitiesToRemove) {
+ map.removeDbEntity(e.getName(), true);
+ }
+ }
+
/** Drops all test tables. */
private void dropSchema() throws Exception {
for (DataNode node : domain.getDataNodes()) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java
index 0f5181e..d23510e 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java
@@ -40,7 +40,11 @@ public class ServerCase extends DICase {
@Before
public void cleanUpDB() throws Exception {
- dbCleaner.clean();
+ try {
+ dbCleaner.clean();
+ } catch (Exception ex) {
+ dbCleaner.clean();
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java
index 704a435..8689bb8 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java
@@ -110,5 +110,8 @@ public class CAY_194IT extends ServerCase {
qualifier));
assertEquals(1, children.size());
assertSame(o2, children.get(0));
+
+ o2.setToParent(null);
+ context.commitChanges();
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde608b1/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index ec153e1..5345246 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1260,8 +1260,8 @@
<dependencies>
<dependency>
<groupId>org.firebirdsql.jdbc</groupId>
- <artifactId>jaybird-jdk16</artifactId>
- <version>2.2.3</version>
+ <artifactId>jaybird-jdk17</artifactId>
+ <version>2.2.12</version>
<scope>test</scope>
</dependency>
</dependencies>