mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-27 18:03:04 +01:00
454 lines
13 KiB
C
454 lines
13 KiB
C
/*
|
|
* 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
|
|
|
|
const ULONG MAX_COLUMN_SIZE = 32767; // Bytes
|
|
const ULONG MAX_STR_SIZE = 65535; // Bytes
|
|
|
|
// Metadata constants
|
|
|
|
const unsigned METADATA_IDENTIFIER_CHAR_LEN = 31;
|
|
const unsigned METADATA_BYTES_PER_CHAR = 1; // UNICODE_FSS_HACK
|
|
|
|
// Misc constant values
|
|
|
|
// Characters; beware that USER_NAME_LEN = 133 in gsec.h
|
|
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 SYSDBA_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
|
|
// AB: If the maximum key-size will change, don't forget dyn.h and dba.epp
|
|
// which cannot use these defines.
|
|
const ULONG MAX_KEY = 4096; // Maximum page size possible divide by 4 (16384 / 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 int MAX_TABLE_VERSIONS = 255; // maybe this should be in ods.h.
|
|
|
|
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,
|
|
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 "Engine12"
|
|
|
|
#endif // JRD_CONSTANTS_H
|