You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by li...@apache.org on 2016/11/12 00:35:47 UTC

[2/4] incubator-trafodion git commit: [TRAFODION-2270] support ORDER BY in PIVOT_GROUP/GROUP_CONCAT function, fix review comments

[TRAFODION-2270] support ORDER BY in PIVOT_GROUP/GROUP_CONCAT function, fix review comments


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

Branch: refs/heads/master
Commit: 0bba8d6d83a19a9b48e2baa942083c37b69f6c09
Parents: 3fb43cb
Author: Liu Ming <ov...@sina.com>
Authored: Sat Oct 29 20:29:32 2016 -0400
Committer: Liu Ming <ov...@sina.com>
Committed: Sat Oct 29 20:29:32 2016 -0400

----------------------------------------------------------------------
 core/sql/optimizer/BindRelExpr.cpp       |   3 +-
 core/sql/optimizer/OptPhysRelExpr.cpp    |   5 +-
 core/sql/optimizer/RelGrby.h             |   6 +-
 core/sql/regress/executor/EXPECTED002.SB | 107 ++++++++++++++++++++++----
 core/sql/regress/executor/TEST002        |  36 +++++++--
 5 files changed, 129 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/0bba8d6d/core/sql/optimizer/BindRelExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/BindRelExpr.cpp b/core/sql/optimizer/BindRelExpr.cpp
