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 2010/06/20 15:06:46 UTC

svn commit: r956353 - in /cayenne/main/trunk: build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/ framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/

Author: aadamchik
Date: Sun Jun 20 13:06:46 2010
New Revision: 956353

URL: http://svn.apache.org/viewvc?rev=956353&view=rev
Log:
DI-enabled unit tests

* support for JDBC types in JDBC test utils

Modified:
    cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/DeleteBuilder.java
    cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/SQLBuilder.java
    cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/UpdateBuilder.java
    cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/UpdateTemplate.java
    cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/WhereBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextRefreshingTest.java

Modified: cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/DeleteBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/DeleteBuilder.java?rev=956353&r1=956352&r2=956353&view=diff
==============================================================================
--- cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/DeleteBuilder.java (original)
+++ cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/DeleteBuilder.java Sun Jun 20 13:06:46 2010
@@ -18,19 +18,20 @@
  ****************************************************************/
 package org.apache.cayenne.test.jdbc;
 
-import java.util.ArrayList;
-
 public class DeleteBuilder extends SQLBuilder {
 
     protected DeleteBuilder(DBHelper dbHelper, String tableName) {
-        super(dbHelper, new StringBuilder(), new ArrayList<Object>());
-
+        super(dbHelper);
         sqlBuffer.append("delete from ").append(dbHelper.quote(tableName));
     }
 
     public WhereBuilder where(String column, Object value) {
-        WhereBuilder where = new WhereBuilder(dbHelper, sqlBuffer, bindings);
-        where.and(column, value);
+        return where(column, value, NO_TYPE);
+    }
+
+    public WhereBuilder where(String column, Object value, int valueType) {
+        WhereBuilder where = new WhereBuilder(dbHelper, sqlBuffer, bindings, bindingTypes);
+        where.and(column, value, valueType);
         return where;
     }
 }

Modified: cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/SQLBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/SQLBuilder.java?rev=956353&r1=956352&r2=956353&view=diff
==============================================================================
--- cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/SQLBuilder.java (original)
+++ cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/SQLBuilder.java Sun Jun 20 13:06:46 2010
@@ -19,23 +19,43 @@
 package org.apache.cayenne.test.jdbc;
 
 import java.sql.SQLException;
+import java.util.ArrayList;
 import java.util.Collection;
 
 public abstract class SQLBuilder {
 
+    static final int NO_TYPE = Integer.MIN_VALUE;
+
     protected DBHelper dbHelper;
     protected Collection<Object> bindings;
+    protected Collection<Integer> bindingTypes;
     protected StringBuilder sqlBuffer;
 
+    protected SQLBuilder(DBHelper dbHelper) {
+        this(
+                dbHelper,
+                new StringBuilder(),
+                new ArrayList<Object>(),
+                new ArrayList<Integer>());
+    }
+
     protected SQLBuilder(DBHelper dbHelper, StringBuilder sqlBuffer,
-            Collection<Object> bindings) {
+            Collection<Object> bindings, Collection<Integer> bindingTypes) {
         this.dbHelper = dbHelper;
         this.bindings = bindings;
+        this.bindingTypes = bindingTypes;
         this.sqlBuffer = sqlBuffer;
     }
 
     public int execute() throws SQLException {
-        return new UpdateTemplate(dbHelper).execute(sqlBuffer.toString(), bindings
-                .toArray());
+        return new UpdateTemplate(dbHelper).execute(
+                sqlBuffer.toString(),
+                bindings,
+                bindingTypes);
+    }
+
+    protected void initBinding(Object value, int type) {
+        bindings.add(value);
+        bindingTypes.add(type);
     }
 }

Modified: cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/UpdateBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/UpdateBuilder.java?rev=956353&r1=956352&r2=956353&view=diff
==============================================================================
--- cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/UpdateBuilder.java (original)
+++ cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/UpdateBuilder.java Sun Jun 20 13:06:46 2010
@@ -18,31 +18,36 @@
  ****************************************************************/
 package org.apache.cayenne.test.jdbc;
 
-import java.util.ArrayList;
-
 public class UpdateBuilder extends SQLBuilder {
 
     protected int setCount;
 
     protected UpdateBuilder(DBHelper dbHelper, String tableName) {
-        super(dbHelper, new StringBuilder(), new ArrayList<Object>());
+        super(dbHelper);
         sqlBuffer.append("update ").append(dbHelper.quote(tableName)).append(" set ");
     }
 
     public UpdateBuilder set(String column, Object value) {
+        return set(column, value, NO_TYPE);
+    }
+
+    public UpdateBuilder set(String column, Object value, int valueType) {
         if (setCount++ > 0) {
             sqlBuffer.append(", ");
         }
 
         sqlBuffer.append(dbHelper.quote(column)).append(" = ?");
-        bindings.add(value);
+        initBinding(value, valueType);
         return this;
     }
 
     public WhereBuilder where(String column, Object value) {
-        WhereBuilder where = new WhereBuilder(dbHelper, sqlBuffer, bindings);
-        where.and(column, value);
-        return where;
+        return where(column, value, NO_TYPE);
     }
 
+    public WhereBuilder where(String column, Object value, int valueType) {
+        WhereBuilder where = new WhereBuilder(dbHelper, sqlBuffer, bindings, bindingTypes);
+        where.and(column, value, valueType);
+        return where;
+    }
 }

