Skip to content

Commit 2113b87

Browse files
committed
filled test statements
1 parent 9f4aa7a commit 2113b87

File tree

1 file changed

+155
-4
lines changed

1 file changed

+155
-4
lines changed

jdbc-v2/src/test/java/com/clickhouse/jdbc/internal/SqlParserTest.java

Lines changed: 155 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,10 @@ public Object[][] testMiscStmtDp() {
331331
{"WITH (select 1) as a, z AS (select 2) SELECT 1", 0},
332332
{"SELECT result FROM test_view(myParam = ?)", 1},
333333
{"WITH toDate('2025-08-20') as DATE_END, events AS ( SELECT 1 ) SELECT * FROM events", 0},
334-
{"select 1 table where 1 = ?", 1}
334+
{"select 1 table where 1 = ?", 1},
335+
{"insert into t (i, t) values (1, timestamp '2010-01-01 00:00:00')", 0},
336+
{"insert into t (i, t) values (1, date '2010-01-01')", 0
337+
}
335338
};
336339
}
337340

@@ -421,7 +424,7 @@ public Object[][] testMiscStmtDp() {
421424

422425

423426
@Test(dataProvider = "testStatementWithoutResultSetDP")
424-
public void testStatementWithoutResultSet(String sql, int args, boolean hasResultSet) {
427+
public void testStatementsForResultSet(String sql, int args, boolean hasResultSet) {
425428
SqlParser parser = new SqlParser();
426429
{
427430
ParsedPreparedStatement stmt = parser.parsePreparedStatement(sql);
@@ -440,8 +443,68 @@ public void testStatementWithoutResultSet(String sql, int args, boolean hasResul
440443
@DataProvider
441444
public static Object[][] testStatementWithoutResultSetDP() {
442445
return new Object[][]{
443-
{"INSERT INTO test_table VALUES (1, ?)", 1, false},
446+
/* has result set */
444447
{"SELECT * FROM test_table", 0, true},
448+
{"SHOW CREATE TABLE `db`.`test_table`", 0, true},
449+
{"SHOW CREATE TEMPORARY TABLE `db1`.`tmp_table`", 0, true},
450+
{"SHOW CREATE DICTIONARY dict1", 0, true},
451+
{"SHOW CREATE VIEW view1", 0, true},
452+
{"SHOW CREATE DATABASE db1", 0, true},
453+
{"SHOW CREATE TABLE table1 INTO OUTFILE table1.sql", 0, true},
454+
{"SHOW TABLES ", 0, true},
455+
{"SHOW TABLES FROM system LIKE '%user%'", 0, true},
456+
{"SHOW COLUMNS FROM 'orders' LIKE 'delivery_%'", 0, true},
457+
{"SHOW DICTIONARIES FROM db LIKE '%reg%' LIMIT 2", 0, true},
458+
{"SHOW INDEX FROM 'tbl'", 0, true},
459+
{"SHOW PROCESSLIST", 0, true},
460+
{"SHOW GRANTS FOR `user01`", 0, true},
461+
{"SHOW GRANTS FOR `user01` FINAL", 0, true},
462+
{"SHOW GRANTS FOR `user01` WITH IMPLICIT FINAL", 0, true},
463+
{"SHOW CREATE USER `user01`", 0, true},
464+
{"SHOW CREATE USER CURRENT_USER", 0, true},
465+
{"SHOW CREATE ROLE `role_01`", 0, true},
466+
{"SHOW CREATE POLICY policy_1 ON `tableA`, `db1`.`tableB`", 0, true},
467+
{"SHOW CREATE ROW POLICY policy_1 ON `tableA`, `db1`.`tableB`", 0, true},
468+
{"SHOW CREATE QUOTA CURRENT", 0, true},
469+
{"SHOW CREATE QUOTA `q1`", 0, true},
470+
{"SHOW CREATE PROFILE `p1`", 0, true},
471+
{"SHOW CREATE SETTINGS PROFILE `p3`", 0, true},
472+
{"SHOW USERS", 0, true},
473+
{"SHOW CURRENT ROLES", 0, true},
474+
{"SHOW ENABLED ROLES", 0, true},
475+
{"SHOW SETTINGS PROFILES", 0, true},
476+
{"SHOW PROFILES", 0, true},
477+
{"SHOW POLICIES ON `db`.`table`", 0, true},
478+
{"SHOW ROW POLICIES ON table1", 0, true},
479+
{"SHOW QUOTAS", 0, true},
480+
{"SHOW CURRENT QUOTA", 0, true},
481+
{"SHOW QUOTA", 0, true},
482+
{"SHOW ACCESS", 0, true},
483+
{"SHOW CLUSTER `default`", 0, true},
484+
{"SHOW CLUSTERS LIKE 'test%' LIMIT 1", 0, true},
485+
{"SHOW SETTINGS LIKE 'send_timeout'", 0, true},
486+
{"SHOW SETTINGS ILIKE '%CONNECT_timeout%'", 0, true},
487+
{"SHOW CHANGED SETTINGS ILIKE '%MEMORY%'", 0, true},
488+
{"SHOW SETTING `min_insert_block_size_rows`", 0, true},
489+
{"SHOW FILESYSTEM CACHES", 0, true},
490+
{"SHOW ENGINES", 0, true},
491+
{"SHOW FUNCTIONS", 0, true},
492+
{"SHOW FUNCTIONS LIKE '%max%", 0, true},
493+
{"SHOW MERGES", 0, true},
494+
{"SHOW MERGES LIKE 'your_t%' LIMIT 1", 0, true},
495+
{"EXPLAIN SELECT sum(number) FROM numbers(10) GROUP BY number % ?;", 1, true},
496+
{"EXPLAIN SELECT sum(number) FROM numbers(10) GROUP BY number % 4;", 0, true},
497+
{"DESCRIBE TABLE table", 0, true},
498+
{"DESC TABLE table1", 0, true},
499+
{"EXISTS TABLE `db`.`table01`", 0, true},
500+
{"EXISTS TABLE ?", 1, true},
501+
{"CHECK GRANT SELECT(col2) ON table_2", 0, true},
502+
{"CHECK TABLE test_table", 0, true},
503+
{"CHECK TABLE t0 PARTITION ID '201003' FORMAT PrettyCompactMonoBlock SETTINGS check_query_single_value_result = 0", 0, true},
504+
505+
506+
/* no result set */
507+
{"INSERT INTO test_table VALUES (1, ?)", 1, false},
445508
{"CREATE DATABASE `test_db`", 0, false},
446509
{"CREATE DATABASE `test_db` COMMENT 'for tests'", 0, false},
447510
{"CREATE DATABASE IF NOT EXISTS `test_db`", 0, false},
@@ -450,6 +513,8 @@ public static Object[][] testStatementWithoutResultSetDP() {
450513
{"CREATE TABLE `test_table` (id UInt64)", 0, false},
451514
{"CREATE TABLE IF NOT EXISTS `test_table` (id UInt64)", 0, false},
452515
{"CREATE TABLE `test_table` (id UInt64) ENGINE = MergeTree() ORDER BY id", 0, false},
516+
{"CREATE TABLE `test_table` (id UInt64 NOT NULL ) ENGINE = MergeTree() ORDER BY id", 0, false},
517+
{"CREATE TABLE `test_table` (id UInt64 NULL ) ENGINE = MergeTree() ORDER BY id", 0, false},
453518
{"CREATE TABLE `test_table` (id UInt64) ENGINE = MergeTree() ORDER BY id ON CLUSTER `cluster`", 0, false},
454519
{"CREATE TABLE `test_table` (id UInt64) ENGINE = MergeTree() ORDER BY id ON CLUSTER `cluster` ENGINE = Replicated('clickhouse1:9000', 'test_db')", 0, false},
455520
{"CREATE TABLE `test_table` (id UInt64) ENGINE = MergeTree() ORDER BY id ON CLUSTER `cluster` ENGINE = Replicated('clickhouse1:9000', 'test_db') COMMENT 'for tests'", 0, false},
@@ -477,7 +542,93 @@ public static Object[][] testStatementWithoutResultSetDP() {
477542
{"CREATE QUOTA qB FOR INTERVAL 30 minute MAX execution_time = 0.5, FOR INTERVAL 5 quarter MAX queries = 321, errors = 10 TO default", 0, false},
478543
{"CREATE SETTINGS PROFILE max_memory_usage_profile SETTINGS max_memory_usage = 100000001 MIN 90000000 MAX 110000000 TO robin", 0, false},
479544
{"CREATE NAMED COLLECTION foobar AS a = '1', b = '2' OVERRIDABLE", 0, false},
480-
545+
{"ALTER TABLE table1 ALTER COLUMN value Int64", 0, false},
546+
{"alter table t alter column j default 1", 0, false},
547+
{"alter table t modify comment 'comment'", 0, false},
548+
549+
{"DELETE FROM db.table1 ON CLUSTER `default` WHERE max(a, 10) > ?", 1, false},
550+
{"DELETE FROM table WHERE a = ?", 1, false},
551+
{"DELETE FROM table WHERE a = ? AND b = ?", 2, false},
552+
{"DELETE FROM hits WHERE Title LIKE '%hello%';", 0, false},
553+
554+
{"SYSTEM START FETCHES", 0, false},
555+
{"SYSTEM RELOAD DICTIONARIES", 0, false},
556+
{"SYSTEM RELOAD DICTIONARIES ON CLUSTER `default`", 0, false},
557+
{"GRANT SELECT ON db.* TO john", 0, false},
558+
{"GRANT ON CLUSTER `default` SELECT(a, b) ON db1.tableA TO `user` WITH GRANT OPTION WITH REPLACE OPTION", 0, false},
559+
{"GRANT SELECT db.* TO user01 WITH REPLACE OPTION", 0, false},
560+
{"GRANT ON CLUSTER role1, role2 TO `user01` WITH ADMIN OPTION WITH REPLACE OPTION", 0, false},
561+
{"GRANT CURRENT GRANTS TO user01", 0, false},
562+
{"REVOKE SELECT(a,b) ON db1.tableA FROM `user01", 0, false},
563+
{"REVOKE SELECT ON db1.* FROM ALL", 0, false},
564+
{"REVOKE SELECT ON db1.* FROM ALL EXCEPT `admin01`", 0, false},
565+
{"REVOKE SELECT ON db1.* FROM ALL EXCEPT CURRENT USER", 0, false},
566+
{"REVOKE ON CLUSTER `default` SELECT ON db1.* FROM ALL EXCEPT CURRENT USER", 0, false},
567+
{"REVOKE ON CLUSTER `blaster` ADMIN OPTION FOR role1, role3 FROM `user01`", 0, false},
568+
{"REVOKE ON CLUSTER `blaster` role1, role3 FROM ALL EXCEPT CURRENT USER", 0, false},
569+
{"REVOKE ON CLUSTER `blaster` role1, role3 FROM ALL EXCEPT `very_nice_user`", 0, false},
570+
{"UPDATE db.table01 ON CLUSTER `default` SET col1 = ?, col2 = ? WHERE col3 > ?", 3, false},
571+
{"UPDATE hits SET Title = 'Updated Title' WHERE EventDate = today()", 0, false},
572+
{"ATTACH TABLE test FROM '01188_attach/test' (s String, n UInt8) ENGINE = File(TSV)", 0, false},
573+
{"ATTACH TABLE test AS REPLICATED", 0, false},
574+
{"DETACH TABLE test", 0, false},
575+
{"ATTACH DICTIONARY IF NOT EXISTS db.dict1 ON CLUSTER `default`", 0, false},
576+
{"ATTACH DATABASE IF NOT EXISTS db1 ENGINE=MergeTree ON CLUSTER `default`", 0, false},
577+
{"DROP DATABASE `db1`",0, false},
578+
{"DROP TABLE `db1`.`table01`", 0, false},
579+
{"DROP DICTIONARY `dict1`", 0, false},
580+
{"DROP ROLE IF EXISTS `role01`", 0 , false},
581+
{"DROP POLICY IF EXISTS `pol1`", 0, false},
582+
{"DROP QUOTA IF EXISTS q1", 0, false},
583+
{"DROP SETTINGS PROFILE IF EXISTS `profile1` ON CLUSTER `default`", 0, false},
584+
{"DROP VIEW view1 ON CLUSTER `default` SYNC", 0, false},
585+
{"DROP FUNCTION linear_equation", 0, false},
586+
{"DROP NAMED COLLECTION foobar", 0, false},
587+
{"KILL QUERY WHERE query_id='2-857d-4a57-9ee0-327da5d60a90'", 0, false},
588+
{"KILL QUERY WHERE user='username' SYNC", 0, false},
589+
{"KILL QUERY ON CLUSTER `default` WHERE user='username' SYNC", 0, false},
590+
{"KILL QUERY ON CLUSTER `default` WHERE user='username' ASYNC", 0, false},
591+
{"KILL QUERY ON CLUSTER `default` WHERE user='username' TEST", 0, false},
592+
{"KILL MUTATION WHERE database = 'default' AND table = 'table'", 0, false},
593+
{"KILL MUTATION WHERE database = 'default' AND table = 'table' AND mutation_id = 'mutation_3.txt'", 0, false},
594+
{"OPTIMIZE TABLE table DEDUPLICATE BY colX,colY,colZ", 0, false},
595+
{"OPTIMIZE TABLE table DEDUPLICATE BY * EXCEPT colX", 0, false},
596+
{"OPTIMIZE TABLE table DEDUPLICATE BY * EXCEPT (colX, colY)", 0, false},
597+
{"OPTIMIZE TABLE table DEDUPLICATE BY COLUMNS('column-matched-by-regex')", 0, false},
598+
{"OPTIMIZE TABLE table DEDUPLICATE BY COLUMNS('column-matched-by-regex') EXCEPT colX", 0, false},
599+
{"OPTIMIZE TABLE table DEDUPLICATE BY COLUMNS('column-matched-by-regex') EXCEPT (colX, colY)", 0, false},
600+
{"OPTIMIZE TABLE table DEDUPLICATE", 0, false},
601+
{"OPTIMIZE TABLE table DEDUPLICATE BY *", 0, false},
602+
{"RENAME TABLE table_A TO table_A_bak, table_B TO table_B_bak", 0, false},
603+
{"RENAME TABLE table_A TO table_A_bak, table_B TO table_B_bak ON CLUSTER `default`", 0, false},
604+
{"RENAME DICTIONARY dictA TO dictB ON CLUSTER `default`", 0, false},
605+
{"EXCHANGE TABLES table1 AND table2", 0, false},
606+
{"EXCHANGE TABLES table1 AND table2 ON CLUSTER `default`", 0, false},
607+
{"EXCHANGE DICTIONARIES dict1 AND dict2", 0, false},
608+
{"EXCHANGE DICTIONARIES dict1 AND dict2 ON CLUSTER `default`", 0, false},
609+
{"SET profile = 'profile-name-from-the-settings-file'", 0, false},
610+
{"SET ROLE role1", 0, false},
611+
{"SET DEFAULT ROLE role1 TO user", 0, false},
612+
{"SET DEFAULT ROLE NONE TO user", 0, false},
613+
{"SET DEFAULT ROLE ALL EXCEPT role1, role2 TO user", 0, false},
614+
{"TRUNCATE TABLE IF EXISTS `db1`.`table1` ON CLUSTER `default` SYNC", 0, false},
615+
{"TRUNCATE TABLE `db1`.`table1` ON CLUSTER `default` SYNC", 0, false},
616+
{"TRUNCATE TABLE `db1`.`table1` ON CLUSTER `default`", 0, false},
617+
{"TRUNCATE TABLE `db1`.`table1`", 0, false},
618+
{"TRUNCATE DATABASE IF EXISTS db ON CLUSTER `cluster`", 0, false},
619+
{"TRUNCATE DATABASE IF EXISTS db", 0, false},
620+
{"TRUNCATE DATABASE `db`", 0, false},
621+
{"TRUNCATE ALL TABLES FROM IF EXISTS `db` NOT LIKE 'tmp%' ON CLUSTER `cluster`", 0, false},
622+
{"TRUNCATE ALL TABLES FROM IF EXISTS `db` NOT LIKE 'tmp%'", 0, false},
623+
{"TRUNCATE ALL TABLES FROM `db` NOT LIKE 'tmp%' ON CLUSTER `cluster`", 0, false},
624+
{"TRUNCATE TABLES FROM `db` LIKE 'tmp%' ON CLUSTER `cluster`", 0, false},
625+
{"TRUNCATE TABLES FROM `db` LIKE 'tmp%'", 0, false},
626+
{"USE test_db", 0, false},
627+
{"MOVE USER test TO local_directory", 0, false},
628+
{"MOVE ROLE test TO memory", 0, false},
629+
{"UNDROP TABLE tab", 0, false},
630+
{"UNDROP TABLE db.tab ON CLUSTER `default`", 0, false},
631+
{"UNDROP TABLE db.tab UUID '857d-4a57-9ee0-327da5d60a90' ON CLUSTER `default`", 0, false},
481632

482633
};
483634
}

0 commit comments

Comments
 (0)