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