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