Author: tomdz
Date: Wed Nov 5 12:28:43 2008
New Revision: 711686
URL: http://svn.apache.org/viewvc?rev=711686&view=rev
Log:
Fix and test for DDLUTILS-227: NullPointerException in
ModelBasedResultSetIterator
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/ModelBasedResultSetIterator.java
db/ddlutils/trunk/src/test/java/org/apache/ddlutils/io/TestMisc.java
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/ModelBasedResultSetIterator.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/ModelBasedResultSetIterator.java?rev=711686&r1=711685&r2=711686&view=diff
==============================================================================
---
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/ModelBasedResultSetIterator.java
(original)
+++
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/ModelBasedResultSetIterator.java
Wed Nov 5 12:28:43 2008
@@ -135,7 +135,7 @@
// the JDBC driver gave us enough meta data info
table = model.findTable(tableOfColumn, _caseSensitive);
}
- else
+ if (table == null)
{
// not enough info in the meta data of the result set, lets
try the
// user-supplied query hints
Modified: db/ddlutils/trunk/src/test/java/org/apache/ddlutils/io/TestMisc.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/java/org/apache/ddlutils/io/TestMisc.java?rev=711686&r1=711685&r2=711686&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/java/org/apache/ddlutils/io/TestMisc.java
(original)
+++ db/ddlutils/trunk/src/test/java/org/apache/ddlutils/io/TestMisc.java Wed
Nov 5 12:28:43 2008
@@ -34,7 +34,12 @@
import org.apache.commons.beanutils.DynaBean;
import org.apache.ddlutils.TestAgainstLiveDatabaseBase;
import org.apache.ddlutils.model.Database;
+import org.apache.ddlutils.model.Table;
+import org.apache.ddlutils.platform.derby.DerbyPlatform;
import org.apache.ddlutils.platform.hsqldb.HsqlDbPlatform;
+import org.apache.ddlutils.platform.mysql.MySql50Platform;
+import org.apache.ddlutils.platform.mysql.MySqlPlatform;
+import org.apache.ddlutils.platform.postgresql.PostgreSqlPlatform;
import org.apache.ddlutils.platform.sybase.SybasePlatform;
import org.dom4j.Document;
import org.dom4j.Element;
@@ -1215,4 +1220,72 @@
assertEquals(new Integer(2), beans2.get(0), "pk1");
assertEquals((Object)"bar", beans2.get(0), "pk2");
}
+
+ /**
+ * Test for DDLUTILS-227.
+ */
+ public void testDdlUtils227() throws Exception
+ {
+ final String modelXml =
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+ "<database xmlns='" + DatabaseIO.DDLUTILS_NAMESPACE + "'
name='roundtriptest'>\n"+
+ " <table name='Roundtrip'>\n"+
+ " <column name='Pk' type='INTEGER' primaryKey='true'
required='true'/>\n"+
+ " <column name='Avalue' type='VARCHAR'/>\n"+
+ " </table>\n"+
+ "</database>";
+
+ createDatabase(modelXml);
+
+ Database readModel = readModelFromDatabase("roundtriptest");
+
+ assertEquals(getAdjustedModel(),
+ readModel);
+
+ insertRow("Roundtrip", new Object[] { new Integer(1), "foo" });
+
+ List beans = getRows("Roundtrip");
+
+ assertEquals(1, beans.size());
+ assertEquals(new Integer(1), beans.get(0), "Pk");
+ assertEquals((Object)"foo", beans.get(0), "Avalue");
+
+ Table table = getModel().findTable("Roundtrip",
getPlatform().isDelimitedIdentifierModeOn());
+ StringBuffer query = new StringBuffer();
+
+ query.append("SELECT * FROM (SELECT * FROM ");
+ if (getPlatform().isDelimitedIdentifierModeOn())
+ {
+ query.append(getPlatformInfo().getDelimiterToken());
+ }
+ query.append(table.getName());
+ if (getPlatform().isDelimitedIdentifierModeOn())
+ {
+ query.append(getPlatformInfo().getDelimiterToken());
+ }
+ query.append(")");
+ // Some JDBC drivers do not allow us to perform the query without an
explicit alias
+ if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+ MySql50Platform.DATABASENAME.equals(getPlatform().getName()) ||
+ PostgreSqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+ DerbyPlatform.DATABASENAME.equals(getPlatform().getName()))
+ {
+ query.append(" AS ");
+ if (getPlatform().isDelimitedIdentifierModeOn())
+ {
+ query.append(getPlatformInfo().getDelimiterToken());
+ }
+ query.append(table.getName());
+ if (getPlatform().isDelimitedIdentifierModeOn())
+ {
+ query.append(getPlatformInfo().getDelimiterToken());
+ }
+ }
+
+ beans = getPlatform().fetch(getModel(), query.toString(), new Table[]
{ table });
+
+ assertEquals(1, beans.size());
+ assertEquals(new Integer(1), beans.get(0), "Pk");
+ assertEquals((Object)"foo", beans.get(0), "Avalue");
+ }
}