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); } }
@Override public boolean equals(final Object obj) { if (obj instanceof PrimitiveType) { return ((PrimitiveType) obj).getKsqlType() == ksqlType; } return false; } }
private static Type getType(final SqlBaseParser.TypeContext type) { if (type.baseType() != null) { return PrimitiveType.getPrimitiveType(baseTypeToString(type.baseType())); } if (type.ARRAY() != null) { return new Array(getType(type.type(0))); } if (type.MAP() != null) { return new io.confluent.ksql.parser.tree.Map(getType(type.type(1))); } if (type.STRUCT() != null) { final List<Pair<String, Type>> structItems = new ArrayList<>(); for (int i = 0; i < type.identifier().size(); i++) { final String itemName = getIdentifierText(type.identifier(i)); final Type itemType = getType(type.type(i)); structItems.add(new Pair<>(itemName, itemType)); } return new Struct(structItems); } throw new IllegalArgumentException("Unsupported type specification: " + type.getText()); }
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())); } }
@Override protected String visitPrimitiveType(final PrimitiveType node, final Boolean unmangleNames) { return node.getKsqlType().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 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 shouldFormatMap() { final Map map = new Map(new PrimitiveType(Type.KsqlType.BIGINT)); assertThat(ExpressionFormatter.formatExpression(map), equalTo("MAP<VARCHAR, BIGINT>")); }
@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,