Skip to content

Commit c18b626

Browse files
committed
Replace the same two statement types by one
1 parent da4420e commit c18b626

File tree

5 files changed

+37
-62
lines changed

5 files changed

+37
-62
lines changed

jdbc/src/main/java/tech/ydb/jdbc/query/QueryCmd.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
public enum QueryCmd {
88
UNKNOWN,
99
SELECT,
10-
CREATE_ALTER_DROP,
11-
INSERT_UPSERT,
12-
UPDATE_REPLACE_DELETE
10+
/** CREATE, DROP, ALTER, GRANT, REVOKE */
11+
DDL,
12+
/** INSERT, UPSERT, UPDATE, REPLACE, DELETE */
13+
DML
1314
}

jdbc/src/main/java/tech/ydb/jdbc/query/QueryStatement.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public void setHasGenerated(boolean hasGenerated) {
5252
}
5353

5454
public boolean hasUpdateCount() {
55-
return (command == QueryCmd.INSERT_UPSERT || command == QueryCmd.UPDATE_REPLACE_DELETE) && !hasReturinng;
55+
return command == QueryCmd.DML && !hasReturinng;
5656
}
5757

5858
public boolean hasUpdateWithGenerated() {
@@ -64,6 +64,6 @@ public boolean hasResults() {
6464
}
6565

6666
public boolean isDDL() {
67-
return command == QueryCmd.CREATE_ALTER_DROP;
67+
return command == QueryCmd.DDL;
6868
}
6969
}

