package org.aksw.sparqlify.core.sparql;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.aksw.jena_sparql_api.core.QueryExecutionFactoryBackQuery;
import org.aksw.sparqlify.core.interfaces.SparqlSqlStringRewriter;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecution;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Query execution that obtains fresh connections for each query from a datasource
*
* @author Claus Stadler <cstadler@informatik.uni-leipzig.de>
*
*/
public class QueryExecutionFactorySparqlifyDs
extends QueryExecutionFactoryBackQuery
{
private static final Logger logger = LoggerFactory.getLogger(QueryExecutionFactorySparqlifyDs.class);
private SparqlSqlStringRewriter rewriter;
private DataSource dataSource;
public QueryExecutionFactorySparqlifyDs(SparqlSqlStringRewriter rewriter, DataSource dataSource)
{
this.rewriter = rewriter;
this.dataSource = dataSource;
}
public DataSource getDataSource() {
return dataSource;
}
public SparqlSqlStringRewriter getRewriter() {
return rewriter;
}
@Override
public QueryExecution createQueryExecution(Query query) {
//System.out.println(query);
logger.info("Created qef for query: " + query);
Connection conn = null;
try {
conn = dataSource.getConnection();
logger.debug("Opened connection: [" + conn + "]");
// Turning off auto commit is a prerequisite for streaming result sets
// (at least on PostgreSQL)
conn.setAutoCommit(false);
QueryExecution result = new QueryExecutionSparqlify(rewriter, conn, true, query, this);
//conn.commit();
return result;
} catch (SQLException e) {
// If something goes wrong in the iterator creation, close the connection again
if(conn != null) {
try {
conn.rollback();
conn.close();
} catch(SQLException f) {
throw new RuntimeException(f);
}
}
throw new RuntimeException(e);
}
}
@Override
public String getId() {
// TODO Implement
throw new RuntimeException("Implement properly");
}
@Override
public String getState() {
// TODO Implement
throw new RuntimeException("Implement properly");
}
}