protected Node visitCreateStream(final CreateStream node, final Object context) { return new CreateStream( node.getLocation(), node.getName(), node.getElements().stream() .map(tableElement -> (TableElement) process(tableElement, context)) .collect(Collectors.toList()), node.isNotExists(), node.getProperties().entrySet().stream() .collect(Collectors.toMap( Map.Entry::getKey, e -> (Expression) process(e.getValue(), context) )) ); }
@Override protected Void visitCreateStream(final CreateStream node, final Integer indent) { builder.append("CREATE STREAM "); if (node.isNotExists()) { builder.append("IF NOT EXISTS "); builder.append(node.getName()) .append(" \n"); if (!node.getElements().isEmpty()) { builder.append("("); boolean addComma = false; for (final TableElement tableElement : node.getElements()) { if (addComma) { builder.append(", "); if (!node.getProperties().isEmpty()) { builder.append(" WITH ("); boolean addComma = false; for (final Map.Entry property: node.getProperties().entrySet()) { if (addComma) { builder.append(", ");
@Test public void testCreateStreamWithTopic() { final String queryStr = "CREATE STREAM orders (ordertime bigint, orderid varchar, itemid varchar, orderunits " + "double) WITH (registered_topic = 'orders_topic' , key='ordertime');"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); final StatementRewriter statementRewriter = new StatementRewriter(); final Statement rewrittenStatement = (Statement) statementRewriter.process(statement, null); assertThat(rewrittenStatement, instanceOf(CreateStream.class)); final CreateStream createStream = (CreateStream)rewrittenStatement; assertThat(createStream.getName().toString(), equalTo("ORDERS")); assertThat(createStream.getElements().size(), equalTo(4)); assertThat(createStream.getElements().get(0).getName(), equalTo("ORDERTIME")); assertThat(createStream.getProperties().get(DdlConfig.TOPIC_NAME_PROPERTY).toString(), equalTo("'orders_topic'")); }
@Override public AbstractStreamCreateStatement copyWith(final List<TableElement> elements, final Map<String, Expression> properties) { return new CreateStream(name, elements, notExists, properties); }
private CommandId getTopicStreamCommandId(final CreateStream createStream) { return getStreamCommandId(createStream.getName().toString()); }
@Test public void testCreateStream() throws Exception { final String queryStr = "CREATE STREAM orders (ordertime bigint, orderid varchar, itemid varchar, orderunits " + "double) WITH (value_format = 'avro', " + "avroschemafile='/Users/hojjat/avro_order_schema.avro',kafka_topic='orders_topic');"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); final StatementRewriter statementRewriter = new StatementRewriter(); final Statement rewrittenStatement = (Statement) statementRewriter.process(statement, null); assertThat(rewrittenStatement, instanceOf(CreateStream.class)); final CreateStream createStream = (CreateStream)rewrittenStatement; assertThat(createStream.getName().toString(), equalTo("ORDERS")); assertThat(createStream.getElements().size(), equalTo(4)); assertThat(createStream.getElements().get(0).getName(), equalTo("ORDERTIME")); assertThat(createStream.getProperties().get(DdlConfig.KAFKA_TOPIC_NAME_PROPERTY).toString(), equalTo("'orders_topic'")); assertThat(createStream.getProperties().get(DdlConfig .VALUE_FORMAT_PROPERTY).toString(), equalTo("'avro'")); assertThat(createStream.getProperties().get(DdlConfig.AVRO_SCHEMA_FILE).toString(), equalTo("'/Users/hojjat/avro_order_schema.avro'")); }
@Test public void shouldRunCsStatement() { // Given: final PreparedStatement<CreateStream> cs = new PreparedStatement<>("CS", new CreateStream(SOME_NAME, emptyList(), false, emptyMap())); when(engine.parseStatements(anyString())).thenReturn(ImmutableList.of(cs)); // When: standaloneExecutor.start(); // Then: verify(engine).execute(cs, ksqlConfig, emptyMap()); }
@Test public void testCreateStreamWithTopic() { final String queryStr = "CREATE STREAM orders (ordertime bigint, orderid varchar, itemid varchar, orderunits " + "double) WITH (registered_topic = 'orders_topic' , key='ordertime');"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); Assert.assertTrue("testCreateStream failed.", statement instanceof CreateStream); final CreateStream createStream = (CreateStream)statement; Assert.assertTrue("testCreateStream failed.", createStream.getName().toString().equalsIgnoreCase("ORDERS")); Assert.assertTrue("testCreateStream failed.", createStream.getElements().size() == 4); Assert.assertTrue("testCreateStream failed.", createStream.getElements().get(0).getName().toString().equalsIgnoreCase("ordertime")); Assert.assertTrue("testCreateStream failed.", createStream.getProperties().get(DdlConfig.TOPIC_NAME_PROPERTY).toString().equalsIgnoreCase("'orders_topic'")); }
@Override public Node visitCreateStream(final SqlBaseParser.CreateStreamContext context) { return new CreateStream( Optional.of(getLocation(context)), getQualifiedName(context.qualifiedName()), visit(context.tableElement(), TableElement.class), context.EXISTS() != null, processTableProperties(context.tableProperties()) ); }
@Test public void testCreateStreamWithTopicWithStruct() throws Exception { final String queryStr = "CREATE STREAM orders (ordertime bigint, orderid varchar, itemid varchar, orderunits " + "double, arraycol array<double>, mapcol map<varchar, double>, " + "order_address STRUCT< number VARCHAR, street VARCHAR, zip INTEGER, city " + "VARCHAR, state VARCHAR >) WITH (registered_topic = 'orders_topic' , key='ordertime');"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); final StatementRewriter statementRewriter = new StatementRewriter(); final Statement rewrittenStatement = (Statement) statementRewriter.process(statement, null); assertThat(rewrittenStatement, instanceOf(CreateStream.class)); final CreateStream createStream = (CreateStream)rewrittenStatement; assertThat(createStream.getName().toString().toUpperCase(), equalTo("ORDERS")); assertThat(createStream.getElements().size(), equalTo(7)); assertThat(createStream.getElements().get(0).getName().toLowerCase(), equalTo("ordertime")); assertThat(createStream.getElements().get(6).getType().getKsqlType(), equalTo(Type.KsqlType.STRUCT)); final Struct struct = (Struct) createStream.getElements().get(6).getType(); assertThat(struct.getItems().size(), equalTo(5)); assertThat(struct.getItems().get(0).getRight().getKsqlType(), equalTo(Type.KsqlType.STRING)); assertThat(createStream.getProperties().get(DdlConfig.TOPIC_NAME_PROPERTY).toString().toLowerCase(), equalTo("'orders_topic'")); }
@Test public void shouldRunSetStatements() { // Given: when(engine.parseStatements(anyString())).thenReturn(ImmutableList.of( new PreparedStatement<>("CS", new SetProperty(Optional.empty(), "name", "value")), new PreparedStatement<>("CS", new CreateStream(SOME_NAME, emptyList(), false, emptyMap())) )); // When: standaloneExecutor.start(); // Then: verify(engine) .execute(any(), any(), eq(ImmutableMap.of("name", "value"))); }
@Test public void testCreateStream() throws Exception { final String queryStr = "CREATE STREAM orders (ordertime bigint, orderid varchar, itemid varchar, orderunits " + "double) WITH (value_format = 'avro', " + "avroschemafile='/Users/hojjat/avro_order_schema.avro',kafka_topic='orders_topic');"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); Assert.assertTrue("testCreateStream failed.", statement instanceof CreateStream); final CreateStream createStream = (CreateStream)statement; Assert.assertTrue("testCreateStream failed.", createStream.getName().toString().equalsIgnoreCase("ORDERS")); Assert.assertTrue("testCreateStream failed.", createStream.getElements().size() == 4); Assert.assertTrue("testCreateStream failed.", createStream.getElements().get(0).getName().toString().equalsIgnoreCase("ordertime")); Assert.assertTrue("testCreateStream failed.", createStream.getProperties().get(DdlConfig.KAFKA_TOPIC_NAME_PROPERTY).toString().equalsIgnoreCase("'orders_topic'")); Assert.assertTrue("testCreateStream failed.", createStream.getProperties().get(DdlConfig .VALUE_FORMAT_PROPERTY).toString().equalsIgnoreCase("'avro'")); Assert.assertTrue("testCreateStream failed.", createStream.getProperties().get(DdlConfig.AVRO_SCHEMA_FILE).toString().equalsIgnoreCase("'/Users/hojjat/avro_order_schema.avro'")); }
@Test public void shouldRunUnSetStatements() { // Given: when(engine.parseStatements(anyString())).thenReturn(ImmutableList.of( new PreparedStatement<>("SET", new SetProperty(Optional.empty(), "name", "value")), new PreparedStatement<>("UNSET", new UnsetProperty(Optional.empty(), "name")), new PreparedStatement<>("CS", new CreateStream(SOME_NAME, emptyList(), false, emptyMap())) )); // When: standaloneExecutor.start(); // Then: verify(engine).execute(any(), any(), eq(emptyMap())); }
@Test public void testCreateStreamWithTopicWithStruct() throws Exception { final String queryStr = "CREATE STREAM orders (ordertime bigint, orderid varchar, itemid varchar, orderunits " + "double, arraycol array<double>, mapcol map<varchar, double>, " + "order_address STRUCT< number VARCHAR, street VARCHAR, zip INTEGER, city " + "VARCHAR, state VARCHAR >) WITH (registered_topic = 'orders_topic' , key='ordertime');"; final Statement statement = KSQL_PARSER.buildAst(queryStr, metaStore).get(0).getStatement(); Assert.assertTrue("testCreateStream failed.", statement instanceof CreateStream); final CreateStream createStream = (CreateStream)statement; assertThat(createStream.getName().toString().toUpperCase(), equalTo("ORDERS")); assertThat(createStream.getElements().size(), equalTo(7)); assertThat(createStream.getElements().get(0).getName().toString().toLowerCase(), equalTo("ordertime")); assertThat(createStream.getElements().get(6).getType().getKsqlType(), equalTo(Type.KsqlType.STRUCT)); final Struct struct = (Struct) createStream.getElements().get(6).getType(); assertThat(struct.getItems().size(), equalTo(5)); assertThat(struct.getItems().get(0).getRight().getKsqlType(), equalTo(Type.KsqlType.STRING)); assertThat(createStream.getProperties().get(DdlConfig.TOPIC_NAME_PROPERTY).toString().toLowerCase(), equalTo("'orders_topic'")); }
@Test public void shouldFormatCreateWithEmptySchema() { final CreateStream createStream = new CreateStream( QualifiedName.of("TEST"), Collections.emptyList(), false, Collections.singletonMap( DdlConfig.KAFKA_TOPIC_NAME_PROPERTY, new StringLiteral("topic_test") )); final String sql = SqlFormatter.formatSql(createStream); final String expectedSql = "CREATE STREAM TEST \n WITH (KAFKA_TOPIC='topic_test');"; assertThat(sql, equalTo(expectedSql)); }
@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()); }
new CreateStream( QualifiedName.of(COMMANDS_STREAM_NAME), Collections.singletonList(new TableElement(