You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by rv...@apache.org on 2013/05/30 22:03:37 UTC
svn commit: r1487992 - in /jena/Experimental/jena-jdbc:
jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/
jena-jdbc-core/src/test/java/org/apache/jena/jdbc/results/
jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/results/
jena-jdbc...
Author: rvesse
Date: Thu May 30 20:03:36 2013
New Revision: 1487992
URL: http://svn.apache.org/r1487992
Log:
Expand test coverage for use of getObject() on result sets, ensure that getObject() does return appropriately typed values
Modified:
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/JenaResultSet.java
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/MaterializedSelectResults.java
jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/results/AbstractResultSetTests.java
jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/results/AbstractMemResultSetTests.java
jena/Experimental/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResults.java
jena/Experimental/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithGraphUris.java
jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/AbstractTdbResultSetTests.java
Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/JenaResultSet.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/JenaResultSet.java?rev=1487992&r1=1487991&r2=1487992&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/JenaResultSet.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/JenaResultSet.java Thu May 30 20:03:36 2013
@@ -38,6 +38,7 @@ import java.sql.SQLXML;
import java.sql.Statement;
import java.sql.Time;
import java.sql.Timestamp;
+import java.sql.Types;
import java.util.Calendar;
import java.util.Map;
@@ -353,8 +354,64 @@ public abstract class JenaResultSet impl
this.setNull(true);
return null;
} else {
+ // Need to marshal to an appropriate type based on declared JDBC
+ // type of the column in order to comply with the JDBC semantics of
+ // the getObject() method
+ int jdbcType = this.getMetaData().getColumnType(this.findColumn(columnLabel));
this.setNull(false);
- return n;
+
+ switch (jdbcType) {
+ case Types.ARRAY:
+ case Types.BINARY:
+ case Types.BIT:
+ case Types.BLOB:
+ case Types.CHAR:
+ case Types.CLOB:
+ case Types.DATALINK:
+ case Types.DISTINCT:
+ case Types.LONGNVARCHAR:
+ case Types.LONGVARBINARY:
+ case Types.LONGVARCHAR:
+ case Types.NCHAR:
+ case Types.NCLOB:
+ case Types.NULL:
+ case Types.NUMERIC:
+ case Types.OTHER:
+ case Types.REAL:
+ case Types.REF:
+ case Types.ROWID:
+ case Types.SQLXML:
+ case Types.STRUCT:
+ case Types.VARBINARY:
+ case Types.VARCHAR:
+ throw new SQLException("Unable to marhsal a RDF Node to the declared column type " + jdbcType);
+ case Types.BOOLEAN:
+ return JenaJdbcNodeUtils.toBoolean(n);
+ case Types.DATE:
+ return JenaJdbcNodeUtils.toDate(n);
+ case Types.DECIMAL:
+ return JenaJdbcNodeUtils.toDecimal(n);
+ case Types.DOUBLE:
+ return JenaJdbcNodeUtils.toDouble(n);
+ case Types.FLOAT:
+ return JenaJdbcNodeUtils.toFloat(n);
+ case Types.INTEGER:
+ return JenaJdbcNodeUtils.toInt(n);
+ case Types.JAVA_OBJECT:
+ return n;
+ case Types.NVARCHAR:
+ return JenaJdbcNodeUtils.toString(n);
+ case Types.SMALLINT:
+ return JenaJdbcNodeUtils.toShort(n);
+ case Types.TIME:
+ return JenaJdbcNodeUtils.toTime(n);
+ case Types.TIMESTAMP:
+ return JenaJdbcNodeUtils.toTimestamp(n);
+ case Types.TINYINT:
+ return JenaJdbcNodeUtils.toByte(n);
+ default:
+ throw new SQLException("Unable to marshal a RDF Node to the declared unknown column type " + jdbcType);
+ }
}
}
Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/MaterializedSelectResults.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/MaterializedSelectResults.java?rev=1487992&r1=1487991&r2=1487992&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/MaterializedSelectResults.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/MaterializedSelectResults.java Thu May 30 20:03:36 2013
@@ -68,6 +68,7 @@ public class MaterializedSelectResults e
this.innerResults = results;
this.columns = new ArrayList<String>(this.innerResults.getResultVars());
this.metadata = new SelectResultsMetadata(this, this.innerResults);
+ this.innerResults.reset();
}
@Override
Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/results/AbstractResultSetTests.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/results/AbstractResultSetTests.java?rev=1487992&r1=1487991&r2=1487992&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/results/AbstractResultSetTests.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/results/AbstractResultSetTests.java Thu May 30 20:03:36 2013
@@ -19,10 +19,12 @@
package org.apache.jena.jdbc.results;
import java.math.BigDecimal;
+import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
+import org.apache.jena.jdbc.JdbcCompatibility;
import org.apache.jena.jdbc.results.metadata.AskResultsMetadata;
import org.apache.jena.jdbc.results.metadata.TripleResultsMetadata;
import org.apache.log4j.BasicConfigurator;
@@ -46,7 +48,9 @@ import com.hp.hpl.jena.rdf.model.Stateme
import com.hp.hpl.jena.vocabulary.XSD;
/**
- * Abstract tests for Jena JDBC {@link ResultSet} implementations
+ * Abstract tests for Jena JDBC {@link ResultSet} implementations, these tests
+ * assume that implementations use the {@link JdbcCompatibility#HIGH}
+ * compatibility level
*
*/
public abstract class AbstractResultSetTests {
@@ -196,6 +200,88 @@ public abstract class AbstractResultSetT
}
/**
+ * Tests that SELECT result values are appropriately marshalled when using
+ * getObject()
+ *
+ * @throws SQLException
+ */
+ @Test
+ public void test_results_select_objects_01() throws SQLException {
+ ResultSet rset = this.createResults(ds, "SELECT (STR(?o) AS ?str) { ?s ?p ?o . FILTER(!ISBLANK(?o)) }");
+ Assert.assertNotNull(rset);
+ Assert.assertFalse(rset.isClosed());
+ Assert.assertTrue(rset.isBeforeFirst());
+ Assert.assertFalse(rset.isLast());
+
+ // Check all rows allow us to obtain appropriately typed values
+ while (rset.next()) {
+ Object obj = rset.getObject("str");
+ Assert.assertNotNull(obj);
+ Assert.assertFalse(rset.wasNull());
+ Assert.assertTrue(obj instanceof String);
+ }
+
+ Assert.assertTrue(rset.isAfterLast());
+ rset.close();
+ Assert.assertTrue(rset.isClosed());
+ }
+
+ /**
+ * Tests that SELECT result values are appropriately marshalled when using
+ * getObject()
+ *
+ * @throws SQLException
+ */
+ @Test
+ public void test_results_select_objects_02() throws SQLException {
+ ResultSet rset = this.createResults(ds, "SELECT ?o { ?s ?p ?o . FILTER(ISNUMERIC(?o)) }");
+ Assert.assertNotNull(rset);
+ Assert.assertFalse(rset.isClosed());
+ Assert.assertTrue(rset.isBeforeFirst());
+ Assert.assertFalse(rset.isLast());
+
+ // Check all rows allow us to obtain appropriately typed values
+ while (rset.next()) {
+ Object obj = rset.getObject("o");
+ Assert.assertNotNull(obj);
+ Assert.assertFalse(rset.wasNull());
+ Assert.assertTrue(obj instanceof Long || obj instanceof Integer || obj instanceof Short || obj instanceof Byte
+ || obj instanceof BigDecimal || obj instanceof Double || obj instanceof Float);
+ }
+
+ Assert.assertTrue(rset.isAfterLast());
+ rset.close();
+ Assert.assertTrue(rset.isClosed());
+ }
+
+ /**
+ * Tests that SELECT result values are appropriately marshalled when using getObject()
+ *
+ * @throws SQLException
+ */
+ @Test
+ public void test_results_select_objects_03() throws SQLException {
+ ResultSet rset = this.createResults(ds, "SELECT ?o { ?s ?p ?o . FILTER(DATATYPE(?o) = <" + XSD.dateTime.toString()
+ + ">) }");
+ Assert.assertNotNull(rset);
+ Assert.assertFalse(rset.isClosed());
+ Assert.assertTrue(rset.isBeforeFirst());
+ Assert.assertFalse(rset.isLast());
+
+ // Check all rows allow us to marshal strings OK
+ while (rset.next()) {
+ Object obj = rset.getObject("o");
+ Assert.assertNotNull(obj);
+ Assert.assertFalse(rset.wasNull());
+ Assert.assertTrue(obj instanceof Date);
+ }
+
+ Assert.assertTrue(rset.isAfterLast());
+ rset.close();
+ Assert.assertTrue(rset.isClosed());
+ }
+
+ /**
* Tests that SELECT result values can be marshalled to strings OK
*
* @throws SQLException
Modified: jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/results/AbstractMemResultSetTests.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/results/AbstractMemResultSetTests.java?rev=1487992&r1=1487991&r2=1487992&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/results/AbstractMemResultSetTests.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/results/AbstractMemResultSetTests.java Thu May 30 20:03:36 2013
@@ -22,6 +22,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
+import org.apache.jena.jdbc.JdbcCompatibility;
import org.apache.jena.jdbc.mem.connections.DebugMemConnection;
import org.apache.jena.jdbc.results.AbstractResultSetTests;
import org.junit.AfterClass;
@@ -44,6 +45,7 @@ public abstract class AbstractMemResultS
@BeforeClass
public static void setup() throws SQLException {
connection = new DebugMemConnection();
+ connection.setJdbcCompatibilityLevel(JdbcCompatibility.HIGH);
}
/**
Modified: jena/Experimental/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResults.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResults.java?rev=1487992&r1=1487991&r2=1487992&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResults.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResults.java Thu May 30 20:03:36 2013
@@ -52,6 +52,7 @@ public class TestRemoteEndpointResults e
ServerTest.allocServer();
connection = new RemoteEndpointConnection(BaseServerTest.serviceQuery, BaseServerTest.serviceUpdate, JenaConnection.DEFAULT_HOLDABILITY, JdbcCompatibility.DEFAULT);
+ connection.setJdbcCompatibilityLevel(JdbcCompatibility.HIGH);
}
/**
Modified: jena/Experimental/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithGraphUris.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithGraphUris.java?rev=1487992&r1=1487991&r2=1487992&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithGraphUris.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithGraphUris.java Thu May 30 20:03:36 2013
@@ -62,6 +62,7 @@ public class TestRemoteEndpointResultsWi
List<String> defaultGraphUris = new ArrayList<String>();
defaultGraphUris.add(DEFAULT_GRAPH_URI);
connection = new RemoteEndpointConnection(BaseServerTest.serviceQuery, BaseServerTest.serviceUpdate, defaultGraphUris, null, null, null, null, null, JenaConnection.DEFAULT_HOLDABILITY, JdbcCompatibility.DEFAULT);
+ connection.setJdbcCompatibilityLevel(JdbcCompatibility.HIGH);
}
/**
Modified: jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/AbstractTdbResultSetTests.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/AbstractTdbResultSetTests.java?rev=1487992&r1=1487991&r2=1487992&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/AbstractTdbResultSetTests.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/AbstractTdbResultSetTests.java Thu May 30 20:03:36 2013
@@ -22,6 +22,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
+import org.apache.jena.jdbc.JdbcCompatibility;
import org.apache.jena.jdbc.results.AbstractResultSetTests;
import org.apache.jena.jdbc.tdb.connections.DebugTdbConnection;
import org.junit.AfterClass;
@@ -46,6 +47,7 @@ public abstract class AbstractTdbResultS
public static void setup() throws SQLException {
connection = new DebugTdbConnection();
connection.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
+ connection.setJdbcCompatibilityLevel(JdbcCompatibility.HIGH);
}
/**