Repository: phoenix Updated Branches: refs/heads/calcite 17888a272 -> 1193e5afe
Code refine Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/1193e5af Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/1193e5af Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/1193e5af Branch: refs/heads/calcite Commit: 1193e5afe6dae631d107c605616e4f78df1600bf Parents: 17888a2 Author: maryannxue <maryann....@gmail.com> Authored: Mon Oct 3 12:01:56 2016 -0700 Committer: maryannxue <maryann....@gmail.com> Committed: Mon Oct 3 12:01:56 2016 -0700 ---------------------------------------------------------------------- .../apache/phoenix/calcite/CalciteUtils.java | 31 ++++++++++++++++++-- .../apache/phoenix/calcite/PhoenixTable.java | 25 ++-------------- 2 files changed, 32 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/1193e5af/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java index df348c9..ae143f7 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/CalciteUtils.java @@ -21,6 +21,7 @@ import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.core.JoinRelType; import org.apache.calcite.rel.core.Project; import org.apache.calcite.rel.type.RelDataType; +import org.apache.calcite.rel.type.RelDataTypeFactory; import org.apache.calcite.rex.RexCall; import org.apache.calcite.rex.RexCorrelVariable; import org.apache.calcite.rex.RexDynamicParam; @@ -144,7 +145,7 @@ public class CalciteUtils { } @SuppressWarnings("rawtypes") - public static PDataType relDataTypeToPDataType(RelDataType relDataType) { + public static PDataType relDataTypeToPDataType(final RelDataType relDataType) { SqlTypeName sqlTypeName = relDataType.getSqlTypeName(); final boolean isArrayType = sqlTypeName == SqlTypeName.ARRAY; if (isArrayType) { @@ -161,7 +162,33 @@ public class CalciteUtils { } return PDataType.fromTypeId(ordinal + (isArrayType ? PDataType.ARRAY_TYPE_BASE : 0)); } - + + @SuppressWarnings("rawtypes") + public static RelDataType pDataTypeToRelDataType( + final RelDataTypeFactory typeFactory, final PDataType pDataType, + final Integer maxLength, final Integer scale, final Integer arraySize) { + final boolean isArrayType = pDataType.isArrayType(); + final PDataType baseType = isArrayType ? + PDataType.fromTypeId(pDataType.getSqlType() - PDataType.ARRAY_TYPE_BASE) + : pDataType; + final int sqlTypeId = baseType.getResultSetSqlType(); + final PDataType normalizedBaseType = PDataType.fromTypeId(sqlTypeId); + final SqlTypeName sqlTypeName = SqlTypeName.valueOf(normalizedBaseType.getSqlTypeName()); + RelDataType type; + if (maxLength != null && scale != null) { + type = typeFactory.createSqlType(sqlTypeName, maxLength, scale); + } else if (maxLength != null) { + type = typeFactory.createSqlType(sqlTypeName, maxLength); + } else { + type = typeFactory.createSqlType(sqlTypeName); + } + if (isArrayType) { + type = typeFactory.createArrayType(type, arraySize == null ? -1 : arraySize); + } + + return type; + } + public static JoinType convertJoinType(JoinRelType type) { JoinType ret = null; switch (type) { http://git-wip-us.apache.org/repos/asf/phoenix/blob/1193e5af/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java index 905441f..fb9f9c0 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java @@ -124,34 +124,15 @@ public class PhoenixTable extends AbstractTable implements TranslatableTable { return tableMapping.getMappedColumns(); } - @SuppressWarnings("rawtypes") @Override public RelDataType getRowType(RelDataTypeFactory typeFactory) { final RelDataTypeFactory.FieldInfoBuilder builder = typeFactory.builder(); final List<PColumn> columns = tableMapping.getMappedColumns(); for (int i = 0; i < columns.size(); i++) { PColumn pColumn = columns.get(i); - final PDataType baseType = - pColumn.getDataType().isArrayType() ? - PDataType.fromTypeId(pColumn.getDataType().getSqlType() - PDataType.ARRAY_TYPE_BASE) - : pColumn.getDataType(); - final int sqlTypeId = baseType.getResultSetSqlType(); - final PDataType pDataType = PDataType.fromTypeId(sqlTypeId); - final SqlTypeName sqlTypeName1 = SqlTypeName.valueOf(pDataType.getSqlTypeName()); - final Integer maxLength = pColumn.getMaxLength(); - final Integer scale = pColumn.getScale(); - RelDataType type; - if (maxLength != null && scale != null) { - type = typeFactory.createSqlType(sqlTypeName1, maxLength, scale); - } else if (maxLength != null) { - type = typeFactory.createSqlType(sqlTypeName1, maxLength); - } else { - type = typeFactory.createSqlType(sqlTypeName1); - } - if (pColumn.getDataType().isArrayType()) { - final Integer arraySize = pColumn.getArraySize(); - type = typeFactory.createArrayType(type, arraySize == null ? -1 : arraySize); - } + RelDataType type = CalciteUtils.pDataTypeToRelDataType( + typeFactory, pColumn.getDataType(), pColumn.getMaxLength(), + pColumn.getScale(), pColumn.getArraySize()); builder.add(pColumn.getName().getString(), type); builder.nullable(pColumn.isNullable()); }