|
| 1 | +[ |
| 2 | + { |
| 3 | + "Name": "TestAdditionOtherConditionsRemained4OuterJoin", |
| 4 | + "Cases": [ |
| 5 | + { |
| 6 | + "SQL": "SELECT `queries_identifier`.`id`, `queries_identifier`.`name` FROM `queries_identifier` LEFT OUTER JOIN `queries_channel` ON (`queries_identifier`.`id` = `queries_channel`.`identifier_id`) INNER JOIN `queries_program` ON (`queries_identifier`.`id` = `queries_program`.`identifier_id`) WHERE ((`queries_channel`.`id` = 5 AND `queries_program`.`id` = 9) OR `queries_program`.`id` = 8) ORDER BY `queries_identifier`.`id` ASC", |
| 7 | + "Output": [ |
| 8 | + "13 i1" |
| 9 | + ] |
| 10 | + }, |
| 11 | + { |
| 12 | + "SQL": "SELECT `queries_identifier`.`id`, `queries_identifier`.`name` FROM `queries_identifier` RIGHT OUTER JOIN `queries_channel` ON (`queries_identifier`.`id` = `queries_channel`.`identifier_id`) INNER JOIN `queries_program` ON (`queries_identifier`.`id` = `queries_program`.`identifier_id`) WHERE ((`queries_channel`.`id` = 5 AND `queries_program`.`id` = 9) OR `queries_program`.`id` = 8) ORDER BY `queries_identifier`.`id` ASC", |
| 13 | + "Output": [ |
| 14 | + "13 i1" |
| 15 | + ] |
| 16 | + }, |
| 17 | + { |
| 18 | + "SQL": "explain format = 'brief' SELECT `queries_identifier`.`id`, `queries_identifier`.`name` FROM `queries_identifier` LEFT OUTER JOIN `queries_channel` ON (`queries_identifier`.`id` = `queries_channel`.`identifier_id`) INNER JOIN `queries_program` ON (`queries_identifier`.`id` = `queries_program`.`identifier_id`) WHERE ((`queries_channel`.`id` = 5 AND `queries_program`.`id` = 9) OR `queries_program`.`id` = 8) ORDER BY `queries_identifier`.`id` ASC;", |
| 19 | + "Output": [ |
| 20 | + "Sort 2.50 root test.queries_identifier.id", |
| 21 | + "└─Projection 2.50 root test.queries_identifier.id, test.queries_identifier.name", |
| 22 | + " └─Selection 2.50 root or(and(eq(test.queries_channel.id, 5), eq(test.queries_program.id, 9)), eq(test.queries_program.id, 8))", |
| 23 | + " └─IndexJoin 3.12 root left outer join, inner:IndexReader, outer key:test.queries_identifier.id, inner key:test.queries_channel.identifier_id, equal cond:eq(test.queries_identifier.id, test.queries_channel.identifier_id)", |
| 24 | + " ├─IndexHashJoin(Build) 2.50 root inner join, inner:TableReader, outer key:test.queries_program.identifier_id, inner key:test.queries_identifier.id, equal cond:eq(test.queries_program.identifier_id, test.queries_identifier.id)", |
| 25 | + " │ ├─Batch_Point_Get(Build) 2.00 root table:queries_program handle:[8 9], keep order:false, desc:false", |
| 26 | + " │ └─TableReader(Probe) 2.00 root data:TableRangeScan", |
| 27 | + " │ └─TableRangeScan 2.00 cop[tikv] table:queries_identifier range: decided by [test.queries_program.identifier_id], keep order:false, stats:pseudo", |
| 28 | + " └─IndexReader(Probe) 2.50 root index:IndexRangeScan", |
| 29 | + " └─IndexRangeScan 2.50 cop[tikv] table:queries_channel, index:identifier_id(identifier_id) range: decided by [eq(test.queries_channel.identifier_id, test.queries_identifier.id)], keep order:false, stats:pseudo" |
| 30 | + ] |
| 31 | + }, |
| 32 | + { |
| 33 | + "SQL": "explain format='brief' select * from t left join t1 on t.a=t1.a inner join t2 on t.a=t2.a and t2.c = 100 left join t3 on t2.a=t3.a and t3.b > 1 left join t4 on t2.a = t4.a where (t2.b > 100 or t.a > 10 or t1.b < 10)", |
| 34 | + "Output": [ |
| 35 | + "Projection 19.51 root test.t.a, test.t1.a, test.t1.b, test.t2.a, test.t2.b, test.t2.c, test.t3.a, test.t3.b, test.t4.a, test.t4.b", |
| 36 | + "└─Selection 19.51 root or(gt(test.t2.b, 100), or(gt(test.t.a, 10), lt(test.t1.b, 10))), or(gt(test.t2.b, 100), or(gt(test.t2.a, 10), lt(test.t1.b, 10)))", |
| 37 | + " └─HashJoin 24.39 root left outer join, equal:[eq(test.t2.a, test.t4.a)]", |
| 38 | + " ├─HashJoin(Build) 19.51 root left outer join, equal:[eq(test.t.a, test.t1.a)]", |
| 39 | + " │ ├─HashJoin(Build) 15.61 root inner join, equal:[eq(test.t2.a, test.t.a)]", |
| 40 | + " │ │ ├─HashJoin(Build) 12.49 root left outer join, equal:[eq(test.t2.a, test.t3.a)]", |
| 41 | + " │ │ │ ├─TableReader(Build) 9.99 root data:Selection", |
| 42 | + " │ │ │ │ └─Selection 9.99 cop[tikv] eq(test.t2.c, 100), not(isnull(test.t2.a))", |
| 43 | + " │ │ │ │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", |
| 44 | + " │ │ │ └─TableReader(Probe) 3330.00 root data:Selection", |
| 45 | + " │ │ │ └─Selection 3330.00 cop[tikv] gt(test.t3.b, 1), not(isnull(test.t3.a))", |
| 46 | + " │ │ │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", |
| 47 | + " │ │ └─TableReader(Probe) 9990.00 root data:Selection", |
| 48 | + " │ │ └─Selection 9990.00 cop[tikv] not(isnull(test.t.a))", |
| 49 | + " │ │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", |
| 50 | + " │ └─TableReader(Probe) 9990.00 root data:Selection", |
| 51 | + " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.a))", |
| 52 | + " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", |
| 53 | + " └─TableReader(Probe) 9990.00 root data:Selection", |
| 54 | + " └─Selection 9990.00 cop[tikv] not(isnull(test.t4.a))", |
| 55 | + " └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo" |
| 56 | + ] |
| 57 | + } |
| 58 | + ] |
| 59 | + } |
| 60 | +] |
0 commit comments