summaryrefslogtreecommitdiff
path: root/Tests
diff options
context:
space:
mode:
authorMahmoud Mandour <ma.mandourr@gmail.com>2021-09-19 21:35:16 +0200
committerAndreas Kling <kling@serenityos.org>2022-02-05 00:35:03 +0100
commit794d79e3152111776f9e2394bb5fd35f062f5212 (patch)
tree46f8148787b8429c1fca8a99731f0c13620147d0 /Tests
parentf6233913ad4deda351530736e659027150a5dd03 (diff)
downloadserenity-794d79e3152111776f9e2394bb5fd35f062f5212.zip
LibSQL: Implement DESCRIBE TABLE tests
Diffstat (limited to 'Tests')
-rw-r--r--Tests/LibSQL/TestSqlStatementExecution.cpp22
-rw-r--r--Tests/LibSQL/TestSqlStatementParser.cpp26
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");
+}