use of com.datastax.oss.driver.api.core.type.MapType in project calcite by apache.
the class CassandraSchema method getRelDataType.
RelProtoDataType getRelDataType(String columnFamily, boolean view) {
Map<CqlIdentifier, ColumnMetadata> columns;
CqlIdentifier tableName = CqlIdentifier.fromInternal(columnFamily);
if (view) {
Optional<ViewMetadata> optionalViewMetadata = getKeyspace().getView(tableName);
if (optionalViewMetadata.isPresent()) {
columns = optionalViewMetadata.get().getColumns();
} else {
throw new IllegalStateException("Unknown view " + tableName + " in keyspace " + keyspace);
}
} else {
Optional<TableMetadata> optionalTableMetadata = getKeyspace().getTable(tableName);
if (optionalTableMetadata.isPresent()) {
columns = optionalTableMetadata.get().getColumns();
} else {
throw new IllegalStateException("Unknown table " + tableName + " in keyspace " + keyspace);
}
}
// Temporary type factory, just for the duration of this method. Allowable
// because we're creating a proto-type, not a type; before being used, the
// proto-type will be copied into a real type factory.
final RelDataTypeFactory typeFactory = new SqlTypeFactoryImpl(RelDataTypeSystem.DEFAULT);
final RelDataTypeFactory.Builder fieldInfo = typeFactory.builder();
for (ColumnMetadata column : columns.values()) {
final DataType dataType = column.getType();
final String columnName = column.getName().asInternal();
if (dataType instanceof ListType) {
SqlTypeName arrayInnerType = CQL_TO_SQL_TYPE.lookup(((ListType) dataType).getElementType());
fieldInfo.add(columnName, typeFactory.createArrayType(typeFactory.createSqlType(arrayInnerType), -1)).nullable(true);
} else if (dataType instanceof SetType) {
SqlTypeName multiSetInnerType = CQL_TO_SQL_TYPE.lookup(((SetType) dataType).getElementType());
fieldInfo.add(columnName, typeFactory.createMultisetType(typeFactory.createSqlType(multiSetInnerType), -1)).nullable(true);
} else if (dataType instanceof MapType) {
MapType columnType = (MapType) dataType;
SqlTypeName keyType = CQL_TO_SQL_TYPE.lookup(columnType.getKeyType());
SqlTypeName valueType = CQL_TO_SQL_TYPE.lookup(columnType.getValueType());
fieldInfo.add(columnName, typeFactory.createMapType(typeFactory.createSqlType(keyType), typeFactory.createSqlType(valueType))).nullable(true);
} else if (dataType instanceof TupleType) {
List<DataType> typeArgs = ((TupleType) dataType).getComponentTypes();
List<Map.Entry<String, RelDataType>> typesList = IntStream.range(0, typeArgs.size()).mapToObj(i -> new Pair<>(// 1 indexed (as ARRAY)
Integer.toString(i + 1), typeFactory.createSqlType(CQL_TO_SQL_TYPE.lookup(typeArgs.get(i))))).collect(Collectors.toList());
fieldInfo.add(columnName, typeFactory.createStructType(typesList)).nullable(true);
} else {
SqlTypeName typeName = CQL_TO_SQL_TYPE.lookup(dataType);
fieldInfo.add(columnName, typeName).nullable(true);
}
}
return RelDataTypeImpl.proto(fieldInfo.build());
}
use of com.datastax.oss.driver.api.core.type.MapType in project java-driver by datastax.
the class CachingCodecRegistry method createCodec.
// Try to create a codec when we haven't found it in the cache.
// Variant where the Java type is unknown.
@NonNull
protected TypeCodec<?> createCodec(@NonNull DataType cqlType) {
if (cqlType instanceof ListType) {
DataType elementType = ((ListType) cqlType).getElementType();
TypeCodec<Object> elementCodec = codecFor(elementType);
return TypeCodecs.listOf(elementCodec);
} else if (cqlType instanceof SetType) {
DataType elementType = ((SetType) cqlType).getElementType();
TypeCodec<Object> elementCodec = codecFor(elementType);
return TypeCodecs.setOf(elementCodec);
} else if (cqlType instanceof MapType) {
DataType keyType = ((MapType) cqlType).getKeyType();
DataType valueType = ((MapType) cqlType).getValueType();
TypeCodec<Object> keyCodec = codecFor(keyType);
TypeCodec<Object> valueCodec = codecFor(valueType);
return TypeCodecs.mapOf(keyCodec, valueCodec);
} else if (cqlType instanceof TupleType) {
return TypeCodecs.tupleOf((TupleType) cqlType);
} else if (cqlType instanceof UserDefinedType) {
return TypeCodecs.udtOf((UserDefinedType) cqlType);
} else if (cqlType instanceof CustomType) {
return TypeCodecs.custom(cqlType);
}
throw new CodecNotFoundException(cqlType, null);
}
use of com.datastax.oss.driver.api.core.type.MapType in project java-driver by datastax.
the class CachingCodecRegistry method inferJavaTypeFromCqlType.
@NonNull
protected GenericType<?> inferJavaTypeFromCqlType(@NonNull DataType cqlType) {
if (cqlType instanceof ListType) {
DataType elementType = ((ListType) cqlType).getElementType();
return GenericType.listOf(inferJavaTypeFromCqlType(elementType));
} else if (cqlType instanceof SetType) {
DataType elementType = ((SetType) cqlType).getElementType();
return GenericType.setOf(inferJavaTypeFromCqlType(elementType));
} else if (cqlType instanceof MapType) {
DataType keyType = ((MapType) cqlType).getKeyType();
DataType valueType = ((MapType) cqlType).getValueType();
return GenericType.mapOf(inferJavaTypeFromCqlType(keyType), inferJavaTypeFromCqlType(valueType));
}
switch(cqlType.getProtocolCode()) {
case ProtocolConstants.DataType.CUSTOM:
case ProtocolConstants.DataType.BLOB:
return GenericType.BYTE_BUFFER;
case ProtocolConstants.DataType.ASCII:
case ProtocolConstants.DataType.VARCHAR:
return GenericType.STRING;
case ProtocolConstants.DataType.BIGINT:
case ProtocolConstants.DataType.COUNTER:
return GenericType.LONG;
case ProtocolConstants.DataType.BOOLEAN:
return GenericType.BOOLEAN;
case ProtocolConstants.DataType.DECIMAL:
return GenericType.BIG_DECIMAL;
case ProtocolConstants.DataType.DOUBLE:
return GenericType.DOUBLE;
case ProtocolConstants.DataType.FLOAT:
return GenericType.FLOAT;
case ProtocolConstants.DataType.INT:
return GenericType.INTEGER;
case ProtocolConstants.DataType.TIMESTAMP:
return GenericType.INSTANT;
case ProtocolConstants.DataType.UUID:
case ProtocolConstants.DataType.TIMEUUID:
return GenericType.UUID;
case ProtocolConstants.DataType.VARINT:
return GenericType.BIG_INTEGER;
case ProtocolConstants.DataType.INET:
return GenericType.INET_ADDRESS;
case ProtocolConstants.DataType.DATE:
return GenericType.LOCAL_DATE;
case ProtocolConstants.DataType.TIME:
return GenericType.LOCAL_TIME;
case ProtocolConstants.DataType.SMALLINT:
return GenericType.SHORT;
case ProtocolConstants.DataType.TINYINT:
return GenericType.BYTE;
case ProtocolConstants.DataType.DURATION:
return GenericType.CQL_DURATION;
case ProtocolConstants.DataType.UDT:
return GenericType.UDT_VALUE;
case ProtocolConstants.DataType.TUPLE:
return GenericType.TUPLE_VALUE;
default:
throw new CodecNotFoundException(cqlType, null);
}
}
use of com.datastax.oss.driver.api.core.type.MapType in project java-driver by datastax.
the class DataTypeCqlNameParserTest method should_parse_udt_named_like_collection_type.
@Test
public void should_parse_udt_named_like_collection_type() {
// Those are all valid UDT names!
assertThat(parse("tuple")).isInstanceOf(UserDefinedType.class);
assertThat(parse("list")).isInstanceOf(UserDefinedType.class);
assertThat(parse("map")).isInstanceOf(UserDefinedType.class);
assertThat(parse("frozen")).isInstanceOf(UserDefinedType.class);
MapType mapType = (MapType) parse("map<list,frozen>");
assertThat(mapType.getKeyType()).isInstanceOf(UserDefinedType.class);
assertThat(mapType.getValueType()).isInstanceOf(UserDefinedType.class);
}
use of com.datastax.oss.driver.api.core.type.MapType in project java-driver by datastax.
the class UserDefinedTypeListParserTest method should_resolve_map_dependency.
@Test
public void should_resolve_map_dependency() {
UserDefinedTypeParser parser = new UserDefinedTypeParser(new DataTypeCqlNameParser(), context);
Map<CqlIdentifier, UserDefinedType> types = parser.parse(KEYSPACE_ID, mockTypeRow("ks", "a1", ImmutableList.of("bs"), ImmutableList.of("frozen<map<int, frozen<b>>>")), mockTypeRow("ks", "a2", ImmutableList.of("bs"), ImmutableList.of("frozen<map<frozen<b>, int>>")), mockTypeRow("ks", "b", ImmutableList.of("i"), ImmutableList.of("int")));
assertThat(types).hasSize(3);
UserDefinedType a1Type = types.get(CqlIdentifier.fromInternal("a1"));
UserDefinedType a2Type = types.get(CqlIdentifier.fromInternal("a2"));
UserDefinedType bType = types.get(CqlIdentifier.fromInternal("b"));
assertThat(((MapType) a1Type.getFieldTypes().get(0)).getValueType()).isEqualTo(bType);
assertThat(((MapType) a2Type.getFieldTypes().get(0)).getKeyType()).isEqualTo(bType);
}
Aggregations