/** * 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.statements; import java.sql.SQLException; import org.apache.jena.jdbc.connections.DatasetConnection; import org.apache.jena.query.* ; import org.apache.jena.update.GraphStoreFactory ; import org.apache.jena.update.UpdateExecutionFactory ; import org.apache.jena.update.UpdateProcessor ; import org.apache.jena.update.UpdateRequest ; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * A Jena JDBC statement over a {@link Dataset} * */ public class DatasetStatement extends JenaStatement { private static final Logger LOGGER = LoggerFactory.getLogger(DatasetStatement.class); private DatasetConnection dsConn; /** * Creates a new statement * * @param connection * Connection * @throws SQLException * Thrown if there is an error with the statement parameters */ public DatasetStatement(DatasetConnection connection) throws SQLException { this(connection, DEFAULT_TYPE, DEFAULT_FETCH_DIRECTION, DEFAULT_FETCH_SIZE, DEFAULT_HOLDABILITY, DEFAULT_AUTO_COMMIT, DEFAULT_TRANSACTION_LEVEL); } /** * Creates a new statement * * @param connection * Connection * @param type * Result Set type for result sets produced by this statement * @param fetchDir * Fetch Direction * @param fetchSize * Fetch Size * @param holdability * Result Set holdability * @param autoCommit * Auto commit behavior * @param transactionLevel * Transaction level * @throws SQLException * Thrown if there is an error with the statement parameters * */ public DatasetStatement(DatasetConnection connection, int type, int fetchDir, int fetchSize, int holdability, boolean autoCommit, int transactionLevel) throws SQLException { super(connection, type, fetchDir, fetchSize, holdability, autoCommit, transactionLevel); this.dsConn = connection; } /** * Creates a query execution over the dataset */ @Override protected QueryExecution createQueryExecution(Query q) { return QueryExecutionFactory.create(q, this.dsConn.getJenaDataset()); } /** * Creates an update execution over the dataset */ @Override protected UpdateProcessor createUpdateProcessor(UpdateRequest u) { return UpdateExecutionFactory.create(u, GraphStoreFactory.create(this.dsConn.getJenaDataset())); } @Override protected void beginTransaction(ReadWrite type) throws SQLException { try { this.dsConn.begin(type); } catch (SQLException e) { // Throw as-is throw e; } catch (Exception e) { LOGGER.error("Unexpected error starting a transaction", e); throw new SQLException("Unexpected error starting a transaction", e); } } @Override protected void commitTransaction() throws SQLException { try { this.dsConn.commit(); } catch (SQLException e) { // Throw as-is throw e; } catch (Exception e) { LOGGER.error("Unexpected error committing a transaction", e); throw new SQLException("Unexpected error committing a transaction", e); } } @Override protected void rollbackTransaction() throws SQLException { try { this.dsConn.rollback(); } catch (SQLException e) { // Throw as-is throw e; } catch (Exception e) { LOGGER.error("Unexpected error rolling back a transaction", e); throw new SQLException("Unexpected error rolling back a transaction", e); } } @Override protected boolean hasActiveTransaction() { return this.dsConn.getJenaDataset().isInTransaction(); } }