12345678910111213141516171819202122232425262728293031323334353637383940 |
- /*
- * Copyright (c) 2022, Tim Flynn <trflynn89@serenityos.org>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #include <LibSQL/AST/AST.h>
- #include <LibSQL/Database.h>
- #include <LibSQL/Meta.h>
- #include <LibSQL/Row.h>
- namespace SQL::AST {
- ResultOr<ResultSet> Delete::execute(ExecutionContext& context) const
- {
- auto const& schema_name = m_qualified_table_name->schema_name();
- auto const& table_name = m_qualified_table_name->table_name();
- auto table_def = TRY(context.database->get_table(schema_name, table_name));
- ResultSet result { SQLCommand::Delete };
- for (auto& table_row : TRY(context.database->select_all(*table_def))) {
- context.current_row = &table_row;
- if (auto const& where_clause = this->where_clause()) {
- auto where_result = TRY(where_clause->evaluate(context)).to_bool();
- if (!where_result.has_value() || !where_result.value())
- continue;
- }
- TRY(context.database->remove(table_row));
- // FIXME: Implement the RETURNING clause.
- result.insert_row(table_row, {});
- }
- return result;
- }
- }
|