Modified: cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/UpdateTemplate.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/UpdateTemplate.java?rev=956353&r1=956352&r2=956353&view=diff
==============================================================================
--- cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/UpdateTemplate.java (original)
+++ cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/UpdateTemplate.java Sun Jun 20 13:06:46 2010
@@ -21,6 +21,7 @@ package org.apache.cayenne.test.jdbc;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
+import java.util.Collection;
 
 class UpdateTemplate {
 
@@ -30,17 +31,41 @@ class UpdateTemplate {
         this.parent = parent;
     }
 
-    protected void bindParameters(PreparedStatement statement, Object... bindings)
-            throws SQLException {
-
-        if (bindings != null && bindings.length > 0) {
-            for (int i = 0; i < bindings.length; i++) {
-                statement.setObject(i + 1, bindings[i]);
+    protected void bindParameters(
+            PreparedStatement statement,
+            Collection<Object> bindings,
+            Collection<Integer> bindingTypes) throws SQLException {
+
+        if (bindings != null && !bindings.isEmpty()) {
+
+            Object[] values = bindings.toArray();
+            Integer[] types = bindingTypes.toArray(new Integer[bindingTypes.size()]);
+
+            for (int i = 0; i < values.length; i++) {
+
+                if (values[i] == null) {
+                    if (types[i] != SQLBuilder.NO_TYPE) {
+                        statement.setNull(i + 1, types[i]);
+                    }
+                    else {
+                        throw new IllegalStateException(
+                                "No type inmformation for null value at index " + i);
+                    }
+                }
+                else {
+                    if (types[i] != SQLBuilder.NO_TYPE) {
+                        statement.setObject(i + 1, values[i], types[i]);
+                    }
+                    else {
+                        statement.setObject(i + 1, values[i]);
+                    }
+                }
             }
         }
     }
 
-    int execute(String sql, Object... bindings) throws SQLException {
+    int execute(String sql, Collection<Object> bindings, Collection<Integer> bindingTypes)
+            throws SQLException {
         UtilityLogger.log(sql);
         Connection c = parent.getConnection();
         try {
@@ -48,7 +73,7 @@ class UpdateTemplate {
             PreparedStatement st = c.prepareStatement(sql);
 
             try {
-                bindParameters(st, bindings);
+                bindParameters(st, bindings, bindingTypes);
                 return st.executeUpdate();
             }
             finally {

Modified: cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/WhereBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/WhereBuilder.java?rev=956353&r1=956352&r2=956353&view=diff
==============================================================================
--- cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/WhereBuilder.java (original)
+++ cayenne/main/trunk/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/WhereBuilder.java Sun Jun 20 13:06:46 2010
@@ -25,31 +25,40 @@ public class WhereBuilder extends SQLBui
     protected int whereCount;
 
     protected WhereBuilder(DBHelper dbHelper, StringBuilder sqlBuffer,
-            Collection<Object> bindings) {
-        super(dbHelper, sqlBuffer, bindings);
+            Collection<Object> bindings, Collection<Integer> bindingTypes) {
+        super(dbHelper, sqlBuffer, bindings, bindingTypes);
         sqlBuffer.append(" where ");
     }
 
     public WhereBuilder and(String column, Object value) {
+        return and(column, value, NO_TYPE);
+    }
+
+    public WhereBuilder and(String column, Object value, int valueType) {
 
         if (whereCount++ > 0) {
             sqlBuffer.append(" and ");
         }
 
         sqlBuffer.append(dbHelper.quote(column)).append(" = ?");
-        bindings.add(value);
+        initBinding(value, valueType);
 
         return this;
     }
 
     public WhereBuilder or(String column, Object value) {
+        return or(column, value, NO_TYPE);
+    }
+
+    public WhereBuilder or(String column, Object value, int valueType) {
         if (whereCount++ > 0) {
             sqlBuffer.append(" or ");
         }
 
         sqlBuffer.append(dbHelper.quote(column)).append(" = ?");
-        bindings.add(value);
+        initBinding(value, valueType);
 
         return this;
     }
+
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextRefreshingTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextRefreshingTest.java?rev=956353&r1=956352&r2=956353&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextRefreshingTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextRefreshingTest.java Sun Jun 20 13:06:46 2010
@@ -35,6 +35,7 @@ import org.apache.cayenne.unit.di.UnitTe
 import org.apache.cayenne.unit.di.server.DataChannelQueryInterceptor;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
+import org.hsqldb.Types;
 
 /**
  * Test suite covering possible scenarios of refreshing updated objects. This includes
@@ -130,7 +131,7 @@ public class DataContextRefreshingTest e
         assertNotNull(painting.getToArtist());
         assertEquals("artist2", painting.getToArtist().getArtistName());
 
-        assertEquals(1, tPainting.update().set("ARTIST_ID", null).execute());
+        assertEquals(1, tPainting.update().set("ARTIST_ID", null, Types.BIGINT).execute());
 
         // select without prefetch
         painting = (Painting) context
@@ -250,7 +251,7 @@ public class DataContextRefreshingTest e
         assertNotNull(painting.getToArtist());
         assertEquals("artist2", painting.getToArtist().getArtistName());
 
-        assertEquals(1, tPainting.update().set("ARTIST_ID", null).execute());
+        assertEquals(1, tPainting.update().set("ARTIST_ID", null, Types.BIGINT).execute());
 
         context.invalidateObjects(Collections.singletonList(painting));
         assertNull(painting.getToArtist());