public static SqlNode parse(String sql) throws SqlParseException { SqlParser.ConfigBuilder parserBuilder = SqlParser.configBuilder(); SqlParser sqlParser = SqlParser.create(sql, parserBuilder.build()); return sqlParser.parseQuery(); }
final Config config = SqlParser.configBuilder() .setLex(Lex.MYSQL_ANSI) .build(); final SqlParser parser = SqlParser.create(substituted, config); try { parser.parseStmt(); return new ValidationResult.Builder() .subject(subject)
public String convertColumn(String column, String originQuote) { String converted = column.replace(originQuote, ""); try { SqlNode sqlNode = SqlParser.create(converted).parseExpression(); sqlNode = sqlNode.accept(sqlNodeConverter); converted = sqlWriter.format(sqlNode); } catch (Throwable e) { logger.error("Failed to default convert Column, will use the input: {}", column, e); } finally { sqlWriter.reset(); } return converted; }
/** * Check if the SELECT query has join operation */ public static boolean hasJoinOperation(String selectQuery) { if (selectQuery == null || selectQuery.length() == 0) { return false; } SqlParser sqlParser = SqlParser.create(selectQuery); try { SqlNode all = sqlParser.parseQuery(); SqlSelect query; if (all instanceof SqlSelect) { query = (SqlSelect) all; } else if (all instanceof SqlOrderBy) { query = (SqlSelect) ((SqlOrderBy) all).query; } else { throw new UnsupportedOperationException("The select query is type of " + all.getClass() + " which is not supported here"); } return query.getFrom().getKind() == SqlKind.JOIN; } catch (SqlParseException e) { return false; } }
/** * Wrapper function to parse a SQL query (SELECT or VALUES, but not INSERT, * UPDATE, DELETE, CREATE, DROP etc.), throwing a {@link SqlParseException} * if the statement is not syntactically valid. * * @param sql SQL statement * @return parse tree * @throws SqlParseException if not syntactically valid */ protected SqlNode parseQuery(String sql) throws SqlParseException { SqlParser parser = SqlParser.create(sql, parserConfig); return parser.parseStmt(); }
/** * Creates a <code>SqlParser</code> to parse the given string using * Calcite's parser implementation. * * <p>The default lexical policy is similar to Oracle. * * @see Lex#ORACLE * * @param s An SQL statement or expression to parse. * @return A parser */ public static SqlParser create(String s) { return create(s, configBuilder().build()); }
/** * Returns the underlying Parser metadata. * * <p>To use a different parser (recognizing a different dialect of SQL), * derived class should override. * * @return metadata */ protected SqlAbstractParserImpl.Metadata getParserMetadata() { SqlParser parser = SqlParser.create("", parserConfig); return parser.getMetadata(); }
/** Factory method for SQL parser configuration. */ protected SqlParser.ConfigBuilder createParserConfig() { return SqlParser.configBuilder(); }
/** Factory method for SQL parser with a given configuration. */ protected SqlParser createParser(String sql, SqlParser.ConfigBuilder parserConfig) { return SqlParser.create(sql, parserConfig.build()); }
protected SqlNode parseStmtAndHandleEx(String sql) { final SqlNode sqlNode; try { sqlNode = getSqlParser(sql).parseStmt(); } catch (SqlParseException e) { throw new RuntimeException("Error while parsing SQL: " + sql, e); } return sqlNode; }
/** * Parses an SQL statement. * * @return top-level SqlNode representing stmt * @throws SqlParseException if there is a parse error */ public SqlNode parseStmt() throws SqlParseException { return parseQuery(); }
/** Returns whether a word is reserved in this parser. This method can be * used to disable tests that behave differently with different collections * of reserved words. */ protected boolean isReserved(String word) { SqlAbstractParserImpl.Metadata metadata = getSqlParser("").getMetadata(); return metadata.isReservedWord(word.toUpperCase(Locale.ROOT)); }
protected SqlNode parseExpressionAndHandleEx(String sql) { final SqlNode sqlNode; try { sqlNode = getSqlParser(sql).parseExpression(); } catch (SqlParseException e) { throw new RuntimeException("Error while parsing expression: " + sql, e); } return sqlNode; }
/** * Wrapper function to parse a SQL query (SELECT or VALUES, but not INSERT, * UPDATE, DELETE, CREATE, DROP etc.), throwing a {@link SqlParseException} * if the statement is not syntactically valid. * * @param sql SQL statement * @return parse tree * @throws SqlParseException if not syntactically valid */ protected SqlNode parseQuery(String sql) throws SqlParseException { SqlParser parser = SqlParser.create(sql, parserConfig); return parser.parseStmt(); }
public String convertSql(String orig) { // for jdbc source, convert quote from backtick to double quote String converted = orig.replaceAll("`", "\""); if (!configurer.skipHandleDefault()) { String escapedDefault = SqlDialect.CALCITE .quoteIdentifier(configurer.useUppercaseDefault() ? "DEFAULT" : "default"); converted = converted.replaceAll("(?i)default\\.", escapedDefault + "."); // use Calcite dialect to cater to SqlParser converted = converted.replaceAll("\"(?i)default\"\\.", escapedDefault + "."); } if (!configurer.skipDefaultConvert()) { try { SqlNode sqlNode = SqlParser.create(converted).parseQuery(); sqlNode = sqlNode.accept(sqlNodeConverter); converted = sqlWriter.format(sqlNode); } catch (Throwable e) { logger.error("Failed to default convert sql, will use the input: {}", orig, e); } finally { sqlWriter.reset(); } } converted = configurer.fixAfterDefaultConvert(converted); return converted; }
/** * Creates a <code>SqlParser</code> to parse the given string using * Calcite's parser implementation. * * <p>The default lexical policy is similar to Oracle. * * @see Lex#ORACLE * * @param s An SQL statement or expression to parse. * @return A parser */ public static SqlParser create(String s) { return create(s, configBuilder().build()); }
/** * Returns the underlying Parser metadata. * * <p>To use a different parser (recognizing a different dialect of SQL), * derived class should override. * * @return metadata */ protected SqlAbstractParserImpl.Metadata getParserMetadata() { SqlParser parser = SqlParser.create("", parserConfig); return parser.getMetadata(); }
/** Factory method for SQL parser configuration. */ protected SqlParser.ConfigBuilder createParserConfig() { return SqlParser.configBuilder(); }
/** Factory method for SQL parser with a given configuration. */ protected SqlParser createParser(String sql, SqlParser.ConfigBuilder parserConfig) { return SqlParser.create(sql, parserConfig.build()); }
protected SqlNode parseStmtAndHandleEx(String sql) { final SqlNode sqlNode; try { sqlNode = getSqlParser(sql).parseStmt(); } catch (SqlParseException e) { throw new RuntimeException("Error while parsing SQL: " + sql, e); } return sqlNode; }