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/04/01 23:30:58 UTC
svn commit: r1463305 - in /jena/Experimental/jena-jdbc/jena-jdbc-core/src:
main/java/org/apache/jena/jdbc/results/metadata/
test/java/org/apache/jena/jdbc/
Author: rvesse
Date: Mon Apr 1 21:30:58 2013
New Revision: 1463305
URL: http://svn.apache.org/r1463305
Log:
Improve results metadata for ASK results and expand connection tests slightly to cover CONSTRUCT queries
Modified:
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/AskResultsMetadata.java
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/JenaJdbcResultsMetadata.java
jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/AbstractJenaJdbcConnectionTests.java
Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/AskResultsMetadata.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/AskResultsMetadata.java?rev=1463305&r1=1463304&r2=1463305&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/AskResultsMetadata.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/AskResultsMetadata.java Mon Apr 1 21:30:58 2013
@@ -50,10 +50,10 @@ public class AskResultsMetadata extends
if (column == 1) return Types.BOOLEAN;
throw new SQLException("Column Index is out of bounds");
}
-
+
@Override
public String getColumnTypeName(int column) throws SQLException {
- if (column == 1) return "boolean";
+ if (column == 1) return Boolean.class.getCanonicalName();
throw new SQLException("Column Index is out of bounds");
}
@@ -68,4 +68,15 @@ public class AskResultsMetadata extends
return false;
}
+ @Override
+ public String getColumnClassName(int column) throws SQLException {
+ return getColumnTypeName(column);
+ }
+
+ @Override
+ public int getColumnDisplaySize(int column) throws SQLException {
+ if (column == 1) return 5;
+ throw new SQLException("Column Index is out of bounds");
+ }
+
}
Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/JenaJdbcResultsMetadata.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/JenaJdbcResultsMetadata.java?rev=1463305&r1=1463304&r2=1463305&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/JenaJdbcResultsMetadata.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/JenaJdbcResultsMetadata.java Mon Apr 1 21:30:58 2013
@@ -23,6 +23,8 @@ import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.sql.Types;
+import com.hp.hpl.jena.graph.Node;
+
/**
* Abstract implementation of result set metadata for Jena JDBC result sets
*
@@ -32,7 +34,7 @@ public abstract class JenaJdbcResultsMet
/**
* Constant for the type name reported for Jena JDBC columns
*/
- public static final String COLUMN_TYPE_NAME = "com.hp.hpl.jena.graph.Node";
+ public static final String COLUMN_TYPE_NAME = Node.class.getCanonicalName();
public boolean isWrapperFor(Class<?> iface) throws SQLException {
throw new SQLFeatureNotSupportedException();
Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/AbstractJenaJdbcConnectionTests.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/AbstractJenaJdbcConnectionTests.java?rev=1463305&r1=1463304&r2=1463305&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/AbstractJenaJdbcConnectionTests.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/AbstractJenaJdbcConnectionTests.java Mon Apr 1 21:30:58 2013
@@ -18,39 +18,61 @@
package org.apache.jena.jdbc;
import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
+import java.sql.Types;
+import org.apache.jena.jdbc.results.TripleIteratorResults;
+import org.apache.log4j.BasicConfigurator;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
import org.junit.Assert;
import org.junit.Test;
+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.sparql.core.Quad;
/**
* Abstract tests for {@link JenaJdbcConnection} implementations
- *
+ *
*/
public abstract class AbstractJenaJdbcConnectionTests {
+ static {
+ // Init Log4j
+ BasicConfigurator.configure();
+ Logger.getRootLogger().setLevel(Level.INFO);
+
+ // Init ARQ
+ ARQ.init();
+ }
+
/**
- * Method which derived test classes must implement to provide a connection to an empty database for testing
+ * Method which derived test classes must implement to provide a connection
+ * to an empty database for testing
+ *
* @return Connection
- * @throws SQLException
+ * @throws SQLException
*/
protected abstract JenaJdbcConnection getConnection() throws SQLException;
/**
- * Method which derived test classes must implement to provide a connection to a database constructed from the given dataset for testing
+ * Method which derived test classes must implement to provide a connection
+ * to a database constructed from the given dataset for testing
+ *
* @return Connection
* @throws SQLException
*/
protected abstract JenaJdbcConnection getConnection(Dataset ds) throws SQLException;
-
+
/**
* Create and close a connection to an empty database
+ *
* @throws SQLException
*/
@Test
@@ -60,9 +82,10 @@ public abstract class AbstractJenaJdbcCo
conn.close();
Assert.assertTrue(conn.isClosed());
}
-
+
/**
* Create and close a connection to an explicitly provided empty database
+ *
* @throws SQLException
*/
@Test
@@ -72,9 +95,10 @@ public abstract class AbstractJenaJdbcCo
conn.close();
Assert.assertTrue(conn.isClosed());
}
-
+
/**
* Retrieve and close a statement
+ *
* @throws SQLException
*/
@Test
@@ -88,22 +112,29 @@ public abstract class AbstractJenaJdbcCo
conn.close();
Assert.assertTrue(conn.isClosed());
}
-
+
/**
- * Runs a SELECT query on an empty database and checks it returns empty results
+ * Runs a SELECT query on an empty database and checks it returns empty
+ * results
+ *
* @throws SQLException
*/
@Test
- public void connection_statement_query_01() throws SQLException {
+ public void connection_statement_query_select_01() throws SQLException {
JenaJdbcConnection conn = this.getConnection();
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT * WHERE { ?s ?p ?o }");
+
+ // Check result set metadata
+ checkSelectMetadata(rset, 3);
+
+ // Check result set
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
Assert.assertFalse(rset.next());
Assert.assertTrue(rset.isAfterLast());
- Assert.assertFalse(rset.isClosed());
-
+ Assert.assertFalse(stmt.isClosed());
+
// Close things
rset.close();
Assert.assertTrue(rset.isClosed());
@@ -112,34 +143,41 @@ public abstract class AbstractJenaJdbcCo
conn.close();
Assert.assertTrue(conn.isClosed());
}
-
+
/**
- * Runs a SELECT query on a non-empty database and checks it returns empty results
+ * Runs a SELECT query on a non-empty database and checks it returns
+ * non-empty results
+ *
* @throws SQLException
*/
@Test
- public void connection_statement_query_02() throws SQLException {
+ public void connection_statement_query_select_02() throws SQLException {
// Prepare a dataset
Dataset ds = DatasetFactory.createMem();
- ds.asDatasetGraph().add(new Quad(NodeFactory.createURI("http://graph"), NodeFactory.createURI("http://subject"), NodeFactory.createURI("http://predicate"), NodeFactory.createURI("http://object")));
-
+ ds.asDatasetGraph().add(
+ new Quad(NodeFactory.createURI("http://graph"), NodeFactory.createURI("http://subject"), NodeFactory
+ .createURI("http://predicate"), NodeFactory.createURI("http://object")));
+
// Work with the connection
JenaJdbcConnection conn = this.getConnection(ds);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT * WHERE { GRAPH ?g { ?s ?p ?o } }");
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
-
+
+ // Check result set metadata
+ checkSelectMetadata(rset, 4);
+
// Should have a row
Assert.assertTrue(rset.next());
Assert.assertTrue(rset.isFirst());
Assert.assertEquals(1, rset.getRow());
-
+
// Should be no further rows
Assert.assertFalse(rset.next());
Assert.assertTrue(rset.isAfterLast());
Assert.assertFalse(rset.isClosed());
-
+
// Close things
rset.close();
Assert.assertTrue(rset.isClosed());
@@ -150,22 +188,81 @@ public abstract class AbstractJenaJdbcCo
}
/**
+ * Runs a SELECT query on a non-empty database and checks it returns
+ * non-empty results
+ *
+ * @throws SQLException
+ */
+ @Test
+ public void connection_statement_query_select_03() throws SQLException {
+ // Prepare a dataset
+ Dataset ds = DatasetFactory.createMem();
+ ds.asDatasetGraph().add(
+ new Quad(NodeFactory.createURI("http://graph"), NodeFactory.createURI("http://subject"), NodeFactory
+ .createURI("http://predicate"), NodeFactory.createURI("http://object")));
+
+ // Work with the connection
+ JenaJdbcConnection conn = this.getConnection(ds);
+ Statement stmt = conn.createStatement();
+ ResultSet rset = stmt.executeQuery("SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o } }");
+ Assert.assertFalse(rset.isClosed());
+ Assert.assertTrue(rset.isBeforeFirst());
+
+ // Check result set metadata
+ checkSelectMetadata(rset, 1);
+
+ // Should have a row
+ Assert.assertTrue(rset.next());
+ Assert.assertTrue(rset.isFirst());
+ Assert.assertEquals(1, rset.getRow());
+
+ // Should be no further rows
+ Assert.assertFalse(rset.next());
+ Assert.assertTrue(rset.isAfterLast());
+ Assert.assertFalse(rset.isClosed());
+
+ // Close things
+ rset.close();
+ Assert.assertTrue(rset.isClosed());
+ stmt.close();
+ Assert.assertTrue(stmt.isClosed());
+ conn.close();
+ Assert.assertTrue(conn.isClosed());
+ }
+
+ protected void checkSelectMetadata(ResultSet results, int numColumns) throws SQLException {
+ ResultSetMetaData metadata = results.getMetaData();
+ Assert.assertEquals(numColumns, metadata.getColumnCount());
+ for (int i = 1; i <= numColumns; i++) {
+ Assert.assertEquals(Node.class.getCanonicalName(), metadata.getColumnClassName(i));
+ Assert.assertEquals(Node.class.getCanonicalName(), metadata.getColumnTypeName(i));
+ Assert.assertEquals(Types.JAVA_OBJECT, metadata.getColumnType(i));
+ }
+ }
+
+ /**
* Runs an ASK query on an empty database and checks it returns true
+ *
* @throws SQLException
*/
@Test
- public void connection_statement_query_03() throws SQLException {
+ public void connection_statement_query_ask_01() throws SQLException {
JenaJdbcConnection conn = this.getConnection();
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("ASK WHERE { }");
+
+ // Check result set metadata
+ checkAskMetadata(rset);
+
+ // Check result set
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
Assert.assertTrue(rset.next());
Assert.assertTrue(rset.getBoolean(1));
-
+
Assert.assertFalse(rset.next());
Assert.assertTrue(rset.isAfterLast());
-
+
// Close things
rset.close();
Assert.assertTrue(rset.isClosed());
@@ -174,4 +271,94 @@ public abstract class AbstractJenaJdbcCo
conn.close();
Assert.assertTrue(conn.isClosed());
}
+
+ protected void checkAskMetadata(ResultSet results) throws SQLException {
+ ResultSetMetaData metadata = results.getMetaData();
+ Assert.assertEquals(1, metadata.getColumnCount());
+ Assert.assertEquals(Boolean.class.getCanonicalName(), metadata.getColumnClassName(1));
+ Assert.assertEquals(Boolean.class.getCanonicalName(), metadata.getColumnTypeName(1));
+ Assert.assertEquals(Types.BOOLEAN, metadata.getColumnType(1));
+ }
+
+ /**
+ * Runs a CONSTRUCT query on an empty database and checks it returns empty
+ * results
+ *
+ * @throws SQLException
+ */
+ @Test
+ public void connection_statement_query_construct_01() throws SQLException {
+ JenaJdbcConnection conn = this.getConnection();
+ Statement stmt = conn.createStatement();
+ ResultSet rset = stmt.executeQuery("CONSTRUCT WHERE { ?s ?p ?o }");
+
+ // Check result set metadata
+ checkConstructMetadata(rset);
+
+ // Check result set
+ Assert.assertFalse(rset.isClosed());
+ Assert.assertTrue(rset.isBeforeFirst());
+ Assert.assertFalse(rset.next());
+ Assert.assertTrue(rset.isAfterLast());
+ Assert.assertFalse(rset.isClosed());
+
+ // Close things
+ rset.close();
+ Assert.assertTrue(rset.isClosed());
+ stmt.close();
+ Assert.assertTrue(stmt.isClosed());
+ conn.close();
+ Assert.assertTrue(conn.isClosed());
+ }
+
+ /**
+ * Runs a CONSTRUCT query on a non-empty database and checks it returns
+ * non-empty results
+ *
+ * @throws SQLException
+ */
+ @Test
+ public void connection_statement_query_construct_02() throws SQLException {
+ // Prepare a dataset
+ Dataset ds = DatasetFactory.createMem();
+ ds.asDatasetGraph().add(
+ new Quad(NodeFactory.createURI("http://graph"), NodeFactory.createURI("http://subject"), NodeFactory
+ .createURI("http://predicate"), NodeFactory.createURI("http://object")));
+
+ // Work with the connection
+ JenaJdbcConnection conn = this.getConnection(ds);
+ Statement stmt = conn.createStatement();
+ ResultSet rset = stmt.executeQuery("CONSTRUCT { ?s ?p ?o } WHERE { GRAPH ?g { ?s ?p ?o } }");
+ Assert.assertFalse(rset.isClosed());
+ Assert.assertTrue(rset.isBeforeFirst());
+
+ // Should have a row
+ Assert.assertTrue(rset.next());
+ Assert.assertTrue(rset.isFirst());
+ Assert.assertEquals(1, rset.getRow());
+
+ // Should be no further rows
+ Assert.assertFalse(rset.next());
+ Assert.assertTrue(rset.isAfterLast());
+ Assert.assertFalse(rset.isClosed());
+
+ // Close things
+ rset.close();
+ Assert.assertTrue(rset.isClosed());
+ stmt.close();
+ Assert.assertTrue(stmt.isClosed());
+ conn.close();
+ Assert.assertTrue(conn.isClosed());
+ }
+
+ protected void checkConstructMetadata(ResultSet results) throws SQLException {
+ // Check result set metadata
+ ResultSetMetaData metadata = results.getMetaData();
+ Assert.assertEquals(3, metadata.getColumnCount());
+ for (int i = 1; i <= TripleIteratorResults.NUM_COLUMNS; i++) {
+ Assert.assertEquals(Node.class.getCanonicalName(), metadata.getColumnClassName(i));
+ Assert.assertEquals(Node.class.getCanonicalName(), metadata.getColumnTypeName(i));
+ Assert.assertEquals(Types.JAVA_OBJECT, metadata.getColumnType(i));
+ }
+ }
}