node-firebird 2.3.3 → 2.4.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/README.md +544 -6
- package/lib/callback.d.ts +20 -0
- package/lib/callback.js +6 -16
- package/lib/firebird.msg.json +1370 -1370
- package/lib/gdscodes.d.ts +1519 -1520
- package/lib/gdscodes.js +5 -5
- package/lib/ieee754-decimal.d.ts +38 -0
- package/lib/ieee754-decimal.js +71 -118
- package/lib/index.d.ts +37 -338
- package/lib/index.js +97 -86
- package/lib/messages.d.ts +6 -0
- package/lib/messages.js +135 -162
- package/lib/pool.d.ts +23 -0
- package/lib/pool.js +34 -47
- package/lib/srp.d.ts +51 -0
- package/lib/srp.js +62 -72
- package/lib/types.d.ts +375 -0
- package/lib/types.js +22 -0
- package/lib/unix-crypt.d.ts +1 -0
- package/lib/unix-crypt.js +126 -152
- package/lib/utils.d.ts +16 -0
- package/lib/utils.js +24 -48
- package/lib/wire/connection.d.ts +100 -0
- package/lib/wire/connection.js +1029 -1009
- package/lib/wire/const.d.ts +567 -0
- package/lib/wire/const.js +620 -599
- package/lib/wire/database.d.ts +57 -0
- package/lib/wire/database.js +111 -108
- package/lib/wire/eventConnection.d.ts +16 -0
- package/lib/wire/eventConnection.js +29 -31
- package/lib/wire/fbEventManager.d.ts +45 -0
- package/lib/wire/fbEventManager.js +38 -57
- package/lib/wire/serialize.d.ts +97 -0
- package/lib/wire/serialize.js +42 -141
- package/lib/wire/service.d.ts +66 -0
- package/lib/wire/service.js +374 -401
- package/lib/wire/socket.d.ts +59 -0
- package/lib/wire/socket.js +79 -40
- package/lib/wire/statement.d.ts +25 -0
- package/lib/wire/statement.js +13 -9
- package/lib/wire/transaction.d.ts +21 -0
- package/lib/wire/transaction.js +33 -61
- package/lib/wire/xsqlvar.d.ts +175 -0
- package/lib/wire/xsqlvar.js +169 -269
- package/package.json +12 -4
- package/src/callback.ts +55 -0
- package/{poc/node_modules/node-firebird/lib/gdscodes.js → src/gdscodes.ts} +3 -3
- package/{poc/node_modules/node-firebird/lib/ieee754-decimal.js → src/ieee754-decimal.ts} +7 -14
- package/src/index.ts +157 -0
- package/{poc/node_modules/node-firebird/lib/messages.js → src/messages.ts} +163 -162
- package/src/pool.ts +209 -0
- package/{poc/node_modules/node-firebird/lib/srp.js → src/srp.ts} +74 -33
- package/src/types.ts +419 -0
- package/{poc/node_modules/node-firebird/lib/unix-crypt.js → src/unix-crypt.ts} +6 -12
- package/{poc/node_modules/node-firebird/lib/utils.js → src/utils.ts} +11 -20
- package/{poc/node_modules/node-firebird/lib/wire/connection.js → src/wire/connection.ts} +611 -129
- package/{poc/node_modules/node-firebird/lib/wire/const.js → src/wire/const.ts} +96 -9
- package/{poc/node_modules/node-firebird/lib/wire/database.js → src/wire/database.ts} +110 -44
- package/{poc/node_modules/node-firebird/lib/wire/eventConnection.js → src/wire/eventConnection.ts} +29 -14
- package/{poc/node_modules/node-firebird/lib/wire/fbEventManager.js → src/wire/fbEventManager.ts} +39 -30
- package/{poc/node_modules/node-firebird/lib/wire/serialize.js → src/wire/serialize.ts} +78 -59
- package/{poc/node_modules/node-firebird/lib/wire/service.js → src/wire/service.ts} +90 -88
- package/src/wire/socket.ts +262 -0
- package/src/wire/statement.ts +71 -0
- package/{poc/node_modules/node-firebird/lib/wire/transaction.js → src/wire/transaction.ts} +25 -19
- package/{poc/node_modules/node-firebird/lib/wire/xsqlvar.js → src/wire/xsqlvar.ts} +244 -143
- package/.eslintrc.json +0 -12
- package/.github/workflows/codeql.yml +0 -76
- package/.github/workflows/node.js.yml +0 -95
- package/BIGINT_MIGRATION.md +0 -374
- package/CI_DEBUGGING_GUIDE.md +0 -148
- package/ENCRYPTION_CALLBACK.md +0 -152
- package/FIREBIRD_LOG_FEATURE.md +0 -145
- package/MINIMAL_CHANGES_SUMMARY.md +0 -136
- package/PR_SUMMARY.md +0 -96
- package/ROADMAP.md +0 -223
- package/SRP_PROTOCOL.md +0 -482
- package/poc/README.md +0 -160
- package/poc/helpers.js +0 -59
- package/poc/node_modules/.package-lock.json +0 -14
- package/poc/node_modules/node-firebird/.eslintrc.json +0 -12
- package/poc/node_modules/node-firebird/.github/workflows/codeql.yml +0 -76
- package/poc/node_modules/node-firebird/.github/workflows/node.js.yml +0 -95
- package/poc/node_modules/node-firebird/BIGINT_MIGRATION.md +0 -374
- package/poc/node_modules/node-firebird/CI_DEBUGGING_GUIDE.md +0 -148
- package/poc/node_modules/node-firebird/ENCRYPTION_CALLBACK.md +0 -152
- package/poc/node_modules/node-firebird/FIREBIRD_LOG_FEATURE.md +0 -145
- package/poc/node_modules/node-firebird/LICENSE +0 -373
- package/poc/node_modules/node-firebird/MINIMAL_CHANGES_SUMMARY.md +0 -136
- package/poc/node_modules/node-firebird/PR_SUMMARY.md +0 -96
- package/poc/node_modules/node-firebird/README.md +0 -794
- package/poc/node_modules/node-firebird/ROADMAP.md +0 -223
- package/poc/node_modules/node-firebird/SRP_PROTOCOL.md +0 -482
- package/poc/node_modules/node-firebird/lib/callback.js +0 -38
- package/poc/node_modules/node-firebird/lib/gdscodes.d.ts +0 -1524
- package/poc/node_modules/node-firebird/lib/index.d.ts +0 -316
- package/poc/node_modules/node-firebird/lib/index.js +0 -128
- package/poc/node_modules/node-firebird/lib/pool.js +0 -108
- package/poc/node_modules/node-firebird/lib/wire/socket.js +0 -175
- package/poc/node_modules/node-firebird/lib/wire/statement.js +0 -48
- package/poc/node_modules/node-firebird/package.json +0 -38
- package/poc/node_modules/node-firebird/vitest.config.js +0 -24
- package/poc/package-lock.json +0 -21
- package/poc/package.json +0 -12
- package/poc/reproduce-fixed.js +0 -150
- package/poc/reproduce.js +0 -133
- package/vitest.config.js +0 -27
- /package/{poc/node_modules/node-firebird/lib → src}/firebird.msg +0 -0
- /package/{poc/node_modules/node-firebird/lib → src}/firebird.msg.json +0 -0
package/lib/wire/service.js
CHANGED
|
@@ -1,97 +1,95 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
const events_1 = __importDefault(require("events"));
|
|
6
|
+
const stream_1 = __importDefault(require("stream"));
|
|
7
|
+
const const_1 = __importDefault(require("./const"));
|
|
8
|
+
const serialize_1 = require("./serialize");
|
|
9
|
+
const callback_1 = require("../callback");
|
|
7
10
|
/***************************************
|
|
8
11
|
*
|
|
9
12
|
* Helper Functions and Constants
|
|
10
13
|
*
|
|
11
14
|
***************************************/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
function isEmpty(obj) {
|
|
16
|
+
for (var p in obj)
|
|
17
|
+
return false;
|
|
15
18
|
return true;
|
|
16
19
|
}
|
|
17
|
-
|
|
18
20
|
const SHUTDOWN_KIND = {
|
|
19
|
-
0:
|
|
20
|
-
1:
|
|
21
|
-
2:
|
|
21
|
+
0: const_1.default.isc_spb_prp_shutdown_db,
|
|
22
|
+
1: const_1.default.isc_spb_prp_deny_new_transactions,
|
|
23
|
+
2: const_1.default.isc_spb_prp_deny_new_attachments
|
|
22
24
|
};
|
|
23
25
|
const SHUTDOWNEX_KIND = {
|
|
24
|
-
0:
|
|
25
|
-
1:
|
|
26
|
-
2:
|
|
26
|
+
0: const_1.default.isc_spb_prp_force_shutdown,
|
|
27
|
+
1: const_1.default.isc_spb_prp_transactions_shutdown,
|
|
28
|
+
2: const_1.default.isc_spb_prp_attachments_shutdown
|
|
27
29
|
};
|
|
28
30
|
const SHUTDOWNEX_MODE = {
|
|
29
31
|
//0: isc_spb_prp_sm_normal,
|
|
30
|
-
1:
|
|
31
|
-
2:
|
|
32
|
-
3:
|
|
32
|
+
1: const_1.default.isc_spb_prp_sm_multi,
|
|
33
|
+
2: const_1.default.isc_spb_prp_sm_single,
|
|
34
|
+
3: const_1.default.isc_spb_prp_sm_full
|
|
33
35
|
};
|
|
34
36
|
const ShutdownMode = { NORMAL: 0, MULTI: 1, SINGLE: 2, FULL: 3 };
|
|
35
37
|
const ShutdownKind = { FORCED: 0, DENY_TRANSACTION: 1, DENY_ATTACHMENT: 2 };
|
|
36
|
-
|
|
37
38
|
/***************************************
|
|
38
39
|
*
|
|
39
40
|
* Service Manager
|
|
40
41
|
*
|
|
41
42
|
***************************************/
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
class ServiceManager extends events_1.default.EventEmitter {
|
|
44
|
+
static { this.ShutdownMode = ShutdownMode; }
|
|
45
|
+
static { this.ShutdownKind = ShutdownKind; }
|
|
44
46
|
constructor(connection) {
|
|
45
47
|
super();
|
|
48
|
+
this._infosmapping = {
|
|
49
|
+
"50" /*isc_info_svc_svr_db_info*/: "dbinfo",
|
|
50
|
+
"51" /*isc_info_svc_get_license*/: "licenses",
|
|
51
|
+
"52" /*isc_info_svc_get_license_mask*/: "licenseoptions",
|
|
52
|
+
"53" /*isc_info_svc_get_config*/: "fbconfig",
|
|
53
|
+
"54" /*isc_info_svc_version*/: "svcversion",
|
|
54
|
+
"55" /*isc_info_svc_server_version*/: "fbversion",
|
|
55
|
+
"56" /*isc_info_svc_implementation*/: "fbimplementation",
|
|
56
|
+
"57" /*isc_info_svc_capabilities*/: "fbcapatibilities",
|
|
57
|
+
"58" /*isc_info_svc_user_dbpath*/: "pathsecuritydb",
|
|
58
|
+
"59" /*isc_info_svc_get_env*/: "fbenv",
|
|
59
|
+
"60" /*isc_info_svc_get_env_lock*/: "fbenvlock",
|
|
60
|
+
"61" /*isc_info_svc_get_env_msg*/: "fbenvmsg",
|
|
61
|
+
"62" /*isc_info_svc_line*/: "",
|
|
62
|
+
"63" /*isc_info_svc_to_eof*/: "",
|
|
63
|
+
"64" /*isc_info_svc_timeout*/: "",
|
|
64
|
+
"65" /*isc_info_svc_get_licensed_users*/: "",
|
|
65
|
+
"66" /*isc_info_svc_limbo_trans*/: "limbotrans",
|
|
66
|
+
"67" /*isc_info_svc_running*/: "",
|
|
67
|
+
"68" /*isc_info_svc_get_users*/: "fbusers",
|
|
68
|
+
"78" /*isc_info_svc_stdin*/: ""
|
|
69
|
+
};
|
|
46
70
|
this.connection = connection;
|
|
47
71
|
connection.svc = this;
|
|
48
72
|
}
|
|
49
|
-
|
|
50
73
|
_createOutputStream(optread, buffersize, callback) {
|
|
51
74
|
var self = this;
|
|
52
75
|
optread = optread || 'byline';
|
|
53
|
-
var t = new
|
|
76
|
+
var t = new stream_1.default.Readable({ objectMode: optread === 'byline' }); // chunk by line
|
|
54
77
|
t.__proto__._read = function () {
|
|
55
78
|
var selfread = this;
|
|
56
79
|
var fct = optread === 'byline' ? self.readline : self.readeof;
|
|
57
80
|
fct.call(self, { buffersize: buffersize }, function (err, data) {
|
|
58
81
|
if (err) {
|
|
59
|
-
selfread.push(err.message,
|
|
82
|
+
selfread.push(err.message, const_1.default.DEFAULT_ENCODING);
|
|
60
83
|
return;
|
|
61
84
|
}
|
|
62
85
|
if (data.line && data.line.length)
|
|
63
|
-
selfread.push(data.line,
|
|
86
|
+
selfread.push(data.line, const_1.default.DEFAULT_ENCODING);
|
|
64
87
|
else
|
|
65
88
|
selfread.push(null);
|
|
66
89
|
});
|
|
67
|
-
}
|
|
68
|
-
|
|
90
|
+
};
|
|
69
91
|
callback(null, t);
|
|
70
92
|
}
|
|
71
|
-
|
|
72
|
-
_infosmapping = {
|
|
73
|
-
"50"/*isc_info_svc_svr_db_info*/ : "dbinfo",
|
|
74
|
-
"51"/*isc_info_svc_get_license*/ : "licenses",
|
|
75
|
-
"52"/*isc_info_svc_get_license_mask*/ : "licenseoptions",
|
|
76
|
-
"53"/*isc_info_svc_get_config*/ : "fbconfig",
|
|
77
|
-
"54"/*isc_info_svc_version*/ : "svcversion",
|
|
78
|
-
"55"/*isc_info_svc_server_version*/ : "fbversion",
|
|
79
|
-
"56"/*isc_info_svc_implementation*/ : "fbimplementation",
|
|
80
|
-
"57"/*isc_info_svc_capabilities*/ : "fbcapatibilities",
|
|
81
|
-
"58"/*isc_info_svc_user_dbpath*/ : "pathsecuritydb",
|
|
82
|
-
"59"/*isc_info_svc_get_env*/ : "fbenv",
|
|
83
|
-
"60"/*isc_info_svc_get_env_lock*/ : "fbenvlock",
|
|
84
|
-
"61"/*isc_info_svc_get_env_msg*/ : "fbenvmsg",
|
|
85
|
-
"62"/*isc_info_svc_line*/ : "",
|
|
86
|
-
"63"/*isc_info_svc_to_eof*/ : "",
|
|
87
|
-
"64"/*isc_info_svc_timeout*/ : "",
|
|
88
|
-
"65"/*isc_info_svc_get_licensed_users*/ : "",
|
|
89
|
-
"66"/*isc_info_svc_limbo_trans*/ : "limbotrans",
|
|
90
|
-
"67"/*isc_info_svc_running*/ : "",
|
|
91
|
-
"68"/*isc_info_svc_get_users*/ : "fbusers",
|
|
92
|
-
"78"/*isc_info_svc_stdin*/ : ""
|
|
93
|
-
};
|
|
94
|
-
|
|
95
93
|
_processcapabilities(blr, res) {
|
|
96
94
|
var capArray = [
|
|
97
95
|
"WAL_SUPPORT",
|
|
@@ -108,168 +106,148 @@ class ServiceManager extends Events.EventEmitter {
|
|
|
108
106
|
];
|
|
109
107
|
var dbcapa = res[this._infosmapping[57]] = [];
|
|
110
108
|
var caps = blr.readInt32();
|
|
111
|
-
|
|
112
109
|
for (var i = 0; i < capArray.length; ++i)
|
|
113
110
|
if (caps & (1 << i))
|
|
114
111
|
dbcapa.push(capArray[i]);
|
|
115
112
|
}
|
|
116
|
-
|
|
117
113
|
_processdbinfo(blr, res) {
|
|
118
114
|
var tinfo = blr.readByteCode();
|
|
119
115
|
var dbinfo = res[this._infosmapping[50]] = {};
|
|
120
|
-
|
|
121
116
|
dbinfo.database = [];
|
|
122
|
-
for (; tinfo !=
|
|
117
|
+
for (; tinfo != const_1.default.isc_info_flag_end; tinfo = blr.readByteCode()) {
|
|
123
118
|
switch (tinfo) {
|
|
124
|
-
case
|
|
119
|
+
case const_1.default.isc_spb_dbname:
|
|
125
120
|
dbinfo.database.push(blr.readString());
|
|
126
121
|
break;
|
|
127
|
-
case
|
|
122
|
+
case const_1.default.isc_spb_num_att:
|
|
128
123
|
dbinfo.nbattachment = blr.readInt32();
|
|
129
124
|
break;
|
|
130
|
-
case
|
|
125
|
+
case const_1.default.isc_spb_num_db:
|
|
131
126
|
dbinfo.nbdatabase = blr.readInt32();
|
|
132
127
|
break;
|
|
133
128
|
}
|
|
134
129
|
}
|
|
135
130
|
}
|
|
136
|
-
|
|
137
131
|
_processquery(buffer, callback) {
|
|
138
132
|
if (!Buffer.isBuffer(buffer)) {
|
|
139
|
-
doError(new Error('Malformed service-manager response: missing BLR buffer'), callback);
|
|
133
|
+
(0, callback_1.doError)(new Error('Malformed service-manager response: missing BLR buffer'), callback);
|
|
140
134
|
return;
|
|
141
135
|
}
|
|
142
|
-
|
|
143
136
|
try {
|
|
144
|
-
var br = new BlrReader(buffer);
|
|
137
|
+
var br = new serialize_1.BlrReader(buffer);
|
|
145
138
|
var tinfo = br.readByteCode();
|
|
146
139
|
var res = {};
|
|
147
140
|
res.result = 0;
|
|
148
|
-
for (; tinfo !==
|
|
141
|
+
for (; tinfo !== const_1.default.isc_info_end; tinfo = br.readByteCode()) {
|
|
149
142
|
switch (tinfo) {
|
|
150
|
-
case
|
|
151
|
-
case
|
|
152
|
-
case
|
|
153
|
-
case
|
|
154
|
-
case
|
|
155
|
-
case
|
|
143
|
+
case const_1.default.isc_info_svc_server_version:
|
|
144
|
+
case const_1.default.isc_info_svc_implementation:
|
|
145
|
+
case const_1.default.isc_info_svc_user_dbpath:
|
|
146
|
+
case const_1.default.isc_info_svc_get_env:
|
|
147
|
+
case const_1.default.isc_info_svc_get_env_lock:
|
|
148
|
+
case const_1.default.isc_info_svc_get_env_msg:
|
|
156
149
|
res[this._infosmapping[tinfo]] = br.readString();
|
|
157
150
|
break;
|
|
158
|
-
case
|
|
151
|
+
case const_1.default.isc_info_svc_version:
|
|
159
152
|
res[this._infosmapping[tinfo]] = br.readInt32();
|
|
160
153
|
break;
|
|
161
|
-
case
|
|
154
|
+
case const_1.default.isc_info_svc_svr_db_info:
|
|
162
155
|
this._processdbinfo(br, res);
|
|
163
156
|
break;
|
|
164
|
-
case
|
|
157
|
+
case const_1.default.isc_info_svc_limbo_trans:
|
|
165
158
|
// not implemented
|
|
166
|
-
for (; tinfo !== isc_info_flag_end; tinfo = br.readByteCode())
|
|
159
|
+
for (; tinfo !== const_1.default.isc_info_flag_end; tinfo = br.readByteCode())
|
|
167
160
|
break;
|
|
168
|
-
case
|
|
169
|
-
br.pos += 2
|
|
161
|
+
case const_1.default.isc_info_svc_get_users:
|
|
162
|
+
br.pos += 2;
|
|
170
163
|
res[this._infosmapping[tinfo]] = [];
|
|
171
164
|
break;
|
|
172
|
-
case
|
|
165
|
+
case const_1.default.isc_spb_sec_username:
|
|
173
166
|
var tuser = res[this._infosmapping[68]];
|
|
174
167
|
tuser.push({});
|
|
175
168
|
tuser[tuser.length - 1].username = br.readString();
|
|
176
169
|
break;
|
|
177
|
-
case
|
|
170
|
+
case const_1.default.isc_spb_sec_firstname:
|
|
178
171
|
var tuser = res[this._infosmapping[68]];
|
|
179
|
-
var user = tuser[tuser.length-1];
|
|
172
|
+
var user = tuser[tuser.length - 1];
|
|
180
173
|
user.firstname = br.readString();
|
|
181
174
|
break;
|
|
182
|
-
case
|
|
175
|
+
case const_1.default.isc_spb_sec_middlename:
|
|
183
176
|
var tuser = res[this._infosmapping[68]];
|
|
184
|
-
var user = tuser[tuser.length-1];
|
|
177
|
+
var user = tuser[tuser.length - 1];
|
|
185
178
|
user.middlename = br.readString();
|
|
186
179
|
break;
|
|
187
|
-
case
|
|
180
|
+
case const_1.default.isc_spb_sec_lastname:
|
|
188
181
|
var tuser = res[this._infosmapping[68]];
|
|
189
|
-
var user = tuser[tuser.length-1];
|
|
182
|
+
var user = tuser[tuser.length - 1];
|
|
190
183
|
user.lastname = br.readString();
|
|
191
184
|
break;
|
|
192
|
-
case
|
|
185
|
+
case const_1.default.isc_spb_sec_groupid:
|
|
193
186
|
var tuser = res[this._infosmapping[68]];
|
|
194
|
-
var user = tuser[tuser.length-1];
|
|
187
|
+
var user = tuser[tuser.length - 1];
|
|
195
188
|
user.groupid = br.readInt32();
|
|
196
189
|
break;
|
|
197
|
-
case
|
|
190
|
+
case const_1.default.isc_spb_sec_userid:
|
|
198
191
|
var tuser = res[this._infosmapping[68]];
|
|
199
|
-
var user = tuser[tuser.length-1];
|
|
192
|
+
var user = tuser[tuser.length - 1];
|
|
200
193
|
user.userid = br.readInt32();
|
|
201
|
-
|
|
202
194
|
break;
|
|
203
|
-
case
|
|
195
|
+
case const_1.default.isc_spb_sec_admin:
|
|
204
196
|
var tuser = res[this._infosmapping[68]];
|
|
205
|
-
var user = tuser[tuser.length-1];
|
|
197
|
+
var user = tuser[tuser.length - 1];
|
|
206
198
|
user.admin = br.readInt32();
|
|
207
199
|
break;
|
|
208
|
-
|
|
209
|
-
case Const.isc_info_svc_line:
|
|
200
|
+
case const_1.default.isc_info_svc_line:
|
|
210
201
|
res.line = br.readString();
|
|
211
202
|
break;
|
|
212
|
-
|
|
213
|
-
case Const.isc_info_svc_to_eof:
|
|
203
|
+
case const_1.default.isc_info_svc_to_eof:
|
|
214
204
|
res.line = br.readString();
|
|
215
205
|
break;
|
|
216
|
-
|
|
217
|
-
case Const.isc_info_truncated:
|
|
206
|
+
case const_1.default.isc_info_truncated:
|
|
218
207
|
res.result = 1; // too much data for the result buffer increase size of it (buffersize parameter))
|
|
219
208
|
break;
|
|
220
|
-
|
|
221
|
-
case Const.isc_info_data_not_ready:
|
|
209
|
+
case const_1.default.isc_info_data_not_ready:
|
|
222
210
|
res.result = 2;
|
|
223
211
|
break;
|
|
224
|
-
|
|
225
|
-
case Const.isc_info_svc_timeout:
|
|
212
|
+
case const_1.default.isc_info_svc_timeout:
|
|
226
213
|
res.result = 3;
|
|
227
214
|
break;
|
|
228
|
-
|
|
229
|
-
case Const.isc_info_svc_stdin:
|
|
230
|
-
|
|
215
|
+
case const_1.default.isc_info_svc_stdin:
|
|
231
216
|
break;
|
|
232
|
-
|
|
233
|
-
case Const.isc_info_svc_capabilities:
|
|
217
|
+
case const_1.default.isc_info_svc_capabilities:
|
|
234
218
|
this._processcapabilities(br, res);
|
|
235
219
|
break;
|
|
236
220
|
}
|
|
237
221
|
}
|
|
238
222
|
callback(null, res);
|
|
239
|
-
}
|
|
240
|
-
|
|
223
|
+
}
|
|
224
|
+
catch (err) {
|
|
225
|
+
(0, callback_1.doError)(new Error('Malformed service-manager response: ' + err.message), callback);
|
|
241
226
|
}
|
|
242
227
|
}
|
|
243
|
-
|
|
244
228
|
detach(callback, force) {
|
|
245
229
|
var self = this;
|
|
246
|
-
|
|
247
230
|
if (!force && self.connection._pending.length > 0) {
|
|
248
231
|
self.connection._detachAuto = true;
|
|
249
232
|
self.connection._detachCallback = callback;
|
|
250
233
|
return self;
|
|
251
234
|
}
|
|
252
|
-
|
|
253
235
|
self.connection.svcdetach(function (err, obj) {
|
|
254
|
-
|
|
255
236
|
self.connection.disconnect();
|
|
256
237
|
self.emit('detach', false);
|
|
257
|
-
|
|
258
238
|
if (callback)
|
|
259
239
|
callback(err, obj);
|
|
260
|
-
|
|
261
240
|
}, force);
|
|
262
|
-
|
|
263
241
|
return self;
|
|
264
242
|
}
|
|
265
|
-
|
|
266
243
|
backup(options, callback) {
|
|
267
244
|
var dbpath = options.database || this.connection.options.filename || this.connection.options.database;
|
|
268
245
|
var verbose = options.verbose || false;
|
|
269
246
|
// format of bckfile {filename:'name', sizefile:''} sizefile is length of part in bytes
|
|
270
247
|
var bckfiles = options.backupfiles || options.files || null;
|
|
271
248
|
// for convenience
|
|
272
|
-
if (bckfiles)
|
|
249
|
+
if (bckfiles)
|
|
250
|
+
bckfiles = bckfiles.constructor !== Array ? [{ filename: bckfiles, sizefile: '0' }] : bckfiles;
|
|
273
251
|
var factor = options.factor || 0; //If backing up to a physical tape device, this switch lets you specify the tape's blocking factor
|
|
274
252
|
var ignorechecksums = options.ignorechecksums || false;
|
|
275
253
|
var ignorelimbo = options.ignorelimbo || false;
|
|
@@ -280,193 +258,200 @@ class ServiceManager extends Events.EventEmitter {
|
|
|
280
258
|
var convert = options.convert || false;
|
|
281
259
|
var expand = options.expand || false;
|
|
282
260
|
var notriggers = options.notriggers || false;
|
|
283
|
-
|
|
284
261
|
if (dbpath == null || dbpath.length === 0) {
|
|
285
|
-
doError(new Error('No database specified'), callback);
|
|
262
|
+
(0, callback_1.doError)(new Error('No database specified'), callback);
|
|
286
263
|
return;
|
|
287
264
|
}
|
|
288
|
-
|
|
289
265
|
if (bckfiles == null || bckfiles.length === 0) {
|
|
290
|
-
doError(new Error('No backup path specified'), callback);
|
|
266
|
+
(0, callback_1.doError)(new Error('No backup path specified'), callback);
|
|
291
267
|
return;
|
|
292
268
|
}
|
|
293
|
-
|
|
294
269
|
var blr = this.connection._blr;
|
|
295
270
|
blr.pos = 0;
|
|
296
|
-
blr.addByte(
|
|
297
|
-
blr.addString2(
|
|
271
|
+
blr.addByte(const_1.default.isc_action_svc_backup);
|
|
272
|
+
blr.addString2(const_1.default.isc_spb_dbname, dbpath, const_1.default.DEFAULT_ENCODING);
|
|
298
273
|
for (var i = 0; i < bckfiles.length; i++) {
|
|
299
|
-
blr.addString2(
|
|
274
|
+
blr.addString2(const_1.default.isc_spb_bkp_file, bckfiles[i].filename, const_1.default.DEFAULT_ENCODING);
|
|
300
275
|
if (i !== bckfiles.length - 1) // not the end, so we need to write the size of this part (gsplit)
|
|
301
|
-
blr.addString2(
|
|
276
|
+
blr.addString2(const_1.default.isc_spb_bkp_length, bckfiles[i].sizefile, const_1.default.DEFAULT_ENCODING);
|
|
302
277
|
}
|
|
303
278
|
if (factor)
|
|
304
|
-
blr.addByteInt32(
|
|
305
|
-
|
|
279
|
+
blr.addByteInt32(const_1.default.isc_spb_bkp_factor, factor);
|
|
306
280
|
var opts = 0;
|
|
307
|
-
if (ignorechecksums)
|
|
308
|
-
|
|
309
|
-
if (
|
|
310
|
-
|
|
311
|
-
if (
|
|
312
|
-
|
|
313
|
-
if (
|
|
314
|
-
|
|
315
|
-
if (
|
|
281
|
+
if (ignorechecksums)
|
|
282
|
+
opts = opts | const_1.default.isc_spb_bkp_ignore_checksums;
|
|
283
|
+
if (ignorelimbo)
|
|
284
|
+
opts = opts | const_1.default.isc_spb_bkp_ignore_limbo;
|
|
285
|
+
if (metadataonly)
|
|
286
|
+
opts = opts | const_1.default.isc_spb_bkp_metadata_only;
|
|
287
|
+
if (nogarbagecollect)
|
|
288
|
+
opts = opts | const_1.default.isc_spb_bkp_no_garbage_collect;
|
|
289
|
+
if (olddescriptions)
|
|
290
|
+
opts = opts | const_1.default.isc_spb_bkp_old_descriptions;
|
|
291
|
+
if (nontransportable)
|
|
292
|
+
opts = opts | const_1.default.isc_spb_bkp_non_transportable;
|
|
293
|
+
if (convert)
|
|
294
|
+
opts = opts | const_1.default.isc_spb_bkp_convert;
|
|
295
|
+
if (expand)
|
|
296
|
+
opts = opts | const_1.default.isc_spb_bkp_expand;
|
|
297
|
+
if (notriggers)
|
|
298
|
+
opts = opts | const_1.default.isc_spb_bkp_no_triggers;
|
|
316
299
|
if (opts)
|
|
317
|
-
blr.addByteInt32(
|
|
300
|
+
blr.addByteInt32(const_1.default.isc_spb_options, opts);
|
|
318
301
|
if (verbose)
|
|
319
|
-
blr.addByte(
|
|
302
|
+
blr.addByte(const_1.default.isc_spb_verbose);
|
|
320
303
|
var self = this;
|
|
321
304
|
this.connection.svcstart(blr, function (err, data) {
|
|
322
305
|
if (err) {
|
|
323
|
-
doError(new Error(err), callback);
|
|
306
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
324
307
|
return;
|
|
325
308
|
}
|
|
326
309
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
327
310
|
});
|
|
328
311
|
}
|
|
329
|
-
|
|
330
312
|
nbackup(options, callback) {
|
|
331
313
|
var dbpath = options.database || this.connection.options.filename || this.connection.options.database;
|
|
332
314
|
var bckfile = options.backupfile || options.file || null;
|
|
333
315
|
var level = options.level || 0; // nb day for incremental
|
|
334
316
|
var notriggers = options.notriggers || false;
|
|
335
317
|
var direct = options.direct || 'on'; // on or off direct write I/O
|
|
336
|
-
|
|
337
318
|
if (dbpath == null || dbpath.length === 0) {
|
|
338
|
-
doError(new Error('No database specified'), callback);
|
|
319
|
+
(0, callback_1.doError)(new Error('No database specified'), callback);
|
|
339
320
|
return;
|
|
340
321
|
}
|
|
341
|
-
|
|
342
322
|
if (bckfile == null || bckfile.length === 0) {
|
|
343
|
-
doError(new Error('No backup path specified'), callback);
|
|
323
|
+
(0, callback_1.doError)(new Error('No backup path specified'), callback);
|
|
344
324
|
return;
|
|
345
325
|
}
|
|
346
|
-
|
|
347
326
|
var blr = this.connection._blr;
|
|
348
327
|
blr.pos = 0;
|
|
349
|
-
blr.addByte(
|
|
350
|
-
blr.addString2(
|
|
351
|
-
blr.addString2(
|
|
352
|
-
blr.addByteInt32(
|
|
353
|
-
blr.addString2(
|
|
328
|
+
blr.addByte(const_1.default.isc_action_svc_nbak);
|
|
329
|
+
blr.addString2(const_1.default.isc_spb_dbname, dbpath, const_1.default.DEFAULT_ENCODING);
|
|
330
|
+
blr.addString2(const_1.default.isc_spb_nbk_file, bckfile, const_1.default.DEFAULT_ENCODING);
|
|
331
|
+
blr.addByteInt32(const_1.default.isc_spb_nbk_level, level);
|
|
332
|
+
blr.addString2(const_1.default.isc_spb_nbk_direct, direct, const_1.default.DEFAULT_ENCODING);
|
|
354
333
|
var opts = 0;
|
|
355
|
-
if (notriggers)
|
|
356
|
-
|
|
334
|
+
if (notriggers)
|
|
335
|
+
opts = opts | const_1.default.isc_spb_nbk_no_triggers;
|
|
336
|
+
blr.addByteInt32(const_1.default.isc_spb_options, opts);
|
|
357
337
|
var self = this;
|
|
358
338
|
this.connection.svcstart(blr, function (err, data) {
|
|
359
339
|
if (err) {
|
|
360
|
-
doError(new Error(err), callback);
|
|
340
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
361
341
|
return;
|
|
362
342
|
}
|
|
363
343
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
364
344
|
});
|
|
365
345
|
}
|
|
366
|
-
|
|
367
346
|
restore(options, callback) {
|
|
368
347
|
var bckfiles = options.backupfiles || options.files || null; // format bckfiles ['file1', 'file2', 'file3']
|
|
369
348
|
// for convenience
|
|
370
|
-
if (bckfiles)
|
|
371
|
-
|
|
349
|
+
if (bckfiles)
|
|
350
|
+
bckfiles = bckfiles.constructor !== Array ? [bckfiles] : bckfiles;
|
|
351
|
+
var dbfile = options.database || this.connection.options.filename || this.connection.options.database;
|
|
352
|
+
;
|
|
372
353
|
var verbose = options.verbose || false;
|
|
373
354
|
var cachebuffers = options.cachebuffers || 2048; // gbak -buffers
|
|
374
355
|
var pagesize = options.pagesize || 4096; // gbak -page_size
|
|
375
356
|
var readonly = options.readonly || false; // gbak -mode
|
|
376
357
|
var deactivateindexes = options.deactivateindexes || false;
|
|
377
|
-
var
|
|
378
|
-
var
|
|
379
|
-
var
|
|
380
|
-
var
|
|
381
|
-
var
|
|
358
|
+
var noshadow = options.noshadow || false;
|
|
359
|
+
var novalidity = options.novalidity || false;
|
|
360
|
+
var individualcommit = options.individualcommit || true; // otherwise no data
|
|
361
|
+
var replace = options.replace || false;
|
|
362
|
+
var create = options.create || true;
|
|
382
363
|
var useallspace = options.useallspace || false;
|
|
383
364
|
var metadataonly = options.metadataonly || false;
|
|
384
365
|
var fixfssdata = options.fixfssdata || null;
|
|
385
366
|
var fixfssmetadata = options.fixfssmetadata || null;
|
|
386
|
-
|
|
387
367
|
if (bckfiles == null || bckfiles.length === 0) {
|
|
388
|
-
doError(new Error('No backup file specified'), callback);
|
|
368
|
+
(0, callback_1.doError)(new Error('No backup file specified'), callback);
|
|
389
369
|
return;
|
|
390
370
|
}
|
|
391
|
-
|
|
392
371
|
if (dbfile == null || dbfile.length === 0) {
|
|
393
|
-
doError(new Error('No database path specified'), callback);
|
|
372
|
+
(0, callback_1.doError)(new Error('No database path specified'), callback);
|
|
394
373
|
return;
|
|
395
374
|
}
|
|
396
|
-
|
|
397
375
|
var blr = this.connection._blr;
|
|
398
376
|
blr.pos = 0;
|
|
399
|
-
blr.addByte(
|
|
377
|
+
blr.addByte(const_1.default.isc_action_svc_restore);
|
|
400
378
|
for (var i = 0; i < bckfiles.length; i++) {
|
|
401
|
-
blr.addString2(
|
|
379
|
+
blr.addString2(const_1.default.isc_spb_bkp_file, bckfiles[i], const_1.default.DEFAULT_ENCODING);
|
|
402
380
|
}
|
|
403
|
-
blr.addString2(
|
|
404
|
-
blr.addByte(
|
|
381
|
+
blr.addString2(const_1.default.isc_spb_dbname, dbfile, const_1.default.DEFAULT_ENCODING);
|
|
382
|
+
blr.addByte(const_1.default.isc_spb_res_buffers);
|
|
405
383
|
blr.addInt32(cachebuffers);
|
|
406
|
-
blr.addByte(
|
|
384
|
+
blr.addByte(const_1.default.isc_spb_res_page_size);
|
|
407
385
|
blr.addInt32(pagesize);
|
|
408
|
-
blr.addByte(
|
|
386
|
+
blr.addByte(const_1.default.isc_spb_res_access_mode);
|
|
409
387
|
if (readonly)
|
|
410
|
-
blr.addByte(
|
|
388
|
+
blr.addByte(const_1.default.isc_spb_prp_am_readonly);
|
|
411
389
|
else
|
|
412
|
-
blr.addByte(
|
|
413
|
-
if (fixfssdata)
|
|
414
|
-
|
|
390
|
+
blr.addByte(const_1.default.isc_spb_prp_am_readwrite);
|
|
391
|
+
if (fixfssdata)
|
|
392
|
+
blr.addString2(const_1.default.isc_spb_res_fix_fss_data, fixfssdata, const_1.default.DEFAULT_ENCODING);
|
|
393
|
+
if (fixfssmetadata)
|
|
394
|
+
blr.addString2(const_1.default.isc_spb_res_fix_fss_metadata, fixfssmetadata, const_1.default.DEFAULT_ENCODING);
|
|
415
395
|
var opts = 0;
|
|
416
|
-
if (deactivateindexes)
|
|
417
|
-
|
|
418
|
-
if (
|
|
419
|
-
|
|
420
|
-
if (
|
|
421
|
-
|
|
422
|
-
if (
|
|
423
|
-
|
|
396
|
+
if (deactivateindexes)
|
|
397
|
+
opts = opts | const_1.default.isc_spb_res_deactivate_idx;
|
|
398
|
+
if (noshadow)
|
|
399
|
+
opts = opts | const_1.default.isc_spb_res_no_shadow;
|
|
400
|
+
if (novalidity)
|
|
401
|
+
opts = opts | const_1.default.isc_spb_res_no_validity;
|
|
402
|
+
if (individualcommit)
|
|
403
|
+
opts = opts | const_1.default.isc_spb_res_one_at_a_time;
|
|
404
|
+
if (replace)
|
|
405
|
+
opts = opts | const_1.default.isc_spb_res_replace;
|
|
406
|
+
if (create)
|
|
407
|
+
opts = opts | const_1.default.isc_spb_res_create;
|
|
408
|
+
if (useallspace)
|
|
409
|
+
opts = opts | const_1.default.isc_spb_res_use_all_space;
|
|
410
|
+
if (metadataonly)
|
|
411
|
+
opts = opts | const_1.default.isc_spb_res_fix_fss_metadata;
|
|
424
412
|
if (opts)
|
|
425
|
-
blr.addByteInt32(
|
|
413
|
+
blr.addByteInt32(const_1.default.isc_spb_options, opts);
|
|
426
414
|
if (verbose)
|
|
427
|
-
blr.addByte(
|
|
415
|
+
blr.addByte(const_1.default.isc_spb_verbose);
|
|
428
416
|
var self = this;
|
|
429
417
|
this.connection.svcstart(blr, function (err, data) {
|
|
430
418
|
if (err) {
|
|
431
|
-
doError(new Error(err), callback);
|
|
419
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
432
420
|
return;
|
|
433
421
|
}
|
|
434
422
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
435
423
|
});
|
|
436
424
|
}
|
|
437
|
-
|
|
438
425
|
nrestore(options, callback) {
|
|
439
426
|
var bckfiles = options.backupfiles || options.files || null; // format bckfiles ['file1', 'file2', 'file3']
|
|
440
427
|
// for convenience
|
|
441
|
-
if (bckfiles)
|
|
428
|
+
if (bckfiles)
|
|
429
|
+
bckfiles = bckfiles.constructor !== Array ? [bckfiles] : bckfiles;
|
|
442
430
|
var dbpath = options.database || this.connection.options.filename || this.connection.options.database;
|
|
443
|
-
|
|
444
431
|
if (bckfiles == null || bckfiles.length === 0) {
|
|
445
|
-
doError(new Error('No backup file specified'), callback);
|
|
432
|
+
(0, callback_1.doError)(new Error('No backup file specified'), callback);
|
|
446
433
|
return;
|
|
447
434
|
}
|
|
448
|
-
|
|
449
435
|
if (dbpath == null || bckfiles.length === 0) {
|
|
450
|
-
doError(new Error('No database path specified'), callback);
|
|
436
|
+
(0, callback_1.doError)(new Error('No database path specified'), callback);
|
|
451
437
|
return;
|
|
452
438
|
}
|
|
453
439
|
var blr = this.connection._blr;
|
|
454
440
|
blr.pos = 0;
|
|
455
|
-
blr.addByte(
|
|
441
|
+
blr.addByte(const_1.default.isc_action_svc_nrest);
|
|
456
442
|
for (var i = 0; i < bckfiles.length; i++) {
|
|
457
|
-
blr.addString2(
|
|
443
|
+
blr.addString2(const_1.default.isc_spb_nbk_file, bckfiles[i], const_1.default.DEFAULT_ENCODING);
|
|
458
444
|
}
|
|
459
|
-
blr.addString2(
|
|
445
|
+
blr.addString2(const_1.default.isc_spb_dbname, dbpath, const_1.default.DEFAULT_ENCODING);
|
|
460
446
|
var self = this;
|
|
461
447
|
this.connection.svcstart(blr, function (err, data) {
|
|
462
448
|
if (err) {
|
|
463
|
-
doError(new Error(err), callback);
|
|
449
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
464
450
|
return;
|
|
465
451
|
}
|
|
466
452
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
467
453
|
});
|
|
468
454
|
}
|
|
469
|
-
|
|
470
455
|
_fixpropertie(options, callback) {
|
|
471
456
|
var dbpath = options.database || this.connection.options.filename || this.connection.options.database;
|
|
472
457
|
var dialect = options.dialect || null;
|
|
@@ -480,105 +465,102 @@ class ServiceManager extends Events.EventEmitter {
|
|
|
480
465
|
var forcewrite = options.forcewrite;
|
|
481
466
|
var reservespace = options.reservespace;
|
|
482
467
|
var accessmode = options.accessmode; // 0 readonly 1 readwrite
|
|
483
|
-
|
|
484
468
|
if (dbpath == null || dbpath.length === 0) {
|
|
485
|
-
doError(new Error('No database specified'), callback);
|
|
469
|
+
(0, callback_1.doError)(new Error('No database specified'), callback);
|
|
486
470
|
return;
|
|
487
471
|
}
|
|
488
|
-
|
|
489
472
|
var blr = this.connection._blr;
|
|
490
473
|
blr.pos = 0;
|
|
491
|
-
blr.addByte(
|
|
492
|
-
blr.addString2(
|
|
493
|
-
if (dialect)
|
|
494
|
-
|
|
495
|
-
if (
|
|
474
|
+
blr.addByte(const_1.default.isc_action_svc_properties);
|
|
475
|
+
blr.addString2(const_1.default.isc_spb_dbname, dbpath, const_1.default.DEFAULT_ENCODING);
|
|
476
|
+
if (dialect)
|
|
477
|
+
blr.addByteInt32(const_1.default.isc_spb_prp_set_sql_dialect, dialect);
|
|
478
|
+
if (sweep)
|
|
479
|
+
blr.addByteInt32(const_1.default.isc_spb_prp_sweep_interval, sweep);
|
|
480
|
+
if (pagebuffers)
|
|
481
|
+
blr.addByteInt32(const_1.default.isc_spb_prp_page_buffers, pagebuffers);
|
|
496
482
|
if (shutdown != null) {
|
|
497
483
|
if (shutdownmode != null) {
|
|
498
484
|
if (SHUTDOWNEX_KIND[shutdown] === undefined) {
|
|
499
|
-
doError(new Error('Invalid shutdown kind'), callback);
|
|
485
|
+
(0, callback_1.doError)(new Error('Invalid shutdown kind'), callback);
|
|
500
486
|
return;
|
|
501
487
|
}
|
|
502
488
|
if (SHUTDOWNEX_MODE[shutdownmode] === undefined) {
|
|
503
|
-
doError(new Error('Invalid shutdown mode'), callback);
|
|
489
|
+
(0, callback_1.doError)(new Error('Invalid shutdown mode'), callback);
|
|
504
490
|
return;
|
|
505
491
|
}
|
|
506
|
-
|
|
507
492
|
// New shutdown with mode
|
|
508
|
-
blr.addBytes([
|
|
493
|
+
blr.addBytes([const_1.default.isc_spb_prp_shutdown_mode, SHUTDOWNEX_MODE[shutdownmode]]);
|
|
509
494
|
blr.addByteInt32(SHUTDOWNEX_KIND[shutdown], shutdowndelay);
|
|
510
|
-
}
|
|
495
|
+
}
|
|
496
|
+
else {
|
|
511
497
|
// Old shutdown
|
|
512
498
|
blr.addByteInt32(SHUTDOWN_KIND[shutdown], shutdowndelay);
|
|
513
499
|
}
|
|
514
500
|
}
|
|
515
|
-
if (forcewrite)
|
|
516
|
-
|
|
517
|
-
if (
|
|
518
|
-
|
|
519
|
-
if (
|
|
520
|
-
|
|
501
|
+
if (forcewrite)
|
|
502
|
+
blr.addBytes([const_1.default.isc_spb_prp_write_mode, const_1.default.isc_spb_prp_wm_sync]);
|
|
503
|
+
if (forcewrite === false)
|
|
504
|
+
blr.addBytes([const_1.default.isc_spb_prp_write_mode, const_1.default.isc_spb_prp_wm_async]);
|
|
505
|
+
if (accessmode === 1)
|
|
506
|
+
blr.addBytes([const_1.default.isc_spb_prp_access_mode, const_1.default.isc_spb_prp_am_readwrite]);
|
|
507
|
+
if (accessmode === 0)
|
|
508
|
+
blr.addBytes([const_1.default.isc_spb_prp_access_mode, const_1.default.isc_spb_prp_am_readonly]);
|
|
509
|
+
if (reservespace)
|
|
510
|
+
blr.addBytes([const_1.default.isc_spb_prp_reserve_space, const_1.default.isc_spb_prp_res]);
|
|
511
|
+
if (reservespace != null && !reservespace)
|
|
512
|
+
blr.addBytes([const_1.default.isc_spb_prp_reserve_space, const_1.default.isc_spb_prp_res_use_full]);
|
|
521
513
|
var opts = 0;
|
|
522
|
-
if (shadow)
|
|
523
|
-
|
|
514
|
+
if (shadow)
|
|
515
|
+
opts = opts | const_1.default.isc_spb_prp_activate;
|
|
516
|
+
if (online)
|
|
517
|
+
opts = opts | const_1.default.isc_spb_prp_db_online;
|
|
524
518
|
if (opts)
|
|
525
|
-
blr.addByteInt32(
|
|
519
|
+
blr.addByteInt32(const_1.default.isc_spb_options, opts);
|
|
526
520
|
var self = this;
|
|
527
521
|
this.connection.svcstart(blr, function (err, data) {
|
|
528
522
|
if (err) {
|
|
529
|
-
doError(new Error(err), callback);
|
|
523
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
530
524
|
return;
|
|
531
525
|
}
|
|
532
526
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
533
527
|
});
|
|
534
528
|
}
|
|
535
|
-
|
|
536
529
|
setDialect(db, dialect, callback) {
|
|
537
530
|
this._fixpropertie({ database: db, dialect: dialect }, callback);
|
|
538
531
|
}
|
|
539
|
-
|
|
540
532
|
setSweepinterval(db, sweepinterval, callback) {
|
|
541
533
|
this._fixpropertie({ database: db, sweepinterval: sweepinterval }, callback);
|
|
542
534
|
}
|
|
543
|
-
|
|
544
535
|
setCachebuffer(db, nbpages, callback) {
|
|
545
536
|
this._fixpropertie({ database: db, nbpagebuffers: nbpages }, callback);
|
|
546
537
|
}
|
|
547
|
-
|
|
548
538
|
BringOnline(db, callback) {
|
|
549
539
|
this._fixpropertie({ database: db, bringonline: true }, callback);
|
|
550
540
|
}
|
|
551
|
-
|
|
552
541
|
Shutdown(db, kind, delay, mode, callback) {
|
|
553
542
|
// mode parameter is for server version >= 2.0
|
|
554
543
|
if (mode instanceof Function) {
|
|
555
544
|
callback = mode;
|
|
556
545
|
mode = undefined;
|
|
557
546
|
}
|
|
558
|
-
|
|
559
547
|
this._fixpropertie({ database: db, shutdown: kind, shutdowndelay: delay, shutdownmode: mode }, callback);
|
|
560
548
|
}
|
|
561
|
-
|
|
562
549
|
setShadow(db, val, callback) {
|
|
563
|
-
this._fixpropertie({ database: db, activateshadow
|
|
550
|
+
this._fixpropertie({ database: db, activateshadow: val }, callback);
|
|
564
551
|
}
|
|
565
|
-
|
|
566
552
|
setForcewrite(db, val, callback) {
|
|
567
|
-
this._fixpropertie({ database: db, forcewrite
|
|
553
|
+
this._fixpropertie({ database: db, forcewrite: val }, callback);
|
|
568
554
|
}
|
|
569
|
-
|
|
570
555
|
setReservespace(db, val, callback) {
|
|
571
|
-
this._fixpropertie({ database: db, reservespace
|
|
556
|
+
this._fixpropertie({ database: db, reservespace: val }, callback);
|
|
572
557
|
}
|
|
573
|
-
|
|
574
558
|
setReadonlyMode(db, callback) {
|
|
575
|
-
this._fixpropertie({ database: db, accessmode
|
|
559
|
+
this._fixpropertie({ database: db, accessmode: 0 }, callback);
|
|
576
560
|
}
|
|
577
|
-
|
|
578
561
|
setReadwriteMode(db, callback) {
|
|
579
|
-
this._fixpropertie({ database: db, accessmode
|
|
562
|
+
this._fixpropertie({ database: db, accessmode: 1 }, callback);
|
|
580
563
|
}
|
|
581
|
-
|
|
582
564
|
validate(options, callback) {
|
|
583
565
|
var dbpath = options.database || this.connection.options.filename || this.connection.options.database;
|
|
584
566
|
var checkdb = options.checkdb || false;
|
|
@@ -590,103 +572,103 @@ class ServiceManager extends Events.EventEmitter {
|
|
|
590
572
|
var sweep = options.sweep || false;
|
|
591
573
|
var listlimbo = options.listlimbo || false;
|
|
592
574
|
var icu = options.icu || false;
|
|
593
|
-
|
|
594
575
|
if (dbpath == null || dbpath.length === 0) {
|
|
595
|
-
doError(new Error('No database specified'), callback);
|
|
576
|
+
(0, callback_1.doError)(new Error('No database specified'), callback);
|
|
596
577
|
return;
|
|
597
578
|
}
|
|
598
|
-
|
|
599
579
|
var blr = this.connection._blr;
|
|
600
580
|
blr.pos = 0;
|
|
601
|
-
blr.addByte(
|
|
602
|
-
blr.addString2(
|
|
581
|
+
blr.addByte(const_1.default.isc_action_svc_repair);
|
|
582
|
+
blr.addString2(const_1.default.isc_spb_dbname, dbpath, const_1.default.DEFAULT_ENCODING);
|
|
603
583
|
var opts = 0;
|
|
604
|
-
if (checkdb)
|
|
605
|
-
|
|
606
|
-
if (
|
|
607
|
-
|
|
608
|
-
if (
|
|
609
|
-
|
|
610
|
-
if (
|
|
611
|
-
|
|
612
|
-
if (
|
|
613
|
-
|
|
584
|
+
if (checkdb)
|
|
585
|
+
opts = opts | const_1.default.isc_spb_rpr_check_db;
|
|
586
|
+
if (ignorechecksums)
|
|
587
|
+
opts = opts | const_1.default.isc_spb_rpr_ignore_checksum;
|
|
588
|
+
if (killshadows)
|
|
589
|
+
opts = opts | const_1.default.isc_spb_rpr_kill_shadows;
|
|
590
|
+
if (mend)
|
|
591
|
+
opts = opts | const_1.default.isc_spb_rpr_mend_db;
|
|
592
|
+
if (validate)
|
|
593
|
+
opts = opts | const_1.default.isc_spb_rpr_validate_db;
|
|
594
|
+
if (full)
|
|
595
|
+
opts = opts | const_1.default.isc_spb_rpr_full;
|
|
596
|
+
if (sweep)
|
|
597
|
+
opts = opts | const_1.default.isc_spb_rpr_sweep_db;
|
|
598
|
+
if (listlimbo)
|
|
599
|
+
opts = opts | const_1.default.isc_spb_rpr_list_limbo_trans;
|
|
600
|
+
if (icu)
|
|
601
|
+
opts = opts | const_1.default.isc_spb_rpr_icu;
|
|
602
|
+
blr.addByteInt32(const_1.default.isc_spb_options, opts);
|
|
614
603
|
var self = this;
|
|
615
604
|
this.connection.svcstart(blr, function (err, data) {
|
|
616
605
|
if (err) {
|
|
617
|
-
doError(new Error(err), callback);
|
|
606
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
618
607
|
return;
|
|
619
608
|
}
|
|
620
609
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
621
610
|
});
|
|
622
611
|
}
|
|
623
|
-
|
|
624
612
|
commit(db, transactid, callback) {
|
|
625
613
|
var dbpath = db || this.connection.options.filename || this.connection.options.database;
|
|
626
614
|
if (dbpath == null || dbpath.length === 0) {
|
|
627
|
-
doError(new Error('No database specified'), callback);
|
|
615
|
+
(0, callback_1.doError)(new Error('No database specified'), callback);
|
|
628
616
|
return;
|
|
629
617
|
}
|
|
630
|
-
|
|
631
618
|
var blr = this.connection._blr;
|
|
632
619
|
blr.pos = 0;
|
|
633
|
-
blr.addByte(
|
|
634
|
-
blr.addString2(
|
|
635
|
-
blr.addByteInt32(
|
|
620
|
+
blr.addByte(const_1.default.isc_action_svc_repair);
|
|
621
|
+
blr.addString2(const_1.default.isc_spb_dbname, dbpath, const_1.default.DEFAULT_ENCODING);
|
|
622
|
+
blr.addByteInt32(const_1.default.isc_spb_rpr_commit_trans, transactid);
|
|
636
623
|
var self = this;
|
|
637
624
|
this.connection.svcstart(blr, function (err, data) {
|
|
638
625
|
if (err) {
|
|
639
|
-
doError(new Error(err), callback);
|
|
626
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
640
627
|
return;
|
|
641
628
|
}
|
|
642
629
|
self._createOutputStream(null, null, callback);
|
|
643
630
|
});
|
|
644
631
|
}
|
|
645
|
-
|
|
646
632
|
rollback(db, transactid, callback) {
|
|
647
633
|
var dbpath = db || this.connection.options.filename || this.connection.options.database;
|
|
648
634
|
if (dbpath == null || dbpath.length === 0) {
|
|
649
|
-
doError(new Error('No database specified'), callback);
|
|
635
|
+
(0, callback_1.doError)(new Error('No database specified'), callback);
|
|
650
636
|
return;
|
|
651
637
|
}
|
|
652
|
-
|
|
653
638
|
var blr = this.connection._blr;
|
|
654
639
|
blr.pos = 0;
|
|
655
|
-
blr.addByte(
|
|
656
|
-
blr.addString2(
|
|
657
|
-
blr.addByteInt32(
|
|
640
|
+
blr.addByte(const_1.default.isc_action_svc_repair);
|
|
641
|
+
blr.addString2(const_1.default.isc_spb_dbname, dbpath, const_1.default.DEFAULT_ENCODING);
|
|
642
|
+
blr.addByteInt32(const_1.default.isc_spb_rpr_rollback_trans, transactid);
|
|
658
643
|
var self = this;
|
|
659
644
|
this.connection.svcstart(blr, function (err, data) {
|
|
660
645
|
if (err) {
|
|
661
|
-
doError(new Error(err), callback);
|
|
646
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
662
647
|
return;
|
|
663
648
|
}
|
|
664
649
|
self._createOutputStream(null, null, callback);
|
|
665
650
|
});
|
|
666
651
|
}
|
|
667
|
-
|
|
668
652
|
recover(db, transactid, callback) {
|
|
669
653
|
var dbpath = db || this.connection.options.filename || this.connection.options.database;
|
|
670
654
|
if (dbpath == null || dbpath.length === 0) {
|
|
671
|
-
doError(new Error('No database specified'), callback);
|
|
655
|
+
(0, callback_1.doError)(new Error('No database specified'), callback);
|
|
672
656
|
return;
|
|
673
657
|
}
|
|
674
|
-
|
|
675
658
|
var blr = this.connection._blr;
|
|
676
659
|
blr.pos = 0;
|
|
677
|
-
blr.addByte(
|
|
678
|
-
blr.addString2(
|
|
679
|
-
blr.addByteInt32(
|
|
660
|
+
blr.addByte(const_1.default.isc_action_svc_repair);
|
|
661
|
+
blr.addString2(const_1.default.isc_spb_dbname, dbpath, const_1.default.DEFAULT_ENCODING);
|
|
662
|
+
blr.addByteInt32(const_1.default.isc_spb_rpr_recover_two_phase, transactid);
|
|
680
663
|
var self = this;
|
|
681
664
|
this.connection.svcstart(blr, function (err, data) {
|
|
682
665
|
if (err) {
|
|
683
|
-
doError(new Error(err), callback);
|
|
666
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
684
667
|
return;
|
|
685
668
|
}
|
|
686
669
|
self._createOutputStream(null, null, callback);
|
|
687
670
|
});
|
|
688
671
|
}
|
|
689
|
-
|
|
690
672
|
getStats(options, callback) {
|
|
691
673
|
var dbpath = options.database || this.connection.options.filename || this.connection.options.database;
|
|
692
674
|
var record = options.record || false;
|
|
@@ -699,67 +681,72 @@ class ServiceManager extends Events.EventEmitter {
|
|
|
699
681
|
var encryption = options.encryption || false;
|
|
700
682
|
var objects = options.objects || null; // space-separated list of object index,table,systemtable
|
|
701
683
|
if (dbpath == null || dbpath.length === 0) {
|
|
702
|
-
doError(new Error('No database specified'), callback);
|
|
684
|
+
(0, callback_1.doError)(new Error('No database specified'), callback);
|
|
703
685
|
return;
|
|
704
686
|
}
|
|
705
|
-
|
|
706
687
|
var blr = this.connection._blr;
|
|
707
688
|
blr.pos = 0;
|
|
708
|
-
blr.addByte(
|
|
709
|
-
blr.addString2(
|
|
689
|
+
blr.addByte(const_1.default.isc_action_svc_db_stats);
|
|
690
|
+
blr.addString2(const_1.default.isc_spb_dbname, dbpath, const_1.default.DEFAULT_ENCODING);
|
|
710
691
|
var opts = 0;
|
|
711
|
-
if (record)
|
|
712
|
-
|
|
713
|
-
if (
|
|
714
|
-
|
|
715
|
-
if (
|
|
716
|
-
|
|
717
|
-
if (
|
|
718
|
-
|
|
692
|
+
if (record)
|
|
693
|
+
opts = opts | const_1.default.isc_spb_sts_record_versions;
|
|
694
|
+
if (nocreation)
|
|
695
|
+
opts = opts | const_1.default.isc_spb_sts_nocreation;
|
|
696
|
+
if (tables)
|
|
697
|
+
opts = opts | const_1.default.isc_spb_sts_table;
|
|
698
|
+
if (pages)
|
|
699
|
+
opts = opts | const_1.default.isc_spb_sts_data_pages;
|
|
700
|
+
if (header)
|
|
701
|
+
opts = opts | const_1.default.isc_spb_sts_hdr_pages;
|
|
702
|
+
if (indexes)
|
|
703
|
+
opts = opts | const_1.default.isc_spb_sts_idx_pages;
|
|
704
|
+
if (tablesystem)
|
|
705
|
+
opts = opts | const_1.default.isc_spb_sts_sys_relations;
|
|
706
|
+
if (encryption)
|
|
707
|
+
opts = opts | const_1.default.isc_spb_sts_encryption;
|
|
719
708
|
if (opts)
|
|
720
|
-
blr.addByteInt32(
|
|
721
|
-
if (objects)
|
|
709
|
+
blr.addByteInt32(const_1.default.isc_spb_options, opts);
|
|
710
|
+
if (objects)
|
|
711
|
+
blr.addString2(const_1.default.isc_spb_command_line, objects, const_1.default.DEFAULT_ENCODING);
|
|
722
712
|
var self = this;
|
|
723
713
|
this.connection.svcstart(blr, function (err, data) {
|
|
724
714
|
if (err) {
|
|
725
|
-
doError(new Error(err), callback);
|
|
715
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
726
716
|
return;
|
|
727
717
|
}
|
|
728
718
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
729
719
|
});
|
|
730
|
-
|
|
731
720
|
}
|
|
732
|
-
|
|
733
721
|
getLog(options, callback) {
|
|
734
722
|
var self = this;
|
|
735
723
|
var blr = this.connection._blr;
|
|
736
724
|
var optread = options.optread || 'byline';
|
|
737
725
|
blr.pos = 0;
|
|
738
|
-
blr.addByte(
|
|
726
|
+
blr.addByte(const_1.default.isc_action_svc_get_fb_log);
|
|
739
727
|
this.connection.svcstart(blr, function (err, data) {
|
|
740
728
|
if (err) {
|
|
741
|
-
doError(new Error(err), callback);
|
|
729
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
742
730
|
return;
|
|
743
731
|
}
|
|
744
732
|
self._createOutputStream(optread, options.buffersize, callback);
|
|
745
733
|
});
|
|
746
734
|
}
|
|
747
|
-
|
|
748
735
|
getUsers(username, callback) {
|
|
749
736
|
var self = this;
|
|
750
737
|
var blr = this.connection._blr;
|
|
751
738
|
blr.pos = 0;
|
|
752
|
-
blr.addByte(
|
|
753
|
-
if (username)
|
|
739
|
+
blr.addByte(const_1.default.isc_action_svc_display_user);
|
|
740
|
+
if (username)
|
|
741
|
+
blr.addString2(const_1.default.isc_spb_sec_username, username, const_1.default.DEFAULT_ENCODING);
|
|
754
742
|
this.connection.svcstart(blr, function (err, data) {
|
|
755
743
|
if (err) {
|
|
756
|
-
doError(new Error(err), callback);
|
|
744
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
757
745
|
return;
|
|
758
746
|
}
|
|
759
747
|
self.readusers({}, callback);
|
|
760
748
|
});
|
|
761
749
|
}
|
|
762
|
-
|
|
763
750
|
addUser(username, password, options, callback) {
|
|
764
751
|
var rolename = options.rolename || null;
|
|
765
752
|
var groupname = options.groupname || null;
|
|
@@ -769,31 +756,36 @@ class ServiceManager extends Events.EventEmitter {
|
|
|
769
756
|
var userid = options.userid || null;
|
|
770
757
|
var groupid = options.groupid || null;
|
|
771
758
|
var admin = options.admin || null;
|
|
772
|
-
|
|
773
759
|
var blr = this.connection._blr;
|
|
774
760
|
blr.pos = 0;
|
|
775
|
-
blr.addByte(
|
|
776
|
-
blr.addString2(
|
|
777
|
-
blr.addString2(
|
|
778
|
-
if (rolename)
|
|
779
|
-
|
|
780
|
-
if (
|
|
781
|
-
|
|
782
|
-
if (
|
|
783
|
-
|
|
784
|
-
if (
|
|
785
|
-
|
|
786
|
-
|
|
761
|
+
blr.addByte(const_1.default.isc_action_svc_add_user);
|
|
762
|
+
blr.addString2(const_1.default.isc_spb_sec_username, username, const_1.default.DEFAULT_ENCODING);
|
|
763
|
+
blr.addString2(const_1.default.isc_spb_sec_password, password, const_1.default.DEFAULT_ENCODING);
|
|
764
|
+
if (rolename)
|
|
765
|
+
blr.addString2(const_1.default.isc_dpb_sql_role_name, rolename, const_1.default.DEFAULT_ENCODING);
|
|
766
|
+
if (groupname)
|
|
767
|
+
blr.addString2(const_1.default.isc_spb_sec_groupname, groupname, const_1.default.DEFAULT_ENCODING);
|
|
768
|
+
if (firsname)
|
|
769
|
+
blr.addString2(const_1.default.isc_spb_sec_firstname, firsname, const_1.default.DEFAULT_ENCODING);
|
|
770
|
+
if (middlename)
|
|
771
|
+
blr.addString2(const_1.default.isc_spb_sec_middlename, middlename, const_1.default.DEFAULT_ENCODING);
|
|
772
|
+
if (lastname)
|
|
773
|
+
blr.addString2(const_1.default.isc_spb_sec_lastname, lastname, const_1.default.DEFAULT_ENCODING);
|
|
774
|
+
if (userid != null)
|
|
775
|
+
blr.addByteInt32(const_1.default.isc_spb_sec_userid, userid);
|
|
776
|
+
if (groupid != null)
|
|
777
|
+
blr.addByteInt32(const_1.default.isc_spb_sec_groupid, groupid);
|
|
778
|
+
if (admin != null)
|
|
779
|
+
blr.addByteInt32(const_1.default.isc_spb_sec_admin, admin);
|
|
787
780
|
var self = this;
|
|
788
781
|
this.connection.svcstart(blr, function (err, data) {
|
|
789
782
|
if (err) {
|
|
790
|
-
doError(new Error(err), callback);
|
|
783
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
791
784
|
return;
|
|
792
785
|
}
|
|
793
786
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
794
787
|
});
|
|
795
788
|
}
|
|
796
|
-
|
|
797
789
|
editUser(username, options, callback) {
|
|
798
790
|
var rolename = options.rolename || null;
|
|
799
791
|
var groupname = options.groupname || null;
|
|
@@ -806,253 +798,234 @@ class ServiceManager extends Events.EventEmitter {
|
|
|
806
798
|
var password = options.password || null;
|
|
807
799
|
var blr = this.connection._blr;
|
|
808
800
|
blr.pos = 0;
|
|
809
|
-
blr.addByte(
|
|
810
|
-
blr.addString2(
|
|
811
|
-
if (password)
|
|
812
|
-
|
|
813
|
-
if (
|
|
814
|
-
|
|
815
|
-
if (
|
|
816
|
-
|
|
817
|
-
if (
|
|
818
|
-
|
|
819
|
-
if (
|
|
820
|
-
|
|
801
|
+
blr.addByte(const_1.default.isc_action_svc_modify_user);
|
|
802
|
+
blr.addString2(const_1.default.isc_spb_sec_username, username, const_1.default.DEFAULT_ENCODING);
|
|
803
|
+
if (password)
|
|
804
|
+
blr.addString2(const_1.default.isc_spb_sec_password, password, const_1.default.DEFAULT_ENCODING);
|
|
805
|
+
if (rolename)
|
|
806
|
+
blr.addString2(const_1.default.isc_dpb_sql_role_name, rolename, const_1.default.DEFAULT_ENCODING);
|
|
807
|
+
if (groupname)
|
|
808
|
+
blr.addString2(const_1.default.isc_spb_sec_groupname, groupname, const_1.default.DEFAULT_ENCODING);
|
|
809
|
+
if (firsname)
|
|
810
|
+
blr.addString2(const_1.default.isc_spb_sec_firstname, firsname, const_1.default.DEFAULT_ENCODING);
|
|
811
|
+
if (middlename)
|
|
812
|
+
blr.addString2(const_1.default.isc_spb_sec_middlename, middlename, const_1.default.DEFAULT_ENCODING);
|
|
813
|
+
if (lastname)
|
|
814
|
+
blr.addString2(const_1.default.isc_spb_sec_lastname, lastname, const_1.default.DEFAULT_ENCODING);
|
|
815
|
+
if (userid != null)
|
|
816
|
+
blr.addByteInt32(const_1.default.isc_spb_sec_userid, userid);
|
|
817
|
+
if (groupid != null)
|
|
818
|
+
blr.addByteInt32(const_1.default.isc_spb_sec_groupid, groupid);
|
|
819
|
+
if (admin != null)
|
|
820
|
+
blr.addByteInt32(const_1.default.isc_spb_sec_admin, admin);
|
|
821
821
|
var self = this;
|
|
822
822
|
this.connection.svcstart(blr, function (err, data) {
|
|
823
823
|
if (err) {
|
|
824
|
-
doError(new Error(err), callback);
|
|
824
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
825
825
|
return;
|
|
826
826
|
}
|
|
827
827
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
828
828
|
});
|
|
829
829
|
}
|
|
830
|
-
|
|
831
830
|
removeUser(username, rolename, callback) {
|
|
832
831
|
var blr = this.connection._blr;
|
|
833
832
|
blr.pos = 0;
|
|
834
|
-
blr.addByte(
|
|
835
|
-
blr.addString2(
|
|
836
|
-
if (rolename)
|
|
837
|
-
|
|
833
|
+
blr.addByte(const_1.default.isc_action_svc_delete_user);
|
|
834
|
+
blr.addString2(const_1.default.isc_spb_sec_username, username, const_1.default.DEFAULT_ENCODING);
|
|
835
|
+
if (rolename)
|
|
836
|
+
blr.addString2(const_1.default.isc_dpb_sql_role_name, rolename, const_1.default.DEFAULT_ENCODING);
|
|
838
837
|
var self = this, options = {};
|
|
839
838
|
this.connection.svcstart(blr, function (err, data) {
|
|
840
839
|
if (err) {
|
|
841
|
-
doError(new Error(err), callback);
|
|
840
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
842
841
|
return;
|
|
843
842
|
}
|
|
844
843
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
845
844
|
});
|
|
846
845
|
}
|
|
847
|
-
|
|
848
846
|
getFbserverInfos(infos, options, callback) {
|
|
849
847
|
var buffersize = options.buffersize || 2048;
|
|
850
848
|
var timeout = options.timeout || 1;
|
|
851
849
|
var opts = {
|
|
852
|
-
"dbinfo"
|
|
853
|
-
"fbconfig"
|
|
854
|
-
"svcversion"
|
|
855
|
-
"fbversion"
|
|
856
|
-
"fbimplementation"
|
|
857
|
-
"fbcapatibilities"
|
|
858
|
-
"pathsecuritydb"
|
|
859
|
-
"fbenv"
|
|
860
|
-
"fbenvlock"
|
|
861
|
-
"fbenvmsg"
|
|
850
|
+
"dbinfo": const_1.default.isc_info_svc_svr_db_info,
|
|
851
|
+
"fbconfig": const_1.default.isc_info_svc_get_config,
|
|
852
|
+
"svcversion": const_1.default.isc_info_svc_version,
|
|
853
|
+
"fbversion": const_1.default.isc_info_svc_server_version,
|
|
854
|
+
"fbimplementation": const_1.default.isc_info_svc_implementation,
|
|
855
|
+
"fbcapatibilities": const_1.default.isc_info_svc_capabilities,
|
|
856
|
+
"pathsecuritydb": const_1.default.isc_info_svc_user_dbpath,
|
|
857
|
+
"fbenv": const_1.default.isc_info_svc_get_env,
|
|
858
|
+
"fbenvlock": const_1.default.isc_info_svc_get_env_lock,
|
|
859
|
+
"fbenvmsg": const_1.default.isc_info_svc_get_env_msg
|
|
862
860
|
};
|
|
863
861
|
// if infos is empty all options are asked to the service
|
|
864
|
-
|
|
865
862
|
var tops = [], empty = isEmpty(infos);
|
|
866
863
|
for (let popts in opts)
|
|
867
864
|
if (empty || infos[popts])
|
|
868
865
|
tops.push(opts[popts]);
|
|
869
|
-
|
|
870
866
|
var self = this;
|
|
871
867
|
this.connection.svcquery(tops, buffersize, timeout, function (err, data) {
|
|
872
868
|
if (err || !data.buffer) {
|
|
873
|
-
doError(new Error(err||'Bad query return'), callback);
|
|
869
|
+
(0, callback_1.doError)(new Error(err || 'Bad query return'), callback);
|
|
874
870
|
return;
|
|
875
871
|
}
|
|
876
872
|
self._processquery(data.buffer, callback);
|
|
877
873
|
});
|
|
878
874
|
}
|
|
879
|
-
|
|
880
875
|
startTrace(options, callback) {
|
|
881
876
|
var self = this;
|
|
882
877
|
var blr = this.connection._blr;
|
|
883
878
|
var configfile = options.configfile || '';
|
|
884
879
|
var tracename = options.tracename || '';
|
|
885
|
-
|
|
886
880
|
if (configfile.length === 0) {
|
|
887
|
-
doError(new Error('No config filename specified'), callback);
|
|
881
|
+
(0, callback_1.doError)(new Error('No config filename specified'), callback);
|
|
888
882
|
return;
|
|
889
883
|
}
|
|
890
884
|
if (tracename.length === 0) {
|
|
891
|
-
doError(new Error('No tracename specified'), callback);
|
|
885
|
+
(0, callback_1.doError)(new Error('No tracename specified'), callback);
|
|
892
886
|
return;
|
|
893
887
|
}
|
|
894
|
-
|
|
895
888
|
blr.pos = 0;
|
|
896
|
-
blr.addByte(
|
|
897
|
-
blr.addString2(
|
|
898
|
-
blr.addString2(
|
|
889
|
+
blr.addByte(const_1.default.isc_action_svc_trace_start);
|
|
890
|
+
blr.addString2(const_1.default.isc_spb_trc_cfg, configfile, const_1.default.DEFAULT_ENCODING);
|
|
891
|
+
blr.addString2(const_1.default.isc_spb_trc_name, tracename, const_1.default.DEFAULT_ENCODING);
|
|
899
892
|
this.connection.svcstart(blr, function (err, data) {
|
|
900
893
|
if (err) {
|
|
901
|
-
doError(new Error(err), callback);
|
|
894
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
902
895
|
return;
|
|
903
896
|
}
|
|
904
897
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
905
898
|
});
|
|
906
899
|
}
|
|
907
|
-
|
|
908
900
|
suspendTrace(options, callback) {
|
|
909
901
|
var self = this;
|
|
910
902
|
var blr = this.connection._blr;
|
|
911
903
|
var traceid = options.traceid || null;
|
|
912
|
-
|
|
913
904
|
if (traceid == null) {
|
|
914
|
-
doError(new Error('No traceid specified'), callback);
|
|
905
|
+
(0, callback_1.doError)(new Error('No traceid specified'), callback);
|
|
915
906
|
return;
|
|
916
907
|
}
|
|
917
|
-
|
|
918
908
|
blr.pos = 0;
|
|
919
|
-
blr.addByte(
|
|
920
|
-
blr.addByteInt32(
|
|
909
|
+
blr.addByte(const_1.default.isc_action_svc_trace_suspend);
|
|
910
|
+
blr.addByteInt32(const_1.default.isc_spb_trc_id, traceid);
|
|
921
911
|
this.connection.svcstart(blr, function (err, data) {
|
|
922
912
|
if (err) {
|
|
923
|
-
doError(new Error(err), callback);
|
|
913
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
924
914
|
return;
|
|
925
915
|
}
|
|
926
916
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
927
917
|
});
|
|
928
918
|
}
|
|
929
|
-
|
|
930
919
|
resumeTrace(options, callback) {
|
|
931
920
|
var self = this;
|
|
932
921
|
var blr = this.connection._blr;
|
|
933
922
|
var traceid = options.traceid || null;
|
|
934
|
-
|
|
935
923
|
if (traceid == null) {
|
|
936
|
-
doError(new Error('No traceid specified'), callback);
|
|
924
|
+
(0, callback_1.doError)(new Error('No traceid specified'), callback);
|
|
937
925
|
return;
|
|
938
926
|
}
|
|
939
|
-
|
|
940
927
|
blr.pos = 0;
|
|
941
|
-
blr.addByte(
|
|
942
|
-
blr.addByteInt32(
|
|
928
|
+
blr.addByte(const_1.default.isc_action_svc_trace_resume);
|
|
929
|
+
blr.addByteInt32(const_1.default.isc_spb_trc_id, traceid);
|
|
943
930
|
this.connection.svcstart(blr, function (err, data) {
|
|
944
931
|
if (err) {
|
|
945
|
-
doError(new Error(err), callback);
|
|
932
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
946
933
|
return;
|
|
947
934
|
}
|
|
948
935
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
949
936
|
});
|
|
950
937
|
}
|
|
951
|
-
|
|
952
938
|
stopTrace(options, callback) {
|
|
953
939
|
var self = this;
|
|
954
940
|
var blr = this.connection._blr;
|
|
955
941
|
var traceid = options.traceid || null;
|
|
956
|
-
|
|
957
942
|
if (traceid == null) {
|
|
958
|
-
doError(new Error('No traceid specified'), callback);
|
|
943
|
+
(0, callback_1.doError)(new Error('No traceid specified'), callback);
|
|
959
944
|
return;
|
|
960
945
|
}
|
|
961
|
-
|
|
962
946
|
blr.pos = 0;
|
|
963
|
-
blr.addByte(
|
|
964
|
-
blr.addByteInt32(
|
|
947
|
+
blr.addByte(const_1.default.isc_action_svc_trace_stop);
|
|
948
|
+
blr.addByteInt32(const_1.default.isc_spb_trc_id, traceid);
|
|
965
949
|
this.connection.svcstart(blr, function (err, data) {
|
|
966
950
|
if (err) {
|
|
967
|
-
doError(new Error(err), callback);
|
|
951
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
968
952
|
return;
|
|
969
953
|
}
|
|
970
954
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
971
955
|
});
|
|
972
956
|
}
|
|
973
|
-
|
|
974
957
|
getTraceList(options, callback) {
|
|
975
958
|
var self = this;
|
|
976
959
|
var blr = this.connection._blr;
|
|
977
960
|
blr.pos = 0;
|
|
978
|
-
blr.addByte(
|
|
961
|
+
blr.addByte(const_1.default.isc_action_svc_trace_list);
|
|
979
962
|
this.connection.svcstart(blr, function (err, data) {
|
|
980
963
|
if (err) {
|
|
981
|
-
doError(new Error(err), callback);
|
|
964
|
+
(0, callback_1.doError)(new Error(err), callback);
|
|
982
965
|
return;
|
|
983
966
|
}
|
|
984
967
|
self._createOutputStream(options.optread, options.buffersize, callback);
|
|
985
968
|
});
|
|
986
969
|
}
|
|
987
|
-
|
|
988
970
|
readline(options, callback) {
|
|
989
971
|
var buffersize = options.buffersize || 2048;
|
|
990
972
|
var timeout = options.timeout || 60;
|
|
991
973
|
var self = this;
|
|
992
|
-
this.connection.svcquery([
|
|
974
|
+
this.connection.svcquery([const_1.default.isc_info_svc_line], buffersize, timeout, function (err, data) {
|
|
993
975
|
if (err || !data.buffer) {
|
|
994
|
-
doError(new Error(err||'Bad query return'), callback);
|
|
976
|
+
(0, callback_1.doError)(new Error(err || 'Bad query return'), callback);
|
|
995
977
|
return;
|
|
996
978
|
}
|
|
997
979
|
self._processquery(data.buffer, callback);
|
|
998
980
|
});
|
|
999
981
|
}
|
|
1000
|
-
|
|
1001
982
|
readeof(options, callback) {
|
|
1002
983
|
var buffersize = options.buffersize || (8 * 1024);
|
|
1003
984
|
var timeout = options.timeout || 60;
|
|
1004
985
|
var self = this;
|
|
1005
|
-
this.connection.svcquery([
|
|
986
|
+
this.connection.svcquery([const_1.default.isc_info_svc_to_eof], buffersize, timeout, function (err, data) {
|
|
1006
987
|
if (err || !data.buffer) {
|
|
1007
|
-
doError(new Error(err||'Bad query return'), callback);
|
|
988
|
+
(0, callback_1.doError)(new Error(err || 'Bad query return'), callback);
|
|
1008
989
|
return;
|
|
1009
990
|
}
|
|
1010
991
|
self._processquery(data.buffer, callback);
|
|
1011
992
|
});
|
|
1012
993
|
}
|
|
1013
|
-
|
|
1014
994
|
hasRunningAction(options, callback) {
|
|
1015
995
|
var buffersize = options.buffersize || 2048;
|
|
1016
996
|
var timeout = options.timeout || 60;
|
|
1017
997
|
var self = this;
|
|
1018
|
-
this.connection.svcquery([
|
|
998
|
+
this.connection.svcquery([const_1.default.isc_info_svc_running], buffersize, timeout, function (err, data) {
|
|
1019
999
|
if (err || !data.buffer) {
|
|
1020
|
-
doError(new Error(err||'Bad query return'), callback);
|
|
1000
|
+
(0, callback_1.doError)(new Error(err || 'Bad query return'), callback);
|
|
1021
1001
|
return;
|
|
1022
1002
|
}
|
|
1023
1003
|
self._processquery(data.buffer, callback);
|
|
1024
1004
|
});
|
|
1025
1005
|
}
|
|
1026
|
-
|
|
1027
1006
|
readusers(options, callback) {
|
|
1028
1007
|
var buffersize = options.buffersize || 2048;
|
|
1029
1008
|
var timeout = options.timeout || 60;
|
|
1030
1009
|
var self = this;
|
|
1031
|
-
this.connection.svcquery([
|
|
1010
|
+
this.connection.svcquery([const_1.default.isc_info_svc_get_users], buffersize, timeout, function (err, data) {
|
|
1032
1011
|
if (err || !data.buffer) {
|
|
1033
|
-
doError(new Error(err||'Bad query return'), callback);
|
|
1012
|
+
(0, callback_1.doError)(new Error(err || 'Bad query return'), callback);
|
|
1034
1013
|
return;
|
|
1035
1014
|
}
|
|
1036
1015
|
self._processquery(data.buffer, callback);
|
|
1037
1016
|
});
|
|
1038
1017
|
}
|
|
1039
|
-
|
|
1040
1018
|
readlimbo(options, callback) {
|
|
1041
1019
|
var buffersize = options.buffersize || 2048;
|
|
1042
1020
|
var timeout = options.timeout || 60;
|
|
1043
1021
|
var self = this;
|
|
1044
|
-
this.connection.svcquery([
|
|
1022
|
+
this.connection.svcquery([const_1.default.isc_info_svc_limbo_trans], buffersize, timeout, function (err, data) {
|
|
1045
1023
|
if (err || !data.buffer) {
|
|
1046
|
-
doError(new Error(err||'Bad query return'), callback);
|
|
1024
|
+
(0, callback_1.doError)(new Error(err || 'Bad query return'), callback);
|
|
1047
1025
|
return;
|
|
1048
1026
|
}
|
|
1049
1027
|
self._processquery(data.buffer, callback);
|
|
1050
1028
|
});
|
|
1051
1029
|
}
|
|
1052
|
-
|
|
1053
1030
|
}
|
|
1054
|
-
|
|
1055
|
-
ServiceManager.ShutdownMode = ShutdownMode;
|
|
1056
|
-
ServiceManager.ShutdownKind = ShutdownKind;
|
|
1057
|
-
|
|
1058
1031
|
module.exports = ServiceManager;
|