This is an automated email from the ASF dual-hosted git repository. maxyang pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudberry.git
commit 0d20361a39028856c098cc1d34eb8e32a2bc693b Author: Chris Hajas <[email protected]> AuthorDate: Fri Feb 17 10:27:58 2023 -0800 Remove unused xforms Remove unused xform CXformInnerJoin2NLJoin and CXformInnerJoin2HashJoin. These were deprecated in favor of CXformImplementInnerJoin and had been disabled, but were kept around for use in explicitly disabling inner hash/nl joins. To keep the ability to disable inner hash or nl joins, we do add 2 traceflags, EopttraceDisableInnerNLJ and EopttraceDisableInnerHashJoin. Additionally, modified a test slightly to have the same intent as we don't have a disable xform command to disable only the inner hash join xform. I changed this to a LOJ which maintains the same shape and still captures the test intent. Also, removed some enable/disable_xform commands that weren't relevant or weren't valid. --- src/backend/gpopt/config/CConfigParamMapping.cpp | 7 + .../minidump/BitmapIndexApply-Basic-SelfJoin.mdp | 2 +- .../minidump/BitmapIndexApply-Basic-TwoTables.mdp | 2 +- .../BitmapIndexApply-Complex-Condition.mdp | 2 +- .../BitmapIndexApply-InnerSelect-Basic.mdp | 2 +- .../BitmapIndexApply-InnerSelect-PartTable.mdp | 2 +- .../dxl/minidump/BitmapIndexApply-PartTable.mdp | 2 +- .../dxl/minidump/BitmapIndexNLJWithProject.mdp | 2 +- .../minidump/BitmapIndexNLJWithProjectNoFilt.mdp | 2 +- .../dxl/minidump/BitmapIndexNLOJWithProject.mdp | 2 +- .../minidump/BitmapIndexNLOJWithProjectNonPart.mdp | 2 +- .../gporca/data/dxl/minidump/BitmapIndexScan.mdp | 2 +- .../minidump/BtreeIndexNLJWithProjectNoPart.mdp | 2 +- .../dxl/minidump/BtreeIndexNLOJWithProject.mdp | 2 +- .../dxl/minidump/Correlation-With-Casting-1.mdp | 2 +- .../dxl/minidump/Correlation-With-Casting-2.mdp | 2 +- .../data/dxl/minidump/DynamicBitmapIndexScan.mdp | 2 +- .../minidump/Index-Join-With-Subquery-In-Pred.mdp | 2 +- ...dexApply-Heterogeneous-BothSidesPartitioned.mdp | 2 +- .../dxl/minidump/IndexApply-Heterogeneous-DTS.mdp | 2 +- .../minidump/IndexApply-Heterogeneous-NoDTS.mdp | 2 +- .../minidump/IndexApply-IndexOnMasterOnlyTable.mdp | 2 +- .../dxl/minidump/IndexApply-InnerSelect-Basic.mdp | 2 +- .../IndexApply-InnerSelect-Heterogeneous-DTS.mdp | 2 +- .../minidump/IndexApply-InnerSelect-PartTable.mdp | 2 +- .../dxl/minidump/IndexApply-LeftOuter-NLJoin.mdp | 2 +- ...pply-MultiDistKeys-IncompletePDS-3-DistCols.mdp | 2 +- .../data/dxl/minidump/IndexApply-PartTable.mdp | 2 +- .../minidump/IndexApply1-CalibratedCostModel.mdp | 2 +- .../gporca/data/dxl/minidump/IndexApply1.mdp | 2 +- .../gporca/data/dxl/minidump/IndexApply2.mdp | 2 +- .../gporca/data/dxl/minidump/IndexApply3.mdp | 2 +- .../gporca/data/dxl/minidump/IndexApply4.mdp | 2 +- .../data/dxl/minidump/Join-INDF-NoBroadcast.mdp | 2 +- .../minidump/Join-INDF-Nulls-Not-Collocated.mdp | 2 +- .../data/dxl/minidump/LOJ-DynBitmapIndex.mdp | 2 +- .../dxl/minidump/LOJ-DynBitmapIndexWithSelect.mdp | 2 +- .../minidump/LOJ-IndexApply-CompsiteKey-Equiv.mdp | 2 +- .../LOJ-IndexApply-CompsiteKey-NoMotion.mdp | 2 +- .../LOJ-IndexApply-DistKey-Multiple-Predicates.mdp | 2 +- .../minidump/LOJ-IndexApply-MasterOnly-Table.mdp | 2 +- .../LOJ-IndexApply-MultiDistKeys-IndexKeys.mdp | 2 +- .../dxl/minidump/LOJ-IndexApply-MultiIndexes.mdp | 2 +- .../LOJ-IndexApply-Negative-NonEqual-Predicate.mdp | 2 +- .../dxl/minidump/LOJ-IndexApply-NonDistKey.mdp | 2 +- .../LOJ-IndexApply-WithComplexPredicates.mdp | 2 +- .../data/dxl/minidump/NLJ-DistCol-No-Broadcast.mdp | 2 +- .../dxl/minidump/NLJ-EqAllCol-No-Broadcast.mdp | 2 +- .../NLJ-EqDistCol-InEqNonDistCol-No-Broadcast.mdp | 2 +- .../NLJ-InEqDistCol-EqNonDistCol-Redistribute.mdp | 2 +- .../dxl/minidump/NestedNLJWithBlockingSpool.mdp | 2 +- .../gporca/data/dxl/minidump/PartTbl-DPE.mdp | 2 +- .../gporca/data/dxl/minidump/PartTbl-HJ5.mdp | 2 +- src/backend/gporca/data/dxl/search/strategy0.xml | 4 +- .../gporca/libgpopt/include/gpopt/xforms/CXform.h | 4 +- .../gpopt/xforms/CXformInnerJoin2HashJoin.h | 71 --------- .../include/gpopt/xforms/CXformInnerJoin2NLJoin.h | 71 --------- .../gporca/libgpopt/include/gpopt/xforms/xforms.h | 2 - src/backend/gporca/libgpopt/src/xforms/CXform.cpp | 4 - .../gporca/libgpopt/src/xforms/CXformFactory.cpp | 4 +- .../src/xforms/CXformImplementInnerJoin.cpp | 4 +- .../src/xforms/CXformInnerJoin2HashJoin.cpp | 79 ---------- .../libgpopt/src/xforms/CXformInnerJoin2NLJoin.cpp | 79 ---------- src/backend/gporca/libgpopt/src/xforms/Makefile | 2 - .../include/naucrates/traceflags/traceflags.h | 6 + .../src/unittest/gpopt/minidump/CICGTest.cpp | 3 +- .../unittest/gpopt/search/CSearchStrategyTest.cpp | 2 +- .../unittest/gpopt/xforms/CXformFactoryTest.cpp | 4 +- src/test/regress/expected/gporca.out | 162 +++++++------------- src/test/regress/expected/gporca_optimizer.out | 164 +++++++-------------- src/test/regress/sql/gporca.sql | 37 ++--- 71 files changed, 192 insertions(+), 621 deletions(-) diff --git a/src/backend/gpopt/config/CConfigParamMapping.cpp b/src/backend/gpopt/config/CConfigParamMapping.cpp index f0364f29b5..a6bbf8d8c5 100644 --- a/src/backend/gpopt/config/CConfigParamMapping.cpp +++ b/src/backend/gpopt/config/CConfigParamMapping.cpp @@ -301,6 +301,13 @@ CConfigParamMapping::SConfigMappingElem CConfigParamMapping::m_elements[] = { false, // m_negate_param GPOS_WSZ_LIT( "Enable use the distribution key in DQA")}, + {EopttraceDisableInnerHashJoin, &optimizer_enable_hashjoin, + true, // m_negate_param + GPOS_WSZ_LIT("Explore hash join alternatives")}, + {EopttraceDisableInnerNLJ, &optimizer_enable_nljoin, + true, // m_negate_param + GPOS_WSZ_LIT("Enable nested loop join alternatives")}, + }; //--------------------------------------------------------------------------- diff --git a/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-Basic-SelfJoin.mdp b/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-Basic-SelfJoin.mdp index ea9f7deeaa..8cab11517d 100644 --- a/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-Basic-SelfJoin.mdp +++ b/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-Basic-SelfJoin.mdp @@ -17,7 +17,7 @@ explain SELECT * FROM t i1, t t2 where t2.c2 = i1.c2; <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="102001,102002,102003,102024,102025,102027,102029,102121,102144,103014,103015,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,102024,102025,103046,103045,102121,102144,103014,103015,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.16.1.0" Name="bool" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsFixedLength="true" Length="1" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-Basic-TwoTables.mdp b/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-Basic-TwoTables.mdp index ac0fd9017b..919bc5ed3f 100644 --- a/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-Basic-TwoTables.mdp +++ b/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-Basic-TwoTables.mdp @@ -26,7 +26,7 @@ explain SELECT * FROM s i1, t t2 where t2.c2 = i1.c2; <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="102001,102002,102003,102027,102029,102144,103001,103014,103015,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,103046,103045,102144,103001,103014,103015,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:RelationStatistics Mdid="2.29842177.1.1" Name="s" Rows="0.000000" EmptyRelation="true"/> diff --git a/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-Complex-Condition.mdp b/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-Complex-Condition.mdp index bdb175d22d..a76359f476 100644 --- a/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-Complex-Condition.mdp +++ b/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-Complex-Condition.mdp @@ -27,7 +27,7 @@ EXPLAIN SELECT * FROM s i1, t t2 where t2.c2 = i1.c2 and t2.c3 > i1.c3 or t2.c1 <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="102001,102002,102003,102027,102029,102144,103001,103014,103015,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,103046,103045,102144,103001,103014,103015,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:ColumnStatistics Mdid="1.31264029.1.1.13" Name="gp_segment_id" Width="4.000000" NullFreq="0.000000" NdvRemain="0.000000" FreqRemain="0.000000"/> diff --git a/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-InnerSelect-Basic.mdp b/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-InnerSelect-Basic.mdp index cbe9572ea1..e0ffe3a9ca 100644 --- a/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-InnerSelect-Basic.mdp +++ b/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-InnerSelect-Basic.mdp @@ -21,7 +21,7 @@ select * from x, y where x.i > y.j and y.k = 10; <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="102001,102002,102003,102027,102029,102120,102144,103014,103015,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,103046,103045,102120,102144,103014,103015,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.521.1.0" Name=">" ComparisonType="GT" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-InnerSelect-PartTable.mdp b/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-InnerSelect-PartTable.mdp index 6196a3ff6d..d3992bdc50 100644 --- a/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-InnerSelect-PartTable.mdp +++ b/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-InnerSelect-PartTable.mdp @@ -22,7 +22,7 @@ select * from x, y where x.i > y.j and y.k = 10; <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="103027,102027,102029,102120,103014,103015"/> + <dxl:TraceFlags Value="103027,103046,103045,102120,103014,103015"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.521.1.0" Name=">" ComparisonType="GT" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-PartTable.mdp b/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-PartTable.mdp index 93373a8155..91328f9f62 100644 --- a/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-PartTable.mdp +++ b/src/backend/gporca/data/dxl/minidump/BitmapIndexApply-PartTable.mdp @@ -50,7 +50,7 @@ ORDER BY 1 asc ; <dxl:StatisticsConfig DampingFactorFilter="0.750000" DampingFactorJoin="0.000000" DampingFactorGroupBy="0.750000" MaxStatsBuckets="100"/> <dxl:CTEConfig CTEInliningCutoff="0"/> <dxl:WindowOids RowNumber="7000" Rank="7001"/> - <dxl:TraceFlags Value="102001,102002,102003,102024,102027,102029,102115,102116,102117,102119,102144,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,102024,103046,103045,102115,102116,102117,102119,102144,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Relation Mdid="6.16166659.1.0" Name="my_tq_agg_small" IsTemporary="false" StorageType="Heap" DistributionPolicy="Hash" DistributionColumns="0" Keys="10,11,5" PartitionColumns="2" PartitionTypes="r"> diff --git a/src/backend/gporca/data/dxl/minidump/BitmapIndexNLJWithProject.mdp b/src/backend/gporca/data/dxl/minidump/BitmapIndexNLJWithProject.mdp index f5981dfd20..6a269d1901 100644 --- a/src/backend/gporca/data/dxl/minidump/BitmapIndexNLJWithProject.mdp +++ b/src/backend/gporca/data/dxl/minidump/BitmapIndexNLJWithProject.mdp @@ -54,7 +54,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10"/> - <dxl:TraceFlags Value="101013,102001,102002,102003,102029,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,103045,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:ColumnStatistics Mdid="1.32977.1.0.3" Name="part_d" Width="4.000000" NullFreq="0.000000" NdvRemain="0.000000" FreqRemain="0.000000" ColStatsMissing="true"/> diff --git a/src/backend/gporca/data/dxl/minidump/BitmapIndexNLJWithProjectNoFilt.mdp b/src/backend/gporca/data/dxl/minidump/BitmapIndexNLJWithProjectNoFilt.mdp index 620e0b3485..6bdf106138 100644 --- a/src/backend/gporca/data/dxl/minidump/BitmapIndexNLJWithProjectNoFilt.mdp +++ b/src/backend/gporca/data/dxl/minidump/BitmapIndexNLJWithProjectNoFilt.mdp @@ -52,7 +52,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10"/> - <dxl:TraceFlags Value="101013,102001,102002,102003,102029,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,103045,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.525.1.0" Name=">=" ComparisonType="GEq" ReturnsNullOnNullInput="true" IsNDVPreserving="false"> diff --git a/src/backend/gporca/data/dxl/minidump/BitmapIndexNLOJWithProject.mdp b/src/backend/gporca/data/dxl/minidump/BitmapIndexNLOJWithProject.mdp index 39bedc76c8..b13caf579c 100644 --- a/src/backend/gporca/data/dxl/minidump/BitmapIndexNLOJWithProject.mdp +++ b/src/backend/gporca/data/dxl/minidump/BitmapIndexNLOJWithProject.mdp @@ -53,7 +53,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10"/> - <dxl:TraceFlags Value="101013,102001,102002,102003,102029,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,103045,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.521.1.0" Name=">" ComparisonType="GT" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/BitmapIndexNLOJWithProjectNonPart.mdp b/src/backend/gporca/data/dxl/minidump/BitmapIndexNLOJWithProjectNonPart.mdp index 88cc602bf3..052b0213c3 100644 --- a/src/backend/gporca/data/dxl/minidump/BitmapIndexNLOJWithProjectNonPart.mdp +++ b/src/backend/gporca/data/dxl/minidump/BitmapIndexNLOJWithProjectNonPart.mdp @@ -51,7 +51,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10"/> - <dxl:TraceFlags Value="101013,102029,102046,102048,102053,102054,102074,102120,102146,102152,103001,103014,103022,103027,103029,103038,104002,104003,104004,104005,105000,106000,102157,102158"/> + <dxl:TraceFlags Value="101013,103045,102046,102048,102053,102054,102074,102120,102146,102152,103001,103014,103022,103027,103029,103038,104002,104003,104004,104005,105000,106000,102157,102158"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.521.1.0" Name=">" ComparisonType="GT" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/BitmapIndexScan.mdp b/src/backend/gporca/data/dxl/minidump/BitmapIndexScan.mdp index 18fb2b4dfa..500af06f9f 100644 --- a/src/backend/gporca/data/dxl/minidump/BitmapIndexScan.mdp +++ b/src/backend/gporca/data/dxl/minidump/BitmapIndexScan.mdp @@ -14,7 +14,7 @@ see sql/BitmapIndexScan.sql <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="102001,102002,102003,102024,102029,102120,102144,103001,103014,103015,103022,103027,103033,104004,104005,105000"/> + <dxl:TraceFlags Value="102001,102002,102003,102024,103045,102120,102144,103001,103014,103015,103022,103027,103033,104004,104005,105000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:ColumnStatistics Mdid="1.24783.1.1.7" Name="gp_segment_id" Width="4.000000" NullFreq="0.000000" NdvRemain="3.000000" FreqRemain="1.000000" ColStatsMissing="false"/> diff --git a/src/backend/gporca/data/dxl/minidump/BtreeIndexNLJWithProjectNoPart.mdp b/src/backend/gporca/data/dxl/minidump/BtreeIndexNLJWithProjectNoPart.mdp index 647fa0aa0f..2f5cc28044 100644 --- a/src/backend/gporca/data/dxl/minidump/BtreeIndexNLJWithProjectNoPart.mdp +++ b/src/backend/gporca/data/dxl/minidump/BtreeIndexNLJWithProjectNoPart.mdp @@ -49,7 +49,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10"/> - <dxl:TraceFlags Value="101013,102029,102046,102048,102053,102054,102074,102120,102146,102152,103001,103014,103022,103027,103029,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="101013,103045,102046,102048,102053,102054,102074,102120,102146,102152,103001,103014,103022,103027,103029,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.521.1.0" Name=">" ComparisonType="GT" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/BtreeIndexNLOJWithProject.mdp b/src/backend/gporca/data/dxl/minidump/BtreeIndexNLOJWithProject.mdp index 2580894b20..9d6498bce4 100644 --- a/src/backend/gporca/data/dxl/minidump/BtreeIndexNLOJWithProject.mdp +++ b/src/backend/gporca/data/dxl/minidump/BtreeIndexNLOJWithProject.mdp @@ -54,7 +54,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10"/> - <dxl:TraceFlags Value="101013,102001,102002,102003,102029,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,103045,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:ColumnStatistics Mdid="1.33136.1.0.1" Name="f" Width="4.000000" NullFreq="0.000000" NdvRemain="0.000000" FreqRemain="0.000000" ColStatsMissing="true"/> diff --git a/src/backend/gporca/data/dxl/minidump/Correlation-With-Casting-1.mdp b/src/backend/gporca/data/dxl/minidump/Correlation-With-Casting-1.mdp index 46a2773066..c020ce6ae0 100644 --- a/src/backend/gporca/data/dxl/minidump/Correlation-With-Casting-1.mdp +++ b/src/backend/gporca/data/dxl/minidump/Correlation-With-Casting-1.mdp @@ -24,7 +24,7 @@ AND u_folio = (SELECT max(u_folio) FROM q68t792_temp c WHERE a.u_vtgnr = c.u_vt <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="103027,101013,102024,102025,102029,102115,102116,102120,102128,102130,103001,103014,103015"/> + <dxl:TraceFlags Value="103027,101013,102024,102025,103045,102115,102116,102120,102128,102130,103001,103014,103015"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:ColumnStatistics Mdid="1.32935853.1.1.5" Name="cmin" Width="4.000000" NullFreq="0.000000" NdvRemain="0.000000" FreqRemain="0.000000"/> diff --git a/src/backend/gporca/data/dxl/minidump/Correlation-With-Casting-2.mdp b/src/backend/gporca/data/dxl/minidump/Correlation-With-Casting-2.mdp index a9a38544a3..a271d73fe1 100644 --- a/src/backend/gporca/data/dxl/minidump/Correlation-With-Casting-2.mdp +++ b/src/backend/gporca/data/dxl/minidump/Correlation-With-Casting-2.mdp @@ -24,7 +24,7 @@ AND u_folio = (SELECT max(u_folio) FROM q68t792_temp c WHERE a.u_vtgnr <> c.u_v <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="101013,102001,102002,102003,102024,102025,102029,102115,102116,102120,102128,102130,102144,103001,103014,103015,103027,103033"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,102024,102025,103045,102115,102116,102120,102128,102130,102144,103001,103014,103015,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:ColumnStatistics Mdid="1.32935853.1.1.5" Name="cmin" Width="4.000000" NullFreq="0.000000" NdvRemain="0.000000" FreqRemain="0.000000"/> diff --git a/src/backend/gporca/data/dxl/minidump/DynamicBitmapIndexScan.mdp b/src/backend/gporca/data/dxl/minidump/DynamicBitmapIndexScan.mdp index 499d743f11..5e6bca33c7 100644 --- a/src/backend/gporca/data/dxl/minidump/DynamicBitmapIndexScan.mdp +++ b/src/backend/gporca/data/dxl/minidump/DynamicBitmapIndexScan.mdp @@ -14,7 +14,7 @@ see sql/DynamicBitmapIndexScan.sql <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="102001,102002,102003,102024,102029,102120,102144,103001,103014,103015,103022,103027,103033,104004,104005,105000"/> + <dxl:TraceFlags Value="102001,102002,102003,102024,103045,102120,102144,103001,103014,103015,103022,103027,103033,104004,104005,105000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:RelationStatistics Mdid="2.17408.1.1" Name="foo" Rows="1.000000" EmptyRelation="false"/> diff --git a/src/backend/gporca/data/dxl/minidump/Index-Join-With-Subquery-In-Pred.mdp b/src/backend/gporca/data/dxl/minidump/Index-Join-With-Subquery-In-Pred.mdp index 94b58101e0..32c025ada7 100644 --- a/src/backend/gporca/data/dxl/minidump/Index-Join-With-Subquery-In-Pred.mdp +++ b/src/backend/gporca/data/dxl/minidump/Index-Join-With-Subquery-In-Pred.mdp @@ -43,7 +43,7 @@ Optimizer: Pivotal Optimizer (GPORCA) </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10"/> - <dxl:TraceFlags Value="102001,102002,102003,102029,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="102001,102002,102003,103045,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.523.1.0" Name="<=" ComparisonType="LEq" ReturnsNullOnNullInput="true" IsNDVPreserving="false"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply-Heterogeneous-BothSidesPartitioned.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply-Heterogeneous-BothSidesPartitioned.mdp index e807971a76..a37e1afc62 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply-Heterogeneous-BothSidesPartitioned.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply-Heterogeneous-BothSidesPartitioned.mdp @@ -33,7 +33,7 @@ select * from x, y where (x.i > y.j); <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="103027,101013,102024,102025,102029,102115,102116,102120,102128,102134,102135,102136,103001,103014,103015,103020"/> + <dxl:TraceFlags Value="103027,101013,102024,102025,103045,102115,102116,102120,102128,102134,102135,102136,103001,103014,103015,103020"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.521.1.0" Name=">" ComparisonType="GT" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply-Heterogeneous-DTS.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply-Heterogeneous-DTS.mdp index 4c0ae165ac..e224a74e88 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply-Heterogeneous-DTS.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply-Heterogeneous-DTS.mdp @@ -50,7 +50,7 @@ WHERE tt.event_ts >= tq.ets AND <dxl:StatisticsConfig DampingFactorFilter="0.750000" DampingFactorJoin="0.000000" DampingFactorGroupBy="0.750000" MaxStatsBuckets="100"/> <dxl:CTEConfig CTEInliningCutoff="0"/> <dxl:WindowOids RowNumber="7000" Rank="7001"/> - <dxl:TraceFlags Value="101013,102001,102002,102003,102024,102025,102029,102144,103027,103033"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,102024,102025,103045,102144,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.521.1.0" Name=">" ComparisonType="GT" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply-Heterogeneous-NoDTS.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply-Heterogeneous-NoDTS.mdp index 8b81884eba..172e14bc9f 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply-Heterogeneous-NoDTS.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply-Heterogeneous-NoDTS.mdp @@ -50,7 +50,7 @@ ORDER BY 1 asc ; <dxl:StatisticsConfig DampingFactorFilter="0.750000" DampingFactorJoin="0.010000" DampingFactorGroupBy="0.750000" MaxStatsBuckets="100"/> <dxl:CTEConfig CTEInliningCutoff="0"/> <dxl:WindowOids RowNumber="7000" Rank="7001"/> - <dxl:TraceFlags Value="102001,102002,102003,102024,102025,102027,102029,102144,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,102024,102025,103046,103045,102144,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.521.1.0" Name=">" ComparisonType="GT" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply-IndexOnMasterOnlyTable.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply-IndexOnMasterOnlyTable.mdp index 1a5e0a25fb..b96e8d3941 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply-IndexOnMasterOnlyTable.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply-IndexOnMasterOnlyTable.mdp @@ -6,7 +6,7 @@ <dxl:StatisticsConfig DampingFactorFilter="0.750000" DampingFactorJoin="0.000000" DampingFactorGroupBy="0.750000" MaxStatsBuckets="100"/> <dxl:CTEConfig CTEInliningCutoff="0"/> <dxl:WindowOids RowNumber="7000" Rank="7001"/> - <dxl:TraceFlags Value="102001,102002,102003,102029,102144,103001,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,103045,102144,103001,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.28.1.0" Name="xid" IsRedistributable="false" IsHashable="true" IsMergeJoinable="false" IsComposite="false" IsFixedLength="true" Length="4" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply-InnerSelect-Basic.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply-InnerSelect-Basic.mdp index 31cdfd6055..ec6e7f6b39 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply-InnerSelect-Basic.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply-InnerSelect-Basic.mdp @@ -26,7 +26,7 @@ explain SELECT * FROM s i1, t t2 where t2.c2 = i1.c2 and t2.c1 > 10; <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="102001,102002,102003,102027,102029,102115,102116,102128,102144,103014,103015,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,103046,103045,102115,102116,102128,102144,103014,103015,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.521.1.0" Name=">" ComparisonType="GT" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply-InnerSelect-Heterogeneous-DTS.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply-InnerSelect-Heterogeneous-DTS.mdp index 3d5012ba5a..621d2c3bbb 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply-InnerSelect-Heterogeneous-DTS.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply-InnerSelect-Heterogeneous-DTS.mdp @@ -48,7 +48,7 @@ WHERE tt.event_ts >= tq.ets AND <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="103027,101013,102024,102029,102115,102116,102130,102131,103014,103015"/> + <dxl:TraceFlags Value="103027,101013,102024,103045,102115,102116,102130,102131,103014,103015"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.521.1.0" Name=">" ComparisonType="GT" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply-InnerSelect-PartTable.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply-InnerSelect-PartTable.mdp index 212ca765a8..4bae5be031 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply-InnerSelect-PartTable.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply-InnerSelect-PartTable.mdp @@ -29,7 +29,7 @@ SELECT * FROM s i1, t t2 where t2.c2 = i1.c2 and t2.c1 > 10; <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="102001,102002,102003,102027,102029,102115,102116,102128,102144,103014,103015,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,103046,103045,102115,102116,102128,102144,103014,103015,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:RelationStatistics Mdid="2.32553346.1.1" Name="t" Rows="0.000000" EmptyRelation="true"/> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply-LeftOuter-NLJoin.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply-LeftOuter-NLJoin.mdp index 58570ca55d..f3b3719563 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply-LeftOuter-NLJoin.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply-LeftOuter-NLJoin.mdp @@ -65,7 +65,7 @@ explain select * from t0 left join t1 on t0.a=t1.a left join t2 on (t2.a=t0.a an </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="25" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="10000000" EnforceConstraintsOnDML="false"/> - <dxl:TraceFlags Value="101013,102001,102002,102003,102029,102046,102048,102053,102054,102120,102144,103001,103014,103015,103022,103027,103033,104003,104004,104005,105000"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,103045,102046,102048,102053,102054,102120,102144,103001,103014,103015,103022,103027,103033,104003,104004,104005,105000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Index Mdid="0.195590.1.0" Name="t1_pkey" IsClustered="false" IndexType="B-tree" KeyColumns="0" IncludedColumns="0,1,2,3,4,5,6,7,8"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply-MultiDistKeys-IncompletePDS-3-DistCols.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply-MultiDistKeys-IncompletePDS-3-DistCols.mdp index bdac8c7f2a..aa0c9023dc 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply-MultiDistKeys-IncompletePDS-3-DistCols.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply-MultiDistKeys-IncompletePDS-3-DistCols.mdp @@ -33,7 +33,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10"/> - <dxl:TraceFlags Value="101013,102001,102002,102003,102029,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,103045,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.97.1.0" Name="<" ComparisonType="LT" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply-PartTable.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply-PartTable.mdp index cda4d44286..8441c02c99 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply-PartTable.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply-PartTable.mdp @@ -51,7 +51,7 @@ ORDER BY 1 asc ; <dxl:StatisticsConfig DampingFactorFilter="0.750000" DampingFactorJoin="0.000000" DampingFactorGroupBy="0.750000" MaxStatsBuckets="100"/> <dxl:CTEConfig CTEInliningCutoff="0"/> <dxl:WindowOids RowNumber="7000" Rank="7001"/> - <dxl:TraceFlags Value="102001,102002,102003,102024,102027,102029,102115,102116,102117,102119,102144,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,102024,103046,103045,102115,102116,102117,102119,102144,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Relation Mdid="6.16166659.1.0" Name="my_tq_agg_small" IsTemporary="false" StorageType="Heap" DistributionPolicy="Hash" DistributionColumns="0" Keys="10,11,5" PartitionColumns="2" PartitionTypes="r"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply1-CalibratedCostModel.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply1-CalibratedCostModel.mdp index 93ea741246..581329cd6d 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply1-CalibratedCostModel.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply1-CalibratedCostModel.mdp @@ -11,7 +11,7 @@ <dxl:CostParam Name="NLJFactor" Value="1.000000" LowerBound="0.500000" UpperBound="1.500000"/> </dxl:CostParams> </dxl:CostModelConfig> - <dxl:TraceFlags Value="102001,102002,102003,102027,102144,103001,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,103046,102144,103001,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.26.1.0" Name="oid" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsFixedLength="true" Length="4" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply1.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply1.mdp index c63c286790..5b84776bd4 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply1.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply1.mdp @@ -6,7 +6,7 @@ <dxl:StatisticsConfig DampingFactorFilter="0.750000" DampingFactorJoin="0.010000" DampingFactorGroupBy="0.750000" MaxStatsBuckets="100"/> <dxl:CTEConfig CTEInliningCutoff="0"/> <dxl:WindowOids RowNumber="7000" Rank="7001"/> - <dxl:TraceFlags Value="102001,102002,102003,102027,102144,103001,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,103046,102144,103001,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.26.1.0" Name="oid" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsFixedLength="true" Length="4" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply2.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply2.mdp index c5bdbca5da..149ecd9c6c 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply2.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply2.mdp @@ -6,7 +6,7 @@ <dxl:StatisticsConfig DampingFactorFilter="0.750000" DampingFactorJoin="0.010000" DampingFactorGroupBy="0.750000" MaxStatsBuckets="100"/> <dxl:CTEConfig CTEInliningCutoff="0"/> <dxl:WindowOids RowNumber="7000" Rank="7001"/> - <dxl:TraceFlags Value="102001,102002,102003,102027,102144,103001,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,103046,102144,103001,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.26.1.0" Name="oid" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsFixedLength="true" Length="4" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply3.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply3.mdp index 1f2c33140b..0c3aedb230 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply3.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply3.mdp @@ -6,7 +6,7 @@ <dxl:StatisticsConfig DampingFactorFilter="0.750000" DampingFactorJoin="0.000000" DampingFactorGroupBy="0.750000" MaxStatsBuckets="100"/> <dxl:CTEConfig CTEInliningCutoff="0"/> <dxl:WindowOids RowNumber="7000" Rank="7001"/> - <dxl:TraceFlags Value="102001,102002,102003,102027,102144,103001,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,103046,102144,103001,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.26.1.0" Name="oid" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsFixedLength="true" Length="4" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/IndexApply4.mdp b/src/backend/gporca/data/dxl/minidump/IndexApply4.mdp index c485301f4d..bede215865 100644 --- a/src/backend/gporca/data/dxl/minidump/IndexApply4.mdp +++ b/src/backend/gporca/data/dxl/minidump/IndexApply4.mdp @@ -6,7 +6,7 @@ <dxl:StatisticsConfig DampingFactorFilter="0.750000" DampingFactorJoin="0.010000" DampingFactorGroupBy="0.750000" MaxStatsBuckets="100"/> <dxl:CTEConfig CTEInliningCutoff="0"/> <dxl:WindowOids RowNumber="7000" Rank="7001"/> - <dxl:TraceFlags Value="102001,102002,102003,102027,102144,103001,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,103046,102144,103001,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.26.1.0" Name="oid" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsFixedLength="true" Length="4" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/Join-INDF-NoBroadcast.mdp b/src/backend/gporca/data/dxl/minidump/Join-INDF-NoBroadcast.mdp index 5580929fd8..c6ca977338 100644 --- a/src/backend/gporca/data/dxl/minidump/Join-INDF-NoBroadcast.mdp +++ b/src/backend/gporca/data/dxl/minidump/Join-INDF-NoBroadcast.mdp @@ -21,7 +21,7 @@ select * from foo, bar where foo.a is not distinct from bar.a; </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="10000000" EnforceConstraintsOnDML="false"/> - <dxl:TraceFlags Value="102001,102002,102003,102029,102046,102048,102053,102054,102074,102120,102144,103001,103014,103015,103022,103027,103033,104003,104004,104005,105000"/> + <dxl:TraceFlags Value="102001,102002,102003,103045,102046,102048,102053,102054,102074,102120,102144,103001,103014,103015,103022,103027,103033,104003,104004,104005,105000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:RelationStatistics Mdid="2.32768.1.0" Name="t1" Rows="0.000000" EmptyRelation="true"/> diff --git a/src/backend/gporca/data/dxl/minidump/Join-INDF-Nulls-Not-Collocated.mdp b/src/backend/gporca/data/dxl/minidump/Join-INDF-Nulls-Not-Collocated.mdp index b371a59988..91fd16c282 100644 --- a/src/backend/gporca/data/dxl/minidump/Join-INDF-Nulls-Not-Collocated.mdp +++ b/src/backend/gporca/data/dxl/minidump/Join-INDF-Nulls-Not-Collocated.mdp @@ -21,7 +21,7 @@ select * from foo, (select NULL a from bar) other where foo.a is not distinct fr </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="10000000" EnforceConstraintsOnDML="false"/> - <dxl:TraceFlags Value="101013,102001,102002,102003,102029,102046,102048,102053,102054,102074,102120,102144,103001,103014,103015,103022,103027,103033,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,103045,102046,102048,102053,102054,102074,102120,102144,103001,103014,103015,103022,103027,103033,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.16.1.0" Name="bool" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsFixedLength="true" Length="1" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/LOJ-DynBitmapIndex.mdp b/src/backend/gporca/data/dxl/minidump/LOJ-DynBitmapIndex.mdp index e7ddf4d36f..5212f3a27a 100644 --- a/src/backend/gporca/data/dxl/minidump/LOJ-DynBitmapIndex.mdp +++ b/src/backend/gporca/data/dxl/minidump/LOJ-DynBitmapIndex.mdp @@ -50,7 +50,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10"/> - <dxl:TraceFlags Value="101013,102029,102046,102048,102053,102054,102074,102120,102146,102152,103001,103014,103022,103027,103029,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="101013,103045,102046,102048,102053,102054,102074,102120,102146,102152,103001,103014,103022,103027,103029,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.525.1.0" Name=">=" ComparisonType="GEq" ReturnsNullOnNullInput="true" IsNDVPreserving="false"> diff --git a/src/backend/gporca/data/dxl/minidump/LOJ-DynBitmapIndexWithSelect.mdp b/src/backend/gporca/data/dxl/minidump/LOJ-DynBitmapIndexWithSelect.mdp index e5a51798e4..4485005b68 100644 --- a/src/backend/gporca/data/dxl/minidump/LOJ-DynBitmapIndexWithSelect.mdp +++ b/src/backend/gporca/data/dxl/minidump/LOJ-DynBitmapIndexWithSelect.mdp @@ -50,7 +50,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10"/> - <dxl:TraceFlags Value="101013,102001,102002,102003,102029,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,103045,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.525.1.0" Name=">=" ComparisonType="GEq" ReturnsNullOnNullInput="true" IsNDVPreserving="false"> diff --git a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-CompsiteKey-Equiv.mdp b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-CompsiteKey-Equiv.mdp index db753af4d5..3442c52380 100644 --- a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-CompsiteKey-Equiv.mdp +++ b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-CompsiteKey-Equiv.mdp @@ -40,7 +40,7 @@ explain select * from foo left join bar on foo.a = bar.a and foo.b = bar.b left </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="25" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="10000000" EnforceConstraintsOnDML="false"/> - <dxl:TraceFlags Value="103027,101013,102029,102046,102048,102053,102054,102120,103001,103014,103015,103022,104003,104004,104005,105000,102157,102158"/> + <dxl:TraceFlags Value="103027,101013,103045,102046,102048,102053,102054,102120,103001,103014,103015,103022,104003,104004,104005,105000,102157,102158"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.16.1.0" Name="bool" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsFixedLength="true" Length="1" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-CompsiteKey-NoMotion.mdp b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-CompsiteKey-NoMotion.mdp index fb38b107c8..ff6bdd0ee6 100644 --- a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-CompsiteKey-NoMotion.mdp +++ b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-CompsiteKey-NoMotion.mdp @@ -43,7 +43,7 @@ explain select * from foo left join bar on foo.a = bar.a and foo.b = bar.b left </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10" XformBindThreshold="0"/> - <dxl:TraceFlags Value="102001,102002,102003,102029,102043,102046,102048,102053,102054,102074,102120,102144,102157,102158,103001,103014,103022,103026,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="102001,102002,102003,103045,102043,102046,102048,102053,102054,102074,102120,102144,102157,102158,103001,103014,103022,103026,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.16.1.0" Name="bool" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsTextRelated="false" IsFixedLength="true" Length="1" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-DistKey-Multiple-Predicates.mdp b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-DistKey-Multiple-Predicates.mdp index 1c7e9992f9..54138cc873 100644 --- a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-DistKey-Multiple-Predicates.mdp +++ b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-DistKey-Multiple-Predicates.mdp @@ -44,7 +44,7 @@ explain select * from foo left join bar on bar.a=foo.a and bar.a<foo.b left oute </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10" XformBindThreshold="0"/> - <dxl:TraceFlags Value="102001,102002,102003,102029,102043,102046,102048,102053,102054,102074,102120,102144,102157,102158,103001,103014,103022,103026,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="102001,102002,102003,103045,102043,102046,102048,102053,102054,102074,102120,102144,102157,102158,103001,103014,103022,103026,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:RelationStatistics Mdid="2.49159.1.0" Name="bar" Rows="0.000000" RelPages="0" RelAllVisible="0" EmptyRelation="true"/> diff --git a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-MasterOnly-Table.mdp b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-MasterOnly-Table.mdp index 62edb96d99..2c85dcdad9 100644 --- a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-MasterOnly-Table.mdp +++ b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-MasterOnly-Table.mdp @@ -45,7 +45,7 @@ union all </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="25" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="10000000" EnforceConstraintsOnDML="false"/> - <dxl:TraceFlags Value="101013,102001,102002,102003,102029,102046,102048,102053,102054,102120,102144,103001,103004,103014,103015,103022,103027,103033,104003,104004,104005,105000"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,103045,102046,102048,102053,102054,102120,102144,103001,103004,103014,103015,103022,103027,103033,104003,104004,104005,105000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.1034.1.0" Name="_aclitem" IsRedistributable="true" IsHashable="false" IsMergeJoinable="false" IsComposite="false" IsFixedLength="false" Length="-1" PassByValue="false"> diff --git a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-MultiDistKeys-IndexKeys.mdp b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-MultiDistKeys-IndexKeys.mdp index e6101562e0..bcf69925b8 100644 --- a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-MultiDistKeys-IndexKeys.mdp +++ b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-MultiDistKeys-IndexKeys.mdp @@ -50,7 +50,7 @@ explain select * from foo left join bar on foo.a=bar.a and foo.b=bar.b and foo.c </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10" XformBindThreshold="0"/> - <dxl:TraceFlags Value="102001,102002,102003,102029,102043,102046,102048,102053,102054,102074,102120,102144,102157,102158,103001,103014,103022,103026,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="102001,102002,102003,103045,102043,102046,102048,102053,102054,102074,102120,102144,102157,102158,103001,103014,103022,103026,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.521.1.0" Name=">" ComparisonType="GT" ReturnsNullOnNullInput="true" IsNDVPreserving="false"> diff --git a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-MultiIndexes.mdp b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-MultiIndexes.mdp index 230a3a82b9..26c0fe5947 100644 --- a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-MultiIndexes.mdp +++ b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-MultiIndexes.mdp @@ -26,7 +26,7 @@ set optimizer_enable_hashjoin = off; </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="10000000" EnforceConstraintsOnDML="false"/> - <dxl:TraceFlags Value="102029,102046,102048,102053,102054,102074,102120,103001,103014,103015,103022,103027,104003,104004,104005,105000,106000,,102157,102158"/> + <dxl:TraceFlags Value="103045,102046,102048,102053,102054,102074,102120,103001,103014,103015,103022,103027,104003,104004,104005,105000,106000,,102157,102158"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:RelationStatistics Mdid="2.32774.1.0" Name="zoo" Rows="0.000000" EmptyRelation="true"/> diff --git a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-Negative-NonEqual-Predicate.mdp b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-Negative-NonEqual-Predicate.mdp index e0e248c104..b4d0618d41 100644 --- a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-Negative-NonEqual-Predicate.mdp +++ b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-Negative-NonEqual-Predicate.mdp @@ -43,7 +43,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10"/> - <dxl:TraceFlags Value="102001,102002,102003,102029,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="102001,102002,102003,103045,102046,102048,102053,102054,102074,102120,102144,102152,103001,103014,103022,103027,103029,103033,103038,104002,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:RelationStatistics Mdid="2.40962.1.0" Name="foo" Rows="0.000000" EmptyRelation="true"/> diff --git a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-NonDistKey.mdp b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-NonDistKey.mdp index 72c9512860..d831a7fe6e 100644 --- a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-NonDistKey.mdp +++ b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-NonDistKey.mdp @@ -31,7 +31,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="25" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="10000000" EnforceConstraintsOnDML="false"/> - <dxl:TraceFlags Value="101013,102001,102002,102003,102029,102046,102048,102053,102054,102120,102144,103001,103014,103015,103022,103027,103033,104003,104004,104005,105000"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,103045,102046,102048,102053,102054,102120,102144,103001,103014,103015,103022,103027,103033,104003,104004,104005,105000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:RelationStatistics Mdid="2.24579.1.0" Name="foo" Rows="0.000000" EmptyRelation="true"/> diff --git a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-WithComplexPredicates.mdp b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-WithComplexPredicates.mdp index 4ec47ebcd7..3cf3240249 100644 --- a/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-WithComplexPredicates.mdp +++ b/src/backend/gporca/data/dxl/minidump/LOJ-IndexApply-WithComplexPredicates.mdp @@ -33,7 +33,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="100000" EnforceConstraintsOnDML="false" PushGroupByBelowSetopThreshold="10"/> - <dxl:TraceFlags Value="102001,102002,102003,102027,102074,102113,102120,102144,103001,103014,103015,103022,103027,103029,103033,104003,104004,104005,105000,106000"/> + <dxl:TraceFlags Value="102001,102002,102003,103046,102074,102113,102120,102144,103001,103014,103015,103022,103027,103029,103033,104003,104004,104005,105000,106000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.16.1.0" Name="bool" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsFixedLength="true" Length="1" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/NLJ-DistCol-No-Broadcast.mdp b/src/backend/gporca/data/dxl/minidump/NLJ-DistCol-No-Broadcast.mdp index 6cea113bf5..515b6cbc8d 100644 --- a/src/backend/gporca/data/dxl/minidump/NLJ-DistCol-No-Broadcast.mdp +++ b/src/backend/gporca/data/dxl/minidump/NLJ-DistCol-No-Broadcast.mdp @@ -29,7 +29,7 @@ explain select * from a1,b1 where a1.a = b1.a; </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="25" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="10000000" EnforceConstraintsOnDML="false"/> - <dxl:TraceFlags Value="102001,102002,102003,102029,102046,102048,102053,102054,102120,102144,103001,103014,103015,103022,103033,104003,104004,104005,105000"/> + <dxl:TraceFlags Value="102001,102002,102003,103045,102046,102048,102053,102054,102120,102144,103001,103014,103015,103022,103033,104003,104004,104005,105000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.16.1.0" Name="bool" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsFixedLength="true" Length="1" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/NLJ-EqAllCol-No-Broadcast.mdp b/src/backend/gporca/data/dxl/minidump/NLJ-EqAllCol-No-Broadcast.mdp index 4726320f9e..b0cd1352c2 100644 --- a/src/backend/gporca/data/dxl/minidump/NLJ-EqAllCol-No-Broadcast.mdp +++ b/src/backend/gporca/data/dxl/minidump/NLJ-EqAllCol-No-Broadcast.mdp @@ -30,7 +30,7 @@ explain select * from a1,b1 where a1.a = b1.a and a1.a = b1.b; </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="25" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="10000000" EnforceConstraintsOnDML="false"/> - <dxl:TraceFlags Value="102001,102002,102003,102029,102046,102048,102053,102054,102120,102144,103001,103014,103015,103022,103033,104003,104004,104005,105000"/> + <dxl:TraceFlags Value="102001,102002,102003,103045,102046,102048,102053,102054,102120,102144,103001,103014,103015,103022,103033,104003,104004,104005,105000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.16.1.0" Name="bool" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsFixedLength="true" Length="1" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/NLJ-EqDistCol-InEqNonDistCol-No-Broadcast.mdp b/src/backend/gporca/data/dxl/minidump/NLJ-EqDistCol-InEqNonDistCol-No-Broadcast.mdp index cd1bc0caab..5d337795cd 100644 --- a/src/backend/gporca/data/dxl/minidump/NLJ-EqDistCol-InEqNonDistCol-No-Broadcast.mdp +++ b/src/backend/gporca/data/dxl/minidump/NLJ-EqDistCol-InEqNonDistCol-No-Broadcast.mdp @@ -29,7 +29,7 @@ explain select * from a1,b1 where a1.a = b1.a and a1.a != b1.b; </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="25" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="10000000" EnforceConstraintsOnDML="false"/> - <dxl:TraceFlags Value="102029,102046,102048,102053,102054,102120,103001,103014,103015,103022,104003,104004,104005,105000"/> + <dxl:TraceFlags Value="103045,102046,102048,102053,102054,102120,103001,103014,103015,103022,104003,104004,104005,105000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.518.1.0" Name="<>" ComparisonType="NEq" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/NLJ-InEqDistCol-EqNonDistCol-Redistribute.mdp b/src/backend/gporca/data/dxl/minidump/NLJ-InEqDistCol-EqNonDistCol-Redistribute.mdp index f877c179f6..655d58b571 100644 --- a/src/backend/gporca/data/dxl/minidump/NLJ-InEqDistCol-EqNonDistCol-Redistribute.mdp +++ b/src/backend/gporca/data/dxl/minidump/NLJ-InEqDistCol-EqNonDistCol-Redistribute.mdp @@ -32,7 +32,7 @@ explain select * from a1,b1 where a1.a != b1.a and a1.a = b1.b; </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="25" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="10000000" EnforceConstraintsOnDML="false"/> - <dxl:TraceFlags Value="102001,102002,102003,102029,102046,102048,102053,102054,102120,102144,103001,103014,103015,103022,103033,104003,104004,104005,105000"/> + <dxl:TraceFlags Value="102001,102002,102003,103045,102046,102048,102053,102054,102120,102144,103001,103014,103015,103022,103033,104003,104004,104005,105000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.518.1.0" Name="<>" ComparisonType="NEq" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/minidump/NestedNLJWithBlockingSpool.mdp b/src/backend/gporca/data/dxl/minidump/NestedNLJWithBlockingSpool.mdp index 4fee876e4b..22ff2849b6 100644 --- a/src/backend/gporca/data/dxl/minidump/NestedNLJWithBlockingSpool.mdp +++ b/src/backend/gporca/data/dxl/minidump/NestedNLJWithBlockingSpool.mdp @@ -51,7 +51,7 @@ </dxl:CostParams> </dxl:CostModelConfig> <dxl:Hint JoinArityForAssociativityCommutativity="18" ArrayExpansionThreshold="100" JoinOrderDynamicProgThreshold="10" BroadcastThreshold="10000000" EnforceConstraintsOnDML="false"/> - <dxl:TraceFlags Value="102001,102002,102003,102005,102029,102046,102048,102053,102054,102074,102120,102144,103001,103014,103015,103022,103027,103033,104003,104004,104005,105000"/> + <dxl:TraceFlags Value="102001,102002,102003,102005,103045,102046,102048,102053,102054,102074,102120,102144,103001,103014,103015,103022,103027,103033,104003,104004,104005,105000"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:RelationStatistics Mdid="2.98306.1.0" Name="part" Rows="0.000000" EmptyRelation="true"/> diff --git a/src/backend/gporca/data/dxl/minidump/PartTbl-DPE.mdp b/src/backend/gporca/data/dxl/minidump/PartTbl-DPE.mdp index 95b7e8feae..3fd4367cde 100644 --- a/src/backend/gporca/data/dxl/minidump/PartTbl-DPE.mdp +++ b/src/backend/gporca/data/dxl/minidump/PartTbl-DPE.mdp @@ -6,7 +6,7 @@ <dxl:StatisticsConfig DampingFactorFilter="0.750000" DampingFactorJoin="0.000000" DampingFactorGroupBy="0.750000" MaxStatsBuckets="100"/> <dxl:CTEConfig CTEInliningCutoff="0"/> <dxl:WindowOids RowNumber="7000" Rank="7001"/> - <dxl:TraceFlags Value="101013,102001,102002,102003,102029,102144,103001,103027,103033"/> + <dxl:TraceFlags Value="101013,102001,102002,102003,103045,102144,103001,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:Type Mdid="0.16.1.0" Name="bool" IsRedistributable="true" IsHashable="true" IsMergeJoinable="true" IsComposite="false" IsFixedLength="true" Length="1" PassByValue="true"> diff --git a/src/backend/gporca/data/dxl/minidump/PartTbl-HJ5.mdp b/src/backend/gporca/data/dxl/minidump/PartTbl-HJ5.mdp index a77d61434d..a63d9291d5 100644 --- a/src/backend/gporca/data/dxl/minidump/PartTbl-HJ5.mdp +++ b/src/backend/gporca/data/dxl/minidump/PartTbl-HJ5.mdp @@ -9,7 +9,7 @@ select * from s,t where s.b=t.a and t.b=35; <dxl:StatisticsConfig DampingFactorFilter="0.750000" DampingFactorJoin="0.010000" DampingFactorGroupBy="0.750000" MaxStatsBuckets="100"/> <dxl:CTEConfig CTEInliningCutoff="0"/> <dxl:WindowOids RowNumber="7000" Rank="7001"/> - <dxl:TraceFlags Value="102001,102002,102003,102024,102025,102027,102073,102115,102116,102117,102119,102144,103027,103033"/> + <dxl:TraceFlags Value="102001,102002,102003,102024,102025,103046,102073,102115,102116,102117,102119,102144,103027,103033"/> </dxl:OptimizerConfig> <dxl:Metadata SystemIds="0.GPDB"> <dxl:GPDBScalarOp Mdid="0.525.1.0" Name=">=" ComparisonType="GEq" ReturnsNullOnNullInput="true"> diff --git a/src/backend/gporca/data/dxl/search/strategy0.xml b/src/backend/gporca/data/dxl/search/strategy0.xml index 4e06bdd015..cab857cccd 100644 --- a/src/backend/gporca/data/dxl/search/strategy0.xml +++ b/src/backend/gporca/data/dxl/search/strategy0.xml @@ -5,10 +5,10 @@ <dxl:Xform Name="CXformGet2TableScan"/> <dxl:Xform Name="CXformSelect2Filter"/> <dxl:Xform Name="CXformExpandNAryJoin"/> - <dxl:Xform Name="CXformInnerJoin2NLJoin"/> + <dxl:Xform Name="CXformImplementInnerJoin"/> </dxl:SearchStage> <dxl:SearchStage TimeThreshold="5000" CostThreshold="10E6"> - <dxl:Xform Name="CXformInnerJoin2HashJoin"/> + <dxl:Xform Name="CXformImplementInnerJoin"/> </dxl:SearchStage> </dxl:SearchStrategy> </dxl:DXLMessage> diff --git a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXform.h b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXform.h index 97a6312b20..b4f87e139c 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXform.h +++ b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXform.h @@ -90,9 +90,9 @@ public: ExfInnerJoin2IndexGetApply____removed, ExfInnerJoin2DynamicIndexGetApply____removed, ExfInnerApplyWithOuterKey2InnerJoin, - ExfInnerJoin2NLJoin, + ExfInnerJoin2NLJoin____removed, ExfImplementIndexApply, - ExfInnerJoin2HashJoin, + ExfInnerJoin2HashJoin____removed, ExfInnerApply2InnerJoin, ExfInnerApply2InnerJoinNoCorrelations, ExfImplementInnerCorrelatedApply, diff --git a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformInnerJoin2HashJoin.h b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformInnerJoin2HashJoin.h deleted file mode 100644 index 0812a2fb16..0000000000 --- a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformInnerJoin2HashJoin.h +++ /dev/null @@ -1,71 +0,0 @@ -//--------------------------------------------------------------------------- -// Greenplum Database -// Copyright (C) 2011 EMC Corp. -// -// @filename: -// CXformInnerJoin2HashJoin.h -// -// @doc: -// Transform inner join to inner Hash Join -//--------------------------------------------------------------------------- -#ifndef GPOPT_CXformInnerJoin2HashJoin_H -#define GPOPT_CXformInnerJoin2HashJoin_H - -#include "gpos/base.h" - -#include "gpopt/xforms/CXformImplementation.h" - -namespace gpopt -{ -using namespace gpos; - -//--------------------------------------------------------------------------- -// @class: -// CXformInnerJoin2HashJoin -// -// @doc: -// Transform inner join to inner Hash Join -// Deprecated in favor of CXformImplementInnerJoin. -// -//--------------------------------------------------------------------------- -class CXformInnerJoin2HashJoin : public CXformImplementation -{ -private: -public: - CXformInnerJoin2HashJoin(const CXformInnerJoin2HashJoin &) = delete; - - // ctor - explicit CXformInnerJoin2HashJoin(CMemoryPool *mp); - - // dtor - ~CXformInnerJoin2HashJoin() override = default; - - // ident accessors - EXformId - Exfid() const override - { - return ExfInnerJoin2HashJoin; - } - - // return a string for xform name - const CHAR * - SzId() const override - { - return "CXformInnerJoin2HashJoin"; - } - - // compute xform promise for a given expression handle - EXformPromise Exfp(CExpressionHandle &exprhdl) const override; - - // actual transform - void Transform(CXformContext *pxfctxt, CXformResult *pxfres, - CExpression *pexpr) const override; - -}; // class CXformInnerJoin2HashJoin - -} // namespace gpopt - - -#endif // !GPOPT_CXformInnerJoin2HashJoin_H - -// EOF diff --git a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformInnerJoin2NLJoin.h b/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformInnerJoin2NLJoin.h deleted file mode 100644 index 37469d28cc..0000000000 --- a/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformInnerJoin2NLJoin.h +++ /dev/null @@ -1,71 +0,0 @@ -//--------------------------------------------------------------------------- -// Greenplum Database -// Copyright (C) 2009 Greenplum, Inc. -// -// @filename: -// CXformInnerJoin2NLJoin.h -// -// @doc: -// Transform inner join to inner NLJ -//--------------------------------------------------------------------------- -#ifndef GPOPT_CXformInnerJoin2NLJoin_H -#define GPOPT_CXformInnerJoin2NLJoin_H - -#include "gpos/base.h" - -#include "gpopt/xforms/CXformImplementation.h" - -namespace gpopt -{ -using namespace gpos; - -//--------------------------------------------------------------------------- -// @class: -// CXformInnerJoin2NLJoin -// -// @doc: -// Transform inner join to inner NLJ -// Deprecated in favor of CXformImplementInnerJoin. -// -//--------------------------------------------------------------------------- -class CXformInnerJoin2NLJoin : public CXformImplementation -{ -private: -public: - CXformInnerJoin2NLJoin(const CXformInnerJoin2NLJoin &) = delete; - - // ctor - explicit CXformInnerJoin2NLJoin(CMemoryPool *mp); - - // dtor - ~CXformInnerJoin2NLJoin() override = default; - - // ident accessors - EXformId - Exfid() const override - { - return ExfInnerJoin2NLJoin; - } - - // return a string for xform name - const CHAR * - SzId() const override - { - return "CXformInnerJoin2NLJoin"; - } - - // compute xform promise for a given expression handle - EXformPromise Exfp(CExpressionHandle &exprhdl) const override; - - // actual transform - void Transform(CXformContext *pxfctxt, CXformResult *pxfres, - CExpression *pexpr) const override; - -}; // class CXformInnerJoin2NLJoin - -} // namespace gpopt - - -#endif // !GPOPT_CXformInnerJoin2NLJoin_H - -// EOF diff --git a/src/backend/gporca/libgpopt/include/gpopt/xforms/xforms.h b/src/backend/gporca/libgpopt/include/gpopt/xforms/xforms.h index 2f396c1619..d47146f22a 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/xforms/xforms.h +++ b/src/backend/gporca/libgpopt/include/gpopt/xforms/xforms.h @@ -78,8 +78,6 @@ #include "gpopt/xforms/CXformInnerApply2InnerJoin.h" #include "gpopt/xforms/CXformInnerApply2InnerJoinNoCorrelations.h" #include "gpopt/xforms/CXformInnerApplyWithOuterKey2InnerJoin.h" -#include "gpopt/xforms/CXformInnerJoin2HashJoin.h" -#include "gpopt/xforms/CXformInnerJoin2NLJoin.h" #include "gpopt/xforms/CXformInnerJoinAntiSemiJoinNotInSwap.h" #include "gpopt/xforms/CXformInnerJoinAntiSemiJoinSwap.h" #include "gpopt/xforms/CXformInnerJoinSemiJoinSwap.h" diff --git a/src/backend/gporca/libgpopt/src/xforms/CXform.cpp b/src/backend/gporca/libgpopt/src/xforms/CXform.cpp index 387c6d03df..db1faed0a6 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXform.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXform.cpp @@ -139,8 +139,6 @@ CBitSet * CXform::PbsNLJoinXforms(CMemoryPool *mp) { CBitSet *pbs = GPOS_NEW(mp) CBitSet(mp, EopttraceSentinel); - (void) pbs->ExchangeSet( - GPOPT_DISABLE_XFORM_TF(CXform::ExfInnerJoin2NLJoin)); (void) pbs->ExchangeSet( GPOPT_DISABLE_XFORM_TF(CXform::ExfLeftOuterJoin2NLJoin)); (void) pbs->ExchangeSet( @@ -204,8 +202,6 @@ CXform::PbsHashJoinXforms(CMemoryPool *mp) { CBitSet *pbs = GPOS_NEW(mp) CBitSet(mp, EopttraceSentinel); - (void) pbs->ExchangeSet( - GPOPT_DISABLE_XFORM_TF(CXform::ExfInnerJoin2HashJoin)); (void) pbs->ExchangeSet( GPOPT_DISABLE_XFORM_TF(CXform::ExfLeftOuterJoin2HashJoin)); (void) pbs->ExchangeSet( diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformFactory.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformFactory.cpp index 6e832fdc45..50ca908c47 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformFactory.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformFactory.cpp @@ -165,9 +165,9 @@ CXformFactory::Instantiate() Add(GPOS_NEW(m_mp) CXformSubqNAryJoin2Apply(m_mp)); SkipUnused(2); Add(GPOS_NEW(m_mp) CXformInnerApplyWithOuterKey2InnerJoin(m_mp)); - Add(GPOS_NEW(m_mp) CXformInnerJoin2NLJoin(m_mp)); + SkipUnused(1); Add(GPOS_NEW(m_mp) CXformImplementIndexApply(m_mp)); - Add(GPOS_NEW(m_mp) CXformInnerJoin2HashJoin(m_mp)); + SkipUnused(1); Add(GPOS_NEW(m_mp) CXformInnerApply2InnerJoin(m_mp)); Add(GPOS_NEW(m_mp) CXformInnerApply2InnerJoinNoCorrelations(m_mp)); Add(GPOS_NEW(m_mp) CXformImplementInnerCorrelatedApply(m_mp)); diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformImplementInnerJoin.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformImplementInnerJoin.cpp index 4451cf8f48..e62ab85a25 100644 --- a/src/backend/gporca/libgpopt/src/xforms/CXformImplementInnerJoin.cpp +++ b/src/backend/gporca/libgpopt/src/xforms/CXformImplementInnerJoin.cpp @@ -80,7 +80,7 @@ CXformImplementInnerJoin::Transform(CXformContext *pxfctxt, GPOS_ASSERT(pxfres->Size() == 0); - if (GPOPT_FENABLED_XFORM(ExfInnerJoin2HashJoin)) + if (!GPOS_FTRACE(EopttraceDisableInnerHashJoin)) { CXformUtils::ImplementHashJoin<CPhysicalInnerHashJoin>(pxfctxt, pxfres, pexpr); @@ -88,7 +88,7 @@ CXformImplementInnerJoin::Transform(CXformContext *pxfctxt, if ((GPOS_FTRACE(EopttraceForceComprehensiveJoinImplementation) || pxfres->Size() == 0) && - GPOPT_FENABLED_XFORM(ExfInnerJoin2NLJoin)) + !GPOS_FTRACE(EopttraceDisableInnerNLJ)) { CXformUtils::ImplementNLJoin<CPhysicalInnerNLJoin>(pxfctxt, pxfres, pexpr); diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformInnerJoin2HashJoin.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformInnerJoin2HashJoin.cpp deleted file mode 100644 index 41b8ef5516..0000000000 --- a/src/backend/gporca/libgpopt/src/xforms/CXformInnerJoin2HashJoin.cpp +++ /dev/null @@ -1,79 +0,0 @@ -//--------------------------------------------------------------------------- -// Greenplum Database -// Copyright (C) 2011 EMC Corp. -// -// @filename: -// CXformInnerJoin2HashJoin.cpp -// -// @doc: -// Implementation of transform -//--------------------------------------------------------------------------- - -#include "gpopt/xforms/CXformInnerJoin2HashJoin.h" - -#include "gpos/base.h" - -#include "gpopt/operators/CLogicalInnerJoin.h" -#include "gpopt/operators/CPatternLeaf.h" -#include "gpopt/operators/CPhysicalInnerHashJoin.h" -#include "gpopt/operators/CPhysicalInnerNLJoin.h" -#include "gpopt/operators/CPredicateUtils.h" -#include "gpopt/xforms/CXformUtils.h" - -using namespace gpopt; - - -//--------------------------------------------------------------------------- -// @function: -// CXformInnerJoin2HashJoin::CXformInnerJoin2HashJoin -// -// @doc: -// ctor -// -//--------------------------------------------------------------------------- -CXformInnerJoin2HashJoin::CXformInnerJoin2HashJoin(CMemoryPool *mp) - : // pattern - CXformImplementation(GPOS_NEW(mp) CExpression( - mp, GPOS_NEW(mp) CLogicalInnerJoin(mp), - GPOS_NEW(mp) - CExpression(mp, GPOS_NEW(mp) CPatternLeaf(mp)), // left child - GPOS_NEW(mp) - CExpression(mp, GPOS_NEW(mp) CPatternLeaf(mp)), // right child - GPOS_NEW(mp) - CExpression(mp, GPOS_NEW(mp) CPatternTree(mp)) // predicate - )) -{ -} - - -//--------------------------------------------------------------------------- -// @function: -// CXformInnerJoin2HashJoin::Exfp -// -// @doc: -// Compute xform promise for a given expression handle; -// -//--------------------------------------------------------------------------- -CXform::EXformPromise -CXformInnerJoin2HashJoin::Exfp(CExpressionHandle &) const -{ - return CXform::ExfpNone; -} - - -//--------------------------------------------------------------------------- -// @function: -// CXformInnerJoin2HashJoin::Transform -// -// @doc: -// actual transformation -// Deprecated in favor of CXformImplementInnerJoin. -// -//--------------------------------------------------------------------------- -void -CXformInnerJoin2HashJoin::Transform(CXformContext *, CXformResult *, - CExpression *) const -{ -} - -// EOF diff --git a/src/backend/gporca/libgpopt/src/xforms/CXformInnerJoin2NLJoin.cpp b/src/backend/gporca/libgpopt/src/xforms/CXformInnerJoin2NLJoin.cpp deleted file mode 100644 index 65f6df7f16..0000000000 --- a/src/backend/gporca/libgpopt/src/xforms/CXformInnerJoin2NLJoin.cpp +++ /dev/null @@ -1,79 +0,0 @@ -//--------------------------------------------------------------------------- -// Greenplum Database -// Copyright (C) 2009 Greenplum, Inc. -// -// @filename: -// CXformInnerJoin2NLJoin.cpp -// -// @doc: -// Implementation of transform -//--------------------------------------------------------------------------- - -#include "gpopt/xforms/CXformInnerJoin2NLJoin.h" - -#include "gpos/base.h" - -#include "gpopt/operators/CLogicalInnerJoin.h" -#include "gpopt/operators/CPatternLeaf.h" -#include "gpopt/operators/CPhysicalInnerNLJoin.h" -#include "gpopt/xforms/CXformInnerJoin2HashJoin.h" -#include "gpopt/xforms/CXformUtils.h" - -using namespace gpopt; - - -//--------------------------------------------------------------------------- -// @function: -// CXformInnerJoin2NLJoin::CXformInnerJoin2NLJoin -// -// @doc: -// ctor -// -//--------------------------------------------------------------------------- -CXformInnerJoin2NLJoin::CXformInnerJoin2NLJoin(CMemoryPool *mp) - : // pattern - CXformImplementation(GPOS_NEW(mp) CExpression( - mp, GPOS_NEW(mp) CLogicalInnerJoin(mp), - GPOS_NEW(mp) - CExpression(mp, GPOS_NEW(mp) CPatternLeaf(mp)), // left child - GPOS_NEW(mp) - CExpression(mp, GPOS_NEW(mp) CPatternLeaf(mp)), // right child - GPOS_NEW(mp) - CExpression(mp, GPOS_NEW(mp) CPatternLeaf(mp)) // predicate - )) -{ -} - - -//--------------------------------------------------------------------------- -// @function: -// CXformInnerJoin2NLJoin::Exfp -// -// @doc: -// Compute xform promise for a given expression handle; -// -//--------------------------------------------------------------------------- -CXform::EXformPromise -CXformInnerJoin2NLJoin::Exfp(CExpressionHandle &) const -{ - return CXform::ExfpNone; -} - - -//--------------------------------------------------------------------------- -// @function: -// CXformInnerJoin2NLJoin::Transform -// -// @doc: -// actual transformation -// Deprecated in favor of CXformImplementInnerJoin. -// -//--------------------------------------------------------------------------- -void -CXformInnerJoin2NLJoin::Transform(CXformContext *, CXformResult *, - CExpression *) const -{ -} - - -// EOF diff --git a/src/backend/gporca/libgpopt/src/xforms/Makefile b/src/backend/gporca/libgpopt/src/xforms/Makefile index f087acf624..ef7f0fdec9 100644 --- a/src/backend/gporca/libgpopt/src/xforms/Makefile +++ b/src/backend/gporca/libgpopt/src/xforms/Makefile @@ -69,8 +69,6 @@ OBJS = CDecorrelator.o \ CXformInnerApply2InnerJoin.o \ CXformInnerApply2InnerJoinNoCorrelations.o \ CXformInnerApplyWithOuterKey2InnerJoin.o \ - CXformInnerJoin2HashJoin.o \ - CXformInnerJoin2NLJoin.o \ CXformImplementInnerJoin.o \ CXformInsert2DML.o \ CXformIntersect2Join.o \ diff --git a/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h b/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h index f8c8ccc57c..0c3f2e1da2 100644 --- a/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h +++ b/src/backend/gporca/libnaucrates/include/naucrates/traceflags/traceflags.h @@ -221,6 +221,12 @@ enum EOptTraceFlag // Discard HashJoin with RedistributeMotion nodes EopttraceDiscardRedistributeHashJoin = 103044, + // disable hash join alternatives + EopttraceDisableInnerHashJoin = 103045, + + // enable nested loop join alternatives + EopttraceDisableInnerNLJ = 103046, + /////////////////////////////////////////////////////// ///////////////////// statistics flags //////////////// ////////////////////////////////////////////////////// diff --git a/src/backend/gporca/server/src/unittest/gpopt/minidump/CICGTest.cpp b/src/backend/gporca/server/src/unittest/gpopt/minidump/CICGTest.cpp index 896eea45b8..1f2b6fa896 100644 --- a/src/backend/gporca/server/src/unittest/gpopt/minidump/CICGTest.cpp +++ b/src/backend/gporca/server/src/unittest/gpopt/minidump/CICGTest.cpp @@ -285,8 +285,7 @@ CICGTest::EresUnittest_NegativeIndexApplyTests() true); CAutoTraceFlag atfTS(EopttraceDisableXformBase + CXform::ExfGet2TableScan, true); - CAutoTraceFlag atfNLJ( - EopttraceDisableXformBase + CXform::ExfInnerJoin2NLJoin, true); + CAutoTraceFlag atfNLJ(EopttraceDisableInnerNLJ, true); CAutoMemoryPool amp(CAutoMemoryPool::ElcNone); CMemoryPool *mp = amp.Pmp(); diff --git a/src/backend/gporca/server/src/unittest/gpopt/search/CSearchStrategyTest.cpp b/src/backend/gporca/server/src/unittest/gpopt/search/CSearchStrategyTest.cpp index 236d47432d..37705328b3 100644 --- a/src/backend/gporca/server/src/unittest/gpopt/search/CSearchStrategyTest.cpp +++ b/src/backend/gporca/server/src/unittest/gpopt/search/CSearchStrategyTest.cpp @@ -225,7 +225,7 @@ CSearchStrategyTest::PdrgpssRandom(CMemoryPool *mp) // first xforms set contains essential rules to produce simple equality join plan (void) pxfsFst->ExchangeSet(CXform::ExfGet2TableScan); (void) pxfsFst->ExchangeSet(CXform::ExfSelect2Filter); - (void) pxfsFst->ExchangeSet(CXform::ExfInnerJoin2HashJoin); + (void) pxfsFst->ExchangeSet(CXform::ExfImplementInnerJoin); // second xforms set contains all other rules pxfsSnd->Union(CXformFactory::Pxff()->PxfsExploration()); diff --git a/src/backend/gporca/server/src/unittest/gpopt/xforms/CXformFactoryTest.cpp b/src/backend/gporca/server/src/unittest/gpopt/xforms/CXformFactoryTest.cpp index 1dfab659b2..3e7ff8455c 100644 --- a/src/backend/gporca/server/src/unittest/gpopt/xforms/CXformFactoryTest.cpp +++ b/src/backend/gporca/server/src/unittest/gpopt/xforms/CXformFactoryTest.cpp @@ -54,8 +54,8 @@ CXformFactoryTest::EresUnittest_Basic() CXform *pxf = CXformFactory::Pxff()->Pxf(CXform::ExfGet2TableScan); GPOS_ASSERT(CXform::ExfGet2TableScan == pxf->Exfid()); - pxf = CXformFactory::Pxff()->Pxf(CXform::ExfInnerJoin2NLJoin); - GPOS_ASSERT(CXform::ExfInnerJoin2NLJoin == pxf->Exfid()); + pxf = CXformFactory::Pxff()->Pxf(CXform::ExfImplementInnerJoin); + GPOS_ASSERT(CXform::ExfImplementInnerJoin == pxf->Exfid()); pxf = CXformFactory::Pxff()->Pxf(CXform::ExfGbAgg2HashAgg); GPOS_ASSERT(CXform::ExfGbAgg2HashAgg == pxf->Exfid()); diff --git a/src/test/regress/expected/gporca.out b/src/test/regress/expected/gporca.out index 682abd463a..94aeee9028 100644 --- a/src/test/regress/expected/gporca.out +++ b/src/test/regress/expected/gporca.out @@ -9858,8 +9858,6 @@ BEGIN SELECT $1 + 1; END; $$ LANGUAGE plpgsql volatile; --- force_explain -set optimizer_segments = 3; explain select c.cid cid, c.firstname firstname, @@ -9870,28 +9868,26 @@ where c.cid = s.cid and s.date_sk = d.date_sk and ((d.year = 2001 and lower(s.type) = 't1' and plusone(d.moy) = 5) or (d.moy = 4 and upper(s.type) = 'T2')); QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - Gather Motion 3:1 (slice3; segments: 3) (cost=2215.04..2775.38 rows=110 width=72) - -> Hash Join (cost=2215.04..2775.38 rows=37 width=72) + Gather Motion 3:1 (slice1; segments: 3) (cost=738.36..913.37 rows=109 width=72) + -> Hash Join (cost=738.36..911.92 rows=36 width=72) Hash Cond: (c.cid = s.cid) - -> Seq Scan on cust c (cost=0.00..434.00 rows=11134 width=68) - -> Hash (cost=2214.95..2214.95 rows=3 width=8) - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=940.72..2214.95 rows=3 width=8) + -> Seq Scan on cust c (cost=0.00..145.33 rows=11133 width=68) + -> Hash (cost=738.33..738.33 rows=2 width=8) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=314.24..738.33 rows=2 width=8) Hash Key: s.cid - -> Hash Join (cost=940.72..2214.80 rows=3 width=8) + -> Hash Join (cost=314.24..738.28 rows=2 width=8) Hash Cond: (d.date_sk = s.date_sk) Join Filter: (((d.year = 2001) AND (lower(s.type) = 't1'::text) AND (plusone(d.moy) = 5)) OR ((d.moy = 4) AND (upper(s.type) = 'T2'::text))) - -> Seq Scan on datedim d (cost=0.00..1268.50 rows=52 width=12) + -> Seq Scan on datedim d (cost=0.00..423.50 rows=52 width=12) Filter: ((year = 2001) OR (moy = 4)) - -> Hash (cost=939.68..939.68 rows=28 width=40) - -> Redistribute Motion 3:3 (slice1; segments: 3) (cost=0.00..939.68 rows=28 width=40) + -> Hash (cost=313.89..313.89 rows=28 width=40) + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..313.89 rows=28 width=40) Hash Key: s.date_sk - -> Seq Scan on sales s (cost=0.00..938.00 rows=28 width=40) + -> Seq Scan on sales s (cost=0.00..313.33 rows=28 width=40) Filter: ((lower(type) = 't1'::text) OR (upper(type) = 'T2'::text)) - Planning time: 2.896 ms Optimizer: Postgres query optimizer -(19 rows) +(18 rows) -reset optimizer_segments; -- Bitmap indexes drop table if exists orca.bm_test; NOTICE: table "bm_test" does not exist, skipping @@ -10280,32 +10276,6 @@ BEGIN SELECT $1 + 1; END; $$ LANGUAGE plpgsql volatile; --- start_ignore -select disable_xform('CXformInnerJoin2DynamicIndexGetApply'); - disable_xform --------------------------------------------------- - CXformInnerJoin2DynamicIndexGetApply is disabled -(1 row) - -select disable_xform('CXformInnerJoin2HashJoin'); - disable_xform --------------------------------------- - CXformInnerJoin2HashJoin is disabled -(1 row) - -select disable_xform('CXformInnerJoin2IndexGetApply'); - disable_xform -------------------------------------------- - CXformInnerJoin2IndexGetApply is disabled -(1 row) - -select disable_xform('CXformInnerJoin2NLJoin'); - disable_xform ------------------------------------- - CXformInnerJoin2NLJoin is disabled -(1 row) --- end_ignore -set optimizer_enable_indexjoin=on; -- force_explain set optimizer_segments = 3; EXPLAIN @@ -10340,37 +10310,8 @@ ORDER BY 1 asc ; -> Hash (cost=108.67..108.67 rows=7467 width=108) -> Seq Scan on my_tt_agg_opt tt (cost=0.00..108.67 rows=7467 width=108) Optimizer: Postgres query optimizer -(19 rows) - -reset optimizer_segments; -reset optimizer_enable_constant_expression_evaluation; -reset optimizer_enable_indexjoin; --- start_ignore -select enable_xform('CXformInnerJoin2DynamicIndexGetApply'); - enable_xform -------------------------------------------------- - CXformInnerJoin2DynamicIndexGetApply is enabled -(1 row) - -select enable_xform('CXformInnerJoin2HashJoin'); - enable_xform -------------------------------------- - CXformInnerJoin2HashJoin is enabled -(1 row) - -select enable_xform('CXformInnerJoin2IndexGetApply'); - enable_xform ------------------------------------------- - CXformInnerJoin2IndexGetApply is enabled -(1 row) - -select enable_xform('CXformInnerJoin2NLJoin'); - enable_xform ------------------------------------ - CXformInnerJoin2NLJoin is enabled -(1 row) +(21 rows) --- end_ignore -- MPP-25661: IndexScan crashing for qual with reference to outer tuple drop table if exists idxscan_outer; NOTICE: table "idxscan_outer" does not exist, skipping @@ -12038,45 +11979,61 @@ ANALYZE foo3; set optimizer_join_order=query; -- we ignore enable/disable_xform statements as their output will differ if the server is compiled without Orca (the xform won't exist) -- start_ignore -select disable_xform('CXformInnerJoin2HashJoin'); +select disable_xform('CXformLeftOuterJoin2HashJoin'); + disable_xform +------------------------------------------ + CXformLeftOuterJoin2HashJoin is disabled +(1 row) + +select disable_xform('CXformImplementInnerJoin'); disable_xform -------------------------------------- - CXformInnerJoin2HashJoin is disabled + CXformImplementInnerJoin is disabled (1 row) -- end_ignore -EXPLAIN SELECT 1 FROM foo1, foo2 WHERE foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); - QUERY PLAN ----------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=2.07..3.17 rows=3 width=4) - -> Hash Semi Join (cost=2.07..3.13 rows=1 width=4) - Hash Cond: (foo2.b = foo3.b) - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=1.02..2.07 rows=1 width=4) - Hash Key: foo2.b - -> Hash Join (cost=1.02..2.05 rows=1 width=4) - Hash Cond: (foo2.a = foo1.a) - -> Seq Scan on foo2 (cost=0.00..1.01 rows=1 width=8) - Filter: (c = 3) - -> Hash (cost=1.01..1.01 rows=1 width=4) - -> Seq Scan on foo1 (cost=0.00..1.01 rows=1 width=4) - -> Hash (cost=1.03..1.03 rows=1 width=4) - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..1.03 rows=1 width=4) - Hash Key: foo3.b - -> Seq Scan on foo3 (cost=0.00..1.01 rows=1 width=4) +EXPLAIN SELECT 1 FROM foo1 left join foo2 on foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); + QUERY PLAN +---------------------------------------------------------------------------------------------------------------- + Gather Motion 3:1 (slice1; segments: 3) (cost=2.07..3.19 rows=3 width=4) + -> Hash Right Join (cost=2.07..3.15 rows=1 width=4) + Hash Cond: (foo2.a = foo1.a) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=1.04..2.11 rows=1 width=4) + Hash Key: foo2.a + -> Hash Semi Join (cost=1.04..2.09 rows=1 width=4) + Hash Cond: (foo2.b = foo3.b) + -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..1.03 rows=1 width=8) + Hash Key: foo2.b + -> Seq Scan on foo2 (cost=0.00..1.01 rows=1 width=8) + Filter: (c = 3) + -> Hash (cost=1.03..1.03 rows=1 width=4) + -> Redistribute Motion 3:3 (slice4; segments: 3) (cost=0.00..1.03 rows=1 width=4) + Hash Key: foo3.b + -> Seq Scan on foo3 (cost=0.00..1.01 rows=1 width=4) + -> Hash (cost=1.01..1.01 rows=1 width=4) + -> Seq Scan on foo1 (cost=0.00..1.01 rows=1 width=4) Optimizer: Postgres query optimizer -(16 rows) +(18 rows) -SELECT 1 FROM foo1, foo2 WHERE foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); +SELECT 1 FROM foo1 left join foo2 on foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); ?column? ---------- -(0 rows) + 1 + 1 +(2 rows) reset optimizer_join_order; -- start_ignore -select enable_xform('CXformInnerJoin2HashJoin'); +select enable_xform('CXformLeftOuterJoin2HashJoin'); + enable_xform +----------------------------------------- + CXformLeftOuterJoin2HashJoin is enabled +(1 row) + +select enable_xform('CXformImplementInnerJoin'); enable_xform ------------------------------------- - CXformInnerJoin2HashJoin is enabled + CXformImplementInnerJoin is enabled (1 row) -- end_ignore @@ -13254,11 +13211,7 @@ select disable_xform('CXformJoin2BitmapIndexGetApply'); CXformJoin2BitmapIndexGetApply is disabled (1 row) -select disable_xform('CXformInnerJoin2NLJoin'); - disable_xform ------------------------------------- - CXformInnerJoin2NLJoin is disabled -(1 row) +set optimizer_enable_nljoin=off; -- end_ignore -- Make sure we don't allow a regular (btree) index scan or index join for an AO table -- We disabled hash join, and bitmap index joins, NLJs, so this should leave ORCA no other choices @@ -13317,12 +13270,7 @@ select enable_xform('CXformJoin2BitmapIndexGetApply'); CXformJoin2BitmapIndexGetApply is enabled (1 row) -select enable_xform('CXformInnerJoin2NLJoin'); - enable_xform ------------------------------------ - CXformInnerJoin2NLJoin is enabled -(1 row) - +reset optimizer_enable_nljoin; -- end_ignore reset optimizer_enable_hashjoin; -- Tests converted from MDPs that use tables partitioned on text columns and similar types, diff --git a/src/test/regress/expected/gporca_optimizer.out b/src/test/regress/expected/gporca_optimizer.out index 9f49d24cec..80e4cb5d08 100644 --- a/src/test/regress/expected/gporca_optimizer.out +++ b/src/test/regress/expected/gporca_optimizer.out @@ -9887,8 +9887,6 @@ BEGIN SELECT $1 + 1; END; $$ LANGUAGE plpgsql volatile; --- force_explain -set optimizer_segments = 3; explain select c.cid cid, c.firstname firstname, @@ -9919,7 +9917,6 @@ where c.cid = s.cid and s.date_sk = d.date_sk and Optimizer: Pivotal Optimizer (GPORCA) (18 rows) -reset optimizer_segments; -- Bitmap indexes drop table if exists orca.bm_test; NOTICE: table "bm_test" does not exist, skipping @@ -10313,33 +10310,6 @@ BEGIN SELECT $1 + 1; END; $$ LANGUAGE plpgsql volatile; --- start_ignore -select disable_xform('CXformInnerJoin2DynamicIndexGetApply'); - disable_xform --------------------------------------------------------- - CXformInnerJoin2DynamicIndexGetApply is not recognized -(1 row) - -select disable_xform('CXformInnerJoin2HashJoin'); - disable_xform --------------------------------------- - CXformInnerJoin2HashJoin is disabled -(1 row) - -select disable_xform('CXformInnerJoin2IndexGetApply'); - disable_xform -------------------------------------------------- - CXformInnerJoin2IndexGetApply is not recognized -(1 row) - -select disable_xform('CXformInnerJoin2NLJoin'); - disable_xform ------------------------------------- - CXformInnerJoin2NLJoin is disabled -(1 row) - --- end_ignore -set optimizer_enable_indexjoin=on; -- force_explain set optimizer_segments = 3; EXPLAIN @@ -10351,62 +10321,27 @@ WHERE tq.sym = tt.symbol AND tt.event_ts < tq.end_ts GROUP BY 1 ORDER BY 1 asc ; -INFO: GPORCA failed to produce a plan, falling back to planner -DETAIL: No plan has been computed for required properties - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) (cost=39937.77..39951.93 rows=1000 width=16) - Merge Key: ((((tt.event_ts / 100000) / 5) * 5)) - -> Sort (cost=39937.77..39938.60 rows=333 width=16) - Sort Key: ((((tt.event_ts / 100000) / 5) * 5)) - -> Finalize HashAggregate (cost=39917.97..39923.80 rows=333 width=16) - Group Key: ((((tt.event_ts / 100000) / 5) * 5)) - -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=39875.47..39912.97 rows=1000 width=16) - Hash Key: ((((tt.event_ts / 100000) / 5) * 5)) - -> Partial HashAggregate (cost=39875.47..39892.97 rows=1000 width=16) - Group Key: (((tt.event_ts / 100000) / 5) * 5) - -> Hash Join (cost=202.00..39819.05 rows=11283 width=8) - Hash Cond: ((tq.sym)::bpchar = tt.symbol) - Join Filter: ((tt.event_ts >= tq.ets) AND (tt.event_ts < tq.end_ts) AND (plusone(tq.bid_price) < tt.trade_price)) - -> Redistribute Motion 3:3 (slice3; segments: 3) (cost=0.00..544.00 rows=13600 width=98) - Hash Key: tq.sym - -> Append (cost=0.00..272.00 rows=13600 width=98) - -> Seq Scan on my_tq_agg_opt_part_1_prt_p1 tq_1 (cost=0.00..102.00 rows=6800 width=98) - -> Seq Scan on my_tq_agg_opt_part_1_prt_p2 tq_2 (cost=0.00..102.00 rows=6800 width=98) - -> Hash (cost=108.67..108.67 rows=7467 width=108) - -> Seq Scan on my_tt_agg_opt tt (cost=0.00..108.67 rows=7467 width=108) - Optimizer: Postgres query optimizer -(21 rows) - -reset optimizer_segments; -reset optimizer_enable_constant_expression_evaluation; -reset optimizer_enable_indexjoin; --- start_ignore -select enable_xform('CXformInnerJoin2DynamicIndexGetApply'); - enable_xform --------------------------------------------------------- - CXformInnerJoin2DynamicIndexGetApply is not recognized -(1 row) - -select enable_xform('CXformInnerJoin2HashJoin'); - enable_xform -------------------------------------- - CXformInnerJoin2HashJoin is enabled -(1 row) - -select enable_xform('CXformInnerJoin2IndexGetApply'); - enable_xform -------------------------------------------------- - CXformInnerJoin2IndexGetApply is not recognized -(1 row) - -select enable_xform('CXformInnerJoin2NLJoin'); - enable_xform ------------------------------------ - CXformInnerJoin2NLJoin is enabled -(1 row) + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + Sort (cost=0.00..862.00 rows=1 width=16) + Sort Key: ((((my_tt_agg_opt.event_ts / 100000) / 5) * 5)) + -> GroupAggregate (cost=0.00..862.00 rows=1 width=16) + Group Key: ((((my_tt_agg_opt.event_ts / 100000) / 5) * 5)) + -> Sort (cost=0.00..862.00 rows=1 width=8) + Sort Key: ((((my_tt_agg_opt.event_ts / 100000) / 5) * 5)) + -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..862.00 rows=1 width=8) + -> Hash Join (cost=0.00..862.00 rows=1 width=8) + Hash Cond: ((my_tq_agg_opt_part.sym)::bpchar = my_tt_agg_opt.symbol) + Join Filter: ((plusone(my_tq_agg_opt_part.bid_price) < my_tt_agg_opt.trade_price) AND (my_tt_agg_opt.event_ts >= my_tq_agg_opt_part.ets) AND (my_tt_agg_opt.event_ts < my_tq_agg_opt_part.end_ts)) + -> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=1 width=32) + Hash Key: my_tq_agg_opt_part.sym + -> Dynamic Seq Scan on my_tq_agg_opt_part (cost=0.00..431.00 rows=1 width=32) + Number of partitions to scan: 2 (out of 2) + -> Hash (cost=431.00..431.00 rows=1 width=24) + -> Seq Scan on my_tt_agg_opt (cost=0.00..431.00 rows=1 width=24) + Optimizer: Pivotal Optimizer (GPORCA) +(17 rows) --- end_ignore -- MPP-25661: IndexScan crashing for qual with reference to outer tuple drop table if exists idxscan_outer; NOTICE: table "idxscan_outer" does not exist, skipping @@ -12178,26 +12113,31 @@ ANALYZE foo3; set optimizer_join_order=query; -- we ignore enable/disable_xform statements as their output will differ if the server is compiled without Orca (the xform won't exist) -- start_ignore -select disable_xform('CXformInnerJoin2HashJoin'); +select disable_xform('CXformLeftOuterJoin2HashJoin'); + disable_xform +------------------------------------------ + CXformLeftOuterJoin2HashJoin is disabled +(1 row) + +select disable_xform('CXformImplementInnerJoin'); disable_xform -------------------------------------- - CXformInnerJoin2HashJoin is disabled + CXformImplementInnerJoin is disabled (1 row) -- end_ignore -EXPLAIN SELECT 1 FROM foo1, foo2 WHERE foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); +EXPLAIN SELECT 1 FROM foo1 left join foo2 on foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); QUERY PLAN --------------------------------------------------------------------------------------------------------------------- - Result (cost=0.00..1324035.28 rows=1 width=4) - -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1324035.28 rows=1 width=1) - -> Nested Loop (cost=0.00..1324035.28 rows=1 width=1) + Result (cost=0.00..1721310.84 rows=2 width=4) + -> Gather Motion 3:1 (slice1; segments: 3) (cost=0.00..1721310.84 rows=2 width=1) + -> Nested Loop Left Join (cost=0.00..1721310.84 rows=1 width=1) Join Filter: (foo1.a = foo2.a) - -> Broadcast Motion 3:3 (slice3; segments: 3) (cost=0.00..431.00 rows=2 width=4) - -> Seq Scan on foo1 (cost=0.00..431.00 rows=1 width=4) - -> Materialize (cost=0.00..431.00 rows=1 width=4) - -> Hash Semi Join (cost=0.00..431.00 rows=1 width=4) + -> Seq Scan on foo1 (cost=0.00..431.00 rows=1 width=4) + -> Materialize (cost=0.00..818.97 rows=1 width=4) + -> Hash Semi Join (cost=0.00..818.97 rows=1 width=4) Hash Cond: (foo2.b = foo3.b) - -> Bitmap Heap Scan on foo2 (cost=0.00..0.00 rows=1 width=8) + -> Bitmap Heap Scan on foo2 (cost=0.00..387.97 rows=1 width=8) Recheck Cond: (c = 3) -> Bitmap Index Scan on f2c (cost=0.00..0.00 rows=0 width=0) Index Cond: (c = 3) @@ -12205,19 +12145,27 @@ EXPLAIN SELECT 1 FROM foo1, foo2 WHERE foo1.a = foo2.a AND foo2.c = 3 AND foo2.b -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..431.00 rows=2 width=4) -> Seq Scan on foo3 (cost=0.00..431.00 rows=1 width=4) Optimizer: Pivotal Optimizer (GPORCA) -(17 rows) +(16 rows) -SELECT 1 FROM foo1, foo2 WHERE foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); +SELECT 1 FROM foo1 left join foo2 on foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); ?column? ---------- -(0 rows) + 1 + 1 +(2 rows) reset optimizer_join_order; -- start_ignore -select enable_xform('CXformInnerJoin2HashJoin'); +select enable_xform('CXformLeftOuterJoin2HashJoin'); + enable_xform +----------------------------------------- + CXformLeftOuterJoin2HashJoin is enabled +(1 row) + +select enable_xform('CXformImplementInnerJoin'); enable_xform ------------------------------------- - CXformInnerJoin2HashJoin is enabled + CXformImplementInnerJoin is enabled (1 row) -- end_ignore @@ -13396,12 +13344,7 @@ select disable_xform('CXformJoin2BitmapIndexGetApply'); CXformJoin2BitmapIndexGetApply is disabled (1 row) -select disable_xform('CXformInnerJoin2NLJoin'); - disable_xform ------------------------------------- - CXformInnerJoin2NLJoin is disabled -(1 row) - +set optimizer_enable_nljoin=off; -- end_ignore -- Make sure we don't allow a regular (btree) index scan or index join for an AO table -- We disabled hash join, and bitmap index joins, NLJs, so this should leave ORCA no other choices @@ -13461,12 +13404,7 @@ select enable_xform('CXformJoin2BitmapIndexGetApply'); CXformJoin2BitmapIndexGetApply is enabled (1 row) -select enable_xform('CXformInnerJoin2NLJoin'); - enable_xform ------------------------------------ - CXformInnerJoin2NLJoin is enabled -(1 row) - +reset optimizer_enable_nljoin; -- end_ignore reset optimizer_enable_hashjoin; -- Tests converted from MDPs that use tables partitioned on text columns and similar types, diff --git a/src/test/regress/sql/gporca.sql b/src/test/regress/sql/gporca.sql index 2d45be2775..32800ed277 100644 --- a/src/test/regress/sql/gporca.sql +++ b/src/test/regress/sql/gporca.sql @@ -1514,8 +1514,6 @@ BEGIN END; $$ LANGUAGE plpgsql volatile; --- force_explain -set optimizer_segments = 3; explain select c.cid cid, c.firstname firstname, @@ -1524,7 +1522,7 @@ select c.cid cid, from cust c, sales s, datedim d where c.cid = s.cid and s.date_sk = d.date_sk and ((d.year = 2001 and lower(s.type) = 't1' and plusone(d.moy) = 5) or (d.moy = 4 and upper(s.type) = 'T2')); -reset optimizer_segments; + -- Bitmap indexes drop table if exists orca.bm_test; create table orca.bm_test (i int, t text); @@ -1779,15 +1777,6 @@ BEGIN END; $$ LANGUAGE plpgsql volatile; --- start_ignore -select disable_xform('CXformInnerJoin2DynamicIndexGetApply'); -select disable_xform('CXformInnerJoin2HashJoin'); -select disable_xform('CXformInnerJoin2IndexGetApply'); -select disable_xform('CXformInnerJoin2NLJoin'); --- end_ignore - -set optimizer_enable_indexjoin=on; - -- force_explain set optimizer_segments = 3; EXPLAIN @@ -1799,16 +1788,6 @@ WHERE tq.sym = tt.symbol AND tt.event_ts < tq.end_ts GROUP BY 1 ORDER BY 1 asc ; -reset optimizer_segments; -reset optimizer_enable_constant_expression_evaluation; -reset optimizer_enable_indexjoin; - --- start_ignore -select enable_xform('CXformInnerJoin2DynamicIndexGetApply'); -select enable_xform('CXformInnerJoin2HashJoin'); -select enable_xform('CXformInnerJoin2IndexGetApply'); -select enable_xform('CXformInnerJoin2NLJoin'); --- end_ignore -- MPP-25661: IndexScan crashing for qual with reference to outer tuple drop table if exists idxscan_outer; @@ -2586,15 +2565,17 @@ ANALYZE foo3; set optimizer_join_order=query; -- we ignore enable/disable_xform statements as their output will differ if the server is compiled without Orca (the xform won't exist) -- start_ignore -select disable_xform('CXformInnerJoin2HashJoin'); +select disable_xform('CXformLeftOuterJoin2HashJoin'); +select disable_xform('CXformImplementInnerJoin'); -- end_ignore -EXPLAIN SELECT 1 FROM foo1, foo2 WHERE foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); -SELECT 1 FROM foo1, foo2 WHERE foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); +EXPLAIN SELECT 1 FROM foo1 left join foo2 on foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); +SELECT 1 FROM foo1 left join foo2 on foo1.a = foo2.a AND foo2.c = 3 AND foo2.b IN (SELECT b FROM foo3); reset optimizer_join_order; -- start_ignore -select enable_xform('CXformInnerJoin2HashJoin'); +select enable_xform('CXformLeftOuterJoin2HashJoin'); +select enable_xform('CXformImplementInnerJoin'); -- end_ignore -- Test that duplicate sensitive redistributes don't have invalid projection (eg: element that can't be hashed) drop table if exists t55; @@ -2962,7 +2943,7 @@ explain (costs off) select * from tpart_dim d join tpart_ao_btree f on d.a=f.a w select disable_xform('CXformSelect2BitmapBoolOp'); select disable_xform('CXformSelect2DynamicBitmapBoolOp'); select disable_xform('CXformJoin2BitmapIndexGetApply'); -select disable_xform('CXformInnerJoin2NLJoin'); +set optimizer_enable_nljoin=off; -- end_ignore -- Make sure we don't allow a regular (btree) index scan or index join for an AO table @@ -2978,7 +2959,7 @@ select * from tpart_dim d join tpart_ao_btree f on d.a=f.a where d.b=1; select enable_xform('CXformSelect2BitmapBoolOp'); select enable_xform('CXformSelect2DynamicBitmapBoolOp'); select enable_xform('CXformJoin2BitmapIndexGetApply'); -select enable_xform('CXformInnerJoin2NLJoin'); +reset optimizer_enable_nljoin; -- end_ignore reset optimizer_enable_hashjoin; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
