Serenity Operating System
at master 40 lines 1.1 kB view raw
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 12namespace SQL::AST { 13 14ResultOr<ResultSet> Delete::execute(ExecutionContext& context) const 15{ 16 auto const& schema_name = m_qualified_table_name->schema_name(); 17 auto const& table_name = m_qualified_table_name->table_name(); 18 auto table_def = TRY(context.database->get_table(schema_name, table_name)); 19 20 ResultSet result { SQLCommand::Delete }; 21 22 for (auto& table_row : TRY(context.database->select_all(*table_def))) { 23 context.current_row = &table_row; 24 25 if (auto const& where_clause = this->where_clause()) { 26 auto where_result = TRY(where_clause->evaluate(context)).to_bool(); 27 if (!where_result.has_value() || !where_result.value()) 28 continue; 29 } 30 31 TRY(context.database->remove(table_row)); 32 33 // FIXME: Implement the RETURNING clause. 34 result.insert_row(table_row, {}); 35 } 36 37 return result; 38} 39 40}