/src/serenity/Userland/Libraries/LibSQL/AST/Delete.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright (c) 2022, Tim Flynn <trflynn89@serenityos.org> |
3 | | * |
4 | | * SPDX-License-Identifier: BSD-2-Clause |
5 | | */ |
6 | | |
7 | | #include <LibSQL/AST/AST.h> |
8 | | #include <LibSQL/Database.h> |
9 | | #include <LibSQL/Meta.h> |
10 | | #include <LibSQL/Row.h> |
11 | | |
12 | | namespace SQL::AST { |
13 | | |
14 | | ResultOr<ResultSet> Delete::execute(ExecutionContext& context) const |
15 | 0 | { |
16 | 0 | auto const& schema_name = m_qualified_table_name->schema_name(); |
17 | 0 | auto const& table_name = m_qualified_table_name->table_name(); |
18 | 0 | auto table_def = TRY(context.database->get_table(schema_name, table_name)); |
19 | | |
20 | 0 | ResultSet result { SQLCommand::Delete }; |
21 | |
|
22 | 0 | for (auto& table_row : TRY(context.database->select_all(*table_def))) { |
23 | 0 | context.current_row = &table_row; |
24 | |
|
25 | 0 | if (auto const& where_clause = this->where_clause()) { |
26 | 0 | auto where_result = TRY(where_clause->evaluate(context)).to_bool(); |
27 | 0 | if (!where_result.has_value() || !where_result.value()) |
28 | 0 | continue; |
29 | 0 | } |
30 | | |
31 | 0 | TRY(context.database->remove(table_row)); |
32 | | |
33 | | // FIXME: Implement the RETURNING clause. |
34 | 0 | result.insert_row(table_row, {}); |
35 | 0 | } |
36 | | |
37 | 0 | return result; |
38 | 0 | } |
39 | | |
40 | | } |