Skip to content

Commit 0f045f3

Browse files
committed
Merge remote-tracking branch 'origin/master' into regex-java-flag-x
2 parents 5c4dc7a + 7c0f687 commit 0f045f3

120 files changed

Lines changed: 12759 additions & 393 deletions

File tree

Some content is hidden

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

.github/workflows/ci.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,47 @@ jobs:
405405
CI_env: GithubAction
406406

407407

408+
python-bb-e2e:
409+
strategy:
410+
fail-fast: false
411+
matrix:
412+
os: [windows-latest, macos-latest]
413+
runs-on: ${{ matrix.os }}
414+
needs: setup
415+
if: needs.setup.outputs.debug == 'false'
416+
steps:
417+
- uses: actions/checkout@v6
418+
- name: Setup JDK ${{env.build-jdk}}
419+
uses: actions/setup-java@v5
420+
with:
421+
distribution: ${{env.java-distribution}}
422+
java-version: ${{env.build-jdk}}
423+
- name: Setup Python
424+
uses: actions/setup-python@v6
425+
with:
426+
python-version: '3.10'
427+
- name: Setup Node
428+
uses: actions/setup-node@v4
429+
with:
430+
node-version: '20'
431+
- name: Cache Maven packages
432+
uses: actions/cache@v5
433+
with:
434+
path: ~/.m2
435+
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
436+
restore-keys: ${{ runner.os }}-m2
437+
- name: Build with Maven
438+
run: mvn clean install -DskipTests
439+
env:
440+
CI_env: GithubAction
441+
- name: Run Python/Django BB E2E tests
442+
# important that what we run here does not use Docker
443+
working-directory: core-tests/e2e-tests/python-rest-bb
444+
run: mvn clean verify --fae
445+
env:
446+
CI_env: GithubAction
447+
448+
408449
tests:
409450
runs-on: ubuntu-latest
410451
needs: full-build-base

.gitignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,16 @@ Migrations/
130130
/core-tests/e2e-tests/spring/spring-rest-bb/javascript/generated/
131131
/core-tests/e2e-tests/spring/spring-rest-bb/python/generated/
132132

133+
/core-tests/e2e-tests/python-rest-bb/target/
134+
/core-tests/e2e-tests/python-rest-bb/python/generated/
135+
/core-tests/e2e-tests/python-rest-bb/maven/src/
136+
/core-tests/e2e-tests/python-rest-bb/maven/target/
137+
/core-tests/e2e-tests/python-rest-bb/javascript/node_modules/
138+
/core-tests/e2e-tests/python-rest-bb/javascript/generated/
139+
/core-tests/e2e-tests/python-rest-bb/sut/django/db.sqlite3
140+
/core-tests/e2e-tests/python-rest-bb/sut/django/.venv/
141+
/core-tests/e2e-tests/python-rest-bb/sut/django/**/__pycache__/
142+
133143
/client-java/test-utils-java/target/
134144

135145
/test-utils/test-utils-py/target/

client-java/controller/pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -323,8 +323,8 @@
323323
<shadedPattern>shaded.javassist</shadedPattern>
324324
</relocation>
325325
<relocation>
326-
<pattern>jersey</pattern>
327-
<shadedPattern>shaded.jersey</shadedPattern>
326+
<pattern>jersey.repackaged</pattern>
327+
<shadedPattern>shaded.jersey.repackaged</shadedPattern>
328328
</relocation>
329329
<relocation>
330330
<pattern>org.aopalliance</pattern>
@@ -360,7 +360,7 @@
360360
</executions>
361361
</plugin>
362362

363-
<!-- Generates the Cypher parser from the Neo4j Cypher25 grammar -->
363+
<!-- Generates the Cypher and Cql parsers from the Neo4j Cypher25 grammar and the Cql grammar respectively -->
364364
<plugin>
365365
<groupId>org.antlr</groupId>
366366
<artifactId>antlr4-maven-plugin</artifactId>
@@ -369,4 +369,4 @@
369369
</plugins>
370370
</build>
371371

