tldm-universe/Ardent/UV/gcidir/include/DBFILE.h
2024-09-09 17:51:08 -04:00

1264 lines
39 KiB
C
Executable File

#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 */