/*********************** Convert Calcite Types To Hive Types ***********************/ public static HiveToken hiveToken(RelDataType calciteType) { HiveToken ht = null; switch (calciteType.getSqlTypeName()) { case CHAR: { ht = new HiveToken(HiveParser.TOK_CHAR, "TOK_CHAR", String.valueOf(calciteType.getPrecision())); } break; case VARCHAR: { if (calciteType.getPrecision() == Integer.MAX_VALUE) ht = new HiveToken(HiveParser.TOK_STRING, "TOK_STRING", String.valueOf(calciteType .getPrecision())); else ht = new HiveToken(HiveParser.TOK_VARCHAR, "TOK_VARCHAR", String.valueOf(calciteType .getPrecision())); } break; case DECIMAL: { ht = new HiveToken(HiveParser.TOK_DECIMAL, "TOK_DECIMAL", String.valueOf(calciteType .getPrecision()), String.valueOf(calciteType.getScale())); } break; default: ht = calciteToHiveTypeNameMap.get(calciteType.getSqlTypeName().getName()); } return ht; } }
ht = calciteToHiveTypeNameMap.get(calciteType.getSqlTypeName().getName());
columnName, null, null, null, basicSqlType.getPrecision(), basicSqlType.getScale() < 0 ? 0 : basicSqlType.getScale(), basicSqlType.getSqlTypeName().getJdbcOrdinal(), basicSqlType.getSqlTypeName().getName(), true, false, false));
final ColumnMetaData.ScalarType columnType = ColumnMetaData.scalar( field.getType().getSqlTypeName().getJdbcOrdinal(), field.getType().getSqlTypeName().getName(), rep );
public static boolean isLiteralNull(RexLiteral literal) { return literal.getTypeName().getName().equals("NULL"); } }
public static boolean isLiteralNull(RexLiteral literal) { return literal.getTypeName().getName().equals("NULL"); } }
@Override public StateHolder visitLiteral(RexLiteral literal) { if(literal.getTypeName().getName().equals("NULL")){ return new StateHolder(Type.OTHER, literal); } return new StateHolder(Type.LITERAL, literal); }
/** Returns the type name in string form. Does not include precision, scale * or whether nulls are allowed. Example: "DECIMAL" not "DECIMAL(7, 2)"; * "INTEGER" not "JavaType(int)". */ private static String getTypeName(RelDataType type) { final SqlTypeName sqlTypeName = type.getSqlTypeName(); switch (sqlTypeName) { case ARRAY: case MULTISET: case MAP: case ROW: return type.toString(); // e.g. "INTEGER ARRAY" case INTERVAL_YEAR_MONTH: return "INTERVAL_YEAR_TO_MONTH"; case INTERVAL_DAY_HOUR: return "INTERVAL_DAY_TO_HOUR"; case INTERVAL_DAY_MINUTE: return "INTERVAL_DAY_TO_MINUTE"; case INTERVAL_DAY_SECOND: return "INTERVAL_DAY_TO_SECOND"; case INTERVAL_HOUR_MINUTE: return "INTERVAL_HOUR_TO_MINUTE"; case INTERVAL_HOUR_SECOND: return "INTERVAL_HOUR_TO_SECOND"; case INTERVAL_MINUTE_SECOND: return "INTERVAL_MINUTE_TO_SECOND"; default: return sqlTypeName.getName(); // e.g. "DECIMAL", "INTERVAL_YEAR_MONTH" } }
/** Returns the type name in string form. Does not include precision, scale * or whether nulls are allowed. Example: "DECIMAL" not "DECIMAL(7, 2)"; * "INTEGER" not "JavaType(int)". */ private static String getTypeName(RelDataType type) { final SqlTypeName sqlTypeName = type.getSqlTypeName(); switch (sqlTypeName) { case ARRAY: case MULTISET: case MAP: case ROW: return type.toString(); // e.g. "INTEGER ARRAY" case INTERVAL_YEAR_MONTH: return "INTERVAL_YEAR_TO_MONTH"; case INTERVAL_DAY_HOUR: return "INTERVAL_DAY_TO_HOUR"; case INTERVAL_DAY_MINUTE: return "INTERVAL_DAY_TO_MINUTE"; case INTERVAL_DAY_SECOND: return "INTERVAL_DAY_TO_SECOND"; case INTERVAL_HOUR_MINUTE: return "INTERVAL_HOUR_TO_MINUTE"; case INTERVAL_HOUR_SECOND: return "INTERVAL_HOUR_TO_SECOND"; case INTERVAL_MINUTE_SECOND: return "INTERVAL_MINUTE_TO_SECOND"; default: return sqlTypeName.getName(); // e.g. "DECIMAL", "INTERVAL_YEAR_MONTH" } }
/** Returns the type name in string form. Does not include precision, scale * or whether nulls are allowed. Example: "DECIMAL" not "DECIMAL(7, 2)"; * "INTEGER" not "JavaType(int)". */ private static String getTypeName(RelDataType type) { final SqlTypeName sqlTypeName = type.getSqlTypeName(); switch (sqlTypeName) { case ARRAY: case MULTISET: case MAP: case ROW: return type.toString(); // e.g. "INTEGER ARRAY" case INTERVAL_YEAR_MONTH: return "INTERVAL_YEAR_TO_MONTH"; case INTERVAL_DAY_HOUR: return "INTERVAL_DAY_TO_HOUR"; case INTERVAL_DAY_MINUTE: return "INTERVAL_DAY_TO_MINUTE"; case INTERVAL_DAY_SECOND: return "INTERVAL_DAY_TO_SECOND"; case INTERVAL_HOUR_MINUTE: return "INTERVAL_HOUR_TO_MINUTE"; case INTERVAL_HOUR_SECOND: return "INTERVAL_HOUR_TO_SECOND"; case INTERVAL_MINUTE_SECOND: return "INTERVAL_MINUTE_TO_SECOND"; default: return sqlTypeName.getName(); // e.g. "DECIMAL", "INTERVAL_YEAR_MONTH" } }
private static String getTypeName(RelDataType type) { SqlTypeName sqlTypeName = type.getSqlTypeName(); if (type instanceof RelDataTypeFactoryImpl.JavaType) { // We'd rather print "INTEGER" than "JavaType(int)". return sqlTypeName.getName(); } switch (sqlTypeName) { case INTERVAL_YEAR_MONTH: // e.g. "INTERVAL_MONTH" or "INTERVAL_YEAR_MONTH" return "INTERVAL_" + type.getIntervalQualifier().toString().replace(' ', '_'); default: return type.toString(); // e.g. "VARCHAR(10)", "INTEGER ARRAY" } }
/*********************** Convert Calcite Types To Hive Types ***********************/ public static HiveToken hiveToken(RelDataType calciteType) { HiveToken ht = null; switch (calciteType.getSqlTypeName()) { case CHAR: { ht = new HiveToken(HiveParser.TOK_CHAR, "TOK_CHAR", String.valueOf(calciteType.getPrecision())); } break; case VARCHAR: { if (calciteType.getPrecision() == Integer.MAX_VALUE) ht = new HiveToken(HiveParser.TOK_STRING, "TOK_STRING", String.valueOf(calciteType .getPrecision())); else ht = new HiveToken(HiveParser.TOK_VARCHAR, "TOK_VARCHAR", String.valueOf(calciteType .getPrecision())); } break; case DECIMAL: { ht = new HiveToken(HiveParser.TOK_DECIMAL, "TOK_DECIMAL", String.valueOf(calciteType .getPrecision()), String.valueOf(calciteType.getScale())); } break; default: ht = calciteToHiveTypeNameMap.get(calciteType.getSqlTypeName().getName()); } return ht; } }
private ImmutableList<MetaTypeInfo> getAllDefaultType() { final ImmutableList.Builder<MetaTypeInfo> allTypeList = ImmutableList.builder(); final CalciteConnectionImpl conn = (CalciteConnectionImpl) connection; final RelDataTypeSystem typeSystem = conn.typeFactory.getTypeSystem(); for (SqlTypeName sqlTypeName : SqlTypeName.values()) { allTypeList.add( new MetaTypeInfo(sqlTypeName.getName(), sqlTypeName.getJdbcOrdinal(), typeSystem.getMaxPrecision(sqlTypeName), typeSystem.getLiteral(sqlTypeName, true), typeSystem.getLiteral(sqlTypeName, false), // All types are nullable (short) DatabaseMetaData.typeNullable, typeSystem.isCaseSensitive(sqlTypeName), // Making all type searchable; we may want to // be specific and declare under SqlTypeName (short) DatabaseMetaData.typeSearchable, false, false, typeSystem.isAutoincrement(sqlTypeName), (short) sqlTypeName.getMinScale(), (short) typeSystem.getMaxScale(sqlTypeName), typeSystem.getNumTypeRadix(sqlTypeName))); } return allTypeList.build(); }
private ImmutableList<MetaTypeInfo> getAllDefaultType() { final ImmutableList.Builder<MetaTypeInfo> allTypeList = ImmutableList.builder(); final CalciteConnectionImpl conn = (CalciteConnectionImpl) connection; final RelDataTypeSystem typeSystem = conn.typeFactory.getTypeSystem(); for (SqlTypeName sqlTypeName : SqlTypeName.values()) { allTypeList.add( new MetaTypeInfo(sqlTypeName.getName(), sqlTypeName.getJdbcOrdinal(), typeSystem.getMaxPrecision(sqlTypeName), typeSystem.getLiteral(sqlTypeName, true), typeSystem.getLiteral(sqlTypeName, false), // All types are nullable (short) DatabaseMetaData.typeNullable, typeSystem.isCaseSensitive(sqlTypeName), // Making all type searchable; we may want to // be specific and declare under SqlTypeName (short) DatabaseMetaData.typeSearchable, false, false, typeSystem.isAutoincrement(sqlTypeName), (short) sqlTypeName.getMinScale(), (short) typeSystem.getMaxScale(sqlTypeName), typeSystem.getNumTypeRadix(sqlTypeName))); } return allTypeList.build(); }
private ImmutableList<MetaTypeInfo> getAllDefaultType() { final ImmutableList.Builder<MetaTypeInfo> allTypeList = new ImmutableList.Builder<>(); final RelDataTypeSystem typeSystem = getConnection().getTypeFactory().getTypeSystem(); for (SqlTypeName sqlTypeName : SqlTypeName.values()) { allTypeList.add( new MetaTypeInfo(sqlTypeName.getName(), sqlTypeName.getJdbcOrdinal(), typeSystem.getMaxPrecision(sqlTypeName), typeSystem.getLiteral(sqlTypeName, true), typeSystem.getLiteral(sqlTypeName, false), // All types are nullable (short) DatabaseMetaData.typeNullable, typeSystem.isCaseSensitive(sqlTypeName), // Making all type searchable; we may want to // be specific and declare under SqlTypeName (short) DatabaseMetaData.typeSearchable, false, false, typeSystem.isAutoincrement(sqlTypeName), (short) sqlTypeName.getMinScale(), (short) typeSystem.getMaxScale(sqlTypeName), typeSystem.getNumTypeRadix(sqlTypeName))); } return allTypeList.build(); }
final ColumnMetaData.ScalarType columnType = ColumnMetaData.scalar( field.getType().getSqlTypeName().getJdbcOrdinal(), field.getType().getSqlTypeName().getName(), rep );
public static List<ViewFieldType> viewToFieldTypes(List<FieldType> fields) { List<ViewFieldType> sqlFields = new ArrayList<>(); for (FieldType fieldType : fields) { ViewFieldType sqlField = new ViewFieldType(fieldType.getName(), fieldType.getType().getName()); sqlField.setPrecision(fieldType.getPrecision()); sqlField.setScale(fieldType.getScale()); sqlField.setStartUnit(name(fieldType.getStartUnit())); sqlField.setEndUnit(name(fieldType.getEndUnit())); sqlField.setFractionalSecondPrecision(fieldType.getFractionalSecondPrecision()); sqlField.setIsNullable(fieldType.getIsNullable()); sqlField.setTypeFamily(fieldType.getType().getFamily().toString()); sqlFields.add(sqlField); } return sqlFields; }
private CastExpression cast(RexCall call) { TerminalExpression argument = (TerminalExpression) call.getOperands().get(0).accept(this); // Casts do not work for metadata columns isMeta(argument, call, true); MajorType target; switch (call.getType().getSqlTypeName()) { case CHAR: case VARCHAR: target = Types.optional(MinorType.VARCHAR).toBuilder().setWidth(call.getType().getPrecision()).build(); break; case INTEGER: target = Types.optional(MinorType.INT); break; case BIGINT: target = Types.optional(MinorType.BIGINT); break; case FLOAT: target = Types.optional(MinorType.FLOAT4); break; case DOUBLE: target = Types.optional(MinorType.FLOAT8); break; case DECIMAL: throw new PredicateAnalyzerException("Cast to DECIMAL type unsupported"); default: target = Types.optional(MinorType.valueOf(call.getType().getSqlTypeName().getName())); } return new CastExpression(target, argument); }
@Override public String visitLiteral(RexLiteral literal) { RelDataType type = literal.getType(); if (type.getSqlTypeName() == SqlTypeName.BOOLEAN) { if (literal.isNull()) { return "nullBool"; } return literal.toString() + "Literal"; } if (type.getSqlTypeName() == SqlTypeName.INTEGER) { if (literal.isNull()) { return "nullInt"; } return "literal(" + literal.getValue() + ")"; } if (type.getSqlTypeName() == SqlTypeName.VARCHAR) { if (literal.isNull()) { return "nullVarchar"; } } return "/*" + literal.getTypeName().getName() + "*/" + literal.toString(); }
@Override public String visitLiteral(RexLiteral literal) { RelDataType type = literal.getType(); if (type.getSqlTypeName() == SqlTypeName.BOOLEAN) { if (literal.isNull()) { return "nullBool"; } return literal.toString() + "Literal"; } if (type.getSqlTypeName() == SqlTypeName.INTEGER) { if (literal.isNull()) { return "nullInt"; } return "literal(" + literal.getValue() + ")"; } if (type.getSqlTypeName() == SqlTypeName.VARCHAR) { if (literal.isNull()) { return "nullVarchar"; } } return "/*" + literal.getTypeName().getName() + "*/" + literal.toString(); }