1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 05:38:11 +00:00

LibSQL: Partially implement the UPDATE command

This implements enough to update rows filtered by a WHERE clause.
This commit is contained in:
Timothy Flynn 2022-12-05 07:55:21 -05:00 committed by Andreas Kling
parent 1574f2c3f6
commit 53f8d62ea4
7 changed files with 203 additions and 12 deletions

View file

@ -886,4 +886,123 @@ TEST_CASE(delete_all_rows)
}
}
TEST_CASE(update_single_row)
{
ScopeGuard guard([]() { unlink(db_name); });
{
auto database = SQL::Database::construct(db_name);
EXPECT(!database->open().is_error());
create_table(database);
for (auto count = 0; count < 10; ++count) {
auto result = execute(database, DeprecatedString::formatted("INSERT INTO TestSchema.TestTable VALUES ( 'T{}', {} );", count, count));
EXPECT_EQ(result.size(), 1u);
}
execute(database, "UPDATE TestSchema.TestTable SET IntColumn=123456 WHERE (TextColumn = 'T3');");
auto result = execute(database, "SELECT IntColumn FROM TestSchema.TestTable ORDER BY IntColumn;");
EXPECT_EQ(result.size(), 10u);
for (auto i = 0u; i < 10; ++i) {
if (i < 3)
EXPECT_EQ(result[i].row[0], i);
else if (i < 9)
EXPECT_EQ(result[i].row[0], i + 1);
else
EXPECT_EQ(result[i].row[0], 123456);
}
}
{
auto database = SQL::Database::construct(db_name);
EXPECT(!database->open().is_error());
auto result = execute(database, "SELECT IntColumn FROM TestSchema.TestTable ORDER BY IntColumn;");
EXPECT_EQ(result.size(), 10u);
for (auto i = 0u; i < 10; ++i) {
if (i < 3)
EXPECT_EQ(result[i].row[0], i);
else if (i < 9)
EXPECT_EQ(result[i].row[0], i + 1);
else
EXPECT_EQ(result[i].row[0], 123456);
}
}
}
TEST_CASE(update_multiple_rows)
{
ScopeGuard guard([]() { unlink(db_name); });
{
auto database = SQL::Database::construct(db_name);
EXPECT(!database->open().is_error());
create_table(database);
for (auto count = 0; count < 10; ++count) {
auto result = execute(database, DeprecatedString::formatted("INSERT INTO TestSchema.TestTable VALUES ( 'T{}', {} );", count, count));
EXPECT_EQ(result.size(), 1u);
}
execute(database, "UPDATE TestSchema.TestTable SET IntColumn=123456 WHERE (IntColumn > 4);");
auto result = execute(database, "SELECT IntColumn FROM TestSchema.TestTable ORDER BY IntColumn;");
EXPECT_EQ(result.size(), 10u);
for (auto i = 0u; i < 10; ++i) {
if (i < 5)
EXPECT_EQ(result[i].row[0], i);
else
EXPECT_EQ(result[i].row[0], 123456);
}
}
{
auto database = SQL::Database::construct(db_name);
EXPECT(!database->open().is_error());
auto result = execute(database, "SELECT IntColumn FROM TestSchema.TestTable ORDER BY IntColumn;");
EXPECT_EQ(result.size(), 10u);
for (auto i = 0u; i < 10; ++i) {
if (i < 5)
EXPECT_EQ(result[i].row[0], i);
else
EXPECT_EQ(result[i].row[0], 123456);
}
}
}
TEST_CASE(update_all_rows)
{
ScopeGuard guard([]() { unlink(db_name); });
{
auto database = SQL::Database::construct(db_name);
EXPECT(!database->open().is_error());
create_table(database);
for (auto count = 0; count < 10; ++count) {
auto result = execute(database, DeprecatedString::formatted("INSERT INTO TestSchema.TestTable VALUES ( 'T{}', {} );", count, count));
EXPECT_EQ(result.size(), 1u);
}
execute(database, "UPDATE TestSchema.TestTable SET IntColumn=123456;");
auto result = execute(database, "SELECT IntColumn FROM TestSchema.TestTable ORDER BY IntColumn;");
EXPECT_EQ(result.size(), 10u);
for (auto i = 0u; i < 10; ++i)
EXPECT_EQ(result[i].row[0], 123456);
}
{
auto database = SQL::Database::construct(db_name);
EXPECT(!database->open().is_error());
auto result = execute(database, "SELECT IntColumn FROM TestSchema.TestTable ORDER BY IntColumn;");
EXPECT_EQ(result.size(), 10u);
for (auto i = 0u; i < 10; ++i)
EXPECT_EQ(result[i].row[0], 123456);
}
}
}