mirror of
https://github.com/RGBCube/serenity
synced 2025-06-01 10:08:10 +00:00
LibSQL: Implement DESCRIBE TABLE tests
This commit is contained in:
parent
f6233913ad
commit
794d79e315
2 changed files with 48 additions and 0 deletions
|
@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue