private static SchemaInfo.Type getSchemaTypeString(final Schema.Type type) { switch (type) { case INT32: return SchemaInfo.Type.INTEGER; case INT64: return SchemaInfo.Type.BIGINT; case FLOAT32: case FLOAT64: return SchemaInfo.Type.DOUBLE; case BOOLEAN: return SchemaInfo.Type.BOOLEAN; case STRING: return SchemaInfo.Type.STRING; case ARRAY: return SchemaInfo.Type.ARRAY; case MAP: return SchemaInfo.Type.MAP; case STRUCT: return SchemaInfo.Type.STRUCT; default: throw new RuntimeException(String.format("Invalid type in schema: %s.", type.getName())); } } }
@Test public void shouldThrowOnTypeMismatch() { final Schema schema = SchemaBuilder.struct() .field("FIELD", SchemaBuilder.OPTIONAL_INT32_SCHEMA) .optional() .build(); final Schema badSchema = SchemaBuilder.struct() .field("FIELD", SchemaBuilder.OPTIONAL_STRING_SCHEMA) .optional() .build(); final Struct badData = new Struct(badSchema); badData.put("FIELD", "fubar"); final ConnectDataTranslator connectToKsqlTranslator = new ConnectDataTranslator(schema); try { connectToKsqlTranslator.toKsqlRow(badSchema, badData); Assert.fail("Translation failed to detect bad connect type"); } catch (final DataException e) { assertThat(e.getMessage(), containsString(Schema.Type.STRING.getName())); assertThat(e.getMessage(), containsString(Schema.Type.INT32.getName())); assertThat(e.getMessage(), containsString("FIELD")); } }
@Override public String encodePartition(SinkRecord sinkRecord) { Object value = sinkRecord.value(); Schema valueSchema = sinkRecord.valueSchema(); if (value instanceof Struct) { Struct struct = (Struct) value; Object partitionKey = struct.get(fieldName); Type type = valueSchema.field(fieldName).schema().type(); switch (type) { case INT8: case INT16: case INT32: case INT64: Number record = (Number) partitionKey; return fieldName + "=" + record.toString(); case STRING: return fieldName + "=" + (String) partitionKey; case BOOLEAN: boolean booleanRecord = (boolean) partitionKey; return fieldName + "=" + Boolean.toString(booleanRecord); default: log.error("Type {} is not supported as a partition key.", type.getName()); throw new PartitionException("Error encoding partition."); } } else { log.error("Value is not Struct type."); throw new PartitionException("Error encoding partition."); } }
private SinkFieldConverter getConverter(Schema schema) { SinkFieldConverter converter; if(isSupportedLogicalType(schema)) { converter = logicalConverters.get(schema.name()); } else { converter = converters.get(schema.type()); } if (converter == null) { throw new ConnectException("error no registered converter found for " + schema.type().getName()); } return converter; } }
private SinkFieldConverter getConverter(Schema schema) { SinkFieldConverter converter; if(isSupportedLogicalType(schema)) { converter = logicalConverters.get(schema.name()); } else { converter = converters.get(schema.type()); } if (converter == null) { throw new ConnectException("error no registered converter found for " + schema.type().getName()); } return converter; } }
private void validateSchema(final String pathStr, final Schema schema, final Schema connectSchema) { switch (schema.type()) { case BOOLEAN: case ARRAY: case MAP: case STRUCT: validateType(pathStr, schema, connectSchema); break; case STRING: validateType(pathStr, schema, connectSchema, STRING_ACCEPTABLE_TYPES); break; case INT64: validateType(pathStr, schema, connectSchema, INT64_ACCEPTABLE_TYPES); break; case INT32: validateType(pathStr, schema, connectSchema, INT32_ACCEPTABLE_TYPES); break; case FLOAT64: validateType(pathStr, schema, connectSchema, FLOAT64_ACCEPTABLE_TYPES); break; default: throw new RuntimeException( "Unexpected data type seen in schema: " + schema.type().getName()); } }
protected Schema toKsqlFieldSchema(final Schema schema) { // CHECKSTYLE_RULES.ON: CyclomaticComplexity switch (schema.type()) { case INT8: case INT16: case INT32: return Schema.OPTIONAL_INT32_SCHEMA; case FLOAT32: case FLOAT64: return Schema.OPTIONAL_FLOAT64_SCHEMA; case INT64: case STRING: case BOOLEAN: return SchemaBuilder.type(schema.type()).optional().build(); case ARRAY: return toKsqlArraySchema(schema); case MAP: return toKsqlMapSchema(schema); case STRUCT: return toKsqlStructSchema(schema); default: throw new UnsupportedTypeException( String.format("Unsupported type: %s", schema.type().getName())); } }
private void checkMapKeyType(final Schema.Type type) { switch (type) { case INT8: case INT16: case INT32: case INT64: case BOOLEAN: case STRING: return; default: throw new UnsupportedTypeException("Unsupported type for map key: " + type.getName()); } }