Search in sources :

Example 1 with DataSourceExtractor

use of io.confluent.ksql.util.DataSourceExtractor 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);
    }
}
Also used : ParserRuleContext(org.antlr.v4.runtime.ParserRuleContext) DataSourceExtractor(io.confluent.ksql.util.DataSourceExtractor) Statement(io.confluent.ksql.parser.tree.Statement) Node(io.confluent.ksql.parser.tree.Node) ParseFailedException(io.confluent.ksql.parser.exception.ParseFailedException) ArrayList(java.util.ArrayList) ParseCancellationException(org.antlr.v4.runtime.misc.ParseCancellationException) ParseFailedException(io.confluent.ksql.parser.exception.ParseFailedException) RecognitionException(org.antlr.v4.runtime.RecognitionException)

Example 2 with DataSourceExtractor

use of io.confluent.ksql.util.DataSourceExtractor in project ksql by confluentinc.

the class KsqlParser method prepareStatement.

public Pair<Statement, DataSourceExtractor> prepareStatement(SqlBaseParser.SingleStatementContext statementContext, MetaStore metaStore) {
    DataSourceExtractor dataSourceExtractor = new DataSourceExtractor(metaStore);
    dataSourceExtractor.extractDataSources(statementContext);
    AstBuilder astBuilder = new AstBuilder(dataSourceExtractor);
    Node root = astBuilder.visit(statementContext);
    Statement statement = (Statement) root;
    return new Pair<>(statement, dataSourceExtractor);
}
Also used : DataSourceExtractor(io.confluent.ksql.util.DataSourceExtractor) Statement(io.confluent.ksql.parser.tree.Statement) Node(io.confluent.ksql.parser.tree.Node) Pair(io.confluent.ksql.util.Pair)

Example 3 with DataSourceExtractor

use of io.confluent.ksql.util.DataSourceExtractor 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);
    }
}
Also used : DataSourceExtractor(io.confluent.ksql.util.DataSourceExtractor) Statement(io.confluent.ksql.parser.tree.Statement) DdlStatement(io.confluent.ksql.parser.tree.DdlStatement) ParseFailedException(io.confluent.ksql.parser.exception.ParseFailedException) ArrayList(java.util.ArrayList) ParseFailedException(io.confluent.ksql.parser.exception.ParseFailedException) KsqlException(io.confluent.ksql.util.KsqlException) MetaStore(io.confluent.ksql.metastore.MetaStore) SqlBaseParser(io.confluent.ksql.parser.SqlBaseParser) KsqlParser(io.confluent.ksql.parser.KsqlParser) Pair(io.confluent.ksql.util.Pair)

Aggregations

Statement (io.confluent.ksql.parser.tree.Statement)3 DataSourceExtractor (io.confluent.ksql.util.DataSourceExtractor)3 ParseFailedException (io.confluent.ksql.parser.exception.ParseFailedException)2 Node (io.confluent.ksql.parser.tree.Node)2 Pair (io.confluent.ksql.util.Pair)2 ArrayList (java.util.ArrayList)2 MetaStore (io.confluent.ksql.metastore.MetaStore)1 KsqlParser (io.confluent.ksql.parser.KsqlParser)1 SqlBaseParser (io.confluent.ksql.parser.SqlBaseParser)1 DdlStatement (io.confluent.ksql.parser.tree.DdlStatement)1 KsqlException (io.confluent.ksql.util.KsqlException)1 ParserRuleContext (org.antlr.v4.runtime.ParserRuleContext)1 RecognitionException (org.antlr.v4.runtime.RecognitionException)1 ParseCancellationException (org.antlr.v4.runtime.misc.ParseCancellationException)1