@Override public void alterFieldSchema(Column column, SchemaBuilder schemaBuilder) { schemaBuilder.parameter("masked", "true"); }
@Override public void alterFieldSchema(Column column, SchemaBuilder schemaBuilder) { if (isTruncationPossible(column)) { schemaBuilder.parameter("truncateLength", Integer.toString(converter.maxLength)); } }
@Override public void alterFieldSchema(Column column, SchemaBuilder schemaBuilder) { // upper-casing type names to be consistent across connectors schemaBuilder.parameter(TYPE_NAME_PARAMETER_KEY, column.typeName().toUpperCase(Locale.ENGLISH)); if (column.length() != Column.UNSET_INT_VALUE) { schemaBuilder.parameter(TYPE_LENGTH_PARAMETER_KEY, String.valueOf(column.length())); } if (column.scale().isPresent()) { schemaBuilder.parameter(TYPE_SCALE_PARAMETER_KEY, String.valueOf(column.scale().get())); } } }
/** * Returns a {@link SchemaBuilder} for a Bits. You can use the resulting SchemaBuilder * to set additional schema settings such as required/optional, default value, and documentation. * * @param length maximum the number of bits in the set * @return the schema builder */ public static SchemaBuilder builder(int length) { return SchemaBuilder.bytes() .name(LOGICAL_NAME) .parameter(LENGTH_FIELD, Integer.toString(length)) .version(1); }
/** * Returns a {@link SchemaBuilder} for a decimal number depending on {@link JdbcValueConverters.DecimalMode}. You * can use the resulting schema builder to set additional schema settings such as required/optional, default value, * and documentation. * * @param mode the mode in which the number should be encoded * @param precision the precision of the decimal * @param scale scale of the decimal * @return the schema builder */ public static SchemaBuilder builder(DecimalMode mode, int precision, int scale) { switch (mode) { case DOUBLE: return SchemaBuilder.float64(); case PRECISE: return Decimal.builder(scale) .parameter(PRECISION_PARAMETER_KEY, String.valueOf(precision)); case STRING: return SchemaBuilder.string(); } throw new IllegalArgumentException("Unknown decimalMode"); }
/** * Returns a {@link SchemaBuilder} for an enumeration. You can use the resulting SchemaBuilder * to set additional schema settings such as required/optional, default value, and documentation. * * @param allowedValues the comma separated list of allowed values; may not be null * @return the schema builder */ public static SchemaBuilder builder(String allowedValues) { return SchemaBuilder.string() .name(LOGICAL_NAME) .parameter(VALUES_FIELD, allowedValues) .version(1); }
/** * Returns a {@link SchemaBuilder} for a set of enumerated values. You can use the resulting SchemaBuilder * to set additional schema settings such as required/optional, default value, and documentation. * * @param allowedValues the comma separated list of allowed values; may not be null * @return the schema builder */ public static SchemaBuilder builder(String allowedValues) { return SchemaBuilder.string() .name(LOGICAL_NAME) .parameter(VALUES_FIELD, allowedValues) .version(1); }
protected List<SchemaAndValueField> schemasAndValuesForNumericTypesWithSourceColumnTypeInfo() { return Arrays.asList(new SchemaAndValueField("d", SchemaBuilder.float64().optional() .parameter(TestHelper.TYPE_NAME_PARAMETER_KEY, "NUMERIC") .parameter(TestHelper.TYPE_LENGTH_PARAMETER_KEY, "3") .parameter(TestHelper.TYPE_SCALE_PARAMETER_KEY, "2") .build(), 1.1d ), new SchemaAndValueField("dzs", SchemaBuilder.float64().optional() .parameter(TestHelper.TYPE_NAME_PARAMETER_KEY, "NUMERIC") .parameter(TestHelper.TYPE_LENGTH_PARAMETER_KEY, "4") .parameter(TestHelper.TYPE_SCALE_PARAMETER_KEY, "0") .build(), 10d ), new SchemaAndValueField("dvs", Schema.OPTIONAL_FLOAT64_SCHEMA, 10.1111d), new SchemaAndValueField("n", Schema.OPTIONAL_FLOAT64_SCHEMA, 22.22d), new SchemaAndValueField("nzs", Schema.OPTIONAL_FLOAT64_SCHEMA, 22d), new SchemaAndValueField("nvs", Schema.OPTIONAL_FLOAT64_SCHEMA, 22.2222d) ); }
protected List<SchemaAndValueField> schemasAndValuesForStringTypesWithSourceColumnTypeInfo() { return Arrays.asList(new SchemaAndValueField("vc", SchemaBuilder.string().optional() .parameter(TestHelper.TYPE_NAME_PARAMETER_KEY, "VARCHAR") .parameter(TestHelper.TYPE_LENGTH_PARAMETER_KEY, "2") .parameter(TestHelper.TYPE_SCALE_PARAMETER_KEY, "0") .build(), "\u017E\u0161" ), new SchemaAndValueField("vcv", SchemaBuilder.string().optional() .parameter(TestHelper.TYPE_NAME_PARAMETER_KEY, "VARCHAR") .parameter(TestHelper.TYPE_LENGTH_PARAMETER_KEY, "2") .parameter(TestHelper.TYPE_SCALE_PARAMETER_KEY, "0") .build(), "bb" ), new SchemaAndValueField("ch", Schema.OPTIONAL_STRING_SCHEMA, "cdef"), new SchemaAndValueField("c", Schema.OPTIONAL_STRING_SCHEMA, "abc"), new SchemaAndValueField("t", Schema.OPTIONAL_STRING_SCHEMA, "some text"), new SchemaAndValueField("b", Schema.OPTIONAL_BYTES_SCHEMA, ByteBuffer.wrap(new byte[] {0, 1, 2})), new SchemaAndValueField("bnn", Schema.BYTES_SCHEMA, ByteBuffer.wrap(new byte[] {3, 4, 5})) ); }
protected List<SchemaAndValueField> schemasAndValuesForBigDecimalEncodedNumericTypes() { final Struct dvs = new Struct(VariableScaleDecimal.schema()); dvs.put("scale", 4).put("value", new BigDecimal("10.1111").unscaledValue().toByteArray()); final Struct nvs = new Struct(VariableScaleDecimal.schema()); nvs.put("scale", 4).put("value", new BigDecimal("22.2222").unscaledValue().toByteArray()); final Struct dvs_int = new Struct(VariableScaleDecimal.schema()); dvs_int.put("scale", 0).put("value", new BigDecimal("10").unscaledValue().toByteArray()); final Struct nvs_int = new Struct(VariableScaleDecimal.schema()); nvs_int.put("scale", 0).put("value", new BigDecimal("22").unscaledValue().toByteArray()); final List<SchemaAndValueField> fields = new ArrayList<SchemaAndValueField>(Arrays.asList( new SchemaAndValueField("d", Decimal.builder(2).parameter(TestHelper.PRECISION_PARAMETER_KEY, "3").optional().build(), new BigDecimal("1.10")), new SchemaAndValueField("dzs", Decimal.builder(0).parameter(TestHelper.PRECISION_PARAMETER_KEY, "4").optional().build(), new BigDecimal("10")), new SchemaAndValueField("dvs", VariableScaleDecimal.optionalSchema(), dvs), new SchemaAndValueField("d_nn", Decimal.builder(2).parameter(TestHelper.PRECISION_PARAMETER_KEY, "3").build(), new BigDecimal("3.30")), new SchemaAndValueField("n", Decimal.builder(4).parameter(TestHelper.PRECISION_PARAMETER_KEY, "6").optional().build(), new BigDecimal("22.2200")), new SchemaAndValueField("nzs", Decimal.builder(0).parameter(TestHelper.PRECISION_PARAMETER_KEY, "4").optional().build(), new BigDecimal("22")), new SchemaAndValueField("nvs", VariableScaleDecimal.optionalSchema(), nvs), new SchemaAndValueField("d_int", Decimal.builder(2).parameter(TestHelper.PRECISION_PARAMETER_KEY, "3").optional().build(), new BigDecimal("1.00")), new SchemaAndValueField("dvs_int", VariableScaleDecimal.optionalSchema(), dvs_int), new SchemaAndValueField("n_int", Decimal.builder(4).parameter(TestHelper.PRECISION_PARAMETER_KEY, "6").optional().build(), new BigDecimal("22.0000")), new SchemaAndValueField("nvs_int", VariableScaleDecimal.optionalSchema(), nvs_int) )); return fields; }
(int)LocalDate.of(2016, Month.NOVEMBER, 6).toEpochDay() )), new SchemaAndValueField("numeric_array", SchemaBuilder.array(Decimal.builder(2).parameter(TestHelper.PRECISION_PARAMETER_KEY, "10").optional().build()).optional().build(), Arrays.asList( new BigDecimal("1.20"),
assertRecordSchemaAndValues(expectedBefore, updatedRecord, Envelope.FieldName.BEFORE); List<SchemaAndValueField> expectedAfter = Collections.singletonList(new SchemaAndValueField("num_val", Decimal.builder(2).parameter(TestHelper.PRECISION_PARAMETER_KEY, "5").optional().build(), new BigDecimal("123.45"))); assertRecordSchemaAndValues(expectedAfter, updatedRecord, Envelope.FieldName.AFTER); Collections.singletonList(new SchemaAndValueField("num_val", Decimal.builder(1).parameter(TestHelper.PRECISION_PARAMETER_KEY, "6").optional().build(), new BigDecimal("123.4"))), updatedRecord, Envelope.FieldName.AFTER); Collections.singletonList(new SchemaAndValueField("num_val", Decimal.builder(4).parameter(TestHelper.PRECISION_PARAMETER_KEY, "12").optional().build(), new BigDecimal("2.4800"))), updatedRecord, Envelope.FieldName.AFTER); Collections.singletonList(new SchemaAndValueField("num_val", Decimal.builder(0).parameter(TestHelper.PRECISION_PARAMETER_KEY, "12").optional().build(), new BigDecimal("1238"))), updatedRecord, Envelope.FieldName.AFTER);
Assertions.assertThat(results).hasSize(1); final Struct valueA = (Struct) results.get(0).value(); Assertions.assertThat(valueA.schema().field("after").schema().field("cola").schema()).isEqualTo(Decimal.builder(4).parameter("connect.decimal.precision", "8").optional().schema()); Assertions.assertThat(valueA.schema().field("after").schema().field("colb").schema()).isEqualTo(Decimal.builder(0).parameter("connect.decimal.precision", "18").optional().schema()); Assertions.assertThat(valueA.schema().field("after").schema().field("colc").schema()).isEqualTo(Decimal.builder(1).parameter("connect.decimal.precision", "8").optional().schema()); Assertions.assertThat(valueA.schema().field("after").schema().field("cold").schema()).isEqualTo(Decimal.builder(0).parameter("connect.decimal.precision", "18").optional().schema()); Assertions.assertThat(((Struct) valueA.get("after")).get("cola")).isEqualTo(BigDecimal.valueOf(333.3333)); Assertions.assertThat(((Struct) valueA.get("after")).get("colb")).isEqualTo(BigDecimal.valueOf(3333));
protected List<SchemaAndValueField> schemasAndValuesForArrayTypesWithNullValues() { return Arrays.asList( new SchemaAndValueField("int_array", SchemaBuilder.array(Schema.OPTIONAL_INT32_SCHEMA).optional().build(), null), new SchemaAndValueField("bigint_array", SchemaBuilder.array(Schema.OPTIONAL_INT64_SCHEMA).optional().build(), null), new SchemaAndValueField("text_array", SchemaBuilder.array(Schema.OPTIONAL_STRING_SCHEMA).optional().build(), null), new SchemaAndValueField("char_array", SchemaBuilder.array(Schema.OPTIONAL_STRING_SCHEMA).optional().build(), null), new SchemaAndValueField("varchar_array", SchemaBuilder.array(Schema.OPTIONAL_STRING_SCHEMA).optional().build(), null), new SchemaAndValueField("date_array", SchemaBuilder.array(Date.builder().optional().schema()).optional().build(), null), new SchemaAndValueField("numeric_array", SchemaBuilder.array(Decimal.builder(2).parameter(TestHelper.PRECISION_PARAMETER_KEY, "10").optional().build()).optional().build(), null), new SchemaAndValueField("citext_array", SchemaBuilder.array(Schema.OPTIONAL_STRING_SCHEMA).optional().build(), null) ); }
Schema.OPTIONAL_FLOAT64_SCHEMA, Schema.INT16_SCHEMA, Schema.INT64_SCHEMA, Schema.OPTIONAL_BOOLEAN_SCHEMA); assertTableSchema("public.numeric_decimal_table", "d, dzs, dvs, n, nzs, nvs", Decimal.builder(2).parameter(TestHelper.PRECISION_PARAMETER_KEY, "3").optional().build(), Decimal.builder(0).parameter(TestHelper.PRECISION_PARAMETER_KEY, "4").optional().build(), VariableScaleDecimal.builder().optional().build(), Decimal.builder(4).parameter(TestHelper.PRECISION_PARAMETER_KEY, "6").optional().build(), Decimal.builder(0).parameter(TestHelper.PRECISION_PARAMETER_KEY, "4").optional().build(), VariableScaleDecimal.builder().optional().build() );
assertThat(values.field("C2").name()).isEqualTo("C2"); assertThat(values.field("C2").index()).isEqualTo(1); assertThat(values.field("C2").schema()).isEqualTo(Decimal.builder(3).parameter("connect.decimal.precision", "5").optional().build()); // scale of 3 assertThat(values.field("C3").name()).isEqualTo("C3"); assertThat(values.field("C3").index()).isEqualTo(2);
@Override public void alterFieldSchema(Column column, SchemaBuilder schemaBuilder) { if (isTruncationPossible(column)) { schemaBuilder.parameter("truncateLength", Integer.toString(converter.maxLength)); } }
@Override public void alterFieldSchema(Column column, SchemaBuilder schemaBuilder) { // upper-casing type names to be consistent across connectors schemaBuilder.parameter(TYPE_NAME_PARAMETER_KEY, column.typeName().toUpperCase(Locale.ENGLISH)); if (column.length() != Column.UNSET_INT_VALUE) { schemaBuilder.parameter(TYPE_LENGTH_PARAMETER_KEY, String.valueOf(column.length())); } if (column.scale().isPresent()) { schemaBuilder.parameter(TYPE_SCALE_PARAMETER_KEY, String.valueOf(column.scale().get())); } } }
/** * Returns a SchemaBuilder for a Decimal with the given scale factor. By returning a SchemaBuilder you can override * additional schema settings such as required/optional, default value, and documentation. * @param scale the scale factor to apply to unscaled values * @return a SchemaBuilder */ public static SchemaBuilder builder(int scale) { return SchemaBuilder.bytes() .name(LOGICAL_NAME) .parameter(SCALE_FIELD, Integer.toString(scale)) .version(1); }
protected List<SchemaAndValueField> schemasAndValuesForArrayTypesWithNullValues() { return Arrays.asList( new SchemaAndValueField("int_array", SchemaBuilder.array(Schema.OPTIONAL_INT32_SCHEMA).optional().build(), null), new SchemaAndValueField("bigint_array", SchemaBuilder.array(Schema.OPTIONAL_INT64_SCHEMA).optional().build(), null), new SchemaAndValueField("text_array", SchemaBuilder.array(Schema.OPTIONAL_STRING_SCHEMA).optional().build(), null), new SchemaAndValueField("char_array", SchemaBuilder.array(Schema.OPTIONAL_STRING_SCHEMA).optional().build(), null), new SchemaAndValueField("varchar_array", SchemaBuilder.array(Schema.OPTIONAL_STRING_SCHEMA).optional().build(), null), new SchemaAndValueField("date_array", SchemaBuilder.array(Date.builder().optional().schema()).optional().build(), null), new SchemaAndValueField("numeric_array", SchemaBuilder.array(Decimal.builder(2).parameter(TestHelper.PRECISION_PARAMETER_KEY, "10").optional().build()).optional().build(), null), new SchemaAndValueField("citext_array", SchemaBuilder.array(Schema.OPTIONAL_STRING_SCHEMA).optional().build(), null) ); }