Skip to content

Commit 4361299

Browse files
committed
MySql parameters and SPEL. JPQL, HQL support for '%' in LIKE clause
1 parent 2019ec3 commit 4361299

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+23802
-23094
lines changed

headless-services/commons/jpql/.gitignore

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
/src/main/java/org/springframework/ide/vscode/parser/hql/Hql.tokens
88
/src/main/java/org/springframework/ide/vscode/parser/hql/HqlLexer.interp
99
/src/main/java/org/springframework/ide/vscode/parser/hql/HqlLexer.tokens
10-
/src/main/java/org/springframework/ide/vscode/parser/sql/MySqlParser.interp
11-
/src/main/java/org/springframework/ide/vscode/parser/sql/MySqlParser.tokens
12-
/src/main/java/org/springframework/ide/vscode/parser/sql/MySqlLexer.interp
13-
/src/main/java/org/springframework/ide/vscode/parser/sql/MySqlLexer.tokens
10+
/src/main/java/org/springframework/ide/vscode/parser/mysql/MySqlParser.interp
11+
/src/main/java/org/springframework/ide/vscode/parser/mysql/MySqlParser.tokens
12+
/src/main/java/org/springframework/ide/vscode/parser/mysql/MySqlLexer.interp
13+
/src/main/java/org/springframework/ide/vscode/parser/mysql/MySqlLexer.tokens
1414
/src/main/java/org/springframework/ide/vscode/parser/spel/SpelParser.interp
1515
/src/main/java/org/springframework/ide/vscode/parser/spel/SpelParser.tokens
1616
/src/main/java/org/springframework/ide/vscode/parser/spel/SpelLexer.interp

headless-services/commons/jpql/generate-parsers.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ workdir=$(pwd)
88
cd grammars
99
java -jar ${workdir}/antlr-${ANTLR_VERSION}.jar Jpql.g4 -o ${workdir}/src/main/java/org/springframework/ide/vscode/parser/jpql -package org.springframework.ide.vscode.parser.jpql
1010
java -jar ${workdir}/antlr-${ANTLR_VERSION}.jar Hql.g4 -o ${workdir}/src/main/java/org/springframework/ide/vscode/parser/hql -package org.springframework.ide.vscode.parser.hql
11-
java -jar ${workdir}/antlr-${ANTLR_VERSION}.jar MySqlLexer.g4 MySqlParser.g4 -o ${workdir}/src/main/java/org/springframework/ide/vscode/parser/sql -package org.springframework.ide.vscode.parser.sql
11+
java -jar ${workdir}/antlr-${ANTLR_VERSION}.jar MySqlLexer.g4 MySqlParser.g4 -o ${workdir}/src/main/java/org/springframework/ide/vscode/parser/mysql -package org.springframework.ide.vscode.parser.mysql
1212
java -jar ${workdir}/antlr-${ANTLR_VERSION}.jar SpelLexer.g4 SpelParser.g4 -o ${workdir}/src/main/java/org/springframework/ide/vscode/parser/spel -package org.springframework.ide.vscode.parser.spel
1313

headless-services/commons/jpql/grammars/Hql.g4

+2-2
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ dealingWithNullExpression
608608

609609
// https://docs.jboss.org/hibernate/orm/6.1/userguide/html_single/Hibernate_User_Guide.html#hql-like-predicate
610610
stringPatternMatching
611-
: expression NOT? (LIKE | ILIKE) expression (ESCAPE (stringLiteral|parameter))?
611+
: expression NOT? (LIKE | ILIKE) ('%')? expression ('%')? (ESCAPE (stringLiteral|parameter))?
612612
;
613613

614614
// https://docs.jboss.org/hibernate/orm/6.1/userguide/html_single/Hibernate_User_Guide.html#hql-elements-indices
@@ -673,7 +673,7 @@ variable
673673

674674
parameter
675675
: prefix=':' SPEL
676-
| prefix=':' identifier ('%')?
676+
| prefix=':' identifier
677677
| prefix='?' SPEL
678678
| prefix='?' INTEGER_LITERAL?
679679
;