jdbc/src/main/java/tech/ydb/jdbc/query/YdbQuery.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,31 @@ public class YdbQuery {
1818

1919
private final QueryType type;
2020
private final boolean isPlainYQL;
21-
private final boolean writing;
21+
private final boolean isWriting;
2222

23-
YdbQuery(QueryKey key, String preparedYQL, List<QueryStatement> stats, YqlBatcher batcher, QueryType type,
24-
boolean writing) {
23+
YdbQuery(QueryKey key, String preparedYQL, List<QueryStatement> stats, YqlBatcher batcher, QueryType type) {
2524
this.key = key;
2625
this.preparedYQL = preparedYQL;
2726
this.statements = stats;
2827
this.type = type;
2928
this.batcher = batcher;
3029

3130
boolean hasJdbcParameters = false;
31+
boolean hasDML = false;
3232
for (QueryStatement st: statements) {
3333
hasJdbcParameters = hasJdbcParameters || st.hasJdbcParameters();
34+
hasDML = hasDML || (st.getCmd() == QueryCmd.DML);
3435
}
3536
this.isPlainYQL = !hasJdbcParameters;
36-
this.writing = writing;
37+
this.isWriting = (type == QueryType.DATA_QUERY) && hasDML;
3738
}
3839

3940
public QueryType getType() {
4041
return type;
4142
}
4243

4344
public boolean isWriting() {
44-
return writing;
45+
return isWriting;
4546
}
4647

4748
public YqlBatcher getYqlBatcher() {
@@ -95,10 +96,7 @@ public static YdbQuery parseQuery(QueryKey query, YdbQueryProperties opts, YdbTy
9596
if (type == null) {
9697
type = parser.detectQueryType();
9798
}
98-
if (QueryType.DATA_QUERY.equals(type)) {
99-
writing = parser.detectWriting();
100-
}
10199

102-
return new YdbQuery(query, preparedYQL, statements, batcher, type, writing);
100+
return new YdbQuery(query, preparedYQL, statements, batcher, type);
103101
}
104102
}

jdbc/src/main/java/tech/ydb/jdbc/query/YdbQueryParser.java

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -74,18 +74,6 @@ public QueryType detectQueryType() throws SQLException {
7474
return type != null ? type : QueryType.DATA_QUERY;
7575
}
7676

77-
public boolean detectWriting() {
78-
for (QueryStatement st: statements) {
79-
switch (st.getCmd()) {
80-
case INSERT_UPSERT:
81-
case UPDATE_REPLACE_DELETE:
82-
return true;
83-
default:
84-
}
85-
}
86-
return false;
87-
}
88-
8977
@SuppressWarnings("MethodLength")
9078
public String parseSQL() throws SQLException {
9179
int fragmentStart = 0;
@@ -250,25 +238,25 @@ public String parseSQL() throws SQLException {
250238

251239
// starts with INSERT, UPSERT
252240
if (parseInsertKeyword(chars, keywordStart, keywordLength)) {
253-
statement = new QueryStatement(type, QueryType.DATA_QUERY, QueryCmd.INSERT_UPSERT);
241+
statement = new QueryStatement(type, QueryType.DATA_QUERY, QueryCmd.DML);
254242
batcher.readInsert();
255243
}
256244
if (parseUpsertKeyword(chars, keywordStart, keywordLength)) {
257-
statement = new QueryStatement(type, QueryType.DATA_QUERY, QueryCmd.INSERT_UPSERT);
245+
statement = new QueryStatement(type, QueryType.DATA_QUERY, QueryCmd.DML);
258246
batcher.readUpsert();
259247
}
260248

261249
// starts with UPDATE, REPLACE, DELETE
262250
if (parseUpdateKeyword(chars, keywordStart, keywordLength)) {
263-
statement = new QueryStatement(type, QueryType.DATA_QUERY, QueryCmd.UPDATE_REPLACE_DELETE);
251+
statement = new QueryStatement(type, QueryType.DATA_QUERY, QueryCmd.DML);
264252
batcher.readUpdate();
265253
}
266254
if (parseDeleteKeyword(chars, keywordStart, keywordLength)) {
267-
statement = new QueryStatement(type, QueryType.DATA_QUERY, QueryCmd.UPDATE_REPLACE_DELETE);
255+
statement = new QueryStatement(type, QueryType.DATA_QUERY, QueryCmd.DML);
268256
batcher.readDelete();
269257
}
270258
if (parseReplaceKeyword(chars, keywordStart, keywordLength)) {
271-
statement = new QueryStatement(type, QueryType.DATA_QUERY, QueryCmd.UPDATE_REPLACE_DELETE);
259+
statement = new QueryStatement(type, QueryType.DATA_QUERY, QueryCmd.DML);
272260
batcher.readReplace();
273261
}
274262

@@ -279,7 +267,7 @@ public String parseSQL() throws SQLException {
279267
|| parseGrantKeyword(chars, keywordStart, keywordLength)
280268
|| parseRevokeKeyword(chars, keywordStart, keywordLength)
281269
) {
282-
statement = new QueryStatement(type, QueryType.SCHEME_QUERY, QueryCmd.CREATE_ALTER_DROP);
270+
statement = new QueryStatement(type, QueryType.SCHEME_QUERY, QueryCmd.DDL);
283271
batcher.readIdentifier(chars, keywordStart, keywordLength);
284272
}
285273

@@ -343,7 +331,7 @@ private void addReturning(StringBuilder parsed, QueryStatement st) throws SQLExc
343331
if (st == null || returning == null || st.hasResults()) {
344332
return;
345333
}
346-
if (st.getCmd() != QueryCmd.INSERT_UPSERT && st.getCmd() != QueryCmd.UPDATE_REPLACE_DELETE) {
334+
if (st.getCmd() != QueryCmd.DML) {
347335
return;
348336
}
349337

jdbc/src/test/java/tech/ydb/jdbc/query/YdbQueryParserTest.java

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ public void emptyQueryTest(String query, String prepared) throws SQLException {
4848
@ParameterizedTest(name = "[{index}] {0} is explain query")
4949
@CsvSource(value = {
5050
"'Explain select * from table', ' select * from table', SELECT",
51-
"'exPlain\nupsert to', '\nupsert to', INSERT_UPSERT",
51+
"'exPlain\nupsert to', '\nupsert to', DML",
5252
"' Explain select * from table', ' select * from table', SELECT",
53-
"'\texPlain\nupsert to', '\t\nupsert to', INSERT_UPSERT",
54-
"'EXPLAIN/*comment*/UPSERT INTO', '/*comment*/UPSERT INTO', INSERT_UPSERT",
53+
"'\texPlain\nupsert to', '\t\nupsert to', DML",
54+
"'EXPLAIN/*comment*/UPSERT INTO', '/*comment*/UPSERT INTO', DML",
5555
})
5656
public void explainQueryTest(String query, String prepared, String cmd) throws SQLException {
5757
YdbQueryParser parser = new YdbQueryParser(types, query, props);
@@ -83,7 +83,7 @@ public void schemeQueryTest(String query) throws SQLException {
8383
Assertions.assertEquals(1, parser.getStatements().size());
8484
QueryStatement statement = parser.getStatements().get(0);
8585
Assertions.assertEquals(QueryType.SCHEME_QUERY, statement.getType());
86-
Assertions.assertEquals(QueryCmd.CREATE_ALTER_DROP, statement.getCmd());
86+
Assertions.assertEquals(QueryCmd.DDL, statement.getCmd());
8787
}
8888

8989
@ParameterizedTest(name = "[{index}] {0} is data query")
@@ -132,7 +132,6 @@ public void yqlUpsertTest() throws SQLException {
132132
Assertions.assertEquals(QueryType.DECLARE, parser.getStatements().get(0).getType());
133133
Assertions.assertEquals(QueryType.DECLARE, parser.getStatements().get(1).getType());
134134
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(2).getType());
135-
Assertions.assertEquals(true, parser.detectWriting());
136135
}
137136

138137
@Test
@@ -150,7 +149,6 @@ public void yqlSelectWithKeyTest() throws SQLException {
150149
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(1).getType());
151150

152151
Assertions.assertEquals(QueryType.DATA_QUERY, parser.detectQueryType());
153-
Assertions.assertEquals(false, parser.detectWriting());
154152
}
155153

156154
@Test
@@ -417,8 +415,7 @@ public void batchedInsertTest(String query) throws SQLException {
417415

418416
Assertions.assertEquals(1, parser.getStatements().size());
419417
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(0).getType());
420-
Assertions.assertEquals(QueryCmd.INSERT_UPSERT, parser.getStatements().get(0).getCmd());
421-
Assertions.assertEquals(true, parser.detectWriting());
418+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
422419

423420
YqlBatcher batch = parser.getYqlBatcher();
424421
Assertions.assertTrue(batch.isValidBatch());
@@ -444,8 +441,7 @@ public void batchedInsertOneColumnTest(String query) throws SQLException {
444441

445442
Assertions.assertEquals(1, parser.getStatements().size());
446443
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(0).getType());
447-
Assertions.assertEquals(QueryCmd.INSERT_UPSERT, parser.getStatements().get(0).getCmd());
448-
Assertions.assertEquals(true, parser.detectWriting());
444+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
449445

450446
YqlBatcher batch = parser.getYqlBatcher();
451447
Assertions.assertTrue(batch.isValidBatch());
@@ -471,8 +467,7 @@ public void batchedUpsertTest(String query) throws SQLException {
471467

472468
Assertions.assertEquals(1, parser.getStatements().size());
473469
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(0).getType());
474-
Assertions.assertEquals(QueryCmd.INSERT_UPSERT, parser.getStatements().get(0).getCmd());
475-
Assertions.assertEquals(true, parser.detectWriting());
470+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
476471

477472
YqlBatcher batch = parser.getYqlBatcher();
478473
Assertions.assertTrue(batch.isValidBatch());
@@ -498,8 +493,7 @@ public void batchedUpsertOneColumnTest(String query) throws SQLException {
498493

499494
Assertions.assertEquals(1, parser.getStatements().size());
500495
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(0).getType());
501-
Assertions.assertEquals(QueryCmd.INSERT_UPSERT, parser.getStatements().get(0).getCmd());
502-
Assertions.assertEquals(true, parser.detectWriting());
496+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
503497

504498
YqlBatcher batch = parser.getYqlBatcher();
505499
Assertions.assertTrue(batch.isValidBatch());
@@ -525,8 +519,7 @@ public void batchedReplaceTest(String query) throws SQLException {
525519

526520
Assertions.assertEquals(1, parser.getStatements().size());
527521
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(0).getType());
528-
Assertions.assertEquals(QueryCmd.UPDATE_REPLACE_DELETE, parser.getStatements().get(0).getCmd());
529-
Assertions.assertEquals(true, parser.detectWriting());
522+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
530523

531524
YqlBatcher batch = parser.getYqlBatcher();
532525
Assertions.assertTrue(batch.isValidBatch());
@@ -552,8 +545,7 @@ public void batchedReplaceOneColumnTest(String query) throws SQLException {
552545

553546
Assertions.assertEquals(1, parser.getStatements().size());
554547
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(0).getType());
555-
Assertions.assertEquals(QueryCmd.UPDATE_REPLACE_DELETE, parser.getStatements().get(0).getCmd());
556-
Assertions.assertEquals(true, parser.detectWriting());
548+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
557549

558550
YqlBatcher batch = parser.getYqlBatcher();
559551
Assertions.assertTrue(batch.isValidBatch());
@@ -579,8 +571,7 @@ public void batchedUpdateTest(String query) throws SQLException {
579571

580572
Assertions.assertEquals(1, parser.getStatements().size());
581573
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(0).getType());
582-
Assertions.assertEquals(QueryCmd.UPDATE_REPLACE_DELETE, parser.getStatements().get(0).getCmd());
583-
Assertions.assertEquals(true, parser.detectWriting());
574+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
584575

585576
YqlBatcher batch = parser.getYqlBatcher();
586577
Assertions.assertTrue(batch.isValidBatch());
@@ -606,8 +597,7 @@ public void batchedUpdateOneColumnTest(String query) throws SQLException {
606597

607598
Assertions.assertEquals(1, parser.getStatements().size());
608599
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(0).getType());
609-
Assertions.assertEquals(QueryCmd.UPDATE_REPLACE_DELETE, parser.getStatements().get(0).getCmd());
610-
Assertions.assertEquals(true, parser.detectWriting());
600+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
611601

612602
YqlBatcher batch = parser.getYqlBatcher();
613603
Assertions.assertTrue(batch.isValidBatch());
@@ -633,7 +623,7 @@ public void batchedUpdateOneColumnWithTableName(String query) throws SQLExceptio
633623

634624
Assertions.assertEquals(1, parser.getStatements().size());
635625
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(0).getType());
636-
Assertions.assertEquals(QueryCmd.UPDATE_REPLACE_DELETE, parser.getStatements().get(0).getCmd());
626+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
637627

638628
YqlBatcher batch = parser.getYqlBatcher();
639629
Assertions.assertTrue(batch.isValidBatch());
@@ -659,8 +649,7 @@ public void batchedDeleteTest(String query) throws SQLException {
659649

660650
Assertions.assertEquals(1, parser.getStatements().size());
661651
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(0).getType());
662-
Assertions.assertEquals(QueryCmd.UPDATE_REPLACE_DELETE, parser.getStatements().get(0).getCmd());
663-
Assertions.assertEquals(true, parser.detectWriting());
652+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
664653

665654
YqlBatcher batch = parser.getYqlBatcher();
666655
Assertions.assertTrue(batch.isValidBatch());
@@ -685,8 +674,7 @@ public void batchedDeleteOneColumnTest(String query) throws SQLException {
685674

686675
Assertions.assertEquals(1, parser.getStatements().size());
687676
Assertions.assertEquals(QueryType.DATA_QUERY, parser.getStatements().get(0).getType());
688-
Assertions.assertEquals(QueryCmd.UPDATE_REPLACE_DELETE, parser.getStatements().get(0).getCmd());
689-
Assertions.assertEquals(true, parser.detectWriting());
677+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
690678

691679
YqlBatcher batch = parser.getYqlBatcher();
692680
Assertions.assertTrue(batch.isValidBatch());
@@ -747,7 +735,7 @@ public void validBulkInsertTest(String query) throws SQLException {
747735

748736
Assertions.assertEquals(1, parser.getStatements().size());
749737
Assertions.assertEquals(QueryType.BULK_QUERY, parser.getStatements().get(0).getType());
750-
Assertions.assertEquals(QueryCmd.INSERT_UPSERT, parser.getStatements().get(0).getCmd());
738+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
751739

752740
YqlBatcher batch = parser.getYqlBatcher();
753741
Assertions.assertTrue(batch.isValidBatch());
@@ -771,7 +759,7 @@ public void validBulkUpsertTest(String query) throws SQLException {
771759

772760
Assertions.assertEquals(1, parser.getStatements().size());
773761
Assertions.assertEquals(QueryType.BULK_QUERY, parser.getStatements().get(0).getType());
774-
Assertions.assertEquals(QueryCmd.INSERT_UPSERT, parser.getStatements().get(0).getCmd());
762+
Assertions.assertEquals(QueryCmd.DML, parser.getStatements().get(0).getCmd());
775763

776764
YqlBatcher batch = parser.getYqlBatcher();
777765
Assertions.assertTrue(batch.isValidBatch());

0 commit comments

Comments
 (0)