Select.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. /*
  2. * Copyright (c) 2021, Jan de Visser <jan@de-visser.net>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibSQL/AST/AST.h>
  7. #include <LibSQL/Database.h>
  8. #include <LibSQL/Meta.h>
  9. #include <LibSQL/Row.h>
  10. namespace SQL::AST {
  11. RefPtr<SQLResult> Select::execute(ExecutionContext& context) const
  12. {
  13. if (table_or_subquery_list().size() == 1 && table_or_subquery_list()[0].is_table()) {
  14. if (result_column_list().size() == 1 && result_column_list()[0].type() == ResultType::All) {
  15. auto table = context.database->get_table(table_or_subquery_list()[0].schema_name(), table_or_subquery_list()[0].table_name());
  16. if (!table) {
  17. return SQLResult::construct(SQL::SQLCommand::Select, SQL::SQLErrorCode::TableDoesNotExist, table_or_subquery_list()[0].table_name());
  18. }
  19. NonnullRefPtr<TupleDescriptor> descriptor = table->to_tuple_descriptor();
  20. context.result = SQLResult::construct();
  21. for (auto& row : context.database->select_all(*table)) {
  22. Tuple tuple(descriptor);
  23. for (auto ix = 0u; ix < descriptor->size(); ix++) {
  24. tuple[ix] = row[ix];
  25. }
  26. context.result->append(tuple);
  27. }
  28. return context.result;
  29. }
  30. }
  31. return SQLResult::construct();
  32. }
  33. }