public static RelDataType createArrayType( RelDataTypeFactory typeFactory, RelDataType type, boolean nullable) { RelDataType ret = typeFactory.createArrayType(type, -1); return typeFactory.createTypeWithNullability(ret, nullable); }
public static RelDataType createArrayType( RelDataTypeFactory typeFactory, RelDataType type, boolean nullable) { RelDataType ret = typeFactory.createArrayType(type, -1); return typeFactory.createTypeWithNullability(ret, nullable); }
private RelDataType sqlType(RelDataTypeFactory typeFactory, int dataType, int precision, int scale, String typeString) { SqlTypeName sqlTypeName = SqlTypeName.getNameForJdbcType(dataType); switch (sqlTypeName) { case ARRAY: RelDataType component = null; if (typeString != null && typeString.endsWith(" ARRAY")) { // E.g. hsqldb gives "INTEGER ARRAY", so we deduce the component type // "INTEGER". final String remaining = typeString.substring(0, typeString.length() - " ARRAY".length()); component = parseTypeString(typeFactory, remaining); } if (component == null) { component = typeFactory.createSqlType(SqlTypeName.ANY); } return typeFactory.createArrayType(component, -1); } if (precision >= 0 && scale >= 0 && sqlTypeName.allowsPrecScale(true, true)) { return typeFactory.createSqlType(sqlTypeName, precision, scale); } else if (precision >= 0 && sqlTypeName.allowsPrecNoScale()) { return typeFactory.createSqlType(sqlTypeName, precision); } else { assert sqlTypeName.allowsNoPrecNoScale(); return typeFactory.createSqlType(sqlTypeName); } }
protected RelDataType convertToStruct(RelDataType type) { // "MULTISET [<expr>, ...]" needs to be wrapped in a record if // <expr> has a scalar type. // For example, "MULTISET [8, 9]" has type // "RECORD(INTEGER EXPR$0 NOT NULL) NOT NULL MULTISET NOT NULL". final RelDataType componentType = type.getComponentType(); if (componentType == null || componentType.isStruct()) { return type; } final RelDataTypeFactory typeFactory = validator.getTypeFactory(); final RelDataType structType = typeFactory.builder() .add(validator.deriveAlias(getNode(), 0), componentType) .build(); final RelDataType collectionType; switch (type.getSqlTypeName()) { case ARRAY: collectionType = typeFactory.createArrayType(structType, -1); break; case MULTISET: collectionType = typeFactory.createMultisetType(structType, -1); break; default: throw new AssertionError(type); } return typeFactory.createTypeWithNullability(collectionType, type.isNullable()); } }