You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by db...@apache.org on 2017/11/22 17:26:23 UTC

[3/4] incubator-trafodion git commit: Second rework: Check divisioning columns, also generator core fix

Second rework: Check divisioning columns, also generator core fix


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/5631883d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/5631883d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/5631883d

Branch: refs/heads/master
Commit: 5631883d6b2d81c6d34081288889b791cfbbe527
Parents: 20953fe
Author: Dave Birdsall <db...@apache.org>
Authored: Wed Nov 22 01:48:35 2017 +0000
Committer: Dave Birdsall <db...@apache.org>
Committed: Wed Nov 22 01:48:35 2017 +0000

----------------------------------------------------------------------
 core/sql/optimizer/IndexDesc.cpp         |  9 ++++++---
 core/sql/optimizer/ItemExpr.cpp          | 16 ++++++++--------
 core/sql/regress/compGeneral/EXPECTED071 | 26 ++++++++++++++++++++++++++
 core/sql/regress/compGeneral/TEST071     | 10 ++++++++++
 4 files changed, 50 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/5631883d/core/sql/optimizer/IndexDesc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/IndexDesc.cpp b/core/sql/optimizer/IndexDesc.cpp
index df22a49..742ff96 100644
--- a/core/sql/optimizer/IndexDesc.cpp
+++ b/core/sql/optimizer/IndexDesc.cpp
@@ -810,9 +810,9 @@ IndexProperty::compareIndexPromise(const IndexProperty *ixProp) const
     while (!done)
       {
         if (columnToCheck >= index->getIndexKey().entries())
-          return INCOMPATIBLE;  // must be one of the indexes is just "_SALT_" (seems unlikely actually)
+          return INCOMPATIBLE;  // must be one of the indexes is just "_SALT_" or "_DIVISION_1_" (seems unlikely actually)
         else if (columnToCheck >= otherIndex->getIndexKey().entries())
-          return INCOMPATIBLE;  // must be one of the indexes is just "_SALT_" (seems unlikely actually)
+          return INCOMPATIBLE;  // must be one of the indexes is just "_SALT_" or "_DIVISION_1_" (seems unlikely actually)
         else
           {
             IndexColumn * indexCol = (IndexColumn *)(index->getIndexKey()[columnToCheck]).getItemExpr();
@@ -820,10 +820,13 @@ IndexProperty::compareIndexPromise(const IndexProperty *ixProp) const
             if ( indexCol->getNAColumn()->isSaltColumn() &&
                  otherIndexCol->getNAColumn()->isSaltColumn() )
               columnToCheck++;
+            else if ( indexCol->getNAColumn()->isDivisioningColumn() &&
+                      otherIndexCol->getNAColumn()->isDivisioningColumn() )
+              columnToCheck++;
             else if ( indexCol->getDefinition() != otherIndexCol->getDefinition() )
               return INCOMPATIBLE;
             else
-              done = TRUE;  // leading column (ignoring "_SALT_" if both have "_SALT_") is the same; do Kb checks
+              done = TRUE;  // leading column (ignoring salt, divisioning if both have it) is the same; do Kb checks
           }
       }
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/5631883d/core/sql/optimizer/ItemExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/ItemExpr.cpp b/core/sql/optimizer/ItemExpr.cpp
index 09cc906..732dfde 100644
--- a/core/sql/optimizer/ItemExpr.cpp
+++ b/core/sql/optimizer/ItemExpr.cpp
@@ -709,11 +709,11 @@ ItemExpr * ItemExpr::createMirrorPred(ItemExpr *compColPtr,
                                       const ValueIdSet &underlyingCols)
 {
    CMPASSERT(compColPtr->getOperatorType() == ITM_BASECOLUMN);
-   ValueIdSet eics = ((BaseColumn *)compColPtr)->getEIC();
-   ValueId iCol;
-   ItemExpr *compColIndxPtr;
-   eics.getFirst(iCol);
-   compColIndxPtr = iCol.getItemExpr();
+   BaseColumn *bcol = static_cast<BaseColumn *>(compColPtr);
+   // use the basecolumn Veg, using the basecolumn by itself can cause issues
+   // during codegen downstream
+   ValueId egVid = bcol->getTableDesc()->getColumnVEGList()[bcol->getColNumber()];
+   ItemExpr *compColVEGRefPtr = egVid.getItemExpr();
 
    switch (getOperatorType())
      {
@@ -750,7 +750,7 @@ ItemExpr * ItemExpr::createMirrorPred(ItemExpr *compColPtr,
 
               ItemExpr * compPred = new(CmpCommon::statementHeap())
                                       BiRelat(ITM_EQUAL,
-                                              compColIndxPtr,
+                                              compColVEGRefPtr,
                                               (foldedExpr==NULL) ? newCompExpr.getItemExpr() : foldedExpr);
               compPred->synthTypeAndValueId(TRUE);
 
@@ -821,14 +821,14 @@ ItemExpr * ItemExpr::createMirrorPred(ItemExpr *compColPtr,
           if (keyColOnLeft == TRUE)
               compPred = new(CmpCommon::statementHeap())
                 BiRelat(((BiRelat *) this)->getRelaxedComparisonOpType(),
-                                   compColIndxPtr,
+                                   compColVEGRefPtr,
                                    mirroredExpr //newCompExpr.getItemExpr()
                         );
           else
               compPred = new(CmpCommon::statementHeap())
                            BiRelat(((BiRelat *) this)->getRelaxedComparisonOpType(),
                                    mirroredExpr, //newCompExpr.getItemExpr(),
-                                   compColIndxPtr);
+                                   compColVEGRefPtr);
           compPred->synthTypeAndValueId(TRUE);
           return compPred;
           break;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/5631883d/core/sql/regress/compGeneral/EXPECTED071
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/EXPECTED071 b/core/sql/regress/compGeneral/EXPECTED071
index e07238f..9fa3ec3 100644
--- a/core/sql/regress/compGeneral/EXPECTED071
+++ b/core/sql/regress/compGeneral/EXPECTED071
@@ -1512,6 +1512,32 @@ MTD2        MTD2X2                6       0        0  S       SYSKEY
 
 --- 30 row(s) selected.
 >>
+>>update statistics for table mtd1 on every column;
+
+--- SQL operation complete.
+>>
+>>select store_id, item_id, sale_date, sale_amt
++>from mtd1
++>where item_id = 101 and sale_amt = 100.0 and sale_date between date '2011-06-01' and date '2011-06-30';
+
+STORE_ID     ITEM_ID      SALE_DATE   SALE_AMT             
+-----------  -----------  ----------  ---------------------
+
+          1          101  2011-06-30                 100.00
+
+--- 1 row(s) selected.
+>>
+>>select store_id, item_id, sale_date, sale_amt
++>from mtd1
++>where item_id = 102 and sale_amt = 200.0 and sale_date between date '2011-07-01' and date '2011-08-31';
+
+STORE_ID     ITEM_ID      SALE_DATE   SALE_AMT             
+-----------  -----------  ----------  ---------------------
+
+          2          102  2011-08-02                 200.00
+
+--- 1 row(s) selected.
+>>
 >>set parserflags 1;
 
 --- SQL operation complete.

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/5631883d/core/sql/regress/compGeneral/TEST071
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/TEST071 b/core/sql/regress/compGeneral/TEST071
index 09ef16a..d002f59 100644
--- a/core/sql/regress/compGeneral/TEST071
+++ b/core/sql/regress/compGeneral/TEST071
@@ -753,6 +753,16 @@ order by 1, 2, 3
 
 execute smdixquery;
 
+update statistics for table mtd1 on every column;
+
+select store_id, item_id, sale_date, sale_amt
+from mtd1
+where item_id = 101 and sale_amt = 100.0 and sale_date between date '2011-06-01' and date '2011-06-30';
+
+select store_id, item_id, sale_date, sale_amt
+from mtd1
+where item_id = 102 and sale_amt = 200.0 and sale_date between date '2011-07-01' and date '2011-08-31';
+
 set parserflags 1;
 -- validate contents of index against base table after create index
 select count(*) from mtd1;