/**
Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved.
Contact:
SYSTAP, LLC DBA Blazegraph
2501 Calvert ST NW #106
Washington, DC 20008
licenses@blazegraph.com
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.bigdata.rdf.sail;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.openrdf.model.Literal;
import org.openrdf.model.URI;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.vocabulary.RDF;
import org.openrdf.model.vocabulary.RDFS;
import org.openrdf.query.QueryLanguage;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.sail.SailTupleQuery;
import com.bigdata.rdf.axioms.NoAxioms;
import com.bigdata.rdf.internal.XSD;
import com.bigdata.rdf.sparql.ast.QueryHints;
import com.bigdata.rdf.sparql.ast.QueryOptimizerEnum;
import com.bigdata.rdf.store.BD;
import com.bigdata.rdf.vocab.NoVocabulary;
public class TestStrBOp extends QuadsTestCase {
protected static final Logger log = Logger.getLogger(TestStrBOp.class);
protected static final boolean INFO = log.isInfoEnabled();
@Override
public Properties getProperties() {
Properties props = super.getProperties();
props.setProperty(BigdataSail.Options.AXIOMS_CLASS, NoAxioms.class.getName());
props.setProperty(BigdataSail.Options.VOCABULARY_CLASS, NoVocabulary.class.getName());
props.setProperty(BigdataSail.Options.TRUTH_MAINTENANCE, "false");
props.setProperty(BigdataSail.Options.JUSTIFY, "false");
props.setProperty(BigdataSail.Options.TEXT_INDEX, "false");
return props;
}
/**
*
*/
public TestStrBOp() {
}
/**
* @param arg0
*/
public TestStrBOp(String arg0) {
super(arg0);
}
public void testStr() throws Exception {
// final Sail sail = new MemoryStore();
// try {
// sail.initialize();
// final Repository repo = new SailRepository(sail);
final BigdataSail sail = getSail();
try {
sail.initialize();
final BigdataSailRepository repo = new BigdataSailRepository(sail);
final RepositoryConnection cxn = repo.getConnection();
try {
cxn.setAutoCommit(false);
final ValueFactory vf = sail.getValueFactory();
/*
* Create some terms.
*/
final URI X = vf.createURI(BD.NAMESPACE + "X");
final URI dt = vf.createURI(BD.NAMESPACE + "myDatatype");
// final Literal _1 = vf.createLiteral("foo");
final Literal _2 = vf.createLiteral("foo", XSD.STRING);
final Literal _3 = vf.createLiteral("foo", dt);
final Literal _4 = vf.createLiteral("foo", "EN");
final Literal _5 = vf.createLiteral(true);
final Literal _6 = vf.createLiteral(1000l);
/*
* Create some statements.
*/
cxn.add(X, RDF.TYPE, RDFS.RESOURCE);
// cxn.add(X, RDFS.LABEL, _1);
cxn.add(X, RDFS.LABEL, _2);
cxn.add(X, RDFS.LABEL, _3);
cxn.add(X, RDFS.LABEL, _4);
cxn.add(X, RDFS.LABEL, _5);
cxn.add(X, RDFS.LABEL, _6);
/*
* Note: The either flush() or commit() is required to flush the
* statement buffers to the database before executing any operations
* that go around the sail.
*/
cxn.commit();
if (log.isInfoEnabled()) {
log.info(((BigdataSailRepositoryConnection)cxn).getTripleStore().dumpStore());
}
{
String query =
// QueryOptimizerEnum.queryHint(QueryOptimizerEnum.None) +
"prefix bd: <"+BD.NAMESPACE+"> " +
"prefix rdf: <"+RDF.NAMESPACE+"> " +
"prefix rdfs: <"+RDFS.NAMESPACE+"> " +
"select ?p ?o " +
"where { " +
" hint:Query hint:"+QueryHints.OPTIMIZER+" \""+QueryOptimizerEnum.None+"\"."+
" ?s rdf:type rdfs:Resource . " +
// " ?s ?p \"foo\" . " +
" ?s ?p ?o . " +
// " filter(str(?o) = \"foo\" && regex(str(?o),\"foo\",\"i\")) " +
// " filter(?o = \"foo\") " +
" filter(str(?o) = \"foo\") " +
" filter(str(?p) = \""+RDFS.LABEL+"\") " +
"}";
final SailTupleQuery tupleQuery = (SailTupleQuery)
cxn.prepareTupleQuery(QueryLanguage.SPARQL, query);
tupleQuery.setIncludeInferred(false /* includeInferred */);
if (log.isInfoEnabled()) {
log.info(query);
// final BigdataSailTupleQuery bdTupleQuery =
// (BigdataSailTupleQuery) tupleQuery;
// final QueryRoot root = (QueryRoot) bdTupleQuery.getTupleExpr();
// final Projection p = (Projection) root.getArg();
// final TupleExpr tupleExpr = p.getArg();
// final SOpTreeBuilder stb = new SOpTreeBuilder();
// final SOpTree tree = stb.collectSOps(tupleExpr);
// log.info(tree);
// log.info(query);
final TupleQueryResult result = tupleQuery.evaluate();
while (result.hasNext()) {
log.info(result.next());
}
}
// final Collection<BindingSet> answer = new LinkedList<BindingSet>();
// answer.add(createBindingSet(
// new BindingImpl("a", paul),
// new BindingImpl("b", mary)
// ));
// answer.add(createBindingSet(
// new BindingImpl("a", brad),
// new BindingImpl("b", john)
// ));
//
// final TupleQueryResult result = tupleQuery.evaluate();
// compare(result, answer);
}
} finally {
cxn.close();
}
} finally {
if (sail instanceof BigdataSail)
((BigdataSail)sail).__tearDownUnitTest();//shutDown();
}
}
public void testRegex() throws Exception {
// final Sail sail = new MemoryStore();
// try {
// sail.initialize();
// final Repository repo = new SailRepository(sail);
final BigdataSail sail = getSail();
try {
sail.initialize();
final BigdataSailRepository repo = new BigdataSailRepository(sail);
final RepositoryConnection cxn = repo.getConnection();
try {
cxn.setAutoCommit(false);
final ValueFactory vf = sail.getValueFactory();
/*
* Create some terms.
*/
final URI X = vf.createURI(BD.NAMESPACE + "X");
final URI dt = vf.createURI(BD.NAMESPACE + "myDatatype");
// final Literal _1 = vf.createLiteral("foo");
final Literal _2 = vf.createLiteral("foo", XSD.STRING);
final Literal _3 = vf.createLiteral("foo", dt);
final Literal _4 = vf.createLiteral("foo", "EN");
final Literal _5 = vf.createLiteral(true);
final Literal _6 = vf.createLiteral(1000l);
/*
* Create some statements.
*/
cxn.add(X, RDF.TYPE, RDFS.RESOURCE);
// cxn.add(X, RDFS.LABEL, _1);
cxn.add(X, RDFS.LABEL, _2);
cxn.add(X, RDFS.LABEL, _3);
cxn.add(X, RDFS.LABEL, _4);
cxn.add(X, RDFS.LABEL, _5);
cxn.add(X, RDFS.LABEL, _6);
/*
* Note: The either flush() or commit() is required to flush the
* statement buffers to the database before executing any operations
* that go around the sail.
*/
cxn.commit();
if (log.isInfoEnabled()) {
log.info(((BigdataSailRepositoryConnection)cxn).getTripleStore().dumpStore());
}
{
String query =
// QueryOptimizerEnum.queryHint(QueryOptimizerEnum.None) +
"prefix bd: <"+BD.NAMESPACE+"> " +
"prefix rdf: <"+RDF.NAMESPACE+"> " +
"prefix rdfs: <"+RDFS.NAMESPACE+"> " +
"select ?o " +
"where { " +
" hint:Query hint:"+QueryHints.OPTIMIZER+" \""+QueryOptimizerEnum.None+"\"."+
" ?s rdf:type rdfs:Resource . " +
" ?s ?p ?o . " +
// " filter(regex(str(?o), \"FOO\")) " +
" filter(regex(str(?o), \"FOO\", \"i\")) " +
"}";
final SailTupleQuery tupleQuery = (SailTupleQuery)
cxn.prepareTupleQuery(QueryLanguage.SPARQL, query);
tupleQuery.setIncludeInferred(false /* includeInferred */);
if (log.isInfoEnabled()) {
log.info(query);
// final BigdataSailTupleQuery bdTupleQuery =
// (BigdataSailTupleQuery) tupleQuery;
// final QueryRoot root = (QueryRoot) bdTupleQuery.getTupleExpr();
// final Projection p = (Projection) root.getArg();
// final TupleExpr tupleExpr = p.getArg();
// final SOpTreeBuilder stb = new SOpTreeBuilder();
// final SOpTree tree = stb.collectSOps(tupleExpr);
// log.info(tree);
// log.info(query);
final TupleQueryResult result = tupleQuery.evaluate();
while (result.hasNext()) {
log.info(result.next());
}
}
// final Collection<BindingSet> answer = new LinkedList<BindingSet>();
// answer.add(createBindingSet(
// new BindingImpl("a", paul),
// new BindingImpl("b", mary)
// ));
// answer.add(createBindingSet(
// new BindingImpl("a", brad),
// new BindingImpl("b", john)
// ));
//
// final TupleQueryResult result = tupleQuery.evaluate();
// compare(result, answer);
}
} finally {
cxn.close();
}
} finally {
if (sail instanceof BigdataSail)
((BigdataSail)sail).__tearDownUnitTest();//shutDown();
}
}
/*
* PREFIX : <http://example.org/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s WHERE {
?s :p ?v .
FILTER(datatype(xsd:boolean(?v)) = xsd:boolean) .
}
*/
public void testCast() throws Exception {
// final Sail sail = new MemoryStore();
// try {
// sail.initialize();
// final Repository repo = new SailRepository(sail);
final BigdataSail sail = getSail();
try {
sail.initialize();
final BigdataSailRepository repo = new BigdataSailRepository(sail);
final RepositoryConnection cxn = repo.getConnection();
try {
cxn.setAutoCommit(false);
final ValueFactory vf = sail.getValueFactory();
/*
* Create some terms.
*/
final URI X = vf.createURI(BD.NAMESPACE + "X");
final URI dt = vf.createURI(BD.NAMESPACE + "myDatatype");
// final Literal _1 = vf.createLiteral("foo");
final Literal _2 = vf.createLiteral("foo", XSD.STRING);
final Literal _3 = vf.createLiteral("foo", dt);
final Literal _4 = vf.createLiteral("foo", "EN");
final Literal _5 = vf.createLiteral(true);
final Literal _6 = vf.createLiteral(1000l);
/*
* Create some statements.
*/
cxn.add(X, RDF.TYPE, RDFS.RESOURCE);
// cxn.add(X, RDFS.LABEL, _1);
cxn.add(X, RDFS.LABEL, _2);
cxn.add(X, RDFS.LABEL, _3);
cxn.add(X, RDFS.LABEL, _4);
cxn.add(X, RDFS.LABEL, _5);
cxn.add(X, RDFS.LABEL, _6);
/*
* Note: The either flush() or commit() is required to flush the
* statement buffers to the database before executing any operations
* that go around the sail.
*/
cxn.commit();
if (log.isInfoEnabled()) {
log.info(((BigdataSailRepositoryConnection)cxn).getTripleStore().dumpStore());
}
{
String query =
// QueryOptimizerEnum.queryHint(QueryOptimizerEnum.None) +
"prefix bd: <"+BD.NAMESPACE+"> " +
"prefix rdf: <"+RDF.NAMESPACE+"> " +
"prefix rdfs: <"+RDFS.NAMESPACE+"> " +
"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> " +
"select ?o " +
"where { " +
" hint:Query hint:"+QueryHints.OPTIMIZER+" \""+QueryOptimizerEnum.None+"\"."+
" ?s rdf:type rdfs:Resource . " +
" ?s ?p ?o . " +
" FILTER(datatype(xsd:boolean(?o)) = xsd:boolean) . " +
"}";
final SailTupleQuery tupleQuery = (SailTupleQuery)
cxn.prepareTupleQuery(QueryLanguage.SPARQL, query);
tupleQuery.setIncludeInferred(false /* includeInferred */);
if (log.isInfoEnabled()) {
log.info(query);
// final BigdataSailTupleQuery bdTupleQuery =
// (BigdataSailTupleQuery) tupleQuery;
// final QueryRoot root = (QueryRoot) bdTupleQuery.getTupleExpr();
// final Projection p = (Projection) root.getArg();
// final TupleExpr tupleExpr = p.getArg();
// final SOpTreeBuilder stb = new SOpTreeBuilder();
// final SOpTree tree = stb.collectSOps(tupleExpr);
// log.info(tree);
// log.info(query);
final TupleQueryResult result = tupleQuery.evaluate();
while (result.hasNext()) {
log.info(result.next());
}
}
// final Collection<BindingSet> answer = new LinkedList<BindingSet>();
// answer.add(createBindingSet(
// new BindingImpl("a", paul),
// new BindingImpl("b", mary)
// ));
// answer.add(createBindingSet(
// new BindingImpl("a", brad),
// new BindingImpl("b", john)
// ));
//
// final TupleQueryResult result = tupleQuery.evaluate();
// compare(result, answer);
}
} finally {
cxn.close();
}
} finally {
if (sail instanceof BigdataSail)
((BigdataSail)sail).__tearDownUnitTest();//shutDown();
}
}
}