-
-
Notifications
You must be signed in to change notification settings - Fork 205
/
constants.h
461 lines (380 loc) · 13.7 KB
/
constants.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
/*
* PROGRAM: JRD Access Method
* MODULE: constants.h
* DESCRIPTION: Misc system constants
*
* The contents of this file are subject to the Interbase Public
* License Version 1.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy
* of the License at http://www.Inprise.com/IPL.html
*
* Software distributed under the License is distributed on an
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
* or implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code was created by Inprise Corporation
* and its predecessors. Portions created by Inprise Corporation are
* Copyright (C) Inprise Corporation.
*
* All Rights Reserved.
* Contributor(s): ______________________________________.
*
* 2001.10.08 Claudio Valderrama: fb_sysflag enum with numbering
* for automatically created triggers that aren't system triggers.
*/
#ifndef JRD_CONSTANTS_H
#define JRD_CONSTANTS_H
// BLOb Subtype definitions
/* Subtypes < 0 are user defined
* Subtype 0 means "untyped"
* Subtypes > 0 are Firebird defined
*/
// BRS 29-Apr-2004
// replace those constants with public defined ones isc_blob_*
//
//const int BLOB_untyped = 0;
//
//const int BLOB_text = 1;
//const int BLOB_blr = 2;
//const int BLOB_acl = 3;
//const int BLOB_ranges = 4;
//const int BLOB_summary = 5;
//const int BLOB_format = 6;
//const int BLOB_tra = 7;
//const int BLOB_extfile = 8;
//const int BLOB_max_predefined_subtype = 9;
//
// Column Limits (in bytes)
const ULONG MAX_COLUMN_SIZE = 32767;
const ULONG MAX_VARY_COLUMN_SIZE = MAX_COLUMN_SIZE - sizeof(USHORT);
const ULONG MAX_STR_SIZE = 65535;
// Metadata constants
// When changing these constants, change MaxIdentifierByteLength and MaxIdentifierCharLength in
// firebird.conf.in too.
const unsigned METADATA_IDENTIFIER_CHAR_LEN = 63;
const unsigned METADATA_BYTES_PER_CHAR = 4;
// Misc constant values
const unsigned int USERNAME_LENGTH = METADATA_IDENTIFIER_CHAR_LEN * METADATA_BYTES_PER_CHAR;
const FB_SIZE_T MAX_SQL_IDENTIFIER_LEN = METADATA_IDENTIFIER_CHAR_LEN * METADATA_BYTES_PER_CHAR;
const FB_SIZE_T MAX_SQL_IDENTIFIER_SIZE = MAX_SQL_IDENTIFIER_LEN + 1;
const ULONG MAX_SQL_LENGTH = 10 * 1024 * 1024; // 10 MB - just a safety check
const char* const DB_KEY_NAME = "DB_KEY";
const char* const RDB_DB_KEY_NAME = "RDB$DB_KEY";
const char* const RDB_RECORD_VERSION_NAME = "RDB$RECORD_VERSION";
const char* const NULL_STRING_MARK = "*** null ***";
const char* const UNKNOWN_STRING_MARK = "*** unknown ***";
const char* const ISC_USER = "ISC_USER";
const char* const ISC_PASSWORD = "ISC_PASSWORD";
const char* const NULL_ROLE = "NONE";
#define ADMIN_ROLE "RDB$ADMIN" // It's used in C-string concatenations
// User name assigned to any user granted USR_locksmith rights.
// If this name is changed, modify also the trigger in
// jrd/grant.gdl (which turns into jrd/trig.h.
const char* const DBA_USER_NAME = "SYSDBA";
const char* const PRIMARY_KEY = "PRIMARY KEY";
const char* const FOREIGN_KEY = "FOREIGN KEY";
const char* const UNIQUE_CNSTRT = "UNIQUE";
const char* const CHECK_CNSTRT = "CHECK";
const char* const NOT_NULL_CNSTRT = "NOT NULL";
const char* const REL_SCOPE_PERSISTENT = "persistent table \"%s\"";
const char* const REL_SCOPE_GTT_PRESERVE = "global temporary table \"%s\" of type ON COMMIT PRESERVE ROWS";
const char* const REL_SCOPE_GTT_DELETE = "global temporary table \"%s\" of type ON COMMIT DELETE ROWS";
const char* const REL_SCOPE_EXTERNAL = "external table \"%s\"";
const char* const REL_SCOPE_VIEW = "view \"%s\"";
const char* const REL_SCOPE_VIRTUAL = "virtual table \"%s\"";
// literal strings in rdb$ref_constraints to be used to identify
// the cascade actions for referential constraints. Used
// by isql/show and isql/extract for now.
const char* const RI_ACTION_CASCADE = "CASCADE";
const char* const RI_ACTION_NULL = "SET NULL";
const char* const RI_ACTION_DEFAULT = "SET DEFAULT";
const char* const RI_ACTION_NONE = "NO ACTION";
const char* const RI_RESTRICT = "RESTRICT";
// Automatically created domains for fields with direct data type.
// Also, automatically created indices that are unique or non-unique, but not PK.
const char* const IMPLICIT_DOMAIN_PREFIX = "RDB$";
const int IMPLICIT_DOMAIN_PREFIX_LEN = 4;
// Automatically created indices for PKs.
const char* const IMPLICIT_PK_PREFIX = "RDB$PRIMARY";
const int IMPLICIT_PK_PREFIX_LEN = 11;
// The invisible "id zero" generator.
const char* const MASTER_GENERATOR = ""; //Was "RDB$GENERATORS";
// Automatically created security classes for SQL objects.
// Keep in sync with trig.h
const char* const DEFAULT_CLASS = "SQL$DEFAULT";
const char* const SQL_SECCLASS_GENERATOR = "RDB$SECURITY_CLASS";
const char* const SQL_SECCLASS_PREFIX = "SQL$";
const int SQL_SECCLASS_PREFIX_LEN = 4;
const char* const SQL_FLD_SECCLASS_PREFIX = "SQL$GRANT";
const int SQL_FLD_SECCLASS_PREFIX_LEN = 9;
const char* const GEN_SECCLASS_PREFIX = "GEN$";
const int GEN_SECCLASS_PREFIX_LEN = 4;
// Automatically created check constraints for unnamed PRIMARY and UNIQUE declarations.
const char* const IMPLICIT_INTEGRITY_PREFIX = "INTEG_";
const int IMPLICIT_INTEGRITY_PREFIX_LEN = 6;
//*****************************************
// System flag meaning - mainly Firebird.
//*****************************************
enum fb_sysflag {
fb_sysflag_user = 0,
fb_sysflag_system = 1,
fb_sysflag_qli = 2,
fb_sysflag_check_constraint = 3,
fb_sysflag_referential_constraint = 4,
fb_sysflag_view_check = 5,
fb_sysflag_identity_generator = 6
};
enum ViewContextType {
VCT_TABLE,
VCT_VIEW,
VCT_PROCEDURE
};
enum IdentityType {
IDENT_TYPE_ALWAYS,
IDENT_TYPE_BY_DEFAULT
};
enum SubRoutineType
{
SUB_ROUTINE_TYPE_PSQL
};
// UDF Arguments are numbered from 0 to MAX_UDF_ARGUMENTS --
// argument 0 is reserved for the return-type of the UDF
const unsigned MAX_UDF_ARGUMENTS = 15;
// Maximum length of single line returned from pretty printer
const int PRETTY_BUFFER_SIZE = 1024;
const int MAX_INDEX_SEGMENTS = 16;
// Maximum index key length (must be in sync with MAX_PAGE_SIZE in ods.h)
const ULONG MAX_KEY = 8192; // Maximum page size possible divide by 4 (MAX_PAGE_SIZE / 4)
const USHORT SQL_MATCH_1_CHAR = '_'; // Not translatable
const USHORT SQL_MATCH_ANY_CHARS = '%'; // Not translatable
const size_t MAX_CONTEXT_VARS = 1000; // Maximum number of context variables allowed for a single object
// Time precision limits and defaults for TIME/TIMESTAMP values.
// Currently they're applied to CURRENT_TIME[STAMP] expressions only.
// Should be more than 6 as per SQL spec, but we don't support more than 3 yet
const size_t MAX_TIME_PRECISION = 3;
// Consistent with the SQL spec
const size_t DEFAULT_TIME_PRECISION = 0;
// Should be 6 as per SQL spec
const size_t DEFAULT_TIMESTAMP_PRECISION = 3;
const size_t MAX_ARRAY_DIMENSIONS = 16;
const size_t MAX_SORT_ITEMS = 255; // ORDER BY f1,...,f255
const size_t MAX_DB_PER_TRANS = 256; // A multi-db txn can span up to 256 dbs
// relation types
enum rel_t {
rel_persistent = 0,
rel_view = 1,
rel_external = 2,
rel_virtual = 3,
rel_global_temp_preserve = 4,
rel_global_temp_delete = 5
};
// procedure types
enum prc_t {
prc_legacy = 0,
prc_selectable = 1,
prc_executable = 2
};
// procedure parameter mechanism
enum prm_mech_t {
prm_mech_normal = 0,
prm_mech_type_of = 1
};
// states
enum mon_state_t {
mon_state_idle = 0,
mon_state_active = 1,
mon_state_stalled = 2
};
// shutdown modes
enum shut_mode_t {
shut_mode_online = 0,
shut_mode_multi = 1,
shut_mode_single = 2,
shut_mode_full = 3
};
// backup states
enum backup_state_t {
backup_state_unknown = -1,
backup_state_normal = 0,
backup_state_stalled = 1,
backup_state_merge = 2
};
// transaction isolation levels
enum tra_iso_mode_t {
iso_mode_consistency = 0,
iso_mode_concurrency = 1,
iso_mode_rc_version = 2,
iso_mode_rc_no_version = 3
};
// statistics groups
enum stat_group_t {
stat_database = 0,
stat_attachment = 1,
stat_transaction = 2,
stat_statement = 3,
stat_call = 4
};
enum InfoType
{
INFO_TYPE_CONNECTION_ID = 1,
INFO_TYPE_TRANSACTION_ID = 2,
INFO_TYPE_GDSCODE = 3,
INFO_TYPE_SQLCODE = 4,
INFO_TYPE_ROWS_AFFECTED = 5,
INFO_TYPE_TRIGGER_ACTION = 6,
INFO_TYPE_SQLSTATE = 7,
INFO_TYPE_EXCEPTION = 8,
INFO_TYPE_ERROR_MSG = 9,
MAX_INFO_TYPE
};
enum TriggerType {
PRE_STORE_TRIGGER = 1,
POST_STORE_TRIGGER = 2,
PRE_MODIFY_TRIGGER = 3,
POST_MODIFY_TRIGGER = 4,
PRE_ERASE_TRIGGER = 5,
POST_ERASE_TRIGGER = 6
};
enum TriggerAction {
// Order should be maintained because the numbers are stored in BLR
// and should be in sync with IExternalTrigger::ACTION_* .
TRIGGER_INSERT = 1,
TRIGGER_UPDATE = 2,
TRIGGER_DELETE = 3,
TRIGGER_CONNECT = 4,
TRIGGER_DISCONNECT = 5,
TRIGGER_TRANS_START = 6,
TRIGGER_TRANS_COMMIT = 7,
TRIGGER_TRANS_ROLLBACK = 8,
TRIGGER_DDL = 9
};
const unsigned TRIGGER_TYPE_SHIFT = 13;
const FB_UINT64 TRIGGER_TYPE_MASK = (QUADCONST(3) << TRIGGER_TYPE_SHIFT);
const FB_UINT64 TRIGGER_TYPE_DML = (QUADCONST(0) << TRIGGER_TYPE_SHIFT);
const FB_UINT64 TRIGGER_TYPE_DB = (QUADCONST(1) << TRIGGER_TYPE_SHIFT);
const FB_UINT64 TRIGGER_TYPE_DDL = (QUADCONST(2) << TRIGGER_TYPE_SHIFT);
const unsigned DB_TRIGGER_CONNECT = 0;
const unsigned DB_TRIGGER_DISCONNECT = 1;
const unsigned DB_TRIGGER_TRANS_START = 2;
const unsigned DB_TRIGGER_TRANS_COMMIT = 3;
const unsigned DB_TRIGGER_TRANS_ROLLBACK = 4;
const unsigned DB_TRIGGER_MAX = 5;
static const char* const DDL_TRIGGER_ACTION_NAMES[][2] =
{
{NULL, NULL},
{"CREATE", "TABLE"},
{"ALTER", "TABLE"},
{"DROP", "TABLE"},
{"CREATE", "PROCEDURE"},
{"ALTER", "PROCEDURE"},
{"DROP", "PROCEDURE"},
{"CREATE", "FUNCTION"},
{"ALTER", "FUNCTION"},
{"DROP", "FUNCTION"},
{"CREATE", "TRIGGER"},
{"ALTER", "TRIGGER"},
{"DROP", "TRIGGER"},
{"", ""}, {"", ""}, {"", ""}, // gap for TRIGGER_TYPE_MASK - 3 bits
{"CREATE", "EXCEPTION"},
{"ALTER", "EXCEPTION"},
{"DROP", "EXCEPTION"},
{"CREATE", "VIEW"},
{"ALTER", "VIEW"},
{"DROP", "VIEW"},
{"CREATE", "DOMAIN"},
{"ALTER", "DOMAIN"},
{"DROP", "DOMAIN"},
{"CREATE", "ROLE"},
{"ALTER", "ROLE"},
{"DROP", "ROLE"},
{"CREATE", "INDEX"},
{"ALTER", "INDEX"},
{"DROP", "INDEX"},
{"CREATE", "SEQUENCE"},
{"ALTER", "SEQUENCE"},
{"DROP", "SEQUENCE"},
{"CREATE", "USER"},
{"ALTER", "USER"},
{"DROP", "USER"},
{"CREATE", "COLLATION"},
{"DROP", "COLLATION"},
{"ALTER", "CHARACTER SET"},
{"CREATE", "PACKAGE"},
{"ALTER", "PACKAGE"},
{"DROP", "PACKAGE"},
{"CREATE", "PACKAGE BODY"},
{"DROP", "PACKAGE BODY"},
{"CREATE", "MAPPING"},
{"ALTER", "MAPPING"},
{"DROP", "MAPPING"}
};
const int DDL_TRIGGER_BEFORE = 0;
const int DDL_TRIGGER_AFTER = 1;
const FB_UINT64 DDL_TRIGGER_ANY = 0x7FFFFFFFFFFFFFFFULL & ~(FB_UINT64) TRIGGER_TYPE_MASK & ~1ULL;
const int DDL_TRIGGER_CREATE_TABLE = 1;
const int DDL_TRIGGER_ALTER_TABLE = 2;
const int DDL_TRIGGER_DROP_TABLE = 3;
const int DDL_TRIGGER_CREATE_PROCEDURE = 4;
const int DDL_TRIGGER_ALTER_PROCEDURE = 5;
const int DDL_TRIGGER_DROP_PROCEDURE = 6;
const int DDL_TRIGGER_CREATE_FUNCTION = 7;
const int DDL_TRIGGER_ALTER_FUNCTION = 8;
const int DDL_TRIGGER_DROP_FUNCTION = 9;
const int DDL_TRIGGER_CREATE_TRIGGER = 10;
const int DDL_TRIGGER_ALTER_TRIGGER = 11;
const int DDL_TRIGGER_DROP_TRIGGER = 12;
// gap for TRIGGER_TYPE_MASK - 3 bits
const int DDL_TRIGGER_CREATE_EXCEPTION = 16;
const int DDL_TRIGGER_ALTER_EXCEPTION = 17;
const int DDL_TRIGGER_DROP_EXCEPTION = 18;
const int DDL_TRIGGER_CREATE_VIEW = 19;
const int DDL_TRIGGER_ALTER_VIEW = 20;
const int DDL_TRIGGER_DROP_VIEW = 21;
const int DDL_TRIGGER_CREATE_DOMAIN = 22;
const int DDL_TRIGGER_ALTER_DOMAIN = 23;
const int DDL_TRIGGER_DROP_DOMAIN = 24;
const int DDL_TRIGGER_CREATE_ROLE = 25;
const int DDL_TRIGGER_ALTER_ROLE = 26;
const int DDL_TRIGGER_DROP_ROLE = 27;
const int DDL_TRIGGER_CREATE_INDEX = 28;
const int DDL_TRIGGER_ALTER_INDEX = 29;
const int DDL_TRIGGER_DROP_INDEX = 30;
const int DDL_TRIGGER_CREATE_SEQUENCE = 31;
const int DDL_TRIGGER_ALTER_SEQUENCE = 32;
const int DDL_TRIGGER_DROP_SEQUENCE = 33;
const int DDL_TRIGGER_CREATE_USER = 34;
const int DDL_TRIGGER_ALTER_USER = 35;
const int DDL_TRIGGER_DROP_USER = 36;
const int DDL_TRIGGER_CREATE_COLLATION = 37;
const int DDL_TRIGGER_DROP_COLLATION = 38;
const int DDL_TRIGGER_ALTER_CHARACTER_SET = 39;
const int DDL_TRIGGER_CREATE_PACKAGE = 40;
const int DDL_TRIGGER_ALTER_PACKAGE = 41;
const int DDL_TRIGGER_DROP_PACKAGE = 42;
const int DDL_TRIGGER_CREATE_PACKAGE_BODY = 43;
const int DDL_TRIGGER_DROP_PACKAGE_BODY = 44;
const int DDL_TRIGGER_CREATE_MAPPING = 45;
const int DDL_TRIGGER_ALTER_MAPPING = 46;
const int DDL_TRIGGER_DROP_MAPPING = 47;
// that's how database trigger action types are encoded
// (TRIGGER_TYPE_DB | type)
// that's how DDL trigger action types are encoded
// (TRIGGER_TYPE_DDL | DDL_TRIGGER_{AFTER | BEFORE} [ | DDL_TRIGGER_??? ...])
// switches for username and password used when an username and/or password
// is specified by the client application
#define USERNAME_SWITCH "USER"
#define PASSWORD_SWITCH "PASSWORD"
// The highest transaction number possible
const TraNumber MAX_TRA_NUMBER = 0x0000FFFFFFFFFFFF; // ~2.8 * 10^14
// Number of streams, conjuncts, indices that will be statically allocated
// in various arrays. Larger numbers will have to be allocated dynamically
// CVC: I think we need to have a special, higher value for streams.
const int OPT_STATIC_ITEMS = 64;
#define CURRENT_ENGINE "Engine13"
#define EMBEDDED_PROVIDERS "Providers=" CURRENT_ENGINE
const int WITH_GRANT_OPTION = 1;
const int WITH_ADMIN_OPTION = 2;
// Max length of the string returned by ERROR_TEXT context variable
const USHORT MAX_ERROR_MSG_LENGTH = 1024 * METADATA_BYTES_PER_CHAR; // 1024 UTF-8 characters
#endif // JRD_CONSTANTS_H