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));
+        }
+    }
 }