@@ -126,6 +126,8 @@ void Database::FreeSerialization(char* data, void* _) {
126126INIT (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+
212252NODE_METHOD (Database::JS_exec) {
213253 Database* db = Unwrap<Database>(info.This ());
214254 REQUIRE_ARGUMENT_STRING (first, v8::Local<v8::String> source);
0 commit comments