[ { "Name": "TestSetOperation", "Cases": [ { "SQL": "select * from t3 union select * from t1", "Plan": [ "HashAgg_9 16000.00 root group by:Column#5, funcs:firstrow(Column#5)->Column#5", "└─Union_10 20000.00 root ", " ├─TableReader_13 10000.00 root data:TableFullScan_12", " │ └─TableFullScan_12 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", " └─TableReader_16 10000.00 root data:TableFullScan_15", " └─TableFullScan_15 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "2", "3", "" ] }, { "SQL": "select * from t2 union all select * from t1", "Plan": [ "Union_8 20000.00 root ", "├─TableReader_11 10000.00 root data:TableFullScan_10", "│ └─TableFullScan_10 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─TableReader_14 10000.00 root data:TableFullScan_13", " └─TableFullScan_13 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "1", "1", "2", "2", "3", "", "", "" ] }, { "SQL": "select * from t1 except select * from t3", "Plan": [ "HashJoin_7 6400.00 root anti semi join, equal:[nulleq(test.t1.a, test.t3.a)]", "├─TableReader_18(Build) 10000.00 root data:TableFullScan_17", "│ └─TableFullScan_17 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", "└─HashAgg_10(Probe) 8000.00 root group by:test.t1.a, funcs:firstrow(test.t1.a)->test.t1.a", " └─TableReader_15 10000.00 root data:TableFullScan_14", " └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "" ] }, { "SQL": "select * from t1 intersect select * from t2", "Plan": [ "HashJoin_7 6400.00 root semi join, equal:[nulleq(test.t1.a, test.t2.a)]", "├─TableReader_18(Build) 10000.00 root data:TableFullScan_17", "│ └─TableFullScan_17 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─HashAgg_10(Probe) 8000.00 root group by:test.t1.a, funcs:firstrow(test.t1.a)->test.t1.a", " └─TableReader_15 10000.00 root data:TableFullScan_14", " └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "2", "" ] }, { "SQL": "select * from t1 union all select * from t2 union all select * from t3", "Plan": [ "Union_11 30000.00 root ", "├─TableReader_14 10000.00 root data:TableFullScan_13", "│ └─TableFullScan_13 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "├─TableReader_17 10000.00 root data:TableFullScan_16", "│ └─TableFullScan_16 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─TableReader_20 10000.00 root data:TableFullScan_19", " └─TableFullScan_19 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo" ], "Res": [ "1", "1", "1", "2", "2", "2", "3", "3", "", "", "" ] }, { "SQL": "select * from t1 union all select * from t2 except select * from t3", "Plan": [ "HashJoin_12 12800.00 root anti semi join, equal:[nulleq(Column#7, test.t3.a)]", "├─TableReader_23(Build) 10000.00 root data:TableFullScan_22", "│ └─TableFullScan_22 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", "└─HashAgg_13(Probe) 16000.00 root group by:Column#7, funcs:firstrow(Column#7)->Column#7", " └─Union_14 20000.00 root ", " ├─TableReader_17 10000.00 root data:TableFullScan_16", " │ └─TableFullScan_16 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─TableReader_20 10000.00 root data:TableFullScan_19", " └─TableFullScan_19 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo" ], "Res": [ "1", "" ] }, { "SQL": "select * from t1 intersect select * from t2 intersect select * from t1", "Plan": [ "HashJoin_12 5120.00 root semi join, equal:[nulleq(test.t1.a, test.t1.a)]", "├─TableReader_27(Build) 10000.00 root data:TableFullScan_26", "│ └─TableFullScan_26 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─HashJoin_14(Probe) 6400.00 root semi join, equal:[nulleq(test.t1.a, test.t2.a)]", " ├─TableReader_24(Build) 10000.00 root data:TableFullScan_23", " │ └─TableFullScan_23 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", " └─HashAgg_17(Probe) 8000.00 root group by:test.t1.a, funcs:firstrow(test.t1.a)->test.t1.a", " └─TableReader_22 10000.00 root data:TableFullScan_21", " └─TableFullScan_21 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "2", "" ] }, { "SQL": "select * from t1 union all select * from t2 intersect select * from t3", "Plan": [ "Union_12 16400.00 root ", "├─TableReader_15 10000.00 root data:TableFullScan_14", "│ └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─HashJoin_17 6400.00 root semi join, equal:[nulleq(test.t2.a, test.t3.a)]", " ├─TableReader_27(Build) 10000.00 root data:TableFullScan_26", " │ └─TableFullScan_26 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", " └─HashAgg_20(Probe) 8000.00 root group by:test.t2.a, funcs:firstrow(test.t2.a)->test.t2.a", " └─TableReader_25 10000.00 root data:TableFullScan_24", " └─TableFullScan_24 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo" ], "Res": [ "1", "1", "2", "2", "3", "" ] }, { "SQL": "select * from t1 except select * from t2 intersect select * from t3", "Plan": [ "HashJoin_11 6400.00 root anti semi join, equal:[nulleq(test.t1.a, test.t2.a)]", "├─HashJoin_20(Build) 6400.00 root semi join, equal:[nulleq(test.t2.a, test.t3.a)]", "│ ├─TableReader_31(Build) 10000.00 root data:TableFullScan_30", "│ │ └─TableFullScan_30 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", "│ └─HashAgg_23(Probe) 8000.00 root group by:test.t2.a, funcs:firstrow(test.t2.a)->test.t2.a", "│ └─TableReader_28 10000.00 root data:TableFullScan_27", "│ └─TableFullScan_27 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─HashAgg_14(Probe) 8000.00 root group by:test.t1.a, funcs:firstrow(test.t1.a)->test.t1.a", " └─TableReader_19 10000.00 root data:TableFullScan_18", " └─TableFullScan_18 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "3", "" ] }, { "SQL": "select * from t1 intersect (select * from t2 except (select * from t3))", "Plan": [ "HashJoin_11 6400.00 root semi join, equal:[nulleq(test.t1.a, test.t2.a)]", "├─HashJoin_20(Build) 6400.00 root anti semi join, equal:[nulleq(test.t2.a, test.t3.a)]", "│ ├─TableReader_31(Build) 10000.00 root data:TableFullScan_30", "│ │ └─TableFullScan_30 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", "│ └─HashAgg_23(Probe) 8000.00 root group by:test.t2.a, funcs:firstrow(test.t2.a)->test.t2.a", "│ └─TableReader_28 10000.00 root data:TableFullScan_27", "│ └─TableFullScan_27 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─HashAgg_14(Probe) 8000.00 root group by:test.t1.a, funcs:firstrow(test.t1.a)->test.t1.a", " └─TableReader_19 10000.00 root data:TableFullScan_18", " └─TableFullScan_18 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1", "" ] }, { "SQL": "select * from t1 union all (select * from t2 except select * from t3)", "Plan": [ "Union_12 16400.00 root ", "├─TableReader_15 10000.00 root data:TableFullScan_14", "│ └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─HashJoin_17 6400.00 root anti semi join, equal:[nulleq(test.t2.a, test.t3.a)]", " ├─TableReader_27(Build) 10000.00 root data:TableFullScan_26", " │ └─TableFullScan_26 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", " └─HashAgg_20(Probe) 8000.00 root group by:test.t2.a, funcs:firstrow(test.t2.a)->test.t2.a", " └─TableReader_25 10000.00 root data:TableFullScan_24", " └─TableFullScan_24 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo" ], "Res": [ "1", "1", "1", "2", "3", "", "" ] }, { "SQL": "select * from t1 union (select * from t2 union all select * from t3)", "Plan": [ "HashAgg_14 24000.00 root group by:Column#8, funcs:firstrow(Column#8)->Column#8", "└─Union_15 30000.00 root ", " ├─TableReader_18 10000.00 root data:TableFullScan_17", " │ └─TableFullScan_17 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─Union_20 20000.00 root ", " ├─TableReader_23 10000.00 root data:TableFullScan_22", " │ └─TableFullScan_22 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", " └─TableReader_26 10000.00 root data:TableFullScan_25", " └─TableFullScan_25 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo" ], "Res": [ "1", "2", "3", "" ] }, { "SQL": "(select * from t1 intersect select * from t1) except (select * from t2 union select * from t3)", "Plan": [ "HashJoin_18 5120.00 root anti semi join, equal:[nulleq(test.t1.a, Column#9)]", "├─HashAgg_31(Build) 16000.00 root group by:Column#9, funcs:firstrow(Column#9)->Column#9", "│ └─Union_32 20000.00 root ", "│ ├─TableReader_35 10000.00 root data:TableFullScan_34", "│ │ └─TableFullScan_34 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "│ └─TableReader_38 10000.00 root data:TableFullScan_37", "│ └─TableFullScan_37 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", "└─HashJoin_20(Probe) 6400.00 root semi join, equal:[nulleq(test.t1.a, test.t1.a)]", " ├─TableReader_30(Build) 10000.00 root data:TableFullScan_29", " │ └─TableFullScan_29 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─HashAgg_23(Probe) 8000.00 root group by:test.t1.a, funcs:firstrow(test.t1.a)->test.t1.a", " └─TableReader_28 10000.00 root data:TableFullScan_27", " └─TableFullScan_27 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": null } ] }, { "Name": "TestSetOperationOnDiffColType", "Cases": [ { "SQL": "select * from t3 union select * from t1", "Plan": [ "HashAgg_9 16000.00 root group by:Column#7, Column#8, funcs:firstrow(Column#7)->Column#7, funcs:firstrow(Column#8)->Column#8", "└─Union_10 20000.00 root ", " ├─TableReader_13 10000.00 root data:TableFullScan_12", " │ └─TableFullScan_12 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", " └─Projection_14 10000.00 root test.t1.a, cast(test.t1.b, decimal(30,10) BINARY)->Column#8", " └─TableReader_16 10000.00 root data:TableFullScan_15", " └─TableFullScan_15 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1 1.0000000000", "2 2.0000000000", "2 2.1000000000", "3 3.0000000000", " " ] }, { "SQL": "select * from t2 union all select * from t1", "Plan": [ "Union_8 20000.00 root ", "├─TableReader_11 10000.00 root data:TableFullScan_10", "│ └─TableFullScan_10 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─Projection_12 10000.00 root test.t1.a, cast(test.t1.b, varchar(20) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8", " └─TableReader_14 10000.00 root data:TableFullScan_13", " └─TableFullScan_13 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1 1", "1 1", "1 1", "2 2", "2 2", "3 3", " 3", " ", " " ] }, { "SQL": "select * from t1 except select * from t3", "Plan": [ "HashJoin_7 6400.00 root anti semi join, equal:[nulleq(test.t1.a, test.t3.a)], other cond:nulleq(cast(test.t1.b), test.t3.b)", "├─TableReader_18(Build) 10000.00 root data:TableFullScan_17", "│ └─TableFullScan_17 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", "└─HashAgg_10(Probe) 8000.00 root group by:test.t1.a, test.t1.b, funcs:firstrow(test.t1.a)->test.t1.a, funcs:firstrow(test.t1.b)->test.t1.b", " └─TableReader_15 10000.00 root data:TableFullScan_14", " └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1 1", "2 2", " " ] }, { "SQL": "select * from t1 intersect select * from t2", "Plan": [ "HashJoin_7 6400.00 root semi join, equal:[nulleq(test.t1.a, test.t2.a)], other cond:nulleq(cast(test.t1.b), cast(test.t2.b))", "├─TableReader_18(Build) 10000.00 root data:TableFullScan_17", "│ └─TableFullScan_17 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─HashAgg_10(Probe) 8000.00 root group by:test.t1.a, test.t1.b, funcs:firstrow(test.t1.a)->test.t1.a, funcs:firstrow(test.t1.b)->test.t1.b", " └─TableReader_15 10000.00 root data:TableFullScan_14", " └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1 1", "2 2", " " ] }, { "SQL": "select * from t1 union all select * from t2 union all select * from t3", "Plan": [ "Union_11 30000.00 root ", "├─Projection_12 10000.00 root test.t1.a, cast(test.t1.b, varchar(30) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#11", "│ └─TableReader_14 10000.00 root data:TableFullScan_13", "│ └─TableFullScan_13 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "├─Projection_15 10000.00 root test.t2.a, cast(test.t2.b, varchar(30) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#11", "│ └─TableReader_17 10000.00 root data:TableFullScan_16", "│ └─TableFullScan_16 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─Projection_18 10000.00 root test.t3.a, cast(test.t3.b, varchar(30) BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#11", " └─TableReader_20 10000.00 root data:TableFullScan_19", " └─TableFullScan_19 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo" ], "Res": [ "1 1", "1 1", "1 1", "2 2", "2 2", "2 2.1000000000", "3 3", "3 3.0000000000", " 3", " ", " " ] }, { "SQL": "select * from t1 union all select * from t2 except select * from t3", "Plan": [ "HashJoin_12 12800.00 root anti semi join, equal:[nulleq(Column#10, test.t3.a)], other cond:nulleq(cast(Column#11), cast(test.t3.b))", "├─TableReader_23(Build) 10000.00 root data:TableFullScan_22", "│ └─TableFullScan_22 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", "└─HashAgg_13(Probe) 16000.00 root group by:Column#10, Column#11, funcs:firstrow(Column#10)->Column#10, funcs:firstrow(Column#11)->Column#11", " └─Union_14 20000.00 root ", " ├─Projection_15 10000.00 root test.t1.a, cast(test.t1.b, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#11", " │ └─TableReader_17 10000.00 root data:TableFullScan_16", " │ └─TableFullScan_16 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─TableReader_20 10000.00 root data:TableFullScan_19", " └─TableFullScan_19 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo" ], "Res": [ "1 1", "2 2", " 3", " " ] }, { "SQL": "select * from t1 intersect select * from t2 intersect select * from t1", "Plan": [ "HashJoin_12 5120.00 root semi join, equal:[nulleq(test.t1.a, test.t1.a) nulleq(test.t1.b, test.t1.b)]", "├─TableReader_27(Build) 10000.00 root data:TableFullScan_26", "│ └─TableFullScan_26 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─HashJoin_14(Probe) 6400.00 root semi join, equal:[nulleq(test.t1.a, test.t2.a)], other cond:nulleq(cast(test.t1.b), cast(test.t2.b))", " ├─TableReader_24(Build) 10000.00 root data:TableFullScan_23", " │ └─TableFullScan_23 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", " └─HashAgg_17(Probe) 8000.00 root group by:test.t1.a, test.t1.b, funcs:firstrow(test.t1.a)->test.t1.a, funcs:firstrow(test.t1.b)->test.t1.b", " └─TableReader_22 10000.00 root data:TableFullScan_21", " └─TableFullScan_21 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1 1", "2 2", " " ] }, { "SQL": "select * from t1 union all select * from t2 intersect select * from t3", "Plan": [ "Union_12 16400.00 root ", "├─Projection_13 10000.00 root test.t1.a, cast(test.t1.b, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#11", "│ └─TableReader_15 10000.00 root data:TableFullScan_14", "│ └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─HashJoin_17 6400.00 root semi join, equal:[nulleq(test.t2.a, test.t3.a)], other cond:nulleq(cast(test.t2.b), cast(test.t3.b))", " ├─TableReader_27(Build) 10000.00 root data:TableFullScan_26", " │ └─TableFullScan_26 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", " └─HashAgg_20(Probe) 8000.00 root group by:test.t2.a, test.t2.b, funcs:firstrow(test.t2.a)->test.t2.a, funcs:firstrow(test.t2.b)->test.t2.b", " └─TableReader_25 10000.00 root data:TableFullScan_24", " └─TableFullScan_24 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo" ], "Res": [ "1 1", "1 1", "2 2", "3 3", " " ] }, { "SQL": "select * from t1 except select * from t2 intersect select * from t3", "Plan": [ "HashJoin_11 6400.00 root anti semi join, equal:[nulleq(test.t1.a, test.t2.a)], other cond:nulleq(cast(test.t1.b), cast(test.t2.b))", "├─HashJoin_20(Build) 6400.00 root semi join, equal:[nulleq(test.t2.a, test.t3.a)], other cond:nulleq(cast(test.t2.b), cast(test.t3.b))", "│ ├─TableReader_31(Build) 10000.00 root data:TableFullScan_30", "│ │ └─TableFullScan_30 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", "│ └─HashAgg_23(Probe) 8000.00 root group by:test.t2.a, test.t2.b, funcs:firstrow(test.t2.a)->test.t2.a, funcs:firstrow(test.t2.b)->test.t2.b", "│ └─TableReader_28 10000.00 root data:TableFullScan_27", "│ └─TableFullScan_27 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─HashAgg_14(Probe) 8000.00 root group by:test.t1.a, test.t1.b, funcs:firstrow(test.t1.a)->test.t1.a, funcs:firstrow(test.t1.b)->test.t1.b", " └─TableReader_19 10000.00 root data:TableFullScan_18", " └─TableFullScan_18 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1 1", "2 2", "3 3", " " ] } ] }, { "Name": "TestNaturalJoin", "Cases": [ { "SQL": "select * from t1 natural join t2", "Plan": [ "HashJoin 12487.50 root inner join, equal:[eq(test.t1.a, test.t2.a)]", "├─TableReader(Build) 9990.00 root data:Selection", "│ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.a))", "│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─TableReader(Probe) 9990.00 root data:Selection", " └─Selection 9990.00 cop[tikv] not(isnull(test.t1.a))", " └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "0 0 0", "1 2 3" ] }, { "SQL": "select * from t1 natural left join t2 order by a", "Plan": [ "Sort 12487.50 root test.t1.a", "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t1.a, test.t2.a)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.a))", " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", " └─TableReader(Probe) 10000.00 root data:TableFullScan", " └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "0 0 0", "1 2 3", "10 20 " ] }, { "SQL": "select * from t1 natural right join t2 order by a", "Plan": [ "Sort 12487.50 root test.t2.a", "└─Projection 12487.50 root test.t2.a, test.t2.c, test.t1.b", " └─HashJoin 12487.50 root right outer join, equal:[eq(test.t1.a, test.t2.a)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.a))", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─TableReader(Probe) 10000.00 root data:TableFullScan", " └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo" ], "Res": [ "0 0 0", "1 3 2", "100 200 " ] }, { "SQL": "SELECT * FROM t1 NATURAL LEFT JOIN t2 WHERE not(t1.a <=> t2.a)", "Plan": [ "Projection 9990.00 root test.t1.a, test.t1.b, test.t2.c", "└─Selection 9990.00 root not(nulleq(test.t1.a, test.t2.a))", " └─HashJoin 12487.50 root left outer join, equal:[eq(test.t1.a, test.t2.a)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.a))", " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", " └─TableReader(Probe) 10000.00 root data:TableFullScan", " └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "10 20 " ] } ] }, { "Name": "TestIndexScanWithYearCol", "Cases": [ { "SQL": "select t1.c1, t2.c1 from t as t1 inner join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL", "Plan": [ "MergeJoin_9 0.00 root inner join, left key:test.t.c1, right key:test.t.c1", "├─TableDual_35(Build) 0.00 root rows:0", "└─TableDual_34(Probe) 0.00 root rows:0" ], "Res": [ ] }, { "SQL": "select * from t as t1 inner join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL", "Plan": [ "MergeJoin_9 0.00 root inner join, left key:test.t.c1, right key:test.t.c1", "├─TableDual_41(Build) 0.00 root rows:0", "└─TableDual_40(Probe) 0.00 root rows:0" ], "Res": [ ] }, { "SQL": "select count(*) from t as t1 inner join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL", "Plan": [ "StreamAgg_11 1.00 root funcs:count(1)->Column#7", "└─MergeJoin_12 0.00 root inner join, left key:test.t.c1, right key:test.t.c1", " ├─TableDual_38(Build) 0.00 root rows:0", " └─TableDual_37(Probe) 0.00 root rows:0" ], "Res": [ "0" ] }, { "SQL": "select t1.c1, t2.c1 from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL", "Plan": [ "MergeJoin_7 0.00 root left outer join, left key:test.t.c1, right key:test.t.c1", "├─TableDual_22(Build) 0.00 root rows:0", "└─TableDual_21(Probe) 0.00 root rows:0" ], "Res": [ ] }, { "SQL": "select * from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL", "Plan": [ "MergeJoin_7 0.00 root left outer join, left key:test.t.c1, right key:test.t.c1", "├─TableDual_25(Build) 0.00 root rows:0", "└─TableDual_24(Probe) 0.00 root rows:0" ], "Res": [ ] }, { "SQL": "select count(*) from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL", "Plan": [ "StreamAgg_9 1.00 root funcs:count(1)->Column#7", "└─MergeJoin_10 0.00 root left outer join, left key:test.t.c1, right key:test.t.c1", " ├─TableDual_25(Build) 0.00 root rows:0", " └─TableDual_24(Probe) 0.00 root rows:0" ], "Res": [ "0" ] }, { "SQL": "select * from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 is not NULL", "Plan": [ "HashJoin_22 12487.50 root left outer join, equal:[eq(test.t.c1, test.t.c1)]", "├─TableReader_40(Build) 9990.00 root data:Selection_39", "│ └─Selection_39 9990.00 cop[tikv] not(isnull(test.t.c1))", "│ └─TableFullScan_38 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─TableReader_34(Probe) 9990.00 root data:Selection_33", " └─Selection_33 9990.00 cop[tikv] not(isnull(test.t.c1))", " └─TableFullScan_32 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "2001 1 2001 1" ] } ] } ]