private SchemaBuilder hstoreSchema(){ if (hStoreMode == PostgresConnectorConfig.HStoreHandlingMode.JSON) { return Json.builder(); } else { // keys are not nullable, but values are return SchemaBuilder.map( SchemaBuilder.STRING_SCHEMA, SchemaBuilder.OPTIONAL_STRING_SCHEMA ); } }
private static SchemaBuilder handleParametrizedType(final Type type) { if (type instanceof ParameterizedType) { final ParameterizedType parameterizedType = (ParameterizedType) type; if (parameterizedType.getRawType() == Map.class) { return SchemaBuilder.map(getSchemaFromType( parameterizedType.getActualTypeArguments()[0]), getSchemaFromType(parameterizedType.getActualTypeArguments()[1])); } else if (parameterizedType.getRawType() == List.class) { return SchemaBuilder.array(getSchemaFromType( parameterizedType.getActualTypeArguments()[0])); } } throw new KsqlException("Type is not supported: " + type); } }
@Test public void shouldDeserializeConnectMapWithBooleanKey() { shouldDeserializeConnectTypeCorrectly( SchemaBuilder.map(Schema.BOOLEAN_SCHEMA, Schema.INT32_SCHEMA).optional().build(), ImmutableMap.of( true, 10, false, 20), SchemaBuilder.map( Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_INT32_SCHEMA ).optional().build(), ImmutableMap.of("true", 10, "false", 20) ); }
@Test public void shouldDeserializeConnectMapWithInt64Key() { shouldDeserializeConnectTypeCorrectly( SchemaBuilder.map(Schema.INT64_SCHEMA, Schema.INT32_SCHEMA).optional().build(), ImmutableMap.of( 1L, 10, 2L, 20, 3L, 30), SchemaBuilder.map( Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_INT32_SCHEMA ).optional().build(), ImmutableMap.of("1", 10, "2", 20, "3", 30) ); }
@Test public void shouldDeserializeConnectMapWithInt8Key() { shouldDeserializeConnectTypeCorrectly( SchemaBuilder.map(Schema.INT8_SCHEMA, Schema.INT32_SCHEMA).optional().build(), ImmutableMap.of((byte) 1, 10, (byte) 2, 20, (byte) 3, 30), SchemaBuilder.map( Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_INT32_SCHEMA ).optional().build(), ImmutableMap.of("1", 10, "2", 20, "3", 30) ); }
@Test public void shouldDeserializeConnectMapWithInt32Key() { shouldDeserializeConnectTypeCorrectly( SchemaBuilder.map(Schema.INT32_SCHEMA, Schema.INT32_SCHEMA).optional().build(), ImmutableMap.of(1, 10, 2, 20, 3, 30), SchemaBuilder.map( Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_INT32_SCHEMA ).optional().build(), ImmutableMap.of("1", 10, "2", 20, "3", 30) ); }
@Test public void shouldDeserializeConnectMapWithInt16Key() { shouldDeserializeConnectTypeCorrectly( SchemaBuilder.map(Schema.INT16_SCHEMA, Schema.INT32_SCHEMA).optional().build(), ImmutableMap.of((short) 1, 10, (short) 2, 20, (short) 3, 30), SchemaBuilder.map( Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_INT32_SCHEMA ).optional().build(), ImmutableMap.of("1", 10, "2", 20, "3", 30) ); }
@Test public void shouldGetCorrectJavaClassForMap() { final Class mapClazz = SchemaUtil.getJavaType(SchemaBuilder.map(Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_FLOAT64_SCHEMA).optional().build()); assertThat(mapClazz, equalTo(Map.class)); }
@Test public void shouldGetTheCorrectJavaTypeForMap() { final Schema schema = SchemaBuilder.map(Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_FLOAT64_SCHEMA).optional().build(); final Class javaClass = SchemaUtil.getJavaType(schema); assertThat(javaClass, equalTo(Map.class)); }
@Test public void shouldGetCorrectMapKsqlType() throws Exception { final Schema mapSchema = SchemaBuilder.map(Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_FLOAT64_SCHEMA).optional().build(); final Type type = TypeUtil.getKsqlType(mapSchema); assertThat(type.getKsqlType(), equalTo(Type.KsqlType.MAP)); assertThat(type, instanceOf(Map.class)); assertThat(((Map) type).getValueType().getKsqlType(), equalTo(Type.KsqlType.DOUBLE)); }
@Test public void shouldGetCorrectSqlTypeNameForMap() { assertThat(SchemaUtil.getSqlTypeName(SchemaBuilder.map(Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_FLOAT64_SCHEMA).optional().build()), equalTo("MAP<VARCHAR,DOUBLE>")); }
@Test public void shouldBuildCorrectMapField() { final Schema schema = SchemaBuilder .struct() .field("field", SchemaBuilder.map(Schema.STRING_SCHEMA, Schema.INT32_SCHEMA)) .build(); final List<FieldInfo> entity = EntityUtil.buildSourceSchemaEntity(schema); assertThat(entity.size(), equalTo(1)); assertThat(entity.get(0).getName(), equalTo("field")); assertThat(entity.get(0).getSchema().getTypeName(), equalTo("MAP")); assertThat(entity.get(0).getSchema().getFields(), equalTo(Optional.empty())); assertThat(entity.get(0).getSchema().getMemberSchema().get().getTypeName(), equalTo("INTEGER")); }
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(); }
@Before public void before() { orderSchema = SchemaBuilder.struct() .field("ordertime".toUpperCase(), org.apache.kafka.connect.data.Schema.OPTIONAL_INT64_SCHEMA) .field("orderid".toUpperCase(), org.apache.kafka.connect.data.Schema.OPTIONAL_INT64_SCHEMA) .field("itemid".toUpperCase(), org.apache.kafka.connect.data.Schema.OPTIONAL_STRING_SCHEMA) .field("orderunits".toUpperCase(), org.apache.kafka.connect.data.Schema.OPTIONAL_FLOAT64_SCHEMA) .field("arraycol".toUpperCase(), SchemaBuilder.array(org.apache.kafka.connect.data.Schema.OPTIONAL_FLOAT64_SCHEMA).optional().build()) .field("mapcol".toUpperCase(), SchemaBuilder .map(org.apache.kafka.connect.data.Schema.OPTIONAL_STRING_SCHEMA, org.apache.kafka.connect.data.Schema.OPTIONAL_FLOAT64_SCHEMA).optional().build()) .build(); }
@Test public void shouldDeserializeMapToMap() { shouldDeserializeTypeCorrectly( org.apache.avro.SchemaBuilder.map().values().intType(), ImmutableMap.of("one", 1, "two", 2, "three", 3), SchemaBuilder.map( Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_INT32_SCHEMA ).optional().build() ); }
private Schema hstoreMapSchema() { return SchemaBuilder.map( Schema.STRING_SCHEMA, SchemaBuilder.string().optional().build() ) .optional() .build(); }
@Before public void before() { orderSchema = SchemaBuilder.struct() .field("ordertime".toUpperCase(), org.apache.kafka.connect.data.Schema.OPTIONAL_INT64_SCHEMA) .field("orderid".toUpperCase(), org.apache.kafka.connect.data.Schema.OPTIONAL_INT64_SCHEMA) .field("itemid".toUpperCase(), org.apache.kafka.connect.data.Schema.OPTIONAL_STRING_SCHEMA) .field("orderunits".toUpperCase(), org.apache.kafka.connect.data.Schema.OPTIONAL_FLOAT64_SCHEMA) .field("arraycol".toUpperCase(), SchemaBuilder.array(org.apache.kafka.connect.data.Schema.OPTIONAL_FLOAT64_SCHEMA).optional().build()) .field("mapcol".toUpperCase(), SchemaBuilder.map(org.apache.kafka.connect.data.Schema.OPTIONAL_STRING_SCHEMA, org.apache.kafka.connect.data.Schema.OPTIONAL_FLOAT64_SCHEMA).optional().build()) .build(); ksqlJsonDeserializer = new KsqlJsonDeserializer( orderSchema, false, recordLogger); }
@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)); }
@Test public void shouldTranslateMapWithNonStringKey() { final Schema connectSchema = SchemaBuilder .struct() .field("mapfield", SchemaBuilder.map(Schema.INT32_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)); }
@Test public void shouldGetCorrectSqlTypeNameForStruct() { final Schema structSchema = SchemaBuilder.struct() .field("COL1", Schema.OPTIONAL_STRING_SCHEMA) .field("COL2", Schema.OPTIONAL_INT32_SCHEMA) .field("COL3", Schema.OPTIONAL_FLOAT64_SCHEMA) .field("COL4", SchemaBuilder.array(Schema.OPTIONAL_FLOAT64_SCHEMA).optional().build()) .field("COL5", SchemaBuilder.map(Schema.OPTIONAL_STRING_SCHEMA, Schema.OPTIONAL_FLOAT64_SCHEMA).optional().build()) .build(); assertThat(SchemaUtil.getSqlTypeName(structSchema), equalTo( "STRUCT<COL1 VARCHAR, COL2 INT, COL3 DOUBLE, COL4 ARRAY<DOUBLE>, COL5 MAP<VARCHAR,DOUBLE>>")); }