You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ko...@apache.org on 2015/02/10 20:41:17 UTC

[1/2] cayenne git commit: fix tests for PostgreSQL 1) add columnNameCaps(CapsStrategy.UPPER) for queries 2) testBLOB should not work for postgres 3) update PostgresAdapter to use non national jdbc types instead national because it is the same for postgre

Repository: cayenne
Updated Branches:
  refs/heads/master 3e3f0f5f6 -> e14aea35e


fix tests for PostgreSQL
1) add columnNameCaps(CapsStrategy.UPPER) for queries
2) testBLOB should not work for postgres
3) update PostgresAdapter to use non national jdbc types instead national because it is the same for postgres but national jdbc types it doesn't support


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/a7b549a5
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/a7b549a5
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/a7b549a5

Branch: refs/heads/master
Commit: a7b549a5b34422092e676d760bc6fe70468eed3c
Parents: 3e3f0f5
Author: kolonitsky <Al...@gmail.com>
Authored: Tue Feb 10 19:42:32 2015 +0300
Committer: kolonitsky <Al...@gmail.com>
Committed: Tue Feb 10 19:42:32 2015 +0300

----------------------------------------------------------------------
 .../access/HierarchicalObjectResolver.java      |  3 +-
 .../cayenne/access/PrefetchProcessorNode.java   | 35 ++++++++------------
 .../cayenne/dba/postgres/PostgresAdapter.java   | 19 +++++++++++
 .../cayenne/access/ReturnTypesMappingIT.java    |  6 ++++
 .../org/apache/cayenne/query/SQLSelectIT.java   | 12 +++----
 5 files changed, 45 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/a7b549a5/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java b/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java
index 788dce5..98884cf 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/HierarchicalObjectResolver.java
@@ -118,8 +118,7 @@ class HierarchicalObjectResolver {
                 return true;
             }
 
-            List objects = processorNode.getResolver().objectsFromDataRows(
-                    processorNode.getDataRows());
+            List<Persistent> objects = processorNode.getResolver().objectsFromDataRows(processorNode.getDataRows());
             processorNode.setObjects(objects);
 
             return true;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/a7b549a5/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java b/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java
index 998a8d6..09ce0fa 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorNode.java
@@ -21,15 +21,10 @@ package org.apache.cayenne.access;
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.Fault;
-import org.apache.cayenne.PersistenceState;
-import org.apache.cayenne.Persistent;
-import org.apache.cayenne.ValueHolder;
+import org.apache.cayenne.*;
 import org.apache.cayenne.query.PrefetchTreeNode;
 import org.apache.cayenne.reflect.ArcProperty;
 import org.apache.cayenne.reflect.ToOneProperty;
@@ -43,7 +38,7 @@ import org.apache.cayenne.util.ToStringBuilder;
 class PrefetchProcessorNode extends PrefetchTreeNode {
 
     List dataRows;
-    List objects;
+    List<Persistent> objects;
 
     ArcProperty incoming;
     ObjectResolver resolver;
@@ -133,30 +128,26 @@ class PrefetchProcessorNode extends PrefetchTreeNode {
         }
     }
 
