Skip to content

Commit 5dcc992

Browse files
committed
Added option replaceJdbcInByYqlList
1 parent 4e026dd commit 5dcc992

File tree

6 files changed

+45
-26
lines changed

6 files changed

+45
-26
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ public List<QueryStatement> getStatements() {
5959
}
6060

6161
public static YdbQuery parseQuery(String query, YdbQueryProperties opts) throws SQLException {
62-
YdbQueryParser parser = new YdbQueryParser(query, opts.isDetectQueryType(), opts.isDetectJdbcParameters());
62+
YdbQueryParser parser = new YdbQueryParser(
63+
query, opts.isDetectQueryType(), opts.isDetectJdbcParameters(), opts.isReplaceJdbcInByYqlList()
64+
);
6365
String preparedYQL = parser.parseSQL();
6466

6567
QueryType type = null;

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
public class YdbQueryParser {
2323
private final boolean isDetectQueryType;
2424
private final boolean isDetectJdbcParameters;
25+
private final boolean isConvertJdbcInToList;
2526

2627
private final List<QueryStatement> statements = new ArrayList<>();
2728
private final YqlBatcher batcher = new YqlBatcher();
@@ -30,9 +31,10 @@ public class YdbQueryParser {
3031

3132
private int jdbcPrmIndex = 0;
3233

33-
public YdbQueryParser(String origin, boolean isDetectQueryType, boolean isDetectJdbcParameters) {
34+
public YdbQueryParser(String origin, boolean isDetectQueryType, boolean isDetectParameters, boolean isConvertIn) {
3435
this.isDetectQueryType = isDetectQueryType;
35-
this.isDetectJdbcParameters = isDetectJdbcParameters;
36+
this.isDetectJdbcParameters = isDetectParameters;
37+
this.isConvertJdbcInToList = isConvertIn;
3638
this.origin = origin;
3739
this.parsed = new StringBuilder(origin.length() + 10);
3840
}

jdbc/src/main/java/tech/ydb/jdbc/settings/YdbConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ public DriverPropertyInfo[] toPropertyInfo() throws SQLException {
227227
YdbQueryProperties.DISABLE_DETECT_SQL_OPERATIONS.toInfo(properties),
228228
YdbQueryProperties.DISABLE_JDBC_PARAMETERS.toInfo(properties),
229229
YdbQueryProperties.DISABLE_JDBC_PARAMETERS_DECLARE.toInfo(properties),
230+
YdbQueryProperties.REPLACE_JDBC_IN_BY_YQL_LIST.toInfo(properties),
230231

231232
YdbQueryProperties.REPLACE_INSERT_TO_UPSERT.toInfo(properties),
232233
YdbQueryProperties.FORCE_BULK_UPSERT.toInfo(properties),

jdbc/src/main/java/tech/ydb/jdbc/settings/YdbQueryProperties.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,13 @@ public class YdbQueryProperties {
2828
static final YdbProperty<Boolean> DISABLE_JDBC_PARAMETERS = YdbProperty.bool("disableJdbcParameters",
2929
"Disable auto detect JDBC standart parameters '?'", false);
3030

31+
static final YdbProperty<Boolean> REPLACE_JDBC_IN_BY_YQL_LIST = YdbProperty.bool("replaceJdbcInByYqlList",
32+
"Convert SQL operation IN (?, ?, ... ,?) to YQL operation IN $list", true);
33+
3134
static final YdbProperty<Boolean> DISABLE_JDBC_PARAMETERS_DECLARE = YdbProperty.bool("disableJdbcParameterDeclare",
3235
"Disable enforce DECLARE section for JDBC parameters '?'", false);
3336

37+
3438
@Deprecated
3539
private static final YdbProperty<QueryType> FORCE_QUERY_MODE = YdbProperty.enums("forceQueryMode", QueryType.class,
3640
"Force usage one of query modes (DATA_QUERY, SCAN_QUERY, SCHEME_QUERY or EXPLAIN_QUERY) for all statements"
@@ -50,6 +54,7 @@ public class YdbQueryProperties {
5054

5155
private final boolean isDetectQueryType;
5256
private final boolean isDetectJdbcParameters;
57+
private final boolean isReplaceJdbcInToYqlList;
5358
private final boolean isDeclareJdbcParameters;
5459

5560
private final boolean isPrepareDataQueries;
@@ -68,6 +73,7 @@ public YdbQueryProperties(YdbConfig config) throws SQLException {
6873
this.isPrepareDataQueries = !disablePrepareDataQueries;
6974
this.isDetectBatchQueries = !disablePrepareDataQueries && !disableAutoPreparedBatches;
7075

76+
boolean replaceJdbcInByYqlList = REPLACE_JDBC_IN_BY_YQL_LIST.readValue(props).getValue();
7177
boolean disableJdbcParametersDeclare = DISABLE_JDBC_PARAMETERS_DECLARE.readValue(props).getValue();
7278
boolean disableJdbcParametersParse = DISABLE_JDBC_PARAMETERS.readValue(props).getValue();
7379
boolean disableSqlOperationsDetect = DISABLE_DETECT_SQL_OPERATIONS.readValue(props).getValue();
@@ -76,6 +82,8 @@ public YdbQueryProperties(YdbConfig config) throws SQLException {
7682
this.isDetectJdbcParameters = !disableSqlOperationsDetect && !disableJdbcParametersParse;
7783
this.isDeclareJdbcParameters = !disableSqlOperationsDetect && !disableJdbcParametersParse
7884
&& !disableJdbcParametersDeclare;
85+
this.isReplaceJdbcInToYqlList = !disableSqlOperationsDetect && !disableJdbcParametersParse
86+
&& replaceJdbcInByYqlList;
7987

8088

8189
YdbValue<QueryType> forcedType = FORCE_QUERY_MODE.readValue(props);
@@ -109,6 +117,10 @@ public boolean isDeclareJdbcParameters() {
109117
return isDeclareJdbcParameters;
110118
}
111119

120+
public boolean isReplaceJdbcInByYqlList() {
121+
return isReplaceJdbcInToYqlList;
122+
}
123+
112124
public boolean isPrepareDataQueries() {
113125
return isPrepareDataQueries;
114126
}

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

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class YdbQueryParserTest {
2727
"BULK;~;",
2828
}, delimiter = '~')
2929
public void emptyQueryTest(String query, String prepared) throws SQLException {
30-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
30+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
3131
String parsed = parser.parseSQL();
3232
Assertions.assertEquals(prepared, parsed);
3333
Assertions.assertEquals(0, parser.getStatements().size());
@@ -42,7 +42,7 @@ public void emptyQueryTest(String query, String prepared) throws SQLException {
4242
"'EXPLAIN/*comment*/UPSERT INTO', '/*comment*/UPSERT INTO', INSERT_UPSERT",
4343
})
4444
public void explainQueryTest(String query, String prepared, String cmd) throws SQLException {
45-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
45+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
4646
String parsed = parser.parseSQL();
4747

4848
Assertions.assertEquals(prepared, parsed);
@@ -61,7 +61,7 @@ public void explainQueryTest(String query, String prepared, String cmd) throws S
6161
"-- comment \nCreate;",
6262
})
6363
public void schemeQueryTest(String query) throws SQLException {
64-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
64+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
6565
String parsed = parser.parseSQL();
6666

6767
Assertions.assertEquals(query, parsed);
@@ -81,7 +81,7 @@ public void schemeQueryTest(String query) throws SQLException {
8181
"BuLK_INSERT;",
8282
})
8383
public void unknownQueryTest(String query) throws SQLException {
84-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
84+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
8585
String parsed = parser.parseSQL();
8686

8787
Assertions.assertEquals(query, parsed);
@@ -95,7 +95,7 @@ public void unknownQueryTest(String query) throws SQLException {
9595
@Test
9696
public void wrongSqlCommandTest() throws SQLException {
9797
String query = "SC;";
98-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
98+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
9999
String parsed = parser.parseSQL();
100100
Assertions.assertEquals(query, parsed);
101101

@@ -110,7 +110,7 @@ public void yqlUpsertTest() throws SQLException {
110110
+ "declare $p2 as Text;\n"
111111
+ "upsert into tableName (key, c_Text) values ($p1, $p2)";
112112

113-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
113+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
114114
String parsed = parser.parseSQL();
115115
Assertions.assertEquals(query, parsed);
116116

@@ -126,7 +126,7 @@ public void yqlSelectWithKeyTest() throws SQLException {
126126
+ "declare $key as Optional<Int32>;\n"
127127
+ "select key, column from tableName where key=$key";
128128

129-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
129+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
130130
String parsed = parser.parseSQL();
131131
Assertions.assertEquals(query, parsed);
132132

@@ -143,7 +143,7 @@ public void scanSelectWithKeyTest() throws SQLException {
143143
+ "declare $key as Optional<Int32>;\n"
144144
+ "scan select key, column from tableName where key=$key";
145145

146-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
146+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
147147
String parsed = parser.parseSQL();
148148
Assertions.assertEquals("declare $key as Optional<Int32>;\n"
149149
+ " select key, column from tableName where key=$key", parsed);
@@ -165,7 +165,7 @@ public void scanSelectWithKeyTest() throws SQLException {
165165
+ "@'select offset, limit from test_table offset 20 limit -- comment\n$jp1;'",
166166
}, delimiter = '@')
167167
public void offsetParameterTest(String query, String parsed) throws SQLException {
168-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
168+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
169169
Assertions.assertEquals(parsed, parser.parseSQL());
170170

171171
Assertions.assertEquals(1, parser.getStatements().size());
@@ -194,7 +194,7 @@ public void offsetParameterTest(String query, String parsed) throws SQLException
194194
"select * from test_table where limit/?",
195195
})
196196
public void noOffsetParameterTest(String query) throws SQLException {
197-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
197+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
198198
parser.parseSQL();
199199

200200
Assertions.assertEquals(1, parser.getStatements().size());
@@ -219,7 +219,7 @@ public void noOffsetParameterTest(String query) throws SQLException {
219219
";;Insert into table_name (`c1`, /* comment */ c2, c3 ) values(?, ? , ?);;",
220220
})
221221
public void batchedInsertTest(String query) throws SQLException {
222-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
222+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
223223
parser.parseSQL();
224224

225225
Assertions.assertEquals(1, parser.getStatements().size());
@@ -245,7 +245,7 @@ public void batchedInsertTest(String query) throws SQLException {
245245
";;Insert\tinto\tone_column(`c1`) values(\t\n?);;;",
246246
})
247247
public void batchedInsertOneColumnTest(String query) throws SQLException {
248-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
248+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
249249
parser.parseSQL();
250250

251251
Assertions.assertEquals(1, parser.getStatements().size());
@@ -271,7 +271,7 @@ public void batchedInsertOneColumnTest(String query) throws SQLException {
271271
";;Upsert/* comment */into table_name (`c1`, /* comment */ c2, c3 ) values(?, ? , ?);",
272272
})
273273
public void batchedUpsertTest(String query) throws SQLException {
274-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
274+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
275275
parser.parseSQL();
276276

277277
Assertions.assertEquals(1, parser.getStatements().size());
@@ -297,7 +297,7 @@ public void batchedUpsertTest(String query) throws SQLException {
297297
";;Upsert\tinto\tone_column(`c1`) values(\t\n?);;;",
298298
})
299299
public void batchedUpsertOneColumnTest(String query) throws SQLException {
300-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
300+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
301301
parser.parseSQL();
302302

303303
Assertions.assertEquals(1, parser.getStatements().size());
@@ -323,7 +323,7 @@ public void batchedUpsertOneColumnTest(String query) throws SQLException {
323323
";;Replace/* comment */into table_name (`c1`, /* comment */ c2, c3 ) values(?, ? , ?);",
324324
})
325325
public void batchedReplaceTest(String query) throws SQLException {
326-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
326+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
327327
parser.parseSQL();
328328

329329
Assertions.assertEquals(1, parser.getStatements().size());
@@ -349,7 +349,7 @@ public void batchedReplaceTest(String query) throws SQLException {
349349
";;Replace\tinto\tone_column(`c1`) values(\t\n?);;;",
350350
})
351351
public void batchedReplaceOneColumnTest(String query) throws SQLException {
352-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
352+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
353353
parser.parseSQL();
354354

355355
Assertions.assertEquals(1, parser.getStatements().size());
@@ -375,7 +375,7 @@ public void batchedReplaceOneColumnTest(String query) throws SQLException {
375375
";;UPDATE/* comment */table_name set `c1`= ?, c2 = ?, c3 = ? WHERE k1\n=\t?--comment\nAND k2=?",
376376
})
377377
public void batchedUpdateTest(String query) throws SQLException {
378-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
378+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
379379
parser.parseSQL();
380380

381381
Assertions.assertEquals(1, parser.getStatements().size());
@@ -401,7 +401,7 @@ public void batchedUpdateTest(String query) throws SQLException {
401401
";;UPDATE/* comment */one_column set `c1`= ? WHERE k1=--comment\n?",
402402
})
403403
public void batchedUpdateOneColumnTest(String query) throws SQLException {
404-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
404+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
405405
parser.parseSQL();
406406

407407
Assertions.assertEquals(1, parser.getStatements().size());
@@ -427,7 +427,7 @@ public void batchedUpdateOneColumnTest(String query) throws SQLException {
427427
";;DELETE/* comment */FRom table_name WHERE k1\n=\t?--comment\nAND k2=?",
428428
})
429429
public void batchedDeleteTest(String query) throws SQLException {
430-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
430+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
431431
parser.parseSQL();
432432

433433
Assertions.assertEquals(1, parser.getStatements().size());
@@ -452,7 +452,7 @@ public void batchedDeleteTest(String query) throws SQLException {
452452
";;DELETE/* comment */FROM--\none_column WHERE k1=--comment\n?",
453453
})
454454
public void batchedDeleteOneColumnTest(String query) throws SQLException {
455-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
455+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
456456
parser.parseSQL();
457457

458458
Assertions.assertEquals(1, parser.getStatements().size());
@@ -495,7 +495,7 @@ public void batchedDeleteOneColumnTest(String query) throws SQLException {
495495
"upsert into table_name (c1, c2, c3) values (?, ?, ?); select 1;",
496496
})
497497
public void notBatchedTest(String query) throws SQLException {
498-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
498+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
499499
parser.parseSQL();
500500

501501
YqlBatcher batch = parser.getYqlBatcher();
@@ -510,7 +510,7 @@ public void notBatchedTest(String query) throws SQLException {
510510
";;BUlk Insert into table_name (`c1`, /* comment */ c2, c3 ) values(?, ? , ?);",
511511
})
512512
public void validBulkInsertTest(String query) throws SQLException {
513-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
513+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
514514
parser.parseSQL();
515515

516516
Assertions.assertEquals(1, parser.getStatements().size());
@@ -534,7 +534,7 @@ public void validBulkInsertTest(String query) throws SQLException {
534534
";;Bulk Upsert/* comment */into table_name (`c1`, /* comment */ c2, c3 ) values(?, ? , ?);",
535535
})
536536
public void validBulkUpsertTest(String query) throws SQLException {
537-
YdbQueryParser parser = new YdbQueryParser(query, true, true);
537+
YdbQueryParser parser = new YdbQueryParser(query, true, true, true);
538538
parser.parseSQL();
539539

540540
Assertions.assertEquals(1, parser.getStatements().size());

jdbc/src/test/java/tech/ydb/jdbc/settings/YdbDriverProperitesTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ static DriverPropertyInfo[] defaultPropertyInfo(@Nullable String localDatacenter
338338
new DriverPropertyInfo("disableDetectSqlOperations", "false"),
339339
new DriverPropertyInfo("disableJdbcParameters", "false"),
340340
new DriverPropertyInfo("disableJdbcParameterDeclare", "false"),
341+
new DriverPropertyInfo("replaceJdbcInByYqlList", "true"),
341342
new DriverPropertyInfo("replaceInsertByUpsert", "false"),
342343
new DriverPropertyInfo("forceBulkUpsert", "false"),
343344
new DriverPropertyInfo("forceScanSelect", "false"),
@@ -381,6 +382,7 @@ static DriverPropertyInfo[] customizedPropertyInfo() {
381382
new DriverPropertyInfo("disableDetectSqlOperations", "true"),
382383
new DriverPropertyInfo("disableJdbcParameters", "true"),
383384
new DriverPropertyInfo("disableJdbcParameterDeclare", "true"),
385+
new DriverPropertyInfo("replaceJdbcInByYqlList", "false"),
384386
new DriverPropertyInfo("replaceInsertByUpsert", "true"),
385387
new DriverPropertyInfo("forceBulkUpsert", "true"),
386388
new DriverPropertyInfo("forceScanSelect", "true"),

0 commit comments

Comments
 (0)