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:13:20 UTC

svn commit: r1463303 - in /jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results: TripleIteratorResults.java metadata/JenaJdbcResultsMetadata.java metadata/TripleResultsMetadata.java

Author: rvesse
Date: Mon Apr  1 21:13:20 2013
New Revision: 1463303

URL: http://svn.apache.org/r1463303
Log:
Results Metadata and basic implementation of TripleIteratorResults

Added:
    jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/TripleResultsMetadata.java
Modified:
    jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/TripleIteratorResults.java
    jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/JenaJdbcResultsMetadata.java

Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/TripleIteratorResults.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/TripleIteratorResults.java?rev=1463303&r1=1463302&r2=1463303&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/TripleIteratorResults.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/TripleIteratorResults.java Mon Apr  1 21:13:20 2013
@@ -24,11 +24,11 @@ import java.sql.Statement;
 import java.util.Iterator;
 
 import org.apache.jena.atlas.lib.Closeable;
+import org.apache.jena.jdbc.results.metadata.TripleResultsMetadata;
 
 import com.hp.hpl.jena.graph.Node;
 import com.hp.hpl.jena.graph.Triple;
 import com.hp.hpl.jena.query.QueryExecution;
-import com.hp.hpl.jena.sparql.core.Var;
 
 /**
  * Represents results of a CONSTRUCT/DESCRIBE query where the results are
@@ -37,11 +37,25 @@ import com.hp.hpl.jena.sparql.core.Var;
  */
 public class TripleIteratorResults extends StreamedResults<Triple> {
 
+    private static final TripleResultsMetadata metadata = new TripleResultsMetadata();
+    
+    /**
+     * Constant for the number of columns in triple results
+     */
     public static final int NUM_COLUMNS = 3;
 
+    /**
+     * Constant for the subject column label
+     */
     public static final String COLUMN_LABEL_SUBJECT = "Subject";
-    public static final String COLUMN_LABEL_PREDICATE = "Subject";
-    public static final String COLUMN_LABEL_OBJECT = "Subject";
+    /**
+     * Constant for the predicate column label
+     */
+    public static final String COLUMN_LABEL_PREDICATE = "Predicate";
+    /**
+     * Constant for the object column label
+     */
+    public static final String COLUMN_LABEL_OBJECT = "Object";
 
     private Iterator<Triple> triples;
 
@@ -65,8 +79,15 @@ public class TripleIteratorResults exten
     }
 
     public int findColumn(String columnLabel) throws SQLException {
-        // TODO Auto-generated method stub
-        return 0;
+        if (COLUMN_LABEL_SUBJECT.equals(columnLabel)) {
+            return 1;
+        } else if (COLUMN_LABEL_PREDICATE.equals(columnLabel)) {
+            return 2;
+        } else if (COLUMN_LABEL_OBJECT.equals(columnLabel)) {
+            return 3;
+        } else {
+            throw new SQLException("Column " + columnLabel + " does not exist in these results");
+        }
     }
 
     @Override
@@ -93,8 +114,7 @@ public class TripleIteratorResults exten
 
     @Override
     public ResultSetMetaData getMetaData() throws SQLException {
-        // TODO Auto-generated method stub
-        return null;
+        return metadata;
     }
 
     @Override

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=1463303&r1=1463302&r2=1463303&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:13:20 2013
@@ -25,10 +25,10 @@ import java.sql.Types;
 
 /**
  * Abstract implementation of result set metadata for Jena JDBC result sets
- *
+ * 
  */
 public abstract class JenaJdbcResultsMetadata implements ResultSetMetaData {
-    
+
     /**
      * Constant for the type name reported for Jena JDBC columns
      */
@@ -47,15 +47,25 @@ public abstract class JenaJdbcResultsMet
     }
 
     public String getColumnClassName(int column) throws SQLException {
-        // TODO Auto-generated method stub
-        return null;
+        return this.getColumnTypeName(column);
     }
 
     public abstract int getColumnCount() throws SQLException;
 
+    /**
+     * Gets a columns display size
+     * <p>
+     * Since RDF imposes no maximum on the size of a term this may be
+     * arbitrarily large hence {@link Integer#MAX_VALUE} is returned, users
+     * should not rely on this method to give them accurate information for UI
+     * usage.
+     * </p>
+     */
     public int getColumnDisplaySize(int column) throws SQLException {
-        // TODO Auto-generated method stub
-        return 0;
+        // Call getColumnName to validate the column index
+        this.getColumnName(column);
+        // No max size for columns so return maximum possible
+        return Integer.MAX_VALUE;
     }
 
     public abstract String getColumnLabel(int column) throws SQLException;
