public boolean matches(final Schema schema) { if (schema == null) { return isOptional; } return type.equals(schema.type()); } }
private List<FunctionParameter> mapToFunctionParameter(final List<Schema> params) { return params .stream() .map(schema -> schema == null ? new FunctionParameter(null, false) : new FunctionParameter(schema.type(), schema.isOptional())) .collect(Collectors.toList()); }
private KsqlException createNoMatchingFunctionException(final List<Schema> paramTypes) { final String sqlParamTypes = paramTypes.stream() .map(schema -> schema == null ? null : SchemaUtil.getSchemaTypeAsSqlType(schema.type())) .collect(Collectors.joining(", ", "[", "]")); return new KsqlException("Function '" + metadata.getName() + "' does not accept parameters of types:" + sqlParamTypes); }
private void validateType(final String pathStr, final Schema schema, final Schema connectSchema, final Schema.Type[] validTypes) { // don't use stream here for (final Schema.Type type : validTypes) { if (connectSchema.type().equals(type)) { return; } } throwTypeMismatchException(pathStr, schema, connectSchema); }
@Test public void shouldResolveFloat64AndAnyNumberTypeToFloat() { assertThat( SchemaUtil.resolveBinaryOperatorResultType(Schema.Type.INT32, Schema.Type.FLOAT64).type(), equalTo(Schema.Type.FLOAT64)); assertThat( SchemaUtil.resolveBinaryOperatorResultType(Schema.Type.FLOAT64, Schema.Type.INT64).type(), equalTo(Schema.Type.FLOAT64)); assertThat( SchemaUtil.resolveBinaryOperatorResultType(Schema.Type.FLOAT32, Schema.Type.FLOAT64).type(), equalTo(Schema.Type.FLOAT64)); }
private static List<Pair<String, Type>> getStructItems(final Schema struct) { if (struct.type() != Schema.Type.STRUCT) { return null; } final List<Pair<String, Type>> itemList = new ArrayList<>(); for (final Field field: struct.schema().fields()) { itemList.add(new Pair<>(field.name(), getKsqlType(field.schema()))); } return itemList; }
@Test public void shouldGetArraySchemaFromListClass() throws NoSuchMethodException { final Type type = getClass().getDeclaredMethod("listType", List.class) .getGenericParameterTypes()[0]; final Schema schema = SchemaUtil.getSchemaFromType(type); assertThat(schema.type(), equalTo(Schema.Type.ARRAY)); assertThat(schema.valueSchema(), equalTo(Schema.OPTIONAL_FLOAT64_SCHEMA)); }
@Test public void shouldGetMapSchemaFromMapClass() throws NoSuchMethodException { final Type type = getClass().getDeclaredMethod("mapType", Map.class) .getGenericParameterTypes()[0]; final Schema schema = SchemaUtil.getSchemaFromType(type); assertThat(schema.type(), equalTo(Schema.Type.MAP)); assertThat(schema.keySchema(), equalTo(Schema.OPTIONAL_STRING_SCHEMA)); assertThat(schema.valueSchema(), equalTo(Schema.OPTIONAL_INT32_SCHEMA)); }
@Test public void shouldResolveIntAndIntSchemaToInt() { assertThat( SchemaUtil.resolveBinaryOperatorResultType(Schema.Type.INT32, Schema.Type.INT32).type(), equalTo(Schema.Type.INT32)); }
@Test public void shouldResolveIntAndLongSchemaToLong() { assertThat( SchemaUtil.resolveBinaryOperatorResultType(Schema.Type.INT64, Schema.Type.INT32).type(), equalTo(Schema.Type.INT64)); }
@Test public void shouldResolveStringAndStringToString() { assertThat( SchemaUtil.resolveBinaryOperatorResultType(Schema.Type.STRING, Schema.Type.STRING).type(), equalTo(Schema.Type.STRING)); }
public Schema toKsqlSchema(final Schema schema) { try { final Schema rowSchema = toKsqlFieldSchema(schema); if (rowSchema.type() != Schema.Type.STRUCT) { throw new KsqlException("KSQL stream/table schema must be structured"); } return rowSchema; } catch (final UnsupportedTypeException e) { throw new KsqlException("Unsupported type at root of schema: " + e.getMessage(), e); } }
@Test public void shouldGetTheCorrectSchemaForArray() { final Schema schema = SchemaUtil.getTypeSchema("ARRAY<DOUBLE>"); assertThat(schema.type(), sameInstance(Schema.Type.ARRAY)); }
@Test public void shouldGetTheCorrectSchemaForMap() { final Schema schema = SchemaUtil.getTypeSchema("MAP<VARCHAR, DOUBLE>"); assertThat(schema.type(), sameInstance(Schema.Type.MAP)); }
private Schema toKsqlMapSchema(final Schema schema) { final Schema keySchema = toKsqlFieldSchema(schema.keySchema()); checkMapKeyType(keySchema.type()); return SchemaBuilder.map( Schema.OPTIONAL_STRING_SCHEMA, toKsqlFieldSchema(schema.valueSchema()) ).optional().build(); }
@Test public void shouldTranslateMaps() { final Schema connectSchema = SchemaBuilder .struct() .field("mapField", SchemaBuilder.map(Schema.STRING_SCHEMA, Schema.INT32_SCHEMA)) .build(); final Schema ksqlSchema = schemaTranslator.toKsqlSchema(connectSchema); assertThat(ksqlSchema.field("MAPFIELD"), notNullValue()); final Schema mapSchema = ksqlSchema.field("MAPFIELD").schema(); assertThat(mapSchema.type(), equalTo(Schema.Type.MAP)); assertThat(mapSchema.keySchema(), equalTo(Schema.OPTIONAL_STRING_SCHEMA)); assertThat(mapSchema.valueSchema(), equalTo(Schema.OPTIONAL_INT32_SCHEMA)); }