use of com.hazelcast.sql.impl.extract.QueryPath in project hazelcast by hazelcast.
the class KvMetadataJavaResolver method resolveAndValidatePrimitiveField.
private Stream<MappingField> resolveAndValidatePrimitiveField(boolean isKey, List<MappingField> userFields, QueryDataType type) {
Map<QueryPath, MappingField> userFieldsByPath = extractFields(userFields, isKey);
QueryPath path = isKey ? QueryPath.KEY_PATH : QueryPath.VALUE_PATH;
String name = isKey ? KEY : VALUE;
String externalName = path.toString();
MappingField userField = userFieldsByPath.get(path);
if (userField != null && !userField.name().equals(name)) {
throw QueryException.error("Cannot rename field: '" + name + '\'');
}
if (userField != null && !type.getTypeFamily().equals(userField.type().getTypeFamily())) {
throw QueryException.error("Mismatch between declared and resolved type for field '" + userField.name() + "'");
}
for (MappingField field : userFieldsByPath.values()) {
if (!externalName.equals(field.externalName())) {
throw QueryException.error("The field '" + externalName + "' is of type " + type.getTypeFamily() + ", you can't map '" + field.externalName() + "' too");
}
}
return userFieldsByPath.values().stream();
}
use of com.hazelcast.sql.impl.extract.QueryPath in project hazelcast by hazelcast.
the class KvMetadataJavaResolver method resolveObjectMetadata.
private KvMetadata resolveObjectMetadata(boolean isKey, List<MappingField> resolvedFields, Map<QueryPath, MappingField> fieldsByPath, Class<?> clazz) {
Map<String, Class<?>> typesByNames = FieldsUtil.resolveClass(clazz);
List<TableField> fields = new ArrayList<>();
Map<String, String> typeNamesByPaths = new HashMap<>();
for (Entry<QueryPath, MappingField> entry : fieldsByPath.entrySet()) {
QueryPath path = entry.getKey();
QueryDataType type = entry.getValue().type();
String name = entry.getValue().name();
fields.add(new MapTableField(name, type, false, path));
if (path.getPath() != null && typesByNames.get(path.getPath()) != null) {
typeNamesByPaths.put(path.getPath(), typesByNames.get(path.getPath()).getName());
}
}
maybeAddDefaultField(isKey, resolvedFields, fields, QueryDataType.OBJECT);
return new KvMetadata(fields, GenericQueryTargetDescriptor.DEFAULT, new PojoUpsertTargetDescriptor(clazz.getName(), typeNamesByPaths));
}
use of com.hazelcast.sql.impl.extract.QueryPath in project hazelcast by hazelcast.
the class KvMetadataJavaResolver method resolveMetadata.
public KvMetadata resolveMetadata(boolean isKey, List<MappingField> resolvedFields, Class<?> clazz) {
QueryDataType type = QueryDataTypeUtils.resolveTypeForClass(clazz);
Map<QueryPath, MappingField> fields = extractFields(resolvedFields, isKey);
if (type != QueryDataType.OBJECT) {
return resolvePrimitiveMetadata(isKey, resolvedFields, fields, type);
} else {
return resolveObjectMetadata(isKey, resolvedFields, fields, clazz);
}
}
use of com.hazelcast.sql.impl.extract.QueryPath in project hazelcast by hazelcast.
the class KvMetadataAvroResolver method schema.
private Schema schema(List<TableField> fields) {
QueryPath[] paths = paths(fields);
QueryDataType[] types = types(fields);
FieldAssembler<Schema> schema = SchemaBuilder.record("jet.sql").fields();
for (int i = 0; i < fields.size(); i++) {
String path = paths[i].getPath();
if (path == null) {
continue;
}
QueryDataType type = types[i];
switch(type.getTypeFamily()) {
case BOOLEAN:
schema = schema.name(path).type().unionOf().nullType().and().booleanType().endUnion().nullDefault();
break;
case TINYINT:
case SMALLINT:
case INTEGER:
schema = schema.name(path).type().unionOf().nullType().and().intType().endUnion().nullDefault();
break;
case BIGINT:
schema = schema.name(path).type().unionOf().nullType().and().longType().endUnion().nullDefault();
break;
case REAL:
schema = schema.name(path).type().unionOf().nullType().and().floatType().endUnion().nullDefault();
break;
case DOUBLE:
schema = schema.name(path).type().unionOf().nullType().and().doubleType().endUnion().nullDefault();
break;
case DECIMAL:
case TIME:
case DATE:
case TIMESTAMP:
case TIMESTAMP_WITH_TIME_ZONE:
case VARCHAR:
schema = schema.name(path).type().unionOf().nullType().and().stringType().endUnion().nullDefault();
break;
case OBJECT:
schema = schema.name(path).type().unionOf().nullType().and().booleanType().and().intType().and().longType().and().floatType().and().doubleType().and().stringType().endUnion().nullDefault();
break;
default:
throw new IllegalArgumentException("Unknown type: " + type.getTypeFamily());
}
}
return schema.endRecord();
}
use of com.hazelcast.sql.impl.extract.QueryPath in project hazelcast by hazelcast.
the class KvMetadataJsonResolver method resolveMetadata.
@Override
public KvMetadata resolveMetadata(boolean isKey, List<MappingField> resolvedFields, Map<String, String> options, InternalSerializationService serializationService) {
Map<QueryPath, MappingField> fieldsByPath = extractFields(resolvedFields, isKey);
List<TableField> fields = new ArrayList<>();
for (Entry<QueryPath, MappingField> entry : fieldsByPath.entrySet()) {
QueryPath path = entry.getKey();
QueryDataType type = entry.getValue().type();
String name = entry.getValue().name();
fields.add(new MapTableField(name, type, false, path));
}
maybeAddDefaultField(isKey, resolvedFields, fields, QueryDataType.OBJECT);
return new KvMetadata(fields, JsonQueryTargetDescriptor.INSTANCE, JsonUpsertTargetDescriptor.INSTANCE);
}
Aggregations