#ifndef h_DBFILE #define h_DBFILE /****************************************************************************** * * Definition of UniVerse Database file descriptor * * Module %M% Version %I% Date %H% * * (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved * This is unpublished proprietary source code of Ardent Software Inc. * The copyright notice above does not evidence any actual or intented * publication of such source code. * ******************************************************************************* * * Maintenence log - insert most recent change descriptions at top * * Date.... GTAR# WHO Description......................................... * 07/29/99 25479 WSM Add SHzero_blink to SHdata structure. * 05/17/99 22647 LPC Fix elements in old style DBitem * 05/05/99 24483 RGA Change Dfile->size to UVINT. * 05/03/99 24742 GMH Change cast * 04/22/99 24480 GMH Change header NEW32/NEW64 * 04/13/99 24729 LPC Fix T30 macros. * 04/09/99 24480 GMH Shuffle items in new32 and new64 headers * 03/27/99 24729 LPC Add macros to access/set T30 values in fdesc * 03/23/99 24480 GMH Change header NEW32/NEW64 to insure 8byte boundaries * 03/20/99 24729 GMH Change casting of info30->filesp * 03/18/99 24480 RGA Change structure for proper alignment. * 03/18/99 24480 RGA Change definition of DBread_pads. * 03/01/99 24480 GMH Correct uvhdrnew32 structure * 01/31/99 24414 LPC Add Ihead to file descriptor. * 01/25/99 24374 RGA Infrastructure for large file lseek. * 11/11/98 23948 GMH add hashdata element to Dfile * 10/14/98 23801 SAP Change copyrights. * 10/05/98 22647 GMH Fix error * 09/30/98 23672 RGA Change DBITEM to DBITEMNEW for DBFILE,SHdata. * 09/28/98 22647 RGA Fix get_data to use * uchar. * 09/27/98 22647 RGA Fix get_data to use ** uchar. * 09/23/98 23672 GMH Move GET_FLINKptr, etc to DBinit as functions * 09/24/98 23672 JBG Add GET_OVXDATA, SET_OVXDATA * 09/22/98 22647 RGA Add 64-bit function prototypes. * 09/21/98 23672 GMH Add declarations * 09/21/98 22647 RGA Add SET_PFLINK,GET_PFLINK,etc... (64-bit) * 09/18/98 22647 GMH Move GET_T30INFO, SET_T30INFO into DBinit as functions * 09/18/98 23672 SAP Add SET_OVCOUNTxxx and GET_OVCOUNTxxx macros. * 09/17/98 23673 GMH Add support for new file header * 09/16/98 22647 RGA Add SET_DATA, GET_DATA (64-bit) * 09/15/98 22647 RGA Move SET_FLAG,GET_FLAG into DBinit as func.(64-bit) * 09/11/98 22647 RGA Add SET_FLAGWxxx,and GET_FLAGWxxx macros. * 09/11/98 22647 GMH Change define names * 09/10/98 22647 GMH Correct compilation errors * 09/09/98 22647 GMH Correct ovlink reference * 09/08/98 22647 GMH Change header items * 09/07/98 22647 GMH Fix compilation error * 09/04/98 22647 LPC Fix compilation errors * 09/03/98 22647 LPC Fix order of structures for DBitemnew * 09/01/98 22647 GMH Add addr_support to Dfile * 07/02/98 16692 GMH Rename transflg to deleted, clean up, add scanallgroup * 03/12/98 22658 JBG Add two fields to SHdata * 03/05/98 22658 JBG Optimistic SCAN bit definitions in DBFILE * 02/23/98 21285 CSM Add lockpromoted to DBFILE * 02/17/98 21285 JBG Add dmllock, lockru, lockacquired to DBFILE * 02/10/98 22395 JBG Add cnode, fields to DBFILE * 12/19/97 22373 CSM Add grpscansync bit to EXflags for select-update * 08/28/97 21285 JBG Added nowait & updatelock to EXflags * 06/27/97 20606 LAG Added failover to EXflags and OF_UDR_FAILOVER * 05/29/97 20606 LAG Added EXflags to Dfile structure for replication * 05/11/97 20380 DTM Added sortmap/sortcksum * 05/02/97 20453 CSM Add ptrigblk field to Dfile for triggers * 05/01/97 19940 GMH Remove WLATCH define * 04/14/97 20255 JBG Add defines OF_SICA_STRIPPED and OPEN_NOSICA * 04/03/97 20380 DTM Added sortmap/sortcksum * 01/24/97 19863 JBG Add name to jrnode * 01/22/97 19863 JBG Add to SQLPERM, define jrnode * 06/10/96 18597 GMM Added os_deleted flag to Dfile structure * 06/13/96 18582 CSM Add field for summary of cascades and triggers * 04/25/96 18321 MGM Add sqlidx struct and include it in sqlperm * 03/27/96 16692 GMH Added clrtime to Dfile structure. * 01/02/96 17832 HSB added sqlidxmap structure to Dfile. * 07/25/95 16956 CSM replace delsel field of select list with flags field * 07/05/95 16816 CSM add field to file desc for data of last key scanned * 06/22/95 15958 PVW Add case_HASHED macro * 06/01/95 16588 PVW Replace DBupdlock/DBslock with DBReadLock * 04/10/95 16244 GMM Changed ino_t to uv_ino_t * 05/05/95 15958 PVW Nested transactions * 03/29/95 16178 RM Added some more EXTERNs * 12/05/94 15741 EAP Added NLS key & data strings to SHdata * 11/08/94 15741 EAP Added NLS map info to Dfile structure * 08/26/94 14785 RM Added last_insert to Dfile structure for DBscan/select * 08/23/94 14242 SPR Added the macro MFSNOPRINT which represents the * fact that there is nothing left in the buffer to * print. * 08/19/94 14688 RM Added may_close flag to Dfile * 08/03/94 14371 RM Added latch to Dfile * 07/22/94 14447 TMC change uvnet NETsemop interface * 07/22/94 14385 CSM New flag to handle open of inconsistent files * 06/17/94 13825 MGM Modify sqlperm and Dfile for RI support. * 06/14/94 14006 RM Optimize SHkptr maintenance * 06/14/94 14133 CSM Add chkpoint, tlnum, inconsistent flag to file hdr * 05/26/94 14006 RM Optimize SHkeylst maintenance * 04/26/94 13806 MGM Add tabuniq_cnt and tabuniq to sqlperm * 04/20/94 13760 ENF Add database cursor pointer to DBFILE * 04/13/94 12559 JBG Added sqlperm flags SQL_IN_PERM, SQL_UP_PERM. * 04/07/94 12831 JBG Added correctly flag definations for DBopen dflg. * 04/06/94 12831 JBG Added flag viewperm for VIEW_PERMITTED * 01/26/94 12297 JSW Add items the SELFILE struct for selectinfo. * 03/15/94 12303 ALC Added flag to type 30 flags for PI/open over sized * records, they have slightly different structure * 03/01154 12297 JSW Add DBfinfo() and vocname field. * 03/01/94 13167 JWT Integrate Pyramid O_SYNC change * 02/16/94 12535 JBG DML, now remove SHscan_inserts. * 02/15/94 12535 JBG DML, define SHscan_inserts in SHdata, flags in DBFILE. * 02/10/94 12535 JBG DML, define WLATCH constant. * 02/04/94 12535 JBG DML, add field to DBFILE (latchaddr, used by DBwread() * 09/20/93 12291 PVW Added SHsavovf30 to SHdata structure * 09/15/93 8810 JWT New DBscanhash code for reliable dynamic select * 09/15/93 10922 FAI Changed inode to type ino_t in struct Dfile. * 08/17/93 12048 LPC Add open flag to PFLIST. * 08/10/93 11994 LPC Add partitioning algorithm source to file descriptor * 08/06/93 11979 LPC Add Partfile VOC name to PFblock * 08/06/93 11978 LPC Add partblock offset to database file descriptor * 08/02/93 11978 SHK Port to DEC AXP * 07/31/93 11923 LPC Add Distributed File structures * 02/05/93 10520 RM Changes to item padding * 12/14/92 10716 LPC Add part number and partitioning algorithm to DBFILE * 10/01/92 10315 WLC Add Sopen file stat to Dstats structure. * 08/26/92 10113 RM changed include uvsica.h to sicaperm.h * 07/29/92 10102 JKW Add integrity constraints * 07/29/92 6818 GMH Add baktime, bakcnt, and bakflgs. * 07/22/92 9926 LPC Add open Parts file flag to Distributed file block * 07/14/92 9702 RM add size field to Dfile structure * 07/13/92 9852 JKW add sica checking * 06/20/92 9738 LPC Add missing semi-colon from end of new structure. * 06/19/92 9737 LPC Add part number to Distributed file block * 06/16/92 7170 GMH Add scanactive to file structure * 06/12/92 9686 LPC Add Distributed File structure to database descriptor * 04/10/92 9381 LPC Add file revision level to database file descriptor * 03/26/92 8348 LPC Add mkdbstamp to database file descriptor * 03/23/92 8802 JKW Add readl functionality * 03/22/92 9296 DPB Added support for SQL SICA's * 11/08/91 7388 TMC Adding code to make sure Select files get "closed" * 10/23/91 8690 RM Added newstyle item padding * 10/22/91 8663 JWT added low-level hooks for DELETE-ELSE syntax * 07/28/90 7324 JWT fixed malloc documentation * 04/17/90 7025 KIS Add tlfilenum (int) for Trans Log file magic# * 09/28/89 6342 JWT Lessen file descriptor overhead * 06/20/89 6077 GPS Changed character variable name open to openc * 02/24/89 5803 PHH Improve the CORE verb * 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. * *****************************************************************************/ #define DBWULR 1200 #include "PROGRAM.h" #include "sicaperm.h" #include "qcursor.h" #include "NLS.h" /* bitmap of field UDRflags in file header */ #define OF_UDR_PUBLISHED 0x1 #define OF_UDR_SUBSCRIBE 0x2 #define OF_UDR_FAILOVER 0x4 struct EXflags { BITMAP sparebits:((8*sizeof(BITMAP))-24), scanallgroup:1, /* have DBscanhash scan entire group for uvbackup */ sgrpscansync:1, /* saved original grpscansync bit <<< 22658 vvv */ rescangroup:1, /* rescan current group - used with SCANgrpsync) */ dostronglatch:1,/* complete strong latch before return results */ doweaklatch:1, /* optimistic complete weak latch before show results */ upgradect:4, /* try upgrading latch every (2**upgradect)-1 requests */ listcontrol:1, /* current 'leftmost' SCAN file using 'weak latch' */ nowaithappen:1, /* NOWAIT error on this file <<< 22658 ^^^ */ rlpromoted:1, /* DBrsemp promoted existing RL lock <<< 21285 */ rdlkacquired:1, /* DBrsemp acquired record lock (not pre-existing) */ lockru:1, /* if dmllock set; 0== LOCK_RL, 1== LOCK_RU <<< 21285 */ dmllock:1, /* DML will do record locking in this file <<< 21285 */ cache:1, /* should reads be cached <<< 22395 */ cacheVOC:1, /* cache only if field 2 starts with K or V <<< 22395 */ grpscansync:1, /* if set then pause scan on group boundary */ nowait:1, /* use NOWAIT on LOCK requests <<< 21285 */ updatelock:1, /* have Sql SELECT use LOCK_RU <<< 21285 */ trblkintx:1, /* set if ptrigblk is in a TX */ published:1, /* set if file is marked as published */ subscribe:1, /* set if file is marked as subscribed */ failover:1; /* set if file is marked as failover */ }; typedef struct EXflags EXFLAGS; /* flag bits used in mode parameter of DBscanhash */ #define NOSKEY 0x080 /* don't maintain skeytmp */ /******************************************************************************* ** ** DBitem definition area ** NOTE: DBitem and it's elements describe the old style (pre-9.5.1.1C) ** record header and exist for backward compatibility. ** All new code should use DBitemnew and it's elements. *******************************************************************************/ struct DBover { DBDADDR32 ovlink; DBDADDR32 ovcount; uchar data[1]; }; union DBdata { uchar data[1]; struct DBover ovx; }; /* The follow definitions describe the contents of the last two byte of the item header in a data base file. The mapping is: bit: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 | | | | | | | | | | | | | | | | unused ------+ | | | | | | | | | | | | | | | free item -------+ | | | | | | | | | | | | | | sica block ----------+ | | | | | | | | | | | | | partfile block ----------+ | | | | | | | | | | | | | | | | | | | | | | | | newstyle padding ------------+ | | | | | | | | | | | padding in block flag -----------+ | | | | | | | | | | overflow data buffer ----------------+ | | | | | | | | | overflow buffer pointer present ---------+ | | | | | | | | | | | | | | | | unused --------------------------------------+ | | | | | | | deleted rec in group flag -----------------------+ | | | | | | PI/open oversize record -----------------------------+ | | | | | reserved for RESIZE -------------------------------------+ | | | | | | | | first block in SGB t30 file ---------------------------------+ | | | last block in PGB t30 file --------------------------------------+ | | incremental backup bit 1 --------------------------------------------+ | incremental backup bit 2 ------------------------------------------------+ */ struct DBflagbits { BITMAP sparebt1:((8*sizeof(BITMAP))-15), freeflag:1, /* set if item is a free block */ sicablok:1, /* set if item is a sica block */ partblok:1, /* set if item is a partfile block */ usenewpd:1, /* set if used newstyle item padding */ padinrec:1, /* set if item contains terminal pads */ ovflwbuf:1, /* set if block is an overflow buffer */ ovflwchn:1, /* set if block first of oversized item */ sparebt4:1, grdelrec:1, /* set if this is transparent readu item*/ piovsrec:1, /* record is PI/open format oversized */ grpresiz:1, /* set by concur resize when grp is done*/ t30first:1, /* first block in SGB of dynamic file */ t30lastb:1, /* last block in PGB of dynamic file */ bckupflg:2; /* set if item updated since last backup*/ }; union DBflags { struct DBflagbits b; DBFLAGW flagword; }; /* old style DBitem */ struct DBitem { DBDADDR32 flink; /* forward link to next item in group */ DBDADDR32 blink; /* backward link to previous item in group */ union DBflags f; union DBdata u; }; /* new style DBitem for supporting both 32- and 64- bit addressing */ struct DBover32 { DBDADDR32 ovlink; DBDADDR32 ovcount; uchar data[1]; }; struct DBover64 { DBDADDR ovlink; DBDADDR32 ovcount; uchar data[1]; }; union DBdata32 { uchar data[1]; struct DBover32 ovx; }; union DBdata64 { uchar data[1]; struct DBover64 ovx; }; /* ** Changes made here to this size ** of structure need to be reflected by ** Ihead32 of disk.h */ struct DB32 { DBDADDR32 flink; /* forward link to next item */ DBDADDR32 blink; /* backward link to previous item */ union DBflags f; union DBdata32 u; }; /* ** Changes made here to this size ** of structure need to be reflected by ** Ihead64 of disk.h */ struct DB64 { DBDADDR flink; /* forward link to next item */ DBDADDR blink; /* backward link to previous item */ union DBflags f; char pads[4]; /* needed for proper 8-byte alignment */ union DBdata64 u; }; union DBitemnew { struct DB32 b32; struct DB64 b64; }; #define DBITEMNEW union DBitemnew #define DBITEMNEW32 struct DB32 #define DBITEMNEW64 struct DB64 #define DBITEM struct DBitem #define IDXENT struct idxent #define IDXMAP struct idxmap #define REFENT struct refent struct idxmap { int colcnt; int colmap; }; #define DB_FLINK 1 #define DB_BLINK 2 #define DB_OVLINK 3 #define DB_OVCOUNT 4 /* Macros for extracting flink, blink and ovlink from DBitemnew structure */ #define GET_FLINKptr(fdesc, rblok, value) \ get_dbitemval(fdesc, rblok, DB_FLINK, value) #define GET_FLINKdot(fdesc, rblok, value) \ get_dbitemval(fdesc, &rblok, DB_FLINK, value) #define GET_BLINKptr(fdesc, rblok, value) \ get_dbitemval(fdesc, rblok, DB_BLINK, value) #define GET_BLINKdot(fdesc, rblok, value) \ get_dbitemval(fdesc, &rblok, DB_BLINK, value) #define GET_OVLINKptr(fdesc, rblok, value) \ get_dbitemval(fdesc, rblok, DB_OVLINK, value) #define GET_OVLINKdot(fdesc, rblok, value) \ get_dbitemval(fdesc, &rblok, DB_OVLINK, value) #define GET_OVCOUNTptr(fdesc, rblok, value) \ get_dbitemval(fdesc, rblok, DB_OVCOUNT, value) #define GET_OVCOUNTdot(fdesc, rblok, value) \ get_dbitemval(fdesc, &rblok, DB_OVCOUNT, value) /* Macros for updating flink, blink and ovlink in DBitemnew structure */ #define SET_FLINKptr(fdesc, rblok, value) \ set_dbitemval(fdesc, rblok, DB_FLINK, value) #define SET_FLINKdot(fdesc, rblok, value) \ set_dbitemval(fdesc, &rblok, DB_FLINK, value) #define SET_BLINKptr(fdesc, rblok, value) \ set_dbitemval(fdesc, rblok, DB_BLINK, value) #define SET_BLINKdot(fdesc, rblok, value) \ set_dbitemval(fdesc, &rblok, DB_BLINK, value) #define SET_OVLINKptr(fdesc, rblok, value) \ set_dbitemval(fdesc, rblok, DB_OVLINK, value) #define SET_OVLINKdot(fdesc, rblok, value) \ set_dbitemval(fdesc, &rblok, DB_OVLINK, value) #define SET_OVCOUNTptr(fdesc, rblok, value) \ set_dbitemval(fdesc, rblok, DB_OVCOUNT, value) #define SET_OVCOUNTdot(fdesc, rblok, value) \ set_dbitemval(fdesc, &rblok, DB_OVCOUNT, value) #define FL_FREEFLAG 1 #define FL_SICABLOK 2 #define FL_PARTBLOK 3 #define FL_USENEWPD 4 #define FL_PADINREC 5 #define FL_OVFLWBUF 6 #define FL_OVFLWCHN 7 #define FL_SPAREBT4 8 #define FL_GRDELREC 9 #define FL_PIOVSREC 10 #define FL_GRPRESIZ 11 #define FL_T30FIRST 12 #define FL_T30LASTB 13 #define FL_BCKUPFLG 14 #define SET_FLAGWptr(fdesc, dataptr, value) \ if (fdesc->addr_support != NEW64)\ dataptr->b32.f.flagword = value;\ else\ dataptr->b64.f.flagword = value; #define SET_FLAGWdot(fdesc, data, value) \ if (fdesc->addr_support != NEW64)\ data.b32.f.flagword = value;\ else\ data.b64.f.flagword = value; #define GET_FLAGWptr(fdesc, dataptr, value) \ if (fdesc->addr_support != NEW64)\ value = dataptr->b32.f.flagword;\ else\ value = dataptr->b64.f.flagword; #define GET_FLAGWdot(fdesc, data, value) \ if (fdesc->addr_support != NEW64)\ value = data.b32.f.flagword;\ else\ value = data.b64.f.flagword; EXTERN int get_flag( DBFILE *fdesc, DBITEMNEW *dataptr, int item, int *value); EXTERN int set_flag(DBFILE *fdesc, DBITEMNEW *dataptr, int item, int value); EXTERN uchar *get_data( DBFILE *fdesc, DBITEMNEW *dataptr, uchar **value); EXTERN int set_data( DBFILE *fdesc, DBITEMNEW *dataptr, uchar *value, DBDADDR len); EXTERN uchar *get_ovxdata( DBFILE *fdesc, DBITEMNEW *dataptr, uchar **value); EXTERN int set_ovxdata( DBFILE *fdesc, DBITEMNEW *dataptr, uchar *value, DBDADDR len); EXTERN DBDADDR get_dbitemval( DBFILE *fdesc, DBITEMNEW *dataptr, int item, DBDADDR *value); EXTERN int set_dbitemval( DBFILE *fdesc, DBITEMNEW *dataptr, int item, DBDADDR value); /* get_flag function defined in DBinit */ #define GET_FLAG(fdesc, dataptr, item, value) \ get_flag(fdesc,dataptr,item,value) /* set_flag function defined in DBinit */ #define SET_FLAG(fdesc, dataptr, item, value) \ set_flag(fdesc,dataptr,item,value) /* get_data function defined in DBinit */ #define GET_DATA(fdesc, dataptr, value) \ get_data(fdesc,dataptr,value) /* set_data function defined in DBinit */ #define SET_DATA(fdesc, dataptr, value, len) \ set_data(fdesc,dataptr,value,len) /* get_ovxdata function defined in DBinit */ #define GET_OVXDATA(fdesc, dataptr, value) \ get_ovxdata(fdesc,dataptr,value) /* set_ovxdata function defined in DBinit */ #define SET_OVXDATA(fdesc, dataptr, value, len) \ set_ovxdata(fdesc,dataptr,value,len) /******************************************************************************* ** ** T30info definition area ** *******************************************************************************/ struct T30infonew64 { DBDADDR curmod, basemod, largerec, nextsplit, filesp; DBDADDR32 Htype, splitload, mergeload, select_count; }; struct T30infonew32 { char padspace1[4]; DBDADDR32 curmod; char padspace2[4]; DBDADDR32 basemod; char padspace3[4]; DBDADDR32 largerec; char padspace4[4]; DBDADDR32 nextsplit; char padspace5[4]; DBDADDR32 filesp; DBDADDR32 Htype, splitload, mergeload, select_count; }; struct T30infoold32 { DBDADDR32 Htype, splitload, mergeload, curmod, basemod, largerec, filesp, select_count, nextsplit; }; union T30infonew { struct T30infoold32 old32; struct T30infonew32 new32; struct T30infonew64 new64; }; #define T30INFONEW union T30infonew #define T30INFOOLD32 struct T30infoold32 #define T30INFONEW32 struct T30infonew32 #define T30INFONEW64 struct T30infonew64 /* This is the current T30info structure */ struct T30info { int Htype, splitload, mergeload, curmod, basemod, largerec, filesp, select_count, nextsplit; }; /* Defines for set_t30info & get_t30info functions */ #define T30_HTYPE 1 #define T30_SPLIT 2 #define T30_MERGE 3 #define T30_CURMOD 4 #define T30_BASMOD 5 #define T30_LRGREC 6 #define T30_FILESP 7 #define T30_SELCNT 8 #define T30_NSPLIT 9 EXTERN DBDADDR get_t30info( DBFILE *fdesc, T30INFONEW *dataptr, int item, DBDADDR *value); EXTERN DBDADDR set_t30info( DBFILE *fdesc, T30INFONEW *dataptr, int item, DBDADDR value); /* get_t30info function defined in DBinit */ #define GET_T30HTYPE( fdesc, value ) \ get_t30info( fdesc, fdesc->info30new, T30_HTYPE, value ) #define GET_T30SPLIT( fdesc, value ) \ get_t30info( fdesc, fdesc->info30new, T30_SPLIT, value ) #define GET_T30MERGE( fdesc, value ) \ get_t30info( fdesc, fdesc->info30new, T30_MERGE, value ) #define GET_T30CURMOD( fdesc, value ) \ get_t30info( fdesc, fdesc->info30new, T30_CURMOD, value ) #define GET_T30BASMOD( fdesc, value ) \ get_t30info( fdesc, fdesc->info30new, T30_BASMOD, value ) #define GET_T30LRGREC( fdesc, value ) \ get_t30info( fdesc, fdesc->info30new, T30_LRGREC, value ) #define GET_T30FILESP( fdesc, value ) \ get_t30info( fdesc, fdesc->info30new, T30_FILESP, value ) #define GET_T30SELCNT( fdesc, value ) \ get_t30info( fdesc, fdesc->info30new, T30_SELCNT, value ) #define GET_T30NSPLIT( fdesc, value ) \ get_t30info( fdesc, fdesc->info30new, T30_NSPLIT, value ) #define GET_T30HTYPEdot( fdesc, value ) \ get_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_HTYPE, value ) #define GET_T30SPLITdot( fdesc, value ) \ get_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_SPLIT, value ) #define GET_T30MERGEdot( fdesc, value ) \ get_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_MERGE, value ) #define GET_T30CURMODdot( fdesc, value ) \ get_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_CURMOD, value ) #define GET_T30BASMODdot( fdesc, value ) \ get_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_BASMOD, value ) #define GET_T30LRGRECdot( fdesc, value ) \ get_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_LRGREC, value ) #define GET_T30FILESPdot( fdesc, value ) \ get_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_FILESP, value ) #define GET_T30SELCNTdot( fdesc, value ) \ get_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_SELCNT, value ) #define GET_T30NSPLITdot( fdesc, value ) \ get_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_NSPLIT, value ) /* set_t30info function defined in DBinit */ #define SET_T30HTYPE( fdesc, value ) \ set_t30info( fdesc, fdesc->info30new, T30_HTYPE, value ) #define SET_T30SPLIT( fdesc, value ) \ set_t30info( fdesc, fdesc->info30new, T30_SPLIT, value ) #define SET_T30MERGE( fdesc, value ) \ set_t30info( fdesc, fdesc->info30new, T30_MERGE, value ) #define SET_T30CURMOD( fdesc, value ) \ set_t30info( fdesc, fdesc->info30new, T30_CURMOD, value ) #define SET_T30BASMOD( fdesc, value ) \ set_t30info( fdesc, fdesc->info30new, T30_BASMOD, value ) #define SET_T30LRGREC( fdesc, value ) \ set_t30info( fdesc, fdesc->info30new, T30_LRGREC, value ) #define SET_T30FILESP( fdesc, value ) \ set_t30info( fdesc, fdesc->info30new, T30_FILESP, value ) #define SET_T30SELCNT( fdesc, value ) \ set_t30info( fdesc, fdesc->info30new, T30_SELCNT, value ) #define SET_T30NSPLIT( fdesc, value ) \ set_t30info( fdesc, fdesc->info30new, T30_NSPLIT, value ) #define SET_T30HTYPEdot( fdesc, value ) \ set_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_HTYPE, value ) #define SET_T30SPLITdot( fdesc, value ) \ set_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_SPLIT, value ) #define SET_T30MERGEdot( fdesc, value ) \ set_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_MERGE, value ) #define SET_T30CURMODdot( fdesc, value ) \ set_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_CURMOD, value ) #define SET_T30BASMODdot( fdesc, value ) \ set_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_BASMOD, value ) #define SET_T30LRGRECdot( fdesc, value ) \ set_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_LRGREC, value ) #define SET_T30FILESPdot( fdesc, value ) \ set_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_FILESP, value ) #define SET_T30SELCNTdot( fdesc, value ) \ set_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_SELCNT, value ) #define SET_T30NSPLITdot( fdesc, value ) \ set_t30info( &fdesc, (T30INFONEW *)fdesc.info30new, T30_NSPLIT, value ) /******************************************************************************* ** ** Partblock definition area ** *******************************************************************************/ struct PFblock { int part_number; char *vocname; DBFILE *PFdesc; }; struct T27info { int partfiles; int parts_open; PROGRAM *part_alg; struct PFblock (*DFblock)[]; }; struct PFitem { DBDADDR32 flink; int partnum; int flagword; }; struct PFitemnew64 { DBDADDR flink; int partnum; int flagword; }; typedef union PFitemnew { struct PFitem old; struct PFitemnew64 new; } PFITEMNEW; #define SET_PFLINKptr(fdesc, itemptr, value) \ if (fdesc->addr_support != NEW64)\ itemptr->old.flink = value;\ else\ itemptr->new.flink = value; #define SET_PFLINK(fdesc, itemptr, value) \ if (fdesc->addr_support != NEW64)\ itemptr.old.flink = value;\ else\ itemptr.new.flink = value; #define SET_PFPARTNUM(fdesc, itemptr, value) \ if (fdesc->addr_support != NEW64)\ itemptr.old.partnum = value;\ else\ itemptr.new.partnum = value; #define SET_PFLAG(fdesc, itemptr, value) \ if (fdesc->addr_support != NEW64)\ itemptr.old.flagword = value;\ else\ itemptr.new.flagword = value; /* get_pflink function defined in DBinit */ #define GET_PFLINK(fdesc, dataptr, value) \ get_pflink(fdesc,dataptr,value) /* get_pfpartnum function defined in DBinit */ #define GET_PFPARTNUM(fdesc, dataptr, value) \ get_pfpartnum(fdesc,dataptr,value) struct PFlist { int part_count; int active; int opened; int part_number; uchar *vocname; uchar *pathname; struct PFlist *nextlist; struct PFlist *prevlist; }; #define PFITEM struct PFitem #define PFLIST struct PFlist #define PFDESC(x) (*fdesc->info27.DFblock)[x].PFdesc /******************************************************************************* ** ** query definition area ** *******************************************************************************/ #define case_HASHED case 2: case 3: case 4: case 5: case 6:\ case 7: case 8: case 9: case 10: case 11:\ case 12: case 13: case 14: case 15: case 16:\ case 17: case 18 #define MAX_KEY_LENGTH 255 struct sqlidx { IDXENT *sqlkey; struct sqlidx *chain; }; /* vvv 22395 vvv; define caching structure */ struct cnode { STRING atid; STRING atrecord; struct cnode *chain; }; /* <<< 22395 ^^^ */ /* vvv JBG 19863 vvv */ struct jrnode { unsigned short *jrucols; STRING name; struct jrnode *chain; }; /* <<< 19863 ^^^ */ struct sqlperm { UVSICAREGION *sica; int size; UVSICA *uvsica; int dba; int perms; int uid; int no_integrity; int col_cnt; int *col_cons; int key_cnt; int *key_cons; int check_cnt; UVSICACHECK *check; PROGRAM **code; int tabuniq_cnt; UVSICAUNIQUEC *tabuniq; int refer_cnt; UVSICAREFER *refer; struct sqlidx *mpidx; struct jrnode *jru_cons; /* <<< JBG 19863 <<< */ }; typedef struct sqlperm SQLPERM; #define SQL_WR_PERM 0x1 #define SQL_RD_PERM 0x2 #define SQL_DL_PERM 0x4 #define SQL_IN_PERM 0x8 #define SQL_UP_PERM 0x10 #define SQL_PU_PERM 0x20 #define CON_SETFLAG 0x1 #define CON_NOTNULL 0x2 #define CON_NOTEMPTY 0x4 #define CON_TABLEUNIQUE 0x8 #define CON_SETUNIQUE 0x10 #define CON_CHECKBIT 0x20 #define CON_CONMASK 0x3f /* <<< JBG 19863 <<< */ #define CON_numericcol 0x100 /* <<< JBG 19863 <<< */ /* DBopen file flags */ #define OF_INCONSISTENT 0x1 /* bitmap of field TLflags in file header */ #define OF_SICA_STRIPPED 0x2 /* <<< 20255 <<< */ /***** Definition of flag bits used in fourth parameter to DBopen 0x1 rotating file pool 0x2 DBlackey 0x4 View_aware 0x8 special DBlackey to get sql perms 0x10 open inconsistent files 0x20 open files stripped of SICA by fnuxi -import 0x40 open files but not any associated indexes */ #define VIEW_AWARE 0x4 #define OPEN_INCONS 0x10 #define OPEN_NOSICA 0x20 /* <<< 20255 <<< */ #define OPEN_NOINDX 0x40 /* gtar 16692 */ /******************************************************************************* ** ** DBFILE definition area ** ** The first part of this structure MUST match the multi_file structure ** defined in MFILE.h !!!!!!!! *******************************************************************************/ struct Dfile { char openc, /* Must match multi-file struct */ mode; /* Must match multi-file struct */ int fp,filenum; /* Must match multi-file struct */ FILE *fptr; /* Must match multi-file struct */ char *fname; /* Must match multi-file struct */ short AC,netflg,netid,netfdesc;/* Must match multi-file struct */ long tell; /* Must match multi-file struct */ int mkdbstamp; /* Must match multi-file struct */ int sync_on; /* Must match multi-file struct */ int EBWSsave; /* Must match multi-file struct */ int lginter; /* Must match multi-file struct */ /* */ /* From here on is specific to Dfile struct */ /* */ MFILE *over30; int Part_number; int PB_offset; PROGRAM *Part_alg; uchar *Part_alg_source; struct T30info *info30; T30INFONEW *info30new; struct T27info info27; int Filerev; DBDADDR M; int N, Hk, Ihead, Bsize; DBDADDR C, curptr, rbase; DBITEMNEW *bufptr; short active, refs, flock, /* active file lock ? */ may_close; /* may close in a transaction */ uv_ino_t inode; uUVLONG dev; struct Dfile *RSZdesc; IDXENT *idxhead; int idxoff; IDXMAP sqlidxmap; int scanactive; int tlfilenum; struct Dstats *Sstat; SQLPERM *sqlperms; UVINT size; /* the size returned by stat() */ int clrtime; /* time of last clearfile */ int baktime; /* time of last UVbackup/UVrestore */ DBDADDR bakcnt; /* count from last UVbackup/UVrestore */ int bakflgs; /* set by UVbackup/used by UVrestore */ DBDADDR latchaddr; /* DML. address latched by DBwread */ short has_updates; /* TX has updates */ char *vocname; struct dbcursor *sqlcp; /* Pointer to a cursor if a VIEW */ REFENT *refhead; int latch; void *txscanc; /* Pointer to a TXSCANC */ char *mapname; /* NLSmapname from file header */ int checksum; /* NLSmapcsum from file header */ char *sortmap; /* NLS sorting local from file header */ int sortcksum; /* NLS sorting locale checksum from file header */ CMAP *ipmap; /* NLS Mapping table for READ */ CMAP *opmap; /* NLS Mapping table for WRITE */ void *pflist; /* Pointer to a TXPFLIST */ void *ptrigblk; /* ptr to TXTRLIST, enabled triggers */ STRING scandata; /* data of last key scanned */ int trigcasc; /* summary of triggers/cascades */ int os_deleted; /* Whether the file is deleted at the OS level */ EXFLAGS flags; /* extended flag bits */ int uniqueId; /* UDR unique file identifier */ struct cnode *cachelst; /* chain of cached records <<< 22395 */ short cachelmt; /* upper limit of number of records in cache <<< 22395 */ short cachesize; /* number of records in cache <<< 22395 */ int addr_support; /* type of bit support; see include/filehdr.h */ DBDADDR hashdata; /* return value of last hashxx() function */ }; typedef struct Dstats { DBDADDR32 Sread, Sreadu, Swrite, Swriteu, Sosrd, Soswr, Sofrd, Scomp, Swlckd, Suwait, Sruhit, Sclear, Sdelete, Sselect; time_t Ststamp; DBDADDR32 Sreads, Srshit, Sopen; /* Number of opens done on file */ } DSTATS, *PDSTATS; struct idxent { DBFILE idxdesc; struct idxent *chain; PROGRAM *idxicode; char *data; short datalen; char keylen,type,multi,built,nulls,enabled; char filename[10]; char keyname[256]; char *nlssortmap; int nlssortcsum; }; struct refent { DBFILE referdesc; struct refent *chain; char schematable[256]; int referenced; }; struct dbflist { DBFILE *filedesc; struct dbflist *next, *prev; }; struct selflist { SELFILE *filedesc; struct selflist *next, *prev; }; /******************************************************************************* ** ** File scanning definition area ** *******************************************************************************/ struct SHdata { DBFILE *SHfdesc; DBDADDR SHrptr, SHblink, SHkey, SHsavcurptr; DBITEMNEW *SHiptr; char *SHbuf, *SHovbuf; uchar *SHkptr; DBDADDR SHgroup, SHlast_group, SHcur_group, SHbase_mod, SHcur_base, SHnext_base; int SHkeychk, SHselect_pending, SHsavovf30, SHkeysize, SHkeyincr, SHkptrsize; STRING SHkeylst; STRING SH_NLSkey; STRING SH_NLSdata; DBDADDR prevSHgroup, prevSHcur_group; /* <<< 22658 */ int SHzero_blink; }; #define UVSEL_INACTIVE 0 #define UVSEL_WRITE 1 #define UVSEL_ACTIVE 2 #define UVSEL_READ 3 EXTERN int SELBUF_MAX; /* Define bit usage for flags field of Dselect structure */ #define UVSEL_RMODE 0x0001 /* must be same as _READ */ #define UVSEL_DELSEL 0x0002 /* Define flag bits for MFSflags */ #define MFSEOF 1 << 0 /* EOF seen on last disk read */ #define MFSDONE 1 << 1 /* All data has been read */ #define MFSMEM 1 << 2 /* Select list is in memory */ #define MFSINIT 1 << 3 /* Select list has been inited */ #define MFSNOPRINT 1 << 4 /* Nothing left to print */ struct Dselect { int status; int nxtgrp; /* next group to process */ int partfile; /* partfile of Distributed file */ char *name; /* temporary select list file name */ MFILE *fp; /* temporary select list file */ DBFILE *srcfile; /* file being SELECTed from BASIC */ STRING sel_buff; /* in-memory buffer area */ uchar *readptr; /* in-memory pointer for reading next id */ int flags; /* if bit 0 set, don't unlink temp sel list */ /* if bit 1 set, open sel file in rdwr mode */ int retain; /* 1 means do not close SELfile in readnext */ short nfiles,nfields; /* # files, fields for optimized lists */ STRING MFShdr; /* multi file select list header */ STRING MFSbuffer; /* binary data block */ uchar *MFSbptr; /* pointer into MFS buffer */ uint MFSflags; /* flags for MFS buffering */ struct SHdata SaveSHd; /* used for group at a time mode */ int items; /* selected items if active */ }; /******************************************************************************* ** ** File header structure definition area ** ** total size of this struct is 1024 ** This structure is used by the filehdr_get_all function for all files ** with revision stamps less then or equal to 0xacef010b (9.4.x) *******************************************************************************/ struct UVhdrold32 { DBDADDR32 revision, modulus, separation, filetype, freechain, idxoff; char resizepath[64], unused1[4]; T30INFOOLD32 info30; DSTATS Sstat; DBDADDR32 nlssortcsum; char nlssortmap[32], unused2[40]; DBDADDR32 tlfilnum, ptlfilnum, tlflags, chkpoint; char txwarmlsn[8]; DBDADDR32 nlsmapcsum; char nlsmapname[32], unused3[28]; DBDADDR32 clrfiltime, baktime, bakcnt, bakflgs, uvreadonly; char indexpath[128]; DBDADDR32 sicadata, mkdbstamp, partblock; char uvschema[20]; DBDADDR32 colcnt, colmap, udrflags, udrunique; char unused4[464]; }; /* total size of this struct is 1024 ** This structure is used for all files with revision 0xacef010c and higher */ struct UVhdrnew32 { DBDADDR32 revision, filetype; char padspace1[4]; DBDADDR32 modulus; DBDADDR32 separation, idxoff; char padspace2[4]; DBDADDR32 freechain; T30INFONEW32 info30; char padspace7[4]; DBDADDR32 sicadata; char padspace8[4]; DBDADDR32 partblock; char unused1[24]; DSTATS Sstat; DBDADDR32 nlssortcsum; char nlssortmap[32], unused2[40]; DBDADDR32 tlfilnum, ptlfilnum, tlflags, chkpoint; char txwarmlsn[8]; DBDADDR32 nlsmapcsum; char nlsmapname[32], unused3[28]; DBDADDR32 clrfiltime, baktime, bakflgs; char unused4[4]; DBDADDR32 bakcnt; char unused5[132]; DBDADDR32 mkdbstamp, uvreadonly; char unused6[20]; DBDADDR32 colcnt, colmap, udrflags, udrunique; char unused7[16]; char indexpath[256]; char uvschema[64]; char resizepath[128]; }; /* total size of this struct is 1024 ** This structure is used for all files with revision 0xacef020c and higher */ struct UVhdrnew64 { DBDADDR32 revision, filetype; DBDADDR modulus; DBDADDR32 separation, idxoff; DBDADDR freechain; T30INFONEW64 info30; DBDADDR sicadata, partblock; char unused1[24]; DSTATS Sstat; DBDADDR32 nlssortcsum; char nlssortmap[32], unused2[40]; DBDADDR32 tlfilnum, ptlfilnum, tlflags, chkpoint; char txwarmlsn[8]; DBDADDR32 nlsmapcsum; char nlsmapname[32], unused3[28]; DBDADDR32 clrfiltime, baktime, bakflgs; DBDADDR bakcnt; char unused4[132]; DBDADDR32 mkdbstamp, uvreadonly; char unused5[20]; DBDADDR32 colcnt, colmap, udrflags, udrunique; char unused6[16]; char indexpath[256]; char uvschema[64]; char resizepath[128]; }; /* ** This structure is used by the 'filehdr_get_all' and 'filehdr_set_all' functions */ typedef union UVhfileheader { struct UVhdrold32 old32; struct UVhdrnew32 new32; struct UVhdrnew64 new64; } UVFILEHDR; EXTERN void SELclose(), SELinit(), SELcpy(); EXTERN char *SELname(); EXTERN int SELmake(),SELadd(),SELactivate(); EXTERN int SELwrite(),SELmove(),SELtmp(); EXTERN DBDADDR (*phash[])(); EXTERN DBDADDR DBgetover(); EXTERN char *DBkeyfile(),*DBscandir(); EXTERN DBscan(),DBscant25(),DBscanhash(); EXTERN int DBclrfl(),DBdelete(),DBopen(),DBopenvoc(),DBrelease(); EXTERN int DBrblok(),DBreopen(),DBselect(),DBsplit30(),DBmerge30(); EXTERN int DBtestlock(),DBwblok(),DBwrite(),DBwsemu(),DBread_pads(); EXTERN DBDADDR DBhash(),T30hash(); EXTERN void DBclose(),DBcompact(),DBfree(),DBinit(),DBrelover(); EXTERN void DBfreebuf(),DBwsemv(),DBfsemv(); EXTERN unsign DBwsemp(),DBfsemp(),DBrsemp(),DBrsemv(); EXTERN STRING DBprobe(),DBReadLock(); EXTERN STRING trans(),readnext(); EXTERN int DBsopen(),DBswrite(),DBsweof(); EXTERN STRING DBsread(); EXTERN DBITEMNEW *DBgetbuf(); EXTERN DBITEMNEW *DBfind(),*DBalloc(); EXTERN STRING DBread(), DBwread(), DBfinfo(); #endif /* end of DBFILE.h */