/**
* 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.connections;
import java.net.MalformedURLException ;
import java.net.URL ;
import java.sql.* ;
import java.sql.ResultSet ;
import java.util.HashMap ;
import java.util.Properties ;
import org.apache.jena.graph.Node ;
import org.apache.jena.graph.NodeFactory ;
import org.apache.jena.jdbc.JdbcCompatibility ;
import org.apache.jena.jdbc.postprocessing.ResultsEcho ;
import org.apache.jena.jdbc.preprocessing.Echo ;
import org.apache.jena.jdbc.results.AskResults ;
import org.apache.jena.jdbc.results.SelectResults ;
import org.apache.jena.jdbc.results.TripleIteratorResults ;
import org.apache.jena.jdbc.results.metadata.AskResultsMetadata ;
import org.apache.jena.jdbc.results.metadata.TripleResultsMetadata ;
import org.apache.jena.jdbc.utils.TestUtils ;
import org.apache.jena.query.* ;
import org.apache.jena.sparql.core.Quad ;
import org.apache.jena.system.JenaSystem ;
import org.apache.jena.update.UpdateFactory ;
import org.apache.jena.update.UpdateRequest ;
import org.junit.Assert ;
import org.junit.Assume ;
import org.junit.Test ;
/**
* Abstract tests for {@link JenaConnection} implementations
*
*/
public abstract class AbstractJenaConnectionTests {
static {
JenaSystem.init() ;
}
/**
* Method which derived test classes must implement to provide a connection
* to an empty database for testing
*
* @return Connection
* @throws SQLException
*/
protected abstract JenaConnection getConnection() throws SQLException;
/**
* 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 JenaConnection getConnection(Dataset ds) throws SQLException;
/**
* Method which indicates whether a named graph is being used as the default
* graph since some tests need to know this in order to adjust SPARQL
* Updates issued appropriately
* <p>
* By default assumed to be false, override if you need to make it true for
* your connection
* </p>
*
* @return Whether a named graph is used as the default graph
*/
protected boolean usesNamedGraphAsDefault() {
return false;
}
/**
* Method which indicates whether the connection being tested supports query
* timeouts
*
* @return True if query timeouts are supported
*/
protected boolean supportsTimeouts() {
return true;
}
/**
* Method which returns the name of the default graph when a named graph is
* being used as the default graph
*
* @return Named Graph being used as the default graph
* @throws SQLException
* Thrown if this feature is not being used
*/
protected String getDefaultGraphName() throws SQLException {
throw new SQLException(
"Named Default Graph not used by these tests, please override getDefaultGraphName() if your connection uses this feature");
}
/**
* Create and close a connection to an empty database
*
* @throws SQLException
*/
@Test
public void connection_create_close_01() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Create and close a connection to an explicitly provided empty database
*
* @throws SQLException
*/
@Test
public void connection_create_close_02() throws SQLException {
JenaConnection conn = this.getConnection(DatasetFactory.createTxnMem());
Assert.assertFalse(conn.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Retrieve and close a statement
*
* @throws SQLException
*/
@Test
public void connection_get_statement_01() throws SQLException {
JenaConnection conn = this.getConnection();
Statement stmt = conn.createStatement();
Assert.assertNotNull(stmt);
Assert.assertFalse(stmt.isClosed());
stmt.close();
Assert.assertTrue(stmt.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Trying to retrieve a statement from a closed connection is an error
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_get_statement_02() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
Assert.assertTrue(conn.isClosed());
// Trying to create a statement after the connection is closed is an
// error
conn.createStatement();
}
/**
* Trying to use a statement from a closed connection is an error
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_get_statement_03() throws SQLException {
JenaConnection conn = this.getConnection();
Statement stmt = conn.createStatement();
Assert.assertNotNull(stmt);
Assert.assertFalse(stmt.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
// Trying to use a statement after the connection is closed is an error
stmt.execute("SELECT * { ?s ?p ?o }");
}
/**
* Runs a SELECT query on an empty database and checks it returns empty
* results
*
* @throws SQLException
*/
@Test
public void connection_statement_query_select_01() throws SQLException {
JenaConnection conn = this.getConnection();
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT * WHERE { ?s ?p ?o }");
Assert.assertNotNull(rset);
// 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(stmt.isClosed());
// Close things
rset.close();
Assert.assertTrue(rset.isClosed());
stmt.close();
Assert.assertTrue(stmt.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* 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_02() throws SQLException {
// Prepare a dataset
Dataset ds = DatasetFactory.createTxnMem();
ds.asDatasetGraph().add(
new Quad(NodeFactory.createURI("http://example/graph"), NodeFactory.createURI("http://example/subject"),
NodeFactory.createURI("http://example/predicate"), NodeFactory.createURI("http://example/object")));
// Work with the connection
JenaConnection conn = this.getConnection(ds);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT * WHERE { GRAPH ?g { ?s ?p ?o } }");
Assert.assertNotNull(rset);
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());
stmt.close();
Assert.assertTrue(stmt.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* 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.createTxnMem();
ds.asDatasetGraph().add(
new Quad(NodeFactory.createURI("http://example/graph"), NodeFactory.createURI("http://example/subject"),
NodeFactory.createURI("http://example/predicate"), NodeFactory.createURI("http://example/object")));
// Work with the connection
JenaConnection conn = this.getConnection(ds);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o } }");
Assert.assertNotNull(rset);
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());
}
/**
* Runs a SELECT query on a non-empty database and checks it returns
* non-empty results. Uses high compatibility level to ensure that column
* type detection doesn't consume the first row.
*
* @throws SQLException
*/
@Test
public void connection_statement_query_select_04() throws SQLException {
// Prepare a dataset
Dataset ds = DatasetFactory.createTxnMem();
ds.asDatasetGraph().add(
new Quad(NodeFactory.createURI("http://example/graph"), NodeFactory.createURI("http://example/subject"),
NodeFactory.createURI("http://example/predicate"), NodeFactory.createURI("http://example/object")));
// Work with the connection
JenaConnection conn = this.getConnection(ds);
conn.setJdbcCompatibilityLevel(JdbcCompatibility.HIGH);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT * WHERE { GRAPH ?g { ?s ?p ?o } }");
Assert.assertNotNull(rset);
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());
stmt.close();
Assert.assertTrue(stmt.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Tests use of prepared statements
*
* @throws SQLException
* @throws MalformedURLException
*/
@Test
public void connection_prepared_statement_select_01() throws SQLException, MalformedURLException {
// Prepare a dataset
Dataset ds = DatasetFactory.createTxnMem();
ds.asDatasetGraph().add(
new Quad(NodeFactory.createURI("http://example/graph"), NodeFactory.createURI("http://example/subject"),
NodeFactory.createURI("http://example/predicate"), NodeFactory.createURI("http://example/object")));
// Work with the connection
JenaConnection conn = this.getConnection(ds);
conn.setJdbcCompatibilityLevel(JdbcCompatibility.HIGH);
PreparedStatement stmt = conn.prepareStatement("SELECT * WHERE { GRAPH ? { ?s ?p ?o } }");
ParameterMetaData metadata = stmt.getParameterMetaData();
Assert.assertEquals(1, metadata.getParameterCount());
stmt.setURL(1, new URL("http://example/graph"));
ResultSet rset = stmt.executeQuery();
Assert.assertNotNull(rset);
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
// Check result set metadata
checkSelectMetadata(rset, 3);
// 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());
}
/**
* Tests use of prepared statements
*
* @throws SQLException
*/
@Test
public void connection_prepared_statement_select_02() throws SQLException {
// Prepare a dataset
Dataset ds = DatasetFactory.createTxnMem();
ds.asDatasetGraph().add(
new Quad(NodeFactory.createURI("http://example/graph"), NodeFactory.createURI("http://example/subject"),
NodeFactory.createURI("http://example/predicate"), NodeFactory.createLiteral("value")));
// Work with the connection
JenaConnection conn = this.getConnection(ds);
conn.setJdbcCompatibilityLevel(JdbcCompatibility.HIGH);
PreparedStatement stmt = conn.prepareStatement("SELECT * WHERE { GRAPH ?g { ?s ?p ? } }");
ParameterMetaData metadata = stmt.getParameterMetaData();
Assert.assertEquals(1, metadata.getParameterCount());
stmt.setString(1, "value");
ResultSet rset = stmt.executeQuery();
Assert.assertNotNull(rset);
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
// Check result set metadata
checkSelectMetadata(rset, 3);
// 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());
}
/**
* Tests use of prepared statements
*
* @throws SQLException
*/
@Test
public void connection_prepared_statement_select_03() throws SQLException {
// Prepare a dataset
Dataset ds = DatasetFactory.createTxnMem();
ds.asDatasetGraph().add(
new Quad(NodeFactory.createURI("http://example/graph"), NodeFactory.createURI("http://example/subject"),
NodeFactory.createURI("http://example/predicate"), NodeFactory.createLiteral("value")));
// Work with the connection
JenaConnection conn = this.getConnection(ds);
conn.setJdbcCompatibilityLevel(JdbcCompatibility.HIGH);
PreparedStatement stmt = conn.prepareStatement("SELECT * WHERE { GRAPH ?g { ?s ?p ? } }");
ParameterMetaData metadata = stmt.getParameterMetaData();
Assert.assertEquals(1, metadata.getParameterCount());
stmt.setNString(1, "value");
ResultSet rset = stmt.executeQuery();
Assert.assertNotNull(rset);
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
// Check result set metadata
checkSelectMetadata(rset, 3);
// 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());
}
/**
* Runs a SELECT query on a non-empty database with max rows set and checks
* that the appropriate number of rows are returned
*
* @throws SQLException
*/
@Test
public void connection_statement_query_select_max_rows_01() throws SQLException {
// Prepare a dataset
Dataset ds = TestUtils.generateDataset(3, 10, false);
// Work with the connection
JenaConnection conn = this.getConnection(ds);
Statement stmt = conn.createStatement();
stmt.setMaxRows(10);
ResultSet rset = stmt.executeQuery("SELECT * WHERE { GRAPH ?g { ?s ?p ?o } }");
Assert.assertNotNull(rset);
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
// Check result set metadata
checkSelectMetadata(rset, 4);
// Check expected number of rows
int count = 0;
while (rset.next()) {
count++;
}
Assert.assertEquals(10, count);
// 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());
}
/**
* Runs a SELECT query on a non-empty database with max rows set and checks
* that the appropriate number of rows are returned
*
* @throws SQLException
*/
@Test
public void connection_statement_query_select_max_rows_02() throws SQLException {
// Prepare a dataset
Dataset ds = TestUtils.generateDataset(3, 10, false);
// Work with the connection
JenaConnection conn = this.getConnection(ds);
Statement stmt = conn.createStatement();
// Set max rows to 10, note that if the query specifies a lower limit
// then that is respected
stmt.setMaxRows(10);
ResultSet rset = stmt.executeQuery("SELECT * WHERE { GRAPH ?g { ?s ?p ?o } } LIMIT 1");
Assert.assertNotNull(rset);
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
// Check result set metadata
checkSelectMetadata(rset, 4);
// Check expected number of rows
int count = 0;
while (rset.next()) {
count++;
}
Assert.assertEquals(1, count);
// 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());
}
/**
* Runs a SELECT query on a non-empty database with max rows set and checks
* that the appropriate number of rows are returned
*
* @throws SQLException
*/
@Test
public void connection_statement_query_select_max_rows_03() throws SQLException {
// Prepare a dataset
Dataset ds = TestUtils.generateDataset(3, 10, false);
// Work with the connection
JenaConnection conn = this.getConnection(ds);
Statement stmt = conn.createStatement();
// Set max rows to 20, note that if the query specifies a higher limit
// then the max rows are still enforced
stmt.setMaxRows(10);
ResultSet rset = stmt.executeQuery("SELECT * WHERE { GRAPH ?g { ?s ?p ?o } } LIMIT 50");
Assert.assertNotNull(rset);
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
// Check result set metadata
checkSelectMetadata(rset, 4);
// Check expected number of rows
int count = 0;
while (rset.next()) {
count++;
}
Assert.assertEquals(10, count);
// 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());
}
/**
* Runs a SELECT query on a non-empty database with timeout
*
* @throws SQLException
* @throws InterruptedException
*/
@Test(expected = SQLException.class)
public void connection_statement_query_select_timeout_01() throws SQLException, InterruptedException {
Assume.assumeTrue(this.supportsTimeouts());
// Prepare a dataset
Dataset ds = TestUtils.generateDataset(1, 1000, true);
// Work with the connection
JenaConnection conn = this.getConnection(ds);
Statement stmt = conn.createStatement();
// Set timeout to 1 second
stmt.setQueryTimeout(1);
try {
ResultSet rset = stmt.executeQuery("SELECT * WHERE { "
+ (this.usesNamedGraphAsDefault() ? "GRAPH <" + this.getDefaultGraphName() + "> {" : "")
+ " ?a ?b ?c . ?d ?e ?f . ?g ?h ?i " + (this.usesNamedGraphAsDefault() ? "}" : "") + "}");
// Note that we have to start iterating otherwise the query doesn't
// get executed and the timeout will never apply
while (rset.next()) {
Thread.sleep(100);
}
rset.close();
Assert.fail("Expected a query timeout");
} finally {
// Close things
stmt.close();
conn.close();
}
}
/**
* Runs a SELECT query on a non-empty database with timeout
*
* @throws SQLException
* @throws InterruptedException
*/
@Test(expected = SQLException.class)
public void connection_statement_query_select_timeout_02() throws SQLException, InterruptedException {
Assume.assumeTrue(this.supportsTimeouts());
// Prepare a dataset
Dataset ds = TestUtils.generateDataset(1, 1000, true);
// Work with the connection
JenaConnection conn = this.getConnection(ds);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// Set timeout to 1 second
stmt.setQueryTimeout(1);
try {
ResultSet rset = stmt.executeQuery("SELECT * WHERE { "
+ (this.usesNamedGraphAsDefault() ? "GRAPH <" + this.getDefaultGraphName() + "> {" : "")
+ " ?a ?b ?c . ?d ?e ?f . ?g ?h ?i . " + (this.usesNamedGraphAsDefault() ? "}" : "") + "}");
// Note that we have to start iterating otherwise the query doesn't
// get executed and the timeout will never apply
while (rset.next()) {
Thread.sleep(100);
}
rset.close();
Assert.fail("Expected a query timeout");
} finally {
// Close things
stmt.close();
conn.close();
}
}
/**
* Runs a SELECT query on a non-empty database with timeout
*
* @throws SQLException
* @throws InterruptedException
*/
@Test(expected = SQLException.class)
public void connection_statement_query_construct_timeout_01() throws SQLException, InterruptedException {
Assume.assumeTrue(this.supportsTimeouts());
// Prepare a dataset
Dataset ds = TestUtils.generateDataset(1, 1000, true);
// Work with the connection
JenaConnection conn = this.getConnection(ds);
Statement stmt = conn.createStatement();
// Set timeout to 1 second
stmt.setQueryTimeout(1);
try {
ResultSet rset = stmt.executeQuery("CONSTRUCT { ?s ?p ?o } WHERE { "
+ (this.usesNamedGraphAsDefault() ? "GRAPH <" + this.getDefaultGraphName() + "> {" : "")
+ " FILTER(<http://jena.apache.org/ARQ/function#wait>(1500)) " + (this.usesNamedGraphAsDefault() ? "}" : "") + "}");
// Note that we have to start iterating otherwise the query doesn't
// get executed and the timeout will never apply
while (rset.next()) {
Thread.sleep(100);
}
rset.close();
Assert.fail("Expected a query timeout");
} finally {
// Close things
stmt.close();
conn.close();
}
}
/**
* Runs a SELECT query on a non-empty database with timeout
*
* @throws SQLException
* @throws InterruptedException
*/
@Test(expected = SQLException.class)
public void connection_statement_query_construct_timeout_02() throws SQLException, InterruptedException {
Assume.assumeTrue(this.supportsTimeouts());
// Prepare a dataset
Dataset ds = TestUtils.generateDataset(1, 1000, true);
// Work with the connection
JenaConnection conn = this.getConnection(ds);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// Set timeout to 1 second
stmt.setQueryTimeout(1);
try {
ResultSet rset = stmt.executeQuery("CONSTRUCT { ?s ?p ?o } WHERE { "
+ (this.usesNamedGraphAsDefault() ? "GRAPH <" + this.getDefaultGraphName() + "> {" : "")
+ " FILTER(<http://jena.apache.org/ARQ/function#wait>(1500)) " + (this.usesNamedGraphAsDefault() ? "}" : "") + "}");
// Note that we have to start iterating otherwise the query doesn't
// get executed and the timeout will never apply
while (rset.next()) {
Thread.sleep(100);
}
rset.close();
Assert.fail("Expected a query timeout");
} finally {
// Close things
stmt.close();
conn.close();
}
}
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(String.class.getCanonicalName(), metadata.getColumnClassName(i));
Assert.assertEquals(Node.class.getCanonicalName(), metadata.getColumnTypeName(i));
Assert.assertEquals(Types.NVARCHAR, metadata.getColumnType(i));
}
}
/**
* Runs an ASK query on an empty database and checks it returns true
*
* @throws SQLException
*/
@Test
public void connection_statement_query_ask_01() throws SQLException {
JenaConnection conn = this.getConnection();
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("ASK WHERE { }");
Assert.assertNotNull(rset);
// 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());
stmt.close();
Assert.assertTrue(stmt.isClosed());
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(Node.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 {
JenaConnection conn = this.getConnection();
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("CONSTRUCT WHERE { ?s ?p ?o }");
Assert.assertNotNull(rset);
// Check result set metadata
checkConstructDescribeMetadata(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.createTxnMem();
ds.asDatasetGraph().add(
new Quad(NodeFactory.createURI("http://example/graph"), NodeFactory.createURI("http://example/subject"),
NodeFactory.createURI("http://example/predicate"), NodeFactory.createURI("http://example/object")));
// Work with the connection
JenaConnection conn = this.getConnection(ds);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("CONSTRUCT { ?s ?p ?o } WHERE { GRAPH ?g { ?s ?p ?o } }");
Assert.assertNotNull(rset);
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());
}
/**
* Runs a CONSTRUCT query on an empty database and checks it returns empty
* results
*
* @throws SQLException
*/
@Test
public void connection_statement_query_describe_01() throws SQLException {
JenaConnection conn = this.getConnection();
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("DESCRIBE <http://subject>");
Assert.assertNotNull(rset);
// Check result set metadata
checkConstructDescribeMetadata(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_describe_02() throws SQLException {
// Prepare a dataset
Dataset ds = DatasetFactory.createTxnMem();
ds.asDatasetGraph().add(
new Quad(NodeFactory.createURI("http://example/graph"), NodeFactory.createURI("http://example/subject"),
NodeFactory.createURI("http://example/predicate"), NodeFactory.createURI("http://example/object")));
// Work with the connection
JenaConnection conn = this.getConnection(ds);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("DESCRIBE ?s WHERE { GRAPH ?g { ?s ?p ?o } }");
Assert.assertNotNull(rset);
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 checkConstructDescribeMetadata(ResultSet results) throws SQLException {
// Check result set metadata
ResultSetMetaData metadata = results.getMetaData();
Assert.assertEquals(3, metadata.getColumnCount());
for (int i = 1; i <= TripleResultsMetadata.NUM_COLUMNS; i++) {
Assert.assertEquals(String.class.getCanonicalName(), metadata.getColumnClassName(i));
Assert.assertEquals(Node.class.getCanonicalName(), metadata.getColumnTypeName(i));
Assert.assertEquals(Types.NVARCHAR, metadata.getColumnType(i));
}
}
/**
* Does a basic read transaction
*
* @throws SQLException
*/
@Test
public void connection_transactions_01() throws SQLException {
// Set up connection
JenaConnection conn = this.getConnection(DatasetFactory.createTxnMem());
Assume.assumeNotNull(conn.getMetaData());
Assume.assumeTrue(conn.getMetaData().supportsTransactions());
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
conn.setAutoCommit(true);
// Make a read operation
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT * WHERE { ?s ?p ?o }");
Assert.assertNotNull(rset);
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
// Should have no rows
Assert.assertFalse(rset.next());
Assert.assertTrue(rset.isAfterLast());
// Close things
rset.close();
Assert.assertTrue(rset.isClosed());
stmt.close();
Assert.assertTrue(stmt.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Does a basic write transaction
*
* @throws SQLException
*/
@Test
public void connection_transactions_02() throws SQLException {
// Set up connection
JenaConnection conn = this.getConnection(DatasetFactory.createTxnMem());
Assume.assumeNotNull(conn.getMetaData());
Assume.assumeTrue(conn.getMetaData().supportsTransactions());
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
conn.setAutoCommit(true);
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
// Make a write operation
Statement stmt = conn.createStatement();
stmt.executeUpdate("INSERT DATA { <http://x> <http://y> <http://z> }");
// Make a subsequent read, with auto-commit we should see some data
ResultSet rset = stmt.executeQuery("SELECT * WHERE { ?s ?p ?o }");
Assert.assertNotNull(rset);
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
// Should have one row
Assert.assertTrue(rset.next());
Assert.assertFalse(rset.next());
// Close things
rset.close();
Assert.assertTrue(rset.isClosed());
stmt.close();
Assert.assertTrue(stmt.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Does a basic write transaction without auto-commit and then commits it
*
* @throws SQLException
*/
@Test
public void connection_transactions_03() throws SQLException {
// Set up connection
JenaConnection conn = this.getConnection(DatasetFactory.createTxnMem());
Assume.assumeNotNull(conn.getMetaData());
Assume.assumeTrue(conn.getMetaData().supportsTransactions());
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
conn.setAutoCommit(false);
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
// Make a write operation
Statement stmt = conn.createStatement();
stmt.executeUpdate("INSERT DATA { <http://x> <http://y> <http://z> }");
// Make a subsequent read, with auto-commit we should see some data
ResultSet rset = stmt.executeQuery("SELECT * WHERE { ?s ?p ?o }");
Assert.assertNotNull(rset);
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
// Should have one row
Assert.assertTrue(rset.next());
Assert.assertFalse(rset.next());
rset.close();
Assert.assertTrue(rset.isClosed());
// Commit the transaction
conn.commit();
// Check we still can read the data
rset = stmt.executeQuery("SELECT * WHERE { ?s ?p ?o }");
Assert.assertNotNull(rset);
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
// Should have one row
Assert.assertTrue(rset.next());
Assert.assertFalse(rset.next());
rset.close();
Assert.assertTrue(rset.isClosed());
// Close things
stmt.close();
Assert.assertTrue(stmt.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Does a basic write transaction without auto-commit and then rolls it back
*
* @throws SQLException
*/
@Test
public void connection_transactions_04() throws SQLException {
// Set up connection
JenaConnection conn = this.getConnection();
Assume.assumeNotNull(conn.getMetaData());
Assume.assumeTrue(conn.getMetaData().supportsTransactions());
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
conn.setAutoCommit(false);
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
// Make a write operation
Statement stmt = conn.createStatement();
stmt.executeUpdate("INSERT DATA { <http://x> <http://y> <http://z> }");
// Make a subsequent read, with auto-commit we should see some data
ResultSet rset = stmt.executeQuery("SELECT * WHERE { ?s ?p ?o }");
Assert.assertNotNull(rset);
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
// Should have one row
Assert.assertTrue(rset.next());
Assert.assertFalse(rset.next());
rset.close();
Assert.assertTrue(rset.isClosed());
// Rollback the transaction
conn.rollback();
// Check we can no longer read the data
rset = stmt.executeQuery("SELECT * WHERE { ?s ?p ?o }");
Assert.assertNotNull(rset);
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
// Should have no rows
Assert.assertFalse(rset.next());
rset.close();
Assert.assertTrue(rset.isClosed());
// Close things
stmt.close();
Assert.assertTrue(stmt.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Tests error cases for transactions
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_transaction_bad_01() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
// Trying to commit a transaction on a closed connection should be an
// error
conn.commit();
}
/**
* Tests error cases for transactions
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_transaction_bad_02() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
// Trying to commit a transaction on a closed connection should be an
// error
conn.rollback();
}
/**
* Test error cases for creating statements
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_statement_bad_creation_01() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
// Creating a statement after closing should be an error
conn.createStatement();
}
/**
* Test error cases for creating statements
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_statement_bad_creation_02() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
// Creating a statement after closing should be an error
conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
}
/**
* Test error cases for creating statements
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_statement_bad_creation_03() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
// Creating a statement after closing should be an error
conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.HOLD_CURSORS_OVER_COMMIT);
}
/**
* Test error cases for creating statements
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_statement_bad_creation_04() throws SQLException {
JenaConnection conn = this.getConnection();
try {
// Creating a SCOLL_SENSITIVE statement is not supported
conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
} finally {
conn.close();
}
}
/**
* Test error cases for creating statements
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_statement_bad_creation_05() throws SQLException {
JenaConnection conn = this.getConnection();
try {
// Creating a CONCUR_UPDATABLE statement is not supported
conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
} finally {
conn.close();
}
}
/**
* Test error cases for creating prepared statements
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_prepared_statement_bad_creation_01() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
// Creating a statement after closing should be an error
conn.prepareStatement("SELECT * WHERE { ?s ?p ?o }");
}
/**
* Test error cases for creating prepared statements
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_prepared_statement_bad_creation_02() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
// Creating a statement after closing should be an error
conn.prepareStatement("SELECT * WHERE { ?s ?p ?o }", 1);
}
/**
* Test error cases for creating prepared statements
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_prepared_statement_bad_creation_03() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
// Creating a statement after closing should be an error
conn.prepareStatement("SELECT * WHERE { ?s ?p ?o }", new int[0]);
}
/**
* Test error cases for creating prepared statements
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_prepared_statement_bad_creation_04() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
// Creating a statement after closing should be an error
conn.prepareStatement("SELECT * WHERE { ?s ?p ?o }", new String[0]);
}
/**
* Test error cases for creating prepared statements
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_prepared_statement_bad_creation_05() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
// Creating a statement after closing should be an error
conn.prepareStatement("SELECT * WHERE { ?s ?p ?o }", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
}
/**
* Test error cases for creating prepared statements
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_prepared_statement_bad_creation_06() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
// Creating a statement after closing should be an error
conn.prepareStatement("SELECT * WHERE { ?s ?p ?o }", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY,
ResultSet.CLOSE_CURSORS_AT_COMMIT);
}
/**
* Test error cases for creating prepared statements
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_prepared_statement_bad_creation_07() throws SQLException {
JenaConnection conn = this.getConnection();
try {
// Creating a statement with SCROLL_SENSITIVE is not supported
conn.prepareStatement("SELECT * WHERE { ?s ?p ?o }", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
} finally {
conn.close();
}
}
/**
* Test error cases for creating prepared statements
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_prepared_statement_bad_creation_08() throws SQLException {
JenaConnection conn = this.getConnection();
try {
// Creating a statement with CONCUR_UPDATABLE is not supported
conn.prepareStatement("SELECT * WHERE { ?s ?p ?o }", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
} finally {
conn.close();
}
}
/**
* Runs a batch of operations and checks the results results
*
* @throws SQLException
*/
@Test
public void connection_statement_batch_01() throws SQLException {
JenaConnection conn = this.getConnection();
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
Statement stmt = conn.createStatement();
// Create and execute a batch
stmt.addBatch("SELECT * WHERE { ?s ?p ?o }");
int[] batchResults = stmt.executeBatch();
Assert.assertEquals(1, batchResults.length);
// Expect first result set returned to be SELECT results
Assert.assertEquals(batchResults[0], Statement.SUCCESS_NO_INFO);
ResultSet rset = stmt.getResultSet();
Assert.assertNotNull(rset);
// 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(stmt.isClosed());
// Expect there to be no further results
Assert.assertFalse(stmt.getMoreResults());
Assert.assertTrue(rset.isClosed()); // Should cause previous result set
// to be closed
// Close things
rset.close();
Assert.assertTrue(rset.isClosed());
stmt.close();
Assert.assertTrue(stmt.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Runs a batch of operations and checks the results results
*
* @throws SQLException
*/
@Test
public void connection_statement_batch_02() throws SQLException {
JenaConnection conn = this.getConnection();
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
Statement stmt = conn.createStatement();
// Create and execute a batch
stmt.addBatch("SELECT * WHERE { ?s ?p ?o }");
stmt.addBatch("ASK WHERE { }");
int[] batchResults = stmt.executeBatch();
Assert.assertEquals(2, batchResults.length);
// Expect first result set returned to be SELECT results
Assert.assertEquals(batchResults[0], Statement.SUCCESS_NO_INFO);
ResultSet rset = stmt.getResultSet();
Assert.assertNotNull(rset);
// 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(stmt.isClosed());
// Expect there to be a further ASK result set
Assert.assertEquals(batchResults[1], Statement.SUCCESS_NO_INFO);
Assert.assertTrue(stmt.getMoreResults());
Assert.assertTrue(rset.isClosed()); // Should close the previous result
// set
rset = stmt.getResultSet();
Assert.assertNotNull(rset);
// 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(AskResultsMetadata.COLUMN_LABEL_ASK));
Assert.assertFalse(rset.next());
Assert.assertTrue(rset.isAfterLast());
// Close things
rset.close();
Assert.assertTrue(rset.isClosed());
stmt.close();
Assert.assertTrue(stmt.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Runs a batch of operations and checks the results results
*
* @throws SQLException
*/
@Test
public void connection_statement_batch_03() throws SQLException {
JenaConnection conn = this.getConnection();
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
// This test needs scroll insensitive result sets as otherwise the first
// SELECT may see data from the update if the underlying connection does
// not have suitable transaction isolation
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// Create and execute a batch
stmt.addBatch("SELECT * WHERE { ?s ?p ?o }");
if (this.usesNamedGraphAsDefault()) {
stmt.addBatch("INSERT DATA { GRAPH <" + this.getDefaultGraphName() + "> { <http://x> <http://y> <http://z> } }");
} else {
stmt.addBatch("INSERT DATA { <http://x> <http://y> <http://z> }");
}
stmt.addBatch("SELECT * WHERE { ?s ?p ?o }");
int[] batchResults = stmt.executeBatch();
Assert.assertEquals(3, batchResults.length);
// Expect first result set returned to be SELECT results
Assert.assertEquals(batchResults[0], Statement.SUCCESS_NO_INFO);
ResultSet rset = stmt.getResultSet();
Assert.assertNotNull(rset);
// 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(stmt.isClosed());
// Next results should be for the update so should return null for the
// result set
Assert.assertTrue(batchResults[1] >= 0);
Assert.assertTrue(stmt.getMoreResults());
rset = stmt.getResultSet();
Assert.assertNull(rset);
// Expect there to be a further SELECT result set
Assert.assertEquals(batchResults[2], Statement.SUCCESS_NO_INFO);
Assert.assertTrue(stmt.getMoreResults());
rset = stmt.getResultSet();
Assert.assertNotNull(rset);
// Check result set metadata
checkSelectMetadata(rset, 3);
// Check result set
Assert.assertFalse(rset.isClosed());
Assert.assertTrue(rset.isBeforeFirst());
Assert.assertTrue(rset.next()); // Should now be a row because previous
// command in batch inserted data
Assert.assertFalse(rset.next());
Assert.assertTrue(rset.isAfterLast());
// Close things
rset.close();
Assert.assertTrue(rset.isClosed());
stmt.close();
Assert.assertTrue(stmt.isClosed());
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Runs a batch of operations and checks the results results
*
* @throws SQLException
*/
@Test
public void connection_statement_batch_04() throws SQLException {
JenaConnection conn = this.getConnection();
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
Statement stmt = conn.createStatement();
// Create and execute a batch
stmt.addBatch("SELECT * WHERE { ?s ?p ?o }");
stmt.addBatch("ASK WHERE { }");
int[] batchResults = stmt.executeBatch();
Assert.assertEquals(2, batchResults.length);
Assert.assertEquals(batchResults[0], Statement.SUCCESS_NO_INFO);
Assert.assertEquals(batchResults[1], Statement.SUCCESS_NO_INFO);
// Closing the statement should clean up any open result sets even if we
// haven't retrieved them yet
stmt.close();
Assert.assertTrue(stmt.isClosed());
// Clean up
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Runs a batch of operations and checks the results results
*
* @throws SQLException
*/
@Test
public void connection_statement_batch_05() throws SQLException {
JenaConnection conn = this.getConnection();
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
Statement stmt = conn.createStatement();
// Create and execute a batch
stmt.addBatch("SELECT * WHERE { ?s ?p ?o }");
stmt.addBatch("ASK WHERE { }");
stmt.addBatch("CONSTRUCT WHERE { ?s ?p ?o }");
int[] batchResults = stmt.executeBatch();
Assert.assertEquals(3, batchResults.length);
Assert.assertEquals(batchResults[0], Statement.SUCCESS_NO_INFO);
Assert.assertEquals(batchResults[1], Statement.SUCCESS_NO_INFO);
Assert.assertEquals(batchResults[2], Statement.SUCCESS_NO_INFO);
// Get first result set
ResultSet rset = stmt.getResultSet();
Assert.assertTrue(rset instanceof SelectResults);
checkSelectMetadata(rset, 3);
// Grab the next result set leaving this one open
Assert.assertTrue(stmt.getMoreResults(Statement.KEEP_CURRENT_RESULT));
Assert.assertFalse(rset.isClosed());
ResultSet rset2 = stmt.getResultSet();
Assert.assertTrue(rset2 instanceof AskResults);
checkAskMetadata(rset2);
// Closing the statement should clean up any open result sets even if we
// haven't retrieved them yet or have previously moved past them but
// left them open
stmt.close();
Assert.assertTrue(stmt.isClosed());
Assert.assertTrue(rset.isClosed());
Assert.assertTrue(rset2.isClosed());
// Clean up
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Runs a batch of operations and checks the results results
*
* @throws SQLException
*/
@Test
public void connection_statement_batch_06() throws SQLException {
JenaConnection conn = this.getConnection();
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
Statement stmt = conn.createStatement();
// Create and execute a batch
stmt.addBatch("SELECT * WHERE { ?s ?p ?o }");
stmt.addBatch("ASK WHERE { }");
stmt.addBatch("CONSTRUCT WHERE { ?s ?p ?o }");
int[] batchResults = stmt.executeBatch();
Assert.assertEquals(3, batchResults.length);
Assert.assertEquals(batchResults[0], Statement.SUCCESS_NO_INFO);
Assert.assertEquals(batchResults[1], Statement.SUCCESS_NO_INFO);
Assert.assertEquals(batchResults[2], Statement.SUCCESS_NO_INFO);
// Get first result set
ResultSet rset = stmt.getResultSet();
Assert.assertTrue(rset instanceof SelectResults);
checkSelectMetadata(rset, 3);
// Close this and grab the next result set
Assert.assertTrue(stmt.getMoreResults(Statement.CLOSE_CURRENT_RESULT));
Assert.assertTrue(rset.isClosed());
ResultSet rset2 = stmt.getResultSet();
Assert.assertTrue(rset2 instanceof AskResults);
checkAskMetadata(rset2);
// Closing the statement should clean up any open result sets even if we
// haven't retrieved them yet or have previously moved past them but
// left them open
stmt.close();
Assert.assertTrue(stmt.isClosed());
Assert.assertTrue(rset2.isClosed());
// Clean up
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Runs a batch of operations and checks the results results
*
* @throws SQLException
*/
@Test
public void connection_statement_batch_07() throws SQLException {
JenaConnection conn = this.getConnection();
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
Statement stmt = conn.createStatement();
// Create and execute a batch
stmt.addBatch("SELECT * WHERE { ?s ?p ?o }");
stmt.addBatch("ASK WHERE { }");
stmt.addBatch("CONSTRUCT WHERE { ?s ?p ?o }");
stmt.addBatch("DESCRIBE <http://example>");
int[] batchResults = stmt.executeBatch();
Assert.assertEquals(4, batchResults.length);
Assert.assertEquals(batchResults[0], Statement.SUCCESS_NO_INFO);
Assert.assertEquals(batchResults[1], Statement.SUCCESS_NO_INFO);
Assert.assertEquals(batchResults[2], Statement.SUCCESS_NO_INFO);
Assert.assertEquals(batchResults[3], Statement.SUCCESS_NO_INFO);
// Get first result set
ResultSet rset = stmt.getResultSet();
Assert.assertTrue(rset instanceof SelectResults);
checkSelectMetadata(rset, 3);
// Leave open and grab the next result set
Assert.assertTrue(stmt.getMoreResults(Statement.KEEP_CURRENT_RESULT));
Assert.assertFalse(rset.isClosed());
ResultSet rset2 = stmt.getResultSet();
Assert.assertTrue(rset2 instanceof AskResults);
checkAskMetadata(rset2);
// Leave open and grab the next result set
Assert.assertTrue(stmt.getMoreResults(Statement.KEEP_CURRENT_RESULT));
Assert.assertFalse(rset.isClosed());
Assert.assertFalse(rset2.isClosed());
ResultSet rset3 = stmt.getResultSet();
Assert.assertTrue(rset3 instanceof TripleIteratorResults);
checkConstructDescribeMetadata(rset3);
// Grab next result set closing all previous
Assert.assertTrue(stmt.getMoreResults(Statement.CLOSE_ALL_RESULTS));
Assert.assertTrue(rset.isClosed());
Assert.assertTrue(rset2.isClosed());
Assert.assertTrue(rset3.isClosed());
ResultSet rset4 = stmt.getResultSet();
Assert.assertFalse(rset4.isClosed());
checkConstructDescribeMetadata(rset4);
// Closing the statement should clean up any open result sets even if we
// haven't retrieved them yet or have previously moved past them but
// left them open
stmt.close();
Assert.assertTrue(stmt.isClosed());
Assert.assertTrue(rset.isClosed());
Assert.assertTrue(rset2.isClosed());
// Clean up
conn.close();
Assert.assertTrue(conn.isClosed());
}
/**
* Runs a batch of operations and checks the results results
*
* @throws SQLException
*/
@Test
public void connection_statement_batch_08() throws SQLException {
JenaConnection conn = this.getConnection();
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
Statement stmt = conn.createStatement();
// Create a a batch
stmt.addBatch("SELECT * WHERE { ?s ?p ?o }");
stmt.addBatch("ASK WHERE { }");
stmt.addBatch("CONSTRUCT WHERE { ?s ?p ?o }");
stmt.addBatch("DESCRIBE <http://example>");
// Clear the batch
stmt.clearBatch();
int[] batchResults = stmt.executeBatch();
Assert.assertEquals(0, batchResults.length);
stmt.close();
conn.close();
}
/**
* Runs a batch of operations and checks the results results
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_statement_batch_09() throws SQLException {
JenaConnection conn = this.getConnection();
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
Statement stmt = conn.createStatement();
// Create and execute a batch
stmt.addBatch("SELECT * WHERE { ?s ?p ?o }");
stmt.addBatch("ASK WHERE { }");
stmt.addBatch("CONSTRUCT WHERE { ?s ?p ?o }");
int[] batchResults = stmt.executeBatch();
Assert.assertEquals(3, batchResults.length);
Assert.assertEquals(batchResults[0], Statement.SUCCESS_NO_INFO);
Assert.assertEquals(batchResults[1], Statement.SUCCESS_NO_INFO);
Assert.assertEquals(batchResults[2], Statement.SUCCESS_NO_INFO);
// Get first result set
ResultSet rset = stmt.getResultSet();
Assert.assertTrue(rset instanceof SelectResults);
checkSelectMetadata(rset, 3);
try {
// Not a valid option for what to do with previous results
stmt.getMoreResults(-1);
} finally {
stmt.close();
conn.close();
}
}
/**
* Runs a batch of operations and checks the results results
*
* @throws SQLException
*/
@Test
public void connection_statement_batch_10() throws SQLException {
JenaConnection conn = this.getConnection();
conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
Statement stmt = conn.createStatement();
int[] batchResults = stmt.executeBatch();
Assert.assertEquals(0, batchResults.length);
Assert.assertFalse(stmt.getMoreResults());
stmt.close();
conn.close();
}
/**
* Tests using batches with prepared statements
* @throws SQLException
* @throws MalformedURLException
*/
@Test
public void connection_prepared_statement_batch_01() throws SQLException, MalformedURLException {
JenaConnection conn = this.getConnection();
PreparedStatement stmt = conn.prepareStatement("SELECT * WHERE { ? ?p ?o }");
for (int i = 1; i <= 5; i++) {
stmt.setURL(1, new URL("http://example/" + i));
stmt.addBatch();
}
int[] batchResults = stmt.executeBatch();
Assert.assertEquals(5, batchResults.length);
// Expect all to be SELECT results
ResultSet rset = stmt.getResultSet();
checkSelectMetadata(rset, 2);
while (stmt.getMoreResults()) {
rset = stmt.getResultSet();
checkSelectMetadata(rset, 2);
}
stmt.close();
conn.close();
}
/**
* Tests pre-processor management operations
*
* @throws SQLException
*/
@Test
public void connection_pre_processors_01() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPreProcessors().hasNext());
// Adding a null pre-processor has no effect
conn.addPreProcessor(null);
Assert.assertFalse(conn.getPreProcessors().hasNext());
// Similarly so does removing a null pre-processor
conn.removePreProcessor(null);
Assert.assertFalse(conn.getPreProcessors().hasNext());
// Inserting a null pre-processor also has no effect
conn.insertPreProcessor(0, null);
Assert.assertFalse(conn.getPreProcessors().hasNext());
conn.close();
}
/**
* Tests pre-processor management operations
*
* @throws SQLException
*/
@Test(expected = IndexOutOfBoundsException.class)
public void connection_pre_processors_02() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPreProcessors().hasNext());
Echo echo = new Echo();
// Inserting at zero index should be safe
conn.insertPreProcessor(0, echo);
Assert.assertTrue(conn.getPreProcessors().hasNext());
// Inserting at some random index will cause an error
try {
conn.insertPreProcessor(50, echo);
} finally {
conn.close();
}
}
/**
* Tests pre-processor management operations
*
* @throws SQLException
*/
@Test
public void connection_pre_processors_03() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPreProcessors().hasNext());
// Add a pre-processor
Echo echo = new Echo();
conn.addPreProcessor(echo);
Assert.assertTrue(conn.getPreProcessors().hasNext());
// Remove it
conn.removePreProcessor(echo);
Assert.assertFalse(conn.getPreProcessors().hasNext());
conn.close();
}
/**
* Tests pre-processor management operations
*
* @throws SQLException
*/
@Test
public void connection_pre_processors_04() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPreProcessors().hasNext());
// Add a pre-processor
Echo echo = new Echo();
conn.addPreProcessor(echo);
Assert.assertTrue(conn.getPreProcessors().hasNext());
// Remove it
conn.removePreProcessor(0);
Assert.assertFalse(conn.getPreProcessors().hasNext());
conn.close();
}
/**
* Tests pre-processor management operations
*
* @throws SQLException
*/
@Test
public void connection_pre_processors_05() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPreProcessors().hasNext());
// Add a pre-processor
Echo echo = new Echo();
conn.addPreProcessor(echo);
Assert.assertTrue(conn.getPreProcessors().hasNext());
// Remove all
conn.clearPreProcessors();
Assert.assertFalse(conn.getPreProcessors().hasNext());
conn.close();
}
/**
* Tests pre-processor management operations
*
* @throws SQLException
*/
@Test
public void connection_pre_processors_06() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPreProcessors().hasNext());
// Add a pre-processor
Echo echo = new Echo();
conn.addPreProcessor(echo);
Assert.assertTrue(conn.getPreProcessors().hasNext());
// Apply the pre-processor
String input = "SELECT * WHERE { ?s ?p ?o }";
String output = conn.applyPreProcessors(input);
Assert.assertEquals(input, output);
conn.close();
}
/**
* Tests pre-processor management operations
*
* @throws SQLException
*/
@Test
public void connection_pre_processors_07() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPreProcessors().hasNext());
// Add a pre-processor
Echo echo = new Echo();
conn.addPreProcessor(echo);
Assert.assertTrue(conn.getPreProcessors().hasNext());
// Apply the pre-processor
Query input = QueryFactory.create("SELECT * WHERE { ?s ?p ?o }");
Query output = conn.applyPreProcessors(input);
Assert.assertEquals(input, output);
conn.close();
}
/**
* Tests pre-processor management operations
*
* @throws SQLException
*/
@Test
public void connection_pre_processors_08() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPreProcessors().hasNext());
// Add a pre-processor
Echo echo = new Echo();
conn.addPreProcessor(echo);
Assert.assertTrue(conn.getPreProcessors().hasNext());
// Apply the pre-processor
UpdateRequest input = UpdateFactory.create("DELETE WHERE { ?s ?p ?o }");
UpdateRequest output = conn.applyPreProcessors(input);
Assert.assertEquals(input, output);
conn.close();
}
/**
* Tests post-processor management operations
*
* @throws SQLException
*/
@Test
public void connection_post_processors_01() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPostProcessors().hasNext());
// Adding a null post-processor has no effect
conn.addPostProcessor(null);
Assert.assertFalse(conn.getPostProcessors().hasNext());
// Similarly so does removing a null post-processor
conn.removePostProcessor(null);
Assert.assertFalse(conn.getPostProcessors().hasNext());
// Inserting a null post-processor also has no effect
conn.insertPostProcessor(0, null);
Assert.assertFalse(conn.getPostProcessors().hasNext());
conn.close();
}
/**
* Tests post-processor management operations
*
* @throws SQLException
*/
@Test(expected = IndexOutOfBoundsException.class)
public void connection_post_processors_02() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPostProcessors().hasNext());
ResultsEcho echo = new ResultsEcho();
// Inserting at zero index should be safe
conn.insertPostProcessor(0, echo);
Assert.assertTrue(conn.getPostProcessors().hasNext());
// Inserting at some random index will cause an error
try {
conn.insertPostProcessor(50, echo);
} finally {
conn.close();
}
}
/**
* Tests post-processor management operations
*
* @throws SQLException
*/
@Test
public void connection_post_processors_03() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPostProcessors().hasNext());
// Add a post-processor
ResultsEcho echo = new ResultsEcho();
conn.addPostProcessor(echo);
Assert.assertTrue(conn.getPostProcessors().hasNext());
// Remove it
conn.removePostProcessor(echo);
Assert.assertFalse(conn.getPostProcessors().hasNext());
conn.close();
}
/**
* Tests post-processor management operations
*
* @throws SQLException
*/
@Test
public void connection_post_processors_04() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPostProcessors().hasNext());
// Add a post-processor
ResultsEcho echo = new ResultsEcho();
conn.addPostProcessor(echo);
Assert.assertTrue(conn.getPostProcessors().hasNext());
// Remove it
conn.removePostProcessor(0);
Assert.assertFalse(conn.getPostProcessors().hasNext());
conn.close();
}
/**
* Tests post-processor management operations
*
* @throws SQLException
*/
@Test
public void connection_post_processors_05() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.getPostProcessors().hasNext());
// Add a post-processor
ResultsEcho echo = new ResultsEcho();
conn.addPostProcessor(echo);
Assert.assertTrue(conn.getPostProcessors().hasNext());
// Remove all
conn.clearPostProcessors();
Assert.assertFalse(conn.getPostProcessors().hasNext());
conn.close();
}
/**
* Tests error cases trying to set invalid options
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_option_01() throws SQLException {
JenaConnection conn = this.getConnection();
try {
// Can't change catalog
conn.setCatalog("test");
} finally {
conn.close();
}
}
/**
* Tests error cases trying to set invalid options
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_bad_option_02() throws SQLException {
JenaConnection conn = this.getConnection();
try {
// Invalid holdability setting
conn.setHoldability(-1);
} finally {
conn.close();
}
}
/**
* Tests error cases trying to set invalid options
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_bad_option_03() throws SQLException {
JenaConnection conn = this.getConnection();
try {
// Invalid transaction isolation setting
conn.setTransactionIsolation(-1);
} finally {
conn.close();
}
}
/**
* Tests error cases around savepoints which are unsupported
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_savepoints_01() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.setSavepoint();
} finally {
conn.close();
}
}
/**
* Tests error cases around savepoints which are unsupported
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_savepoints_02() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.setSavepoint("test");
} finally {
conn.close();
}
}
/**
* Tests error cases around savepoints which are unsupported
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_savepoints_03() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.rollback(null);
} finally {
conn.close();
}
}
/**
* Tests error cases around savepoints which are unsupported
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_savepoints_04() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.releaseSavepoint(null);
} finally {
conn.close();
}
}
/**
* Tests error cases around type maps which are unsupported
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_type_map_01() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.setTypeMap(new HashMap<String, Class<?>>());
} finally {
conn.close();
}
}
/**
* Tests error cases around type maps which are unsupported
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_type_map_02() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.getTypeMap();
} finally {
conn.close();
}
}
/**
* Tests error cases for unsupported call functionality
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_call_01() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.prepareCall("test");
} finally {
conn.close();
}
}
/**
* Tests error cases for unsupported call functionality
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_call_02() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.prepareCall("test", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
} finally {
conn.close();
}
}
/**
* Tests error cases for unsupported call functionality
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_call_03() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.prepareCall("test", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT);
} finally {
conn.close();
}
}
/**
* Tests error cases for unsupported native sql functionality
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_native_sql_01() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.nativeSQL("test");
} finally {
conn.close();
}
}
/**
* Tests usage of client info
*
* @throws SQLException
*/
@Test
public void connection_client_info_01() throws SQLException {
JenaConnection conn = this.getConnection();
// Check initially empty
Properties ps = conn.getClientInfo();
Assert.assertNotNull(ps);
Assert.assertEquals(0, ps.size());
// Add a value and check it
conn.setClientInfo("key", "value");
ps = conn.getClientInfo();
Assert.assertNotNull(ps);
Assert.assertEquals(1, ps.size());
Assert.assertEquals("value", conn.getClientInfo("key"));
// Replace values with a new set and check
Properties props = new Properties();
props.put("a", 1);
props.put("b", 2);
conn.setClientInfo(props);
ps = conn.getClientInfo();
Assert.assertNotNull(ps);
Assert.assertEquals(2, ps.size());
conn.close();
}
/**
* Tests usage of client info
*
* @throws SQLException
*/
@Test
public void connection_client_info_02() throws SQLException {
JenaConnection conn = this.getConnection();
// Add and retrieve a key
conn.setClientInfo("key", "value");
String value = conn.getClientInfo("key");
Assert.assertEquals("value", value);
// Non-existent key should give null
Assert.assertNull(conn.getClientInfo("test"));
conn.close();
}
/**
* Check catalog retrieval
*
* @throws SQLException
*/
@Test
public void connection_catalog_01() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertNotNull(conn.getCatalog());
conn.close();
}
/**
* Check warnings usage
*
* @throws SQLException
*/
@Test
public void connection_warnings_01() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertNull(conn.getWarnings());
conn.close();
}
/**
* Check warnings usage
*
* @throws SQLException
*/
@Test
public void connection_warnings_02() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertNull(conn.getWarnings());
conn.setWarning("Test");
Assert.assertNotNull(conn.getWarnings());
conn.clearWarnings();
Assert.assertNull(conn.getWarnings());
conn.close();
}
/**
* Check warnings usage
*
* @throws SQLException
*/
@Test
public void connection_warnings_03() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertNull(conn.getWarnings());
conn.setWarning("Test", new Exception());
Assert.assertNotNull(conn.getWarnings());
conn.clearWarnings();
Assert.assertNull(conn.getWarnings());
conn.close();
}
/**
* Check warnings usage
*
* @throws SQLException
*/
@Test
public void connection_warnings_04() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertNull(conn.getWarnings());
conn.setWarning(new SQLWarning());
Assert.assertNotNull(conn.getWarnings());
conn.clearWarnings();
Assert.assertNull(conn.getWarnings());
conn.close();
}
/**
* Check warnings usage
*
* @throws SQLException
*/
@Test
public void connection_warnings_05() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertNull(conn.getWarnings());
conn.setWarning("A");
Assert.assertNotNull(conn.getWarnings());
conn.setWarning("B");
Assert.assertNotNull(conn.getWarnings());
Assert.assertNotNull(conn.getWarnings().getNextWarning());
conn.clearWarnings();
Assert.assertNull(conn.getWarnings());
conn.close();
}
/**
* Tests error cases for unsupported wrapper features
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_wrapper_01() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.isWrapperFor(JenaConnection.class);
} finally {
conn.close();
}
}
/**
* Tests error cases for unsupported wrapper features
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_wrapper_02() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.unwrap(JenaConnection.class);
} finally {
conn.close();
}
}
/**
* Tests error cases for unsupported create operations
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_create_01() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.createArrayOf("test", new Object[0]);
} finally {
conn.close();
}
}
/**
* Tests error cases for unsupported create operations
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_create_02() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.createBlob();
} finally {
conn.close();
}
}
/**
* Tests error cases for unsupported create operations
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_create_03() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.createClob();
} finally {
conn.close();
}
}
/**
* Tests error cases for unsupported create operations
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_create_04() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.createNClob();
} finally {
conn.close();
}
}
/**
* Tests error cases for unsupported create operations
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_create_05() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.createSQLXML();
} finally {
conn.close();
}
}
/**
* Tests error cases for unsupported create operations
*
* @throws SQLException
*/
@Test(expected = SQLFeatureNotSupportedException.class)
public void connection_bad_create_06() throws SQLException {
JenaConnection conn = this.getConnection();
try {
conn.createStruct("test", new Object[0]);
} finally {
conn.close();
}
}
/**
* Tests connection validity
*
* @throws SQLException
*/
@Test
public void connection_validity_01() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertTrue(conn.isValid(0));
conn.close();
Assert.assertFalse(conn.isValid(0));
}
/**
* Tests read only settings
*
* @throws SQLException
*/
@Test
public void connection_read_only_01() throws SQLException {
JenaConnection conn = this.getConnection();
Assert.assertFalse(conn.isReadOnly());
conn.setReadOnly(true);
Assert.assertTrue(conn.isReadOnly());
conn.close();
}
/**
* Tests read only settings
*
* @throws SQLException
*/
@Test(expected = SQLException.class)
public void connection_read_only_02() throws SQLException {
JenaConnection conn = this.getConnection();
conn.close();
// Error to set on a closed connection
conn.setReadOnly(true);
}
}