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 + -
显示快捷键?