gporca
gporca copied to clipboard
CXformSimplifySelectWithSubquery generates 3 identical alternatives
Orca version: 2.50.4
Repro:
CREATE TABLE bitmap_test as SELECT * FROM generate_series(1,100) as a distributed randomly;
CREATE INDEX bitmap_index ON bitmap_test USING BITMAP(a);
EXPLAIN SELECT * FROM bitmap_test WHERE a in (select 1);
2017-12-01 14:42:38:933351 CST,THD000,TRACE,"Xform: CXformSimplifySelectWithSubquery
Input:
+--CLogicalSelect origin: [Grp:9, GrpExpr:0]
|--CLogicalGet "bitmap_test" ("bitmap_test"), Columns: ["a" (0), "ctid" (1), "xmin" (2), "cmin" (3), "xmax" (4), "cmax" (5), "tableoid" (6), "gp_segment_id" (7)] Key sets: {[1,7]} origin: [Grp:0, GrpExpr:0]
+--CScalarCmp (=) origin: [Grp:8, GrpExpr:0]
|--CScalarIdent "a" (0) origin: [Grp:1, GrpExpr:0]
+--CScalarSubquery["?column?" (9)] generated by Quantified SQ origin: [Grp:7, GrpExpr:0]
+--CLogicalProject origin: [Grp:6, GrpExpr:0]
|--CLogicalConstTableGet Columns: ["" (8)] Values: [(1)] origin: [Grp:2, GrpExpr:0]
+--CScalarProjectList origin: [Grp:5, GrpExpr:0]
+--CScalarProjectElement "?column?" (9) origin: [Grp:4, GrpExpr:0]
+--CScalarConst (1) origin: [Grp:3, GrpExpr:0]
Output:
Alternatives:
0:
+--CLogicalSelect
|--CLogicalGet "bitmap_test" ("bitmap_test"), Columns: ["a" (0), "ctid" (1), "xmin" (2), "cmin" (3), "xmax" (4), "cmax" (5), "tableoid" (6), "gp_segment_id" (7)] Key sets: {[1,7]} origin: [Grp:0, GrpExpr:0]
+--CScalarCmp (=)
|--CScalarIdent "a" (0) origin: [Grp:1, GrpExpr:0]
+--CScalarSubquery["?column?" (9)] generated by Quantified SQ
+--CLogicalProject
|--CLogicalConstTableGet Columns: ["" (8)] Values: [(1)] origin: [Grp:2, GrpExpr:0]
+--CScalarProjectList
+--CScalarProjectElement "?column?" (9)
+--CScalarConst (1) origin: [Grp:3, GrpExpr:0]
1:
+--CLogicalSelect
|--CLogicalGet "bitmap_test" ("bitmap_test"), Columns: ["a" (0), "ctid" (1), "xmin" (2), "cmin" (3), "xmax" (4), "cmax" (5), "tableoid" (6), "gp_segment_id" (7)] Key sets: {[1,7]} origin: [Grp:0, GrpExpr:0]
+--CScalarCmp (=)
|--CScalarIdent "a" (0) origin: [Grp:1, GrpExpr:0]
+--CScalarSubquery["?column?" (9)] generated by Quantified SQ
+--CLogicalProject
|--CLogicalConstTableGet Columns: ["" (8)] Values: [(1)] origin: [Grp:2, GrpExpr:0]
+--CScalarProjectList
+--CScalarProjectElement "?column?" (9)
+--CScalarConst (1) origin: [Grp:3, GrpExpr:0]
2:
+--CLogicalSelect
|--CLogicalGet "bitmap_test" ("bitmap_test"), Columns: ["a" (0), "ctid" (1), "xmin" (2), "cmin" (3), "xmax" (4), "cmax" (5), "tableoid" (6), "gp_segment_id" (7)] Key sets: {[1,7]} origin: [Grp:0, GrpExpr:0]
+--CScalarCmp (=)
|--CScalarIdent "a" (0) origin: [Grp:1, GrpExpr:0]
+--CScalarSubquery["?column?" (9)] generated by Quantified SQ
+--CLogicalProject
|--CLogicalConstTableGet Columns: ["" (8)] Values: [(1)] origin: [Grp:2, GrpExpr:0]
+--CScalarProjectList
+--CScalarProjectElement "?column?" (9)
+--CScalarConst (1) origin: [Grp:3, GrpExpr:0]
If they are the same, it should store only 1 alternative, instead of 3.
Fixed by commit: https://github.com/greenplum-db/gporca/commit/cb1bfb59aec4f9ba56c711023343b7bdacaa27a7
the commit was reverted. so this issue still exists.