node-firebird 2.3.1 → 2.3.3

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.
Files changed (55) hide show
  1. package/README.md +218 -31
  2. package/lib/index.d.ts +22 -0
  3. package/lib/pool.js +97 -10
  4. package/lib/srp.js +12 -1
  5. package/lib/wire/connection.js +40 -7
  6. package/lib/wire/socket.js +13 -1
  7. package/lib/wire/xsqlvar.js +69 -6
  8. package/package.json +1 -1
  9. package/poc/README.md +160 -0
  10. package/poc/helpers.js +59 -0
  11. package/poc/node_modules/.package-lock.json +14 -0
  12. package/poc/node_modules/node-firebird/.eslintrc.json +12 -0
  13. package/poc/node_modules/node-firebird/.github/workflows/codeql.yml +76 -0
  14. package/poc/node_modules/node-firebird/.github/workflows/node.js.yml +95 -0
  15. package/poc/node_modules/node-firebird/BIGINT_MIGRATION.md +374 -0
  16. package/poc/node_modules/node-firebird/CI_DEBUGGING_GUIDE.md +148 -0
  17. package/poc/node_modules/node-firebird/ENCRYPTION_CALLBACK.md +152 -0
  18. package/poc/node_modules/node-firebird/FIREBIRD_LOG_FEATURE.md +145 -0
  19. package/poc/node_modules/node-firebird/LICENSE +373 -0
  20. package/poc/node_modules/node-firebird/MINIMAL_CHANGES_SUMMARY.md +136 -0
  21. package/poc/node_modules/node-firebird/PR_SUMMARY.md +96 -0
  22. package/poc/node_modules/node-firebird/README.md +794 -0
  23. package/poc/node_modules/node-firebird/ROADMAP.md +223 -0
  24. package/poc/node_modules/node-firebird/SRP_PROTOCOL.md +482 -0
  25. package/poc/node_modules/node-firebird/lib/callback.js +38 -0
  26. package/poc/node_modules/node-firebird/lib/firebird.msg +0 -0
  27. package/poc/node_modules/node-firebird/lib/firebird.msg.json +1371 -0
  28. package/poc/node_modules/node-firebird/lib/gdscodes.d.ts +1524 -0
  29. package/poc/node_modules/node-firebird/lib/gdscodes.js +1531 -0
  30. package/poc/node_modules/node-firebird/lib/ieee754-decimal.js +500 -0
  31. package/poc/node_modules/node-firebird/lib/index.d.ts +316 -0
  32. package/poc/node_modules/node-firebird/lib/index.js +128 -0
  33. package/poc/node_modules/node-firebird/lib/messages.js +162 -0
  34. package/poc/node_modules/node-firebird/lib/pool.js +108 -0
  35. package/poc/node_modules/node-firebird/lib/srp.js +299 -0
  36. package/poc/node_modules/node-firebird/lib/unix-crypt.js +343 -0
  37. package/poc/node_modules/node-firebird/lib/utils.js +164 -0
  38. package/poc/node_modules/node-firebird/lib/wire/connection.js +2510 -0
  39. package/poc/node_modules/node-firebird/lib/wire/const.js +807 -0
  40. package/poc/node_modules/node-firebird/lib/wire/database.js +378 -0
  41. package/poc/node_modules/node-firebird/lib/wire/eventConnection.js +118 -0
  42. package/poc/node_modules/node-firebird/lib/wire/fbEventManager.js +326 -0
  43. package/poc/node_modules/node-firebird/lib/wire/serialize.js +588 -0
  44. package/poc/node_modules/node-firebird/lib/wire/service.js +1058 -0
  45. package/poc/node_modules/node-firebird/lib/wire/socket.js +175 -0
  46. package/poc/node_modules/node-firebird/lib/wire/statement.js +48 -0
  47. package/poc/node_modules/node-firebird/lib/wire/transaction.js +206 -0
  48. package/poc/node_modules/node-firebird/lib/wire/xsqlvar.js +703 -0
  49. package/poc/node_modules/node-firebird/package.json +38 -0
  50. package/poc/node_modules/node-firebird/vitest.config.js +24 -0
  51. package/poc/package-lock.json +21 -0
  52. package/poc/package.json +12 -0
  53. package/poc/reproduce-fixed.js +150 -0
  54. package/poc/reproduce.js +133 -0
  55. package/vitest.config.js +4 -1
