This is an automated email from the ASF dual-hosted git repository. apkhmv pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push: new 65b5e41c16 IGNITE-21322 Add tests for multiline sql execution from file (#3164) 65b5e41c16 is described below commit 65b5e41c161e37ee559fbd750b2f9fc85b9c97f1 Author: Aleksandr Pakhomov <apk...@gmail.com> AuthorDate: Tue Feb 6 23:15:34 2024 +0300 IGNITE-21322 Add tests for multiline sql execution from file (#3164) * There is no support for multiline strings in interactive mode. It requires implementing our own parser for jline 3 [1] that can be done but not now. [1] - https://github.com/jline/jline3/issues/36 --- .../cli/commands/sql/ItSqlCommandTest.java | 24 +++++++++++++++++++++- .../cli/commands/sql/ItSqlReplCommandTest.java | 24 ++++++++++++++++++++-- .../src/integrationTest/resources/multiline.sql | 8 ++++++++ .../internal/cli/commands/sql/SqlCommand.java | 2 +- .../internal/cli/commands/sql/SqlReplCommand.java | 2 +- 5 files changed, 55 insertions(+), 5 deletions(-) diff --git a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlCommandTest.java b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlCommandTest.java index e098e959be..c8dc9a5a15 100644 --- a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlCommandTest.java +++ b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlCommandTest.java @@ -36,7 +36,7 @@ class ItSqlCommandTest extends CliSqlCommandTestBase { assertAll( () -> assertExitCodeIs(1), this::assertOutputIsEmpty, - () -> assertErrOutputContains("File with command not found") + () -> assertErrOutputContains("nonexisting] not found") ); } @@ -123,4 +123,26 @@ class ItSqlCommandTest extends CliSqlCommandTestBase { () -> assertErrOutputContains("Table without PRIMARY KEY is not supported") ); } + + @Test + @DisplayName("Should execute multiline sql script from file") + void multilineScript() { + String filePath = getClass().getResource("/multiline.sql").getPath(); + execute("sql", "-f", filePath, "--jdbc-url", JDBC_URL); + + assertAll( + this::assertExitCodeIsZero, + this::assertOutputIsNotEmpty, + this::assertErrOutputIsEmpty + ); + + // test_table is created in multiline.sql and populated with 3 records. + execute("sql", "select count(*) from test_table", "--jdbc-url", JDBC_URL); + + assertAll( + this::assertExitCodeIsZero, + () -> assertOutputContains("3"), + this::assertErrOutputIsEmpty + ); + } } diff --git a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlReplCommandTest.java b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlReplCommandTest.java index 1bb486b9e5..780db3d804 100644 --- a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlReplCommandTest.java +++ b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/commands/sql/ItSqlReplCommandTest.java @@ -41,7 +41,7 @@ class ItSqlReplCommandTest extends CliIntegrationTest { assertAll( this::assertOutputIsEmpty, // Actual output starts with exception since this test doesn't use ReplExecutor and exception is handled by picocli. - () -> assertErrOutputContains("File with command not found") + () -> assertErrOutputContains("nonexisting] not found") ); } @@ -64,13 +64,33 @@ class ItSqlReplCommandTest extends CliIntegrationTest { ); } + @Test + void multilineCommand() { + execute("CREATE TABLE MULTILINE_TABLE(K INT PRIMARY KEY); \n INSERT INTO MULTILINE_TABLE VALUES(1);", "--jdbc-url", JDBC_URL); + + assertAll( + // The output from CREATE TABLE is: Updated 0 rows. + () -> assertOutputContains("Updated 0 rows."), + this::assertErrOutputIsEmpty + ); + + resetOutput(); + + execute("SELECT COUNT(*) FROM MULTILINE_TABLE;", "--jdbc-url", JDBC_URL); + + assertAll( + () -> assertOutputContains("1"), + this::assertErrOutputIsEmpty + ); + } + @Test void secondInvocationFile() { execute("-f", "nonexisting", "--jdbc-url", JDBC_URL); assertAll( this::assertOutputIsEmpty, - () -> assertErrOutputContains("File with command not found") + () -> assertErrOutputContains("nonexisting] not found") ); resetOutput(); diff --git a/modules/cli/src/integrationTest/resources/multiline.sql b/modules/cli/src/integrationTest/resources/multiline.sql new file mode 100644 index 0000000000..fb98735e95 --- /dev/null +++ b/modules/cli/src/integrationTest/resources/multiline.sql @@ -0,0 +1,8 @@ +create table test_table ( + id int primary key, + name varchar(255) +); + +insert into test_table (id, name) values (1, 'test'); +insert into test_table (id, name) values (2, 'test2'); +insert into test_table (id, name) values (3, 'test3'); diff --git a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlCommand.java b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlCommand.java index 493e5a2bb8..f267eb2231 100644 --- a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlCommand.java +++ b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlCommand.java @@ -74,7 +74,7 @@ public class SqlCommand extends BaseCommand implements Callable<Integer> { try { return String.join("\n", Files.readAllLines(file.toPath(), StandardCharsets.UTF_8)); } catch (IOException e) { - throw new IgniteCliException("File with command not found"); + throw new IgniteCliException("File [" + file.getAbsolutePath() + "] not found"); } } diff --git a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlReplCommand.java b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlReplCommand.java index 1c805fc74a..1d08869b94 100644 --- a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlReplCommand.java +++ b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlReplCommand.java @@ -93,7 +93,7 @@ public class SqlReplCommand extends BaseCommand implements Runnable { try { return String.join("\n", Files.readAllLines(file.toPath(), StandardCharsets.UTF_8)); } catch (IOException e) { - throw new IgniteCliException("File with command not found"); + throw new IgniteCliException("File [" + file.getAbsolutePath() + "] not found"); } }