use of io.confluent.ksql.parser.exception.ParseFailedException in project ksql by confluentinc.
the class KsqlParserTest method testShouldFailIfWrongKeyword.
@Test
public void testShouldFailIfWrongKeyword() throws Exception {
try {
String simpleQuery = "SELLECT col0, col2, col3 FROM test1 WHERE col0 > 100;";
Statement statement = KSQL_PARSER.buildAst(simpleQuery, metaStore).get(0);
Assert.fail();
} catch (ParseFailedException e) {
String errorMessage = e.getMessage();
Assert.assertTrue(errorMessage.toLowerCase().contains(("line 1:1: mismatched input 'SELLECT'" + " expecting").toLowerCase()));
}
}
use of io.confluent.ksql.parser.exception.ParseFailedException in project ksql by confluentinc.
the class KsqlParser method buildAst.
/**
* Builds an AST from the given query string.
*/
public List<Statement> buildAst(String sql, MetaStore metaStore) {
try {
ParserRuleContext tree = getParseTree(sql);
SqlBaseParser.StatementsContext statementsContext = (SqlBaseParser.StatementsContext) tree;
List<Statement> astNodes = new ArrayList<>();
for (SqlBaseParser.SingleStatementContext statementContext : statementsContext.singleStatement()) {
DataSourceExtractor dataSourceExtractor = new DataSourceExtractor(metaStore);
dataSourceExtractor.extractDataSources(statementContext);
Node root = new AstBuilder(dataSourceExtractor).visit(statementContext);
Statement statement = (Statement) root;
astNodes.add(statement);
}
return astNodes;
} catch (Exception e) {
// if we fail, parse with LL mode
throw new ParseFailedException(e.getMessage(), e);
}
}
use of io.confluent.ksql.parser.exception.ParseFailedException in project ksql by confluentinc.
the class KsqlParser method getStatements.
public List<SqlBaseParser.SingleStatementContext> getStatements(String sql) {
try {
ParserRuleContext tree = getParseTree(sql);
SqlBaseParser.StatementsContext statementsContext = (SqlBaseParser.StatementsContext) tree;
return statementsContext.singleStatement();
} catch (Exception e) {
throw new ParseFailedException(e.getMessage(), e);
}
}
use of io.confluent.ksql.parser.exception.ParseFailedException in project ksql by confluentinc.
the class KsqlEngine method parseQueries.
// Visible for Testing
List<Pair<String, Statement>> parseQueries(final String queriesString, final Map<String, Object> overriddenProperties, final MetaStore tempMetaStore) {
try {
MetaStore tempMetaStoreForParser = tempMetaStore.clone();
// Parse and AST creation
KsqlParser ksqlParser = new KsqlParser();
List<SqlBaseParser.SingleStatementContext> parsedStatements = ksqlParser.getStatements(queriesString);
List<Pair<String, Statement>> queryList = new ArrayList<>();
for (SqlBaseParser.SingleStatementContext singleStatementContext : parsedStatements) {
Pair<Statement, DataSourceExtractor> statementInfo = ksqlParser.prepareStatement(singleStatementContext, tempMetaStoreForParser);
Statement statement = statementInfo.getLeft();
Pair<String, Statement> queryPair = buildSingleQueryAst(statement, getStatementString(singleStatementContext), tempMetaStore, tempMetaStoreForParser, overriddenProperties);
if (queryPair != null) {
queryList.add(queryPair);
}
}
return queryList;
} catch (Exception e) {
throw new ParseFailedException("Parsing failed on KsqlEngine msg:" + e.getMessage(), e);
}
}
Aggregations