@@ -0,0 +1,807 @@
1
+ /***************************************
2
+ *
3
+ * Constantes
4
+ *
5
+ ***************************************/
6
+
7
+ const defaultOptions = {
8
+ DEFAULT_HOST : '127.0.0.1',
9
+ DEFAULT_PORT : 3050,
10
+ DEFAULT_USER : 'SYSDBA',
11
+ DEFAULT_PASSWORD : 'masterkey',
12
+ DEFAULT_LOWERCASE_KEYS : false,
13
+ DEFAULT_PAGE_SIZE : 4096,
14
+ DEFAULT_SVC_NAME : 'service_mgr',
15
+ DEFAULT_ENCODING : 'UTF8',
16
+ DEFAULT_FETCHSIZE : 200,
17
+ };
18
+
19
+ const buffer= {
20
+ MAX_BUFFER_SIZE : 8192,
21
+ };
22
+
23
+ const int = {
24
+ MAX_INT : Math.pow(2, 31) - 1,
25
+ MIN_INT : -Math.pow(2, 31),
26
+ };
27
+
28
+ const op = {
29
+ op_void : 0, // Packet has been voided
30
+ op_connect : 1, // Connect to remote server
31
+ op_exit : 2, // Remote end has exitted
32
+ op_accept : 3, // Server accepts connection
33
+ op_reject : 4, // Server rejects connection
34
+ op_disconnect : 6, // Connect is going away
35
+ op_response : 9, // Generic response block
36
+
37
+ // Full context server operations
38
+
39
+ op_attach : 19, // Attach database
40
+ op_create : 20, // Create database
41
+ op_detach : 21, // Detach database
42
+ op_compile : 22, // Request based operations
43
+ op_start : 23,
44
+ op_start_and_send : 24,
45
+ op_send : 25,
46
+ op_receive : 26,
47
+ op_unwind : 27, // apparently unused, see protocol.cpp's case op_unwind
48
+ op_release : 28,
49
+
50
+ op_transaction : 29, // Transaction operations
51
+ op_commit : 30,
52
+ op_rollback : 31,
53
+ op_prepare : 32,
54
+ op_reconnect : 33,
55
+
56
+ op_create_blob : 34, // Blob operations
57
+ op_open_blob : 35,
58
+ op_get_segment : 36,
59
+ op_put_segment : 37,
60
+ op_cancel_blob : 38,
61
+ op_close_blob : 39,
62
+
63
+ op_info_database : 40, // Information services
64
+ op_info_request : 41,
65
+ op_info_transaction : 42,
66
+ op_info_blob : 43,
67
+
68
+ op_batch_segments : 44, // Put a bunch of blob segments
69
+
70
+ op_que_events : 48, // Que event notification request
71
+ op_cancel_events : 49, // Cancel event notification request
72
+ op_commit_retaining : 50, // Commit retaining (what else)
73
+ op_prepare2 : 51, // Message form of prepare
74
+ op_event : 52, // Completed event request (asynchronous)
75
+ op_connect_request : 53, // Request to establish connection
76
+ op_aux_connect : 54, // Establish auxiliary connection
77
+ op_ddl : 55, // DDL call
78
+ op_open_blob2 : 56,
79
+ op_create_blob2 : 57,
80
+ op_get_slice : 58,
81
+ op_put_slice : 59,
82
+ op_slice : 60, // Successful response to op_get_slice
83
+ op_seek_blob : 61, // Blob seek operation
84
+
85
+ // DSQL operations
86
+
87
+ op_allocate_statement : 62, // allocate a statment handle
88
+ op_execute : 63, // execute a prepared statement
89
+ op_exec_immediate : 64, // execute a statement
90
+ op_fetch : 65, // fetch a record
91
+ op_fetch_response : 66, // response for record fetch
92
+ op_free_statement : 67, // free a statement
93
+ op_prepare_statement : 68, // prepare a statement
94
+ op_set_cursor : 69, // set a cursor name
95
+ op_info_sql : 70,
96
+
97
+ op_dummy : 71, // dummy packet to detect loss of client
98
+ op_response_piggyback : 72, // response block for piggybacked messages
99
+ op_start_and_receive : 73,
100
+ op_start_send_and_receive : 74,
101
+ op_exec_immediate2 : 75, // execute an immediate statement with msgs
102
+ op_execute2 : 76, // execute a statement with msgs
103
+ op_insert : 77,
104
+ op_sql_response : 78, // response from execute, exec immed, insert
105
+ op_transact : 79,
106
+ op_transact_response : 80,
107
+ op_drop_database : 81,
108
+ op_service_attach : 82,
109
+ op_service_detach : 83,
110
+ op_service_info : 84,
111
+ op_service_start : 85,
112
+ op_rollback_retaining : 86,
113
+ op_partial : 89, // packet is not complete - delay processing
114
+ op_trusted_auth : 90,
115
+ op_cancel : 91,
116
+ op_cont_auth : 92,
117
+ op_ping : 93,
118
+ op_accept_data : 94, // Server accepts connection and returns some data to client
119
+ op_abort_aux_connection : 95, // Async operation - stop waiting for async connection to arrive
120
+ op_crypt : 96,
121
+ op_crypt_key_callback : 97,
122
+ op_cond_accept : 98, // Server accepts connection, returns some data to client
123
+ // and asks client to continue authentication before attach call
124
+ };
125
+
126
+ const dsql = {
127
+ DSQL_close : 1,
128
+ DSQL_drop : 2,
129
+ DSQL_unprepare : 4, // >: 2.5
130
+ };
131
+
132
+ /***********************/
133
+ /* ISC Error Codes */
134
+ /***********************/
135
+ const iscError = {
136
+ isc_sqlerr: 335544436,
137
+ isc_arg_end : 0, // end of argument list
138
+ isc_arg_gds : 1, // generic DSRI status value
139
+ isc_arg_string : 2, // string argument
140
+ isc_arg_cstring : 3, // count & string argument
141
+ isc_arg_number : 4, // numeric argument (long)
142
+ isc_arg_interpreted : 5, // interpreted status code (string)
143
+ isc_arg_unix : 7, // UNIX error code
144
+ isc_arg_next_mach : 15, // NeXT/Mach error code
145
+ isc_arg_win32 : 17, // Win32 error code
146
+ isc_arg_warning : 18, // warning argument
147
+ isc_arg_sql_state : 19, // SQLSTATE
148
+ };
149
+
150
+ const connect = {
151
+ CONNECT_VERSION2 : 2,
152
+ CONNECT_VERSION3 : 3,
153
+ ARCHITECTURE_GENERIC : 1,
154
+ };
155
+
156
+ /*******************/
157
+ /* Protocols */
158
+ /*******************/
159
+ const FB_PROTOCOL_FLAG = 0x8000;
160
+ const protocol = {
161
+ // Protocol 10 includes support for warnings and removes the requirement for
162
+ // encoding and decoding status codes
163
+ PROTOCOL_VERSION10 : 10,
164
+
165
+ // Since protocol 11 we must be separated from Borland Interbase.
166
+ // Therefore always set highmost bit in protocol version to 1.
167
+ // For unsigned protocol version this does not break version's compare.
168
+ FB_PROTOCOL_FLAG : FB_PROTOCOL_FLAG,
169
+ FB_PROTOCOL_MASK : ~FB_PROTOCOL_FLAG & 0xFFFF,
170
+
171
+ // Protocol 11 has support for user authentication related
172
+ // operations (op_update_account_info, op_authenticate_user and
173
+ // op_trusted_auth). When specific operation is not supported,
174
+ // we say "sorry".
175
+ PROTOCOL_VERSION11 : (FB_PROTOCOL_FLAG | 11),
176
+
177
+ // Protocol 12 has support for asynchronous call op_cancel.
178
+ // Currently implemented asynchronously only for TCP/IP.
179
+ PROTOCOL_VERSION12 : (FB_PROTOCOL_FLAG | 12),
180
+
181
+ // Protocol 13 has support for authentication plugins (op_cont_auth).
182
+ PROTOCOL_VERSION13 : (FB_PROTOCOL_FLAG | 13),
183
+
184
+ // Protocol 14 has support for wire encryption.
185
+ PROTOCOL_VERSION14 : (FB_PROTOCOL_FLAG | 14),
186
+
187
+ // Protocol 15 has support for conditional accept with early wire encryption.
188
+ PROTOCOL_VERSION15 : (FB_PROTOCOL_FLAG | 15),
189
+
190
+ // Protocol 16 has support for statement timeouts, DECFLOAT data types,
191
+ // and extended metadata identifiers (up to 63 characters).
192
+ // Introduced in Firebird 4.0.
193
+ PROTOCOL_VERSION16 : (FB_PROTOCOL_FLAG | 16),
194
+
195
+ // Protocol 17 continues Firebird 4.0 enhancements.
196
+ PROTOCOL_VERSION17 : (FB_PROTOCOL_FLAG | 17),
197
+ };
198
+
199
+ // Protocols types (accept_type)
200
+ const acceptType = {
201
+ ptype_rpc : 2, // Simple remote procedure call
202
+ ptype_batch_send : 3, // Batch sends, no asynchrony
203
+ ptype_out_of_band : 4, // Batch sends w/ out of band notification
204
+ ptype_lazy_send : 5, // Deferred packets delivery;
205
+ ptype_mask : 0xFF, // Mask - up to 255 types of protocol
206
+ pflag_compress : 0x100 // Turn on compression if possible
207
+ };
208
+
209
+ const SUPPORTED_PROTOCOL = [
210
+ [protocol.PROTOCOL_VERSION10, connect.ARCHITECTURE_GENERIC, acceptType.ptype_rpc, acceptType.ptype_batch_send, 1],
211
+ [protocol.PROTOCOL_VERSION11, connect.ARCHITECTURE_GENERIC, acceptType.ptype_lazy_send, acceptType.ptype_lazy_send, 2],
212
+ [protocol.PROTOCOL_VERSION12, connect.ARCHITECTURE_GENERIC, acceptType.ptype_lazy_send, acceptType.ptype_lazy_send, 3],
213
+ [protocol.PROTOCOL_VERSION13, connect.ARCHITECTURE_GENERIC, acceptType.ptype_lazy_send, acceptType.ptype_lazy_send, 4],
214
+ [protocol.PROTOCOL_VERSION14, connect.ARCHITECTURE_GENERIC, acceptType.ptype_lazy_send, acceptType.ptype_lazy_send, 5],
215
+ [protocol.PROTOCOL_VERSION15, connect.ARCHITECTURE_GENERIC, acceptType.ptype_lazy_send, acceptType.ptype_lazy_send, 6],
216
+ [protocol.PROTOCOL_VERSION16, connect.ARCHITECTURE_GENERIC, acceptType.ptype_lazy_send, acceptType.ptype_lazy_send, 7],
217
+ [protocol.PROTOCOL_VERSION17, connect.ARCHITECTURE_GENERIC, acceptType.ptype_lazy_send, acceptType.ptype_lazy_send, 8],
218
+ ];
219
+
220
+ const authPlugin = {
221
+ AUTH_PLUGIN_LEGACY : 'Legacy_Auth',
222
+ AUTH_PLUGIN_SRP : 'Srp',
223
+ AUTH_PLUGIN_SRP256 : 'Srp256',
224
+ };
225
+
226
+ const authOptions = {
227
+ AUTH_PLUGIN_LIST : [authPlugin.AUTH_PLUGIN_SRP256, authPlugin.AUTH_PLUGIN_SRP, authPlugin.AUTH_PLUGIN_LEGACY],
228
+ AUTH_PLUGIN_SRP_LIST : [authPlugin.AUTH_PLUGIN_SRP256, authPlugin.AUTH_PLUGIN_SRP],
229
+ LEGACY_AUTH_SALT : '9z',
230
+ WIRE_CRYPT_DISABLE : 0,
231
+ WIRE_CRYPT_ENABLE : 1,
232
+ };
233
+
234
+ /*******************/
235
+ /* SQL Type */
236
+ /*******************/
237
+ const sqlType = {
238
+ SQL_TEXT : 452, // Array of char
239
+ SQL_VARYING : 448,
240
+ SQL_SHORT : 500,
241
+ SQL_LONG : 496,
242
+ SQL_FLOAT : 482,
243
+ SQL_DOUBLE : 480,
244
+ SQL_D_FLOAT : 530,
245
+ SQL_TIMESTAMP : 510,
246
+ SQL_BLOB : 520,
247
+ SQL_ARRAY : 540,
248
+ SQL_QUAD : 550,
249
+ SQL_TYPE_TIME : 560,
250
+ SQL_TYPE_DATE : 570,
251
+ SQL_INT64 : 580,
252
+ SQL_INT128: 32752, // >= 4.0
253
+ SQL_TIMESTAMP_TZ : 32754, // >= 4.0 - timestamp with time zone
254
+ SQL_TIMESTAMP_TZ_EX : 32748, // >= 4.0 - extended timestamp with time zone
255
+ SQL_TIME_TZ : 32756, // >= 4.0 - time with time zone
256
+ SQL_TIME_TZ_EX : 32750, // >= 4.0 - extended time with time zone
257
+ SQL_DEC16 : 32760, // >= 4.0 - DECFLOAT(16) - 8 bytes, IEEE 754 Decimal64
258
+ SQL_DEC34 : 32762, // >= 4.0 - DECFLOAT(34) - 16 bytes, IEEE 754 Decimal128
259
+ SQL_BOOLEAN : 32764, // >: 3.0
260
+ SQL_NULL : 32766, // >= 2.5
261
+ SQL_TIMESTAMP_TZ_EX : 32748,
262
+ SQL_TIME_TZ_EX : 32750,
263
+ SQL_TIMESTAMP_TZ : 32754,
264
+ SQL_TIME_TZ : 32756,
265
+ };
266
+
267
+ const blobType = {
268
+ isc_blob_text : 1,
269
+ };
270
+
271
+ /*******************/
272
+ /* Blr definitions */
273
+ /*******************/
274
+ const blr = {
275
+ blr_text : 14,
276
+ blr_text2 : 15,
277
+ blr_short : 7,
278
+ blr_long : 8,
279
+ blr_quad : 9,
280
+ blr_float : 10,
281
+ blr_double : 27,
282
+ blr_d_float : 11,
283
+ blr_timestamp : 35,
284
+ blr_varying : 37,
285
+ blr_varying2 : 38,
286
+ blr_blob : 261,
287
+ blr_cstring : 40,
288
+ blr_cstring2 : 41,
289
+ blr_blob_id : 45,
290
+ blr_sql_date : 12,
291
+ blr_sql_time : 13,
292
+ blr_int64 : 16,
293
+ blr_int128 : 26, // >: 4.0
294
+ blr_dec64 : 24, // >= 4.0 - DECFLOAT(16), IEEE 754 Decimal64
295
+ blr_dec128 : 25, // >= 4.0 - DECFLOAT(34), IEEE 754 Decimal128
296
+ blr_timestamp_tz : 28, // >= 4.0 - timestamp with time zone
297
+ blr_time_tz : 29, // >= 4.0 - time with time zone
298
+ blr_blob2 : 17, // >: 2.0
299
+ blr_domain_name : 18, // >: 2.1
300
+ blr_domain_name2 : 19, // >: 2.1
301
+ blr_not_nullable : 20, // >: 2.1
302
+ blr_column_name : 21, // >: 2.5
303
+ blr_column_name2 : 22, // >: 2.5
304
+ blr_bool : 23, // >: 3.0
305
+
306
+ blr_sql_time_tz : 28, // >: 4.0
307
+ blr_timestamp_tz : 29, // >: 4.0
308
+ blr_ex_time_tz : 30, // >: 4.0
309
+ blr_ex_timestamp_tz : 31, // >: 4.0
310
+
311
+ blr_version4 : 4,
312
+ blr_version5 : 5, // dialect 3
313
+ blr_eoc : 76,
314
+ blr_end : 255,
315
+
316
+ blr_assignment : 1,
317
+ blr_begin : 2,
318
+ blr_dcl_variable : 3,
319
+ blr_message : 4,
320
+ };
321
+
322
+ /**********************************/
323
+ /* Database parameter block stuff */
324
+ /**********************************/
325
+ const dpb = {
326
+ isc_dpb_version1 : 1,
327
+ isc_dpb_version2 : 2, // >: FB30
328
+ isc_dpb_cdd_pathname : 1,
329
+ isc_dpb_allocation : 2,
330
+ isc_dpb_journal : 3,
331
+ isc_dpb_page_size : 4,
332
+ isc_dpb_num_buffers : 5,
333
+ isc_dpb_buffer_length : 6,
334
+ isc_dpb_debug : 7,
335
+ isc_dpb_garbage_collect : 8,
336
+ isc_dpb_verify : 9,
337
+ isc_dpb_sweep : 10,
338
+ isc_dpb_enable_journal : 11,
339
+ isc_dpb_disable_journal : 12,
340
+ isc_dpb_dbkey_scope : 13,
341
+ isc_dpb_number_of_users : 14,
342
+ isc_dpb_trace : 15,
343
+ isc_dpb_no_garbage_collect : 16,
344
+ isc_dpb_damaged : 17,
345
+ isc_dpb_license : 18,
346
+ isc_dpb_sys_user_name : 19,
347
+ isc_dpb_encrypt_key : 20,
348
+ isc_dpb_activate_shadow : 21,
349
+ isc_dpb_sweep_interval : 22,
350
+ isc_dpb_delete_shadow : 23,
351
+ isc_dpb_force_write : 24,
352
+ isc_dpb_begin_log : 25,
353
+ isc_dpb_quit_log : 26,
354
+ isc_dpb_no_reserve : 27,
355
+ isc_dpb_user_name : 28,
356
+ isc_dpb_password : 29,
357
+ isc_dpb_password_enc : 30,
358
+ isc_dpb_sys_user_name_enc : 31,
359
+ isc_dpb_interp : 32,
360
+ isc_dpb_online_dump : 33,
361
+ isc_dpb_old_file_size : 34,
362
+ isc_dpb_old_num_files : 35,
363
+ isc_dpb_old_file : 36,
364
+ isc_dpb_old_start_page : 37,
365
+ isc_dpb_old_start_seqno : 38,
366
+ isc_dpb_old_start_file : 39,
367
+ isc_dpb_old_dump_id : 41,
368
+ isc_dpb_lc_messages : 47,
369
+ isc_dpb_lc_ctype : 48,
370
+ isc_dpb_cache_manager : 49,
371
+ isc_dpb_shutdown : 50,
372
+ isc_dpb_online : 51,
373
+ isc_dpb_shutdown_delay : 52,
374
+ isc_dpb_reserved : 53,
375
+ isc_dpb_overwrite : 54,
376
+ isc_dpb_sec_attach : 55,
377
+ isc_dpb_connect_timeout : 57,
378
+ isc_dpb_dummy_packet_interval : 58,
379
+ isc_dpb_gbak_attach : 59,
380
+ isc_dpb_sql_role_name : 60,
381
+ isc_dpb_set_page_buffers : 61,
382
+ isc_dpb_working_directory : 62,
383
+ isc_dpb_sql_dialect : 63,
384
+ isc_dpb_set_db_readonly : 64,
385
+ isc_dpb_set_db_sql_dialect : 65,
386
+ isc_dpb_gfix_attach : 66,
387
+ isc_dpb_gstat_attach : 67,
388
+ isc_dpb_set_db_charset : 68,
389
+ isc_dpb_gsec_attach : 69,
390
+ isc_dpb_address_path : 70,
391
+ isc_dpb_process_id : 71,
392
+ isc_dpb_no_db_triggers : 72,
393
+ isc_dpb_trusted_auth : 73,
394
+ isc_dpb_process_name : 74,
395
+ isc_dpb_trusted_role : 75,
396
+ isc_dpb_org_filename : 76,
397
+ isc_dpb_utf8_filename : 77,
398
+ isc_dpb_ext_call_depth : 78,
399
+ isc_dpb_auth_block : 79,
400
+ isc_dpb_client_version : 80,
401
+ isc_dpb_remote_protocol : 81,
402
+ isc_dpb_host_name : 82,
403
+ isc_dpb_os_user : 83,
404
+ isc_dpb_specific_auth_data : 84,
405
+ isc_dpb_auth_plugin_list : 85,
406
+ isc_dpb_auth_plugin_name : 86,
407
+ isc_dpb_config : 87,
408
+ isc_dpb_nolinger : 88,
409
+ isc_dpb_reset_icu : 89,
410
+ isc_dpb_map_attach : 90,
411
+ isc_dpb_session_time_zone : 91,
412
+ };
413
+
414
+ const cnct = {
415
+ CNCT_user : 1, // User name
416
+ CNCT_passwd : 2,
417
+ // CNCT_ppo : 3, // Apollo person, project, organization. OBSOLETE.
418
+ CNCT_host : 4,
419
+ CNCT_group : 5, // Effective Unix group id
420
+ CNCT_user_verification : 6, // Attach/create using this connection will use user verification
421
+ CNCT_specific_data : 7, // Some data, needed for user verification on server
422
+ CNCT_plugin_name : 8, // Name of plugin, which generated that data
423
+ CNCT_login : 9, // Same data as isc_dpb_user_name
424
+ CNCT_plugin_list : 10, // List of plugins, available on client
425
+ CNCT_client_crypt : 11, // Client encyption level (DISABLED/ENABLED/REQUIRED)
426
+ WIRE_CRYPT_DISABLED : 0,
427
+ WIRE_CRYPT_ENABLED : 1,
428
+ WIRE_CRYPT_REQUIRED : 2,
429
+ };
430
+
431
+ /****************************/
432
+ /* Common, structural codes */
433
+ /****************************/
434
+ const common = {
435
+ isc_info_end : 1,
436
+ isc_info_truncated : 2,
437
+ isc_info_error : 3,
438
+ isc_info_data_not_ready : 4,
439
+ isc_info_length : 126,
440
+ isc_info_flag_end : 127,
441
+ };
442
+
443
+ /*************************************/
444
+ /* Transaction parameter block stuff */
445
+ /*************************************/
446
+ const tpb = {
447
+ isc_tpb_version1 : 1,
448
+ isc_tpb_version3 : 3,
449
+ isc_tpb_consistency : 1,
450
+ isc_tpb_concurrency : 2,
451
+ isc_tpb_shared : 3, // < FB21
452
+ isc_tpb_protected : 4, // < FB21
453
+ isc_tpb_exclusive : 5, // < FB21
454
+ isc_tpb_wait : 6,
455
+ isc_tpb_nowait : 7,
456
+ isc_tpb_read : 8,
457
+ isc_tpb_write : 9,
458
+ isc_tpb_lock_read : 10,
459
+ isc_tpb_lock_write : 11,
460
+ isc_tpb_verb_time : 12,
461
+ isc_tpb_commit_time : 13,
462
+ isc_tpb_ignore_limbo : 14,
463
+ isc_tpb_read_committed : 15,
464
+ isc_tpb_autocommit : 16,
465
+ isc_tpb_rec_version : 17,
466
+ isc_tpb_no_rec_version : 18,
467
+ isc_tpb_restart_requests : 19,
468
+ isc_tpb_no_auto_undo : 20,
469
+ isc_tpb_lock_timeout : 21, // >= FB20
470
+ };
471
+
472
+ const transactionIsolation = {
473
+ ISOLATION_READ_UNCOMMITTED : [tpb.isc_tpb_read_committed, tpb.isc_tpb_rec_version],
474
+ ISOLATION_READ_COMMITTED : [tpb.isc_tpb_read_committed, tpb.isc_tpb_no_rec_version],
475
+ ISOLATION_REPEATABLE_READ : [tpb.isc_tpb_concurrency],
476
+ ISOLATION_SERIALIZABLE : [tpb.isc_tpb_consistency],
477
+ ISOLATION_READ_COMMITTED_READ_ONLY : [tpb.isc_tpb_read_committed, tpb.isc_tpb_no_rec_version],
478
+ };
479
+
480
+ /*************************/
481
+ /* SQL information items */
482
+ /*************************/
483
+ const sqlInfo = {
484
+ isc_info_sql_select : 4,
485
+ isc_info_sql_bind : 5,
486
+ isc_info_sql_num_variables : 6,
487
+ isc_info_sql_describe_vars : 7,
488
+ isc_info_sql_describe_end : 8,
489
+ isc_info_sql_sqlda_seq : 9,
490
+ isc_info_sql_message_seq : 10,
491
+ isc_info_sql_type : 11,
492
+ isc_info_sql_sub_type : 12,
493
+ isc_info_sql_scale : 13,
494
+ isc_info_sql_length : 14,
495
+ isc_info_sql_null_ind : 15,
496
+ isc_info_sql_field : 16,
497
+ isc_info_sql_relation : 17,
498
+ isc_info_sql_owner : 18,
499
+ isc_info_sql_alias : 19,
500
+ isc_info_sql_sqlda_start : 20,
501
+ isc_info_sql_stmt_type : 21,
502
+ isc_info_sql_get_plan : 22,
503
+ isc_info_sql_records : 23,
504
+ isc_info_sql_batch_fetch : 24,
505
+ isc_info_sql_relation_alias : 25, // >: 2.0
506
+ isc_info_sql_explain_plan : 26, // >= 3.0
507
+ };
508
+
509
+ const statementInfo = {
510
+ isc_info_sql_stmt_select : 1,
511
+ isc_info_sql_stmt_insert : 2,
512
+ isc_info_sql_stmt_update : 3,
513
+ isc_info_sql_stmt_delete : 4,
514
+ isc_info_sql_stmt_ddl : 5,
515
+ isc_info_sql_stmt_get_segment : 6,
516
+ isc_info_sql_stmt_put_segment : 7,
517
+ isc_info_sql_stmt_exec_procedure : 8,
518
+ isc_info_sql_stmt_start_trans : 9,
519
+ isc_info_sql_stmt_commit : 10,
520
+ isc_info_sql_stmt_rollback : 11,
521
+ isc_info_sql_stmt_select_for_upd : 12,
522
+ isc_info_sql_stmt_set_generator : 13,
523
+ isc_info_sql_stmt_savepoint : 14,
524
+ };
525
+
526
+ const DESCRIBE = [
527
+ sqlInfo.isc_info_sql_stmt_type,
528
+ sqlInfo.isc_info_sql_select,
529
+ sqlInfo.isc_info_sql_describe_vars,
530
+ sqlInfo.isc_info_sql_sqlda_seq,
531
+ sqlInfo.isc_info_sql_type,
532
+ sqlInfo.isc_info_sql_sub_type,
533
+ sqlInfo.isc_info_sql_scale,
534
+ sqlInfo.isc_info_sql_length,
535
+ sqlInfo.isc_info_sql_field,
536
+ sqlInfo.isc_info_sql_relation,
537
+ //isc_info_sql_owner,
538
+ sqlInfo.isc_info_sql_alias,
539
+ sqlInfo.isc_info_sql_describe_end,
540
+ sqlInfo.isc_info_sql_bind,
541
+ sqlInfo.isc_info_sql_describe_vars,
542
+ sqlInfo.isc_info_sql_sqlda_seq,
543
+ sqlInfo.isc_info_sql_type,
544
+ sqlInfo.isc_info_sql_sub_type,
545
+ sqlInfo.isc_info_sql_scale,
546
+ sqlInfo.isc_info_sql_length,
547
+ sqlInfo.isc_info_sql_describe_end
548
+ ];
549
+
550
+ /***********************/
551
+ /* ISC Services */
552
+ /***********************/
553
+ const iscAction = {
554
+ isc_action_svc_backup : 1, /* Starts database backup process on the server */
555
+ isc_action_svc_restore : 2, /* Starts database restore process on the server */
556
+ isc_action_svc_repair : 3, /* Starts database repair process on the server */
557
+ isc_action_svc_add_user : 4, /* Adds a new user to the security database */
558
+ isc_action_svc_delete_user : 5, /* Deletes a user record from the security database */
559
+ isc_action_svc_modify_user : 6, /* Modifies a user record in the security database */
560
+ isc_action_svc_display_user : 7, /* Displays a user record from the security database */
561
+ isc_action_svc_properties : 8, /* Sets database properties */
562
+ isc_action_svc_add_license : 9, /* Adds a license to the license file */
563
+ isc_action_svc_remove_license : 10, /* Removes a license from the license file */
564
+ isc_action_svc_db_stats : 11, /* Retrieves database statistics */
565
+ isc_action_svc_get_ib_log : 12, /* Retrieves the InterBase log file from the server */
566
+ isc_action_svc_get_fb_log : 12, // isc_action_svc_get_ib_log, /* Retrieves the Firebird log file from the server */
567
+ isc_action_svc_nbak : 20, /* start nbackup */
568
+ isc_action_svc_nrest : 21, /* start nrestore */
569
+ isc_action_svc_trace_start : 22,
570
+ isc_action_svc_trace_stop : 23,
571
+ isc_action_svc_trace_suspend : 24,
572
+ isc_action_svc_trace_resume : 25,
573
+ isc_action_svc_trace_list : 26,
574
+ };
575
+
576
+ /* Services Properties */
577
+ const service = {
578
+ isc_spb_prp_page_buffers : 5,
579
+ isc_spb_prp_sweep_interval : 6,
580
+ isc_spb_prp_shutdown_db : 7,
581
+ isc_spb_prp_deny_new_attachments : 9,
582
+ isc_spb_prp_deny_new_transactions : 10,
583
+ isc_spb_prp_reserve_space : 11,
584
+ isc_spb_prp_write_mode : 12,
585
+ isc_spb_prp_access_mode : 13,
586
+ isc_spb_prp_set_sql_dialect : 14,
587
+ isc_spb_num_att : 5,
588
+ isc_spb_num_db : 6,
589
+ // SHUTDOWN OPTION FOR 2.0
590
+ isc_spb_prp_force_shutdown : 41,
591
+ isc_spb_prp_attachments_shutdown : 42,
592
+ isc_spb_prp_transactions_shutdown : 43,
593
+ isc_spb_prp_shutdown_mode : 44,
594
+ isc_spb_prp_online_mode : 45,
595
+
596
+ isc_spb_prp_sm_normal : 0,
597
+ isc_spb_prp_sm_multi : 1,
598
+ isc_spb_prp_sm_single : 2,
599
+ isc_spb_prp_sm_full : 3,
600
+
601
+ // WRITE_MODE_PARAMETERS
602
+ isc_spb_prp_wm_async : 37,
603
+ isc_spb_prp_wm_sync : 38,
604
+
605
+ // ACCESS_MODE_PARAMETERS
606
+ isc_spb_prp_am_readonly : 39,
607
+ isc_spb_prp_am_readwrite : 40,
608
+
609
+ // RESERVE_SPACE_PARAMETERS
610
+ isc_spb_prp_res_use_full : 35,
611
+ isc_spb_prp_res : 36,
612
+
613
+ // Option Flags
614
+ isc_spb_prp_activate : 0x0100,
615
+ isc_spb_prp_db_online : 0x0200,
616
+ };
617
+
618
+ /****************************/
619
+ /* Service info */
620
+ /****************************/
621
+ const serviceInfo = {
622
+ isc_info_svc_svr_db_info: 50, /* Retrieves the number of attachments and databases */
623
+ isc_info_svc_get_license: 51, /* Retrieves all license keys and IDs from the license file */
624
+ isc_info_svc_get_license_mask: 52, /* Retrieves a bitmask representing licensed options on the server */
625
+ isc_info_svc_get_config: 53, /* Retrieves the parameters and values for IB_CONFIG */
626
+ isc_info_svc_version: 54, /* Retrieves the version of the services manager */
627
+ isc_info_svc_server_version: 55, /* Retrieves the version of the InterBase server */
628
+ isc_info_svc_implementation: 56, /* Retrieves the implementation of the InterBase server */
629
+ isc_info_svc_capabilities: 57, /* Retrieves a bitmask representing the server's capabilities */
630
+ isc_info_svc_user_dbpath: 58, /* Retrieves the path to the security database in use by the server */
631
+ isc_info_svc_get_env: 59, /* Retrieves the setting of $INTERBASE */
632
+ isc_info_svc_get_env_lock: 60, /* Retrieves the setting of $INTERBASE_LCK */
633
+ isc_info_svc_get_env_msg: 61, /* Retrieves the setting of $INTERBASE_MSG */
634
+ isc_info_svc_line: 62, /* Retrieves 1 line of service output per call */
635
+ isc_info_svc_to_eof: 63, /* Retrieves as much of the server output as will fit in the supplied buffer */
636
+ isc_info_svc_timeout: 64, /* Sets / signifies a timeout value for reading service information */
637
+ isc_info_svc_get_licensed_users: 65, /* Retrieves the number of users licensed for accessing the server */
638
+ isc_info_svc_limbo_trans: 66, /* Retrieve the limbo transactions */
639
+ isc_info_svc_running: 67, /* Checks to see if a service is running on an attachment */
640
+ isc_info_svc_get_users: 68, /* Returns the user information from isc_action_svc_display_users */
641
+ isc_info_svc_stdin: 78,
642
+ };
643
+
644
+ /*************************************/
645
+ /* Services parameter block stuff */
646
+ /*************************************/
647
+ const spb = {
648
+ isc_spb_version1 : 1,
649
+ isc_spb_current_version : 2,
650
+ isc_spb_version : 2, // isc_spb_current_version,
651
+ isc_spb_user_name : dpb.isc_dpb_user_name,
652
+ isc_spb_sys_user_name : dpb.isc_dpb_sys_user_name,
653
+ isc_spb_sys_user_name_enc : dpb.isc_dpb_sys_user_name_enc,
654
+ isc_spb_password : dpb.isc_dpb_password,
655
+ isc_spb_password_enc : dpb.isc_dpb_password_enc,
656
+ isc_spb_command_line : 105,
657
+ isc_spb_dbname : 106,
658
+ isc_spb_verbose : 107,
659
+ isc_spb_options : 108,
660
+ };
661
+
662
+ /* · Backup Service ·*/
663
+ const serviceBackup = {
664
+ isc_spb_bkp_file : 5,
665
+ isc_spb_bkp_factor : 6,
666
+ isc_spb_bkp_length : 7,
667
+ isc_spb_bkp_ignore_checksums : 0x01,
668
+ isc_spb_bkp_ignore_limbo : 0x02,
669
+ isc_spb_bkp_metadata_only : 0x04,
670
+ isc_spb_bkp_no_garbage_collect : 0x08,
671
+ isc_spb_bkp_old_descriptions : 0x10,
672
+ isc_spb_bkp_non_transportable : 0x20,
673
+ isc_spb_bkp_convert : 0x40,
674
+ isc_spb_bkp_expand : 0x80,
675
+ isc_spb_bkp_no_triggers : 0x8000,
676
+ // nbackup
677
+ isc_spb_nbk_level : 5,
678
+ isc_spb_nbk_file : 6,
679
+ isc_spb_nbk_direct : 7,
680
+ isc_spb_nbk_no_triggers : 0x01,
681
+ };
682
+
683
+ /* Restore Service ·*/
684
+ const serviceRestore = {
685
+ isc_spb_res_buffers : 9,
686
+ isc_spb_res_page_size : 10,
687
+ isc_spb_res_length : 11,
688
+ isc_spb_res_access_mode : 12,
689
+ isc_spb_res_fix_fss_data : 13,
690
+ isc_spb_res_fix_fss_metadata : 14,
691
+ isc_spb_res_am_readonly : service.isc_spb_prp_am_readonly,
692
+ isc_spb_res_am_readwrite : service.isc_spb_prp_am_readwrite,
693
+ isc_spb_res_deactivate_idx : 0x0100,
694
+ isc_spb_res_no_shadow : 0x0200,
695
+ isc_spb_res_no_validity : 0x0400,
696
+ isc_spb_res_one_at_a_time : 0x0800,
697
+ isc_spb_res_replace : 0x1000,
698
+ isc_spb_res_create : 0x2000,
699
+ isc_spb_res_use_all_space : 0x4000,
700
+ };
701
+
702
+ /* · Repair Service ·*/
703
+ const serviceRepair = {
704
+ isc_spb_rpr_commit_trans : 15,
705
+ isc_spb_rpr_rollback_trans : 34,
706
+ isc_spb_rpr_recover_two_phase : 17,
707
+ isc_spb_tra_id : 18,
708
+ isc_spb_single_tra_id : 19,
709
+ isc_spb_multi_tra_id : 20,
710
+ isc_spb_tra_state : 21,
711
+ isc_spb_tra_state_limbo : 22,
712
+ isc_spb_tra_state_commit : 23,
713
+ isc_spb_tra_state_rollback : 24,
714
+ isc_spb_tra_state_unknown : 25,
715
+ isc_spb_tra_host_site : 26,
716
+ isc_spb_tra_remote_site : 27,
717
+ isc_spb_tra_db_path : 28,
718
+ isc_spb_tra_advise : 29,
719
+ isc_spb_tra_advise_commit : 30,
720
+ isc_spb_tra_advise_rollback : 31,
721
+ isc_spb_tra_advise_unknown : 33,
722
+ isc_spb_rpr_validate_db : 0x01,
723
+ isc_spb_rpr_sweep_db : 0x02,
724
+ isc_spb_rpr_mend_db : 0x04,
725
+ isc_spb_rpr_list_limbo_trans : 0x08,
726
+ isc_spb_rpr_check_db : 0x10,
727
+ isc_spb_rpr_ignore_checksum : 0x20,
728
+ isc_spb_rpr_kill_shadows : 0x40,
729
+ isc_spb_rpr_full : 0x80,
730
+ isc_spb_rpr_icu : 0x0800,
731
+ };
732
+
733
+ /* · Security Service ·*/
734
+ const serviceSecurity = {
735
+ isc_spb_sec_userid : 5,
736
+ isc_spb_sec_groupid : 6,
737
+ isc_spb_sec_username : 7,
738
+ isc_spb_sec_password : 8,
739
+ isc_spb_sec_groupname : 9,
740
+ isc_spb_sec_firstname : 10,
741
+ isc_spb_sec_middlename : 11,
742
+ isc_spb_sec_lastname : 12,
743
+ isc_spb_sec_admin : 13,
744
+ };
745
+
746
+ /* License Service */
747
+ const serviceLicence = {
748
+ isc_spb_lic_key : 5,
749
+ isc_spb_lic_id : 6,
750
+ isc_spb_lic_desc : 7,
751
+ };
752
+
753
+ /* Statistics Service */
754
+ const serviceStatistics = {
755
+ isc_spb_sts_data_pages : 0x01,
756
+ isc_spb_sts_db_log : 0x02,
757
+ isc_spb_sts_hdr_pages : 0x04,
758
+ isc_spb_sts_idx_pages : 0x08,
759
+ isc_spb_sts_sys_relations : 0x10,
760
+ isc_spb_sts_record_versions : 0x20,
761
+ isc_spb_sts_table : 0x40,
762
+ isc_spb_sts_nocreation : 0x80,
763
+ };
764
+
765
+ /* Trace Service */
766
+ const serviceTrace = {
767
+ isc_spb_trc_id : 1,
768
+ isc_spb_trc_name : 2,
769
+ isc_spb_trc_cfg : 3,
770
+ };
771
+
772
+ module.exports = Object.freeze({
773
+ ...acceptType,
774
+ ...authPlugin,
775
+ ...authOptions,
776
+ ...blr,
777
+ ...blobType,
778
+ ...buffer,
779
+ ...cnct,
780
+ ...common,
781
+ ...connect,
782
+ ...defaultOptions,
783
+ DESCRIBE,
784
+ ...dpb,
785
+ ...dsql,
786
+ ...int,
787
+ ...iscAction,
788
+ ...iscError,
789
+ ...op,
790
+ ...protocol,
791
+ ...service,
792
+ ...serviceBackup,
793
+ ...serviceInfo,
794
+ ...serviceLicence,
795
+ ...serviceRestore,
796
+ ...serviceRepair,
797
+ ...serviceSecurity,
798
+ ...serviceStatistics,
799
+ ...serviceTrace,
800
+ ...sqlInfo,
801
+ ...sqlType,
802
+ ...spb,
803
+ ...statementInfo,
804
+ SUPPORTED_PROTOCOL,
805
+ ...tpb,
806
+ ...transactionIsolation,
807
+ });