@@ -77,17 +77,6 @@ namespace Data {
7777 SQLITE_VALUE_TO_JS (value, isolate, safe_ints, value);
7878 }
7979
80- v8::Local<v8::Value> GetFlatRowJS (v8::Isolate* isolate, v8::Local<v8::Context> ctx, sqlite3_stmt* handle, bool safe_ints) {
81- v8::Local<v8::Object> row = v8::Object::New (isolate);
82- int column_count = sqlite3_column_count (handle);
83- for (int i = 0 ; i < column_count; ++i) {
84- row->Set (ctx,
85- InternalizedFromUtf8 (isolate, sqlite3_column_name (handle, i), -1 ),
86- Data::GetValueJS (isolate, handle, i, safe_ints)).FromJust ();
87- }
88- return row;
89- }
90-
9180 v8::Local<v8::Value> GetExpandedRowJS (v8::Isolate* isolate, v8::Local<v8::Context> ctx, sqlite3_stmt* handle, bool safe_ints) {
9281 v8::Local<v8::Object> row = v8::Object::New (isolate);
9382 int column_count = sqlite3_column_count (handle);
@@ -107,6 +96,20 @@ namespace Data {
10796 return row;
10897 }
10998
99+ #if !defined(NODE_MODULE_VERSION) || NODE_MODULE_VERSION < 127
100+
101+ v8::Local<v8::Value> GetFlatRowJS (v8::Isolate* isolate, v8::Local<v8::Context> ctx, sqlite3_stmt* handle, bool safe_ints) {
102+ v8::Local<v8::Object> row = v8::Object::New (isolate);
103+ int column_count = sqlite3_column_count (handle);
104+ for (int i = 0 ; i < column_count; ++i) {
105+ row->Set (ctx,
106+ InternalizedFromUtf8 (isolate, sqlite3_column_name (handle, i), -1 ),
107+ Data::GetValueJS (isolate, handle, i, safe_ints)
108+ ).FromJust ();
109+ }
110+ return row;
111+ }
112+
110113 v8::Local<v8::Value> GetRawRowJS (v8::Isolate* isolate, v8::Local<v8::Context> ctx, sqlite3_stmt* handle, bool safe_ints) {
111114 v8::Local<v8::Array> row = v8::Array::New (isolate);
112115 int column_count = sqlite3_column_count (handle);
@@ -125,6 +128,52 @@ namespace Data {
125128 return v8::Local<v8::Value>();
126129 }
127130
131+ #else
132+
133+ v8::Local<v8::Value> GetFlatRowJS (v8::Isolate* isolate, sqlite3_stmt* handle, bool safe_ints) {
134+ int column_count = sqlite3_column_count (handle);
135+ v8::LocalVector<v8::Name> keys (isolate);
136+ v8::LocalVector<v8::Value> values (isolate);
137+ keys.reserve (column_count);
138+ values.reserve (column_count);
139+ for (int i = 0 ; i < column_count; ++i) {
140+ keys.emplace_back (
141+ InternalizedFromUtf8 (isolate, sqlite3_column_name (handle, i), -1 ).As <v8::Name>()
142+ );
143+ values.emplace_back (
144+ Data::GetValueJS (isolate, handle, i, safe_ints)
145+ );
146+ }
147+ return v8::Object::New (
148+ isolate,
149+ v8::Null (isolate),
150+ keys.data (),
151+ values.data (),
152+ column_count
153+ );
154+ }
155+
156+ v8::Local<v8::Value> GetRawRowJS (v8::Isolate* isolate, sqlite3_stmt* handle, bool safe_ints) {
157+ int column_count = sqlite3_column_count (handle);
158+ v8::LocalVector<v8::Value> row (isolate);
159+ row.reserve (column_count);
160+ for (int i = 0 ; i < column_count; ++i) {
161+ row.emplace_back (Data::GetValueJS (isolate, handle, i, safe_ints));
162+ }
163+ return v8::Array::New (isolate, row.data (), row.size ());
164+ }
165+
166+ v8::Local<v8::Value> GetRowJS (v8::Isolate* isolate, v8::Local<v8::Context> ctx, sqlite3_stmt* handle, bool safe_ints, char mode) {
167+ if (mode == FLAT) return GetFlatRowJS (isolate, handle, safe_ints);
168+ if (mode == PLUCK) return GetValueJS (isolate, handle, 0 , safe_ints);
169+ if (mode == EXPAND) return GetExpandedRowJS (isolate, ctx, handle, safe_ints);
170+ if (mode == RAW) return GetRawRowJS (isolate, handle, safe_ints);
171+ assert (false );
172+ return v8::Local<v8::Value>();
173+ }
174+
175+ #endif
176+
128177 void GetArgumentsJS (v8::Isolate* isolate, v8::Local<v8::Value>* out, sqlite3_value** values, int argument_count, bool safe_ints) {
129178 assert (argument_count > 0 );
130179 for (int i = 0 ; i < argument_count; ++i) {
0 commit comments