@Test public void testBuilderWithPositionalParameters() { final ParsedSql parsedSql = ParsedSql.builder() .append("insert into test (a, b, c) values (") .appendPositionalParameter() .append(", ") .appendPositionalParameter() .append(", ") .appendPositionalParameter() .append(")") .build(); assertThat(parsedSql).isNotNull(); assertThat(parsedSql.getSql()).isEqualTo("insert into test (a, b, c) values (?, ?, ?)"); assertThat(parsedSql.getParameters().isPositional()).isTrue(); assertThat(parsedSql.getParameters().getParameterNames()).containsOnly("?"); } }
@Test public void testBuilderWithNamedParameters() { final List<String> names = Arrays.asList("a", "b", "c"); final ParsedSql parsedSql = ParsedSql.builder() .append("insert into test (a, b, c) values (") .appendNamedParameter(names.get(0)) .append(", ") .appendNamedParameter(names.get(1)) .append(", ") .appendNamedParameter(names.get(2)) .append(")") .build(); assertThat(parsedSql).isNotNull(); assertThat(parsedSql.getSql()).isEqualTo("insert into test (a, b, c) values (?, ?, ?)"); assertThat(parsedSql.getParameters().isPositional()).isFalse(); assertThat(parsedSql.getParameters().getParameterNames()).containsExactly("a", "b", "c"); }
private ParsedSql internalParse(final String sql) { ParsedSql.Builder parsedSql = ParsedSql.builder(); HashStatementLexer lexer = new HashStatementLexer(new ANTLRStringStream(sql)); Token t = lexer.nextToken(); while (t.getType() != EOF) { switch (t.getType()) { case COMMENT: case LITERAL: case QUOTED_TEXT: case DOUBLE_QUOTED_TEXT: parsedSql.append(t.getText()); break; case NAMED_PARAM: parsedSql.appendNamedParameter(t.getText().substring(1)); break; case POSITIONAL_PARAM: parsedSql.appendPositionalParameter(); break; case ESCAPED_TEXT: parsedSql.append(t.getText().substring(1)); break; default: break; } t = lexer.nextToken(); } return parsedSql.build(); } }
private ParsedSql internalParse(String sql) throws IllegalArgumentException { ParsedSql.Builder parsedSql = ParsedSql.builder(); ColonStatementLexer lexer = new ColonStatementLexer(new ANTLRStringStream(sql)); Token t = lexer.nextToken(); while (t.getType() != EOF) { switch (t.getType()) { case COMMENT: case LITERAL: case QUOTED_TEXT: case DOUBLE_QUOTED_TEXT: parsedSql.append(t.getText()); break; case NAMED_PARAM: parsedSql.appendNamedParameter(t.getText().substring(1)); break; case POSITIONAL_PARAM: parsedSql.appendPositionalParameter(); break; case ESCAPED_TEXT: parsedSql.append(t.getText().substring(1)); break; default: break; } t = lexer.nextToken(); } return parsedSql.build(); } }
/** * Records a named parameter with the given name, and appends a * <code>?</code> to the SQL string. * * @param name the parameter name. * @return this */ public Builder appendNamedParameter(String name) { named = true; parameterNames.add(name); return append("?"); }
/** * Records a positional parameters, and appends a <code>?</code> to the * SQL string. * * @return this */ public Builder appendPositionalParameter() { positional = true; parameterNames.add(POSITIONAL_PARAM); return append("?"); }
/** * @return a new ParsedSql builder. */ public static Builder builder() { return new Builder(); }
private ParsedSql internalParse(String sql) throws IllegalArgumentException { ParsedSql.Builder parsedSql = ParsedSql.builder(); ColonStatementLexer lexer = new ColonStatementLexer(new ANTLRStringStream(sql)); Token t = lexer.nextToken(); while (t.getType() != EOF) { switch (t.getType()) { case COMMENT: case LITERAL: case QUOTED_TEXT: case DOUBLE_QUOTED_TEXT: parsedSql.append(t.getText()); break; case NAMED_PARAM: parsedSql.appendNamedParameter(t.getText().substring(1)); break; case POSITIONAL_PARAM: parsedSql.appendPositionalParameter(); break; case ESCAPED_TEXT: parsedSql.append(t.getText().substring(1)); break; default: break; } t = lexer.nextToken(); } return parsedSql.build(); } }
private ParsedSql internalParse(final String sql) { ParsedSql.Builder parsedSql = ParsedSql.builder(); HashStatementLexer lexer = new HashStatementLexer(new ANTLRStringStream(sql)); Token t = lexer.nextToken(); while (t.getType() != EOF) { switch (t.getType()) { case COMMENT: case LITERAL: case QUOTED_TEXT: case DOUBLE_QUOTED_TEXT: parsedSql.append(t.getText()); break; case NAMED_PARAM: parsedSql.appendNamedParameter(t.getText().substring(1)); break; case POSITIONAL_PARAM: parsedSql.appendPositionalParameter(); break; case ESCAPED_TEXT: parsedSql.append(t.getText().substring(1)); break; default: break; } t = lexer.nextToken(); } return parsedSql.build(); } }
/** * Records a positional parameters, and appends a <code>?</code> to the * SQL string. * * @return this */ public Builder appendPositionalParameter() { positional = true; parameterNames.add(POSITIONAL_PARAM); return append(POSITIONAL_PARAM); }
@Test public void testEscapedQuestionMark() { String sql = "SELECT '{\"a\":1, \"b\":2}'::jsonb ?? :key"; ParsedSql parsed = parser.parse(sql, ctx); assertThat(parsed).isEqualTo(ParsedSql.builder() .append("SELECT '{\"a\":1, \"b\":2}'::jsonb ?? ") .appendNamedParameter("key") .build()); } }
/** * Records a named parameter with the given name, and appends a * <code>?</code> to the SQL string. * * @param name the parameter name. * @return this */ public Builder appendNamedParameter(String name) { named = true; parameterNames.add(name); return append(POSITIONAL_PARAM); }
@Test public void testEscapedQuestionMark() { String sql = "SELECT '{\"a\":1, \"b\":2}'::jsonb ?? #key"; ParsedSql parsed = parser.parse(sql, ctx); assertThat(parsed).isEqualTo(ParsedSql.builder() .append("SELECT '{\"a\":1, \"b\":2}'::jsonb ?? ") .appendNamedParameter("key") .build()); } }
/** * @return a new ParsedSql builder. */ public static Builder builder() { return new Builder(); }