@@ -65,19 +75,33 @@ public abstract class JenaJdbcResultsMet
     }
 
     public int getColumnType(int column) throws SQLException {
+        // Call getColumnName to validate the column index
+        this.getColumnName(column);
+        // All columns are typed as Java Object from a JDBC SQL type perspective
         return Types.JAVA_OBJECT;
     }
 
     public String getColumnTypeName(int column) throws SQLException {
+        // Call getColumnName to validate the column index
+        this.getColumnName(column);
+        // All columns are typed as ARQ Node
         return COLUMN_TYPE_NAME;
     }
 
     public int getPrecision(int column) throws SQLException {
-        return 0;
+        // Call getColumnName to validate the column index
+        this.getColumnName(column);
+        // Precision is not a supported notion in RDF/SPARQL
+        // Precision can vary depending on data type
+        throw new SQLFeatureNotSupportedException();
     }
 
     public int getScale(int column) throws SQLException {
-        return 0;
+        // Call getColumnName to validate the column index
+        this.getColumnName(column);
+        // Scale is not a supported notion in RDF/SPARQL
+        // Scale can vary depending on data type
+        throw new SQLFeatureNotSupportedException();
     }
 
     public String getSchemaName(int column) throws SQLException {
@@ -89,17 +113,25 @@ public abstract class JenaJdbcResultsMet
     }
 
     public boolean isAutoIncrement(int column) throws SQLException {
+        // Call getColumnName to validate the column index
+        this.getColumnName(column);
         // SPARQL engines don't have a notion of auto-increment
         return false;
     }
 
     public boolean isCaseSensitive(int column) throws SQLException {
-        // Most types in RDF/SPARQL are subject to case sensitivity especially when talking strict
+        // Call getColumnName to validate the column index
+        this.getColumnName(column);
+        // Most types in RDF/SPARQL are subject to case sensitivity especially
+        // when talking strict
         // RDF equality semantics
         return true;
     }
 
     public boolean isCurrency(int column) throws SQLException {
+        // Call getColumnName to validate the column index
+        this.getColumnName(column);
+        // No built in currency type in RDF
         return false;
     }
 
@@ -110,24 +142,31 @@ public abstract class JenaJdbcResultsMet
     public abstract int isNullable(int column) throws SQLException;
 
     public boolean isReadOnly(int column) throws SQLException {
+        // Call getColumnName to validate the column index
+        this.getColumnName(column);
         // All Jena JDBC results are read-only currently
         return true;
     }
 
     public boolean isSearchable(int column) throws SQLException {
+        // Call getColumnName to validate the column index
+        this.getColumnName(column);
         // All columns are searchable in RDF/SPARQL
         return true;
     }
 
     public boolean isSigned(int column) throws SQLException {
+        // Call getColumnName to validate the column index
+        this.getColumnName(column);
         // Most numeric types allow for signs in RDF/SPARQL
         return true;
     }
 
     public boolean isWritable(int column) throws SQLException {
+        // Call getColumnName to validate the column index
+        this.getColumnName(column);
         // All Jena JDBC results are read-only currently
         return false;
     }
 
-
 }

Added: jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/TripleResultsMetadata.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/TripleResultsMetadata.java?rev=1463303&view=auto
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/TripleResultsMetadata.java (added)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/TripleResultsMetadata.java Mon Apr  1 21:13:20 2013
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.jdbc.results.metadata;
+
+import java.sql.SQLException;
+
+import org.apache.jena.jdbc.results.TripleIteratorResults;
+
+/**
+ * Result set metadata for {@link TripleIteratorResults} instances
+ *
+ */
+public class TripleResultsMetadata extends JenaJdbcResultsMetadata {
+
+    @Override
+    public int getColumnCount() throws SQLException {
+        return TripleIteratorResults.NUM_COLUMNS;
+    }
+
+    @Override
+    public String getColumnLabel(int column) throws SQLException {
+        switch (column) {
+        case 1:
+            return TripleIteratorResults.COLUMN_LABEL_SUBJECT;
+        case 2:
+            return TripleIteratorResults.COLUMN_LABEL_PREDICATE;
+        case 3:
+            return TripleIteratorResults.COLUMN_LABEL_OBJECT;
+        default:
+            throw new SQLException("Column Index is out of bounds");
+        }
+    }
+
+    @Override
+    public int isNullable(int column) throws SQLException {
+        return columnNoNulls;
+    }
+
+}