diff options
author | Timothy Flynn <trflynn89@pm.me> | 2022-09-21 13:47:02 -0400 |
---|---|---|
committer | Ali Mohammad Pur <Ali.mpfard@gmail.com> | 2022-10-14 17:47:44 +0330 |
commit | c0b54f18b59395c448a6365c4144e2a00a0c66b3 (patch) | |
tree | 912c60aa84ed46a2b1aea6a4d7b23ea7e1959268 /Userland/Libraries | |
parent | 5f549fe5d9712bdde6d2b9aacd772f0dedc44ad0 (diff) | |
download | serenity-c0b54f18b59395c448a6365c4144e2a00a0c66b3.zip |
LibSQL: Copy SQL::Value instances less frequently (which may be vectors)
Diffstat (limited to 'Userland/Libraries')
-rw-r--r-- | Userland/Libraries/LibSQL/AST/Expression.cpp | 9 | ||||
-rw-r--r-- | Userland/Libraries/LibSQL/AST/Insert.cpp | 5 | ||||
-rw-r--r-- | Userland/Libraries/LibSQL/Tuple.cpp | 4 |
3 files changed, 10 insertions, 8 deletions
diff --git a/Userland/Libraries/LibSQL/AST/Expression.cpp b/Userland/Libraries/LibSQL/AST/Expression.cpp index 839b2cf235..9619648308 100644 --- a/Userland/Libraries/LibSQL/AST/Expression.cpp +++ b/Userland/Libraries/LibSQL/AST/Expression.cpp @@ -40,12 +40,13 @@ ResultOr<Value> NestedExpression::evaluate(ExecutionContext& context) const ResultOr<Value> ChainedExpression::evaluate(ExecutionContext& context) const { - Value ret(SQLType::Tuple); Vector<Value> values; + TRY(values.try_ensure_capacity(expressions().size())); + for (auto& expression : expressions()) - values.append(TRY(expression.evaluate(context))); - ret = values; - return ret; + values.unchecked_append(TRY(expression.evaluate(context))); + + return Value { move(values) }; } ResultOr<Value> BinaryOperatorExpression::evaluate(ExecutionContext& context) const diff --git a/Userland/Libraries/LibSQL/AST/Insert.cpp b/Userland/Libraries/LibSQL/AST/Insert.cpp index 48ae68b73a..0c9cfb4fa9 100644 --- a/Userland/Libraries/LibSQL/AST/Insert.cpp +++ b/Userland/Libraries/LibSQL/AST/Insert.cpp @@ -47,7 +47,8 @@ ResultOr<ResultSet> Insert::execute(ExecutionContext& context) const auto row_value = TRY(row_expr.evaluate(context)); VERIFY(row_value.type() == SQLType::Tuple); - auto values = row_value.to_vector().value(); + + auto values = row_value.to_vector().release_value(); if (m_column_names.is_empty() && values.size() != row.size()) return Result { SQLCommand::Insert, SQLErrorCode::InvalidNumberOfValues, String::empty() }; @@ -62,7 +63,7 @@ ResultOr<ResultSet> Insert::execute(ExecutionContext& context) const if (!does_value_data_type_match(element_type, input_value_type)) return Result { SQLCommand::Insert, SQLErrorCode::InvalidValueType, table_def->columns()[element_index].name() }; - row[element_index] = values[ix]; + row[element_index] = move(values[ix]); } TRY(context.database->insert(row)); diff --git a/Userland/Libraries/LibSQL/Tuple.cpp b/Userland/Libraries/LibSQL/Tuple.cpp index 58a96fabe8..fbaa7bed7e 100644 --- a/Userland/Libraries/LibSQL/Tuple.cpp +++ b/Userland/Libraries/LibSQL/Tuple.cpp @@ -231,8 +231,8 @@ int Tuple::compare(Tuple const& other) const int Tuple::match(Tuple const& other) const { auto other_index = 0u; - for (auto& part : *other.descriptor()) { - auto other_value = other[other_index]; + for (auto const& part : *other.descriptor()) { + auto const& other_value = other[other_index]; if (other_value.is_null()) return 0; auto my_index = index_of(part.name); |