@Test public void shouldNotMatchDifferentName() { final Field field = new Field("foo", 0, Schema.INT32_SCHEMA); assertThat(SchemaUtil.matchFieldName(field, "bar"), is(false)); }
@Test public void shouldMatchNameWithAlias() { final Field field = new Field("foo", 0, Schema.INT32_SCHEMA); assertThat(SchemaUtil.matchFieldName(field, "bar.foo"), is(true)); }
@Test public void shouldMatchName() { final Field field = new Field("foo", 0, Schema.INT32_SCHEMA); assertThat(SchemaUtil.matchFieldName(field, "foo"), is(true)); }
private void convertDefaultValueToSchemaType(ColumnEditor columnEditor) { final Column column = columnEditor.create(); // if converters is not null and the default value is not null, we need to convert default value if (converters != null && columnEditor.defaultValue() != null) { Object defaultValue = columnEditor.defaultValue(); final SchemaBuilder schemaBuilder = converters.schemaBuilder(column); if (schemaBuilder == null) { return; } final Schema schema = schemaBuilder.build(); //In order to get the valueConverter for this column, we have to create a field; //The index value -1 in the field will never used when converting default value; //So we can set any number here; final Field field = new Field(column.name(), -1, schema); final ValueConverter valueConverter = converters.converter(column, field); if (defaultValue instanceof String) { defaultValue = defaultValuePreConverter.convert(column, (String)defaultValue); } defaultValue = valueConverter.convert(defaultValue); columnEditor.defaultValue(defaultValue); } }
private void convertDefaultValueToSchemaType(ColumnEditor columnEditor) { final Column column = columnEditor.create(); // if converters is not null and the default value is not null, we need to convert default value if (converters != null && columnEditor.defaultValue() != null) { Object defaultValue = columnEditor.defaultValue(); final SchemaBuilder schemaBuilder = converters.schemaBuilder(column); if (schemaBuilder == null) { return; } final Schema schema = schemaBuilder.build(); //In order to get the valueConverter for this column, we have to create a field; //The index value -1 in the field will never used when converting default value; //So we can set any number here; final Field field = new Field(column.name(), -1, schema); final ValueConverter valueConverter = converters.converter(column, field); if (defaultValue instanceof String) { defaultValue = defaultValuePreConverter.convert(column, (String)defaultValue); } defaultValue = valueConverter.convert(defaultValue); columnEditor.defaultValue(defaultValue); } }
private ValueConverter createArrayConverter(Column column, Field fieldDefn) { PostgresType arrayType = typeRegistry.get(column.nativeType()); PostgresType elementType = arrayType.getElementType(); final String elementTypeName = elementType.getName(); final String elementColumnName = column.name() + "-element"; final Column elementColumn = Column.editor() .name(elementColumnName) .jdbcType(elementType.getJdbcId()) .nativeType(elementType.getOid()) .type(elementTypeName) .optional(true) .scale(column.scale().orElse(null)) .length(column.length()) .create(); Schema elementSchema = schemaBuilder(elementColumn) .optional() .build(); final Field elementField = new Field(elementColumnName, 0, elementSchema); final ValueConverter elementConverter = converter(elementColumn, elementField); return data -> convertArray(column, fieldDefn, elementConverter, data); }
@Test public void testJsonValues() { String sql = "CREATE TABLE JSON_TABLE (" + " A JSON," + " B JSON NOT NULL" + ");"; MySqlValueConverters converters = new MySqlValueConverters(JdbcValueConverters.DecimalMode.DOUBLE, TemporalPrecisionMode.CONNECT, JdbcValueConverters.BigIntUnsignedMode.LONG); DdlParser parser = new MySqlAntlrDdlParser(); Tables tables = new Tables(); parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "JSON_TABLE")); // ColA - Nullable column Column colA= table.columnWithName("A"); Field fieldA = new Field(colA.name(), -1, converters.schemaBuilder(colA).optional().build()); assertThat(converters.converter(colA, fieldA).convert("{}")).isEqualTo("{}"); assertThat(converters.converter(colA, fieldA).convert("[]")).isEqualTo("[]"); assertThat(converters.converter(colA, fieldA).convert(new byte[0])).isNull(); assertThat(converters.converter(colA, fieldA).convert(null)).isNull(); assertThat(converters.converter(colA, fieldA).convert("{ \"key1\": \"val1\", \"key2\": {\"key3\":\"val3\"} }")).isEqualTo("{ \"key1\": \"val1\", \"key2\": {\"key3\":\"val3\"} }"); // ColB - NOT NUll column Column colB= table.columnWithName("B"); Field fieldB = new Field(colB.name(), -1, converters.schemaBuilder(colB).build()); assertThat(converters.converter(colB, fieldB).convert("{}")).isEqualTo("{}"); assertThat(converters.converter(colB, fieldB).convert("[]")).isEqualTo("[]"); assertThat(converters.converter(colB, fieldB).convert(new byte[0])).isEqualTo("{}"); assertThat(converters.converter(colB, fieldB).convert(null)).isEqualTo("{}"); assertThat(converters.converter(colB, fieldB).convert("{ \"key1\": \"val1\", \"key2\": {\"key3\":\"val3\"} }")).isEqualTo("{ \"key1\": \"val1\", \"key2\": {\"key3\":\"val3\"} }"); }
/** * Add a field to this struct schema. Throws a SchemaBuilderException if this is not a struct schema. * @param fieldName the name of the field to add * @param fieldSchema the Schema for the field's value * @return the SchemaBuilder */ public SchemaBuilder field(String fieldName, Schema fieldSchema) { if (type != Type.STRUCT) throw new SchemaBuilderException("Cannot create fields on type " + type); if (null == fieldName || fieldName.isEmpty()) throw new SchemaBuilderException("fieldName cannot be null."); if (null == fieldSchema) throw new SchemaBuilderException("fieldSchema for field " + fieldName + " cannot be null."); int fieldIndex = fields.size(); if (fields.containsKey(fieldName)) throw new SchemaBuilderException("Cannot create field because of field name duplication " + fieldName); fields.put(fieldName, new Field(fieldName, fieldIndex, fieldSchema)); return this; }
private ValueConverter createArrayConverter(Column column, Field fieldDefn) { PostgresType arrayType = typeRegistry.get(column.nativeType()); PostgresType elementType = arrayType.getElementType(); final String elementTypeName = elementType.getName(); final String elementColumnName = column.name() + "-element"; final Column elementColumn = Column.editor() .name(elementColumnName) .jdbcType(elementType.getJdbcId()) .nativeType(elementType.getOid()) .type(elementTypeName) .optional(true) .scale(column.scale().orElse(null)) .length(column.length()) .create(); Schema elementSchema = schemaBuilder(elementColumn) .optional() .build(); final Field elementField = new Field(elementColumnName, 0, elementSchema); final ValueConverter elementConverter = converter(elementColumn, elementField); return data -> convertArray(column, fieldDefn, elementConverter, data); }
@Test public void testJsonValues() { String sql = "CREATE TABLE JSON_TABLE (" + " A JSON," + " B JSON NOT NULL" + ");"; MySqlValueConverters converters = new MySqlValueConverters(JdbcValueConverters.DecimalMode.DOUBLE, TemporalPrecisionMode.CONNECT, JdbcValueConverters.BigIntUnsignedMode.LONG); DdlParser parser = new MySqlAntlrDdlParser(); Tables tables = new Tables(); parser.parse(sql, tables); Table table = tables.forTable(new TableId(null, null, "JSON_TABLE")); // ColA - Nullable column Column colA= table.columnWithName("A"); Field fieldA = new Field(colA.name(), -1, converters.schemaBuilder(colA).optional().build()); assertThat(converters.converter(colA, fieldA).convert("{}")).isEqualTo("{}"); assertThat(converters.converter(colA, fieldA).convert("[]")).isEqualTo("[]"); assertThat(converters.converter(colA, fieldA).convert(new byte[0])).isNull(); assertThat(converters.converter(colA, fieldA).convert(null)).isNull(); assertThat(converters.converter(colA, fieldA).convert("{ \"key1\": \"val1\", \"key2\": {\"key3\":\"val3\"} }")).isEqualTo("{ \"key1\": \"val1\", \"key2\": {\"key3\":\"val3\"} }"); // ColB - NOT NUll column Column colB= table.columnWithName("B"); Field fieldB = new Field(colB.name(), -1, converters.schemaBuilder(colB).build()); assertThat(converters.converter(colB, fieldB).convert("{}")).isEqualTo("{}"); assertThat(converters.converter(colB, fieldB).convert("[]")).isEqualTo("[]"); assertThat(converters.converter(colB, fieldB).convert(new byte[0])).isEqualTo("{}"); assertThat(converters.converter(colB, fieldB).convert(null)).isEqualTo("{}"); assertThat(converters.converter(colB, fieldB).convert("{ \"key1\": \"val1\", \"key2\": {\"key3\":\"val3\"} }")).isEqualTo("{ \"key1\": \"val1\", \"key2\": {\"key3\":\"val3\"} }"); }