package org.aksw.sparqlify.core.sparql;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.aksw.commons.collections.SinglePrefetchIterator;
import org.aksw.jena_sparql_api.views.RestrictedExpr;
import org.apache.jena.sparql.core.Var;
import org.apache.jena.sparql.engine.binding.Binding;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.RowMapper;
import com.google.common.collect.Multimap;
public class IteratorResultSetSparqlifyBinding
extends SinglePrefetchIterator<Binding>
{
private static final Logger logger = LoggerFactory.getLogger(IteratorResultSetSparqlifyBinding.class);
// Canonicalize values, e.g. 20.0 -> 2.0e1
//private static CanonicalizeLiteral canonicalizer = CanonicalizeLiteral.get();
private Connection conn;
private ResultSet rs;
//private NodeExprSubstitutor substitutor;// = new NodeExprSubstitutor(sparqlVarMap);
//private Multimap<Var, RestrictedExpr> sparqlVarMap;
//private transient ResultSetMetaData meta;
//private Var rowIdVar;
private RowMapper<Binding> rowMapper;
private long nextRowId;
public IteratorResultSetSparqlifyBinding(Connection conn, ResultSet rs, Multimap<Var, RestrictedExpr> sparqlVarMap)
{
this(conn, rs, sparqlVarMap, 0, null);
}
public IteratorResultSetSparqlifyBinding(Connection conn, ResultSet rs, Multimap<Var, RestrictedExpr> sparqlVarMap, long nextRowId, String rowIdName)
{
this(conn, rs, nextRowId, new RowMapperSparqlifyCombined(sparqlVarMap, rowIdName));
// this.conn = conn;
// this.rs = rs;
// //this.sparqlVarMap = sparqlVarMap;
// this.nextRowId = nextRowId;
//
// this.rowMapper = new RowMapperSparqlifyBinding(sparqlVarMap);
//
// //this.rowIdVar = rowIdName == null ? null : Var.alloc(rowIdName);
//
// try {
// this.meta = rs.getMetaData();
// } catch (SQLException e) {
// throw new RuntimeException(e);
// }
}
public IteratorResultSetSparqlifyBinding(Connection conn, ResultSet rs, long nextRowId, RowMapper<Binding> rowMapper) {
this.conn = conn;
this.rs = rs;
this.nextRowId = nextRowId;
this.rowMapper = rowMapper;
}
// public IteratorResultSetSparqlifyBinding(ResultSet rs, Multimap<Var, RestrictedExpr> sparqlVarMap)
// {
// this.rs = rs;
// this.sparqlVarMap = sparqlVarMap;
//
//// ResultSetMetaData meta;
//// try {
//// rs.next();
//// System.out.println("h__4: " + rs.getObject("h__4"));
//// System.out.println("AGE: " + rs.getObject("AGE"));
////
////
//// meta = rs.getMetaData();
//// for(int i = 1; i <= meta.getColumnCount(); ++i) {
//// String colName = meta.getColumnName(i);
////
//// System.out.println("Column [" + i + "]: " + colName);
//// }
//// } catch (SQLException e) {
//// // TODO Auto-generated catch block
//// e.printStackTrace();
//// }
//
// }
// public static Binding fetchBinding(ResultSetMetaData meta, ResultSet rs, Multimap<Var, RestrictedExpr> sparqlVarMap) {
//
// }
@Override
protected Binding prefetch() throws Exception {
if(!rs.next()) {
return super.finish();
}
long rowId = nextRowId++;
Binding result = rowMapper.mapRow(rs, (int)rowId);
return result;
}
@Override
public void close()
{
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
logger.warn("Something went wrong", e);
}
}
// if(conn != null) {
// try {
// conn.commit();
// } catch (SQLException e) {
// logger.warn("Something went wrong", e);
// }
// }
}
}