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 00:52:39 UTC

svn commit: r1488042 - in /jena/Experimental/jena-jdbc/jena-jdbc-core/src: main/java/org/apache/jena/jdbc/statements/JenaPreparedStatement.java test/java/org/apache/jena/jdbc/connections/AbstractJenaConnectionTests.java

Author: rvesse
Date: Thu May 30 22:52:38 2013
New Revision: 1488042

URL: http://svn.apache.org/r1488042
Log:
Start making some improvements to setObject() support for prepared statements

Modified:
    jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/statements/JenaPreparedStatement.java
    jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/connections/AbstractJenaConnectionTests.java

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=1488042&r1=1488041&r2=1488042&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 Thu May 30 22:52:38 2013
@@ -21,6 +21,7 @@ package org.apache.jena.jdbc.statements;
 import java.io.InputStream;
 import java.io.Reader;
 import java.math.BigDecimal;
+import java.net.URI;
 import java.net.URL;
 import java.sql.Array;
 import java.sql.Blob;
@@ -41,6 +42,7 @@ import java.sql.Timestamp;
 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;
 
@@ -308,13 +310,48 @@ public abstract class JenaPreparedStatem
     public void setObject(int parameterIndex, Object value) throws SQLException {
         if (value instanceof Node) {
             this.setParameter(parameterIndex, (Node) value);
+        } else if (value instanceof String) {
+            this.setParameter(parameterIndex, NodeFactory.createLiteral((String)value));
+        } else if (value instanceof Boolean) {
+            this.setParameter(parameterIndex, NodeFactory.createLiteral(Boolean.toString((Boolean)value), XSDDatatype.XSDboolean));
+        } else if (value instanceof Long) {
+            this.setParameter(parameterIndex, NodeFactoryExtra.intToNode((Long)value));
+        } else if (value instanceof Integer) {
+            this.setParameter(parameterIndex, NodeFactoryExtra.intToNode((Integer)value));
+        } else if (value instanceof Short) {
+            this.setParameter(parameterIndex, NodeFactory.createLiteral(Short.toString((Short)value), XSDDatatype.XSDshort));
+        } else if (value instanceof Byte) {
+            this.setParameter(parameterIndex, NodeFactory.createLiteral(Byte.toString((Byte)value), XSDDatatype.XSDbyte));
+        } else if (value instanceof BigDecimal) {
+            this.setParameter(parameterIndex, NodeFactory.createLiteral(((BigDecimal)value).toPlainString(), XSDDatatype.XSDdecimal));
+        } else if (value instanceof Double) {
+            this.setParameter(parameterIndex, NodeFactoryExtra.doubleToNode((Double)value));
+        } else if (value instanceof Float) {
+            this.setParameter(parameterIndex, NodeFactoryExtra.floatToNode((Float)value));
+        } else if (value instanceof Date) {
+            Calendar c = Calendar.getInstance();
+            c.setTimeInMillis(((Date)value).getTime());
+            this.setParameter(parameterIndex, NodeFactoryExtra.dateToNode(c));
+        } else if (value instanceof Time) {
+            Calendar c = Calendar.getInstance();
+            c.setTimeInMillis(((Time)value).getTime());
+            this.setParameter(parameterIndex, NodeFactoryExtra.timeToNode(c));
+        } else if (value instanceof Calendar) {
+            this.setParameter(parameterIndex, NodeFactoryExtra.dateTimeToNode((Calendar)value));
+        } else if (value instanceof URL) {
+            this.setParameter(parameterIndex, NodeFactory.createURI(value.toString()));
+        } else if (value instanceof URI) {
+            this.setParameter(parameterIndex, NodeFactory.createURI(value.toString()));
+        } else if (value instanceof IRI) {
+            this.setParameter(parameterIndex, NodeFactory.createURI(value.toString()));
         } else {
-            throw new SQLException("Calls to setObject() must pass an object of type Node");
+            throw new SQLException("setObject() received a value that could not be converted to a RDF node for use in a SPARQL query");
         }
     }
 
     @Override
     public void setObject(int parameterIndex, Object value, int arg2) throws SQLException {
+        // TODO: This should be supported
         throw new SQLFeatureNotSupportedException();
     }
 
@@ -380,4 +417,12 @@ public abstract class JenaPreparedStatem
     public void setUnicodeStream(int parameterIndex, InputStream value, int arg2) throws SQLException {
         throw new SQLFeatureNotSupportedException();
     }
+    
+    /**
+     * Gets a copy of the underlying {@link ParameterizedSparqlString} used to implement this prepared statement
+     * @return Copy of the underlying string
+     */
+    public ParameterizedSparqlString getParameterizedString() {
+        return this.sparqlStr.copy();
+    }
 }

Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/connections/AbstractJenaConnectionTests.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/connections/AbstractJenaConnectionTests.java?rev=1488042&r1=1488041&r2=1488042&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/connections/AbstractJenaConnectionTests.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/connections/AbstractJenaConnectionTests.java Thu May 30 22:52:38 2013
@@ -17,6 +17,8 @@
  */
 package org.apache.jena.jdbc.connections;
 
+import java.math.BigDecimal;
+import java.math.MathContext;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.sql.Connection;
@@ -32,6 +34,7 @@ import org.apache.jena.jdbc.JdbcCompatib
 import org.apache.jena.jdbc.connections.JenaConnection;
 import org.apache.jena.jdbc.results.metadata.AskResultsMetadata;
 import org.apache.jena.jdbc.results.metadata.TripleResultsMetadata;