372-
</project>
372+
</project>
Lines changed: 260 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,260 @@
1+
// $antlr-format alignTrailingComments true, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments false, useTab false
2+
// $antlr-format allowShortRulesOnASingleLine true, allowShortBlocksOnASingleLine true, minEmptyLines 0, alignSemicolons ownLine
3+
// $antlr-format alignColons trailing, singleLineOverrulesHangingColon true, alignLexerCommands true, alignLabels true, alignTrailers true
4+
5+
lexer grammar CqlLexer;
6+
7+
options {
8+
caseInsensitive = true;
9+
}
10+
11+
// Operators and Punctuators
12+
13+
LR_BRACKET : '(';
14+
RR_BRACKET : ')';
15+
LC_BRACKET : '{';
16+
RC_BRACKET : '}';
17+
LS_BRACKET : '[';
18+
RS_BRACKET : ']';
19+
COMMA : ',';
20+
SEMI : ';';
21+
COLON : ':';
22+
DOT : '.';
23+
STAR : '*';
24+
DIVIDE : '/';
25+
MODULE : '%';
26+
PLUS : '+';
27+
MINUSMINUS : '--';
28+
MINUS : '-';
29+
DQUOTE : '"';
30+
SQUOTE : '\'';
31+
OPERATOR_EQ : '=';
32+
OPERATOR_LT : '<';
33+
OPERATOR_GT : '>';
34+
OPERATOR_LTE : '<=';
35+
OPERATOR_GTE : '>=';
36+
37+
// Keywords
38+
39+
K_ADD : 'ADD';
40+
K_AGGREGATE : 'AGGREGATE';
41+
K_ALL : 'ALL';
42+
K_ALLOW : 'ALLOW';
43+
K_ALTER : 'ALTER';
44+
K_AND : 'AND';
45+
K_ANY : 'ANY';
46+
K_APPLY : 'APPLY';
47+
K_AS : 'AS';
48+
K_ASC : 'ASC';
49+
K_AUTHORIZE : 'AUTHORIZE';
50+
K_BATCH : 'BATCH';
51+
K_BEGIN : 'BEGIN';
52+
K_BY : 'BY';
53+
K_CALLED : 'CALLED';
54+
K_CLUSTERING : 'CLUSTERING';
55+
K_COLUMNFAMILY : 'COLUMNFAMILY';
56+
K_COMPACT : 'COMPACT';
57+
K_CONSISTENCY : 'CONSISTENCY';
58+
K_CONTAINS : 'CONTAINS';
59+
K_CREATE : 'CREATE';
60+
K_CUSTOM : 'CUSTOM';
61+
K_DEFAULT : 'DEFAULT';
62+
K_DELETE : 'DELETE';
63+
K_DESC : 'DESC';
64+
K_DESCRIBE : 'DESCRIBE';
65+
K_DISTINCT : 'DISTINCT';
66+
K_DROP : 'DROP';
67+
K_DURABLE_WRITES : 'DURABLE_WRITES';
68+
K_EACH_QUORUM : 'EACH_QUORUM';
69+
K_ENTRIES : 'ENTRIES';
70+
K_EXECUTE : 'EXECUTE';
71+
K_EXISTS : 'EXISTS';
72+
K_FALSE : [Ff][Aa][Ll][Ss][Ee];
73+
K_FILTERING : 'FILTERING';
74+
K_FINALFUNC : 'FINALFUNC';
75+
K_FROM : 'FROM';
76+
K_FULL : 'FULL';
77+
K_FUNCTION : 'FUNCTION';
78+
K_FUNCTIONS : 'FUNCTIONS';
79+
K_GRANT : 'GRANT';
80+
K_IF : 'IF';
81+
K_IN : 'IN';
82+
K_INDEX : 'INDEX';
83+
K_INFINITY : 'INFINITY';
84+
K_INITCOND : 'INITCOND';
85+
K_INPUT : 'INPUT';
86+
K_INSERT : 'INSERT';
87+
K_INTO : 'INTO';
88+
K_IS : 'IS';
89+
K_JSON : 'JSON';
90+
K_KEY : 'KEY';
91+
K_KEYS : 'KEYS';
92+
K_KEYSPACE : 'KEYSPACE';
93+
K_KEYSPACES : 'KEYSPACES';
94+
K_LANGUAGE : 'LANGUAGE';
95+
K_LEVEL : 'LEVEL';
96+
K_LIMIT : 'LIMIT';
97+
K_LOCAL_ONE : 'LOCAL_ONE';
98+
K_LOCAL_QUORUM : 'LOCAL_QUORUM';
99+
K_LOGGED : 'LOGGED';
100+
K_LOGIN : 'LOGIN';
101+
K_MASKED : 'MASKED';
102+
K_MATERIALIZED : 'MATERIALIZED';
103+
K_MODIFY : 'MODIFY';
104+
K_NAN : 'NAN';
105+
K_NORECURSIVE : 'NORECURSIVE';
106+
K_NOSUPERUSER : 'NOSUPERUSER';
107+
K_NOT : 'NOT';
108+
K_NULL : 'NULL';
109+
K_OF : 'OF';
110+
K_ON : 'ON';
111+
K_ONE : 'ONE';
112+
K_OPTIONS : 'OPTIONS';
113+
K_OR : 'OR';
114+
K_ORDER : 'ORDER';
115+
K_PARTITION : 'PARTITION';
116+
K_PASSWORD : 'PASSWORD';
117+
K_PER : 'PER';
118+
K_PERMISSION : 'PERMISSION';
119+
K_PERMISSIONS : 'PERMISSIONS';
120+
K_PRIMARY : 'PRIMARY';
121+
K_QUORUM : 'QUORUM';
122+
K_RENAME : 'RENAME';
123+
K_REPLACE : 'REPLACE';
124+
K_REPLICATION : 'REPLICATION';
125+
K_RETURNS : 'RETURNS';
126+
K_REVOKE : 'REVOKE';
127+
K_ROLE : 'ROLE';
128+
K_ROLES : 'ROLES';
129+
K_SCHEMA : 'SCHEMA';
130+
K_SELECT : 'SELECT';
131+
K_SET : 'SET';
132+
K_SFUNC : 'SFUNC';
133+
K_STATIC : 'STATIC';
134+
K_STORAGE : 'STORAGE';
135+
K_STYPE : 'STYPE';
136+
K_SUPERUSER : 'SUPERUSER';
137+
K_TABLE : 'TABLE';
138+
K_THREE : 'THREE';
139+
K_TIMESTAMP : 'TIMESTAMP';
140+
K_TO : 'TO';
141+
K_TOKEN : 'TOKEN';
142+
K_TRIGGER : 'TRIGGER';
143+
K_TRUE : [Tt][Rr][Uu][Ee];
144+
K_TRUNCATE : 'TRUNCATE';
145+
K_TTL : 'TTL';
146+
K_TWO : 'TWO';
147+
K_TYPE : 'TYPE';
148+
K_UNLOGGED : 'UNLOGGED';
149+
K_UPDATE : 'UPDATE';
150+
K_USE : 'USE';
151+
K_USER : 'USER';
152+
K_USING : 'USING';
153+
K_UUID : 'UUID';
154+
K_VALUES : 'VALUES';
155+
K_VECTOR : 'VECTOR';
156+
K_VIEW : 'VIEW';
157+
K_WHERE : 'WHERE';
158+
K_WITH : 'WITH';
159+
K_WRITETIME : 'WRITETIME';
160+
K_ASCII : 'ASCII';
161+
K_BIGINT : 'BIGINT';
162+
K_BLOB : 'BLOB';
163+
K_BOOLEAN : 'BOOLEAN';
164+
K_COUNTER : 'COUNTER';
165+
K_DATE : 'DATE';
166+
K_DECIMAL : 'DECIMAL';
167+
K_DOUBLE : 'DOUBLE';
168+
K_FLOAT : 'FLOAT';
169+
K_FROZEN : 'FROZEN';
170+
K_INET : 'INET';
171+
K_INT : 'INT';
172+
K_LIST : 'LIST';
173+
K_MAP : 'MAP';
174+
K_SMALLINT : 'SMALLINT';
175+
K_TEXT : 'TEXT';
176+
K_TIMEUUID : 'TIMEUUID';
177+
K_TIME : 'TIME';
178+
K_TINYINT : 'TINYINT';
179+
K_TUPLE : 'TUPLE';
180+
K_VARCHAR : 'VARCHAR';
181+
K_VARINT : 'VARINT';
182+
183+
// Literals
184+
185+
CODE_BLOCK: '$$' (~ '$' | '$' ~'$')* '$$';
186+
187+
STRING_LITERAL: '\'' ('\\' . | '\'\'' | ~('\'' | '\\'))* '\'';
188+
189+
DECIMAL_LITERAL: DEC_DIGIT+;
190+
191+
FLOAT_LITERAL: MINUS? [0-9]+ (DOT [0-9]+)?;
192+
193+
HEXADECIMAL_LITERAL: 'X' '\'' (HEX_DIGIT HEX_DIGIT)+ '\'' | '0X' HEX_DIGIT+;
194+
195+
REAL_LITERAL: DEC_DIGIT+ '.'? EXPONENT_NUM_PART | DEC_DIGIT* '.' DEC_DIGIT+ EXPONENT_NUM_PART?;
196+
197+
// Duration literal — must appear before OBJECT_NAME so that ISO-format tokens like
198+
// PT89H8M53S or P1Y2M3D are not consumed as OBJECT_NAME first.
199+
// Three accepted formats (all case-insensitive via explicit char classes):
200+
// 1. Standard quantity-unit: 89h4m48s 1y2mo3d -2mo (units: y mo w d h ms m us ns s)
201+
// 2. ISO 8601 standard: P1Y2M3DT4H5M6S PT89H8M53S
202+
// 3. ISO 8601 alternative: P0000-00-00T89:09:09
203+
DURATION_LITERAL
204+
: MINUS? DEC_DIGIT+ DURATION_UNIT (DEC_DIGIT+ DURATION_UNIT)*
205+
| [pP] DURATION_ISO_BODY
206+
;
207+
208+
OBJECT_NAME: [A-Za-z] [A-Za-z0-9_$]* | '"' ~'"'+ '"';
209+
210+
UUID:
211+
HEX_4DIGIT HEX_4DIGIT '-' HEX_4DIGIT '-' HEX_4DIGIT '-' HEX_4DIGIT '-' HEX_4DIGIT HEX_4DIGIT HEX_4DIGIT
212+
;
213+
214+
// Hidden
215+
216+
SPACE : [ \t\r\n]+ -> channel (HIDDEN);
217+
SPEC_MYSQL_COMMENT : '/*!' .+? '*/' -> channel (HIDDEN);
218+
COMMENT_INPUT : '/*' .*? '*/' -> channel (HIDDEN);
219+
LINE_COMMENT:
220+
(('-- ' | '#' | '//') ~ [\r\n]* ('\r'? '\n' | EOF) | '--' ('\r'? '\n' | EOF)) -> channel (HIDDEN)
221+
;
222+
223+
// Fragments
224+
225+
fragment HEX_4DIGIT: [0-9A-Fa-f] [0-9A-Fa-f] [0-9A-Fa-f] [0-9A-Fa-f];
226+
227+
fragment HEX_DIGIT: [0-9A-Fa-f];
228+
229+
fragment DEC_DIGIT: [0-9];
230+
231+
fragment EXPONENT_NUM_PART: 'E' '-'? DEC_DIGIT+;
232+
233+
// Duration unit suffixes — ordered longest-first within each ambiguous group:
234+
// 'mo' before 'm', 'ms' before 'm', 'us' before 's', 'ns' before 's'
235+
fragment DURATION_UNIT
236+
: [yY]
237+
| [mM][oO]
238+
| [wW]
239+
| [dD]
240+
| [hH]
241+
| [mM][sS]
242+
| [mM]
243+
| [uU][sS]
244+
| [nN][sS]
245+
| [sS]
246+
;
247+
248+
// ISO 8601 duration body (the part after the leading P).
249+
// Each alternative requires at least one component so that bare 'P' or 'PT' is not matched.
250+
// Date-M (months) is unambiguous from time-M (minutes) because time components follow the T separator.
251+
fragment DURATION_ISO_BODY
252+
: DEC_DIGIT+ [yY] (DEC_DIGIT+ [mM])? (DEC_DIGIT+ [wW])? (DEC_DIGIT+ [dD])? ([tT] (DEC_DIGIT+ [hH])? (DEC_DIGIT+ [mM])? (DEC_DIGIT+ [sS])?)?
253+
| DEC_DIGIT+ [mM] (DEC_DIGIT+ [wW])? (DEC_DIGIT+ [dD])? ([tT] (DEC_DIGIT+ [hH])? (DEC_DIGIT+ [mM])? (DEC_DIGIT+ [sS])?)?
254+
| DEC_DIGIT+ [wW] (DEC_DIGIT+ [dD])? ([tT] (DEC_DIGIT+ [hH])? (DEC_DIGIT+ [mM])? (DEC_DIGIT+ [sS])?)?
255+
| DEC_DIGIT+ [dD] ([tT] (DEC_DIGIT+ [hH])? (DEC_DIGIT+ [mM])? (DEC_DIGIT+ [sS])?)?
256+
| [tT] DEC_DIGIT+ [hH] (DEC_DIGIT+ [mM])? (DEC_DIGIT+ [sS])?
257+
| [tT] DEC_DIGIT+ [mM] (DEC_DIGIT+ [sS])?
258+
| [tT] DEC_DIGIT+ [sS]
259+
| DEC_DIGIT DEC_DIGIT DEC_DIGIT DEC_DIGIT '-' DEC_DIGIT DEC_DIGIT '-' DEC_DIGIT DEC_DIGIT [tT] DEC_DIGIT DEC_DIGIT ':' DEC_DIGIT DEC_DIGIT ':' DEC_DIGIT DEC_DIGIT
260+
;

0 commit comments

Comments
 (0)