@@ -35,11 +35,14 @@ using v8::HandleScope;
3535using v8::Int32;
3636using v8::Integer;
3737using v8::Isolate;
38+ using v8::JustVoid;
3839using v8::Local;
3940using v8::LocalVector;
41+ using v8::Maybe;
4042using v8::MaybeLocal;
4143using v8::Name;
4244using v8::NewStringType;
45+ using v8::Nothing;
4346using v8::Null;
4447using v8::Number;
4548using v8::Object;
@@ -2017,17 +2020,18 @@ MaybeLocal<Name> StatementSync::ColumnNameToName(const int column) {
20172020
20182021void StatementSync::MemoryInfo (MemoryTracker* tracker) const {}
20192022
2020- std::optional<LocalVector<Value>> ExtractRowValues (Isolate* isolate,
2021- int num_cols,
2022- StatementSync* stmt) {
2023- LocalVector<Value> row_values (isolate);
2024- row_values.reserve (num_cols);
2023+ Maybe<void > ExtractRowValues (Isolate* isolate,
2024+ int num_cols,
2025+ StatementSync* stmt,
2026+ LocalVector<Value>* row_values) {
2027+ row_values->clear ();
2028+ row_values->reserve (num_cols);
20252029 for (int i = 0 ; i < num_cols; ++i) {
20262030 Local<Value> val;
2027- if (!stmt->ColumnToValue (i).ToLocal (&val)) return std:: nullopt ;
2028- row_values. emplace_back (val);
2031+ if (!stmt->ColumnToValue (i).ToLocal (&val)) return Nothing< void >() ;
2032+ row_values-> emplace_back (val);
20292033 }
2030- return row_values ;
2034+ return JustVoid () ;
20312035}
20322036
20332037void StatementSync::All (const FunctionCallbackInfo<Value>& args) {
@@ -2051,10 +2055,10 @@ void StatementSync::All(const FunctionCallbackInfo<Value>& args) {
20512055 LocalVector<Name> row_keys (isolate);
20522056
20532057 while ((r = sqlite3_step (stmt->statement_ )) == SQLITE_ROW) {
2054- auto maybe_row_values = ExtractRowValues (env->isolate (), num_cols, stmt);
2055- if (!maybe_row_values.has_value ()) return ;
2058+ auto maybe_row_values =
2059+ ExtractRowValues (env->isolate (), num_cols, stmt, &row_values);
2060+ if (maybe_row_values.IsNothing ()) return ;
20562061
2057- row_values = std::move (maybe_row_values.value ());
20582062 if (stmt->return_arrays_ ) {
20592063 Local<Array> row_array =
20602064 Array::New (isolate, row_values.data (), row_values.size ());
@@ -2550,10 +2554,8 @@ void StatementSyncIterator::Next(const FunctionCallbackInfo<Value>& args) {
25502554 LocalVector<Value> row_values (isolate);
25512555
25522556 auto maybe_row_values =
2553- ExtractRowValues (isolate, num_cols, iter->stmt_ .get ());
2554- if (!maybe_row_values.has_value ()) return ;
2555-
2556- row_values = std::move (maybe_row_values.value ());
2557+ ExtractRowValues (isolate, num_cols, iter->stmt_ .get (), &row_values);
2558+ if (maybe_row_values.IsNothing ()) return ;
25572559
25582560 if (iter->stmt_ ->return_arrays_ ) {
25592561 row_value = Array::New (isolate, row_values.data (), row_values.size ());
0 commit comments