Rework for pull request 218 Fixed computation of ports for install_local_hadoop -p rand Fixed conversion of VEGRef to base or index column when getting ready to eliminate a column from a required order.
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/59ce2b79 Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/59ce2b79 Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/59ce2b79 Branch: refs/heads/master Commit: 59ce2b79cd652e43f71183859df53077050c4c2a Parents: a347719 Author: Hans Zeller <[email protected]> Authored: Thu Dec 10 00:29:27 2015 +0000 Committer: Hans Zeller <[email protected]> Committed: Thu Dec 10 00:29:27 2015 +0000 ---------------------------------------------------------------------- core/sqf/sql/scripts/install_local_hadoop | 2 +- core/sql/optimizer/GroupAttr.cpp | 36 ++++++++++++++++++++++---- 2 files changed, 32 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/59ce2b79/core/sqf/sql/scripts/install_local_hadoop ---------------------------------------------------------------------- diff --git a/core/sqf/sql/scripts/install_local_hadoop b/core/sqf/sql/scripts/install_local_hadoop index 951f417..732c17d 100755 --- a/core/sqf/sql/scripts/install_local_hadoop +++ b/core/sqf/sql/scripts/install_local_hadoop @@ -391,7 +391,7 @@ else MY_START_PORT=`expr 24000 + $MY_START_PORT '*' 200` elif [ $MY_START_PORT == "rand" ]; then # pick a random number between 12000 and 24000 that is divisible by 200 - MY_START_PORT=`expr $RANDOM '%' 50 '*' 200 + 12000` + MY_START_PORT=`expr $RANDOM '%' 60 '*' 200 + 12000` fi echo "# Using non-standard port range from MY_START_PORT env var: $MY_START_PORT..." fi http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/59ce2b79/core/sql/optimizer/GroupAttr.cpp ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/GroupAttr.cpp b/core/sql/optimizer/GroupAttr.cpp index d027745..5df31c3 100644 --- a/core/sql/optimizer/GroupAttr.cpp +++ b/core/sql/optimizer/GroupAttr.cpp @@ -343,6 +343,13 @@ void GroupAttributes::addConstraint(ItemExpr *c) const ValueIdSet &occPreds = ((CheckOptConstraint *) occ.getItemExpr())->getCheckPreds(); + // Note that the check for inclusion of value ids of + // the predicates is not very useful. A more useful + // check would be whether the existing predicates + // imply the new ones or vice versa, but that would be + // much more complicated code and is not required at + // this point. + if (occPreds.contains(cc->getCheckPreds())) { // this is no news, delete this useless new constraint @@ -684,18 +691,37 @@ NABoolean GroupAttributes::tryToEliminateOrderColumnBasedOnEqualsPred( if (col.getItemExpr()->getOperatorType() == ITM_INVERSE) col = col.getItemExpr()->child(0).getValueId(); - // convert col from a VEGRef to a base column, if needed, - // the ScanKey method below wants a real column as input + // Convert col from a VEGRef to a base column, if needed, + // the ScanKey method below wants a real column as input. + // Make sure to pick the base column that is actually + // referenced in the check predicates, in case there are + // multiple base columns in the VEG. if (col.getItemExpr()->getOperatorType() == ITM_VEG_REFERENCE) { const ValueIdSet &vegMembers = static_cast<VEGReference *>(col.getItemExpr())-> getVEG()->getAllValues(); + ValueId dummy; + for (ValueId b=vegMembers.init(); vegMembers.next(b); vegMembers.advance(b)) - if (b.getItemExpr()->getOperatorType() == ITM_BASECOLUMN) - col = b; + if (checkPreds.referencesTheGivenValue(b, dummy)) + { + // Use this column for comparison. Note that + // we can have a situation with a VEG(T1.a, T2.b) + // and a check predicate T1.a = const. The (computed) + // check predicate got added later, so "const" is + // not a VEG member. This should not cause trouble, + // however, since an operator must ensure that + // a) the VEG members it produces are equal (it needs to + // make sure the comparison pred is evaluated), and + // b) that the predicate applies. + // So, we cannot have the situation where T1.a=const + // and T2.b != const in the output of this operator. + col = b; + break; + } } for (ValueId p = checkPreds.init(); @@ -727,7 +753,7 @@ NABoolean GroupAttributes::tryToEliminateOrderColumnBasedOnEqualsPred( ValueIdSet(p))); } } - } + } // predicates or check constraints are supplied return result; }
