Author: rvesse
Date: Wed Apr 24 21:37:00 2013
New Revision: 1471701
URL: http://svn.apache.org/r1471701
Log:
Lots more metadata implementation work
Added:
jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/metadata/
jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/metadata/results/
jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/metadata/results/AbstractDatabaseMetadataTests.java
jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/metadata/results/TestMetaResultSet.java
jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/metadata/
jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/metadata/TestDatasetConnectionMetadata.java
Modified:
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/JenaMetadata.java
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/MetadataSchema.java
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/results/MetaResultSet.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/statements/JenaPreparedStatement.java
Modified:
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/JenaMetadata.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/JenaMetadata.java?rev=1471701&r1=1471700&r2=1471701&view=diff
==============================================================================
---
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/JenaMetadata.java
(original)
+++
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/JenaMetadata.java
Wed Apr 24 21:37:00 2013
@@ -20,18 +20,15 @@ package org.apache.jena.jdbc.metadata;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
-import java.sql.Date;
import java.sql.ResultSet;
import java.sql.RowIdLifetime;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.sql.Types;
-import java.util.ArrayList;
-import java.util.List;
-
import org.apache.jena.atlas.lib.StrUtils;
import org.apache.jena.jdbc.connections.JenaConnection;
import org.apache.jena.jdbc.metadata.results.MetaResultSet;
+import com.hp.hpl.jena.vocabulary.XSD;
/**
* Database metadata for Jena JDBC connections
@@ -108,6 +105,10 @@ public abstract class JenaMetadata imple
this.connection = connection;
}
+ /**
+ * Gets the associated Jena connection instance
+ * @return Jena connection
+ */
public JenaConnection getJenaConnection() {
return this.connection;
}
@@ -519,20 +520,17 @@ public abstract class JenaMetadata imple
@Override
public ResultSet getTablePrivileges(String arg0, String arg1, String arg2)
throws SQLException {
- // TODO Auto-generated method stub
- return null;
+ return new MetaResultSet(MetadataSchema.getTablePrivilegeColumns());
}
@Override
public ResultSet getTableTypes() throws SQLException {
- // TODO Auto-generated method stub
- return null;
+ return new MetaResultSet(MetadataSchema.getTableTypeColumns());
}
@Override
public ResultSet getTables(String arg0, String arg1, String arg2, String[]
arg3) throws SQLException {
- // TODO Auto-generated method stub
- return null;
+ return new MetaResultSet(MetadataSchema.getTableColumns());
}
@Override
@@ -570,13 +568,21 @@ public abstract class JenaMetadata imple
// SQL_DATETIME_SUB int => unused
// NUM_PREC_RADIX int => usually 2 or 10
- //TODO: Report types we can marshal as appropriate
+ //Report types we can marshal appropriately
return new MetaResultSet(MetadataSchema.getTypeInfoColumns(),
new Object[][] {
- { Boolean.class.getName(), Types.BOOLEAN, 0, null, null, null,
(short)typeNullable, false, (short)typeSearchable, false, false, false, null,
(short)0, (short)0, 0, 0, 0 },
- { Byte.class.getName(), Types.TINYINT, 0, "\"", "\"", null,
(short)typeNullable, false, (short)typeSearchable, false, false, false, null,
(short)0, (short)0, 0, 0, 0 },
- { Date.class.getName(), Types.DATE, 0, "\"", "\"", null,
(short)typeNullable, false, (short)typeSearchable, false, false, false, null,
(short)0, (short)0, 0, 0, 0 },
- { String.class.getName(), Types.NVARCHAR, 0, "\"", "\"", null,
(short)typeNullable, true, (short)typeSearchable, false, false, false, null,
(short)0, (short)0, 0, 0, 0 }
+ { XSD.xboolean.toString(), Types.BOOLEAN, 0, null, null, null,
(short)typeNullable, false, (short)typeSearchable, false, false, false, null,
(short)0, (short)0, 0, 0, 0 },
+ { XSD.xbyte.toString(), Types.TINYINT, 0, "\"", "\"", null,
(short)typeNullable, false, (short)typeSearchable, false, false, false, null,
(short)0, (short)0, 0, 0, 0 },
+ { XSD.date.toString(), Types.DATE, 0, "\"", "\"", null,
(short)typeNullable, false, (short)typeSearchable, false, false, false, null,
(short)0, (short)0, 0, 0, 0 },
+ { XSD.dateTime.toString(), Types.DATE, 0, "\"", "\"", null,
(short)typeNullable, false, (short)typeSearchable, false, false, false, null,
(short)0, (short)0, 0, 0, 0 },
+ { XSD.decimal.toString(), Types.DECIMAL, 16, null, null, null,
(short)typeNullable, false, (short)typeSearchable, false, false, false, null,
(short)0, (short)16, 0, 0, 10 },
+ { XSD.xdouble.toString(), Types.DOUBLE, 16, null, null, null,
(short)typeNullable, false, (short)typeSearchable, false, false, false, null,
(short)0, (short)16, 0, 0, 10 },
+ { XSD.xfloat.toString(), Types.FLOAT, 15, null, null, null,
(short)typeNullable, false, (short)typeSearchable, false, false, false, null,
(short)0, (short)7, 0, 0, 10 },
+ //TODO: Should be covering all the supported XSD integer sub-types
here
+ { XSD.xshort.toString(), Types.INTEGER,
Integer.toString(Integer.MAX_VALUE).length(), null, null, null,
(short)typeNullable, false, (short)typeSearchable, false, false, false, null,
(short)0, (short)0, 0, 0, 10 },
+ { XSD.integer.toString(), Types.BIGINT,
Long.toString(Long.MAX_VALUE).length(), null, null, null, (short)typeNullable,
false, (short)typeSearchable, false, false, false, null, (short)0, (short)0, 0,
0, 10 },
+ { XSD.xstring.toString(), Types.NVARCHAR, 0, "\"", "\"", null,
(short)typeNullable, true, (short)typeSearchable, false, false, false, null,
(short)0, (short)0, 0, 0, 0 },
+ { XSD.time.toString(), Types.TIME, 0, "\"", "\"", null,
(short)typeNullable, false, (short)typeSearchable, false, false, false, null,
(short)0, (short)0, 0, 0, 0 },
});
}
@@ -596,8 +602,7 @@ public abstract class JenaMetadata imple
@Override
public ResultSet getVersionColumns(String arg0, String arg1, String arg2)
throws SQLException {
- // TODO Auto-generated method stub
- return null;
+ return new MetaResultSet(MetadataSchema.getVersionColumns());
}
@Override
@@ -619,7 +624,7 @@ public abstract class JenaMetadata imple
@Override
public boolean locatorsUpdateCopy() throws SQLException {
- // TODO Auto-generated method stub
+ // SPARQL doesn't support the LOB types so return false
return false;
}
@@ -1013,21 +1018,22 @@ public abstract class JenaMetadata imple
}
@Override
- public boolean supportsResultSetConcurrency(int arg0, int arg1) throws
SQLException {
- // TODO Auto-generated method stub
- return false;
+ public boolean supportsResultSetConcurrency(int type, int concurrency)
throws SQLException {
+ // We only support read-only result sets
+ if (concurrency != ResultSet.CONCUR_READ_ONLY) return false;
+ return supportsResultSetType(type);
}
@Override
- public boolean supportsResultSetHoldability(int arg0) throws SQLException {
+ public boolean supportsResultSetHoldability(int holdability) throws
SQLException {
// Both kinds of holdability are supported
return true;
}
@Override
- public boolean supportsResultSetType(int arg0) throws SQLException {
+ public boolean supportsResultSetType(int type) throws SQLException {
// Currently only FORWARD_ONLY is supported
- switch (arg0) {
+ switch (type) {
case ResultSet.TYPE_FORWARD_ONLY:
return true;
default:
Modified:
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/MetadataSchema.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/MetadataSchema.java?rev=1471701&r1=1471700&r2=1471701&view=diff
==============================================================================
---
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/MetadataSchema.java
(original)
+++
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/MetadataSchema.java
Wed Apr 24 21:37:00 2013
@@ -23,15 +23,12 @@ import static java.sql.ResultSetMetaData
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
-import org.apache.http.TruncatedChunkException;
import org.apache.jena.jdbc.results.metadata.columns.BooleanColumn;
import org.apache.jena.jdbc.results.metadata.columns.ColumnInfo;
import org.apache.jena.jdbc.results.metadata.columns.IntegerColumn;
import org.apache.jena.jdbc.results.metadata.columns.ShortIntegerColumn;
import org.apache.jena.jdbc.results.metadata.columns.StringColumn;
-import com.hp.hpl.jena.sparql.algebra.table.TableN;
-
/**
* Helper class containing constants pertaining to the columns returned by
* various methods of a {@link DatabaseMetaData} implementation
@@ -50,7 +47,8 @@ public class MetadataSchema {
private static ColumnInfo[] ATTRIBUTE_COLUMNS,
BEST_ROW_IDENTIFIER_COLUMNS, CATALOG_COLUMNS, CLIENT_INFO_PROPERTY_COLUMNS,
COLUMN_COLUMNS, COLUMN_PRIVILEGE_COLUMNS, CROSS_REFERENCE_COLUMNS,
EXPORTED_KEY_COLUMNS, FUNCTION_COLUMN_COLUMNS,
FUNCTION_COLUMNS, IMPORTED_KEY_COLUMNS, INDEX_INFO_COLUMNS,
PRIMARY_KEY_COLUMNS, PROCEDURE_COLUMN_COLUMNS,
- PROCEDURE_COLUMNS, SCHEMA_COLUMNS, SUPER_TABLE_COLUMNS,
SUPER_TYPE_COLUMNS, TYPE_INFO_COLUMNS, UDT_COLUMNS;
+ PROCEDURE_COLUMNS, SCHEMA_COLUMNS, SUPER_TABLE_COLUMNS,
SUPER_TYPE_COLUMNS, TABLE_PRIVILEGE_COLUMNS,
+ TABLE_TYPE_COLUMNS, TABLE_COLUMNS, TYPE_INFO_COLUMNS, UDT_COLUMNS,
VERSION_COLUMNS;
/**
* Gets the columns for the
@@ -94,71 +92,212 @@ public class MetadataSchema {
return CLIENT_INFO_PROPERTY_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getColumns(String, String, String, String)}
+ * method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getColumnColumns() {
return COLUMN_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getColumnPrivileges(String, String, String,
String)}
+ * method
+ *
+ * @return Column Information
+ */
public static ColumnInfo[] getColumnPrivilegeColumns() {
return COLUMN_PRIVILEGE_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getCrossReference(String, String, String,
String, String, String)}
+ * method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getCrossReferenceColumns() {
return CROSS_REFERENCE_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getExportedKeys(String, String, String)} method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getExportedKeyColumns() {
return EXPORTED_KEY_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getFunctionColumns(String, String, String,
String)}
+ * method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getFunctionColumnColumns() {
return FUNCTION_COLUMN_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getFunctions(String, String, String)} method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getFunctionColumns() {
return FUNCTION_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getImportedKeys(String, String, String)} method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getImportedKeyColumns() {
return IMPORTED_KEY_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getIndexInfo(String, String, String, boolean,
boolean)}
+ * method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getIndexInfoColumns() {
return INDEX_INFO_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getPrimaryKeys(String, String, String)} method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getPrimaryKeyColumns() {
return PRIMARY_KEY_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getProcedureColumns(String, String, String,
String)}
+ * method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getProcedureColumnColumns() {
return PROCEDURE_COLUMN_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getProcedures(String, String, String)} method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getProcedureColumns() {
return PROCEDURE_COLUMNS;
}
+ /**
+ * Gets the columns for the {@link DatabaseMetaData#getSchemas()} method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getSchemaColumns() {
return SCHEMA_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getSuperTables(String, String, String)} method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getSuperTableColumns() {
return SUPER_TABLE_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getSuperTypes(String, String, String)} method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getSuperTypeColumns() {
return SUPER_TYPE_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getTablePrivileges(String, String, String)}
+ * method
+ *
+ * @return Column information
+ */
+ public static ColumnInfo[] getTablePrivilegeColumns() {
+ return TABLE_PRIVILEGE_COLUMNS;
+ }
+
+ /**
+ * Gets the columns for the {@link DatabaseMetaData#getTableTypes()} method
+ *
+ * @return Column information
+ */
+ public static ColumnInfo[] getTableTypeColumns() {
+ return TABLE_TYPE_COLUMNS;
+ }
+
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getTables(String, String, String, String[])}
+ * method
+ *
+ * @return Column information
+ */
+ public static ColumnInfo[] getTableColumns() {
+ return TABLE_COLUMNS;
+ }
+
+ /**
+ * Gets the columns for the {@link DatabaseMetaData#getTypeInfo()} method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getTypeInfoColumns() {
return TYPE_INFO_COLUMNS;
}
+ /**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getUDTs(String, String, String, int[])} method
+ *
+ * @return Column information
+ */
public static ColumnInfo[] getUdtColumns() {
return UDT_COLUMNS;
}
/**
+ * Gets the columns for the
+ * {@link DatabaseMetaData#getVersionColumns(String, String, String)}
method
+ *
+ * @return Column information
+ */
+ public static ColumnInfo[] getVersionColumns() {
+ return VERSION_COLUMNS;
+ }
+
+ /**
* Static initializer, calls private synchronized static initializer to
* avoid multi-threaded race conditions
*/
@@ -188,6 +327,7 @@ public class MetadataSchema {
ColumnInfo decimalDigits = new IntegerColumn("DECIMAL_DIGITS",
columnNoNulls, true);
ColumnInfo numPrecRadix = new IntegerColumn("NUM_PREC_RADIX",
columnNoNulls, true);
ColumnInfo nullable = new IntegerColumn("NULLABLE", columnNoNulls,
true);
+ ColumnInfo shortNullable = new ShortIntegerColumn("NULLABLE",
columnNoNulls, true);
ColumnInfo remarks = new StringColumn("REMARKS", columnNullable);
ColumnInfo attrDef = new StringColumn("ATTR_DEF", columnNullable);
ColumnInfo sqlDataType = new IntegerColumn("SQL_DATA_TYPE",
columnNoNulls, true);
@@ -271,6 +411,9 @@ public class MetadataSchema {
ColumnInfo localTypeName = new StringColumn("LOCAL_TYPE_NAME",
columnNullable);
ColumnInfo minScale = new ShortIntegerColumn("MINIMUM_SCALE",
columnNoNulls, true);
ColumnInfo maxScale = new ShortIntegerColumn("MAXIMUM_SCALE",
columnNullable, true);
+ ColumnInfo tableType = new StringColumn("TABLE_TYPE",
columnNoNulls);
+ ColumnInfo selfRefColName = new
StringColumn("SELF_REFERENCING_COL_NAME", columnNullable);
+ ColumnInfo refGeneration = new StringColumn("REF_GENERATION",
columnNullable);
ATTRIBUTE_COLUMNS = new ColumnInfo[] {
// TYPE_CAT String => type catalog (may be null)
@@ -658,7 +801,7 @@ public class MetadataSchema {
// functionNoNulls - does not allow NULL values
// functionNullable - allows NULL values
// functionNullableUnknown - nullability unknown
- nullable,
+ shortNullable,
// REMARKS String => comment describing column/parameter
remarks,
// CHAR_OCTET_LENGTH int => the maximum length of binary
and
@@ -872,7 +1015,7 @@ public class MetadataSchema {
// procedureNoNulls - does not allow NULL values
// procedureNullable - allows NULL values
// procedureNullableUnknown - nullability unknown
- nullable,
+ shortNullable,
// REMARKS String => comment describing parameter/column
remarks,
// COLUMN_DEF String => default value for the column, which
@@ -970,6 +1113,58 @@ public class MetadataSchema {
// SUPERTYPE_NAME String => the direct super type's name
superTypeName };
+ TABLE_PRIVILEGE_COLUMNS = new ColumnInfo[] {
+ // TABLE_CAT String => table catalog (may be null)
+ tableCat,
+ // TABLE_SCHEM String => table schema (may be null)
+ tableSchema,
+ // TABLE_NAME String => table name
+ tableName,
+ // GRANTOR String => grantor of access (may be null)
+ grantor,
+ // GRANTEE String => grantee of access
+ grantee,
+ // PRIVILEGE String => name of access (SELECT, INSERT,
+ // UPDATE, REFRENCES, ...)
+ privilege,
+ // IS_GRANTABLE String => "YES" if grantee is permitted to
+ // grant to others; "NO" if not; null if unknown
+ isGrantable };
+
+ TABLE_TYPE_COLUMNS = new ColumnInfo[] {
+ // TABLE_TYPE String => table type. Typical types are "TABLE",
+ // "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY",
+ // "ALIAS", "SYNONYM".
+ tableType };
+
+ TABLE_COLUMNS = new ColumnInfo[] {
+ // TABLE_CAT String => table catalog (may be null)
+ tableCat,
+ // TABLE_SCHEM String => table schema (may be null)
+ tableSchema,
+ // TABLE_NAME String => table name
+ tableName,
+ // TABLE_TYPE String => table type. Typical types are
+ // "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
+ // "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
+ tableType,
+ // REMARKS String => explanatory comment on the table
+ remarks,
+ // TYPE_CAT String => the types catalog (may be null)
+ typeCat,
+ // TYPE_SCHEM String => the types schema (may be null)
+ typeSchema,
+ // TYPE_NAME String => type name (may be null)
+ typeName,
+ // SELF_REFERENCING_COL_NAME String => name of the
+ // designated "identifier" column of a typed table (may be
+ // null)
+ selfRefColName,
+ // REF_GENERATION String => specifies how values in
+ // SELF_REFERENCING_COL_NAME are created. Values are
+ // "SYSTEM", "USER", "DERIVED". (may be null)
+ refGeneration };
+
TYPE_INFO_COLUMNS = new ColumnInfo[] {
// TYPE_NAME String => Type name
typeName,
@@ -990,7 +1185,7 @@ public class MetadataSchema {
// typeNoNulls - does not allow NULL values
// typeNullable - allows NULL values
// typeNullableUnknown - nullability unknown
- nullable,
+ shortNullable,
// CASE_SENSITIVE boolean=> is it case sensitive.
caseSensitive,
// SEARCHABLE short => can you use "WHERE" based on this
@@ -1043,6 +1238,29 @@ public class MetadataSchema {
// not STRUCT with REFERENCE_GENERATION = USER_DEFINED)
baseType };
+ VERSION_COLUMNS = new ColumnInfo[] {
+ // SCOPE short => is not used
+ scope,
+ // COLUMN_NAME String => column name
+ columnName,
+ // DATA_TYPE int => SQL data type from java.sql.Types
+ dataType,
+ // TYPE_NAME String => Data source-dependent type name
+ typeName,
+ // COLUMN_SIZE int => precision
+ columnSize,
+ // BUFFER_LENGTH int => length of column value in bytes
+ bufferLength,
+ // DECIMAL_DIGITS short => scale - Null is returned for
data
+ // types where DECIMAL_DIGITS is not applicable.
+ decimalDigits,
+ // PSEUDO_COLUMN short => whether this is pseudo column
like
+ // an Oracle ROWID
+ // versionColumnUnknown - may or may not be pseudo column
+ // versionColumnNotPseudo - is NOT a pseudo column
+ // versionColumnPseudo - is a pseudo column
+ psuedoColumn };
+
} catch (SQLException e) {
throw new Error("Fatal error initializing JDBC metadata schema
information");
}
Modified:
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/results/MetaResultSet.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/results/MetaResultSet.java?rev=1471701&r1=1471700&r2=1471701&view=diff
==============================================================================
---
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/results/MetaResultSet.java
(original)
+++
jena/Experimental/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/metadata/results/MetaResultSet.java
Wed Apr 24 21:37:00 2013
@@ -86,8 +86,8 @@ public class MetaResultSet implements Re
this.metadata = new MetaResultSetMetadata(this, this.columns);
// Validate row widths if any rows
- for (Object[] row : rows) {
- if (row.length != this.columns.length) throw new SQLException("One
of the rows given does not have the expected number of columns");
+ for (int i = 0; i < rows.length; i++) {
+ if (rows[i].length != this.columns.length) throw new
SQLException("Row " + (i+1) + " does not have the expected number of columns");
}
}
@@ -221,15 +221,16 @@ public class MetaResultSet implements Re
// appropriately
if (targetType.isAssignableFrom(obj.getClass())) {
try {
- return targetType.cast(obj);
+ Object temp = targetType.cast(obj);
+ return temp;
} catch (ClassCastException e) {
- throw new SQLException("Value for this column (Index "
+ columnIndex + ") in the current row is not valid for the column type");
+ throw new SQLException("Value for this column (Row " +
(currRow+1) + " Column " + columnIndex + ") is not valid for the columns
declared type", e);
}
} else {
- throw new SQLException("Value for this column (Index " +
columnIndex + ") in the current row is not valid for the column type");
+ throw new SQLException("Value for this column (Row " +
(currRow+1) + " Column " + columnIndex + ") is not valid for the columns
declared type");
}
} else {
- throw new SQLException("Given column (Index " + columnIndex +
") does not contain appropriately typed values");
+ throw new SQLException("Given column (Row " + (currRow+1) + "
Column " + columnIndex + ") does not contain appropriately typed values.
Column type declared as " + info.getType() + " but expected type for this
lookup is " + expectedType);
}
} else {
throw new SQLException("Column index is out of bounds");
@@ -310,7 +311,7 @@ public class MetaResultSet implements Re
@Override
public byte getByte(int columnIndex) throws SQLException {
- return (Byte) this.getValue(columnIndex, Types.TINYINT, Byte.class,
0x0);
+ return (Byte) this.getValue(columnIndex, Types.TINYINT, Byte.class,
(byte)0x0);
}
@Override
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=1471701&r1=1471700&r2=1471701&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 Apr 24 21:37:00 2013
@@ -36,6 +36,12 @@ public class AbstractResultsMetadata imp
protected ResultSet results;
protected List<ColumnInfo> columns = new ArrayList<ColumnInfo>();
+ /**
+ * Abstract implementation of result set metadata
+ * @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)
throw new SQLException("Result Set cannot be null");
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=1471701&r1=1471700&r2=1471701&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 Apr 24 21:37:00 2013
@@ -52,6 +52,16 @@ public abstract class JenaPreparedStatem
private ParameterizedSparqlString sparqlStr = new
ParameterizedSparqlString();
+ /**
+ * Creates a new prepared statement
+ * @param connection
+ * @param fetchDir
+ * @param fetchSize
+ * @param holdability
+ * @param autoCommit
+ * @param transactionLevel
+ * @throws SQLException
+ */
public JenaPreparedStatement(JenaConnection connection, int fetchDir, int
fetchSize, int holdability, boolean autoCommit,
int transactionLevel) throws SQLException {
super(connection, fetchDir, fetchSize, holdability, autoCommit,
transactionLevel);
Added:
jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/metadata/results/AbstractDatabaseMetadataTests.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/metadata/results/AbstractDatabaseMetadataTests.java?rev=1471701&view=auto
==============================================================================
---
jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/metadata/results/AbstractDatabaseMetadataTests.java
(added)
+++
jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/metadata/results/AbstractDatabaseMetadataTests.java
Wed Apr 24 21:37:00 2013
@@ -0,0 +1,75 @@
+/**
+ * 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.metadata.results;
+
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.apache.jena.jdbc.connections.JenaConnection;
+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.query.ARQ;
+
+/**
+ * Tests that inspect the information provided by {@link JenaConnection}
+ * implementations in response to the {@link JenaConnection#getMetaData()}
+ * method
+ *
+ */
+public abstract class AbstractDatabaseMetadataTests {
+
+ protected abstract JenaConnection getConnection() throws SQLException;
+
+ static {
+ // Init Log4j
+ BasicConfigurator.resetConfiguration();
+ BasicConfigurator.configure();
+ Logger.getRootLogger().setLevel(Level.INFO);
+
+ // Init ARQ
+ ARQ.init();
+ }
+
+ /**
+ * Get type info and check the nullable column (regression for an issue
encountered during debugging)
+ * @throws SQLException
+ */
+ @Test
+ public void metadata_type_info() throws SQLException {
+ JenaConnection conn = this.getConnection();
+
+ DatabaseMetaData metadata = conn.getMetaData();
+ ResultSet typeInfo = metadata.getTypeInfo();
+
+ while (typeInfo.next()) {
+ typeInfo.getShort("NULLABLE");
+ }
+
+ Assert.assertTrue(typeInfo.isAfterLast());
+ typeInfo.close();
+ Assert.assertTrue(typeInfo.isClosed());
+ conn.close();
+ Assert.assertTrue(typeInfo.isClosed());
+ }
+}
Added:
jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/metadata/results/TestMetaResultSet.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/metadata/results/TestMetaResultSet.java?rev=1471701&view=auto
==============================================================================
---
jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/metadata/results/TestMetaResultSet.java
(added)
+++
jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/metadata/results/TestMetaResultSet.java
Wed Apr 24 21:37:00 2013
@@ -0,0 +1,495 @@
+/**
+ * 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.metadata.results;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Time;
+
+import org.apache.jena.jdbc.metadata.results.MetaResultSet;
+import org.apache.jena.jdbc.results.metadata.columns.BooleanColumn;
+import org.apache.jena.jdbc.results.metadata.columns.ByteColumn;
+import org.apache.jena.jdbc.results.metadata.columns.ColumnInfo;
+import org.apache.jena.jdbc.results.metadata.columns.DateColumn;
+import org.apache.jena.jdbc.results.metadata.columns.DecimalColumn;
+import org.apache.jena.jdbc.results.metadata.columns.DoubleColumn;
+import org.apache.jena.jdbc.results.metadata.columns.FloatColumn;
+import org.apache.jena.jdbc.results.metadata.columns.IntegerColumn;
+import org.apache.jena.jdbc.results.metadata.columns.LongIntegerColumn;
+import org.apache.jena.jdbc.results.metadata.columns.ShortIntegerColumn;
+import org.apache.jena.jdbc.results.metadata.columns.StringColumn;
+import org.apache.jena.jdbc.results.metadata.columns.TimeColumn;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Tests for the {@link MetaResultSet}
+ *
+ */
+public class TestMetaResultSet {
+
+ /**
+ * Check empty meta result set
+ * @throws SQLException
+ */
+ @Test
+ public void empty_meta_result_set_01() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[0]);
+
+ //Check results metadata
+ ResultSetMetaData metadata = results.getMetaData();
+ Assert.assertEquals(0, metadata.getColumnCount());
+
+ //Check results
+ Assert.assertTrue(results.isBeforeFirst());
+ Assert.assertFalse(results.next());
+ Assert.assertTrue(results.isAfterLast());
+
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Check empty meta result set with a single column
+ * @throws SQLException
+ */
+ @Test
+ public void empty_meta_result_set_02() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
StringColumn("Test", ResultSetMetaData.columnNullable) });
+
+ //Check results metadata
+ ResultSetMetaData metadata = results.getMetaData();
+ Assert.assertEquals(1, metadata.getColumnCount());
+
+ //Check results
+ Assert.assertTrue(results.isBeforeFirst());
+ Assert.assertFalse(results.next());
+ Assert.assertTrue(results.isAfterLast());
+
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Trying to create a meta result set with bad data is an error
+ * @throws SQLException
+ */
+ @Test(expected=SQLException.class)
+ public void meta_result_set_bad_01() throws SQLException {
+ // Every row must have the correct number of columns
+ new MetaResultSet(new ColumnInfo[] { new StringColumn("Test",
ResultSetMetaData.columnNullable) }, new Object[][] { { } });
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_string_01() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
StringColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { {
"value" } });
+
+ Assert.assertTrue(results.next());
+ String value = results.getString(1);
+ Assert.assertEquals("value", value);
+ Assert.assertFalse(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_string_02() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
StringColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { {
null } });
+
+ Assert.assertTrue(results.next());
+ String value = results.getString(1);
+ Assert.assertEquals(null, value);
+ Assert.assertTrue(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_boolean_01() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
BooleanColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { {
true } });
+
+ Assert.assertTrue(results.next());
+ Assert.assertTrue(results.getBoolean(1));
+ Assert.assertFalse(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_boolean_02() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
BooleanColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { {
null } });
+
+ Assert.assertTrue(results.next());
+ Assert.assertFalse(results.getBoolean(1));
+ Assert.assertTrue(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_byte_01() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
ByteColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][] {
{ (byte)0x10 } });
+
+ Assert.assertTrue(results.next());
+ byte value = results.getByte(1);
+ Assert.assertEquals(0x10, value);
+ Assert.assertFalse(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_byte_02() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
ByteColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][] {
{ null } });
+
+ Assert.assertTrue(results.next());
+ byte value = results.getByte(1);
+ Assert.assertEquals(0x0, value);
+ Assert.assertTrue(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @SuppressWarnings("deprecation")
+ @Test
+ public void meta_result_set_date_01() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
DateColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { new
Date(2013, 4, 24) } });
+
+ Assert.assertTrue(results.next());
+ Date value = results.getDate(1);
+ Assert.assertEquals(new Date(2013, 4, 24), value);
+ Assert.assertFalse(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_date_02() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
DateColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { null
} });
+
+ Assert.assertTrue(results.next());
+ Date value = results.getDate(1);
+ Assert.assertEquals(null, value);
+ Assert.assertTrue(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_time_01() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
TimeColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { new
Time(0) } });
+
+ Assert.assertTrue(results.next());
+ Time value = results.getTime(1);
+ Assert.assertEquals(new Time(0), value);
+ Assert.assertFalse(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_time_02() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
TimeColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { null
} });
+
+ Assert.assertTrue(results.next());
+ Time value = results.getTime(1);
+ Assert.assertEquals(null, value);
+ Assert.assertTrue(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_decimal_01() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
DecimalColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { {
new BigDecimal("123.4") } });
+
+ Assert.assertTrue(results.next());
+ BigDecimal value = results.getBigDecimal(1);
+ Assert.assertEquals(new BigDecimal("123.4"), value);
+ Assert.assertFalse(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_decimal_02() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
DecimalColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { {
null } });
+
+ Assert.assertTrue(results.next());
+ BigDecimal value = results.getBigDecimal(1);
+ Assert.assertEquals(null, value);
+ Assert.assertTrue(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_double_01() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
DoubleColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { {
0.123d } });
+
+ Assert.assertTrue(results.next());
+ double value = results.getDouble(1);
+ Assert.assertEquals(0.123d, value, 0d);
+ Assert.assertFalse(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_double_02() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
ByteColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][] {
{ null } });
+
+ Assert.assertTrue(results.next());
+ double value = results.getDouble(1);
+ Assert.assertEquals(0d, value, 0d);
+ Assert.assertTrue(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_float_01() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
FloatColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { {
0.123f } });
+
+ Assert.assertTrue(results.next());
+ float value = results.getFloat(1);
+ Assert.assertEquals(0.123f, value, 0f);
+ Assert.assertFalse(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_float_02() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
FloatColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { {
null } });
+
+ Assert.assertTrue(results.next());
+ float value = results.getFloat(1);
+ Assert.assertEquals(0f, value, 0f);
+ Assert.assertTrue(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_integer_01() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
IntegerColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][]
{ { 1234 } });
+
+ Assert.assertTrue(results.next());
+ int value = results.getInt(1);
+ Assert.assertEquals(1234, value);
+ Assert.assertFalse(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_integer_02() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
IntegerColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][]
{ { null } });
+
+ Assert.assertTrue(results.next());
+ int value = results.getInt(1);
+ Assert.assertEquals(0, value);
+ Assert.assertTrue(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_long_integer_01() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
LongIntegerColumn("Test", ResultSetMetaData.columnNullable, true) }, new
Object[][] { { 1234l } });
+
+ Assert.assertTrue(results.next());
+ long value = results.getLong(1);
+ Assert.assertEquals(1234, value);
+ Assert.assertFalse(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_long_integer_02() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
LongIntegerColumn("Test", ResultSetMetaData.columnNullable, true) }, new
Object[][] { { null } });
+
+ Assert.assertTrue(results.next());
+ long value = results.getLong(1);
+ Assert.assertEquals(0, value);
+ Assert.assertTrue(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_short_integer_01() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
ShortIntegerColumn("Test", ResultSetMetaData.columnNullable, true) }, new
Object[][] { { (short)1234 } });
+
+ Assert.assertTrue(results.next());
+ short value = results.getShort(1);
+ Assert.assertEquals((short)1234, value);
+ Assert.assertFalse(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+
+ /**
+ * Test retrieving meta column values
+ * @throws SQLException
+ */
+ @Test
+ public void meta_result_set_short_integer_02() throws SQLException {
+ MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new
ShortIntegerColumn("Test", ResultSetMetaData.columnNullable, true) }, new
Object[][] { { null } });
+
+ Assert.assertTrue(results.next());
+ short value = results.getShort(1);
+ Assert.assertEquals((short)0, value);
+ Assert.assertTrue(results.wasNull());
+
+ Assert.assertFalse(results.next());
+ results.close();
+ Assert.assertTrue(results.isClosed());
+ }
+}
Added:
jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/metadata/TestDatasetConnectionMetadata.java
URL:
http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/metadata/TestDatasetConnectionMetadata.java?rev=1471701&view=auto
==============================================================================
---
jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/metadata/TestDatasetConnectionMetadata.java
(added)
+++
jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/metadata/TestDatasetConnectionMetadata.java
Wed Apr 24 21:37:00 2013
@@ -0,0 +1,42 @@
+/**
+ * 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.mem.metadata;
+
+import java.sql.SQLException;
+
+import org.apache.jena.jdbc.JdbcCompatibility;
+import org.apache.jena.jdbc.connections.JenaConnection;
+import org.apache.jena.jdbc.mem.connections.MemConnection;
+import org.apache.jena.jdbc.metadata.results.AbstractDatabaseMetadataTests;
+
+import com.hp.hpl.jena.query.DatasetFactory;
+
+/**
+ * Database metadata tests for {@link MemConnection} implementation
+ *
+ */
+public class TestDatasetConnectionMetadata extends
AbstractDatabaseMetadataTests {
+
+ @Override
+ protected JenaConnection getConnection() throws SQLException {
+ return new MemConnection(DatasetFactory.createMem(),
JenaConnection.DEFAULT_HOLDABILITY,
+ JenaConnection.DEFAULT_AUTO_COMMIT,
JenaConnection.DEFAULT_ISOLATION_LEVEL, JdbcCompatibility.DEFAULT);
+ }
+
+}