Skip to content

Commit a447a47

Browse files
committed
Restore functionality of key() and rekey()
1 parent 45349df commit a447a47

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

src/objects/database.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ void Database::FreeSerialization(char* data, void* _) {
126126
INIT(Database::Init) {
127127
v8::Local<v8::FunctionTemplate> t = NewConstructorTemplate(isolate, data, JS_new, "Database");
128128
SetPrototypeMethod(isolate, data, t, "prepare", JS_prepare);
129+
SetPrototypeMethod(isolate, data, t, "key", JS_key);
130+
SetPrototypeMethod(isolate, data, t, "rekey", JS_rekey);
129131
SetPrototypeMethod(isolate, data, t, "exec", JS_exec);
130132
SetPrototypeMethod(isolate, data, t, "backup", JS_backup);
131133
SetPrototypeMethod(isolate, data, t, "serialize", JS_serialize);
@@ -209,6 +211,44 @@ NODE_METHOD(Database::JS_prepare) {
209211
if (!maybeStatement.IsEmpty()) info.GetReturnValue().Set(maybeStatement.ToLocalChecked());
210212
}
211213

214+
NODE_METHOD(Database::JS_key) {
215+
Database* db = Unwrap<Database>(info.This());
216+
REQUIRE_ARGUMENT_OBJECT(first, v8::Local<v8::Object> key);
217+
REQUIRE_ARGUMENT_INT32(second, unsigned int len);
218+
(void)key;
219+
(void)len;
220+
char* buffer = (char*) node::Buffer::Data(key);
221+
REQUIRE_DATABASE_OPEN(db);
222+
REQUIRE_DATABASE_NOT_BUSY(db);
223+
sqlite3* const db_handle = db->db_handle;
224+
int status = sqlite3_key(db_handle, buffer, len);
225+
if (status != SQLITE_OK) {
226+
db->ThrowSqliteError(db->addon, sqlite3_errstr(status), status);
227+
}
228+
else {
229+
info.GetReturnValue().Set(status);
230+
}
231+
}
232+
233+
NODE_METHOD(Database::JS_rekey) {
234+
Database* db = Unwrap<Database>(info.This());
235+
REQUIRE_ARGUMENT_OBJECT(first, v8::Local<v8::Object> key);
236+
REQUIRE_ARGUMENT_INT32(second, unsigned int len);
237+
(void)key;
238+
(void)len;
239+
char* buffer = (char*) node::Buffer::Data(key);
240+
REQUIRE_DATABASE_OPEN(db);
241+
REQUIRE_DATABASE_NOT_BUSY(db);
242+
sqlite3* const db_handle = db->db_handle;
243+
int status = sqlite3_rekey(db_handle, buffer, len);
244+
if (status != SQLITE_OK) {
245+
db->ThrowSqliteError(db->addon, sqlite3_errstr(status), status);
246+
}
247+
else {
248+
info.GetReturnValue().Set(status);
249+
}
250+
}
251+
212252
NODE_METHOD(Database::JS_exec) {
213253
Database* db = Unwrap<Database>(info.This());
214254
REQUIRE_ARGUMENT_STRING(first, v8::Local<v8::String> source);

src/objects/database.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ class Database : public node::ObjectWrap {
6969

7070
static NODE_METHOD(JS_new);
7171
static NODE_METHOD(JS_prepare);
72+
static NODE_METHOD(JS_key);
73+
static NODE_METHOD(JS_rekey);
7274
static NODE_METHOD(JS_exec);
7375
static NODE_METHOD(JS_backup);
7476
static NODE_METHOD(JS_serialize);

0 commit comments

Comments
 (0)