TAJO-833: NPE occurs when using the column as a alias name in the multiple 
DISTINCT. (Hyoungjun Kim via hyunsik)

Closes #11


Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/5f9330b1
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/5f9330b1
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/5f9330b1

Branch: refs/heads/master
Commit: 5f9330b101d20760dffd96ec5191134352b5a6aa
Parents: d0528d1 5dda14a
Author: Hyunsik Choi <[email protected]>
Authored: Wed May 21 11:13:40 2014 +0900
Committer: Hyunsik Choi <[email protected]>
Committed: Wed May 21 11:14:16 2014 +0900

----------------------------------------------------------------------
 CHANGES                                         |  3 +
 .../org/apache/tajo/engine/eval/FieldEval.java  |  7 ++-
 .../global/builder/DistinctGroupbyBuilder.java  | 22 +++++--
 .../planner/physical/AggregationExec.java       |  6 +-
 .../DistinctGroupbyHashAggregationExec.java     | 62 ++++++++++++++++----
 .../DistinctGroupbySortAggregationExec.java     |  7 ---
 .../planner/physical/SortAggregateExec.java     |  1 -
 .../tajo/engine/query/TestGroupByQuery.java     |  4 ++
 .../testDistinctAggregation_case8.sql           | 10 ++++
 .../testDistinctAggregation_case8.result        |  6 ++
 .../apache/tajo/storage/TupleComparator.java    | 20 ++++++-
 11 files changed, 121 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/5f9330b1/CHANGES
----------------------------------------------------------------------
diff --cc CHANGES
index 97d6c9c,41ac271..3d1ec45
--- a/CHANGES
+++ b/CHANGES
@@@ -40,9 -40,6 +40,12 @@@ Release 0.9.0 - unrelease
      (Hyoungjun Kim via hyunsik)
  
    BUG FIXES
++ 
++    TAJO-833: NPE occurs when using the column as a alias name in the 
multiple 
++    DISTINCT. (Hyoungjun Kim via hyunsik)
 +
 +    TAJO-821: IllegalStateException occurs when a NettyClientBase object is 
created 
 +    within single thread. (hyoungjunkim via jinho)
  
      TAJO-816: NULL delimiter doesn't apply with HCatalogStore. (jaehwa)
  

http://git-wip-us.apache.org/repos/asf/tajo/blob/5f9330b1/tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
----------------------------------------------------------------------
diff --cc tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
index ea2b031,6799c04..20af854
--- a/tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
@@@ -42,7 -42,11 +42,12 @@@ public class FieldEval extends EvalNod
        @Override
        public Datum eval(Schema schema, Tuple tuple) {
          if (fieldId == -1) {
-           fieldId = schema.getColumnId(column.getQualifiedName());
++      // TODO - column namespace should be improved to simplify name handling 
and resolving.
+       if (column.hasQualifier()) {
+         fieldId = schema.getColumnId(column.getQualifiedName());
+       } else {
+         fieldId = schema.getColumnIdByName(column.getSimpleName());
+       }
        if (fieldId == -1) {
          throw new IllegalStateException("No Such Column Reference: " + column 
+ ", schema: " + schema);
        }

http://git-wip-us.apache.org/repos/asf/tajo/blob/5f9330b1/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java
----------------------------------------------------------------------
diff --cc 
tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java
index 6458f47,33cc242..8daad0b
--- 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/DistinctGroupbyHashAggregationExec.java
@@@ -152,6 -159,6 +159,34 @@@ public class DistinctGroupbyHashAggrega
        return null;
      }
  
++
++    /*
++    Tuple materialization example
++    =============================
++
++    Output Tuple Index: 0(l_orderkey), 1(l_partkey), 
2(default.lineitem.l_suppkey), 5(default.lineitem.
++    l_partkey), 8(sum)
++
++              select
++                  lineitem.l_orderkey as l_orderkey,
++                  lineitem.l_partkey as l_partkey,
++                  count(distinct lineitem.l_partkey) as cnt1,
++                  count(distinct lineitem.l_suppkey) as cnt2,
++                  sum(lineitem.l_quantity) as sum1
++              from
++                  lineitem
++              group by
++                  lineitem.l_orderkey, lineitem.l_partkey
++
++    The above case will result in the following materialization
++    ------------------------------------------------------------
++
++    l_orderkey  l_partkey  default.lineitem.l_suppkey  l_orderkey  l_partkey  
default.lineitem.l_partkey  l_orderkey  l_partkey  sum
++        1            1              7311                   1            1     
           1                    1           1      53.0
++        1            1              7706
++
++    */
++
      currentAggregatedTuples = new ArrayList<Tuple>();
      int listIndex = 0;
      while (true) {

Reply via email to