public List<RelDataType> getParameterTypes(RelDataTypeFactory typeFactory) { return ImmutableList.of( typeFactory.createTypeWithNullability( typeFactory.createSqlType(SqlTypeName.ANY), true)); }
public RelDataType getReturnType(RelDataTypeFactory typeFactory) { return typeFactory.createTypeWithNullability( typeFactory.createSqlType(SqlTypeName.ANY), true); }
@Override public RelDataType inferReturnType(SqlOperatorBinding opBinding) { RelDataTypeFactory factory = opBinding.getTypeFactory(); return factory.createTypeWithNullability(factory.createSqlType(SqlTypeName.ANY), true); } }
private SqlNode maybeCast(SqlNode node, RelDataType currentType, RelDataType desiredType) { return currentType.equals(desiredType) || (currentType.isNullable() != desiredType.isNullable() && typeFactory.createTypeWithNullability(currentType, desiredType.isNullable()).equals(desiredType)) ? node : SqlStdOperatorTable.CAST.createCall(SqlParserPos.ZERO, node, SqlTypeUtil.convertTypeToSpec(desiredType)); }
@Override public RelDataType deriveType(SqlValidator validator, SqlValidatorScope scope, SqlCall call) { RelDataTypeFactory factory = validator.getTypeFactory(); return factory.createTypeWithNullability(factory.createSqlType(SqlTypeName.ANY), true); }
maybeCast(selectItem1, type1, type2)), new SqlIdentifier(name, SqlParserPos.ZERO)); type = typeFactory.createTypeWithNullability(type2, nullable);
private void convertToRelDataType(RelDataTypeFactory typeFactory, List<String> names, List<RelDataType> types) { for (ColumnDTO column : schema.getColumns()) { names.add(column.getColumnName()); RelDataType type = getSqlTypeFromOpenTSDBType(typeFactory, column.getColumnType()); type = typeFactory.createTypeWithNullability(type, column.isNullable()); types.add(type); } }
/** * Performs conversion from Hive field to nullable RelDataType * * @param field - representation of data type in Hive Metastore * @return appropriate nullable RelDataType for using with Calcite * @throws RuntimeException for unsupported data types, check * {@link HiveToRelDataTypeConverter#UNSUPPORTED_HIVE_DATA_TYPE_ERROR_MSG} * for details about supported hive types */ public RelDataType convertToNullableRelDataType(FieldSchema field) { TypeInfo fieldTypeInfo = TypeInfoUtils.getTypeInfoFromTypeString(field.getType()); RelDataType relDataType = convertToRelDataType(fieldTypeInfo); return typeFactory.createTypeWithNullability(relDataType, true); }
@Override public AggregateCall other(RelDataTypeFactory typeFactory, AggregateCall e) { return AggregateCall.create( new HiveSqlCountAggFunction(isDistinct, returnTypeInference, operandTypeInference, operandTypeChecker), false, ImmutableIntList.of(), -1, typeFactory.createTypeWithNullability(typeFactory.createSqlType(SqlTypeName.BIGINT), true), "count"); }
@Override public RelDataType deriveSumType(RelDataTypeFactory typeFactory, RelDataType argumentType) { if (argumentType instanceof BasicSqlType) { switch (argumentType.getSqlTypeName()) { case INTEGER: case SMALLINT: case TINYINT: return typeFactory.createTypeWithNullability(typeFactory.createSqlType(SqlTypeName.BIGINT), argumentType.isNullable()); case DECIMAL: return typeFactory.createTypeWithNullability( typeFactory.createSqlType(SqlTypeName.DECIMAL, 19, argumentType.getScale()), argumentType.isNullable()); default: break; } } return argumentType; }
@Override public AggregateCall other(RelDataTypeFactory typeFactory, AggregateCall e) { return AggregateCall.create( new HiveSqlCountAggFunction(isDistinct, returnTypeInference, operandTypeInference, operandTypeChecker), false, ImmutableIntList.of(), -1, typeFactory.createTypeWithNullability(typeFactory.createSqlType(SqlTypeName.BIGINT), true), "count"); } }
@Override public AggregateCall other(RelDataTypeFactory typeFactory, AggregateCall e) { RelDataType countRetType = typeFactory.createTypeWithNullability(typeFactory.createSqlType(SqlTypeName.BIGINT), true); return AggregateCall.create( new HiveSqlCountAggFunction(isDistinct, ReturnTypes.explicit(countRetType), operandTypeInference, operandTypeChecker), false, ImmutableIntList.of(), -1, countRetType, "count"); }
private RexNode makeCast(SqlTypeName typeName, final RexNode child) { RelDataType sqlType = cluster.getTypeFactory().createSqlType(typeName); RelDataType nullableType = cluster.getTypeFactory().createTypeWithNullability(sqlType, true); return cluster.getRexBuilder().makeCast(nullableType, child); }
@Override public RelDataType getRowType(RelDataTypeFactory typeFactory) { List<String> names = Lists.newArrayList(); List<RelDataType> types = Lists.newArrayList(); for (ColumnSchema column : schema.getColumns()) { names.add(column.getName()); RelDataType type = getSqlTypeFromKuduType(typeFactory, column.getType()); type = typeFactory.createTypeWithNullability(type, column.isNullable()); types.add(type); } return typeFactory.createStructType(types, names); }
nodeType = typeFactory.createTypeWithNullability(nodeType, true); fieldList.add(Pair.of(alias, nodeType));
@Override public AggregateCall other(RelDataTypeFactory typeFactory, AggregateCall e) { RelDataType countRetType = typeFactory.createTypeWithNullability(typeFactory.createSqlType(SqlTypeName.BIGINT), true); return AggregateCall.create( new HiveSqlCountAggFunction(isDistinct, ReturnTypes.explicit(countRetType), operandTypeInference, operandTypeChecker), false, ImmutableIntList.of(), -1, countRetType, "count"); }
/** * Like RelDataTypeFactory.createSqlTypeWithNullability, but creates types that align best with how Druid * represents them. */ public static RelDataType createSqlTypeWithNullability( final RelDataTypeFactory typeFactory, final SqlTypeName typeName, final boolean nullable ) { final RelDataType dataType; switch (typeName) { case TIMESTAMP: // Our timestamps are down to the millisecond (precision = 3). dataType = typeFactory.createSqlType(typeName, 3); break; case CHAR: case VARCHAR: dataType = typeFactory.createTypeWithCharsetAndCollation( typeFactory.createSqlType(typeName), Calcites.defaultCharset(), SqlCollation.IMPLICIT ); break; default: dataType = typeFactory.createSqlType(typeName); } return typeFactory.createTypeWithNullability(dataType, nullable); }
RelNode newProject = RelOptUtil.createProject(aggregate, ImmutableList.of(rexBuilder.makeCast( cluster.getTypeFactory().createTypeWithNullability(projExprs.get(0).getType(), true), projExprs.get(0))), null, false, relBuilder);
@Override public RexNode visitInputRef(RexInputRef inputRef) { if (currentRel instanceof LogicalCorrelate) { // if this rel references corVar // and now it needs to be rewritten // it must have been pulled above the Correlator // replace the input ref to account for the LHS of the // Correlator final int leftInputFieldCount = ((LogicalCorrelate) currentRel).getLeft().getRowType() .getFieldCount(); RelDataType newType = inputRef.getType(); if (projectPulledAboveLeftCorrelator) { newType = typeFactory.createTypeWithNullability(newType, true); } int pos = inputRef.getIndex(); RexInputRef newInputRef = new RexInputRef(leftInputFieldCount + pos, newType); if ((isCount != null) && isCount.contains(pos)) { return createCaseExpression( newInputRef, rexBuilder.makeExactLiteral(BigDecimal.ZERO), newInputRef); } else { return newInputRef; } } return inputRef; }
@Override public RexNode visitInputRef(RexInputRef inputRef) { if (currentRel instanceof LogicalCorrelate) { // if this rel references corVar // and now it needs to be rewritten // it must have been pulled above the Correlator // replace the input ref to account for the LHS of the // Correlator final int leftInputFieldCount = ((LogicalCorrelate) currentRel).getLeft().getRowType() .getFieldCount(); RelDataType newType = inputRef.getType(); if (projectPulledAboveLeftCorrelator) { newType = typeFactory.createTypeWithNullability(newType, true); } int pos = inputRef.getIndex(); RexInputRef newInputRef = new RexInputRef(leftInputFieldCount + pos, newType); if ((isCount != null) && isCount.contains(pos)) { return createCaseExpression( newInputRef, rexBuilder.makeExactLiteral(BigDecimal.ZERO), newInputRef); } else { return newInputRef; } } return inputRef; }