public static RelDataType createMultisetType( RelDataTypeFactory typeFactory, RelDataType type, boolean nullable) { RelDataType ret = typeFactory.createMultisetType(type, -1); return typeFactory.createTypeWithNullability(ret, nullable); }
public static RelDataType createMultisetType( RelDataTypeFactory typeFactory, RelDataType type, boolean nullable) { RelDataType ret = typeFactory.createMultisetType(type, -1); return typeFactory.createTypeWithNullability(ret, nullable); }
public RelDataType inferReturnType( final SqlOperatorBinding opBinding) { ExplicitOperatorBinding newBinding = new ExplicitOperatorBinding( opBinding, new AbstractList<RelDataType>() { public RelDataType get(int index) { RelDataType type = opBinding.getOperandType(index) .getComponentType(); assert type != null; return type; } public int size() { return opBinding.getOperandCount(); } }); RelDataType biggestElementType = rtiLeastRestrictive.inferReturnType(newBinding); return opBinding.getTypeFactory().createMultisetType( biggestElementType, -1); } };
public RelDataType inferReturnType( SqlOperatorBinding opBinding) { assert opBinding.getOperandCount() == 1; final RelDataType recordMultisetType = opBinding.getOperandType(0); RelDataType multisetType = recordMultisetType.getComponentType(); assert multisetType != null : "expected a multiset type: " + recordMultisetType; final List<RelDataTypeField> fields = multisetType.getFieldList(); assert fields.size() > 0; final RelDataType firstColType = fields.get(0).getType(); return opBinding.getTypeFactory().createMultisetType( firstColType, -1); } };
public RelDataType inferReturnType( final SqlOperatorBinding opBinding) { ExplicitOperatorBinding newBinding = new ExplicitOperatorBinding( opBinding, new AbstractList<RelDataType>() { public RelDataType get(int index) { RelDataType type = opBinding.getOperandType(index) .getComponentType(); assert type != null; return type; } public int size() { return opBinding.getOperandCount(); } // CHECKSTYLE: IGNORE 1 }); RelDataType biggestElementType = LEAST_RESTRICTIVE.inferReturnType(newBinding); return opBinding.getTypeFactory().createMultisetType( biggestElementType, -1); } };
public RelDataType inferReturnType( SqlOperatorBinding opBinding) { assert opBinding.getOperandCount() == 1; final RelDataType recordMultisetType = opBinding.getOperandType(0); RelDataType multisetType = recordMultisetType.getComponentType(); assert multisetType != null : "expected a multiset type: " + recordMultisetType; final List<RelDataTypeField> fields = multisetType.getFieldList(); assert fields.size() > 0; final RelDataType firstColType = fields.get(0).getType(); return opBinding.getTypeFactory().createMultisetType( firstColType, -1); } };
public RelDataType inferReturnType( SqlOperatorBinding opBinding) { assert opBinding.getOperandCount() == 1; final RelDataType multisetType = opBinding.getOperandType(0); RelDataType componentType = multisetType.getComponentType(); assert componentType != null : "expected a multiset type: " + multisetType; final RelDataTypeFactory typeFactory = opBinding.getTypeFactory(); final RelDataType type = typeFactory.builder() .add(SqlUtil.deriveAliasFromOrdinal(0), componentType).build(); return typeFactory.createMultisetType(type, -1); } };
public RelDataType inferReturnType( SqlOperatorBinding opBinding) { assert opBinding.getOperandCount() == 1; final RelDataType multisetType = opBinding.getOperandType(0); RelDataType componentType = multisetType.getComponentType(); assert componentType != null : "expected a multiset type: " + multisetType; return opBinding.getTypeFactory().createMultisetType( opBinding.getTypeFactory().createStructType( new RelDataType[] { componentType }, new String[] { SqlUtil.deriveAliasFromOrdinal(0) }), -1); } };
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()); } }
typeFactory.createMultisetType( flattenRecordType( typeFactory,
typeFactory.createMultisetType( flattenRecordType( typeFactory,
type = typeFactory.createMultisetType(type, -1); break;
type = typeFactory.createMultisetType(type, -1); break;
new String[] { validator.deriveAlias(child, 0) }); final RelDataType multisetType = typeFactory.createMultisetType(structType, -1); return typeFactory.createTypeWithNullability( multisetType,
componentType.isNullable()); boolean isn = type.isNullable(); type = typeFactory.createMultisetType(tt, -1); type = typeFactory.createTypeWithNullability(type, isn);
componentType.isNullable()); boolean isn = type.isNullable(); type = typeFactory.createMultisetType(tt, -1); type = typeFactory.createTypeWithNullability(type, isn);
new RelDataType[] { t1, typeFactory.createMultisetType(t1, -1), }, new String[] {
@Test public void testTypeDump() { RelDataTypeFactory typeFactory = new SqlTypeFactoryImpl(); RelDataType t1 = typeFactory.builder() .add("f0", SqlTypeName.DECIMAL, 5, 2) .add("f1", SqlTypeName.VARCHAR, 10) .build(); TestUtil.assertEqualsVerbose( TestUtil.fold( "f0 DECIMAL(5, 2) NOT NULL,", "f1 VARCHAR(10) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\" NOT NULL"), Util.toLinux(RelOptUtil.dumpType(t1) + "\n")); RelDataType t2 = typeFactory.builder() .add("f0", t1) .add("f1", typeFactory.createMultisetType(t1, -1)) .build(); TestUtil.assertEqualsVerbose( TestUtil.fold( "f0 RECORD (", " f0 DECIMAL(5, 2) NOT NULL,", " f1 VARCHAR(10) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\" NOT NULL) NOT NULL,", "f1 RECORD (", " f0 DECIMAL(5, 2) NOT NULL,", " f1 VARCHAR(10) CHARACTER SET \"ISO-8859-1\" COLLATE \"ISO-8859-1$en_US$primary\" NOT NULL) NOT NULL MULTISET NOT NULL"), Util.toLinux(RelOptUtil.dumpType(t2) + "\n")); }