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) {