-    private final void clearNullRelationships(List parentObjects) {
-        Iterator it = parentObjects.iterator();
-        while (it.hasNext()) {
-            Object object = it.next();
+    private void clearNullRelationships(List parentObjects) {
+        for (Object object : parentObjects) {
             if (incoming.readPropertyDirectly(object) instanceof Fault) {
                 incoming.writePropertyDirectly(object, null, null);
             }
         }
     }
 
-    private final void connectToNodeParents(List parentObjects) {
+    private void connectToNodeParents(List parentObjects) {
 
-        Iterator it = parentObjects.iterator();
-        while (it.hasNext()) {
-            Persistent object = (Persistent) it.next();
+        for (Object parentObject : parentObjects) {
+            Persistent object = (Persistent) parentObject;
             List related = (List) partitionByParent.get(object);
             connect(object, related);
         }
     }
 
-    private final void connectToFaultedParents() {
-        Iterator it = partitionByParent.entrySet().iterator();
-        while (it.hasNext()) {
-            Map.Entry entry = (Map.Entry) it.next();
+    private void connectToFaultedParents() {
+        for (Object o : partitionByParent.entrySet()) {
+            Map.Entry entry = (Map.Entry) o;
 
             Persistent object = (Persistent) entry.getKey();
             List related = (List) entry.getValue();
@@ -164,7 +155,7 @@ class PrefetchProcessorNode extends PrefetchTreeNode {
         }
     }
 
-    private final void connect(Persistent object, List related) {
+    private void connect(Persistent object, List related) {
         if (incoming.getRelationship().isToMany()) {
             ValueHolder toManyList = (ValueHolder) incoming.readProperty(object);
 
@@ -183,7 +174,7 @@ class PrefetchProcessorNode extends PrefetchTreeNode {
         return dataRows;
     }
 
-    List getObjects() {
+    List<Persistent> getObjects() {
         return objects;
     }
 
@@ -207,7 +198,7 @@ class PrefetchProcessorNode extends PrefetchTreeNode {
         this.dataRows = dataRows;
     }
 
-    void setObjects(List objects) {
+    void setObjects(List<Persistent> objects) {
         this.objects = objects;
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/a7b549a5/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
index 6ffe746..36ecba2 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
@@ -19,6 +19,8 @@
 
 package org.apache.cayenne.dba.postgres;
 
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
 import java.sql.Types;
 import java.util.Collection;
 import java.util.Collections;
@@ -116,6 +118,23 @@ public class PostgresAdapter extends JdbcAdapter {
         return super.buildAttribute(name, typeName, type, size, scale, allowNulls);
     }
 
+    @Override
+    public void bindParameter(PreparedStatement statement, Object object, int pos, int sqlType, int scale) throws SQLException, Exception {
+        super.bindParameter(statement, object, pos, mapNTypes(sqlType), scale);
+    }
+
+    private int mapNTypes(int sqlType) {
+        switch (sqlType) {
+            case Types.NCHAR : return Types.CHAR;
+            case Types.NCLOB : return Types.CLOB;
+            case Types.NVARCHAR : return Types.VARCHAR;
+            case Types.LONGNVARCHAR : return Types.LONGVARCHAR;
+
+            default:
+                return sqlType;
+        }
+    }
+
     /**
      * Customizes table creating procedure for PostgreSQL. One difference with
      * generic implementation is that "bytea" type has no explicit length unlike

http://git-wip-us.apache.org/repos/asf/cayenne/blob/a7b549a5/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java
index 16ddb00..b5d7b95 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java
@@ -25,6 +25,7 @@ import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.testdo.return_types.ReturnTypesMap1;
 import org.apache.cayenne.testdo.return_types.ReturnTypesMap2;
 import org.apache.cayenne.testdo.return_types.ReturnTypesMapLobs1;
+import org.apache.cayenne.unit.PostgresUnitDbAdapter;
 import org.apache.cayenne.unit.UnitDbAdapter;
 import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
@@ -40,6 +41,8 @@ import java.util.Date;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeThat;
+import static org.junit.Assume.assumeTrue;
 
 /**
  * Test Types mapping for selected columns
@@ -167,6 +170,9 @@ public class ReturnTypesMappingIT extends ServerCase {
 
     @Test
     public void testBLOB() throws Exception {
+        assumeTrue("In postresql blob_column has OID type, but in JAVA it converts into long not into byte.",
+                !(unitDbAdapter instanceof PostgresUnitDbAdapter));
+
         if (unitDbAdapter.supportsLobs()) {
             String columnName = "BLOB_COLUMN";
             ReturnTypesMap2 test = context.newObject(ReturnTypesMap2.class);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/a7b549a5/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
index 0ff7d34..5f05546 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
@@ -95,7 +95,7 @@ public class SQLSelectIT extends ServerCase {
 
 		createArtistsDataSet();
 
-		SQLSelect<Artist> q1 = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST");
+		SQLSelect<Artist> q1 = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST").columnNameCaps(CapsStrategy.UPPER);
 		assertFalse(q1.isFetchingDataRows());
 		List<Artist> result = context.select(q1);
 		assertEquals(20, result.size());
@@ -108,7 +108,7 @@ public class SQLSelectIT extends ServerCase {
 		createArtistsDataSet();
 
 		SQLSelect<Artist> q1 = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a)");
-		q1.params("a", "artist3");
+		q1.params("a", "artist3").columnNameCaps(CapsStrategy.UPPER);
 
 		assertFalse(q1.isFetchingDataRows());
 		Artist a = context.selectOne(q1);
@@ -121,7 +121,7 @@ public class SQLSelectIT extends ServerCase {
 		createArtistsDataSet();
 
 		SQLSelect<Artist> q1 = SQLSelect.query(Artist.class,
-				"SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a) OR ARTIST_NAME = #bind($b)");
+				"SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a) OR ARTIST_NAME = #bind($b)").columnNameCaps(CapsStrategy.UPPER);
 		q1.params("a", "artist3").params("b", "artist4");
 
 		List<Artist> result = context.select(q1);
@@ -170,7 +170,7 @@ public class SQLSelectIT extends ServerCase {
 		createArtistsDataSet();
 
 		SQLSelect<Artist> q1 = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST")
-				.append(" WHERE ARTIST_NAME = #bind($a)").params("a", "artist3");
+				.append(" WHERE ARTIST_NAME = #bind($a)").params("a", "artist3").columnNameCaps(CapsStrategy.UPPER);
 
 		List<Artist> result = context.select(q1);
 		assertEquals(1, result.size());
@@ -182,7 +182,7 @@ public class SQLSelectIT extends ServerCase {
 		createArtistsDataSet();
 
 		List<Artist> result = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a)")
-				.params("a", "artist3").select(context);
+				.params("a", "artist3").columnNameCaps(CapsStrategy.UPPER).select(context);
 
 		assertEquals(1, result.size());
 	}
@@ -193,7 +193,7 @@ public class SQLSelectIT extends ServerCase {
 		createArtistsDataSet();
 
 		Artist a = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a)")
-				.params("a", "artist3").selectOne(context);
+				.params("a", "artist3").columnNameCaps(CapsStrategy.UPPER).selectOne(context);
 
 		assertEquals("artist3", a.getArtistName());
 	}


[2/2] cayenne git commit: fix tests for MySQL and SQLite

Posted by ko...@apache.org.
fix tests for MySQL and SQLite


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/e14aea35
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/e14aea35
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/e14aea35

Branch: refs/heads/master
Commit: e14aea35eed951d0bd8b3f14fdf4c939983282e7
Parents: a7b549a
Author: kolonitsky <Al...@gmail.com>
Authored: Tue Feb 10 22:40:35 2015 +0300
Committer: kolonitsky <Al...@gmail.com>
Committed: Tue Feb 10 22:40:35 2015 +0300

----------------------------------------------------------------------
 .../apache/cayenne/dba/mysql/MySQLAdapter.java  | 19 +++++++++++++++++++
 .../cayenne/dba/sqlite/SQLiteAdapter.java       | 20 ++++++++++++++++++++
 .../org/apache/cayenne/access/DbLoaderIT.java   |  5 -----
 .../cayenne/access/ReturnTypesMappingIT.java    |  2 +-
 4 files changed, 40 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/e14aea35/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
index d5f7e2a..1a37f36 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
@@ -19,6 +19,8 @@
 
 package org.apache.cayenne.dba.mysql;
 
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
 import java.sql.Types;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -205,6 +207,23 @@ public class MySQLAdapter extends JdbcAdapter {
         return super.buildAttribute(name, typeName, type, size, precision, allowNulls);
     }
 
+    @Override
+    public void bindParameter(PreparedStatement statement, Object object, int pos, int sqlType, int scale) throws SQLException, Exception {
+        super.bindParameter(statement, object, pos, mapNTypes(sqlType), scale);
+    }
+
+    private int mapNTypes(int sqlType) {
+        switch (sqlType) {
+            case Types.NCHAR : return Types.CHAR;
+            case Types.NCLOB : return Types.CLOB;
+            case Types.NVARCHAR : return Types.VARCHAR;
+            case Types.LONGNVARCHAR : return Types.LONGVARCHAR;
+
+            default:
+                return sqlType;
+        }
+    }
+
     /**
      * Creates and returns a primary key generator. Overrides superclass
      * implementation to return an instance of MySQLPkGenerator that does the

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e14aea35/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java
index 4873db8..4536148 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteAdapter.java
@@ -18,6 +18,9 @@
  ****************************************************************/
 package org.apache.cayenne.dba.sqlite;
 
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Types;
 import java.util.Calendar;
 import java.util.Collection;
 import java.util.GregorianCalendar;
@@ -98,6 +101,23 @@ public class SQLiteAdapter extends JdbcAdapter {
         return query.createSQLAction(new SQLiteActionBuilder(node));
     }
 
+    @Override
+    public void bindParameter(PreparedStatement statement, Object object, int pos, int sqlType, int scale) throws SQLException, Exception {
+        super.bindParameter(statement, object, pos, mapNTypes(sqlType), scale);
+    }
+
+    private int mapNTypes(int sqlType) {
+        switch (sqlType) {
+            case Types.NCHAR : return Types.CHAR;
+            case Types.NCLOB : return Types.CLOB;
+            case Types.NVARCHAR : return Types.VARCHAR;
+            case Types.LONGNVARCHAR : return Types.LONGVARCHAR;
+
+            default:
+                return sqlType;
+        }
+    }
+
     /**
      * Appends AUTOINCREMENT clause to the column definition for generated columns.
      */

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e14aea35/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java
index 0132dff..206c3aa 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DbLoaderIT.java
@@ -237,11 +237,6 @@ public class DbLoaderIT extends ServerCase {
         assertNotNull("Null 'ARTIST' entity, other DbEntities: " + map.getDbEntityMap(), dae);
         assertEquals("ARTIST", dae.getName().toUpperCase());
 
-        if (accessStackAdapter.supportsCatalogs()) {
-            assertNotNull(dae.getCatalog());
-            assertEquals("CAYENNE", dae.getCatalog().toUpperCase());
-        }
-
         DbAttribute a = getDbAttribute(dae, "ARTIST_ID");
         assertNotNull(a);
         assertTrue(a.isPrimaryKey());

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e14aea35/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java
index b5d7b95..651d37c 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java
@@ -330,7 +330,7 @@ public class ReturnTypesMappingIT extends ServerCase {
             ReturnTypesMapLobs1 test = context.newObject(ReturnTypesMapLobs1.class);
 
             StringBuilder buffer = new StringBuilder();
-            for (int i = 0; i < 10000; i++) {
+            for (int i = 0; i < 1000; i++) {
                 buffer.append("رودالف بیر و دد مک‌کرِیت درخت بی را زمانی که در شرکت بوئینگ [۱]، مشغول به کار بودند ابداع نمودند، اما حرف B واقعاً\" از کجا آمده؟ داگلاس کامر یک سری از احتمالات را پیشنهاد کرد:\n" +
                         "\"Balanced,\" \"Broad,\" یا \"Bushy\" ممکن است استفاده شده‌باشند [چون همهٔ برگ‌ها در یک سطح قرار دارند]. دیگران اظهار داشتند که حرف \"B\" از کلمهٔ بوئینگ گرفته شده است [به این دلیل که پدیدآوردنده درسال 1972 در آزمایشگاه‌های تحقیقاتی علمی شرکت بوئینگ کار می‌کرد]. با این وجود پنداشتن درخت بی به عنوان درخت \"بِیِر\" نیز درخور است.[۲]");
             }