Repository: kylin Updated Branches: refs/heads/KYLIN-1971 40c80a9bc -> 2a123891e
tmp Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/2a123891 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/2a123891 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/2a123891 Branch: refs/heads/KYLIN-1971 Commit: 2a123891ef66c8be6a29a9b92391138f7e04e746 Parents: 40c80a9 Author: Yang Li <liy...@apache.org> Authored: Sat Oct 22 20:38:23 2016 +0800 Committer: Yang Li <liy...@apache.org> Committed: Sat Oct 22 20:38:23 2016 +0800 ---------------------------------------------------------------------- .../metadata/filter/ColumnTupleFilter.java | 85 ++++++++++++++------ .../apache/kylin/metadata/model/TblColRef.java | 10 +-- 2 files changed, 66 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/2a123891/core-metadata/src/main/java/org/apache/kylin/metadata/filter/ColumnTupleFilter.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/ColumnTupleFilter.java b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/ColumnTupleFilter.java index 8c5e989..c8a8f07 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/ColumnTupleFilter.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/ColumnTupleFilter.java @@ -24,9 +24,13 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.util.BytesUtil; +import org.apache.kylin.metadata.MetadataManager; import org.apache.kylin.metadata.model.ColumnDesc; +import org.apache.kylin.metadata.model.DataModelDesc; import org.apache.kylin.metadata.model.TableDesc; +import org.apache.kylin.metadata.model.TableRef; import org.apache.kylin.metadata.model.TblColRef; import org.apache.kylin.metadata.tuple.IEvaluatableTuple; @@ -37,6 +41,8 @@ import org.apache.kylin.metadata.tuple.IEvaluatableTuple; */ public class ColumnTupleFilter extends TupleFilter { + private static final String _QUALIFIED_ = "_QUALIFIED_"; + private TblColRef columnRef; private Object tupleValue; private List<Object> values; @@ -85,36 +91,67 @@ public class ColumnTupleFilter extends TupleFilter { @Override public void serialize(IFilterCodeSystem<?> cs, ByteBuffer buffer) { - String table = columnRef.getTable(); - BytesUtil.writeUTFString(table, buffer); - - String columnId = columnRef.getColumnDesc().getId(); - BytesUtil.writeUTFString(columnId, buffer); - - String columnName = columnRef.getName(); - BytesUtil.writeUTFString(columnName, buffer); - - String dataType = columnRef.getDatatype(); - BytesUtil.writeUTFString(dataType, buffer); + TableRef tableRef = columnRef.getTableRef(); + + if (tableRef == null) { + // un-qualified column + String table = columnRef.getTable(); + BytesUtil.writeUTFString(table, buffer); + + String columnId = columnRef.getColumnDesc().getId(); + BytesUtil.writeUTFString(columnId, buffer); + + String columnName = columnRef.getName(); + BytesUtil.writeUTFString(columnName, buffer); + + String dataType = columnRef.getDatatype(); + BytesUtil.writeUTFString(dataType, buffer); + } else { + // qualified column (from model) + BytesUtil.writeUTFString(_QUALIFIED_, buffer); + + String model = tableRef.getModel().getName(); + BytesUtil.writeUTFString(model, buffer); + + String alias = tableRef.getAlias(); + BytesUtil.writeUTFString(alias, buffer); + + String col = columnRef.getName(); + BytesUtil.writeUTFString(col, buffer); + } } @Override public void deserialize(IFilterCodeSystem<?> cs, ByteBuffer buffer) { - TableDesc table = null; - ColumnDesc column = new ColumnDesc(); - String tableName = BytesUtil.readUTFString(buffer); - if (tableName != null) { - table = new TableDesc(); - table.setName(tableName); + + if (_QUALIFIED_.equals(tableName)) { + // qualified column (from model) + String model = BytesUtil.readUTFString(buffer); + String alias = BytesUtil.readUTFString(buffer); + String col = BytesUtil.readUTFString(buffer); + + KylinConfig config = KylinConfig.getInstanceFromEnv(); + DataModelDesc modelDesc = MetadataManager.getInstance(config).getDataModelDesc(model); + this.columnRef = modelDesc.findColumn(alias, col); + + } else { + // un-qualified column + TableDesc tableDesc = null; + + if (tableName != null) { + tableDesc = new TableDesc(); + tableDesc.setName(tableName); + } + + ColumnDesc column = new ColumnDesc(); + column.setId(BytesUtil.readUTFString(buffer)); + column.setName(BytesUtil.readUTFString(buffer)); + column.setDatatype(BytesUtil.readUTFString(buffer)); + column.init(tableDesc); + + this.columnRef = column.getRef(); } - - column.setId(BytesUtil.readUTFString(buffer)); - column.setName(BytesUtil.readUTFString(buffer)); - column.setDatatype(BytesUtil.readUTFString(buffer)); - column.init(table); - - this.columnRef = column.getRef(); } } http://git-wip-us.apache.org/repos/asf/kylin/blob/2a123891/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java index 7209d5e..5f0fe94 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java @@ -85,19 +85,19 @@ public class TblColRef implements Serializable { this.table = table; this.column = column; } - + public ColumnDesc getColumnDesc() { return column; } - public void setColumn(ColumnDesc column) { - this.column = column; - } - public String getName() { return column.getName(); } + public TableRef getTableRef() { + return table; + } + public String getTable() { if (column.getTable() == null) { return null;