MCPcopy Create free account
hub / github.com/WiseLibs/better-sqlite3 / NODE_METHOD

Function NODE_METHOD

src/objects/database.cpp:144–194  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

142}
143
144NODE_METHOD(Database::JS_new) {
145 assert(info.IsConstructCall());
146 REQUIRE_ARGUMENT_STRING(first, v8::Local<v8::String> filename);
147 REQUIRE_ARGUMENT_STRING(second, v8::Local<v8::String> filenameGiven);
148 REQUIRE_ARGUMENT_BOOLEAN(third, bool in_memory);
149 REQUIRE_ARGUMENT_BOOLEAN(fourth, bool readonly);
150 REQUIRE_ARGUMENT_BOOLEAN(fifth, bool must_exist);
151 REQUIRE_ARGUMENT_INT32(sixth, int timeout);
152 REQUIRE_ARGUMENT_ANY(seventh, v8::Local<v8::Value> logger);
153 REQUIRE_ARGUMENT_ANY(eighth, v8::Local<v8::Value> buffer);
154
155 UseAddon;
156 UseIsolate;
157 sqlite3* db_handle;
158 v8::String::Utf8Value utf8(isolate, filename);
159 int mask = readonly ? SQLITE_OPEN_READONLY
160 : must_exist ? SQLITE_OPEN_READWRITE
161 : (SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
162
163 if (sqlite3_open_v2(*utf8, &db_handle, mask, NULL) != SQLITE_OK) {
164 ThrowSqliteError(addon, db_handle);
165 int status = sqlite3_close(db_handle);
166 assert(status == SQLITE_OK); ((void)status);
167 return;
168 }
169
170 assert(sqlite3_db_mutex(db_handle) == NULL);
171 sqlite3_extended_result_codes(db_handle, 1);
172 sqlite3_busy_timeout(db_handle, timeout);
173 sqlite3_limit(db_handle, SQLITE_LIMIT_LENGTH, MAX_BUFFER_SIZE < MAX_STRING_SIZE ? MAX_BUFFER_SIZE : MAX_STRING_SIZE);
174 sqlite3_limit(db_handle, SQLITE_LIMIT_SQL_LENGTH, MAX_STRING_SIZE);
175 int status = sqlite3_db_config(db_handle, SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION, 1, NULL);
176 assert(status == SQLITE_OK); ((void)status);
177 status = sqlite3_db_config(db_handle, SQLITE_DBCONFIG_DEFENSIVE, 1, NULL);
178 assert(status == SQLITE_OK); ((void)status);
179
180 if (node::Buffer::HasInstance(buffer) && !Deserialize(buffer.As<v8::Object>(), addon, db_handle, readonly)) {
181 int status = sqlite3_close(db_handle);
182 assert(status == SQLITE_OK); ((void)status);
183 return;
184 }
185
186 UseContext;
187 Database* db = new Database(isolate, addon, db_handle, logger);
188 db->Wrap(info.This());
189 SetFrozen(isolate, ctx, info.This(), addon->cs.memory, v8::Boolean::New(isolate, in_memory));
190 SetFrozen(isolate, ctx, info.This(), addon->cs.readonly, v8::Boolean::New(isolate, readonly));
191 SetFrozen(isolate, ctx, info.This(), addon->cs.name, filenameGiven);
192
193 info.GetReturnValue().Set(info.This());
194}
195
196NODE_METHOD(Database::JS_prepare) {
197 REQUIRE_ARGUMENT_STRING(first, v8::Local<v8::String> source);

Callers

nothing calls this directly

Calls 6

SetFrozenFunction · 0.85
IS_SKIPPEDFunction · 0.85
ThrowErrorFunction · 0.85
LogMethod · 0.80
ThrowDatabaseErrorMethod · 0.80
CloseHandlesMethod · 0.45

Tested by

no test coverage detected