/** * 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; } }
public static SqlNode parse(String sql) throws SqlParseException { SqlParser.ConfigBuilder parserBuilder = SqlParser.configBuilder(); SqlParser sqlParser = SqlParser.create(sql, parserBuilder.build()); return sqlParser.parseQuery(); }
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; }
/** * 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(); }
/** * 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(); }
/** * Parses a <code>SELECT</code> statement and reuses parser. * * @param sql sql to parse * @return A {@link org.apache.calcite.sql.SqlSelect} for a regular <code> * SELECT</code> statement; a {@link org.apache.calcite.sql.SqlBinaryOperator} * for a <code>UNION</code>, <code>INTERSECT</code>, or <code>EXCEPT</code>. * @throws SqlParseException if there is a parse error */ public SqlNode parseQuery(String sql) throws SqlParseException { parser.ReInit(new StringReader(sql)); return parseQuery(); }
/** * Parses a <code>SELECT</code> statement and reuses parser. * * @param sql sql to parse * @return A {@link org.apache.calcite.sql.SqlSelect} for a regular <code> * SELECT</code> statement; a {@link org.apache.calcite.sql.SqlBinaryOperator} * for a <code>UNION</code>, <code>INTERSECT</code>, or <code>EXCEPT</code>. * @throws SqlParseException if there is a parse error */ public SqlNode parseQuery(String sql) throws SqlParseException { parser.ReInit(new StringReader(sql)); return parseQuery(); }
public static SqlNode parse(String sql) throws SqlParseException { SqlParser.ConfigBuilder parserBuilder = SqlParser.configBuilder(); SqlParser sqlParser = SqlParser.create(sql, parserBuilder.build()); return sqlParser.parseQuery(); }
/** * Get table names from sql. * * @param sql SQL line * @return List of TableName */ public List<String> parseTableName(String sql) throws SqlParseException { SqlParser parser = SqlParser.create(sql, config); SqlNode sqlNode = parser.parseQuery(sql); return validateTableName(sqlNode.accept(this)); }
public SqlNode parseQuery(String sql) throws SqlParseException { SqlParser parser = factory.createParser(sql); return parser.parseQuery(); }
public SqlNode parseQuery(String sql) throws SqlParseException { SqlParser parser = factory.createParser(sql); return parser.parseQuery(); }
@Override public boolean isValid(final String query) { String checkedQuery = trimQuery(query); Boolean result = null; try { SqlNode parsedNode = SqlParser.create(checkedQuery).parseQuery(); result = parsedNode.accept(whitelistVisitor); if (result == null) { result = true; } } catch (SqlParseException e) { return false; } return result; }
@Override public boolean isValid(final String query) { String checkedQuery = trimQuery(query); Boolean result = null; try { SqlNode parsedNode = SqlParser.create(checkedQuery).parseQuery(); result = parsedNode.accept(whitelistVisitor); if (result == null) { result = true; } } catch (SqlParseException e) { return false; } return result; }
/** * Parses a SQL query. To use a different parser, override this method. */ protected SqlNode parseQuery(String sql) { SqlNode node; try { node = SqlParser.create(sql).parseQuery(); } catch (SqlParseException e) { String message = "Received error while parsing SQL '" + sql + "'; error is:" + NL + e.toString(); throw new AssertionError(message); } return node; }
/** * Parses a SQL query. To use a different parser, override this method. */ protected SqlNode parseQuery(String sql) { SqlNode node; try { node = SqlParser.create(sql).parseQuery(); } catch (SqlParseException e) { String message = "Received error while parsing SQL '" + sql + "'; error is:" + NL + e.toString(); throw new AssertionError(message); } return node; }
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; }
@Test public void testParseWithReader() throws Exception { String query = "select * from dual"; SqlParser sqlParserReader = getSqlParser(new StringReader(query)); SqlNode node1 = sqlParserReader.parseQuery(); SqlParser sqlParserString = getSqlParser(query); SqlNode node2 = sqlParserString.parseQuery(); assertEquals(node2.toString(), node1.toString()); }
@Override public RelRoot expandView(RelDataType rowType, String queryString, List<String> schemaPath, List<String> viewPath) { expansionDepth++; SqlParser parser = prepare.createParser(queryString); SqlNode sqlNode; try { sqlNode = parser.parseQuery(); } catch (SqlParseException e) { throw new RuntimeException("parse failed", e); } // View may have different schema path than current connection. final CatalogReader catalogReader = this.catalogReader.withSchemaPath(schemaPath); SqlValidator validator = createSqlValidator(catalogReader); final SqlToRelConverter.Config config = SqlToRelConverter.configBuilder() .withTrimUnusedFields(true).build(); SqlToRelConverter sqlToRelConverter = getSqlToRelConverter(validator, catalogReader, config); RelRoot root = sqlToRelConverter.convertQuery(sqlNode, true, false); --expansionDepth; return root; }
public SqlNode parseQuery(String sql) throws Exception { final SqlParser.Config config = SqlParser.configBuilder().setConformance(getConformance()).build(); SqlParser parser = SqlParser.create(sql, config); return parser.parseQuery(); }
public SqlNode parseQuery(String sql) throws Exception { final SqlParser.Config config = SqlParser.configBuilder().setConformance(getConformance()).build(); SqlParser parser = SqlParser.create(sql, config); return parser.parseQuery(); }