package org.aksw.sparqlify.core.algorithms;
import org.aksw.sparqlify.algebra.sql.nodes.SqlOp;
import org.aksw.sparqlify.core.domain.input.SparqlSqlOpRewrite;
import org.aksw.sparqlify.core.domain.input.SparqlSqlStringRewrite;
import org.aksw.sparqlify.core.interfaces.SparqlSqlOpRewriter;
import org.aksw.sparqlify.core.interfaces.SparqlSqlStringRewriter;
import org.aksw.sparqlify.core.sql.algebra.serialization.SqlOpSerializer;
import org.apache.jena.query.Query;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SparqlSqlStringRewriterImpl
implements SparqlSqlStringRewriter
{
private static final Logger logger = LoggerFactory.getLogger(SparqlSqlStringRewriterImpl.class);
private SparqlSqlOpRewriter sparqlSqlOpRewriter;
private SqlOpSerializer sqlOpSerializer;
public SparqlSqlStringRewriterImpl(
SparqlSqlOpRewriter sparqlSqlOpRewriter,
SqlOpSerializer sqlOpSerializer)
{
this.sparqlSqlOpRewriter = sparqlSqlOpRewriter;
this.sqlOpSerializer = sqlOpSerializer;
}
public SparqlSqlOpRewriter getSparqlSqlOpRewriter() {
return sparqlSqlOpRewriter;
}
public SqlOpSerializer getSqlOpSerializer() {
return sqlOpSerializer;
}
@Override
public SparqlSqlStringRewrite rewrite(Query query) {
SparqlSqlOpRewrite rewrite = sparqlSqlOpRewriter.rewrite(query);
SqlOp sqlOp = rewrite.getSqlOp();
String sqlQueryString = sqlOpSerializer.serialize(sqlOp);
SparqlSqlStringRewrite result = new SparqlSqlStringRewrite(sqlQueryString, rewrite.isEmptyResult(), rewrite.getVarDefinition(), rewrite.getProjectionOrder());
logger.info("Variable Definitions:\n" + rewrite.getVarDefinition().toPrettyString());
logger.debug("Sql Query:\n" + result.getSqlQueryString());
return result;
}
}