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/31 02:22:51 UTC

svn commit: r1488066 - in /jena/Experimental/jena-jdbc: jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/ jena-jdbc-core/src/main/java/org/apache/jena/jdbc/statements/ jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/

Author: rvesse
Date: Fri May 31 00:22:51 2013
New Revision: 1488066

URL: http://svn.apache.org/r1488066
Log:
More stub work on improving setObject() support

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/statements/JenaPreparedStatement.java
    jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/TestTdbDiskResultSets.java
    jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/TestTdbMemResultSets.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=1488066&r1=1488065&r2=1488066&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 Fri May 31 00:22:51 2013
@@ -387,6 +387,8 @@ public abstract class JenaResultSet impl
                 throw new SQLException("Unable to marhsal a RDF Node to the declared column type " + jdbcType);
             case Types.BOOLEAN:
                 return JenaJdbcNodeUtils.toBoolean(n);
+            case Types.BIGINT:
+                return JenaJdbcNodeUtils.toLong(n);
             case Types.DATE:
                 return JenaJdbcNodeUtils.toDate(n);
             case Types.DECIMAL:

Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/statements/JenaPreparedStatement.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/statements/JenaPreparedStatement.java?rev=1488066&r1=1488065&r2=1488066&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/statements/JenaPreparedStatement.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/statements/JenaPreparedStatement.java Fri May 31 00:22:51 2013
@@ -39,12 +39,14 @@ import java.sql.SQLFeatureNotSupportedEx
 import java.sql.SQLXML;
 import java.sql.Time;
 import java.sql.Timestamp;
+import java.sql.Types;
 import java.util.Calendar;
 import java.util.TimeZone;
 
 import org.apache.jena.iri.IRI;
 import org.apache.jena.jdbc.connections.JenaConnection;
 import org.apache.jena.jdbc.statements.metadata.JenaParameterMetadata;
+import org.apache.jena.jdbc.utils.JenaJdbcNodeUtils;
 
 import com.hp.hpl.jena.datatypes.xsd.XSDDatatype;
 import com.hp.hpl.jena.graph.Node;
@@ -354,9 +356,85 @@ public abstract class JenaPreparedStatem
     }
 
     @Override
-    public void setObject(int parameterIndex, Object value, int arg2) throws SQLException {
-        // TODO: This should be supported
-        throw new SQLFeatureNotSupportedException();
+    public void setObject(int parameterIndex, Object value, int targetSqlType) throws SQLException {
+        switch (targetSqlType) {
+        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("The provided SQL Target Type cannot be translated into an appropriate RDF term type");
+        case Types.BIGINT:
+            if (value instanceof Long || value instanceof Integer || value instanceof Short || value instanceof Byte) {
+                this.setParameter(parameterIndex, NodeFactoryExtra.intToNode((Long)value));
+            } else if (value instanceof Node) {
+                long l = JenaJdbcNodeUtils.toLong((Node)value);
+                this.setParameter(parameterIndex, NodeFactoryExtra.intToNode(l));
+            } else {
+                throw new SQLException("The given value is not marshallable to the desired target type");
+            }
+            break;
+        case Types.BOOLEAN:
+            if (value instanceof Boolean) {
+                this.setParameter(parameterIndex, NodeFactory.createLiteral(Boolean.toString((Boolean)value), XSDDatatype.XSDboolean));
+            } else if (value instanceof Node) {
+                boolean b = JenaJdbcNodeUtils.toBoolean((Node)value);
+                this.setParameter(parameterIndex, NodeFactory.createLiteral(Boolean.toString((Boolean)value), XSDDatatype.XSDboolean));
+            } else {
+                throw new SQLException("The given value is not marshallable to the desired target type");
+            }
+            break;
+        case Types.DATE:
+            break;
+        case Types.DECIMAL:
+            break;
+        case Types.DOUBLE:
+            break;
+        case Types.FLOAT:
+            break;
+        case Types.INTEGER:
+            break;
+        case Types.JAVA_OBJECT:
+            if (value instanceof Node) {
+                this.setParameter(parameterIndex, (Node)value);
+            } else if (value instanceof RDFNode) {
+                this.setParameter(parameterIndex, ((RDFNode)value).asNode());
+            } else if (value instanceof String) {
+                this.setParameter(parameterIndex, NodeFactory.createLiteral((String)value));
+            } else if (value instanceof URL) {
+                this.setParameter(parameterIndex, NodeFactory.createURI(((URL)value).toString()));
+            } else 
+            break;
+        case Types.NVARCHAR:
+            this.setParameter(parameterIndex, NodeFactory.createLiteral(value.toString()));
+            break;
+        case Types.SMALLINT:
+            break;
+        case Types.TIME:
+            break;
+        case Types.TINYINT:
+            break;
+        default:
+            throw new SQLException("Cannot translate an unknown SQL Target Type into an appropriate RDF term type");
+        }
     }
 
     @Override

Modified: jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/TestTdbDiskResultSets.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/TestTdbDiskResultSets.java?rev=1488066&r1=1488065&r2=1488066&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/TestTdbDiskResultSets.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/TestTdbDiskResultSets.java Fri May 31 00:22:51 2013
@@ -54,6 +54,10 @@ public class TestTdbDiskResultSets exten
     
     @Override
     protected Dataset prepareDataset(Dataset ds) throws SQLException {
+        if (this.currDataset != null) {
+            this.currDataset.close();
+        }
+        
         Dataset tdb = TDBFactory.createDataset(tempDir.getRoot().getAbsolutePath());
         TestUtils.copyDataset(ds, tdb, true);
         this.currDataset = tdb;

Modified: jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/TestTdbMemResultSets.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/TestTdbMemResultSets.java?rev=1488066&r1=1488065&r2=1488066&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/TestTdbMemResultSets.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/results/TestTdbMemResultSets.java Fri May 31 00:22:51 2013
@@ -46,6 +46,10 @@ public class TestTdbMemResultSets extend
     
     @Override
     protected Dataset prepareDataset(Dataset ds) throws SQLException {
+        if (currDataset != null) {
+            currDataset.close();
+        }
+        
         Dataset tdb = TDBFactory.createDataset();
         TestUtils.copyDataset(ds, tdb, true);
         currDataset = tdb;