use of io.confluent.ksql.api.client.KsqlObject in project ksql by confluentinc.
the class ClientImpl method streamInserts.
@Override
public CompletableFuture<AcksPublisher> streamInserts(final String streamName, final Publisher<KsqlObject> insertsPublisher) {
final CompletableFuture<AcksPublisher> cf = new CompletableFuture<>();
final Buffer requestBody = Buffer.buffer();
final JsonObject params = new JsonObject().put("target", streamName);
requestBody.appendBuffer(params.toBuffer()).appendString("\n");
makePostRequest("/inserts-stream", requestBody, cf, response -> handleStreamedResponse(response, cf, (ctx, rp, fut, req) -> new StreamInsertsResponseHandler(ctx, rp, fut, req, insertsPublisher)), false);
return cf;
}
use of io.confluent.ksql.api.client.KsqlObject in project ksql by confluentinc.
the class ClientImpl method insertInto.
@Override
public CompletableFuture<Void> insertInto(final String streamName, final KsqlObject row) {
final CompletableFuture<Void> cf = new CompletableFuture<>();
final Buffer requestBody = Buffer.buffer();
final JsonObject params = new JsonObject().put("target", streamName);
requestBody.appendBuffer(params.toBuffer()).appendString("\n");
requestBody.appendString(row.toJsonString()).appendString("\n");
makePostRequest(INSERTS_ENDPOINT, requestBody, cf, response -> handleStreamedResponse(response, cf, (ctx, rp, fut, req) -> new InsertIntoResponseHandler(ctx, rp, fut)));
return cf;
}
use of io.confluent.ksql.api.client.KsqlObject in project ksql by confluentinc.
the class ClientIntegrationTest method verifyPullQueryRow.
private static void verifyPullQueryRow(final Row row) {
// verify metadata
assertThat(row.values(), equalTo(PULL_QUERY_EXPECTED_ROW));
assertThat(row.columnNames(), equalTo(PULL_QUERY_COLUMN_NAMES));
assertThat(row.columnTypes(), equalTo(PULL_QUERY_COLUMN_TYPES));
// verify type-based getters
assertThat(row.getKsqlObject("K"), is(PULL_QUERY_EXPECTED_ROW.getKsqlObject(0)));
assertThat(row.getLong("LONG"), is(PULL_QUERY_EXPECTED_ROW.getLong(1)));
// verify index-based getters are 1-indexed
assertThat(row.getKsqlObject(1), is(row.getKsqlObject("K")));
assertThat(row.getLong(2), is(row.getLong("LONG")));
// verify isNull() evaluation
assertThat(row.isNull("K"), is(false));
assertThat(row.isNull("LONG"), is(false));
// verify exception on invalid cast
assertThrows(ClassCastException.class, () -> row.getInteger("K"));
// verify KsqlArray methods
final KsqlArray values = row.values();
assertThat(values.size(), is(PULL_QUERY_COLUMN_NAMES.size()));
assertThat(values.isEmpty(), is(false));
assertThat(values.getKsqlObject(0), is(row.getKsqlObject("K")));
assertThat(values.getLong(1), is(row.getLong("LONG")));
assertThat(values.toJsonString(), is((new JsonArray(values.getList())).toString()));
assertThat(values.toString(), is(values.toJsonString()));
// verify KsqlObject methods
final KsqlObject obj = row.asObject();
assertThat(obj.size(), is(PULL_QUERY_COLUMN_NAMES.size()));
assertThat(obj.isEmpty(), is(false));
assertThat(obj.fieldNames(), contains(PULL_QUERY_COLUMN_NAMES.toArray()));
assertThat(obj.getKsqlObject("K"), is(row.getKsqlObject("K")));
assertThat(obj.getLong("LONG"), is(row.getLong("LONG")));
assertThat(obj.containsKey("LONG"), is(true));
assertThat(obj.containsKey("notafield"), is(false));
assertThat(obj.toJsonString(), is((new JsonObject(obj.getMap())).toString()));
assertThat(obj.toString(), is(obj.toJsonString()));
}
use of io.confluent.ksql.api.client.KsqlObject in project ksql by confluentinc.
the class ClientMutationIntegrationTest method shouldStreamQueryWithProperties.
@Test
public void shouldStreamQueryWithProperties() throws Exception {
// Given
final Map<String, Object> properties = new HashMap<>();
properties.put("auto.offset.reset", "latest");
final String sql = "SELECT * FROM " + TEST_STREAM + " EMIT CHANGES LIMIT 1;";
final KsqlObject insertRow = new KsqlObject().put("K", new KsqlObject().put("F1", new KsqlArray().add("my_key_shouldStreamQueryWithProperties"))).put("STR", "Value_shouldStreamQueryWithProperties").put("LONG", 2000L).put("DEC", new BigDecimal("12.34")).put("BYTES_", new byte[] { 0, 1, 2 }).put("ARRAY", new KsqlArray().add("v1_shouldStreamQueryWithProperties").add("v2_shouldStreamQueryWithProperties")).put("MAP", new KsqlObject().put("test_name", "shouldStreamQueryWithProperties")).put("STRUCT", new KsqlObject().put("F1", 4)).put("COMPLEX", COMPLEX_FIELD_VALUE).put("TIMESTAMP", "1970-01-01T00:00:00.001").put("DATE", "1970-01-01").put("TIME", "00:00:00");
// When
final StreamedQueryResult queryResult = client.streamQuery(sql, properties).get();
// Then: a newly inserted row arrives
final Row row = assertThatEventually(() -> {
// Potentially try inserting multiple times, in case the query wasn't started by the first time
try {
client.insertInto(TEST_STREAM, insertRow).get();
} catch (final Exception e) {
throw new RuntimeException(e);
}
return queryResult.poll(Duration.ofMillis(10));
}, is(notNullValue()));
assertThat(row.getKsqlObject("K"), is(new KsqlObject().put("F1", new KsqlArray().add("my_key_shouldStreamQueryWithProperties"))));
assertThat(row.getString("STR"), is("Value_shouldStreamQueryWithProperties"));
assertThat(row.getLong("LONG"), is(2000L));
assertThat(row.getDecimal("DEC"), is(new BigDecimal("12.34")));
assertThat(row.getBytes("BYTES_"), is(new byte[] { 0, 1, 2 }));
assertThat(row.getKsqlArray("ARRAY"), is(new KsqlArray().add("v1_shouldStreamQueryWithProperties").add("v2_shouldStreamQueryWithProperties")));
assertThat(row.getKsqlObject("MAP"), is(new KsqlObject().put("test_name", "shouldStreamQueryWithProperties")));
assertThat(row.getKsqlObject("STRUCT"), is(new KsqlObject().put("F1", 4)));
assertThat(row.getKsqlObject("COMPLEX"), is(EXPECTED_COMPLEX_FIELD_VALUE));
assertThat(row.getString("TIMESTAMP"), is("1970-01-01T00:00:00.001"));
assertThat(row.getString("DATE"), is("1970-01-01"));
assertThat(row.getString("TIME"), is("00:00"));
}
use of io.confluent.ksql.api.client.KsqlObject in project ksql by confluentinc.
the class ClientMutationIntegrationTest method shouldStreamInserts.
@Test
public void shouldStreamInserts() throws Exception {
// Given
final InsertsPublisher insertsPublisher = new InsertsPublisher();
final int numRows = 5;
// When
final AcksPublisher acksPublisher = client.streamInserts(EMPTY_TEST_STREAM_2, insertsPublisher).get();
final TestSubscriber<InsertAck> acksSubscriber = subscribeAndWait(acksPublisher);
assertThat(acksSubscriber.getValues(), hasSize(0));
acksSubscriber.getSub().request(numRows);
for (int i = 0; i < numRows; i++) {
insertsPublisher.accept(new KsqlObject().put("K", new KsqlObject().put("F1", new KsqlArray().add("my_key_" + i))).put("STR", "TEST_" + i).put("LONG", i).put("DEC", new BigDecimal("13.31")).put("BYTES_", new byte[] { 0, 1, 2 }).put("ARRAY", new KsqlArray().add("v_" + i)).put("MAP", new KsqlObject().put("k_" + i, "v_" + i)).put("COMPLEX", COMPLEX_FIELD_VALUE).put("TIMESTAMP", "1970-01-01T00:00:00.001").put("DATE", "1970-01-01").put("TIME", "00:00"));
}
// Then
assertThatEventually(acksSubscriber::getValues, hasSize(numRows));
for (int i = 0; i < numRows; i++) {
assertThat(acksSubscriber.getValues().get(i).seqNum(), is(Long.valueOf(i)));
}
assertThat(acksSubscriber.getError(), is(nullValue()));
assertThat(acksSubscriber.isCompleted(), is(false));
assertThat(acksPublisher.isComplete(), is(false));
assertThat(acksPublisher.isFailed(), is(false));
// Then: should receive new rows
final String query = "SELECT * FROM " + EMPTY_TEST_STREAM_2 + " EMIT CHANGES LIMIT " + numRows + ";";
final List<Row> rows = client.executeQuery(query).get();
// Verify inserted rows are as expected
assertThat(rows, hasSize(numRows));
for (int i = 0; i < numRows; i++) {
assertThat(rows.get(i).getKsqlObject("K"), is(new KsqlObject().put("F1", new KsqlArray().add("my_key_" + i))));
assertThat(rows.get(i).getString("STR"), is("TEST_" + i));
assertThat(rows.get(i).getLong("LONG"), is(Long.valueOf(i)));
assertThat(rows.get(i).getDecimal("DEC"), is(new BigDecimal("13.31")));
assertThat(rows.get(i).getBytes("BYTES_"), is(new byte[] { 0, 1, 2 }));
assertThat(rows.get(i).getKsqlArray("ARRAY"), is(new KsqlArray().add("v_" + i)));
assertThat(rows.get(i).getKsqlObject("MAP"), is(new KsqlObject().put("k_" + i, "v_" + i)));
assertThat(rows.get(i).getKsqlObject("COMPLEX"), is(EXPECTED_COMPLEX_FIELD_VALUE));
assertThat(rows.get(i).getString("TIMESTAMP"), is("1970-01-01T00:00:00.001"));
assertThat(rows.get(i).getString("DATE"), is("1970-01-01"));
assertThat(rows.get(i).getString("TIME"), is("00:00"));
}
// When: end connection
insertsPublisher.complete();
// Then
assertThatEventually(acksSubscriber::isCompleted, is(true));
assertThat(acksSubscriber.getError(), is(nullValue()));
assertThat(acksPublisher.isComplete(), is(true));
assertThat(acksPublisher.isFailed(), is(false));
}
Aggregations