public String getSqlKeywords() { return SqlParser.create("").getMetadata().getJdbcKeywords(); }
/** * Creates a <code>SqlParser</code> to parse the given string using * Optiq's parser implementation. * * @param s An SQL statement or expression to parse. * @return A <code>SqlParser</code> object. */ public static SqlParser create(String s) { return create(SqlParserImpl.FACTORY, s, Quoting.DOUBLE_QUOTE, Casing.TO_UPPER, Casing.UNCHANGED); }
/** * 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); return parser.parseStmt(); }
/** * Returns the underlying Parser metadata. * * <p>To use a different parser (recognizing a different dialect of SQL), * derived class should override. * * @return a {@link SqlAbstractParserImpl.Metadata} instance. */ protected SqlAbstractParserImpl.Metadata getParserMetadata() { SqlParser parser = SqlParser.create(""); return parser.getMetadata(); }
private SqlParser getSqlParser(String sql) { return SqlParser.create(SqlParserImpl.FACTORY, sql, quoting, unquotedCasing, quotedCasing); }
public String getSqlKeywords() { return SqlParser.create("").getMetadata().getJdbcKeywords(); }
public SqlNode parse(final String sql) throws SqlParseException { switch (state) { case STATE_0_CLOSED: case STATE_1_RESET: ready(); } ensure(State.STATE_2_READY); SqlParser parser = SqlParser.create(parserFactory, sql, lex.quoting, lex.unquotedCasing, lex.quotedCasing); SqlNode sqlNode = parser.parseStmt(); state = State.STATE_3_PARSED; return sqlNode; }
public SqlNode parseQuery(String sql) throws Exception { SqlParser parser = SqlParser.create(sql); SqlNode sqlNode = parser.parseQuery(); return sqlNode; }
/** * 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; }
@Override public RelNode expandView( RelDataType rowType, String queryString, List<String> schemaPath) { expansionDepth++; SqlParser parser = SqlParser.create(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); SqlNode sqlNode1 = validator.validate(sqlNode); SqlToRelConverter sqlToRelConverter = getSqlToRelConverter(validator, catalogReader); RelNode relNode = sqlToRelConverter.convertQuery(sqlNode1, true, false); --expansionDepth; return relNode; }
public RelNode expandView(RelDataType rowType, String queryString, List<String> schemaPath) { SqlParser parser = SqlParser.create(parserFactory, queryString, lex.quoting, lex.unquotedCasing, lex.quotedCasing); SqlNode sqlNode; try { sqlNode = parser.parseQuery(); } catch (SqlParseException e) { throw new RuntimeException("parse failed", e); } final OptiqCatalogReader catalogReader = createCatalogReader().withSchemaPath(schemaPath); SqlValidator validator = new OptiqSqlValidator( operatorTable, catalogReader, typeFactory); SqlNode validatedSqlNode = validator.validate(sqlNode); SqlToRelConverter sqlToRelConverter = new SqlToRelConverter( null, validator, catalogReader, planner, createRexBuilder(), convertletTable); sqlToRelConverter.setTrimUnusedFields(false); return sqlToRelConverter.convertQuery(validatedSqlNode, true, false); } }
public SqlParser createParser(SqlTestFactory factory, String sql) { Quoting quoting = (Quoting) factory.get("quoting"); Casing quotedCasing = (Casing) factory.get("quotedCasing"); Casing unquotedCasing = (Casing) factory.get("unquotedCasing"); return SqlParser.create(SqlParserImpl.FACTORY, sql, quoting, unquotedCasing, quotedCasing); }
/** Populates a materialization record, converting a table path * (essentially a list of strings, like ["hr", "sales"]) into a table object * that can be used in the planning process. */ void populate(Materialization materialization) { SqlParser parser = SqlParser.create(materialization.sql); SqlNode node; try { node = parser.parseStmt(); } catch (SqlParseException e) { throw new RuntimeException("parse failed", e); } SqlToRelConverter sqlToRelConverter2 = getSqlToRelConverter(getSqlValidator(), catalogReader); materialization.queryRel = sqlToRelConverter2.convertQuery(node, true, true); // Identify and substitute a StarTable in queryRel. // // It is possible that no StarTables match. That is OK, but the // materialization patterns that are recognized will not be as rich. // // It is possible that more than one StarTable matches. TBD: should we // take the best (whatever that means), or all of them? useStar(schema, materialization); RelOptTable table = this.catalogReader.getTable(materialization.materializedTable.path()); materialization.tableRel = sqlToRelConverter2.toRel(table); }
public ParseResult parse( Context context, String sql) { final JavaTypeFactory typeFactory = context.getTypeFactory(); OptiqCatalogReader catalogReader = new OptiqCatalogReader( context.getRootSchema(), context.config().caseSensitive(), context.getDefaultSchemaPath(), typeFactory); SqlParser parser = SqlParser.create(sql); SqlNode sqlNode; try { sqlNode = parser.parseStmt(); } catch (SqlParseException e) { throw new RuntimeException("parse failed", e); } final SqlValidator validator = new OptiqSqlValidator( SqlStdOperatorTable.instance(), catalogReader, typeFactory); SqlNode sqlNode1 = validator.validate(sqlNode); return new ParseResult(this, validator, sql, sqlNode1, validator.getValidatedNodeType(sqlNode1)); }
@Test public void testSqlOptions() throws SqlParseException { SqlNode node = SqlParser.create("alter system set schema = true").parseStmt(); SqlSetOption opt = (SqlSetOption) node; assertThat(opt.getScope(), equalTo("SYSTEM")); assertThat(opt.getName(), equalTo("SCHEMA")); SqlPrettyWriter writer = new SqlPrettyWriter(SqlDialect.EIGENBASE); assertThat(writer.format(opt.getValue()), equalTo("TRUE")); writer = new SqlPrettyWriter(SqlDialect.EIGENBASE); assertThat(writer.format(opt), equalTo("ALTER SYSTEM SET \"SCHEMA\" = TRUE")); check("alter system set \"a number\" = 1", "ALTER SYSTEM SET `a number` = 1"); check("alter system set flag = false", "ALTER SYSTEM SET `FLAG` = FALSE"); check("alter system set approx = -12.3450", "ALTER SYSTEM SET `APPROX` = -12.3450"); check("alter system set onOff = on", "ALTER SYSTEM SET `ONOFF` = `ON`"); check("alter system set onOff = off", "ALTER SYSTEM SET `ONOFF` = `OFF`"); check("alter system set baz = foo", "ALTER SYSTEM SET `BAZ` = `FOO`"); // expressions not allowed checkFails("alter system set aString = 'abc' ^||^ 'def' ", "(?s)Encountered \"\\|\\|\" at line 1, column 34\\..*"); // multiple assignments not allowed checkFails("alter system set x = 1^,^ y = 2", "(?s)Encountered \",\" at line 1, column 23\\..*"); }
assert queryable == null; final OptiqConnectionConfig config = context.config(); SqlParser parser = SqlParser.create(SqlParserImpl.FACTORY, sql, config.quoting(), config.unquotedCasing(), config.quotedCasing()); SqlNode sqlNode;