gporca icon indicating copy to clipboard operation
gporca copied to clipboard

CXformSimplifySelectWithSubquery generates 3 identical alternatives

Open hsyuan opened this issue 7 years ago • 2 comments

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.

hsyuan avatar Dec 01 '17 20:12 hsyuan

Fixed by commit: https://github.com/greenplum-db/gporca/commit/cb1bfb59aec4f9ba56c711023343b7bdacaa27a7

hsyuan avatar Dec 12 '17 05:12 hsyuan

the commit was reverted. so this issue still exists.

hsyuan avatar Dec 13 '17 20:12 hsyuan