Java Code Examples for org.apache.calcite.sql.type.SqlTypeFamily#INTERVAL_YEAR_MONTH
The following examples show how to use
org.apache.calcite.sql.type.SqlTypeFamily#INTERVAL_YEAR_MONTH .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: TypeInferenceUtils.java From Bats with Apache License 2.0 | 6 votes |
/** * Given a {@link SqlTypeName} and nullability, create a RelDataType from the RelDataTypeFactory * * @param typeFactory RelDataTypeFactory used to create the RelDataType * @param sqlTypeName the given SqlTypeName * @param isNullable the nullability of the created RelDataType * @return RelDataType Type of call */ public static RelDataType createCalciteTypeWithNullability(RelDataTypeFactory typeFactory, SqlTypeName sqlTypeName, boolean isNullable) { RelDataType type; if (sqlTypeName.getFamily() == SqlTypeFamily.INTERVAL_DAY_TIME) { type = typeFactory.createSqlIntervalType( new SqlIntervalQualifier( TimeUnit.DAY, TimeUnit.MINUTE, SqlParserPos.ZERO)); } else if (sqlTypeName.getFamily() == SqlTypeFamily.INTERVAL_YEAR_MONTH) { type = typeFactory.createSqlIntervalType( new SqlIntervalQualifier( TimeUnit.YEAR, TimeUnit.MONTH, SqlParserPos.ZERO)); } else if (sqlTypeName == SqlTypeName.VARCHAR) { type = typeFactory.createSqlType(sqlTypeName, Types.MAX_VARCHAR_LENGTH); } else { type = typeFactory.createSqlType(sqlTypeName); } return typeFactory.createTypeWithNullability(type, isNullable); }
Example 2
Source File: View.java From dremio-oss with Apache License 2.0 | 5 votes |
public RelDataType getRowType(RelDataTypeFactory factory) { List<RelDataType> types = Lists.newArrayList(); List<String> names = Lists.newArrayList(); for (FieldType field : fields) { names.add(field.getName()); RelDataType type; if ( SqlTypeFamily.INTERVAL_YEAR_MONTH == field.getType().getFamily() || SqlTypeFamily.INTERVAL_DAY_TIME == field.getType().getFamily() ) { type = factory.createSqlIntervalType( field.getIntervalQualifier() ); } else if (field.getType().equals(SqlTypeName.ARRAY) || field.getType().equals(SqlTypeName.MAP)) { type = factory.createSqlType(SqlTypeName.ANY); } else if (field.getPrecision() == null && field.getScale() == null) { type = factory.createSqlType(field.getType()); } else if (field.getPrecision() != null && field.getScale() == null) { type = factory.createSqlType(field.getType(), field.getPrecision()); } else { type = factory.createSqlType(field.getType(), field.getPrecision(), field.getScale()); } if (field.getIsNullable()) { types.add(factory.createTypeWithNullability(type, true)); } else { types.add(type); } } return factory.createStructType(types, names); }
Example 3
Source File: DruidExpressions.java From calcite with Apache License 2.0 | 4 votes |
/** * Translates Calcite rexNode to Druid Expression when possible * @param rexNode rexNode to convert to a Druid Expression * @param inputRowType input row type of the rexNode to translate * @param druidRel Druid query * * @return Druid Expression or null when can not convert the RexNode */ @Nullable public static String toDruidExpression( final RexNode rexNode, final RelDataType inputRowType, final DruidQuery druidRel) { SqlKind kind = rexNode.getKind(); SqlTypeName sqlTypeName = rexNode.getType().getSqlTypeName(); if (kind == SqlKind.INPUT_REF) { final RexInputRef ref = (RexInputRef) rexNode; final String columnName = inputRowType.getFieldNames().get(ref.getIndex()); if (columnName == null) { return null; } if (druidRel.getDruidTable().timestampFieldName.equals(columnName)) { return DruidExpressions.fromColumn(DruidTable.DEFAULT_TIMESTAMP_COLUMN); } return DruidExpressions.fromColumn(columnName); } if (rexNode instanceof RexCall) { final SqlOperator operator = ((RexCall) rexNode).getOperator(); final DruidSqlOperatorConverter conversion = druidRel.getOperatorConversionMap() .get(operator); if (conversion == null) { //unknown operator can not translate return null; } else { return conversion.toDruidExpression(rexNode, inputRowType, druidRel); } } if (kind == SqlKind.LITERAL) { // Translate literal. if (RexLiteral.isNullLiteral(rexNode)) { //case the filter/project might yield to unknown let Calcite deal with this for now return null; } else if (SqlTypeName.NUMERIC_TYPES.contains(sqlTypeName)) { return DruidExpressions.numberLiteral((Number) RexLiteral .value(rexNode)); } else if (SqlTypeFamily.INTERVAL_DAY_TIME == sqlTypeName.getFamily()) { // Calcite represents DAY-TIME intervals in milliseconds. final long milliseconds = ((Number) RexLiteral.value(rexNode)).longValue(); return DruidExpressions.numberLiteral(milliseconds); } else if (SqlTypeFamily.INTERVAL_YEAR_MONTH == sqlTypeName.getFamily()) { // Calcite represents YEAR-MONTH intervals in months. final long months = ((Number) RexLiteral.value(rexNode)).longValue(); return DruidExpressions.numberLiteral(months); } else if (SqlTypeName.STRING_TYPES.contains(sqlTypeName)) { return DruidExpressions.stringLiteral(RexLiteral.stringValue(rexNode)); } else if (SqlTypeName.DATE == sqlTypeName || SqlTypeName.TIMESTAMP == sqlTypeName || SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE == sqlTypeName) { return DruidExpressions.numberLiteral( DruidDateTimeUtils.literalValue(rexNode)); } else if (SqlTypeName.BOOLEAN == sqlTypeName) { return DruidExpressions.numberLiteral(RexLiteral.booleanValue(rexNode) ? 1 : 0); } } // Not Literal/InputRef/RexCall or unknown type? return null; }
Example 4
Source File: View.java From Bats with Apache License 2.0 | 2 votes |
/** * Checks whether this field type is interval * by comparing current type family with known * INTERVAL_YEAR_MONTH and INTERVAL_DAY_TIME families * * @return whether current type relates to any known * interval families */ @JsonIgnore boolean isInterval() { SqlTypeFamily family = type.getFamily(); return family == SqlTypeFamily.INTERVAL_YEAR_MONTH || family == SqlTypeFamily.INTERVAL_DAY_TIME; }