Allow java parameter replace entire IN expression
This commit is contained in:
@@ -2531,6 +2531,7 @@ expression
|
||||
|
||||
predicate
|
||||
: predicate NOT? IN '(' (selectStatement | expressions) ')' # inPredicate
|
||||
| predicate NOT? IN parameter # inPredicateWithParameter
|
||||
| predicate IS nullNotnull # isNullPredicate
|
||||
| left = predicate comparisonOperator right = predicate # binaryComparisonPredicate
|
||||
| predicate comparisonOperator quantifier = (ALL | ANY | SOME) '(' selectStatement ')' # subqueryComparisonPredicate
|
||||
|
||||
@@ -4044,6 +4044,7 @@ trim_list
|
||||
in_expr
|
||||
: select_with_parens # in_expr_select
|
||||
| OPEN_PAREN expr_list CLOSE_PAREN # in_expr_list
|
||||
| parameter # in_parameter
|
||||
;
|
||||
|
||||
case_expr
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7020,6 +7020,18 @@ public class MySqlParserBaseListener implements MySqlParserListener {
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitInPredicate(MySqlParser.InPredicateContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterInPredicateWithParameter(MySqlParser.InPredicateWithParameterContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitInPredicateWithParameter(MySqlParser.InPredicateWithParameterContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
|
||||
@@ -6409,6 +6409,18 @@ public interface MySqlParserListener extends ParseTreeListener {
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitInPredicate(MySqlParser.InPredicateContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code inPredicateWithParameter}
|
||||
* labeled alternative in {@link MySqlParser#predicate}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterInPredicateWithParameter(MySqlParser.InPredicateWithParameterContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code inPredicateWithParameter}
|
||||
* labeled alternative in {@link MySqlParser#predicate}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitInPredicateWithParameter(MySqlParser.InPredicateWithParameterContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code betweenPredicate}
|
||||
* labeled alternative in {@link MySqlParser#predicate}.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7898,6 +7898,18 @@ public class PostgreSqlParserBaseListener implements PostgreSqlParserListener {
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitIn_expr_list(PostgreSqlParser.In_expr_listContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterIn_parameter(PostgreSqlParser.In_parameterContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitIn_parameter(PostgreSqlParser.In_parameterContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
|
||||
@@ -6589,6 +6589,18 @@ public interface PostgreSqlParserListener extends ParseTreeListener {
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitIn_expr_list(PostgreSqlParser.In_expr_listContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code in_parameter}
|
||||
* labeled alternative in {@link PostgreSqlParser#in_expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterIn_parameter(PostgreSqlParser.In_parameterContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code in_parameter}
|
||||
* labeled alternative in {@link PostgreSqlParser#in_expr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitIn_parameter(PostgreSqlParser.In_parameterContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by {@link PostgreSqlParser#case_expr}.
|
||||
* @param ctx the parse tree
|
||||
|
||||
@@ -141,4 +141,19 @@ public class MySqlSemanticTokensTest {
|
||||
assertThat(tokens.get(24)).isEqualTo(new SemanticTokenData(95, 97, "property", new String[0])); // id
|
||||
}
|
||||
|
||||
@Test
|
||||
void parameterIn() {
|
||||
List<SemanticTokenData> tokens = provider.computeTokens("DELETE FROM t WHERE ID IN :ids");
|
||||
assertThat(tokens.size()).isEqualTo(8);
|
||||
|
||||
assertThat(tokens.get(0)).isEqualTo(new SemanticTokenData(0, 6, "keyword", new String[0])); // DELETE
|
||||
assertThat(tokens.get(1)).isEqualTo(new SemanticTokenData(7, 11, "keyword", new String[0])); // FROM
|
||||
assertThat(tokens.get(2)).isEqualTo(new SemanticTokenData(12, 13, "variable", new String[0])); // t
|
||||
assertThat(tokens.get(3)).isEqualTo(new SemanticTokenData(14, 19, "keyword", new String[0])); // WHERE
|
||||
assertThat(tokens.get(4)).isEqualTo(new SemanticTokenData(20, 22, "variable", new String[0])); // ID
|
||||
assertThat(tokens.get(5)).isEqualTo(new SemanticTokenData(23, 25, "keyword", new String[0])); // IN
|
||||
assertThat(tokens.get(6)).isEqualTo(new SemanticTokenData(26, 27, "operator", new String[0])); // :
|
||||
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(27, 30, "parameter", new String[0])); // ids
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -347,4 +347,19 @@ public class PostgreSqlSemanticTokensTest {
|
||||
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(43, 44, "operator", new String[0])); // ;
|
||||
}
|
||||
|
||||
@Test
|
||||
void parameterIn() {
|
||||
List<SemanticTokenData> tokens = provider.computeTokens("DELETE FROM t WHERE ID IN :ids");
|
||||
assertThat(tokens.size()).isEqualTo(8);
|
||||
|
||||
assertThat(tokens.get(0)).isEqualTo(new SemanticTokenData(0, 6, "keyword", new String[0])); // DELETE
|
||||
assertThat(tokens.get(1)).isEqualTo(new SemanticTokenData(7, 11, "keyword", new String[0])); // FROM
|
||||
assertThat(tokens.get(2)).isEqualTo(new SemanticTokenData(12, 13, "variable", new String[0])); // t
|
||||
assertThat(tokens.get(3)).isEqualTo(new SemanticTokenData(14, 19, "keyword", new String[0])); // WHERE
|
||||
assertThat(tokens.get(4)).isEqualTo(new SemanticTokenData(20, 22, "variable", new String[0])); // ID
|
||||
assertThat(tokens.get(5)).isEqualTo(new SemanticTokenData(23, 25, "keyword", new String[0])); // IN
|
||||
assertThat(tokens.get(6)).isEqualTo(new SemanticTokenData(26, 27, "operator", new String[0])); // :
|
||||
assertThat(tokens.get(7)).isEqualTo(new SemanticTokenData(27, 30, "parameter", new String[0])); // ids
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user