diff --git a/rai-sdk-examples/src/main/java/com/relationalai/examples/LoadCsv.java b/rai-sdk-examples/src/main/java/com/relationalai/examples/LoadCsv.java index 813d49e9..15d716c3 100644 --- a/rai-sdk-examples/src/main/java/com/relationalai/examples/LoadCsv.java +++ b/rai-sdk-examples/src/main/java/com/relationalai/examples/LoadCsv.java @@ -70,6 +70,6 @@ public void run(String[] args) throws HttpError, InterruptedException, IOExcepti var input = new FileInputStream(filename); var rname = relation != null ? relation : sansext(filename); var rsp = client.loadCsv(database, engine, rname, input, options); - Json.print(rsp, 4); + System.out.println(rsp); } } diff --git a/rai-sdk-examples/src/main/java/com/relationalai/examples/LoadJson.java b/rai-sdk-examples/src/main/java/com/relationalai/examples/LoadJson.java index ef2bc8a1..525cfa27 100644 --- a/rai-sdk-examples/src/main/java/com/relationalai/examples/LoadJson.java +++ b/rai-sdk-examples/src/main/java/com/relationalai/examples/LoadJson.java @@ -59,6 +59,6 @@ public void run(String[] args) throws HttpError, InterruptedException, IOExcepti var input = new FileInputStream(filename); var rname = relation != null ? relation : sansext(filename); var rsp = client.loadJson(database, engine, rname, input); - Json.print(rsp, 4); + System.out.println(rsp); } } diff --git a/rai-sdk/src/main/java/com/relationalai/Client.java b/rai-sdk/src/main/java/com/relationalai/Client.java index f359d7de..f0149982 100644 --- a/rai-sdk/src/main/java/com/relationalai/Client.java +++ b/rai-sdk/src/main/java/com/relationalai/Client.java @@ -724,6 +724,11 @@ public TransactionAsyncResult execute( return execute(database, engine, source, readonly, new HashMap<>()); } + public TransactionAsyncResult execute( + String database, String engine, String source) throws HttpError, IOException, InterruptedException { + return execute(database, engine, source, true); + } + public TransactionAsyncResult execute( String database, String engine, String source, boolean readonly, @@ -1007,20 +1012,20 @@ static String genLoadCsv(String relation, CsvOptions options) { return builder.toString(); } - public TransactionResult loadCsv( + public TransactionAsyncResult loadCsv( String database, String engine, String relation, InputStream data) throws HttpError, InterruptedException, IOException { var s = new String(data.readAllBytes()); return loadCsv(database, engine, relation, s, null); } - public TransactionResult loadCsv( + public TransactionAsyncResult loadCsv( String database, String engine, String relation, String data) throws HttpError, InterruptedException, IOException { return loadCsv(database, engine, relation, data, null); } - public TransactionResult loadCsv( + public TransactionAsyncResult loadCsv( String database, String engine, String relation, InputStream data, CsvOptions options) throws HttpError, InterruptedException, IOException { @@ -1028,14 +1033,14 @@ public TransactionResult loadCsv( return loadCsv(database, engine, relation, s, options); } - public TransactionResult loadCsv( + public TransactionAsyncResult loadCsv( String database, String engine, String relation, String data, CsvOptions options) throws HttpError, InterruptedException, IOException { var source = genLoadCsv(relation, options); var inputs = new HashMap(); inputs.put("data", data); - return executeV1(database, engine, source, false, inputs); + return execute(database, engine, source, false, inputs); } // Generate the Rel to load JSON data into a relation. @@ -1046,19 +1051,19 @@ static String genLoadJson(String relation) { return builder.toString(); } - public TransactionResult loadJson( + public TransactionAsyncResult loadJson( String database, String engine, String relation, InputStream data) throws HttpError, InterruptedException, IOException { var s = new String(data.readAllBytes()); return loadJson(database, engine, relation, s); } - public TransactionResult loadJson( + public TransactionAsyncResult loadJson( String database, String engine, String relation, String data) throws HttpError, InterruptedException, IOException { var inputs = new HashMap(); inputs.put("data", data); var source = genLoadJson(relation); - return executeV1(database, engine, source, false, inputs); + return execute(database, engine, source, false, inputs); } } diff --git a/rai-sdk/src/test/java/com/relationalai/DatabaseTest.java b/rai-sdk/src/test/java/com/relationalai/DatabaseTest.java index 00b29a24..439e596b 100644 --- a/rai-sdk/src/test/java/com/relationalai/DatabaseTest.java +++ b/rai-sdk/src/test/java/com/relationalai/DatabaseTest.java @@ -133,14 +133,13 @@ void testDatabase() throws HttpError, InterruptedException, IOException { // Load some data and a model var loadRsp = client.loadJson(databaseName, engineName, "test_data", testJson); - assertEquals(false, loadRsp.aborted); - assertEquals(0, loadRsp.output.length); - assertEquals(0, loadRsp.problems.length); - - loadRsp = client.loadModel(databaseName, engineName, "test_model", testModel); - assertEquals(false, loadRsp.aborted); - assertEquals(0, loadRsp.output.length); - assertEquals(0, loadRsp.problems.length); + assertEquals("COMPLETED", loadRsp.transaction.state); + assertEquals(0, loadRsp.problems.size()); + + var loadModelRsp = client.loadModel(databaseName, engineName, "test_model", testModel); + assertEquals(false, loadModelRsp.aborted); + assertEquals(0, loadModelRsp.output.length); + assertEquals(0, loadModelRsp.problems.length); // Clone the database var databaseCloneName = databaseName + "-clone"; diff --git a/rai-sdk/src/test/java/com/relationalai/LoadCsvTest.java b/rai-sdk/src/test/java/com/relationalai/LoadCsvTest.java index 1f2451e3..5ccfcf77 100644 --- a/rai-sdk/src/test/java/com/relationalai/LoadCsvTest.java +++ b/rai-sdk/src/test/java/com/relationalai/LoadCsvTest.java @@ -20,8 +20,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; +import org.apache.arrow.vector.util.Text; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; @@ -43,45 +45,42 @@ public class LoadCsvTest extends UnitTest { ensureDatabase(client); var loadRsp = client.loadCsv(databaseName, engineName, "sample", sample); - assertEquals(false, loadRsp.aborted); - assertEquals(0, loadRsp.output.length); - assertEquals(0, loadRsp.problems.length); - - var rsp = client.executeV1(databaseName, engineName, "def output = sample"); - - Relation rel; - - rel = findRelation(rsp.output, ":date"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {2., 3., 4., 5.}, - {"2020-01-01", "2020-02-02", "2020-03-03", "2020-04-04"} - }, rel.columns); - - rel = findRelation(rsp.output, ":price"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {2., 3., 4., 5.}, - {"12.50", "14.25", "11.00", "12.25"} - }, rel.columns); - - rel = findRelation(rsp.output, ":quantity"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {2., 3., 4., 5.}, - {"2", "4", "4", "3"} - }, rel.columns); - - rel = findRelation(rsp.output, ":cocktail"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {2., 3., 4., 5.}, - {"martini", "sazerac", "cosmopolitan", "bellini"} - }, rel.columns); + assertEquals("COMPLETED", loadRsp.transaction.state); + assertEquals(0, loadRsp.problems.size()); + + var rsp = client.execute(databaseName, engineName, "def output = sample"); + assertEquals(new ArrayList() {{ add(2L); add(3L); add(4L); add(5L);}}, rsp.results.get(0).table); + assertEquals(new ArrayList() {{ + add(new Text("martini")); + add(new Text("sazerac")); + add(new Text("cosmopolitan")); + add(new Text("bellini")); }}, + rsp.results.get(1).table + ); + assertEquals(new ArrayList() {{ add(2L); add(3L); add(4L); add(5L);}}, rsp.results.get(2).table); + assertEquals(new ArrayList() {{ + add(new Text("2020-01-01")); + add(new Text("2020-02-02")); + add(new Text("2020-03-03")); + add(new Text("2020-04-04")); }}, + rsp.results.get(3).table + ); + assertEquals(new ArrayList() {{ add(2L); add(3L); add(4L); add(5L);}}, rsp.results.get(4).table); + assertEquals(new ArrayList() {{ + add(new Text("12.50")); + add(new Text("14.25")); + add(new Text("11.00")); + add(new Text("12.25")); }}, + rsp.results.get(5).table + ); + assertEquals(new ArrayList() {{ add(2L); add(3L); add(4L); add(5L);}}, rsp.results.get(6).table); + assertEquals(new ArrayList() {{ + add(new Text("2")); + add(new Text("4")); + add(new Text("4")); + add(new Text("3")); }}, + rsp.results.get(7).table + ); } static final String sampleNoHeader = "" + @@ -99,46 +98,43 @@ public class LoadCsvTest extends UnitTest { var opts = new CsvOptions().withHeaderRow(0); var loadRsp = client.loadCsv( databaseName, engineName, "sample_no_header", sampleNoHeader, opts); - assertEquals(false, loadRsp.aborted); - assertEquals(0, loadRsp.output.length); - assertEquals(0, loadRsp.problems.length); - - var rsp = client.executeV1(databaseName, engineName, "def output = sample_no_header"); - - Relation rel; - - rel = findRelation(rsp.output, ":COL1"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {1., 2., 3., 4.}, - {"martini", "sazerac", "cosmopolitan", "bellini"} - }, rel.columns); - - - rel = findRelation(rsp.output, ":COL2"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {1., 2., 3., 4.}, - {"2", "4", "4", "3"} - }, rel.columns); - - rel = findRelation(rsp.output, ":COL3"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {1., 2., 3., 4.}, - {"12.50", "14.25", "11.00", "12.25"} - }, rel.columns); - - rel = findRelation(rsp.output, ":COL4"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {1., 2., 3., 4.}, - {"2020-01-01", "2020-02-02", "2020-03-03", "2020-04-04"} - }, rel.columns); + assertEquals("COMPLETED", loadRsp.transaction.state); + assertEquals(0, loadRsp.problems.size()); + + var rsp = client.execute(databaseName, engineName, "def output = sample_no_header"); + + assertEquals(new ArrayList() {{ add(1L); add(2L); add(3L); add(4L);}}, rsp.results.get(0).table); + assertEquals(new ArrayList() {{ + add(new Text("martini")); + add(new Text("sazerac")); + add(new Text("cosmopolitan")); + add(new Text("bellini")); }}, + rsp.results.get(1).table + ); + assertEquals(new ArrayList() {{ add(1L); add(2L); add(3L); add(4L);}}, rsp.results.get(2).table); + assertEquals(new ArrayList() {{ + add(new Text("2")); + add(new Text("4")); + add(new Text("4")); + add(new Text("3")); }}, + rsp.results.get(3).table + ); + assertEquals(new ArrayList() {{ add(1L); add(2L); add(3L); add(4L);}}, rsp.results.get(4).table); + assertEquals(new ArrayList() {{ + add(new Text("12.50")); + add(new Text("14.25")); + add(new Text("11.00")); + add(new Text("12.25")); }}, + rsp.results.get(5).table + ); + assertEquals(new ArrayList() {{ add(1L); add(2L); add(3L); add(4L);}}, rsp.results.get(6).table); + assertEquals(new ArrayList() {{ + add(new Text("2020-01-01")); + add(new Text("2020-02-02")); + add(new Text("2020-03-03")); + add(new Text("2020-04-04")); }}, + rsp.results.get(7).table + ); } static final String sampleAltSyntax = "" + @@ -156,45 +152,44 @@ public class LoadCsvTest extends UnitTest { var opts = new CsvOptions().withDelim('|').withQuoteChar('\''); var loadRsp = client.loadCsv( databaseName, engineName, "sample_alt_syntax", sampleAltSyntax, opts); - assertEquals(false, loadRsp.aborted); - assertEquals(0, loadRsp.output.length); - assertEquals(0, loadRsp.problems.length); - - var rsp = client.executeV1(databaseName, engineName, "def output = sample_alt_syntax"); - - Relation rel; - - rel = findRelation(rsp.output, ":date"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {2., 3., 4., 5.}, - {"2020-01-01", "2020-02-02", "2020-03-03", "2020-04-04"} - }, rel.columns); - - rel = findRelation(rsp.output, ":price"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {2., 3., 4., 5.}, - {"12.50", "14.25", "11.00", "12.25"} - }, rel.columns); - - rel = findRelation(rsp.output, ":quantity"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {2., 3., 4., 5.}, - {"2", "4", "4", "3"} - }, rel.columns); - - rel = findRelation(rsp.output, ":cocktail"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {2., 3., 4., 5.}, - {"martini", "sazerac", "cosmopolitan", "bellini"} - }, rel.columns); + assertEquals("COMPLETED", loadRsp.transaction.state); + assertEquals(0, loadRsp.problems.size()); + + var rsp = client.execute(databaseName, engineName, "def output = sample_alt_syntax"); + + assertEquals(new ArrayList() {{ add(2L); add(3L); add(4L); add(5L);}}, rsp.results.get(0).table); + assertEquals(new ArrayList() {{ + add(new Text("martini")); + add(new Text("sazerac")); + add(new Text("cosmopolitan")); + add(new Text("bellini")); }}, + rsp.results.get(1).table + ); + assertEquals(new ArrayList() {{ add(2L); add(3L); add(4L); add(5L);}}, rsp.results.get(2).table); + + assertEquals(new ArrayList() {{ + add(new Text("2020-01-01")); + add(new Text("2020-02-02")); + add(new Text("2020-03-03")); + add(new Text("2020-04-04")); }}, + rsp.results.get(3).table + ); + assertEquals(new ArrayList() {{ add(2L); add(3L); add(4L); add(5L);}}, rsp.results.get(4).table); + assertEquals(new ArrayList() {{ + add(new Text("12.50")); + add(new Text("14.25")); + add(new Text("11.00")); + add(new Text("12.25")); }}, + rsp.results.get(5).table + ); + assertEquals(new ArrayList() {{ add(2L); add(3L); add(4L); add(5L);}}, rsp.results.get(6).table); + assertEquals(new ArrayList() {{ + add(new Text("2")); + add(new Text("4")); + add(new Text("4")); + add(new Text("3")); }}, + rsp.results.get(7).table + ); } @Test void testLoadCsvWithSchema() throws HttpError, InterruptedException, IOException { @@ -210,53 +205,25 @@ public class LoadCsvTest extends UnitTest { var opts = new CsvOptions().withSchema(schema); var loadRsp = client.loadCsv(databaseName, engineName, "sample", sample, opts); - assertEquals(false, loadRsp.aborted); - assertEquals(0, loadRsp.output.length); - assertEquals(0, loadRsp.problems.length); - - var rsp = client.executeV1(databaseName, engineName, "def output = sample"); - - Relation rel; - - rel = findRelation(rsp.output, ":date"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {2., 3., 4., 5.}, - {"2020-01-01", "2020-02-02", "2020-03-03", "2020-04-04"} - }, rel.columns); - assertEquals(1, rel.relKey.values.length); - assertEquals("Dates.Date", rel.relKey.values[0]); - - rel = findRelation(rsp.output, ":price"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {2., 3., 4., 5.}, - {12.5, 14.25, 11.00, 12.25} - }, rel.columns); - assertEquals(1, rel.relKey.values.length); - assertEquals("FixedPointDecimals.FixedDecimal{Int64, 2}", rel.relKey.values[0]); - - rel = findRelation(rsp.output, ":quantity"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {2., 3., 4., 5.}, - {2., 4., 4., 3.} - }, rel.columns); - assertEquals(1, rel.relKey.values.length); - assertEquals("Int64", rel.relKey.values[0]); - - rel = findRelation(rsp.output, ":cocktail"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] { - {2., 3., 4., 5.}, - {"martini", "sazerac", "cosmopolitan", "bellini"} - }, rel.columns); - assertEquals(1, rel.relKey.values.length); - assertEquals("String", rel.relKey.values[0]); + assertEquals("COMPLETED", loadRsp.transaction.state); + assertEquals(0, loadRsp.problems.size()); + + var rsp = client.execute(databaseName, engineName, "def output = sample"); + + assertEquals(new ArrayList() {{ add(2L); add(3L); add(4L); add(5L);}}, rsp.results.get(0).table); + assertEquals(new ArrayList() {{ + add(new Text("martini")); + add(new Text("sazerac")); + add(new Text("cosmopolitan")); + add(new Text("bellini")); }}, + rsp.results.get(1).table + ); + assertEquals(new ArrayList() {{ add(2L); add(3L); add(4L); add(5L);}}, rsp.results.get(2).table); + assertEquals(new ArrayList() {{ add(737425L); add(737457L); add(737487L); add(737519L); }}, rsp.results.get(3).table); + assertEquals(new ArrayList() {{ add(2L); add(3L); add(4L); add(5L);}}, rsp.results.get(4).table); + assertEquals(new ArrayList() {{ add(1250L); add(1425L); add(1100L); add(1225L); }}, rsp.results.get(5).table); + assertEquals(new ArrayList() {{ add(2L); add(3L); add(4L); add(5L);}}, rsp.results.get(6).table); + assertEquals(new ArrayList() {{ add(2L); add(4L); add(4L); add(3L); }}, rsp.results.get(7).table); } @AfterAll diff --git a/rai-sdk/src/test/java/com/relationalai/LoadJsonTest.java b/rai-sdk/src/test/java/com/relationalai/LoadJsonTest.java index adba379a..3accfe0f 100644 --- a/rai-sdk/src/test/java/com/relationalai/LoadJsonTest.java +++ b/rai-sdk/src/test/java/com/relationalai/LoadJsonTest.java @@ -16,11 +16,12 @@ package com.relationalai; -import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import org.apache.arrow.vector.util.Text; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; @@ -41,33 +42,15 @@ public class LoadJsonTest extends UnitTest { ensureDatabase(client); var loadRsp = client.loadJson(databaseName, engineName, "sample", sample); - assertEquals(false, loadRsp.aborted); - assertEquals(0, loadRsp.output.length); - assertEquals(0, loadRsp.problems.length); + assertEquals("COMPLETED", loadRsp.transaction.state); + assertEquals(0, loadRsp.problems.size()); - var rsp = client.executeV1(databaseName, engineName, "def output = sample"); - - Relation rel; - - rel = findRelation(rsp.output, ":name"); - assertNotNull(rel); - assertEquals(1, rel.columns.length); - assertArrayEquals(new Object[][] {{"Amira"}}, rel.columns); - - rel = findRelation(rsp.output, ":age"); - assertNotNull(rel); - assertEquals(1, rel.columns.length); - assertArrayEquals(new Object[][] {{32.}}, rel.columns); - - rel = findRelation(rsp.output, ":height"); - assertNotNull(rel); - assertEquals(1, rel.columns.length); - assertArrayEquals(new Object[][] {{null}}, rel.columns); - - rel = findRelation(rsp.output, ":pets"); - assertNotNull(rel); - assertEquals(2, rel.columns.length); - assertArrayEquals(new Object[][] {{1., 2.}, {"dog", "rabbit"}}, rel.columns); + var rsp = client.execute(databaseName, engineName, "def output = sample"); + assertEquals(new ArrayList() {{ add(32L); }}, rsp.results.get(0).table); + assertEquals(new ArrayList() {{ add(new HashMap()); }}, rsp.results.get(1).table); + assertEquals(new ArrayList (){{ add(new Text("Amira")); }}, rsp.results.get(2).table); + assertEquals(new ArrayList(){{ add(1L); add(2L);}}, rsp.results.get(3).table); + assertEquals(new ArrayList(){{ add(new Text("dog")); add(new Text("rabbit"));}}, rsp.results.get(4).table); } @AfterAll