headless-services/commons/jpql/grammars/Jpql.g4

+2-2
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ in_item
342342
;
343343

344344
like_expression
345-
: string_expression (NOT)? LIKE pattern_value (ESCAPE escape_character)?
345+
: string_expression (NOT)? LIKE ('%')? pattern_value ('%')? (ESCAPE escape_character)?
346346
;
347347

348348
null_comparison_expression
@@ -633,7 +633,7 @@ input_parameter
633633
: ':' SPEL
634634
| '?' SPEL
635635
| '?' INTLITERAL
636-
| ':' identification_variable ('%')?
636+
| ':' identification_variable
637637
;
638638

639639
pattern_value

headless-services/commons/jpql/grammars/MySqlLexer.g4

+3-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ SPACE : [ \t\r\n]+ -> channel(HIDDEN);
4444
SPEC_MYSQL_COMMENT : '/*!' .+? '*/' -> channel(MYSQLCOMMENT);
4545
COMMENT_INPUT : '/*' .*? '*/' -> channel(HIDDEN);
4646
LINE_COMMENT:
47-
(('--' [ \t]* | '#') ~[\r\n]* ('\r'? '\n' | EOF) | '--' ('\r'? '\n' | EOF)) -> channel(HIDDEN)
47+
(('--' [ \t]*) ~[\r\n]* ('\r'? '\n' | EOF) | '--' ('\r'? '\n' | EOF)) -> channel(HIDDEN)
4848
;
4949

5050
// Keywords
@@ -1293,7 +1293,7 @@ HOST_IP_ADDRESS : (AT_SIGN IP_ADDRESS);
12931293
LOCAL_ID : AT_SIGN ( STRING_LITERAL | [A-Z0-9._$\u0080-\uFFFF]+);
12941294
GLOBAL_ID : AT_SIGN AT_SIGN ( [A-Z0-9._$\u0080-\uFFFF]+ | BQUOTA_STRING);
12951295

1296-
SPEL : ('#')('{')(.)*?('}') ;
1296+
SPEL : '#{' ANYTHING '}';
12971297

12981298
// Fragments for Literal primitives
12991299

@@ -1341,6 +1341,7 @@ fragment CHARSET_NAME:
13411341
| UTF8MB4
13421342
;
13431343

1344+
fragment ANYTHING : (.)*?;
13441345
fragment EXPONENT_NUM_PART : 'E' [-+]? DEC_DIGIT+;
13451346
fragment ID_LITERAL : [A-Z_$0-9\u0080-\uFFFF]*? [A-Z_$\u0080-\uFFFF]+? [A-Z_$0-9\u0080-\uFFFF]*;
13461347
fragment DQUOTA_STRING : '"' ( '\\' . | '""' | ~('"' | '\\'))* '"';

headless-services/commons/jpql/grammars/MySqlParser.g4

+10-2
Original file line numberDiff line numberDiff line change
@@ -2544,7 +2544,7 @@ predicate
25442544

25452545
// Add in ASTVisitor nullNotnull in constant
25462546
expressionAtom
2547-
: (QUESTION_SYMB | COLON_SYMB) SPEL # spelExpressionAtom
2547+
: parameter # parameterAtom
25482548
| constant # constantExpressionAtom
25492549
| fullColumnName # fullColumnNameExpressionAtom
25502550
| functionCall # functionCallExpressionAtom
@@ -2563,7 +2563,15 @@ expressionAtom
25632563
| left = expressionAtom addOperator right = expressionAtom # mathExpressionAtom
25642564
| left = expressionAtom jsonOperator right = expressionAtom # jsonExpressionAtom
25652565
;
2566-
2566+
2567+
parameter
2568+
: prefix=':' SPEL
2569+
| prefix=':' dottedId
2570+
| prefix=':' uid
2571+
| prefix='?' SPEL
2572+
| prefix='?' decimalLiteral?
2573+
;
2574+
25672575
unaryOperator
25682576
: '!'
25692577
| '~'

0 commit comments

Comments
 (0)