+import org.apache.jena.jdbc.statements.JenaPreparedStatement;
 import org.apache.jena.jdbc.utils.TestUtils;
 import org.apache.log4j.BasicConfigurator;
 import org.apache.log4j.Level;
@@ -40,11 +43,13 @@ import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.Test;
 
+import com.hp.hpl.jena.datatypes.xsd.XSDDatatype;
 import com.hp.hpl.jena.graph.Node;
 import com.hp.hpl.jena.graph.NodeFactory;
 import com.hp.hpl.jena.query.ARQ;
 import com.hp.hpl.jena.query.Dataset;
 import com.hp.hpl.jena.query.DatasetFactory;
+import com.hp.hpl.jena.query.ParameterizedSparqlString;
 import com.hp.hpl.jena.sparql.core.Quad;
 
 /**
@@ -497,6 +502,105 @@ public abstract class AbstractJenaConnec
         conn.close();
         Assert.assertTrue(conn.isClosed());
     }
+    
+    /**
+     * Tests that the various set methods of {@link JenaPreparedStatement} function correctly
+     * @throws SQLException
+     */
+    @Test
+    public void connection_prepared_statement_setters_01() throws SQLException {
+        JenaConnection conn = this.getConnection();
+        JenaPreparedStatement stmt = (JenaPreparedStatement) conn.prepareStatement("SELECT * WHERE { ?s ?p ? }");
+        
+        stmt.setObject(1, "value");
+        ParameterizedSparqlString pss = stmt.getParameterizedString();
+        Assert.assertTrue(pss.toString().contains("\"value\""));
+    }
+    
+    /**
+     * Tests that the various set methods of {@link JenaPreparedStatement} function correctly
+     * @throws SQLException
+     */
+    @Test
+    public void connection_prepared_statement_setters_02() throws SQLException {
+        JenaConnection conn = this.getConnection();
+        JenaPreparedStatement stmt = (JenaPreparedStatement) conn.prepareStatement("SELECT * WHERE { ?s ?p ? }");
+        
+        stmt.setObject(1, 123);
+        ParameterizedSparqlString pss = stmt.getParameterizedString();
+        Assert.assertTrue(pss.toString().contains("123"));
+    }
+    
+    /**
+     * Tests that the various set methods of {@link JenaPreparedStatement} function correctly
+     * @throws SQLException
+     */
+    @Test
+    public void connection_prepared_statement_setters_03() throws SQLException {
+        JenaConnection conn = this.getConnection();
+        JenaPreparedStatement stmt = (JenaPreparedStatement) conn.prepareStatement("SELECT * WHERE { ?s ?p ? }");
+        
+        stmt.setObject(1, 123l);
+        ParameterizedSparqlString pss = stmt.getParameterizedString();
+        Assert.assertTrue(pss.toString().contains("123"));
+    }
+    
+    /**
+     * Tests that the various set methods of {@link JenaPreparedStatement} function correctly
+     * @throws SQLException
+     */
+    @Test
+    public void connection_prepared_statement_setters_04() throws SQLException {
+        JenaConnection conn = this.getConnection();
+        JenaPreparedStatement stmt = (JenaPreparedStatement) conn.prepareStatement("SELECT * WHERE { ?s ?p ? }");
+        
+        stmt.setObject(1, (byte)123);
+        ParameterizedSparqlString pss = stmt.getParameterizedString();
+        Assert.assertTrue(pss.toString().contains("123"));
+        Assert.assertTrue(pss.toString().contains(XSDDatatype.XSDbyte.getURI()));
+    }
+    
+    /**
+     * Tests that the various set methods of {@link JenaPreparedStatement} function correctly
+     * @throws SQLException
+     */
+    @Test
+    public void connection_prepared_statement_setters_05() throws SQLException {
+        JenaConnection conn = this.getConnection();
+        JenaPreparedStatement stmt = (JenaPreparedStatement) conn.prepareStatement("SELECT * WHERE { ?s ?p ? }");
+        
+        stmt.setObject(1, BigDecimal.valueOf(1234, 1));
+        ParameterizedSparqlString pss = stmt.getParameterizedString();
+        Assert.assertTrue(pss.toString().contains("123.4"));
+    }
+        
+    /**
+     * Tests that the various set methods of {@link JenaPreparedStatement} function correctly
+     * @throws SQLException
+     */
+    @Test
+    public void connection_prepared_statement_setters_06() throws SQLException {
+        JenaConnection conn = this.getConnection();
+        JenaPreparedStatement stmt = (JenaPreparedStatement) conn.prepareStatement("SELECT * WHERE { ?s ?p ? }");
+        
+        stmt.setObject(1, (short)123);
+        ParameterizedSparqlString pss = stmt.getParameterizedString();
+        Assert.assertTrue(pss.toString().contains("123"));
+    }
+    
+    /**
+     * Tests that the various set methods of {@link JenaPreparedStatement} function correctly
+     * @throws SQLException
+     */
+    @Test
+    public void connection_prepared_statement_setters_07() throws SQLException {
+        JenaConnection conn = this.getConnection();
+        JenaPreparedStatement stmt = (JenaPreparedStatement) conn.prepareStatement("SELECT * WHERE { ?s ?p ? }");
+        
+        stmt.setObject(1, true);
+        ParameterizedSparqlString pss = stmt.getParameterizedString();
+        Assert.assertTrue(pss.toString().contains("true"));
+    }
 
     /**
      * Runs a SELECT query on a non-empty database with max rows set and checks