diff options
author | Mahmoud Mandour <ma.mandourr@gmail.com> | 2021-09-19 21:35:16 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-02-05 00:35:03 +0100 |
commit | 794d79e3152111776f9e2394bb5fd35f062f5212 (patch) | |
tree | 46f8148787b8429c1fca8a99731f0c13620147d0 /Tests | |
parent | f6233913ad4deda351530736e659027150a5dd03 (diff) | |
download | serenity-794d79e3152111776f9e2394bb5fd35f062f5212.zip |
LibSQL: Implement DESCRIBE TABLE tests
Diffstat (limited to 'Tests')
-rw-r--r-- | Tests/LibSQL/TestSqlStatementExecution.cpp | 22 | ||||
-rw-r--r-- | Tests/LibSQL/TestSqlStatementParser.cpp | 26 |
2 files changed, 48 insertions, 0 deletions
diff --git a/Tests/LibSQL/TestSqlStatementExecution.cpp b/Tests/LibSQL/TestSqlStatementExecution.cpp index aabe474a87..e1d4b1192c 100644 --- a/Tests/LibSQL/TestSqlStatementExecution.cpp +++ b/Tests/LibSQL/TestSqlStatementExecution.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2021, Jan de Visser <jan@de-visser.net> + * Copyright (c) 2021, Mahmoud Mandour <ma.mandourr@gmail.com> * * SPDX-License-Identifier: BSD-2-Clause */ @@ -677,4 +678,25 @@ TEST_CASE(select_with_offset_out_of_bounds) EXPECT_EQ(rows.size(), 0u); } +TEST_CASE(describe_table) +{ + ScopeGuard guard([]() { unlink(db_name); }); + auto database = SQL::Database::construct(db_name); + EXPECT(!database->open().is_error()); + create_table(database); + auto result = execute(database, "DESCRIBE TABLE TestSchema.TestTable;"); + EXPECT(result->error().code == SQL::SQLErrorCode::NoError); + EXPECT(result->has_results()); + EXPECT_EQ(result->results().size(), 2u); + + auto rows = result->results(); + auto& row1 = rows[0]; + EXPECT_EQ(row1.row[0].to_string(), "TEXTCOLUMN"); + EXPECT_EQ(row1.row[1].to_string(), "text"); + + auto& row2 = rows[1]; + EXPECT_EQ(row2.row[0].to_string(), "INTCOLUMN"); + EXPECT_EQ(row2.row[1].to_string(), "int"); +} + } diff --git a/Tests/LibSQL/TestSqlStatementParser.cpp b/Tests/LibSQL/TestSqlStatementParser.cpp index 9f766cc8b8..a8ea995fca 100644 --- a/Tests/LibSQL/TestSqlStatementParser.cpp +++ b/Tests/LibSQL/TestSqlStatementParser.cpp @@ -1,6 +1,7 @@ /* * Copyright (c) 2021, Tim Flynn <trflynn89@serenityos.org> * Copyright (c) 2021, Jan de Visser <jan@de-visser.net> + * Copyright (c) 2021, Mahmoud Mandour <ma.mandourr@gmail.com> * * SPDX-License-Identifier: BSD-2-Clause */ @@ -750,3 +751,28 @@ TEST_CASE(nested_subquery_limit) EXPECT(!parse(String::formatted("SELECT * FROM {};", subquery)).is_error()); EXPECT(parse(String::formatted("SELECT * FROM ({});", subquery)).is_error()); } + +TEST_CASE(describe_table) +{ + EXPECT(parse("DESCRIBE").is_error()); + EXPECT(parse("DESCRIBE;").is_error()); + EXPECT(parse("DESCRIBE TABLE;").is_error()); + EXPECT(parse("DESCRIBE table_name;").is_error()); + + auto validate = [](StringView sql, StringView expected_schema, StringView expected_table) { + auto result = parse(sql); + if (result.is_error()) + outln("{}: {}", sql, result.error()); + EXPECT(!result.is_error()); + + auto statement = result.release_value(); + EXPECT(is<SQL::AST::DescribeTable>(*statement)); + + const auto& describe_table_statement = static_cast<const SQL::AST::DescribeTable&>(*statement); + EXPECT_EQ(describe_table_statement.qualified_table_name()->schema_name(), expected_schema); + EXPECT_EQ(describe_table_statement.qualified_table_name()->table_name(), expected_table); + }; + + validate("DESCRIBE TABLE TableName;", {}, "TABLENAME"); + validate("DESCRIBE TABLE SchemaName.TableName;", "SCHEMANAME", "TABLENAME"); +} |