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/06/12 20:18:49 UTC
svn commit: r1492320 - in
/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc:
results/ results/metadata/ results/metadata/columns/ statements/
Author: rvesse
Date: Wed Jun 12 18:18:27 2013
New Revision: 1492320
URL: http://svn.apache.org/r1492320
Log:
Some tweaks to support column type re-mapping for SELECT results metadata
Modified:
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/JenaResultSet.java
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/AbstractResultsMetadata.java
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/SelectResultsMetadata.java
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/columns/StringColumn.java
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/statements/JenaPreparedStatement.java
Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/JenaResultSet.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/JenaResultSet.java?rev=1492320&r1=1492319&r2=1492320&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/JenaResultSet.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/JenaResultSet.java Wed Jun 12 18:18:27 2013
@@ -365,7 +365,6 @@ public abstract class JenaResultSet impl
case Types.BINARY:
case Types.BIT:
case Types.BLOB:
- case Types.CHAR:
case Types.CLOB:
case Types.DATALINK:
case Types.DISTINCT:
@@ -383,7 +382,6 @@ public abstract class JenaResultSet impl
case Types.SQLXML:
case Types.STRUCT:
case Types.VARBINARY:
- case Types.VARCHAR:
throw new SQLException("Unable to marhsal a RDF Node to the declared column type " + jdbcType);
case Types.BOOLEAN:
return JdbcNodeUtils.toBoolean(n);
@@ -401,6 +399,8 @@ public abstract class JenaResultSet impl
return JdbcNodeUtils.toInt(n);
case Types.JAVA_OBJECT:
return n;
+ case Types.CHAR:
+ case Types.VARCHAR:
case Types.NVARCHAR:
return JdbcNodeUtils.toString(n);
case Types.SMALLINT:
Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/AbstractResultsMetadata.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/AbstractResultsMetadata.java?rev=1492320&r1=1492319&r2=1492320&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/AbstractResultsMetadata.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/AbstractResultsMetadata.java Wed Jun 12 18:18:27 2013
@@ -23,13 +23,14 @@ import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.apache.jena.jdbc.results.metadata.columns.ColumnInfo;
/**
* Abstract implementation of JDBC result set metadata
- *
+ *
*/
public class AbstractResultsMetadata implements ResultSetMetaData {
@@ -38,9 +39,13 @@ public class AbstractResultsMetadata imp
/**
* Abstract implementation of result set metadata
- * @param results Result Set
- * @param columns Column information
- * @throws SQLException Thrown if metadata cannot be created
+ *
+ * @param results
+ * Result Set
+ * @param columns
+ * Column information
+ * @throws SQLException
+ * Thrown if metadata cannot be created
*/
public AbstractResultsMetadata(ResultSet results, ColumnInfo[] columns) throws SQLException {
if (results == null)
@@ -190,4 +195,14 @@ public class AbstractResultsMetadata imp
return this.getColumnInfo(column).isWritable();
}
+ /**
+ * Gets a copy of the raw underlying column information
+ *
+ * @return Column Information
+ * @throws SQLException
+ */
+ public List<ColumnInfo> getJenaColumnInfo() throws SQLException {
+ return new ArrayList<ColumnInfo>(this.columns);
+ }
+
}
\ No newline at end of file
Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/SelectResultsMetadata.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/SelectResultsMetadata.java?rev=1492320&r1=1492319&r2=1492320&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/SelectResultsMetadata.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/SelectResultsMetadata.java Wed Jun 12 18:18:27 2013
@@ -43,10 +43,9 @@ import com.hp.hpl.jena.sparql.resultset.
*
*/
public class SelectResultsMetadata extends JenaResultsMetadata {
-
+
private static final Logger LOGGER = LoggerFactory.getLogger(SelectResultsMetadata.class);
- @SuppressWarnings("unused")
private ResultSetPeekable innerResults;
/**
@@ -77,49 +76,72 @@ public class SelectResultsMetadata exten
}
/**
- * Makes column information for SELECT results
- * @param results Result Set
- * @param rset Underlying SPARQL results
+ * Creates new SELECT results metadata
+ *
+ * @param metadata Original metadata
+ * @param columns
+ * Column metadata
+ * @throws SQLException
+ */
+ public SelectResultsMetadata(SelectResultsMetadata metadata, ColumnInfo[] columns) throws SQLException {
+ super(metadata.getJenaResultSet(), columns);
+ this.innerResults = metadata.innerResults;
+ }
+
+ /**
+ * Makes column information for SELECT results
+ *
+ * @param results
+ * Result Set
+ * @param rset
+ * Underlying SPARQL results
* @return Column information
- * @throws SQLException Thrown if the column information cannot be created
+ * @throws SQLException
+ * Thrown if the column information cannot be created
*/
private static ColumnInfo[] makeColumns(JenaResultSet results, ResultSetPeekable rset) throws SQLException {
List<String> vars = rset.getResultVars();
ColumnInfo[] columns = new ColumnInfo[vars.size()];
-
+
int level = JdbcCompatibility.normalizeLevel(results.getJdbcCompatibilityLevel());
boolean columnsAsStrings = JdbcCompatibility.shouldTypeColumnsAsString(level);
boolean columnsDetected = JdbcCompatibility.shouldDetectColumnTypes(level);
-
+
Binding b = null;
if (columnsDetected) {
if (rset.hasNext()) {
b = rset.peekBinding();
} else {
- // If we were supposed to detect columns but there is no data available then we will just fallback to typing everything as strings
+ // If we were supposed to detect columns but there is no data
+ // available then we will just fallback to typing everything as
+ // strings
columnsAsStrings = true;
columnsDetected = false;
}
}
-
+
for (int i = 0; i < columns.length; i++) {
if (!columnsAsStrings && !columnsDetected) {
- // Low compatibility, report columns as being typed as JAVA_OBJECT with ARQ Node as the column class
+ // Low compatibility, report columns as being typed as
+ // JAVA_OBJECT with ARQ Node as the column class
columns[i] = new SparqlColumnInfo(vars.get(i), Types.JAVA_OBJECT, columnNullable);
LOGGER.info("Low JDBC compatibility, column " + vars.get(i) + " is being typed as Node");
} else if (columnsAsStrings) {
- // Medium compatibility, report columns as being typed as NVARCHAR with String as the column class
+ // Medium compatibility, report columns as being typed as
+ // NVARCHAR with String as the column class
columns[i] = new StringColumn(vars.get(i), columnNullable);
LOGGER.info("Medium JDBC compatibility, column " + vars.get(i) + " is being typed as String");
} else if (columnsDetected) {
- // High compatibility, detect columns types based on first row of results
+ // High compatibility, detect columns types based on first row
+ // of results
columns[i] = JdbcCompatibility.detectColumnType(vars.get(i), b.get(Var.alloc(vars.get(i))), true);
- LOGGER.info("High compatibility, column " + vars.get(i) + " was detected as being of type " + columns[i].getClassName());
+ LOGGER.info("High compatibility, column " + vars.get(i) + " was detected as being of type "
+ + columns[i].getClassName());
} else {
throw new SQLFeatureNotSupportedException("Unknown JDBC compatibility level was set");
}
}
-
+
return columns;
}
}
Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/columns/StringColumn.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/columns/StringColumn.java?rev=1492320&r1=1492319&r2=1492320&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/columns/StringColumn.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/results/metadata/columns/StringColumn.java Wed Jun 12 18:18:27 2013
@@ -23,18 +23,36 @@ import java.sql.Types;
/**
* Column information for string columns
- *
+ *
*/
public class StringColumn extends SparqlColumnInfo {
/**
* Creates new string column information
- * @param label Label
- * @param nullable Nullability
+ *
+ * @param label
+ * Label
+ * @param nullable
+ * Nullability
* @throws SQLException
*/
public StringColumn(String label, int nullable) throws SQLException {
- super(label, Types.NVARCHAR, nullable);
+ this(label, Types.NVARCHAR, nullable);
+ }
+
+ /**
+ * Creates new string column information
+ *
+ * @param label
+ * Label
+ * @param sqlType
+ * SQL Type
+ * @param nullable
+ * Nullability
+ * @throws SQLException
+ */
+ public StringColumn(String label, int sqlType, int nullable) throws SQLException {
+ super(label, sqlType, nullable);
this.setClassName(String.class.getName());
}
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=1492320&r1=1492319&r2=1492320&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 Wed Jun 12 18:18:27 2013
@@ -369,7 +369,6 @@ public abstract class JenaPreparedStatem
case Types.BINARY:
case Types.BIT:
case Types.BLOB:
- case Types.CHAR:
case Types.CLOB:
case Types.DATALINK:
case Types.DISTINCT:
@@ -387,7 +386,6 @@ public abstract class JenaPreparedStatem
case Types.SQLXML:
case Types.STRUCT:
case Types.VARBINARY:
- case Types.VARCHAR:
throw new SQLException("The provided SQL Target Type cannot be translated into an appropriate RDF term type");
case Types.BIGINT:
if (value instanceof Long) {
@@ -529,7 +527,9 @@ public abstract class JenaPreparedStatem
this.setParameter(parameterIndex, NodeFactory.createLiteral(value.toString()));
}
break;
+ case Types.CHAR:
case Types.NVARCHAR:
+ case Types.VARCHAR:
this.setParameter(parameterIndex, NodeFactory.createLiteral(value.toString()));
break;
case Types.SMALLINT: