public static PrimitiveType getPrimitiveType(final String typeName) { switch (typeName) { case "BOOLEAN": return new PrimitiveType(Type.KsqlType.BOOLEAN); case "INT": case "INTEGER": return new PrimitiveType(Type.KsqlType.INTEGER); case "BIGINT": return new PrimitiveType(Type.KsqlType.BIGINT); case "DOUBLE": return new PrimitiveType(Type.KsqlType.DOUBLE); case "VARCHAR": case "STRING": return new PrimitiveType(Type.KsqlType.STRING); default: throw new KsqlException("Invalid primitive column type: " + typeName); } }
public static Type getKsqlType(final Schema schema) { switch (schema.type()) { case INT32: return new PrimitiveType(Type.KsqlType.INTEGER); case INT64: return new PrimitiveType(Type.KsqlType.BIGINT); case FLOAT32: case FLOAT64: return new PrimitiveType(Type.KsqlType.DOUBLE); case BOOLEAN: return new PrimitiveType(Type.KsqlType.BOOLEAN); case STRING: return new PrimitiveType(Type.KsqlType.STRING); case ARRAY: return new Array(getKsqlType(schema.valueSchema())); case MAP: return new Map(getKsqlType(schema.valueSchema())); case STRUCT: return new Struct(getStructItems(schema)); default: throw new KsqlException(String.format("Invalid type in schema: %s.", schema.toString())); } }
@Test public void shouldGetCorrectPrimitiveSchema() throws Exception { final Schema schema1 = TypeUtil.getTypeSchema(new PrimitiveType(Type.KsqlType.BIGINT)); assertThat(schema1, equalTo(Schema.OPTIONAL_INT64_SCHEMA)); final Schema schema2 = TypeUtil.getTypeSchema(new PrimitiveType(Type.KsqlType.BOOLEAN)); assertThat(schema2, equalTo(Schema.OPTIONAL_BOOLEAN_SCHEMA)); final Schema schema3 = TypeUtil.getTypeSchema(new PrimitiveType(Type.KsqlType.INTEGER)); assertThat(schema3, equalTo(Schema.OPTIONAL_INT32_SCHEMA)); final Schema schema4 = TypeUtil.getTypeSchema(new PrimitiveType(Type.KsqlType.DOUBLE)); assertThat(schema4, equalTo(Schema.OPTIONAL_FLOAT64_SCHEMA)); final Schema schema5 = TypeUtil.getTypeSchema(new PrimitiveType(Type.KsqlType.STRING)); assertThat(schema5, equalTo(Schema.OPTIONAL_STRING_SCHEMA)); final Schema schema6 = TypeUtil.getTypeSchema(new PrimitiveType(Type.KsqlType.BIGINT)); assertThat(schema6, equalTo(Schema.OPTIONAL_INT64_SCHEMA)); }
@Test public void shouldFormatStruct() { final Struct struct = new Struct( ImmutableList.of( new Pair<>("field1", new PrimitiveType(Type.KsqlType.INTEGER)), new Pair<>("field2", new PrimitiveType(Type.KsqlType.STRING)) )); assertThat( ExpressionFormatter.formatExpression(struct), equalTo("STRUCT<field1 INTEGER, field2 STRING>")); }
@Test public void shouldFormatStructWithColumnWithReservedWordName() { final Struct struct = new Struct( ImmutableList.of( new Pair<>("END", new PrimitiveType(Type.KsqlType.INTEGER)) )); assertThat( ExpressionFormatter.formatExpression(struct), equalTo("STRUCT<`END` INTEGER>")); }
@Test public void shouldFormatMap() { final Map map = new Map(new PrimitiveType(Type.KsqlType.BIGINT)); assertThat(ExpressionFormatter.formatExpression(map), equalTo("MAP<VARCHAR, BIGINT>")); }
@Test public void shouldGetCorrectArraySchema() throws Exception { final Schema schema = TypeUtil.getTypeSchema(new Array(new PrimitiveType(Type.KsqlType.STRING))); assertThat(schema.type(), equalTo(Schema.Type.ARRAY)); assertThat(schema.valueSchema().type(), equalTo(Schema.Type.STRING)); }
@Test public void shouldFormatArray() { final Array array = new Array(new PrimitiveType(Type.KsqlType.BOOLEAN)); assertThat(ExpressionFormatter.formatExpression(array), equalTo("ARRAY<BOOLEAN>")); } }
@Test public void shouldGetCorrectMapSchema() throws Exception { final Schema schema = TypeUtil.getTypeSchema(new Map(new PrimitiveType(Type.KsqlType.DOUBLE))); assertThat(schema.type(), equalTo(Schema.Type.MAP)); assertThat(schema.valueSchema().type(), equalTo(Schema.Type.FLOAT64)); }
new Pair<>("COL1", new PrimitiveType(Type.KsqlType.STRING)), new Pair<>("COL2", new PrimitiveType(Type.KsqlType.BIGINT)), new Pair<>("COL3", new PrimitiveType(Type.KsqlType.BOOLEAN)) )); new Pair<>("COL1", new PrimitiveType(Type.KsqlType.STRING)), new Pair<>("COL2", new PrimitiveType(Type.KsqlType.BIGINT)), new Pair<>("COL3", new PrimitiveType(Type.KsqlType.BOOLEAN)), new Pair<>("COL4", new Array(new PrimitiveType(Type.KsqlType.STRING))), new Pair<>("COL5", new Map(new PrimitiveType(Type.KsqlType.DOUBLE))), new Pair<>("COL6", internalStruct) ));
@Test public void testFormatSql() { final ArrayList<TableElement> tableElements = new ArrayList<>(); tableElements.add(new TableElement("GROUP", new PrimitiveType(Type.KsqlType.STRING))); tableElements.add(new TableElement("NOLIT", new PrimitiveType(Type.KsqlType.STRING))); tableElements.add(new TableElement("Having", new PrimitiveType(Type.KsqlType.STRING))); final CreateStream createStream = new CreateStream( QualifiedName.of("TEST"), tableElements, false, Collections.singletonMap( DdlConfig.TOPIC_NAME_PROPERTY, new StringLiteral("topic_test") )); final String sql = SqlFormatter.formatSql(createStream); assertThat("literal escaping failure", sql, containsString("`GROUP` STRING")); assertThat("not literal escaping failure", sql, containsString("NOLIT STRING")); assertThat("lowercase literal escaping failure", sql, containsString("`Having` STRING")); final List<PreparedStatement<?>> statements = new KsqlParser().buildAst(sql, MetaStoreFixture.getNewMetaStore(new TestFunctionRegistry())); assertFalse("formatted sql parsing error", statements.isEmpty()); }
Collections.singletonList(new TableElement( "STATEMENT", new PrimitiveType(Type.KsqlType.STRING) )), false,