clawdlets 0.2.4 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.mjs +556 -1004
- package/node_modules/@clawdlets/core/dist/lib/context.d.ts +21 -0
- package/node_modules/@clawdlets/core/dist/lib/context.d.ts.map +1 -0
- package/node_modules/@clawdlets/core/dist/lib/context.js +19 -0
- package/node_modules/@clawdlets/core/dist/lib/context.js.map +1 -0
- package/node_modules/@clawdlets/core/dist/lib/host-resolve.d.ts +6 -0
- package/node_modules/@clawdlets/core/dist/lib/host-resolve.d.ts.map +1 -0
- package/node_modules/@clawdlets/core/dist/lib/host-resolve.js +20 -0
- package/node_modules/@clawdlets/core/dist/lib/host-resolve.js.map +1 -0
- package/node_modules/@clawdlets/core/dist/repo-layout.d.ts +1 -0
- package/node_modules/@clawdlets/core/dist/repo-layout.d.ts.map +1 -1
- package/node_modules/@clawdlets/core/dist/repo-layout.js +2 -0
- package/node_modules/@clawdlets/core/dist/repo-layout.js.map +1 -1
- package/node_modules/@clawdlets/core/package.json +1 -3
- package/package.json +3 -6
- package/node_modules/@clawdlets/clf-queue/dist/client.d.ts +0 -21
- package/node_modules/@clawdlets/clf-queue/dist/client.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/client.js +0 -132
- package/node_modules/@clawdlets/clf-queue/dist/client.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/index.d.ts +0 -9
- package/node_modules/@clawdlets/clf-queue/dist/index.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/index.js +0 -5
- package/node_modules/@clawdlets/clf-queue/dist/index.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/jobs.d.ts +0 -32
- package/node_modules/@clawdlets/clf-queue/dist/jobs.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/jobs.js +0 -24
- package/node_modules/@clawdlets/clf-queue/dist/jobs.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/protocol.d.ts +0 -118
- package/node_modules/@clawdlets/clf-queue/dist/protocol.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/protocol.js +0 -46
- package/node_modules/@clawdlets/clf-queue/dist/protocol.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/bootstrap-tokens.d.ts +0 -3
- package/node_modules/@clawdlets/clf-queue/dist/queue/bootstrap-tokens.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/bootstrap-tokens.js +0 -112
- package/node_modules/@clawdlets/clf-queue/dist/queue/bootstrap-tokens.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/jobs.d.ts +0 -3
- package/node_modules/@clawdlets/clf-queue/dist/queue/jobs.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/jobs.js +0 -313
- package/node_modules/@clawdlets/clf-queue/dist/queue/jobs.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/migrate.d.ts +0 -2
- package/node_modules/@clawdlets/clf-queue/dist/queue/migrate.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/migrate.js +0 -74
- package/node_modules/@clawdlets/clf-queue/dist/queue/migrate.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/open.d.ts +0 -3
- package/node_modules/@clawdlets/clf-queue/dist/queue/open.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/open.js +0 -27
- package/node_modules/@clawdlets/clf-queue/dist/queue/open.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/types.d.ts +0 -113
- package/node_modules/@clawdlets/clf-queue/dist/queue/types.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/types.js +0 -2
- package/node_modules/@clawdlets/clf-queue/dist/queue/types.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/util.d.ts +0 -10
- package/node_modules/@clawdlets/clf-queue/dist/queue/util.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue/util.js +0 -30
- package/node_modules/@clawdlets/clf-queue/dist/queue/util.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue.d.ts +0 -3
- package/node_modules/@clawdlets/clf-queue/dist/queue.d.ts.map +0 -1
- package/node_modules/@clawdlets/clf-queue/dist/queue.js +0 -2
- package/node_modules/@clawdlets/clf-queue/dist/queue.js.map +0 -1
- package/node_modules/@clawdlets/clf-queue/package.json +0 -36
- package/node_modules/@clawdlets/core/dist/lib/cattle-state.d.ts +0 -25
- package/node_modules/@clawdlets/core/dist/lib/cattle-state.d.ts.map +0 -1
- package/node_modules/@clawdlets/core/dist/lib/cattle-state.js +0 -136
- package/node_modules/@clawdlets/core/dist/lib/cattle-state.js.map +0 -1
- package/node_modules/better-sqlite3/LICENSE +0 -21
- package/node_modules/better-sqlite3/README.md +0 -99
- package/node_modules/better-sqlite3/binding.gyp +0 -38
- package/node_modules/better-sqlite3/deps/common.gypi +0 -68
- package/node_modules/better-sqlite3/deps/copy.js +0 -31
- package/node_modules/better-sqlite3/deps/defines.gypi +0 -41
- package/node_modules/better-sqlite3/deps/download.sh +0 -122
- package/node_modules/better-sqlite3/deps/patches/1208.patch +0 -15
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +0 -265969
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +0 -13968
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3ext.h +0 -730
- package/node_modules/better-sqlite3/deps/sqlite3.gyp +0 -80
- package/node_modules/better-sqlite3/deps/test_extension.c +0 -21
- package/node_modules/better-sqlite3/lib/database.js +0 -90
- package/node_modules/better-sqlite3/lib/index.js +0 -3
- package/node_modules/better-sqlite3/lib/methods/aggregate.js +0 -43
- package/node_modules/better-sqlite3/lib/methods/backup.js +0 -67
- package/node_modules/better-sqlite3/lib/methods/function.js +0 -31
- package/node_modules/better-sqlite3/lib/methods/inspect.js +0 -7
- package/node_modules/better-sqlite3/lib/methods/pragma.js +0 -12
- package/node_modules/better-sqlite3/lib/methods/serialize.js +0 -16
- package/node_modules/better-sqlite3/lib/methods/table.js +0 -189
- package/node_modules/better-sqlite3/lib/methods/transaction.js +0 -78
- package/node_modules/better-sqlite3/lib/methods/wrappers.js +0 -54
- package/node_modules/better-sqlite3/lib/sqlite-error.js +0 -20
- package/node_modules/better-sqlite3/lib/util.js +0 -12
- package/node_modules/better-sqlite3/package.json +0 -59
- package/node_modules/better-sqlite3/src/addon.cpp +0 -47
- package/node_modules/better-sqlite3/src/better_sqlite3.cpp +0 -74
- package/node_modules/better-sqlite3/src/objects/backup.cpp +0 -120
- package/node_modules/better-sqlite3/src/objects/backup.hpp +0 -36
- package/node_modules/better-sqlite3/src/objects/database.cpp +0 -417
- package/node_modules/better-sqlite3/src/objects/database.hpp +0 -103
- package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +0 -113
- package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +0 -50
- package/node_modules/better-sqlite3/src/objects/statement.cpp +0 -383
- package/node_modules/better-sqlite3/src/objects/statement.hpp +0 -58
- package/node_modules/better-sqlite3/src/util/bind-map.cpp +0 -73
- package/node_modules/better-sqlite3/src/util/binder.cpp +0 -193
- package/node_modules/better-sqlite3/src/util/constants.cpp +0 -172
- package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +0 -121
- package/node_modules/better-sqlite3/src/util/custom-function.cpp +0 -59
- package/node_modules/better-sqlite3/src/util/custom-table.cpp +0 -409
- package/node_modules/better-sqlite3/src/util/data-converter.cpp +0 -17
- package/node_modules/better-sqlite3/src/util/data.cpp +0 -194
- package/node_modules/better-sqlite3/src/util/helpers.cpp +0 -109
- package/node_modules/better-sqlite3/src/util/macros.cpp +0 -70
- package/node_modules/better-sqlite3/src/util/query-macros.cpp +0 -71
- package/node_modules/better-sqlite3/src/util/row-builder.cpp +0 -49
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
const { cppdb } = require('../util');
|
|
3
|
-
|
|
4
|
-
exports.prepare = function prepare(sql) {
|
|
5
|
-
return this[cppdb].prepare(sql, this, false);
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
exports.exec = function exec(sql) {
|
|
9
|
-
this[cppdb].exec(sql);
|
|
10
|
-
return this;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
exports.close = function close() {
|
|
14
|
-
this[cppdb].close();
|
|
15
|
-
return this;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
exports.loadExtension = function loadExtension(...args) {
|
|
19
|
-
this[cppdb].loadExtension(...args);
|
|
20
|
-
return this;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
exports.defaultSafeIntegers = function defaultSafeIntegers(...args) {
|
|
24
|
-
this[cppdb].defaultSafeIntegers(...args);
|
|
25
|
-
return this;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
exports.unsafeMode = function unsafeMode(...args) {
|
|
29
|
-
this[cppdb].unsafeMode(...args);
|
|
30
|
-
return this;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
exports.getters = {
|
|
34
|
-
name: {
|
|
35
|
-
get: function name() { return this[cppdb].name; },
|
|
36
|
-
enumerable: true,
|
|
37
|
-
},
|
|
38
|
-
open: {
|
|
39
|
-
get: function open() { return this[cppdb].open; },
|
|
40
|
-
enumerable: true,
|
|
41
|
-
},
|
|
42
|
-
inTransaction: {
|
|
43
|
-
get: function inTransaction() { return this[cppdb].inTransaction; },
|
|
44
|
-
enumerable: true,
|
|
45
|
-
},
|
|
46
|
-
readonly: {
|
|
47
|
-
get: function readonly() { return this[cppdb].readonly; },
|
|
48
|
-
enumerable: true,
|
|
49
|
-
},
|
|
50
|
-
memory: {
|
|
51
|
-
get: function memory() { return this[cppdb].memory; },
|
|
52
|
-
enumerable: true,
|
|
53
|
-
},
|
|
54
|
-
};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
const descriptor = { value: 'SqliteError', writable: true, enumerable: false, configurable: true };
|
|
3
|
-
|
|
4
|
-
function SqliteError(message, code) {
|
|
5
|
-
if (new.target !== SqliteError) {
|
|
6
|
-
return new SqliteError(message, code);
|
|
7
|
-
}
|
|
8
|
-
if (typeof code !== 'string') {
|
|
9
|
-
throw new TypeError('Expected second argument to be a string');
|
|
10
|
-
}
|
|
11
|
-
Error.call(this, message);
|
|
12
|
-
descriptor.value = '' + message;
|
|
13
|
-
Object.defineProperty(this, 'message', descriptor);
|
|
14
|
-
Error.captureStackTrace(this, SqliteError);
|
|
15
|
-
this.code = code;
|
|
16
|
-
}
|
|
17
|
-
Object.setPrototypeOf(SqliteError, Error);
|
|
18
|
-
Object.setPrototypeOf(SqliteError.prototype, Error.prototype);
|
|
19
|
-
Object.defineProperty(SqliteError.prototype, 'name', descriptor);
|
|
20
|
-
module.exports = SqliteError;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
exports.getBooleanOption = (options, key) => {
|
|
4
|
-
let value = false;
|
|
5
|
-
if (key in options && typeof (value = options[key]) !== 'boolean') {
|
|
6
|
-
throw new TypeError(`Expected the "${key}" option to be a boolean`);
|
|
7
|
-
}
|
|
8
|
-
return value;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
exports.cppdb = Symbol();
|
|
12
|
-
exports.inspect = Symbol.for('nodejs.util.inspect.custom');
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "better-sqlite3",
|
|
3
|
-
"version": "12.6.2",
|
|
4
|
-
"description": "The fastest and simplest library for SQLite in Node.js.",
|
|
5
|
-
"homepage": "http://github.com/WiseLibs/better-sqlite3",
|
|
6
|
-
"author": "Joshua Wise <joshuathomaswise@gmail.com>",
|
|
7
|
-
"repository": {
|
|
8
|
-
"type": "git",
|
|
9
|
-
"url": "git://github.com/WiseLibs/better-sqlite3.git"
|
|
10
|
-
},
|
|
11
|
-
"main": "lib/index.js",
|
|
12
|
-
"files": [
|
|
13
|
-
"binding.gyp",
|
|
14
|
-
"src/**/*.[ch]pp",
|
|
15
|
-
"lib/**",
|
|
16
|
-
"deps/**"
|
|
17
|
-
],
|
|
18
|
-
"engines": {
|
|
19
|
-
"node": "20.x || 22.x || 23.x || 24.x || 25.x"
|
|
20
|
-
},
|
|
21
|
-
"dependencies": {
|
|
22
|
-
"bindings": "^1.5.0",
|
|
23
|
-
"prebuild-install": "^7.1.1"
|
|
24
|
-
},
|
|
25
|
-
"overrides": {
|
|
26
|
-
"prebuild": {
|
|
27
|
-
"node-abi": "^4.25.0"
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
"devDependencies": {
|
|
31
|
-
"chai": "^4.3.8",
|
|
32
|
-
"cli-color": "^2.0.3",
|
|
33
|
-
"fs-extra": "^11.1.1",
|
|
34
|
-
"mocha": "^10.2.0",
|
|
35
|
-
"nodemark": "^0.3.0",
|
|
36
|
-
"prebuild": "^13.0.1",
|
|
37
|
-
"sqlite": "^5.0.1",
|
|
38
|
-
"sqlite3": "^5.1.6"
|
|
39
|
-
},
|
|
40
|
-
"scripts": {
|
|
41
|
-
"install": "prebuild-install || node-gyp rebuild --release",
|
|
42
|
-
"build-release": "node-gyp rebuild --release",
|
|
43
|
-
"build-debug": "node-gyp rebuild --debug",
|
|
44
|
-
"test": "mocha --exit --slow=75 --timeout=5000",
|
|
45
|
-
"benchmark": "node benchmark",
|
|
46
|
-
"download": "bash ./deps/download.sh"
|
|
47
|
-
},
|
|
48
|
-
"license": "MIT",
|
|
49
|
-
"keywords": [
|
|
50
|
-
"sql",
|
|
51
|
-
"sqlite",
|
|
52
|
-
"sqlite3",
|
|
53
|
-
"transactions",
|
|
54
|
-
"user-defined functions",
|
|
55
|
-
"aggregate functions",
|
|
56
|
-
"window functions",
|
|
57
|
-
"database"
|
|
58
|
-
]
|
|
59
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
struct Addon {
|
|
2
|
-
explicit Addon(v8::Isolate* isolate) :
|
|
3
|
-
privileged_info(NULL),
|
|
4
|
-
next_id(0),
|
|
5
|
-
cs(isolate) {}
|
|
6
|
-
|
|
7
|
-
static void Cleanup(void* ptr) {
|
|
8
|
-
Addon* addon = static_cast<Addon*>(ptr);
|
|
9
|
-
for (Database* db : addon->dbs) db->CloseHandles();
|
|
10
|
-
addon->dbs.clear();
|
|
11
|
-
delete addon;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
inline sqlite3_uint64 NextId() {
|
|
15
|
-
return next_id++;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
static void ConfigureURI() {
|
|
19
|
-
static std::once_flag init_flag;
|
|
20
|
-
std::call_once(init_flag, [](){
|
|
21
|
-
const char* env = getenv("SQLITE_USE_URI");
|
|
22
|
-
if (env != NULL) {
|
|
23
|
-
if (strcmp(env, "1") == 0) {
|
|
24
|
-
int status = sqlite3_config(SQLITE_CONFIG_URI, 1);
|
|
25
|
-
assert(status == SQLITE_OK); ((void)status);
|
|
26
|
-
} else if (strcmp(env, "0") == 0) {
|
|
27
|
-
int status = sqlite3_config(SQLITE_CONFIG_URI, 0);
|
|
28
|
-
assert(status == SQLITE_OK); ((void)status);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
static NODE_METHOD(JS_setErrorConstructor) {
|
|
35
|
-
REQUIRE_ARGUMENT_FUNCTION(first, v8::Local<v8::Function> SqliteError);
|
|
36
|
-
OnlyAddon->SqliteError.Reset(OnlyIsolate, SqliteError);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
v8::Global<v8::Function> Statement;
|
|
40
|
-
v8::Global<v8::Function> StatementIterator;
|
|
41
|
-
v8::Global<v8::Function> Backup;
|
|
42
|
-
v8::Global<v8::Function> SqliteError;
|
|
43
|
-
NODE_ARGUMENTS_POINTER privileged_info;
|
|
44
|
-
sqlite3_uint64 next_id;
|
|
45
|
-
CS cs;
|
|
46
|
-
std::set<Database*, Database::CompareDatabase> dbs;
|
|
47
|
-
};
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
#include <climits>
|
|
2
|
-
#include <cstdio>
|
|
3
|
-
#include <cstring>
|
|
4
|
-
#include <string>
|
|
5
|
-
#include <vector>
|
|
6
|
-
#include <set>
|
|
7
|
-
#include <unordered_map>
|
|
8
|
-
#include <algorithm>
|
|
9
|
-
#include <mutex>
|
|
10
|
-
#include <sqlite3.h>
|
|
11
|
-
#include <node.h>
|
|
12
|
-
#include <node_object_wrap.h>
|
|
13
|
-
#include <node_buffer.h>
|
|
14
|
-
|
|
15
|
-
struct Addon;
|
|
16
|
-
class Database;
|
|
17
|
-
class Statement;
|
|
18
|
-
class StatementIterator;
|
|
19
|
-
class Backup;
|
|
20
|
-
|
|
21
|
-
#include "util/macros.cpp"
|
|
22
|
-
#include "util/helpers.cpp"
|
|
23
|
-
#include "util/constants.cpp"
|
|
24
|
-
#include "util/bind-map.cpp"
|
|
25
|
-
#include "util/data-converter.cpp"
|
|
26
|
-
#include "util/data.cpp"
|
|
27
|
-
#if defined(NODE_MODULE_VERSION) && NODE_MODULE_VERSION >= 127
|
|
28
|
-
#include "util/row-builder.cpp"
|
|
29
|
-
#endif
|
|
30
|
-
|
|
31
|
-
#include "objects/backup.hpp"
|
|
32
|
-
#include "objects/statement.hpp"
|
|
33
|
-
#include "objects/database.hpp"
|
|
34
|
-
#include "addon.cpp"
|
|
35
|
-
#include "objects/statement-iterator.hpp"
|
|
36
|
-
|
|
37
|
-
#include "util/query-macros.cpp"
|
|
38
|
-
#include "util/custom-function.cpp"
|
|
39
|
-
#include "util/custom-aggregate.cpp"
|
|
40
|
-
#include "util/custom-table.cpp"
|
|
41
|
-
#include "util/binder.cpp"
|
|
42
|
-
|
|
43
|
-
#include "objects/backup.cpp"
|
|
44
|
-
#include "objects/statement.cpp"
|
|
45
|
-
#include "objects/database.cpp"
|
|
46
|
-
#include "objects/statement-iterator.cpp"
|
|
47
|
-
|
|
48
|
-
NODE_MODULE_INIT(/* exports, context */) {
|
|
49
|
-
#if defined(NODE_MODULE_VERSION) && NODE_MODULE_VERSION >= 140
|
|
50
|
-
// Use Isolate::GetCurrent as stated in deprecation message within v8_context.h 13.9.72320122
|
|
51
|
-
v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
|
52
|
-
#else
|
|
53
|
-
v8::Isolate* isolate = context->GetIsolate();
|
|
54
|
-
#endif
|
|
55
|
-
v8::HandleScope scope(isolate);
|
|
56
|
-
Addon::ConfigureURI();
|
|
57
|
-
|
|
58
|
-
// Initialize addon instance.
|
|
59
|
-
Addon* addon = new Addon(isolate);
|
|
60
|
-
v8::Local<v8::External> data = v8::External::New(isolate, addon);
|
|
61
|
-
node::AddEnvironmentCleanupHook(isolate, Addon::Cleanup, addon);
|
|
62
|
-
|
|
63
|
-
// Create and export native-backed classes and functions.
|
|
64
|
-
exports->Set(context, InternalizedFromLatin1(isolate, "Database"), Database::Init(isolate, data)).FromJust();
|
|
65
|
-
exports->Set(context, InternalizedFromLatin1(isolate, "Statement"), Statement::Init(isolate, data)).FromJust();
|
|
66
|
-
exports->Set(context, InternalizedFromLatin1(isolate, "StatementIterator"), StatementIterator::Init(isolate, data)).FromJust();
|
|
67
|
-
exports->Set(context, InternalizedFromLatin1(isolate, "Backup"), Backup::Init(isolate, data)).FromJust();
|
|
68
|
-
exports->Set(context, InternalizedFromLatin1(isolate, "setErrorConstructor"), v8::FunctionTemplate::New(isolate, Addon::JS_setErrorConstructor, data)->GetFunction(context).ToLocalChecked()).FromJust();
|
|
69
|
-
|
|
70
|
-
// Store addon instance data.
|
|
71
|
-
addon->Statement.Reset(isolate, exports->Get(context, InternalizedFromLatin1(isolate, "Statement")).ToLocalChecked().As<v8::Function>());
|
|
72
|
-
addon->StatementIterator.Reset(isolate, exports->Get(context, InternalizedFromLatin1(isolate, "StatementIterator")).ToLocalChecked().As<v8::Function>());
|
|
73
|
-
addon->Backup.Reset(isolate, exports->Get(context, InternalizedFromLatin1(isolate, "Backup")).ToLocalChecked().As<v8::Function>());
|
|
74
|
-
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
Backup::Backup(
|
|
2
|
-
Database* db,
|
|
3
|
-
sqlite3* dest_handle,
|
|
4
|
-
sqlite3_backup* backup_handle,
|
|
5
|
-
sqlite3_uint64 id,
|
|
6
|
-
bool unlink
|
|
7
|
-
) :
|
|
8
|
-
node::ObjectWrap(),
|
|
9
|
-
db(db),
|
|
10
|
-
dest_handle(dest_handle),
|
|
11
|
-
backup_handle(backup_handle),
|
|
12
|
-
id(id),
|
|
13
|
-
alive(true),
|
|
14
|
-
unlink(unlink) {
|
|
15
|
-
assert(db != NULL);
|
|
16
|
-
assert(dest_handle != NULL);
|
|
17
|
-
assert(backup_handle != NULL);
|
|
18
|
-
db->AddBackup(this);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
Backup::~Backup() {
|
|
22
|
-
if (alive) db->RemoveBackup(this);
|
|
23
|
-
CloseHandles();
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// Whenever this is used, db->RemoveBackup must be invoked beforehand.
|
|
27
|
-
void Backup::CloseHandles() {
|
|
28
|
-
if (alive) {
|
|
29
|
-
alive = false;
|
|
30
|
-
std::string filename(sqlite3_db_filename(dest_handle, "main"));
|
|
31
|
-
sqlite3_backup_finish(backup_handle);
|
|
32
|
-
int status = sqlite3_close(dest_handle);
|
|
33
|
-
assert(status == SQLITE_OK); ((void)status);
|
|
34
|
-
if (unlink) remove(filename.c_str());
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
INIT(Backup::Init) {
|
|
39
|
-
v8::Local<v8::FunctionTemplate> t = NewConstructorTemplate(isolate, data, JS_new, "Backup");
|
|
40
|
-
SetPrototypeMethod(isolate, data, t, "transfer", JS_transfer);
|
|
41
|
-
SetPrototypeMethod(isolate, data, t, "close", JS_close);
|
|
42
|
-
return t->GetFunction(OnlyContext).ToLocalChecked();
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
NODE_METHOD(Backup::JS_new) {
|
|
46
|
-
UseAddon;
|
|
47
|
-
if (!addon->privileged_info) return ThrowTypeError("Disabled constructor");
|
|
48
|
-
assert(info.IsConstructCall());
|
|
49
|
-
Database* db = Unwrap<Database>(addon->privileged_info->This());
|
|
50
|
-
REQUIRE_DATABASE_OPEN(db->GetState());
|
|
51
|
-
REQUIRE_DATABASE_NOT_BUSY(db->GetState());
|
|
52
|
-
|
|
53
|
-
v8::Local<v8::Object> database = (*addon->privileged_info)[0].As<v8::Object>();
|
|
54
|
-
v8::Local<v8::String> attachedName = (*addon->privileged_info)[1].As<v8::String>();
|
|
55
|
-
v8::Local<v8::String> destFile = (*addon->privileged_info)[2].As<v8::String>();
|
|
56
|
-
bool unlink = (*addon->privileged_info)[3].As<v8::Boolean>()->Value();
|
|
57
|
-
|
|
58
|
-
UseIsolate;
|
|
59
|
-
sqlite3* dest_handle;
|
|
60
|
-
v8::String::Utf8Value dest_file(isolate, destFile);
|
|
61
|
-
v8::String::Utf8Value attached_name(isolate, attachedName);
|
|
62
|
-
int mask = (SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
|
|
63
|
-
|
|
64
|
-
if (sqlite3_open_v2(*dest_file, &dest_handle, mask, NULL) != SQLITE_OK) {
|
|
65
|
-
Database::ThrowSqliteError(addon, dest_handle);
|
|
66
|
-
int status = sqlite3_close(dest_handle);
|
|
67
|
-
assert(status == SQLITE_OK); ((void)status);
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
sqlite3_extended_result_codes(dest_handle, 1);
|
|
72
|
-
sqlite3_limit(dest_handle, SQLITE_LIMIT_LENGTH, INT_MAX);
|
|
73
|
-
sqlite3_backup* backup_handle = sqlite3_backup_init(dest_handle, "main", db->GetHandle(), *attached_name);
|
|
74
|
-
if (backup_handle == NULL) {
|
|
75
|
-
Database::ThrowSqliteError(addon, dest_handle);
|
|
76
|
-
int status = sqlite3_close(dest_handle);
|
|
77
|
-
assert(status == SQLITE_OK); ((void)status);
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
Backup* backup = new Backup(db, dest_handle, backup_handle, addon->NextId(), unlink);
|
|
82
|
-
backup->Wrap(info.This());
|
|
83
|
-
SetFrozen(isolate, OnlyContext, info.This(), addon->cs.database, database);
|
|
84
|
-
|
|
85
|
-
info.GetReturnValue().Set(info.This());
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
NODE_METHOD(Backup::JS_transfer) {
|
|
89
|
-
Backup* backup = Unwrap<Backup>(info.This());
|
|
90
|
-
REQUIRE_ARGUMENT_INT32(first, int pages);
|
|
91
|
-
REQUIRE_DATABASE_OPEN(backup->db->GetState());
|
|
92
|
-
assert(backup->db->GetState()->busy == false);
|
|
93
|
-
assert(backup->alive == true);
|
|
94
|
-
|
|
95
|
-
sqlite3_backup* backup_handle = backup->backup_handle;
|
|
96
|
-
int status = sqlite3_backup_step(backup_handle, pages) & 0xff;
|
|
97
|
-
|
|
98
|
-
Addon* addon = backup->db->GetAddon();
|
|
99
|
-
if (status == SQLITE_OK || status == SQLITE_DONE || status == SQLITE_BUSY) {
|
|
100
|
-
int total_pages = sqlite3_backup_pagecount(backup_handle);
|
|
101
|
-
int remaining_pages = sqlite3_backup_remaining(backup_handle);
|
|
102
|
-
UseIsolate;
|
|
103
|
-
UseContext;
|
|
104
|
-
v8::Local<v8::Object> result = v8::Object::New(isolate);
|
|
105
|
-
result->Set(ctx, addon->cs.totalPages.Get(isolate), v8::Int32::New(isolate, total_pages)).FromJust();
|
|
106
|
-
result->Set(ctx, addon->cs.remainingPages.Get(isolate), v8::Int32::New(isolate, remaining_pages)).FromJust();
|
|
107
|
-
info.GetReturnValue().Set(result);
|
|
108
|
-
if (status == SQLITE_DONE) backup->unlink = false;
|
|
109
|
-
} else {
|
|
110
|
-
Database::ThrowSqliteError(addon, sqlite3_errstr(status), status);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
NODE_METHOD(Backup::JS_close) {
|
|
115
|
-
Backup* backup = Unwrap<Backup>(info.This());
|
|
116
|
-
assert(backup->db->GetState()->busy == false);
|
|
117
|
-
if (backup->alive) backup->db->RemoveBackup(backup);
|
|
118
|
-
backup->CloseHandles();
|
|
119
|
-
info.GetReturnValue().Set(info.This());
|
|
120
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
class Backup : public node::ObjectWrap {
|
|
2
|
-
public:
|
|
3
|
-
|
|
4
|
-
~Backup();
|
|
5
|
-
|
|
6
|
-
// Whenever this is used, db->RemoveBackup must be invoked beforehand.
|
|
7
|
-
void CloseHandles();
|
|
8
|
-
|
|
9
|
-
// Used to support ordered containers.
|
|
10
|
-
static inline bool Compare(Backup const * const a, Backup const * const b) {
|
|
11
|
-
return a->id < b->id;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
static INIT(Init);
|
|
15
|
-
|
|
16
|
-
private:
|
|
17
|
-
|
|
18
|
-
explicit Backup(
|
|
19
|
-
Database* db,
|
|
20
|
-
sqlite3* dest_handle,
|
|
21
|
-
sqlite3_backup* backup_handle,
|
|
22
|
-
sqlite3_uint64 id,
|
|
23
|
-
bool unlink
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
static NODE_METHOD(JS_new);
|
|
27
|
-
static NODE_METHOD(JS_transfer);
|
|
28
|
-
static NODE_METHOD(JS_close);
|
|
29
|
-
|
|
30
|
-
Database* const db;
|
|
31
|
-
sqlite3* const dest_handle;
|
|
32
|
-
sqlite3_backup* const backup_handle;
|
|
33
|
-
const sqlite3_uint64 id;
|
|
34
|
-
bool alive;
|
|
35
|
-
bool unlink;
|
|
36
|
-
};
|