You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ni...@apache.org on 2020/02/07 14:26:01 UTC
[kylin] 06/44: KYLIN-4166 Case when return null when SQL no GROUP BY
This is an automated email from the ASF dual-hosted git repository.
nic pushed a commit to branch 3.0.x
in repository https://gitbox.apache.org/repos/asf/kylin.git
commit a233418d45bc459e865ed89f69177ac27e183cf9
Author: yaqian.zhang <59...@qq.com>
AuthorDate: Mon Oct 21 11:36:09 2019 +0800
KYLIN-4166 Case when return null when SQL no GROUP BY
---
.../apache/kylin/query/relnode/OLAPProjectRel.java | 32 ++++++++++++----------
1 file changed, 17 insertions(+), 15 deletions(-)
diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPProjectRel.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPProjectRel.java
index 59d2c38..8be7249 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPProjectRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPProjectRel.java
@@ -306,21 +306,23 @@ public class OLAPProjectRel extends Project implements OLAPRel {
}
// replace projects with dynamic fields
- Map<TblColRef, RelDataType> dynFields = this.context.dynamicFields;
- for (TblColRef dynFieldCol : dynFields.keySet()) {
- String replaceFieldName = dynFieldCol.getName();
- int rowIndex = this.columnRowType.getIndexByName(replaceFieldName);
- if (rowIndex >= 0) {
- int inputIndex = inputColumnRowType.getIndexByName(replaceFieldName);
- if (inputIndex >= 0) {
- // field to be replaced
- RelDataType fieldType = dynFields.get(dynFieldCol);
- RelDataTypeField newField = new RelDataTypeFieldImpl(replaceFieldName, rowIndex, fieldType);
- // project to be replaced
- RelDataTypeField inputField = getInput().getRowType().getFieldList().get(inputIndex);
- RexInputRef newFieldRef = new RexInputRef(inputField.getIndex(), inputField.getType());
-
- replaceFieldMap.put(rowIndex, new Pair<RelDataTypeField, RexNode>(newField, newFieldRef));
+ if (this.context.afterAggregate) {
+ Map<TblColRef, RelDataType> dynFields = this.context.dynamicFields;
+ for (TblColRef dynFieldCol : dynFields.keySet()) {
+ String replaceFieldName = dynFieldCol.getName();
+ int rowIndex = this.columnRowType.getIndexByName(replaceFieldName);
+ if (rowIndex >= 0) {
+ int inputIndex = inputColumnRowType.getIndexByName(replaceFieldName);
+ if (inputIndex >= 0) {
+ // field to be replaced
+ RelDataType fieldType = dynFields.get(dynFieldCol);
+ RelDataTypeField newField = new RelDataTypeFieldImpl(replaceFieldName, rowIndex, fieldType);
+ // project to be replaced
+ RelDataTypeField inputField = getInput().getRowType().getFieldList().get(inputIndex);
+ RexInputRef newFieldRef = new RexInputRef(inputField.getIndex(), inputField.getType());
+
+ replaceFieldMap.put(rowIndex, new Pair<RelDataTypeField, RexNode>(newField, newFieldRef));
+ }
}
}
}