From 0cfb5eec327f14be49e29b18e820d28ee10874fa Mon Sep 17 00:00:00 2001 From: Jan de Visser Date: Thu, 21 Oct 2021 18:13:29 -0400 Subject: [PATCH] LibSQL: First cut of SQL `WHERE` clause Filters matching rows by doing a table scan and evaluating the `WHERE` expression for every row. Does not use indexes, for one because they do not exist yet. --- Userland/Libraries/LibSQL/AST/Select.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibSQL/AST/Select.cpp b/Userland/Libraries/LibSQL/AST/Select.cpp index c350ffee650..56d7d0be269 100644 --- a/Userland/Libraries/LibSQL/AST/Select.cpp +++ b/Userland/Libraries/LibSQL/AST/Select.cpp @@ -34,9 +34,15 @@ RefPtr Select::execute(ExecutionContext& context) const } context.result = SQLResult::construct(); AK::NonnullRefPtr descriptor = AK::adopt_ref(*new TupleDescriptor); + Tuple tuple(descriptor); for (auto& row : context.database->select_all(*table)) { context.current_row = &row; - Tuple tuple(descriptor); + if (where_clause()) { + auto where_result = where_clause()->evaluate(context); + if (!where_result) + continue; + } + tuple.clear(); for (auto& col : columns) { auto value = col.expression()->evaluate(context); tuple.append(value);