You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ev...@apache.org on 2009/12/10 11:47:59 UTC
svn commit: r889177 - in
/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src:
cayenne/java/org/apache/cayenne/access/jdbc/BindDirective.java
tests/java/org/apache/cayenne/access/jdbc/BindDirectiveTst.java
Author: evgeny
Date: Thu Dec 10 10:47:48 2009
New Revision: 889177
URL: http://svn.apache.org/viewvc?rev=889177&view=rev
Log:
CAY-1306 Binding Collection in Parameters for SQLTemplate is not working
* fixed and add test
Modified:
cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/jdbc/BindDirective.java
cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/access/jdbc/BindDirectiveTst.java
Modified: cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/jdbc/BindDirective.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/jdbc/BindDirective.java?rev=889177&r1=889176&r2=889177&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/jdbc/BindDirective.java (original)
+++ cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/jdbc/BindDirective.java Thu Dec 10 10:47:48 2009
@@ -89,9 +89,14 @@
int jdbcType = TypesMapping.NOT_DEFINED;
if (type != null) {
jdbcType = TypesMapping.getSqlTypeByName(type.toString());
- }
- else if (value != null) {
- jdbcType = TypesMapping.getSqlTypeByJava(value.getClass());
+ } else if (value != null) {
+ if (value instanceof Collection) {
+ // fixing CAY-1306. In 3.0 rendering is overridden
+ // binding collection, set type to any value that is not TypesMapping.NOT_DEFINED
+ jdbcType = Integer.MIN_VALUE; //for example min value.
+ } else {
+ jdbcType = TypesMapping.getSqlTypeByJava(value.getClass());
+ }
} else {
// value is null, set JDBC type to NULL
jdbcType = TypesMapping.getSqlTypeByName(TypesMapping.SQL_NULL);
Modified: cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/access/jdbc/BindDirectiveTst.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/access/jdbc/BindDirectiveTst.java?rev=889177&r1=889176&r2=889177&view=diff
==============================================================================
--- cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/access/jdbc/BindDirectiveTst.java (original)
+++ cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/access/jdbc/BindDirectiveTst.java Thu Dec 10 10:47:48 2009
@@ -19,6 +19,7 @@
package org.apache.cayenne.access.jdbc;
import java.sql.Connection;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -43,6 +44,27 @@
deleteTestData();
}
+ public void testBindingForCollection() throws Exception {
+ // insert 3 artists
+ Map parameters;
+ for (int i = 1; i < 4; i++) {
+ parameters = new HashMap();
+ parameters.put("id", new Long(i));
+ parameters.put("name", "Artist" + i);
+ performInsertForParameters(parameters, true, i);
+ }
+
+ // now select only with names: Artist1 and Artist3
+ List artistNames = new ArrayList();
+ artistNames.add("Artist1");
+ artistNames.add("Artist3");
+ String sql = "SELECT * FROM ARTIST WHERE ARTIST_NAME in (#bind($ARTISTNAMES))";
+ SQLTemplate query = new SQLTemplate(Artist.class, sql);
+ query.setParameters(Collections.singletonMap("ARTISTNAMES", artistNames));
+ List result = getDomain().createDataContext().performQuery(query);
+ assertEquals(2, result.size());
+ }
+
public void testBindForPassedNullParam() throws Exception {
Map parameters = new HashMap();
parameters.put("id", new Integer(1));
@@ -51,7 +73,7 @@
parameters.put("dob", null);
//without JDBC usage
- Map row = performInsertForParameters(parameters, false);
+ Map row = performInsertForParameters(parameters, false, 1);
assertEquals(parameters.get("id"), row.get("ARTIST_ID"));
assertEquals(parameters.get("name"), row.get("ARTIST_NAME"));
assertEquals(parameters.get("dob"), row.get("DATE_OF_BIRTH"));
@@ -66,7 +88,7 @@
parameters.put("dob", null);
//use JDBC
- Map row = performInsertForParameters(parameters, true);
+ Map row = performInsertForParameters(parameters, true, 1);
assertEquals(parameters.get("id"), row.get("ARTIST_ID"));
assertEquals(parameters.get("name"), row.get("ARTIST_NAME"));
assertEquals(parameters.get("dob"), row.get("DATE_OF_BIRTH"));
@@ -80,7 +102,7 @@
// not passing parameter parameters.put("dob", not passed!);
//without JDBC usage
- Map row = performInsertForParameters(parameters, false);
+ Map row = performInsertForParameters(parameters, false, 1);
assertEquals(parameters.get("id"), row.get("ARTIST_ID"));
assertEquals(parameters.get("name"), row.get("ARTIST_NAME"));
//parameter should be passed as null
@@ -94,7 +116,7 @@
// not passing parameter parameters.put("dob", not passed!);
//use JDBC
- Map row = performInsertForParameters(parameters, true);
+ Map row = performInsertForParameters(parameters, true, 1);
assertEquals(parameters.get("id"), row.get("ARTIST_ID"));
assertEquals(parameters.get("name"), row.get("ARTIST_NAME"));
//parameter should be passed as null
@@ -106,7 +128,7 @@
* Inserts row for given parameters
* @return inserted row
*/
- private Map performInsertForParameters(Map parameters, boolean useJDBCType) throws Exception {
+ private Map performInsertForParameters(Map parameters, boolean useJDBCType, int expectedRowCount) throws Exception {
String templateString;
if(useJDBCType){
templateString = "INSERT INTO ARTIST (ARTIST_ID, ARTIST_NAME, DATE_OF_BIRTH) "
@@ -143,7 +165,7 @@
getDomain().performQueries(Collections.singletonList(query), observer);
List data = observer.rowsForQuery(query);
- assertEquals(1, data.size());
+ assertEquals(expectedRowCount, data.size());
Map row = (Map) data.get(0);
return row;
}