Skip to content

Commit 41f1ea8

Browse files
authored
Merge pull request #2351 from ClickHouse/antlr4_parser
[jdbc-v2] Antlr4 parser
2 parents a88a4b9 + fb77018 commit 41f1ea8

File tree

22 files changed

+2436
-803
lines changed

22 files changed

+2436
-803
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ dependency-reduced-pom.xml
4747
java.prof
4848
jmh-result.*
4949
profile.html
50+
jdbc-v2/gen
5051

5152
# Shell scripts
5253
*.sh

client-v2/src/main/java/com/clickhouse/client/api/query/QuerySettings.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ public QuerySettings setOption(String option, Object value) {
4242
return this;
4343
}
4444

45+
public QuerySettings resetOption(String option) {
46+
rawSettings.remove(option);
47+
return this;
48+
}
49+
4550
/**
4651
* Gets a configuration option.
4752
*

jdbc-v2/pom.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424
</properties>
2525

2626
<dependencies>
27+
<dependency>
28+
<groupId>org.antlr</groupId>
29+
<artifactId>antlr4-runtime</artifactId>
30+
<version>4.9.3</version>
31+
</dependency>
32+
2733
<dependency>
2834
<groupId>${project.parent.groupId}</groupId>
2935
<artifactId>client-v2</artifactId>
@@ -391,6 +397,20 @@
391397
</execution>
392398
</executions>
393399
</plugin>
400+
401+
<plugin>
402+
<groupId>org.antlr</groupId>
403+
<artifactId>antlr4-maven-plugin</artifactId>
404+
<version>4.9.3</version>
405+
<executions>
406+
<execution>
407+
<phase>generate-sources</phase>
408+
<goals>
409+
<goal>antlr4</goal>
410+
</goals>
411+
</execution>
412+
</executions>
413+
</plugin>
394414
</plugins>
395415
</build>
396416
</project>
Lines changed: 300 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,300 @@
1+
2+
// $antlr-format alignColons trailing, alignLabels true, alignLexerCommands true, alignSemicolons ownLine, alignTrailers true
3+
// $antlr-format alignTrailingComments true, allowShortBlocksOnASingleLine true, allowShortRulesOnASingleLine true, columnLimit 150
4+
// $antlr-format maxEmptyLinesToKeep 1, minEmptyLines 0, reflowComments false, singleLineOverrulesHangingColon true, useTab false
5+
6+
lexer grammar ClickHouseLexer;
7+
8+
// NOTE: don't forget to add new keywords to the parser rule "keyword"!
9+
10+
// Keywords
11+
12+
ADD : A D D;
13+
AFTER : A F T E R;
14+
ALIAS : A L I A S;
15+
ALL : A L L;
16+
ALTER : A L T E R;
17+
AND : A N D;
18+
ANTI : A N T I;
19+
ANY : A N Y;
20+
ARRAY : A R R A Y;
21+
AS : A S;
22+
ASCENDING : A S C | A S C E N D I N G;
23+
ASOF : A S O F;
24+
AST : A S T;
25+
ASYNC : A S Y N C;
26+
ATTACH : A T T A C H;
27+
BETWEEN : B E T W E E N;
28+
BOTH : B O T H;
29+
BY : B Y;
30+
CASE : C A S E;
31+
CAST : C A S T;
32+
CHECK : C H E C K;
33+
CLEAR : C L E A R;
34+
CLUSTER : C L U S T E R;
35+
CODEC : C O D E C;
36+
COLLATE : C O L L A T E;
37+
COLUMN : C O L U M N;
38+
COMMENT : C O M M E N T;
39+
CONSTRAINT : C O N S T R A I N T;
40+
CREATE : C R E A T E;
41+
CROSS : C R O S S;
42+
CUBE : C U B E;
43+
CURRENT : C U R R E N T;
44+
CURRENT_USER : C U R R E N T '_' U S E R;
45+
DATABASE : D A T A B A S E;
46+
DATABASES : D A T A B A S E S;
47+
DATE : D A T E;
48+
DAY : D A Y;
49+
DEDUPLICATE : D E D U P L I C A T E;
50+
DEFAULT : D E F A U L T;
51+
DELAY : D E L A Y;
52+
DELETE : D E L E T E;
53+
DESC : D E S C;
54+
DESCENDING : D E S C E N D I N G;
55+
DESCRIBE : D E S C R I B E;
56+
DETACH : D E T A C H;
57+
DICTIONARIES : D I C T I O N A R I E S;
58+
DICTIONARY : D I C T I O N A R Y;
59+
DISK : D I S K;
60+
DISTINCT : D I S T I N C T;
61+
DISTRIBUTED : D I S T R I B U T E D;
62+
DROP : D R O P;
63+
ELSE : E L S E;
64+
END : E N D;
65+
ENGINE : E N G I N E;
66+
EVENTS : E V E N T S;
67+
EXISTS : E X I S T S;
68+
EXPLAIN : E X P L A I N;
69+
EXPRESSION : E X P R E S S I O N;
70+
EXCEPT : E X C E P T;
71+
EXTRACT : E X T R A C T;
72+
FETCHES : F E T C H E S;
73+
FINAL : F I N A L;
74+
FIRST : F I R S T;
75+
FLUSH : F L U S H;
76+
FOLLOWING : F O L L O W I N G;
77+
FOR : F O R;
78+
FORMAT : F O R M A T;
79+
FREEZE : F R E E Z E;
80+
FROM : F R O M;
81+
FULL : F U L L;
82+
FUNCTION : F U N C T I O N;
83+
GLOBAL : G L O B A L;
84+
GRANULARITY : G R A N U L A R I T Y;
85+
GROUP : G R O U P;
86+
HAVING : H A V I N G;
87+
HIERARCHICAL : H I E R A R C H I C A L;
88+
HOUR : H O U R;
89+
ID : I D;
90+
IF : I F;
91+
ILIKE : I L I K E;
92+
IN : I N;
93+
INDEX : I N D E X;
94+
INF : I N F | I N F I N I T Y;
95+
INJECTIVE : I N J E C T I V E;
96+
INNER : I N N E R;
97+
INSERT : I N S E R T;
98+
INTERVAL : I N T E R V A L;
99+
INTO : I N T O;
100+
IS : I S;
101+
IS_OBJECT_ID : I S UNDERSCORE O B J E C T UNDERSCORE I D;
102+
JOIN : J O I N;
103+
KEY : K E Y;
104+
KILL : K I L L;
105+
LAST : L A S T;
106+
LAYOUT : L A Y O U T;
107+
LEADING : L E A D I N G;
108+
LEFT : L E F T;
109+
LIFETIME : L I F E T I M E;
110+
LIKE : L I K E;
111+
LIMIT : L I M I T;
112+
LIVE : L I V E;
113+
LOCAL : L O C A L;
114+
LOGS : L O G S;
115+
MATERIALIZE : M A T E R I A L I Z E;
116+
MATERIALIZED : M A T E R I A L I Z E D;
117+
MAX : M A X;
118+
MERGES : M E R G E S;
119+
MIN : M I N;
120+
MINUTE : M I N U T E;
121+
MODIFY : M O D I F Y;
122+
MONTH : M O N T H;
123+
MOVE : M O V E;
124+
MUTATION : M U T A T I O N;
125+
NAN_SQL : N A N; // conflicts with macro NAN
126+
NO : N O;
127+
NONE : N O N E;
128+
NOT : N O T;
129+
NULL_SQL : N U L L; // conflicts with macro NULL
130+
NULLS : N U L L S;
131+
OFFSET : O F F S E T;
132+
ON : O N;
133+
OPTIMIZE : O P T I M I Z E;
134+
OR : O R;
135+
ORDER : O R D E R;
136+
OUTER : O U T E R;
137+
OUTFILE : O U T F I L E;
138+
OVER : O V E R;
139+
PARTITION : P A R T I T I O N;
140+
POPULATE : P O P U L A T E;
141+
PRECEDING : P R E C E D I N G;
142+
PREWHERE : P R E W H E R E;
143+
PRIMARY : P R I M A R Y;
144+
PROJECTION : P R O J E C T I O N;
145+
QUARTER : Q U A R T E R;
146+
RANGE : R A N G E;
147+
RELOAD : R E L O A D;
148+
REMOVE : R E M O V E;
149+
RENAME : R E N A M E;
150+
REPLACE : R E P L A C E;
151+
REPLICA : R E P L I C A;
152+
REPLICATED : R E P L I C A T E D;
153+
RIGHT : R I G H T;
154+
ROLE : R O L E;
155+
ROLLUP : R O L L U P;
156+
ROW : R O W;
157+
ROWS : R O W S;
158+
SAMPLE : S A M P L E;
159+
SECOND : S E C O N D;
160+
SELECT : S E L E C T;
161+
SEMI : S E M I;
162+
SENDS : S E N D S;
163+
SET : S E T;
164+
SETTINGS : S E T T I N G S;
165+
SHOW : S H O W;
166+
SOURCE : S O U R C E;
167+
START : S T A R T;
168+
STOP : S T O P;
169+
SUBSTRING : S U B S T R I N G;
170+
SYNC : S Y N C;
171+
SYNTAX : S Y N T A X;
172+
SYSTEM : S Y S T E M;
173+
TABLE : T A B L E;
174+
TABLES : T A B L E S;
175+
TEMPORARY : T E M P O R A R Y;
176+
TEST : T E S T;
177+
THEN : T H E N;
178+
TIES : T I E S;
179+
TIMEOUT : T I M E O U T;
180+
TIMESTAMP : T I M E S T A M P;
181+
TO : T O;
182+
TOP : T O P;
183+
TOTALS : T O T A L S;
184+
TRAILING : T R A I L I N G;
185+
TRIM : T R I M;
186+
TRUNCATE : T R U N C A T E;
187+
TTL : T T L;
188+
TYPE : T Y P E;
189+
UNBOUNDED : U N B O U N D E D;
190+
UNION : U N I O N;
191+
UPDATE : U P D A T E;
192+
USE : U S E;
193+
USING : U S I N G;
194+
UUID : U U I D;
195+
VALUES : V A L U E S;
196+
VIEW : V I E W;
197+
VOLUME : V O L U M E;
198+
WATCH : W A T C H;
199+
WEEK : W E E K;
200+
WHEN : W H E N;
201+
WHERE : W H E R E;
202+
WINDOW : W I N D O W;
203+
WITH : W I T H;
204+
YEAR : Y E A R | Y Y Y Y;
205+
206+
JSON_FALSE : 'false';
207+
JSON_TRUE : 'true';
208+
209+
// Tokens
210+
211+
IDENTIFIER: (LETTER | UNDERSCORE) (LETTER | UNDERSCORE | DEC_DIGIT)*
212+
| BACKQUOTE ( ~([\\`]) | (BACKSLASH .) | (BACKQUOTE BACKQUOTE))* BACKQUOTE
213+
| QUOTE_DOUBLE (~([\\"]) | (BACKSLASH .) | (QUOTE_DOUBLE QUOTE_DOUBLE))* QUOTE_DOUBLE
214+
;
215+
FLOATING_LITERAL:
216+
HEXADECIMAL_LITERAL DOT HEX_DIGIT* (P | E) (PLUS | DASH)? DEC_DIGIT+
217+
| HEXADECIMAL_LITERAL (P | E) (PLUS | DASH)? DEC_DIGIT+
218+
| DECIMAL_LITERAL DOT DEC_DIGIT* E (PLUS | DASH)? DEC_DIGIT+
219+
| DOT DECIMAL_LITERAL E (PLUS | DASH)? DEC_DIGIT+
220+
| DECIMAL_LITERAL E (PLUS | DASH)? DEC_DIGIT+
221+
;
222+
OCTAL_LITERAL : '0' OCT_DIGIT+;
223+
DECIMAL_LITERAL : DEC_DIGIT+;
224+
HEXADECIMAL_LITERAL : '0' X HEX_DIGIT+;
225+
226+
// It's important that quote-symbol is a single character.
227+
STRING_LITERAL:
228+
QUOTE_SINGLE (~([\\']) | (BACKSLASH .) | (QUOTE_SINGLE QUOTE_SINGLE))* QUOTE_SINGLE
229+
;
230+
231+
// Alphabet and allowed symbols
232+
233+
fragment A : [aA];
234+
fragment B : [bB];
235+
fragment C : [cC];
236+
fragment D : [dD];
237+
fragment E : [eE];
238+
fragment F : [fF];
239+
fragment G : [gG];
240+
fragment H : [hH];
241+
fragment I : [iI];
242+
fragment J : [jJ];
243+
fragment K : [kK];
244+
fragment L : [lL];
245+
fragment M : [mM];
246+
fragment N : [nN];
247+
fragment O : [oO];
248+
fragment P : [pP];
249+
fragment Q : [qQ];
250+
fragment R : [rR];
251+
fragment S : [sS];
252+
fragment T : [tT];
253+
fragment U : [uU];
254+
fragment V : [vV];
255+
fragment W : [wW];
256+
fragment X : [xX];
257+
fragment Y : [yY];
258+
fragment Z : [zZ];
259+
260+
fragment LETTER : [a-zA-Z];
261+
fragment OCT_DIGIT : [0-7];
262+
fragment DEC_DIGIT : [0-9];
263+
fragment HEX_DIGIT : [0-9a-fA-F];
264+
265+
ARROW : '->';
266+
ASTERISK : '*';
267+
BACKQUOTE : '`';
268+
BACKSLASH : '\\';
269+
COLON : ':';
270+
COMMA : ',';
271+
CONCAT : '||';
272+
DASH : '-';
273+
DOT : '.';
274+
EQ_DOUBLE : '==';
275+
EQ_SINGLE : '=';
276+
GE : '>=';
277+
GT : '>';
278+
LBRACE : '{';
279+
LBRACKET : '[';
280+
LE : '<=';
281+
LPAREN : '(';
282+
LT : '<';
283+
NOT_EQ : '!=' | '<>';
284+
PERCENT : '%';
285+
PLUS : '+';
286+
QUERY : '?';
287+
QUOTE_DOUBLE : '"';
288+
QUOTE_SINGLE : '\'';
289+
RBRACE : '}';
290+
RBRACKET : ']';
291+
RPAREN : ')';
292+
SEMICOLON : ';';
293+
SLASH : '/';
294+
UNDERSCORE : '_';
295+
296+
// Comments and whitespace
297+
298+
MULTI_LINE_COMMENT : '/*' .*? '*/' -> skip;
299+
SINGLE_LINE_COMMENT : ('--' | '#!' | '#') ~('\n' | '\r')* ('\n' | '\r' | EOF) -> skip;
300+
WHITESPACE : [ \u000B\u000C\t\r\n] -> skip; // '\n' can be part of multiline single query

0 commit comments

Comments
 (0)