mirror of
https://github.com/hanzoai/better-sqlite3-multiple-ciphers.git
synced 2026-09-24 16:57:19 +00:00
Restore functionality of key() and rekey()
This commit is contained in:
@@ -126,6 +126,8 @@ void Database::FreeSerialization(char* data, void* _) {
|
||||
INIT(Database::Init) {
|
||||
v8::Local<v8::FunctionTemplate> t = NewConstructorTemplate(isolate, data, JS_new, "Database");
|
||||
SetPrototypeMethod(isolate, data, t, "prepare", JS_prepare);
|
||||
SetPrototypeMethod(isolate, data, t, "key", JS_key);
|
||||
SetPrototypeMethod(isolate, data, t, "rekey", JS_rekey);
|
||||
SetPrototypeMethod(isolate, data, t, "exec", JS_exec);
|
||||
SetPrototypeMethod(isolate, data, t, "backup", JS_backup);
|
||||
SetPrototypeMethod(isolate, data, t, "serialize", JS_serialize);
|
||||
@@ -209,6 +211,44 @@ NODE_METHOD(Database::JS_prepare) {
|
||||
if (!maybeStatement.IsEmpty()) info.GetReturnValue().Set(maybeStatement.ToLocalChecked());
|
||||
}
|
||||
|
||||
NODE_METHOD(Database::JS_key) {
|
||||
Database* db = Unwrap<Database>(info.This());
|
||||
REQUIRE_ARGUMENT_OBJECT(first, v8::Local<v8::Object> key);
|
||||
REQUIRE_ARGUMENT_INT32(second, unsigned int len);
|
||||
(void)key;
|
||||
(void)len;
|
||||
char* buffer = (char*) node::Buffer::Data(key);
|
||||
REQUIRE_DATABASE_OPEN(db);
|
||||
REQUIRE_DATABASE_NOT_BUSY(db);
|
||||
sqlite3* const db_handle = db->db_handle;
|
||||
int status = sqlite3_key(db_handle, buffer, len);
|
||||
if (status != SQLITE_OK) {
|
||||
db->ThrowSqliteError(db->addon, sqlite3_errstr(status), status);
|
||||
}
|
||||
else {
|
||||
info.GetReturnValue().Set(status);
|
||||
}
|
||||
}
|
||||
|
||||
NODE_METHOD(Database::JS_rekey) {
|
||||
Database* db = Unwrap<Database>(info.This());
|
||||
REQUIRE_ARGUMENT_OBJECT(first, v8::Local<v8::Object> key);
|
||||
REQUIRE_ARGUMENT_INT32(second, unsigned int len);
|
||||
(void)key;
|
||||
(void)len;
|
||||
char* buffer = (char*) node::Buffer::Data(key);
|
||||
REQUIRE_DATABASE_OPEN(db);
|
||||
REQUIRE_DATABASE_NOT_BUSY(db);
|
||||
sqlite3* const db_handle = db->db_handle;
|
||||
int status = sqlite3_rekey(db_handle, buffer, len);
|
||||
if (status != SQLITE_OK) {
|
||||
db->ThrowSqliteError(db->addon, sqlite3_errstr(status), status);
|
||||
}
|
||||
else {
|
||||
info.GetReturnValue().Set(status);
|
||||
}
|
||||
}
|
||||
|
||||
NODE_METHOD(Database::JS_exec) {
|
||||
Database* db = Unwrap<Database>(info.This());
|
||||
REQUIRE_ARGUMENT_STRING(first, v8::Local<v8::String> source);
|
||||
|
||||
@@ -69,6 +69,8 @@ private:
|
||||
|
||||
static NODE_METHOD(JS_new);
|
||||
static NODE_METHOD(JS_prepare);
|
||||
static NODE_METHOD(JS_key);
|
||||
static NODE_METHOD(JS_rekey);
|
||||
static NODE_METHOD(JS_exec);
|
||||
static NODE_METHOD(JS_backup);
|
||||
static NODE_METHOD(JS_serialize);
|
||||
|
||||
Reference in New Issue
Block a user