index 91efb2d..4a56d4e 100644
--- a/core/sql/optimizer/BindRelExpr.cpp
+++ b/core/sql/optimizer/BindRelExpr.cpp
@@ -4552,9 +4552,8 @@ RelRoot * RelRoot::transformGroupByWithOrdinalPhase2(BindWA *bindWA)
       {
         if( ((PivotGroup*)vid.getItemExpr())->orderBy() ) 
         {
-          //((PivotGroup*)vid.getItemExpr())->getOrderbyItemExpr()->bindNode(bindWA);
           grby->setExtraGrpOrderby(((PivotGroup*)vid.getItemExpr())->getOrderbyItemExpr());
-          grby->getExtraGrpOrderby()->convertToValueIdSet(grby->extraOrderExpr(), bindWA, ITM_ITEM_LIST);
+          grby->getExtraGrpOrderby()->convertToValueIdList(grby->extraOrderExpr(), bindWA, ITM_ITEM_LIST);
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/0bba8d6d/core/sql/optimizer/OptPhysRelExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/OptPhysRelExpr.cpp b/core/sql/optimizer/OptPhysRelExpr.cpp
index de7e5b1..91d67cc 100644
--- a/core/sql/optimizer/OptPhysRelExpr.cpp
+++ b/core/sql/optimizer/OptPhysRelExpr.cpp
@@ -11818,10 +11818,9 @@ void SortGroupBy::addArrangementAndOrderRequirements(
    if( NOT extraOrderExpr().isEmpty())
    {
      ValueIdList groupExprCpy(groupExpr());
-     for (ValueId vid = extraOrderExpr().init(); extraOrderExpr().next(vid);
-       extraOrderExpr().advance(vid))
+     for (CollIndex i=0; i< extraOrderExpr().entries(); i++)
      {
-       groupExprCpy.insert(vid);   
+       groupExprCpy.insert(extraOrderExpr().at(i));   
      }
      rg.addSortKey(groupExprCpy);
    }

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/0bba8d6d/core/sql/optimizer/RelGrby.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelGrby.h b/core/sql/optimizer/RelGrby.h
index 455a365..b493dd6 100644
--- a/core/sql/optimizer/RelGrby.h
+++ b/core/sql/optimizer/RelGrby.h
@@ -154,8 +154,8 @@ public:
   inline void setGroupExpr(ValueIdSet &expr) { groupExpr_ = expr;}
   inline void addGroupExpr(ValueIdSet &expr) { groupExpr_ += expr;}
 
-  inline ValueIdSet & extraOrderExpr() { return extraOrderExpr_; }
-  inline const ValueIdSet & extraOrderExpr() const { return extraOrderExpr_; }
+  inline ValueIdList & extraOrderExpr() { return extraOrderExpr_; }
+  inline const ValueIdList & extraOrderExpr() const { return extraOrderExpr_; }
   
   ValueIdList & rollupGroupExprList() { return rollupGroupExprList_; }
   const ValueIdList & rollupGroupExprList() const { return rollupGroupExprList_; }
@@ -562,7 +562,7 @@ private:
   ValueIdSet  groupExpr_;
   
   ItemExpr  * extraGrpOrderby_;
-  ValueIdSet  extraOrderExpr_;
+  ValueIdList  extraOrderExpr_;
   // --------------------------------------
   // used for processing groupby rollup
   // --------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/0bba8d6d/core/sql/regress/executor/EXPECTED002.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/executor/EXPECTED002.SB b/core/sql/regress/executor/EXPECTED002.SB
index d05c6d4..451eda1 100644
--- a/core/sql/regress/executor/EXPECTED002.SB
+++ b/core/sql/regress/executor/EXPECTED002.SB
@@ -6596,42 +6596,121 @@ A            B            C            E
 >>insert into student values('s3', 90);
 
 --- 1 row(s) inserted.
->>
->>cqd mode_special_4 'on';
+>>insert into student values('s1', 88);
 
---- SQL operation complete.
+--- 1 row(s) inserted.
+>>insert into student values('s1', 60);
+
+--- 1 row(s) inserted.
+>>insert into student values('s1', 100);
+
+--- 1 row(s) inserted.
+>>insert into student values('s1', 50);
+
+--- 1 row(s) inserted.
+>>insert into student values('s1', 101);
+
+--- 1 row(s) inserted.
+>>insert into student values('s1', 40);
+
+--- 1 row(s) inserted.
+>>insert into student values('s3', 40);
+
+--- 1 row(s) inserted.
+>>insert into student values('s3', 40);
+
+--- 1 row(s) inserted.
+>>insert into student values('s3', 100);
+
+--- 1 row(s) inserted.
+>>insert into student values('s2', 88);
+
+--- 1 row(s) inserted.
+>>insert into student values('s2', 188);
+
+--- 1 row(s) inserted.
+>>insert into student values('s2', 18);
+
+--- 1 row(s) inserted.
+>>insert into student values('s2', 58);
+
+--- 1 row(s) inserted.
+>>
 >>SELECT student_name,
-+>   GROUP_CONCAT(test_score)
-+>   FROM student
-+>   GROUP BY student_name;
++>          GROUP_CONCAT(DISTINCT test_score
++>                    ORDER BY test_score SEPARATOR '-')
++>          FROM student
++>          GROUP BY student_name;
 
 STUDENT_NAME  (EXPR)
 ------------  -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 -----------------------------------------
 
-s1            88,79                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
-s2            88                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
-s3            90                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
+s1            40-50-60-79-88-100-101                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
+s2            18-58-88-188                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+s3            40-90-100                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
 
 --- 3 row(s) selected.
 >>
 >>SELECT student_name,
++>          GROUP_CONCAT(test_score
++>                    ORDER BY test_score SEPARATOR '-')
++>          FROM student
++>          GROUP BY student_name;
+
+STUDENT_NAME  (EXPR)
+------------  -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 -----------------------------------------
+
+s1            40-50-60-79-88-88-100-101                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+s2            18-58-88-88-188                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
+s3            40-40-90-100                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+
+--- 3 row(s) selected.
+>>
+>>cqd ATTEMPT_ESP_PARALLELISM 'ON';
+
+--- SQL operation complete.
+>>control query shape exchange(cut);
+
+--- SQL operation complete.
+>>prepare s1 from SELECT student_name,
 +>          GROUP_CONCAT(DISTINCT test_score
 +>                    ORDER BY test_score desc SEPARATOR '-')
 +>          FROM student
 +>          GROUP BY student_name;
 
+--- SQL command prepared.
+>>explain options 'f' s1;
+
+LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD
+---- ---- ---- --------------------  --------  --------------------  ---------
+
+7    .    8    root                                                  2.00E+000
+6    .    7    esp_exchange                    1:2(hash2)            2.00E+000
+5    .    6    sort_groupby                                          2.00E+000
+4    .    5    sort_partial_groupby                                  4.00E+000
+3    .    4    sort                                                  4.00E+000
+2    .    3    esp_exchange                    2(hash2):1            4.00E+000
+1    .    2    hash_partial_groupby                                  4.00E+000
+.    .    1    trafodion_scan                  STUDENT               1.00E+002
+
+--- SQL operation complete.
+>>execute s1;
+
 STUDENT_NAME  (EXPR)
 ------------  -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 -----------------------------------------
 
-s1            88-79                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
-s2            88                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
-s3            90                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
+s2            188-88-58-18                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
+s1            101-100-88-79-60-50-40                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
+s3            100-90-40                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
 
 --- 3 row(s) selected.
->>drop table student;
+>>control query shape cut;
 
 --- SQL operation complete.
->>cqd mode_special_4 reset;
+>>cqd ATTEMPT_ESP_PARALLELISM 'OFF';
+
+--- SQL operation complete.
+>>drop table student;
 
 --- SQL operation complete.
 >>------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/0bba8d6d/core/sql/regress/executor/TEST002
----------------------------------------------------------------------
diff --git a/core/sql/regress/executor/TEST002 b/core/sql/regress/executor/TEST002
index f4c7d5c..bfddf5d 100755
--- a/core/sql/regress/executor/TEST002
+++ b/core/sql/regress/executor/TEST002
@@ -1093,20 +1093,44 @@ insert into student values('s1', 88);
 insert into student values('s1', 79);
 insert into student values('s2', 88);
 insert into student values('s3', 90);
+insert into student values('s1', 88);
+insert into student values('s1', 60);
+insert into student values('s1', 100);
+insert into student values('s1', 50);
+insert into student values('s1', 101);
+insert into student values('s1', 40);
+insert into student values('s3', 40);
+insert into student values('s3', 40);
+insert into student values('s3', 100);
+insert into student values('s2', 88);
+insert into student values('s2', 188);
+insert into student values('s2', 18);
+insert into student values('s2', 58);
 
-cqd mode_special_4 'on';
 SELECT student_name,
-   GROUP_CONCAT(test_score)
-   FROM student
-   GROUP BY student_name;
+          GROUP_CONCAT(DISTINCT test_score
+                    ORDER BY test_score SEPARATOR '-')
+          FROM student
+          GROUP BY student_name;
 
 SELECT student_name,
+          GROUP_CONCAT(test_score
+                    ORDER BY test_score SEPARATOR '-')
+          FROM student
+          GROUP BY student_name;
+
+cqd ATTEMPT_ESP_PARALLELISM 'ON';
+control query shape exchange(cut);
+prepare s1 from SELECT student_name,
           GROUP_CONCAT(DISTINCT test_score
                     ORDER BY test_score desc SEPARATOR '-')
           FROM student
-          GROUP BY student_name;   
+          GROUP BY student_name;
+explain options 'f' s1;
+execute s1;
+control query shape cut;
+cqd ATTEMPT_ESP_PARALLELISM 'OFF';
 drop table student;
-cqd mode_special_4 reset;
 ------------------------------------------------------------------------
 
 obey TEST002(BR0198_MULTI);