use of org.eclipse.rdf4j.query.MalformedQueryException in project rdf4j by eclipse.
the class SeRQLParser method parseQuery.
public ParsedQuery parseQuery(String queryStr, String baseURI) throws MalformedQueryException {
try {
ASTQueryContainer qc = SyntaxTreeBuilder.parseQuery(queryStr);
// Replace deprecated NULL nodes with semantically equivalent
// alternatives
NullProcessor.process(qc);
StringEscapesProcessor.process(qc);
Map<String, String> namespaces = NamespaceDeclProcessor.process(qc);
ProjectionProcessor.process(qc);
qc.jjtAccept(new ProjectionAliasProcessor(), null);
qc.jjtAccept(new AnonymousVarGenerator(), null);
// TODO: check use of unbound variables?
TupleExpr tupleExpr = QueryModelBuilder.buildQueryModel(qc, SimpleValueFactory.getInstance());
ASTQuery queryNode = qc.getQuery();
ParsedQuery query;
if (queryNode instanceof ASTTupleQuery) {
query = new ParsedTupleQuery(tupleExpr);
} else if (queryNode instanceof ASTGraphQuery) {
query = new ParsedGraphQuery(tupleExpr, namespaces);
} else {
throw new RuntimeException("Unexpected query type: " + queryNode.getClass());
}
return query;
} catch (ParseException e) {
throw new MalformedQueryException(e.getMessage(), e);
} catch (TokenMgrError e) {
throw new MalformedQueryException(e.getMessage(), e);
} catch (VisitorException e) {
throw new MalformedQueryException(e.getMessage(), e);
}
}
use of org.eclipse.rdf4j.query.MalformedQueryException in project rdf4j by eclipse.
the class SPARQLParserTest method testInsertDataLineNumberReporting.
@Test
public void testInsertDataLineNumberReporting() throws Exception {
String insertDataString = "INSERT DATA {\n incorrect reference }";
try {
ParsedUpdate u = parser.parseUpdate(insertDataString, null);
fail("should have resulted in parse exception");
} catch (MalformedQueryException e) {
assertTrue(e.getMessage().contains("line 2,"));
}
}
use of org.eclipse.rdf4j.query.MalformedQueryException in project rdf4j by eclipse.
the class SPARQLParserTest method testDeleteDataLineNumberReporting.
@Test
public void testDeleteDataLineNumberReporting() throws Exception {
String deleteDataString = "DELETE DATA {\n incorrect reference }";
try {
ParsedUpdate u = parser.parseUpdate(deleteDataString, null);
fail("should have resulted in parse exception");
} catch (MalformedQueryException e) {
assertTrue(e.getMessage().contains("line 2,"));
}
}
use of org.eclipse.rdf4j.query.MalformedQueryException in project rdf4j by eclipse.
the class BlankNodeVarProcessor method process.
public static Set<String> process(ASTOperationContainer qc) throws MalformedQueryException {
try {
BlankNodeToVarConverter converter = new BlankNodeToVarConverter();
qc.jjtAccept(converter, null);
return converter.getUsedBNodeIDs();
} catch (VisitorException e) {
throw new MalformedQueryException(e);
}
}
use of org.eclipse.rdf4j.query.MalformedQueryException in project rdf4j by eclipse.
the class BaseDeclProcessor method process.
/**
* Resolves relative URIs in the supplied query model using either the specified <tt>externalBaseURI</tt>
* or, if this parameter is <tt>null</tt>, the base URI specified in the query model itself.
*
* @param qc
* The query model to resolve relative URIs in.
* @param externalBaseURI
* The external base URI to use for resolving relative URIs, or <tt>null</tt> if the base URI that
* is specified in the query model should be used.
* @throws IllegalArgumentException
* If an external base URI is specified that is not an absolute URI.
* @throws MalformedQueryException
* If the base URI specified in the query model is not an absolute URI.
*/
public static void process(ASTOperationContainer qc, String externalBaseURI) throws MalformedQueryException {
ParsedIRI parsedBaseURI = null;
// Use the query model's own base URI, if available
ASTBaseDecl baseDecl = qc.getBaseDecl();
if (baseDecl != null) {
try {
parsedBaseURI = new ParsedIRI(baseDecl.getIRI());
} catch (URISyntaxException e) {
throw new MalformedQueryException(e);
}
if (!parsedBaseURI.isAbsolute()) {
throw new MalformedQueryException("BASE IRI is not an absolute IRI: " + externalBaseURI);
}
} else if (externalBaseURI != null) {
// Use external base URI if the query doesn't contain one itself
try {
parsedBaseURI = new ParsedIRI(externalBaseURI);
} catch (URISyntaxException e) {
throw new MalformedQueryException(e);
}
if (!parsedBaseURI.isAbsolute()) {
throw new IllegalArgumentException("Supplied base URI is not an absolute IRI: " + externalBaseURI);
}
} else {
// FIXME: use the "Default Base URI"?
}
if (parsedBaseURI != null) {
ASTUnparsedQuadDataBlock dataBlock = null;
if (qc.getOperation() instanceof ASTInsertData) {
ASTInsertData insertData = (ASTInsertData) qc.getOperation();
dataBlock = insertData.jjtGetChild(ASTUnparsedQuadDataBlock.class);
} else if (qc.getOperation() instanceof ASTDeleteData) {
ASTDeleteData deleteData = (ASTDeleteData) qc.getOperation();
dataBlock = deleteData.jjtGetChild(ASTUnparsedQuadDataBlock.class);
}
if (dataBlock != null) {
final String baseURIDeclaration = "BASE <" + parsedBaseURI + "> \n";
dataBlock.setDataBlock(baseURIDeclaration + dataBlock.getDataBlock());
} else {
RelativeIRIResolver visitor = new RelativeIRIResolver(parsedBaseURI);
try {
qc.jjtAccept(visitor, null);
} catch (VisitorException e) {
throw new MalformedQueryException(e);
}
}
}
}
Aggregations