dbtype.h
来自「db.* (pronounced dee-be star) is an adva」· C头文件 代码 · 共 672 行 · 第 1/2 页
H
672 行
/*************************************************************************** * * * db.* * * open source database kernel * * * * Copyright (c) 2000 Centura Software Corporation. All rights reserved. * * * * Use of this software, whether in source code format, or in executable, * * binary object code form, is governed by the CENTURA OPEN SOURCE LICENSE * * which is fully described in the LICENSE.TXT file, included within this * * distribution of source code files. * * * **************************************************************************/#ifndef DBTYPE_H#define DBTYPE_H/* If INTERNAL_H is defined, then this file is being included only for the struct definitions needed to use d_internals(). Therefore, much of the stuff in here is not needed and may even cause conflicts with other software packages. If this file is needed for all the other stuff as well as the struct definitions and "internal.h" is also needed, then this file must be #include-d BEFORE "internal.h" is #include-d.*//* --------------------------------------------------------------------------- Configure the runtime*/#define DBSTAT#ifdef DB_DEBUG#define DBERR_EX /* display file and line number for dberr */#define DB_TRACE /* enable runtime tracing */#endif/* ------------------------------------------------------------------------ */#define MAX_ALLOC ((unsigned long)USHRT_MAX) /* max allocation size */#define MAX_TABLE ((unsigned long)INT_MAX) /* max table entries */#ifndef INTERNAL_H#define PGHOLD 1#define NOPGHOLD 0#define PGFREE 1#define NOPGFREE 0#define KEYFIND 0#define KEYNEXT 1#define KEYPREV 2#define KEYFRST 3#define KEYLAST 4/* Constants used by d_open and d_iopen */#define FIRST_OPEN 0#define INCR_OPEN 1#endif /* INTERNAL_H *//* dictionary attribute flags */#define SORTFLD 0x0001 /* field is a set sort field */#define STRUCTFLD 0x0002 /* field is sub-field of struct */#define UNSIGNEDFLD 0x0004 /* field is unsigned */#define COMKEYED 0x0010 /* (record contains) or (field included in) compound key */#define TIMESTAMPED 0x0001 /* record/set is timestamped */#define STATIC 0x0002 /* file/record is static */#define TEMPORARY 0x0020 /* file is temporary (no lockmgr & or logging) */#define NEEDS_COMMIT 0x0001 /* this file has been written to during trx */#define TS_IS_CURRENT 0x0004 /* the timestamp for the file has already been updated */#define NOT_TTS_FILE 0x0008 /* this file is NEVER under TTS control */#define READ_LOCK 0x0100 /* file has been read locked by TTS */#define WRITE_LOCK 0x0200 /* file has been write locked by TTS */#define TTSCHECKED 0x0400 /* file has been checked for TTS */#define NO_LOCK 0xFCFF /* file has not been locked for TTS */#ifndef INTERNAL_H#ifndef TRUE#define FALSE (1==0)#define TRUE (! FALSE)#endif#define DBUSER_ALIVE_BYTE 1#define DBUSER_COMMIT_BYTE 2/* Number of elements in a vector */#define arraysize(v) (sizeof(v)/sizeof(*(v)))#define DBD_COMPAT_LEN 6#define INT_SIZE sizeof(int)#define SHORT_SIZE sizeof(short)#define LONG_SIZE sizeof(long)#define CHAR_SIZE sizeof(char)#define DB_ADDR_SIZE sizeof(DB_ADDR)#define PGHDRSIZE 4#define CTBNAME DB_TEXT("db.star.ctb")#define FLOAT_SIZE sizeof(float)#define DOUBLE_SIZE sizeof(double)#endif /* INTERNAL_H */#define DBA_NONE ((DB_ADDR) -1)#define DCH_NONE ((F_ADDR) -1)#define FILEMASK 0x00FFL#define FILESHIFT 24#define RECHDRSIZE (sizeof(short) + DB_ADDR_SIZE)#define ADDRMASK MAXRECORDS#define OPTKEYNDX 0x003F#define OPTKEY_LIMIT 63#define OPTKEYSHIFT 10#define OPTKEYMASK 0xFC00#define RLBMASK 0x4000#if defined(UNICODE)#define DBSTAR_UNICODE_FLAG 1#else#define DBSTAR_UNICODE_FLAG 0#endif/* creation timestamp in rec hdr */#define RECCRTIME (sizeof(short) + DB_ADDR_SIZE)/* update timestamp in rec hdr */#define RECUPTIME (RECCRTIME + sizeof(long))/* set pointer structure definition */typedef struct{ F_ADDR total; /* total number of members in set */ DB_ADDR first; /* database address of first member in set */ DB_ADDR last; /* database address of last member in set */ DB_ULONG timestamp; /* set update timestamp - if used */} SET_PTR;/* member pointer structure definition */typedef struct{ DB_ADDR owner; /* database address of owner record */ DB_ADDR prev; /* database address of previous member in set */ DB_ADDR next; /* database address of next member in set */} MEM_PTR;/* max size of set pointer *//* member count + prior + next + timestamp (opt) */#define SETPSIZE (sizeof(SET_PTR))#define SP_MEMBERS 0 /* Offset to total members in set ptr */#define SP_FIRST sizeof(long) /* Offset to first member ptr in set ptr */#define SP_LAST (SP_FIRST+DB_ADDR_SIZE) /* Offset to last member ptr in set ptr */#define SP_UTIME (SP_LAST+DB_ADDR_SIZE) /* Offset to timestamp in set ptr */#define MEMPSIZE (sizeof(MEM_PTR)) /* Size of member pointer = 3*DB_ADDR_SIZE */#define MP_OWNER 0 /* Offset to owner ptr in member ptr */#define MP_PREV (MP_OWNER+DB_ADDR_SIZE) /* Offset to previous member ptr in member ptr */#define MP_NEXT (MP_PREV+DB_ADDR_SIZE) /* Offset to next member ptr in member ptr *//* maximum length of a task->dbuserid (including null) */#define USERIDLEN 16/* maximum length of a database name (base file w/o path w/o extension) */#define DBNMLEN 32/* DB_PATHLEN = maxFullPath - maxFile + null = ((FILENMLEN-1) - (DBNMLEN-1) + 1)*/#define DB_PATHLEN (FILENMLEN - DBNMLEN - 1)/* LMC transport name length in TAF file */#define LMCTYPELEN 12#define NAMELEN 32 /* max record/set/field name + null */#define MAXKEYLEN 256 /* if changed, qdefns.h needs updating */#define MAXKEYSIZE (MAXKEYLEN * sizeof(DB_TCHAR))#ifndef INTERNAL_H#define DEFIXPAGES 5 /* default number of index cache pages */#define DEFDBPAGES 100 /* default number of database cache pages */#define MINIXPAGES 3 /* minimum number of index cache pages */#define MINDBPAGES 5 /* minimum number of database cache pages */#define LENVDBID 48#endif /* INTERNAL_H */#define MAXDIMS 3#define OPEN 'o'#define CLOSED 'c'#define DATA 'd'#define KEY 'k'#define DB_OVERFLOW 'o'/* virtual page table entry */typedef struct page_entry{ FILE_NO file; /* file table entry number (0..task->size_ft-1) */ F_ADDR pageno; /* database page number */ F_ADDR ovfl_addr; /* overflow file address of page */ struct page_entry *prev; /* prev hash page in bucket chain */ struct page_entry *next; /* next hash page bucket chain */ struct page_entry *p_pg; /* prev page for file */ struct page_entry *n_pg; /* next page for file */ short tag; /* page tag */ short recently_used; DB_BOOLEAN modified; /* TRUE if page has been modified */ short holdcnt; /* "hold-in-cache" counter */ short buff_size; /* size of page buffer */ char *buff; /* page buffer pointer */} PAGE_ENTRY;typedef struct page_entry *LOOKUP_ENTRY;#define V3_FILENMLEN 48typedef struct V300_FILE_ENTRY_S{ char v3_ft_name[V3_FILENMLEN]; /* name of file */ short v3_ft_desc; /* file descriptor */ char v3_ft_status; /* 'o'=opened, 'c'=closed */ char v3_ft_type; /* 'd'=data, 'k'=key, 'o'=overflow */ short v3_ft_slots; /* record slots per page */ short v3_ft_slsize; /* size of record slots in bytes */ short v3_ft_pgsize; /* size of page */ short v3_ft_flags; /* e.g. STATIC */} V300_FILE_ENTRY;typedef struct V301_FILE_ENTRY_S{ char v3_ft_name[V3_FILENMLEN]; /* name of file */ short v3_ft_desc; /* file descriptor */ char v3_ft_status; /* 'o'=opened, 'c'=closed */ char v3_ft_type; /* 'd'=data, 'k'=key, 'o'=overflow */ short v3_ft_slots; /* record slots per page */ short v3_ft_slsize; /* size of record slots in bytes */ short v3_ft_pgsize; /* size of page */ short v3_ft_flags; /* e.g. STATIC */ short v3_ft_pctincrease; /* % increase of each extension */ long v3_ft_initial; /* initial allocation in pages */ long v3_ft_next; /* initial extension in pages */} V301_FILE_ENTRY;typedef struct V500_FILE_ENTRY_S{ char v5_ft_name[FILENMLEN]; /* name of file */ long v5_ft_desc; /* file descriptor */ long v5_ft_index; /* see FILE_ENTRY */ char v5_ft_status; /* 'o'=opened, 'c'=closed */ char v5_ft_type; /* 'd'=data, 'k'=key, 'o'=overflow */ short v5_ft_slots; /* record slots per page */ short v5_ft_slsize; /* size of record slots in bytes */ short v5_ft_pgsize; /* size of page */ short v5_ft_flags; /* e.g. STATIC */ short v5_ft_pctincrease; /* % increase of each extension */ long v5_ft_initial; /* initial allocation in pages */ long v5_ft_next; /* initial extension in pages */ short v5_ft_recently_used;} V500_FILE_ENTRY;typedef struct U500_FILE_ENTRY_S{ wchar_t v5_ft_name[FILENMLEN]; /* name of file */ long v5_ft_desc; /* file descriptor */ long v5_ft_index; /* see FILE_ENTRY */ char v5_ft_status; /* 'o'=opened, 'c'=closed */ char v5_ft_type; /* 'd'=data, 'k'=key, 'o'=overflow */ short v5_ft_slots; /* record slots per page */ short v5_ft_slsize; /* size of record slots in bytes */ short v5_ft_pgsize; /* size of page */ short v5_ft_flags; /* e.g. STATIC */ short v5_ft_pctincrease; /* % increase of each extension */ long v5_ft_initial; /* initial allocation in pages */ long v5_ft_next; /* initial extension in pages */ short v5_ft_recently_used;} U500_FILE_ENTRY;typedef struct FILE_ENTRY_S{ DB_TCHAR ft_name[FILENMLEN]; /* name of file */ PSP_FH ft_desc; /* file descriptor */ long ft_index; /* Only used if SHARED_FILE_HANDLES is defined, on Win32 systems - index into File_desc_table (array of shared file descriptors). On ANSI I/O systems ft_desc is used, but Win32 native I/O file handles may have very large values */ char ft_status; /* 'o'=opened, 'c'=closed */ char ft_type; /* 'd'=data, 'k'=key, 'o'=overflow */ short ft_slots; /* record slots per page */ short ft_slsize; /* size of record slots in bytes */ short ft_pgsize; /* size of page */ short ft_flags; /* e.g. STATIC */ short ft_pctincrease; /* % increase of each extension */ long ft_initial; /* initial allocation in pages */ long ft_next; /* initial extension in pages */ int ft_lmtimestamp; /* file timestamp from lock mgr */ int ft_cachetimestamp; /* previous file timestamp from lock mgr */} FILE_ENTRY;typedef struct RECORD_ENTRY_S{ short rt_file; /* file table entry of file containing record */ short rt_len; /* total length of record */ short rt_data; /* offset to start of data in record */ short rt_fields; /* first field def in task->field_table */ short rt_fdtot; /* total number of fields in record */ short rt_flags;} RECORD_ENTRY;#define FIRST 'f'#define LAST 'l'#define NEXT 'n'#define ASCENDING 'a'#define DESCENDING 'd'#define NOORDER 'n'typedef struct SET_ENTRY_S{ short st_order; /* 'f'=first, 'l'=last, 'a'=ascending, 'd'=descending, 'n'=no order */ short st_own_rt; /* record table entry of owner */ short st_own_ptr; /* offset to set pointers in record */ short st_members; /* index of first member record in member table */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?