diff --git a/br/tests/br_table_partition/prepare.sh b/br/tests/br_table_partition/prepare.sh index 6f553d5f11790..431d1f0d686f3 100755 --- a/br/tests/br_table_partition/prepare.sh +++ b/br/tests/br_table_partition/prepare.sh @@ -80,10 +80,13 @@ done wait run_sql "ALTER TABLE $DB.${TABLE}_Hash ADD UNIQUE INDEX idx(c1) GLOBAL" & +run_sql "ALTER TABLE $DB.${TABLE}_Hash ADD INDEX idx1(c1) GLOBAL" & run_sql "ALTER TABLE $DB.${TABLE}_List ADD UNIQUE INDEX idx(c1) GLOBAL" & +run_sql "ALTER TABLE $DB.${TABLE}_List ADD INDEX idx1(c1) GLOBAL" & for i in $(seq $TABLE_COUNT); do run_sql "ALTER TABLE $DB.$TABLE${i} ADD UNIQUE INDEX idx(c1) GLOBAL" & + run_sql "ALTER TABLE $DB.$TABLE${i} ADD INDEX idx1(c1) GLOBAL" & done wait diff --git a/br/tests/br_table_partition/run.sh b/br/tests/br_table_partition/run.sh index ecc58857ccfc0..bad32e998659a 100755 --- a/br/tests/br_table_partition/run.sh +++ b/br/tests/br_table_partition/run.sh @@ -26,6 +26,8 @@ DB=$DB TABLE=$TABLE TABLE_COUNT=$TABLE_COUNT prepare.sh declare -A row_count_ori declare -A row_count_new +declare -A row_count_new_global_index +declare -A row_count_new_non_unique_global_index for i in $(seq $TABLE_COUNT) _Hash _List; do row_count_ori[$i]=$(run_sql "SELECT COUNT(*) FROM $DB.$TABLE${i};" | awk '/COUNT/{print $2}') @@ -44,15 +46,19 @@ run_br restore full -s "local://$TEST_DIR/$DB" --pd $PD_ADDR for i in $(seq $TABLE_COUNT) _Hash _List; do run_sql "SHOW CREATE TABLE $DB.$TABLE${i};" | grep 'PARTITION' row_count_new[$i]=$(run_sql "SELECT COUNT(*) FROM $DB.$TABLE${i};" | awk '/COUNT/{print $2}') + row_count_new_global_index[$i]=$(run_sql "SELECT COUNT(*) FROM $DB.$TABLE${i} use index(idx);" | awk '/COUNT/{print $2}') + row_count_new_non_unique_global_index[$i]=$(run_sql "SELECT COUNT(*) FROM $DB.$TABLE${i} use index(idx1);" | awk '/COUNT/{print $2}') done fail=false for i in $(seq $TABLE_COUNT) _Hash _List; do - if [ "${row_count_ori[$i]}" != "${row_count_new[$i]}" ];then + if [ "${row_count_ori[$i]}" != "${row_count_new[$i]}" ] || \ + [ "${row_count_ori[$i]}" != "${row_count_new_global_index[$i]}" ] || \ + [ "${row_count_ori[$i]}" != "${row_count_new_non_unique_global_index[$i]}" ]; then fail=true echo "TEST: [$TEST_NAME] fail on table $DB.$TABLE${i}" fi - echo "table $DB.$TABLE${i} [original] row count: ${row_count_ori[$i]}, [after br] row count: ${row_count_new[$i]}" + echo "table $DB.$TABLE${i} [original] row count: ${row_count_ori[$i]}, [after br] row count: ${row_count_new[$i]}, global index row count: ${row_count_new_global_index[$i]}, non-unique global index row count: ${row_count_new_non_unique_global_index[$i]}" done if $fail; then diff --git a/dumpling/tests/partition_table/data/pt_case_0.sql b/dumpling/tests/partition_table/data/pt_case_0.sql index caa6890a93047..c1d6d74475f0a 100644 --- a/dumpling/tests/partition_table/data/pt_case_0.sql +++ b/dumpling/tests/partition_table/data/pt_case_0.sql @@ -1,4 +1,4 @@ -create table `pt_case_0` (a int, b int, unique index idx(a) global) partition by hash(b) partitions 5; +create table `pt_case_0` (a int, b int, unique index idx(a) global, index idx1(a) global) partition by hash(b) partitions 5; insert into `pt_case_0` values (0, 10), (1, 9), diff --git a/dumpling/tests/partition_table/data/pt_case_1.sql b/dumpling/tests/partition_table/data/pt_case_1.sql index dacd1b37d117b..c3b10d02f872a 100644 --- a/dumpling/tests/partition_table/data/pt_case_1.sql +++ b/dumpling/tests/partition_table/data/pt_case_1.sql @@ -1,4 +1,4 @@ -create table `pt_case_1` (a int, b int, unique index idx(a) global) partition by list(b) +create table `pt_case_1` (a int, b int, unique index idx(a) global, index idx1(a) global) partition by list(b) (partition p0 values in (0, 1, 2, 3), partition p1 values in (4, 5, 6), partition p2 values in (7, 8, 9, 10)); diff --git a/dumpling/tests/partition_table/data/pt_case_2.sql b/dumpling/tests/partition_table/data/pt_case_2.sql index f87558898464e..367ed843d95bc 100644 --- a/dumpling/tests/partition_table/data/pt_case_2.sql +++ b/dumpling/tests/partition_table/data/pt_case_2.sql @@ -1,4 +1,4 @@ -create table `pt_case_2` (a int, b int, unique index idx(a) global) partition by range(b) +create table `pt_case_2` (a int, b int, unique index idx(a) global, index idx1(a) global) partition by range(b) (partition p0 values less than (4), partition p1 values less than (7), partition p2 values less than (11)); diff --git a/dumpling/tests/partition_table/result/pt_case_0-schema.sql b/dumpling/tests/partition_table/result/pt_case_0-schema.sql index ac2691edc5492..770fbe46dbead 100644 --- a/dumpling/tests/partition_table/result/pt_case_0-schema.sql +++ b/dumpling/tests/partition_table/result/pt_case_0-schema.sql @@ -3,6 +3,7 @@ CREATE TABLE `pt_case_0` ( `a` int DEFAULT NULL, `b` int DEFAULT NULL, - UNIQUE KEY `idx` (`a`) /*T![global_index] GLOBAL */ + UNIQUE KEY `idx` (`a`) /*T![global_index] GLOBAL */, + KEY `idx1` (`a`) /*T![global_index] GLOBAL */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`b`) PARTITIONS 5; diff --git a/dumpling/tests/partition_table/result/pt_case_1-schema.sql b/dumpling/tests/partition_table/result/pt_case_1-schema.sql index b3e5510c5eabb..36ce7fff7a7ca 100644 --- a/dumpling/tests/partition_table/result/pt_case_1-schema.sql +++ b/dumpling/tests/partition_table/result/pt_case_1-schema.sql @@ -3,7 +3,8 @@ CREATE TABLE `pt_case_1` ( `a` int DEFAULT NULL, `b` int DEFAULT NULL, - UNIQUE KEY `idx` (`a`) /*T![global_index] GLOBAL */ + UNIQUE KEY `idx` (`a`) /*T![global_index] GLOBAL */, + KEY `idx1` (`a`) /*T![global_index] GLOBAL */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY LIST (`b`) (PARTITION `p0` VALUES IN (0,1,2,3), diff --git a/dumpling/tests/partition_table/result/pt_case_2-schema.sql b/dumpling/tests/partition_table/result/pt_case_2-schema.sql index a4c458363059b..8090c1dc1413b 100644 --- a/dumpling/tests/partition_table/result/pt_case_2-schema.sql +++ b/dumpling/tests/partition_table/result/pt_case_2-schema.sql @@ -3,7 +3,8 @@ CREATE TABLE `pt_case_2` ( `a` int DEFAULT NULL, `b` int DEFAULT NULL, - UNIQUE KEY `idx` (`a`) /*T![global_index] GLOBAL */ + UNIQUE KEY `idx` (`a`) /*T![global_index] GLOBAL */, + KEY `idx1` (`a`) /*T![global_index] GLOBAL */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY RANGE (`b`) (PARTITION `p0` VALUES LESS THAN (4), diff --git a/lightning/tests/lightning_partitioned-table/data/partitioned.a-schema.sql b/lightning/tests/lightning_partitioned-table/data/partitioned.a-schema.sql index 274e117b91171..e6227e9271c6c 100644 --- a/lightning/tests/lightning_partitioned-table/data/partitioned.a-schema.sql +++ b/lightning/tests/lightning_partitioned-table/data/partitioned.a-schema.sql @@ -1 +1 @@ -create table a (a int, b varchar(16), c int, KEY key_b (`b`), unique index key_c(c) global) partition by hash(a) partitions 5; +create table a (a int, b varchar(16), c int, KEY key_b (`b`), unique index key_c(`c`) global, index key_a(`a`) global) partition by hash(a) partitions 5; diff --git a/lightning/tests/lightning_partitioned-table/data/partitioned.defaultlist-schema.sql b/lightning/tests/lightning_partitioned-table/data/partitioned.defaultlist-schema.sql index f8e01f41d78b1..83e4049246bf4 100644 --- a/lightning/tests/lightning_partitioned-table/data/partitioned.defaultlist-schema.sql +++ b/lightning/tests/lightning_partitioned-table/data/partitioned.defaultlist-schema.sql @@ -1 +1 @@ -create table `defaultlist` (a int, b varchar(16), c int, KEY key_b (`b`), unique index key_c(`c`) global) partition by list(a) (partition p1 values in (1,4,8),partition p2 values in (32,default), partition p3 values in (262144,65536)); +create table `defaultlist` (a int, b varchar(16), c int, KEY key_b (`b`), unique index key_c(`c`) global, index key_a(`a`) global) partition by list(a) (partition p1 values in (1,4,8),partition p2 values in (32,default), partition p3 values in (262144,65536)); diff --git a/lightning/tests/lightning_partitioned-table/data/partitioned.list-schema.sql b/lightning/tests/lightning_partitioned-table/data/partitioned.list-schema.sql index dfd046ae2521a..2a6fbec1badd9 100644 --- a/lightning/tests/lightning_partitioned-table/data/partitioned.list-schema.sql +++ b/lightning/tests/lightning_partitioned-table/data/partitioned.list-schema.sql @@ -1 +1 @@ -create table `list` (a int, b varchar(16), c int, KEY key_b (`b`), unique index key_c(`c`) global) partition by list(a) (partition p1 values in (1,4,8),partition p2 values in (32,8388608,268435456), partition p3 values in (262144,0,65536)); +create table `list` (a int, b varchar(16), c int, KEY key_b (`b`), unique index key_c(`c`) global, index key_a(`a`) global) partition by list(a) (partition p1 values in (1,4,8),partition p2 values in (32,8388608,268435456), partition p3 values in (262144,0,65536)); diff --git a/lightning/tests/lightning_partitioned-table/data/partitioned.range-schema.sql b/lightning/tests/lightning_partitioned-table/data/partitioned.range-schema.sql index 0bbc1c03dfb7b..f1a3b2eebb1fd 100644 --- a/lightning/tests/lightning_partitioned-table/data/partitioned.range-schema.sql +++ b/lightning/tests/lightning_partitioned-table/data/partitioned.range-schema.sql @@ -1 +1 @@ -create table `range` (a int, b varchar(16), c int, KEY key_b (`b`), unique index key_c(`c`) global) partition by range(a) (partition pNeg values less than (0), partition pMax values less than (maxvalue)); +create table `range` (a int, b varchar(16), c int, KEY key_b (`b`), unique index key_c(`c`) global, index key_a(`a`) global) partition by range(a) (partition pNeg values less than (0), partition pMax values less than (maxvalue)); diff --git a/lightning/tests/lightning_partitioned-table/run.sh b/lightning/tests/lightning_partitioned-table/run.sh index 82bcb888d31c0..438682b201b74 100755 --- a/lightning/tests/lightning_partitioned-table/run.sh +++ b/lightning/tests/lightning_partitioned-table/run.sh @@ -27,7 +27,7 @@ for BACKEND in tidb local; do run_lightning --backend $BACKEND - run_sql 'SELECT count(1), sum(a) FROM partitioned.a;' + run_sql 'SELECT count(1), sum(a) FROM partitioned.a use index ();' check_contains 'count(1): 8' check_contains 'sum(a): 277151781' @@ -35,10 +35,14 @@ for BACKEND in tidb local; do check_contains 'count(1): 8' check_contains 'sum(c): 277151781' + run_sql 'SELECT count(1), sum(a) FROM partitioned.a use index (key_a);' + check_contains 'count(1): 8' + check_contains 'sum(a): 277151781' + run_sql "SHOW TABLE STATUS FROM partitioned WHERE name = 'a';" check_contains 'Create_options: partitioned' - run_sql 'SELECT count(1), sum(a) FROM partitioned.range;' + run_sql 'SELECT count(1), sum(a) FROM partitioned.range use index ();' check_contains 'count(1): 8' check_contains 'sum(a): 277151781' @@ -46,10 +50,14 @@ for BACKEND in tidb local; do check_contains 'count(1): 8' check_contains 'sum(c): 277151781' + run_sql 'SELECT count(1), sum(a) FROM partitioned.range use index (key_a);' + check_contains 'count(1): 8' + check_contains 'sum(a): 277151781' + run_sql "SHOW TABLE STATUS FROM partitioned WHERE name = 'range';" check_contains 'Create_options: partitioned' - run_sql 'SELECT count(1), sum(a) FROM partitioned.list;' + run_sql 'SELECT count(1), sum(a) FROM partitioned.list use index ();' check_contains 'count(1): 8' check_contains 'sum(a): 277151781' @@ -57,10 +65,14 @@ for BACKEND in tidb local; do check_contains 'count(1): 8' check_contains 'sum(c): 277151781' + run_sql 'SELECT count(1), sum(a) FROM partitioned.list use index (key_a);' + check_contains 'count(1): 8' + check_contains 'sum(a): 277151781' + run_sql "SHOW TABLE STATUS FROM partitioned WHERE name = 'list';" check_contains 'Create_options: partitioned' - run_sql 'SELECT count(1), sum(a) FROM partitioned.defaultlist;' + run_sql 'SELECT count(1), sum(a) FROM partitioned.defaultlist use index ();' check_contains 'count(1): 8' check_contains 'sum(a): 277151781' @@ -68,6 +80,10 @@ for BACKEND in tidb local; do check_contains 'count(1): 8' check_contains 'sum(c): 277151781' + run_sql 'SELECT count(1), sum(a) FROM partitioned.defaultlist use index (key_a);' + check_contains 'count(1): 8' + check_contains 'sum(a): 277151781' + run_sql "SHOW TABLE STATUS FROM partitioned WHERE name = 'defaultlist';" check_contains 'Create_options: partitioned' done diff --git a/tests/realtikvtest/importintotest/import_into_test.go b/tests/realtikvtest/importintotest/import_into_test.go index 32e3920c4f758..81a94e5f766fa 100644 --- a/tests/realtikvtest/importintotest/import_into_test.go +++ b/tests/realtikvtest/importintotest/import_into_test.go @@ -239,6 +239,20 @@ func (s *mockGCSSuite) TestBasicImportInto() { querySQL: "select * from t order by b", lastInsertID: 6, }, + // partition table + { + createTableSQL: "create table t (a bigint, b varchar(100), c int) partition by hash(a) partitions 5;", + flags: "(c, b, a)", + res: []string{"11 test1 1", "22 test2 2", "33 test3 3", "44 test4 4", "55 test5 5", "66 test6 6"}, + querySQL: "select * from t order by c", + }, + // partition table + global index + { + createTableSQL: "create table t (a bigint, b varchar(100), c int, index idx(c) global) partition by hash(a) partitions 5;", + flags: "(c, b, a)", + res: []string{"11 test1 1", "22 test2 2", "33 test3 3", "44 test4 4", "55 test5 5", "66 test6 6"}, + querySQL: "select * from t use index(idx) order by c", + }, } loadDataSQL := fmt.Sprintf(`import into t %%s FROM 'gs://test-multi-load/db.tbl.*.csv?endpoint=%s'