home *** CD-ROM | disk | FTP | other *** search
- {*************************************************************************
- **
- ** Copyright 1982-1997 Pervasive Software Inc. All Rights Reserved
- **
- *************************************************************************}
- {************************************************************************
- SQLAPID.PAS
- This unit contains the Turbo Pascal function prototypes, function
- definitions, constant definitions, and datatype definitions for
- Scalable SQL v3.x, including the Historical APIs and the
- SQL-Level APIs.
-
- Two $defines control whether the code for the Historical APIs
- and/or the SQL-Level API's are generated in the SQLAPID.TPU file.
- If you do not need one of these sets of APIs, comment out the
- appropriate define.
-
- SQL_SQL_FUNCTIONS .......... SQL-Level APIs
- SQL_HISTORICAL_FUNCTIONS ... Historical APIs
-
- The 5.x verion of the Turbo Pascal IDE has problems loading
- large modules; you will need to use the command line compiler
- to create the SQLAPID.TPU. E.G., "TPC SQLAPID". You can use
- the 6.x IDE to compile the interface.
- ************************************************************************}
- UNIT sqlapid;
-
- {$DEFINE SQL_HISTORICAL_FUNCTIONS}
- {$DEFINE SQL_SQL_FUNCTIONS}
-
- {***********************************************************************
- PASCAL INTERFACE SECTION
- ************************************************************************}
- INTERFACE
- USES DOS;
-
- {***********************************************************************
- SESSION MANAGEMENT PRIMITIVES
- The following primitives are required by applications which
- want to use multiple SQL logins:
- xGetSessionID
- xPutSessionID
- ************************************************************************}
- FUNCTION xGetSessionID(
- VAR session : INTEGER ) : INTEGER;
-
- FUNCTION xPutSessionID(
- session : INTEGER ) : INTEGER;
-
- {***********************************************************************
- Named Database Functions
- SQLGetCountDatabaseNames
- SQLGetDatabaseNames
- SQLUnloadDBNames
- ************************************************************************}
- FUNCTION SQLGetCountDatabaseNames(
- VAR iCount : INTEGER ) : INTEGER;
-
- FUNCTION SQLGetDatabaseNames(
- VAR iBufLen : INTEGER;
- VAR bDataBuf : CHAR ) : INTEGER;
-
- FUNCTION SQLUnloadDBNAMES(
- iReserved : INTEGER ) : INTEGER;
-
- {************************************************************************
- Interface Module Internal Functions
- ************************************************************************}
- PROCEDURE callsql (VAR SQLPARMS);
- PROCEDURE PrimitiveCall;
- FUNCTION PrimitivesManagerLoaded: BOOLEAN;
-
- {$IFDEF SQL_SQL_FUNCTIONS}
- {************************************************************************
- Interface Module SQL-Level Internal Functions
- ************************************************************************}
- PROCEDURE SQLLevelCall;
- FUNCTION SQLManagerLoaded : BOOLEAN;
-
- {***********************************************************************
- SQL-LEVEL FUNCTIONS
- XQLCursor XQLFetch XQLSPUtility XQLVersion
- XQLCompile XQLFormat XQLStatus XQLConvert
- XQLDescribe XQLFree XQLStop XQLValidate
- XQLExec XQLLogin XQLSubst XQLMask
- XQLLogout
- ***********************************************************************}
- FUNCTION XQLCursor(
- VAR CURSOR : INTEGER ) : INTEGER;
-
- FUNCTION XQLCompile(
- CURSOR : INTEGER;
- VAR LEN : INTEGER;
- VAR STMNT ) : INTEGER;
-
- FUNCTION XQLDescribe(
- CURSOR : INTEGER;
- POS : INTEGER;
- VAR DTYPE : INTEGER;
- VAR SIZE : INTEGER;
- VAR DEC : INTEGER;
- VAR DSIZE : INTEGER;
- VAR NLENGTH : INTEGER;
- VAR NAME : CHAR ) : INTEGER;
-
- FUNCTION XQLExec(
- CURSOR : INTEGER ) : INTEGER;
-
- FUNCTION XQLFetch(
- CURSOR : INTEGER;
- OP : INTEGER;
- VAR DLEN : INTEGER;
- VAR BUF;
- VAR SEL : LONGINT;
- ASCII : INTEGER;
- SPACES : INTEGER ) : INTEGER;
-
- FUNCTION XQLFormat(
- CURSOR : INTEGER;
- POS : INTEGER;
- LENGTH : INTEGER;
- VAR MASKBUF ) : INTEGER;
-
- FUNCTION XQLFree(
- CURSOR : INTEGER ) : INTEGER;
-
- FUNCTION XQLLogin(
- VAR USERID;
- VAR PSWDNAME;
- VAR DD;
- VAR DATAPATH;
- VAR SRES;
- iFeaturesUsed : INTEGER ) : INTEGER;
-
- FUNCTION XQLLogout : INTEGER;
-
- FUNCTION XQLSPUtility(
- CURSOR : INTEGER;
- OPTION : INTEGER;
- VAR STMNTCNT : INTEGER;
- VAR STMNTEXEC : INTEGER;
- VAR BUFLEN : INTEGER;
- VAR STATBUF ) : INTEGER;
-
- FUNCTION XQLStatus(
- CURSOR : INTEGER;
- OPTION : INTEGER;
- VAR STATBUF ) : INTEGER;
-
- FUNCTION XQLStop : INTEGER;
-
- FUNCTION XQLSubst(
- CURSOR : INTEGER;
- SCOUNT : INTEGER;
- NAMELEN : INTEGER;
- VAR VARNAME;
- TEXTLEN : INTEGER;
- VAR VARTEXT ) : INTEGER;
-
- FUNCTION XQLVersion(
- VAR VBUFFER ) : INTEGER;
-
- FUNCTION XQLConvert(
- OPTION : INTEGER;
- DTYPE : INTEGER;
- SIZE : INTEGER;
- DEC : INTEGER;
- DSIZE : INTEGER;
- VAR VALUE;
- VAR RETVALUE;
- VAR MASK;
- JUST : INTEGER ) : INTEGER;
-
- FUNCTION XQLValidate(
- VAR COUNT : INTEGER;
- VAR FIELDNAME;
- BUFLEN : INTEGER;
- VAR DATA ) : INTEGER;
-
- FUNCTION XQLMask(
- OPTION : INTEGER;
- DTYPE : INTEGER;
- SIZE : INTEGER;
- DEC : INTEGER;
- VAR MLEN : INTEGER;
- VAR MASK ) : INTEGER;
-
- {$ENDIF} {SQL-Level APIs}
-
- {$IFDEF SQL_HISTORICAL_FUNCTIONS}
- {***********************************************************************
- HISTORICAL RELATIONAL PRIMITIVES
- The following functions will be phased out over time. They
- are included here to support existing applications. New applications
- should not use these functions.
-
- xCompute xOrder xDD xAccess
- xDescribe xRemall xDDAttr xPassword
- xMovefld xRemove xDDModify xSecurity
- xFetch xReset xDDCreate xUser
- xField xRestrict xDDDrop xChar
- xFree xStop xDDField xVersion
- xInsert xTrans xDDFile xStatus
- xJoin xStore xDDIndex xConvert
- xLogin xRecall xDDPath xValidate
- xLogout xUpdate xDDView xMask
- xNew xUpdall
- ***********************************************************************}
- FUNCTION xCompute(
- VHANDLE : INTEGER;
- VAR FNAME;
- DATA_TYPE : INTEGER;
- DATA_SIZE : INTEGER;
- DEC : INTEGER;
- VAR ELEN : INTEGER;
- VAR EBUF ) : INTEGER;
-
- FUNCTION xDescribe(
- VHANDLE : INTEGER;
- SUBF : INTEGER;
- VAR DLEN : INTEGER;
- POS : INTEGER;
- VAR CNT : INTEGER;
- VAR BUF ) : INTEGER;
-
- FUNCTION xMovefld(
- VHANDLE : INTEGER;
- FPOS : INTEGER;
- TPOS : INTEGER ) : INTEGER;
-
- FUNCTION xFetch(
- VHANDLE : INTEGER;
- VAR DLEN : INTEGER;
- FETCH_OP: INTEGER;
- VAR SELCNT : LONGINT;
- VAR REJCNT : LONGINT;
- VAR BUF ) : INTEGER;
-
- FUNCTION xField(
- VHANDLE : INTEGER;
- SUBF : INTEGER;
- POS : INTEGER;
- VAR CNT : INTEGER;
- VAR BUF ) : INTEGER;
-
- FUNCTION xFree(
- VHANDLE : INTEGER) : INTEGER;
-
- FUNCTION xInsert(
- VHANDLE : INTEGER;
- VAR COUNT : INTEGER;
- VAR FILES;
- VAR EDITCNT : LONGINT;
- VAR BUFFER ) : INTEGER;
-
- FUNCTION xJoin(
- VHANDLE : INTEGER;
- VAR NEWFILE;
- VAR OWNERNAME;
- JTYPE : INTEGER;
- VCOUNT : INTEGER;
- VAR VNAMES;
- NCOUNT : INTEGER;
- VAR NNAMES ) : INTEGER;
-
- FUNCTION xLogin(
- VAR USERID;
- VAR PASSWORD;
- VAR DPATH;
- VAR FPATH;
- VAR SRES;
- iFeaturesUsed : INTEGER ) : INTEGER;
-
- FUNCTION xLogout : INTEGER;
-
- FUNCTION xNew(
- VAR VHANDLE : INTEGER;
- VAR FNAME;
- VAR OWNERNAME;
- MODE : INTEGER ) : INTEGER;
-
- FUNCTION xOrder(
- VHANDLE : INTEGER;
- CNT : INTEGER;
- VAR BUF ) : INTEGER;
-
- FUNCTION xRemall(
- VHANDLE : INTEGER;
- VAR COUNT : INTEGER;
- VAR FILES;
- ROP : INTEGER;
- VAR SELCNT : LONGINT;
- REJCNT : LONGINT ) : INTEGER;
-
- FUNCTION xRemove(
- VHANDLE : INTEGER;
- VAR COUNT : INTEGER;
- VAR FILES;
- VAR EDITCNT : LONGINT ) : INTEGER;
-
- FUNCTION xReset(
- VAR SRESERVED ) : INTEGER;
-
- FUNCTION xRestrict(
- VHANDLE : INTEGER;
- NEW_EXP : INTEGER;
- VAR ELEN : INTEGER;
- VAR EBUF ) : INTEGER;
-
- FUNCTION xStop : INTEGER;
-
- FUNCTION xTrans(
- OPERATION : INTEGER ) : INTEGER;
-
- FUNCTION xStore(
- VHANDLE : INTEGER;
- VAR VNAME;
- BLEN : INTEGER;
- VAR VBUF ) : INTEGER;
-
- FUNCTION xRecall(
- VAR VHANDLE : INTEGER;
- VAR VNAME;
- ONUM : INTEGER;
- VAR OLST;
- MODE : INTEGER;
- VAR BLEN : INTEGER;
- VAR VBUF ) : INTEGER;
-
- FUNCTION xUpdate(
- VHANDLE : INTEGER;
- VAR COUNT : INTEGER;
- VAR FILES;
- VAR EDITCNT : LONGINT;
- VAR BUFFER ) : INTEGER;
-
- FUNCTION xUpdall(
- VHANDLE : INTEGER;
- VAR UPDCOUNT : INTEGER;
- VAR FILES;
- UOP : INTEGER;
- VAR SELCNT : LONGINT;
- VAR REJCNT : LONGINT;
- COLCNT : INTEGER;
- VAR RESULT;
- VAR COMPARE ) : INTEGER;
-
- FUNCTION xDD(
- VAR DIRPATH;
- FNCTION : INTEGER ) : INTEGER;
-
- FUNCTION xDDAttr(
- OPTION : INTEGER;
- VAR FLDNAME;
- ATTRIB : INTEGER;
- VAR BSIZE : INTEGER;
- VAR ABUF ) : INTEGER;
-
- FUNCTION xDDModify(
- OPTION : INTEGER;
- VAR FNAME;
- CREATE_FILE : INTEGER;
- VAR PATH;
- VAR OWNERNAME;
- OACC : INTEGER;
- FLDCOUNT : INTEGER;
- VAR FLDLIST;
- KEYCOUNT : INTEGER;
- VAR KLIST ) : INTEGER;
-
- FUNCTION xDDCreate(
- OPTION : INTEGER;
- VAR FNAME;
- CREATE_FILE : INTEGER;
- VAR PATH;
- VAR OWNERNAME;
- OACC : INTEGER;
- FLDCOUNT : INTEGER;
- VAR FLDLIST;
- KEYCOUNT : INTEGER;
- VAR KLIST;
- BLEN : INTEGER;
- VAR CRPARMS ) : INTEGER;
-
- FUNCTION xDDDrop(
- VAR FILENAME;
- FILETYPE : INTEGER;
- DELETEPATH : INTEGER ) : INTEGER;
-
- FUNCTION xDDField(
- OPTION : INTEGER;
- VAR FCOUNT : INTEGER;
- VAR FBUF;
- VAR BLEN : INTEGER;
- VAR OBUF ) : INTEGER;
-
- FUNCTION xDDFile(
- OPTION : INTEGER;
- VAR FCOUNT : INTEGER;
- VAR FBUF;
- VAR BLEN : INTEGER;
- VAR OBUF ) : INTEGER;
-
- FUNCTION xDDIndex(
- OPTION : INTEGER;
- VAR FCOUNT : INTEGER;
- VAR FBUF;
- VAR BLEN : INTEGER;
- VAR OBUF ) : INTEGER;
-
- FUNCTION xDDPath(
- DIRTYPE : INTEGER;
- VAR PATHNAME ) : INTEGER;
-
- FUNCTION xDDView(
- VAR FCOUNT : INTEGER;
- VAR VNAME;
- VAR BLEN : INTEGER;
- VAR OBUF ) : INTEGER;
-
- FUNCTION xAccess(
- VAR MASTERPSWD;
- VAR UNAME;
- OPTION : INTEGER;
- ARIGHTS : INTEGER;
- VAR FNAME;
- VAR FCOUNT : INTEGER;
- VAR FIELDNAME;
- VAR BLEN : INTEGER;
- VAR OBUF ) : INTEGER;
-
- FUNCTION xPassword(
- VAR UNAME;
- VAR PASSWORD ) : INTEGER;
-
- FUNCTION xSecurity(
- VAR MPSWD;
- FLAG : INTEGER ) : INTEGER;
-
- FUNCTION xUser(
- VAR MASTERPSWD;
- OPTION : INTEGER;
- VAR UNAME;
- VAR PASSWORD;
- UGRIGHTS : INTEGER;
- VAR FCOUNT : INTEGER;
- VAR BLEN : INTEGER;
- VAR UBUF ) : INTEGER;
-
- FUNCTION xChar(
- CHARFCN : INTEGER;
- CHARTYPE : INTEGER;
- VAR VALUE : CHAR ) : INTEGER;
-
- FUNCTION xVersion(
- VAR BUFFER ) : INTEGER;
-
- FUNCTION xStatus(
- VHANDLE : INTEGER;
- SUBFUNC : INTEGER;
- VAR LEN : INTEGER;
- VAR STATBUF ) : INTEGER;
-
- FUNCTION xConvert(
- OPTION : INTEGER;
- DTYPE : INTEGER;
- SIZE : INTEGER;
- DEC : INTEGER;
- DSIZE : INTEGER;
- VAR VALUE;
- VAR RETVALUE;
- VAR MASK;
- JUST : INTEGER ) : INTEGER;
-
- FUNCTION xValidate(
- VAR COUNT : INTEGER;
- VAR FIELDNAME;
- BUFLEN : INTEGER;
- VAR DATA ) : INTEGER;
-
- FUNCTION xMask(
- OPTION : INTEGER;
- DTYPE : INTEGER;
- SIZE : INTEGER;
- DEC : INTEGER;
- VAR MLEN : INTEGER;
- VAR MASK ) : INTEGER;
-
- {$ENDIF} {Historical APIs}
-
-
- {************************************************************************
- CONSTANTS
- ************************************************************************}
- CONST
- {************************************************************************
- Miscellaneous Constants
- ************************************************************************}
- SessID : INTEGER = -1; { session identifier for Scalable SQL }
- VSet : BOOLEAN = false; { flag set to true if checked version }
-
- {************************************************************************
- Error codes
- ************************************************************************}
- PRIMITIVES_NOT_LOADED_ERR = 200; { Relational Primitives Manager not loaded }
- SQL_MANAGER_NOT_LOADED_ERR = 802; { SQL Manager program not started }
- SQL_INT = $7B; { Scalable SQL interrupt vector }
- SQL_VECTOR = $00BC; { offset for interrupt }
- SQL_OFFSET = $0033; { Scalable SQL offset within segment }
- InvSQLLevelFcn = 503;
- InvPrimitiveFcn = 201;
- NOT_LOGGED = 287;
- InvFcn = -1;
-
- {$IFDEF SQL_HISTORICAL_FUNCTIONS}
- {************************************************************************
- Historical Relational Primitives Function Numbers
- ************************************************************************}
-
- tLogInFcn = 0;
- tLogOutFcn = 1;
- tNewFcn = 2;
- tFreeFcn = 3;
- tMoveFldFcn = 4;
- tFieldFcn = 5;
- tDescribeFcn = 6;
- tFetchFcn = 7;
- tComputeFcn = 8;
- tOrderFcn = 9;
- tRestrictFcn = 10;
- tJoinFcn = 11;
- tInsertFcn = 12;
- tUpdateFcn = 13;
- tUpdallFcn = 14;
- tRemoveFcn = 15;
- tRemallFcn = 16;
- tResetFcn = 17;
- tTrans = 18;
- tStatFcn = 19;
- tDDCreFcn = 20;
- tStoreFcn = 21;
- tRecallFcn = 22;
- tStopFcn = 23;
- tDDFileFcn = 24;
- tDDFieldFcn = 25;
- tDDIndexFcn = 26;
- tDDModFcn = 27;
- tDDViewFcn = 28;
- tDDDrpFcn = 29;
- tDDPathFcn = 30;
- tDDAttrFcn = 31;
- tDDFcn = 32;
- tSecurFcn = 33;
- tUserFcn = 34;
- tAccessFcn = 35;
- tPswdFcn = 36;
- tCharFcn = 37;
- tVersionFcn = 38;
- tConvertFcn = 39;
- tValidFcn = 40;
- tMaskFcn = 41;
- {$ENDIF} {Historical Relational Primitive APIs}
-
- {$IFDEF SQL_SQL_FUNCTIONS}
- {************************************************************************
- SQL-Level Function Numbers
- ************************************************************************}
- lLogInFcn = 0;
- lLogOutFcn = 1;
- lCursorFcn = 2;
- lCompFcn = 3;
- lFormatFcn = 4;
- lFetchFcn = 5;
- lDescribeFcn = 6;
- lSubstFcn = 7;
- lExecFcn = 8;
- lFreeFcn = 9;
- lStatFcn = 10;
- lStopFcn = 11;
- lVersFcn = 12;
- lConvFcn = 13;
- lValFcn = 14;
- lMaskFcn = 15;
- lSPUtilFcn = 16;
- {$ENDIF} {SQL-Level Function numbers}
-
-
- {************************************************************************
- DATA TYPES
- ************************************************************************}
- TYPE
- {************************************************************************
- Miscellaneous Data Types
- ************************************************************************}
- REGISTERS = RECORD
- case INTEGER of
- 1: (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags : INTEGER);
- 2: (AL,AH,BL,BH,CL,CH,DL,DH : BYTE);
- END;
-
- ADDR = RECORD
- OffSet, Seg : WORD;
- END;
-
- {***************************************************************************
- Named Database Structure Definitions
- ***************************************************************************}
- DBNGETCNT = RECORD
- XQL_ID : ARRAY[0..3] OF CHAR;
- fcn : WORD;
- cursorid : WORD;
- stat : INTEGER;
- sessionid : INTEGER;
- count : INTEGER;
- END;
-
- DBNGETNAME = RECORD
- XQL_ID : ARRAY[0..3] OF CHAR;
- fcn : WORD;
- cursorid : WORD;
- stat : INTEGER;
- sessionid : INTEGER;
- bufLen : INTEGER;
- buffer : ADDR;
- END;
-
- DBNUNLOAD = RECORD
- XQL_ID : ARRAY[0..3] OF CHAR;
- fcn : WORD;
- cursorid : WORD;
- stat : INTEGER;
- sessionid : INTEGER;
- reserved : INTEGER;
- END;
-
- { Protected Mode switch parameter block }
- pmswParmBlock = RECORD
- sign : ARRAY[0..3] OF CHAR;
- flags : LONGINT;
- func : LONGINT;
- stat : LONGINT;
- len : LONGINT;
- data : ADDR;
- END;
-
-
- {$IFDEF SQL_HISTORICAL_FUNCTIONS }
- {************************************************************************
- Historical Relational Primitive Data Types
- ************************************************************************}
- RPFUNC = (RP_LOGIN, RP_NEW, RP_COMPUTE, RP_DDMOD,
- RP_DESCRIBE, RP_EDIT, RP_FETCH, RP_FIELD,
- RP_JOIN, RP_ORDER, RP_MOVEFLD, RP_REMALL,
- RP_RESTRICT, RP_RESET, RP_STORE, RP_RECALL,
- RP_UPDALL, RP_TRANS, RP_DD, RP_DDATTR,
- RP_DDCRE, RP_DDFCN, RP_DDDROP, RP_DDPATH,
- RP_DDVIEW, RP_SECURE, RP_USER, RP_ACCESS,
- RP_PASSWORD, RP_CHAR, RP_VERSION, RP_CONVERT,
- RP_MASK, RP_VALIDATE, RP_STATUS, RP_LOAD);
-
-
- RP_TCOMPUTE = RECORD { xCompute }
- fldname : ADDR;
- fldtype : INTEGER;
- fldsize : INTEGER;
- flddec : INTEGER;
- explen : INTEGER;
- expbuf : ADDR;
- END;
-
- RP_TDESCRIBE = RECORD { xDescribe }
- option : INTEGER;
- desclen : INTEGER;
- position : INTEGER;
- count : INTEGER;
- desclist : ADDR;
- END;
-
- RP_TNEW = RECORD { xNew }
- filename : ADDR;
- owner : ADDR;
- openmode : INTEGER;
- END;
-
- RP_TFIELD = RECORD { xField }
- option : INTEGER;
- position : INTEGER;
- count : INTEGER;
- fldlist : ADDR;
- END;
-
- RP_TMOVEFLD = RECORD { xMovefld }
- frompos : INTEGER;
- topos : INTEGER;
- END;
- { xDelete }
- { xInsert }
- RP_TEDIT = RECORD { xUpdate }
- filecount : INTEGER;
- filelist : ADDR;
- cnt : LONGINT;
- buf : ADDR;
- END;
-
- RP_TFETCH = RECORD { xFetch }
- datalen : INTEGER;
- op : INTEGER;
- select : LONGINT;
- reject : LONGINT;
- databuf : ADDR;
- END;
-
- RP_TJOIN = RECORD { xJoin }
- filename : ADDR;
- owner : ADDR;
- joinType : INTEGER;
- pCount : INTEGER;
- pNames : ADDR;
- sCount : INTEGER;
- sNames : ADDR;
- END;
-
- RP_TLOGIN = RECORD { xLogin }
- username : ADDR;
- pswd : ADDR;
- dictionary : ADDR;
- filepath : ADDR;
- sreserved : ADDR;
- iFeaturesUsedx : INTEGER;
- END;
-
- RP_TORDER = RECORD { xOrder }
- count : INTEGER;
- fldlist : ADDR;
- END;
-
- RP_TREMALL = RECORD { xRemall }
- filecount : INTEGER;
- filelist : ADDR;
- op : INTEGER;
- select : LONGINT;
- reject : LONGINT;
- END;
-
- RP_TRESTRICT = RECORD { xRestrict }
- newexp : INTEGER;{ new | extended restriction }
- explen : INTEGER;
- expbuf : ADDR;
- END;
-
- RP_TSTORE = RECORD { xStore }
- StoreName : ADDR;
- BufLen : INTEGER;
- Buf : ADDR;
- END;
-
- RP_TRECALL = RECORD { xRecall }
- RecallName : ADDR;
- ownernum : INTEGER;
- ownerlst : ADDR;
- openmode : INTEGER;
- buflen : INTEGER;
- buf : ADDR;
- END;
-
- RP_TRESET = RECORD { xReset }
- sreserved : ADDR;
- END;
-
- RP_TUPDALL = RECORD { xUpdall }
- filecount : INTEGER;
- filelist : ADDR;
- op : INTEGER;
- select : LONGINT;
- reject : LONGINT;
- count : INTEGER;
- res : ADDR;
- comp : ADDR;
- END;
- RP_TTRANS = RECORD { xTrans }
- option : INTEGER;
- END;
-
- { ************** Dictionary Primitives ***************** }
-
- RP_TDD = RECORD { xDD }
- dirpath : ADDR;
- fnction : INTEGER;
- END;
-
- RP_TDDATTR = RECORD { xDDAttr }
- subfunct : INTEGER;
- fieldname : ADDR; { field name }
- attr : INTEGER;
- bufsize : INTEGER;
- attrbuf : ADDR; { attributes buffer }
- END;
- RP_TDDCRE = RECORD { xDDModify }
- subfunct : INTEGER;
- filename : ADDR;
- create : INTEGER;
- pathname : ADDR;
- owner : ADDR;
- oaccess : INTEGER; { owner access restrict }
- fcount : INTEGER;
- fieldlist : ADDR;
- kcount : INTEGER;
- keylist : ADDR;
- buflen : INTEGER;
- creparms : ADDR;
- END;
-
- RP_TDDMOD = RECORD { xDDModify }
- subfunct : INTEGER;
- filename : ADDR;
- create : INTEGER;
- pathname : ADDR;
- owner : ADDR;
- oaccess : INTEGER; { owner access restrict }
- fcount : INTEGER;
- fieldlist : ADDR;
- kcount : INTEGER;
- keylist : ADDR;
- END;
-
- RP_TDDDROP = RECORD { xDDDrop }
- filename : ADDR;
- filetype : INTEGER;
- deletepath : INTEGER;
- END;
-
- RP_TDDFCN = RECORD { xDDField/xDDFile/xDDIndex }
- rtype : INTEGER;
- count : INTEGER;
- namebuf : ADDR;
- buflen : INTEGER;
- outbuf : ADDR;
- END;
-
- RP_TDDPATH = RECORD { xDDPath }
- dirtype : INTEGER;
- pathname : ADDR;
- END;
-
- RP_TDDVIEW = RECORD { xDDView }
- count : INTEGER;
- viewname : ADDR;
- buflen : INTEGER;
- outbuf : ADDR;
- END;
-
- { ************** Security Primitives ***************** }
-
- RP_TSECURE = RECORD { xSecurity }
- mpswd : ADDR; { master password }
- securityflag : INTEGER;
- END;
-
- RP_TUSER = RECORD { xUser }
- mpswd : ADDR;
- subfcn : INTEGER; { add, modify, remove }
- username : ADDR;
- pswd : ADDR;
- grights : INTEGER; { global rights }
- count : INTEGER;
- buflen : INTEGER;
- userbuf : ADDR;
- END;
-
- RP_TACCESS = RECORD { xAccess }
- mpswd : ADDR;
- username : ADDR;
- subfcn : INTEGER; { grant, deny, return }
- rights : INTEGER;
- filename : ADDR;
- count : INTEGER; { field list count }
- name : ADDR; { field list names }
- buflen : INTEGER; { max buffer length }
- outbuf : ADDR; { output buffer }
- END;
-
- RP_TPASSWORD = RECORD { xPassword }
- user : ADDR; { user name }
- pswd : ADDR; { password }
- END;
-
-
- { ************** Miscellaneous Primitives ***************** }
-
- RP_TCHAR = RECORD { xChar }
- charFcn : INTEGER;
- charType : INTEGER;
- charValue : INTEGER;
- END;
-
- RP_TVERSION = RECORD { xVersion }
- buffer : ADDR;
- END;
-
- RP_TCONVERT = RECORD { xConvert }
- convFcn : INTEGER;
- convType : INTEGER;
- convSize : INTEGER;
- convDec : INTEGER;
- convDSize : INTEGER;
- convVal : ADDR;
- convRet : ADDR;
- convMask : ADDR;
- convJust : INTEGER;
- END;
-
- RP_TMASK = RECORD { xMask }
- maskFcn : INTEGER;
- maskType : INTEGER;
- maskSize : INTEGER;
- maskDec : INTEGER;
- maskLen : INTEGER;
- maskVal : ADDR;
- END;
-
- RP_TVALIDATE = RECORD
- valCount : INTEGER;
- valField : ADDR;
- valBufLen : INTEGER;
- valData : ADDR;
- END;
-
- RP_TSTATUS = RECORD
- option : INTEGER;
- buflen : INTEGER;
- buf : ADDR;
- END;
-
- RP_BTRIEVE = RECORD
- dumy1 : INTEGER;
- btrop : INTEGER;
- dumy2 : INTEGER;
- dumy3 : INTEGER;
- dumy4 : INTEGER;
- btrstat : ADDR;
- END;
-
- RP_STRUC = RECORD { structure passed to Scalable SQL }
- { for Relational Primitive APIs}
- SQL_ID : ARRAY[0..3] OF CHAR;
- fcn : INTEGER;
- handle : INTEGER;
- stat : INTEGER;
-
- sessionid : INTEGER;
- case RPFUNC of
- RP_LOGIN : (tloginData : RP_TLOGIN);
- RP_NEW : (tnewData : RP_TNEW);
- RP_COMPUTE : (tcompData : RP_TCOMPUTE);
- RP_DDCRE : (tcreData : RP_TDDCRE);
- RP_DDMOD : (tmodData : RP_TDDMOD);
- RP_DESCRIBE: (tdescData : RP_TDESCRIBE);
- RP_EDIT : (teditData : RP_TEDIT);
- RP_FETCH : (tfetchData : RP_TFETCH);
- RP_FIELD : (tfldData : RP_TFIELD);
- RP_JOIN : (tjoinData : RP_TJOIN);
- RP_ORDER : (tordData : RP_TORDER);
- RP_MOVEFLD : (tmovData : RP_TMOVEFLD);
- RP_REMALL : (tremallData : RP_TREMALL);
- RP_RESTRICT: (trestData : RP_TRESTRICT);
- RP_RESET : (tresetData : RP_TRESET);
- RP_STORE : (tstoreData : RP_TSTORE);
- RP_RECALL : (trecallData : RP_TRECALL);
- RP_UPDALL : (tupdallData : RP_TUPDALL);
- RP_TRANS : (ttransData : RP_TTRANS);
- RP_DD : (tddData : RP_TDD);
- RP_DDATTR : (tddattrData : RP_TDDATTR);
- RP_DDFCN : (tddfcnData : RP_TDDFCN);
- RP_DDDROP : (tdddropData : RP_TDDDROP);
- RP_DDPATH : (tddpathData : RP_TDDPATH);
- RP_DDVIEW : (tddviewData : RP_TDDVIEW);
- RP_SECURE : (tsecureData : RP_TSECURE);
- RP_USER : (tuserData : RP_TUSER);
- RP_ACCESS : (taccessData : RP_TACCESS);
- RP_PASSWORD: (tpswdData : RP_TPASSWORD);
- RP_CHAR : (tcharData : RP_TCHAR);
- RP_VERSION : (tversionData: RP_TVERSION);
- RP_CONVERT : (tconvertData: RP_TCONVERT);
- RP_MASK : (tmaskData : RP_TMASK);
- RP_VALIDATE: (tvalidData : RP_TVALIDATE);
- RP_STATUS : (tstatData : RP_TSTATUS);
- RP_LOAD : (txData : RP_BTRIEVE);
- END;
-
- {$ENDIF} {Historical Relational Primitive Data Types}
-
- {$IFDEF SQL_SQL_FUNCTIONS}
- {************************************************************************
- SQL-Level Data Types
- ************************************************************************}
-
- { SQL-Level functions }
- SQLFUNC = (SQL_LOGIN, SQL_COMPILE, SQL_FORMAT,
- SQL_FETCH, SQL_DESCRIBE, SQL_SUBST,
- SQL_STATUS, SQL_VERSION, SQL_CONVERT,
- SQL_VALIDATE, SQL_MASK, SQL_UTIL,
- SQL_LOAD);
-
- T_XLOGIN = RECORD
- username : ADDR;
- pswd : ADDR;
- dictionary : ADDR;
- filepath : ADDR;
- sreserved : ADDR;
- iFeaturesUsedx : INTEGER;
- END;
-
- T_XCOMPILE = RECORD
- length : INTEGER;
- statement : ADDR;
- END;
-
- T_XDESCRIB = RECORD { XQLDescribe }
- position : INTEGER;
- datatype : INTEGER;
- datasize : INTEGER;
- deccount : INTEGER;
- dsize : INTEGER;
- namelength: INTEGER;
- namebuf : ADDR;
- END;
-
- T_XFETCH = RECORD
- operation : INTEGER;
- datalen : INTEGER;
- databuf : ADDR;
- select : LONGINT;
- ASCIIFlag : INTEGER;
- spacing : INTEGER;
- END;
-
- T_XFORMAT = RECORD
- position : INTEGER;
- masklen : INTEGER;
- mask : ADDR;
- END;
-
- T_XSTATUS = RECORD
- subfunction: INTEGER;
- buf : ADDR;
- END;
-
- T_XSUBST = RECORD
- count : INTEGER;
- nlen : INTEGER;
- vname : ADDR;
- tlen : INTEGER;
- vtext : ADDR;
- END;
-
- T_XVERSION = RECORD
- buffer : ADDR;
- END;
-
- T_XCONVERT = RECORD { xConvert }
- convFcn : INTEGER;
- convType : INTEGER;
- convSize : INTEGER;
- convDec : INTEGER;
- convDSize : INTEGER;
- convVal : ADDR;
- convRet : ADDR;
- convMask : ADDR;
- convJust : INTEGER;
- END;
-
- T_XMASK = RECORD { xMask }
- maskOption: INTEGER;
- maskType : INTEGER;
- maskSize : INTEGER;
- maskDec : INTEGER;
- maskLen : INTEGER;
- maskVal : ADDR;
- END;
-
- T_XVALIDATE = RECORD
- valCount : INTEGER;
- valField : ADDR;
- valBufLen : INTEGER;
- valData : ADDR;
- END;
-
- T_XUTIL = RECORD { XQLSPUtility }
- utilOption : INTEGER;
- utilStmntCnt : INTEGER;
- utilStmntExec : INTEGER;
- utilBufLen : INTEGER;
- utilStatBuf : ADDR;
- END;
-
- T_XBTRIEVE = RECORD
- dumy1 : INTEGER;
- btrop : INTEGER;
- dumy2 : INTEGER;
- dumy3 : INTEGER;
- dumy4 : INTEGER;
- btrstat : ADDR;
- END;
-
- SQL_STRUC = RECORD { structure passed to Scalable SQL
- for SQL-Level APIs}
- SQL_ID : ARRAY[0..3] OF CHAR;
- fcn : INTEGER;
- cursorid : INTEGER;
- stat : INTEGER;
- sessionid : INTEGER;
- case SQLFUNC of
- SQL_LOGIN : (tlData : T_XLOGIN);
- SQL_COMPILE : (tcData : T_XCOMPILE);
- SQL_FETCH : (tfData : T_XFETCH);
- SQL_DESCRIBE : (tdData : T_XDESCRIB);
- SQL_FORMAT : (tfmData : T_XFORMAT);
- SQL_STATUS : (tstData : T_XSTATUS);
- SQL_SUBST : (tsData : T_XSUBST);
- SQL_VERSION : (tvData : T_XVERSION);
- SQL_CONVERT : (tcoData : T_XCONVERT);
- SQL_VALIDATE : (tvaData : T_XVALIDATE);
- SQL_MASK : (tmData : T_XMASK);
- SQL_UTIL : (tuData : T_XUTIL);
- SQL_LOAD : (txData : T_XBTRIEVE);
- END;
-
- {$ENDIF} {SQL-Level Types}
-
- {************************************************************************
- INTERFACE VARIABLES
- ************************************************************************}
- VAR
- {$IFDEF SQL_HISTORICAL_FUNCTIONS}
- RP_PARMS : RP_STRUC;
- {$ENDIF}
-
- {$IFDEF SQL_SQL_FUNCTIONS}
- SQL_PARMS : SQL_STRUC;
- {$ENDIF}
-
- REGS : DOS.REGISTERS;
- SQLCODE : INTEGER;
-
- {************************************************************************
- IMPLEMENTATION
- ************************************************************************}
- IMPLEMENTATION
-
- {***********************************************************************
- Named Database Functions
- SQLGetCountDatabaseNames
- SQLGetDatabaseNames
- SQLUnloadDBNames
- ************************************************************************}
- { CallPMSW() is a support function for the Named Database APIs. }
- FUNCTION CallPMSW(
- VAR pb : pmswParmBlock ) : INTEGER;
- var
- stat : INTEGER;
-
- begin
- stat := 0;
-
- regs.AX := $3500 + SQL_INT;
- MsDOS( regs );
- if (regs.BX <> SQL_OFFSET) then
- begin
- SQLCODE := SQL_MANAGER_NOT_LOADED_ERR;
- stat := SQLCODE;
- end;
-
- if ( stat = 0 ) then
- begin
- regs.DX := Ofs ( pb );
- regs.DS := Seg( pb );
- Intr( SQL_INT, regs );
- end;
-
- CallPMSW := stat;
- end;
-
- FUNCTION SQLGetCountDatabaseNames(
- VAR iCount : INTEGER ) : INTEGER;
- VAR
- stat : INTEGER;
- dbnpb : DBNGETCNT;
- pb : pmswParmBlock;
-
- begin
- stat := 0;
-
- dbnpb.XQL_ID[ 0 ] := 'D';
- dbnpb.XQL_ID[ 1 ] := 'B';
- dbnpb.XQL_ID[ 2 ] := 'N';
- dbnpb.XQL_ID[ 3 ] := 'M';
- dbnpb.fcn := 2;
- dbnpb.count := iCount;
-
- pb.sign[ 0 ] := 'P';
- pb.sign[ 1 ] := 'M';
- pb.sign[ 2 ] := 'S';
- pb.sign[ 3 ] := 'W';
- pb.flags := 0;
- pb.func := 768;
- pb.len := sizeof( dbnpb );
- pb.data.Seg := Seg( dbnpb );
- pb.data.Offset := Ofs( dbnpb );
-
- stat := CallPMSW( pb );
-
- iCount := dbnpb.count;
-
- if ( stat = 0 ) then
- stat := dbnpb.stat;
-
- SQLGetCountDatabaseNames := stat;
- end;
-
- FUNCTION SQLGetDatabaseNames(
- VAR iBufLen : INTEGER;
- VAR bDataBuf : CHAR ) : INTEGER;
- var
- stat : INTEGER;
- dbnpb : DBNGETNAME;
- pb : pmswParmBlock;
-
- begin
- stat := 0;
-
- dbnpb.XQL_ID[ 0 ] := 'D';
- dbnpb.XQL_ID[ 1 ] := 'B';
- dbnpb.XQL_ID[ 2 ] := 'N';
- dbnpb.XQL_ID[ 3 ] := 'M';
- dbnpb.fcn := 4;
-
- dbnpb.bufLen := iBufLen;
- dbnpb.buffer.Seg := Seg( bDataBuf );
- dbnpb.buffer.Offset := Ofs( bDataBuf );
-
- pb.sign[ 0 ] := 'P';
- pb.sign[ 1 ] := 'M';
- pb.sign[ 2 ] := 'S';
- pb.sign[ 3 ] := 'W';
- pb.flags := 0;
- pb.func := 768;
- pb.len := sizeof( dbnpb );
- pb.data.Seg := Seg( dbnpb );
- pb.data.Offset := Ofs( dbnpb );
-
- stat := CallPMSW( pb );
-
- iBufLen := dbnpb.bufLen;
-
- if ( stat = 0 ) then
- stat := dbnpb.stat;
-
- SQLGetDatabaseNames := stat;
- end;
-
- FUNCTION SQLUnloadDBNAMES(
- iReserved : INTEGER ) : INTEGER;
- var
- stat : INTEGER;
- dbnpb : DBNUNLOAD;
- pb : pmswParmBlock;
-
- begin
- stat := 0;
-
- dbnpb.XQL_ID[ 0 ] := 'D';
- dbnpb.XQL_ID[ 1 ] := 'B';
- dbnpb.XQL_ID[ 2 ] := 'N';
- dbnpb.XQL_ID[ 3 ] := 'M';
- dbnpb.fcn := 7;
-
- dbnpb.reserved := 0;
-
- pb.sign[ 0 ] := 'P';
- pb.sign[ 1 ] := 'M';
- pb.sign[ 2 ] := 'S';
- pb.sign[ 3 ] := 'W';
- pb.flags := 0;
- pb.func := 768;
- pb.len := sizeof( dbnpb );
- pb.data.Seg := Seg( dbnpb );
- pb.data.Offset := Ofs( dbnpb );
-
- stat := CallPMSW( pb );
-
- if ( stat = 0 ) then
- stat := dbnpb.stat;
-
- SQLUnloadDBNAMES := stat;
- end;
-
-
- FUNCTION xGetSessionID(
- VAR session : INTEGER ) : INTEGER;
- begin
- session := SessID;
- if (SessID = -1) then
- xGetSessionID := NOT_LOGGED
- else
- xGetSessionID := 0;
- end;
-
-
- FUNCTION xPutSessionID(
- session : INTEGER ) : INTEGER;
- begin
- SessID := session;
- xPutSessionID := 0;
- end;
-
- PROCEDURE callsql(
- VAR SQLPARMS );
- begin
- regs.DX := Ofs(SQLPARMS);
- regs.ES := Seg(SQLPARMS);
- regs.DS := regs.ES;
- Intr (SQL_INT, regs);
- end;
-
- PROCEDURE PrimitiveCall;
- begin
- RP_PARMS.SQL_ID[0] := 'X';
- RP_PARMS.SQL_ID[1] := 'Q';
- RP_PARMS.SQL_ID[2] := 'L';
- RP_PARMS.SQL_ID[3] := 'P';
- RP_PARMS.sessionid := SessID;
- callsql (RP_PARMS);
- end;
-
- FUNCTION PrimitivesManagerLoaded : BOOLEAN;
- var
- bstat : INTEGER;
-
- begin
-
- SQLCODE := 0;
- RP_PARMS.stat := -1;
- RP_PARMS.fcn := InvFcn;
- regs.AX := $3500 + SQL_INT;
- MsDOS (regs);
- if ( regs.BX <> SQL_OFFSET ) then
- SQLCODE := PRIMITIVES_NOT_LOADED_ERR
- else
- begin
- with RP_PARMS, txData do
- begin
- btrop := -1;
- btrstat.Seg := Seg (bstat);
- btrstat.OffSet := Ofs (bstat);
- PrimitiveCall;
- end;
-
- if ((RP_PARMS.stat <> InvSQLLevelFcn) and
- (RP_PARMS.stat <> InvPrimitiveFcn)) then
- SQLCODE := PRIMITIVES_NOT_LOADED_ERR
- else
- begin
- if (not VSet) then
- begin
- VSet := true;
- end;
- end;
- end;
- RP_PARMS.stat := SQLCODE;
- if SQLCODE = 0
- then PrimitivesManagerLoaded := True
- else PrimitivesManagerLoaded := False;
- end;
-
- {$IFDEF SQL_SQL_FUNCTIONS}
- {************************************************************************
- SQL-Level Function Definitions
- ************************************************************************}
- {*************************************************************************}
- { SQLLevelCall }
- { Send parameter block to Scalable SQL }
- {*************************************************************************}
- PROCEDURE SQLLevelCall;
- begin
- { set up Scalable SQL signature for SQL-Level Functions }
- SQL_PARMS.SQL_ID[0] := 'X';
- SQL_PARMS.SQL_ID[1] := 'Q';
- SQL_PARMS.SQL_ID[2] := 'L';
- SQL_PARMS.SQL_ID[3] := 'M';
- SQL_PARMS.sessionid := SessID;
- callsql (SQL_PARMS);
- end;
-
- {*************************************************************************}
- { }
- { SQLManagerLoaded }
- { Check if Scalable SQL is loaded. }
- { }
- {*************************************************************************}
- FUNCTION SQLManagerLoaded : BOOLEAN;
- var
- bstat : INTEGER;
-
- begin
- SQLCODE := 0;
- SQL_PARMS.stat := -1;
- SQL_PARMS.fcn := InvFcn;
- regs.AX := $3500 + SQL_INT;
- MsDOS (regs);
- if (regs.BX <> SQL_OFFSET) then
- SQLCODE := SQL_MANAGER_NOT_LOADED_ERR
- else
- begin
- with SQL_PARMS, txData do
- begin
- btrop := -1;
- btrstat.Seg := Seg (bstat);
- btrstat.OffSet := Ofs(bstat);
- SQLLevelCall;
- end;
-
- if (SQL_PARMS.stat <> InvSQLLevelFcn) then
- SQLCODE := SQL_MANAGER_NOT_LOADED_ERR
- else
- begin
- if (not VSet) then { check Version (Network, Multi, Single) }
- begin
- VSet := true;
- end;
- end;
- end;
- SQL_PARMS.stat := SQLCODE;
- if SQLCODE = 0
- then SQLManagerLoaded := True
- else SQLManagerLoaded := False;
- end;
-
-
- FUNCTION XQLCompile (CURSOR : INTEGER; { cursor id returned from XQLCursor }
- VAR LEN : INTEGER; { length of SQL statement }
- VAR STMNT)
- : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- with SQL_PARMS, tcData do
- begin
- fcn := lCompFcn;
- cursorid := CURSOR;
- length := LEN;
- statement.Seg := Seg (STMNT);
- statement.OffSet := Ofs(STMNT);
-
- SQLLevelCall;
-
- LEN := length;
- SQLCODE := stat;
- end;
- end;
- XQLCompile := SQLCODE;
- end; { XQLCompile }
-
- FUNCTION XQLCursor(
- VAR CURSOR : INTEGER ) : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- SQL_PARMS.fcn := lCursorFcn;
- SQL_PARMS.cursorid := -1;
-
- SQLLevelCall;
-
- CURSOR := SQL_PARMS.cursorid;
- SQLCODE := SQL_PARMS.stat;
- end;
- XQLCursor := SQLCODE;
- end; {XQLCursor }
-
- FUNCTION XQLDescribe(
- CURSOR : INTEGER;
- POS : INTEGER;
- VAR DTYPE : INTEGER;
- VAR SIZE : INTEGER;
- VAR DEC : INTEGER;
- VAR DSIZE : INTEGER;
- VAR NLENGTH : INTEGER;
- VAR NAME : CHAR ) : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- { }
- { Set up parameters for Scalable SQL request. }
- { }
- with SQL_PARMS, tdData do
- begin
- fcn := lDescribeFcn;
- cursorid := CURSOR;
- position := POS;
- namelength := NLENGTH;
- namebuf.Seg := Seg(NAME);
- namebuf.OffSet := Ofs(NAME);
-
- SQLLevelCall;
-
- DTYPE := datatype;
- SIZE := datasize;
- DEC := deccount;
- DSIZE := dsize;
- NLENGTH := namelength;
- SQLCODE := stat;
- end;
- end;
- XQLDescribe := SQLCODE;
- end; { XQLDescribe }
-
-
- FUNCTION XQLExec (CURSOR : INTEGER) : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- SQL_PARMS.fcn := lExecFcn;
- SQL_PARMS.cursorid := CURSOR;
-
- SQLLevelCall;
-
- SQLCODE := SQL_PARMS.stat;
- end;
- XQLExec := SQLCODE;
- end; { XQLExec }
-
- FUNCTION XQLFetch (CURSOR,
- OP : INTEGER;
- VAR DLEN : INTEGER;
- VAR BUF;
- VAR SEL : LONGINT;
- ASCII,
- SPACES : INTEGER)
- : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- { }
- { Set up parameters for Scalable SQL request. }
- { }
- with SQL_PARMS, tfData do
- begin
- fcn := lFetchFcn;
- cursorid := CURSOR;
- datalen := DLEN;
- operation := OP;
- databuf.Seg := Seg (BUF);
- databuf.OffSet := Ofs(BUF);
- select := SEL;
- ASCIIFlag := ASCII;
- spacing := spaces;
-
- SQLLevelCall;
-
- DLEN := datalen;
- SEL := select;
- SQLCODE := stat;
- end;
- end;
- XQLFETCH := SQLCODE;
- end; { XQLFetch }
-
- FUNCTION XQLFormat (CURSOR,
- POS,
- LENGTH : INTEGER;
- VAR MASKBUF)
- : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- { }
- { Set up parameters for Scalable SQL request. }
- { }
- with SQL_PARMS, tfmData do
- begin
- fcn := lFormatFcn;
- cursorid := CURSOR;
- position := POS;
- masklen := LENGTH;
- mask.Seg := Seg (MASKBUF);
- mask.OffSet := Ofs(MASKBUF);
-
- SQLLevelCall;
-
- SQLCODE := stat;
- end;
- end;
- XQLFormat := SQLCODE;
- end; { XQLFormat }
-
-
- FUNCTION XQLFree (CURSOR : INTEGER) : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- SQL_PARMS.fcn := lFreeFcn;
- SQL_PARMS.cursorid := CURSOR;
-
- SQLLevelCall;
-
- SQLCODE := SQL_PARMS.stat;
- end;
- XQLFree := SQLCODE;
- end; { XQLFree }
-
- FUNCTION XQLLogin (VAR USERID, { User name }
- PSWDNAME, { User password }
- DD, { Dictionary path }
- DATAPATH, { Data file path }
- SRES; { reserved }
- iFeaturesUsed : INTEGER) : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- with SQL_PARMS, tlData do
- begin
- fcn := lLogInFcn;
- cursorid := 0;
- username.Seg := Seg (USERID);
- username.OffSet := Ofs(USERID);
- pswd.Seg := Seg (PSWDNAME);
- pswd.OffSet := Ofs(PSWDNAME);
- dictionary.Seg := Seg (DD);
- dictionary.OffSet := Ofs(DD);
- filepath.Seg := Seg (DATAPATH);
- filepath.OffSet := Ofs(DATAPATH);
- sreserved.Seg := Seg (SRES);
- sreserved.OffSet := Ofs(SRES);
- iFeaturesUsedx := iFeaturesUsed;
-
- SQLLevelCall;
-
- if (stat = 0) then
- SessID := sessionid;
- SQLCODE := stat;
- end;
- end;
- XQLLogin := SQLCODE;
- end; { XQLLogin }
-
- FUNCTION XQLLogout : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- SQL_PARMS.fcn := lLogOutFcn;
-
- SQLLevelCall;
-
- SQLCODE := SQL_PARMS.stat;
- end;
- XQLLogout := SQLCODE;
- end; { XQLLogout }
-
- FUNCTION XQLStatus (CURSOR,
- OPTION : INTEGER;
- VAR STATBUF)
- : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- with SQL_PARMS, tstData do
- begin
- fcn := lStatFcn;
- cursorid := CURSOR;
- subfunction := OPTION;
- buf.Seg := Seg (STATBUF);
- buf.OffSet := Ofs(STATBUF);
-
- SQLLevelCall;
-
- SQLCODE := stat;
- end;
- end;
- XQLStatus := SQLCODE;
- end; { XQLStatus }
-
- FUNCTION XQLStop : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- SQL_PARMS.fcn := lStopFcn;
-
- SQLLevelCall;
-
- SQLCODE := SQL_PARMS.stat;
- end;
- XQLStop := SQLCODE;
- end; { XQLStop }
-
-
- FUNCTION XQLSubst ( CURSOR,
- SCOUNT,
- NAMELEN : INTEGER;
- VAR VARNAME;
- TEXTLEN : INTEGER;
- VAR VARTEXT)
- : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- with SQL_PARMS, tsData do
- begin
- fcn := lSubstFcn;
- cursorid := CURSOR;
- count := SCOUNT;
- nlen := NAMELEN;
- vname.Seg := Seg (VARNAME);
- vname.OffSet := Ofs(VARNAME);
- tlen := TEXTLEN;
- vtext.Seg := Seg (VARTEXT);
- vtext.OffSet := Ofs(VARTEXT);
-
- SQLLevelCall;
-
- SQLCODE := stat;
- end;
- end;
- XQLSubst := SQLCODE;
- end; { XQLSubst }
-
- FUNCTION XQLVersion (VAR VBUFFER) : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- with SQL_PARMS, tvData do
- begin
- fcn := lVersFcn;
- buffer.Seg := Seg (VBUFFER);
- buffer.OffSet := Ofs(VBUFFER);
-
- SQLLevelCall;
-
- SQLCODE := stat;
- end;
- end;
- XQLVersion := SQLCODE;
- end; { XQLVersion }
-
-
- FUNCTION XQLConvert ( OPTION, { 0=>Format, 1=>Unformat }
- DTYPE, { Data Type for value }
- SIZE, { Internal size of value }
- DEC, { Decimal places }
- DSIZE : INTEGER; { Display size }
- VAR VALUE; { Value to convert }
- VAR RETVALUE; { Converted value on return }
- VAR MASK; { Display mask }
- JUST : INTEGER) { Justification }
- : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with SQL_PARMS, tcoData do
- begin
- fcn := lConvFcn;
- convFcn := OPTION;
- convType := DTYPE;
- convSize := SIZE;
- convDec := DEC;
- convDSize := DSIZE;
- convVal.Seg := Seg(VALUE);
- convVal.OffSet := Ofs(VALUE);
- convRet.Seg := Seg(RETVALUE);
- convRet.OffSet := Ofs(RETVALUE);
- convMask.Seg := Seg(MASK);
- convMask.OffSet := Ofs(MASK);
- convJust := JUST;
-
- SQLLevelCall;
-
- end;
- end;
- XQLConvert := SQL_PARMS.stat;
- end; { XQLConvert }
-
- FUNCTION XQLMask ( OPTION, { 0=>Validate, 1=>Default }
- DTYPE, { Data Type for value }
- SIZE, { Internal size of value }
- DEC : INTEGER; { Decimal places }
- VAR MLEN : INTEGER; { Mask length }
- VAR MASK) { Mask value }
- : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with SQL_PARMS, tmData do
- begin
- fcn := lMaskFcn;
- maskOption := OPTION;
- maskType := DTYPE;
- maskSize := SIZE;
- maskDec := DEC;
- maskLen := MLEN;
- maskVal.Seg := Seg(MASK);
- maskVal.OffSet := Ofs(MASK);
-
- SQLLevelCall;
-
- MLEN := maskLen;
-
- end;
- end;
- XQLMask := SQL_PARMS.stat;
- end; { XQLMask }
-
-
- FUNCTION XQLValidate ( VAR COUNT : INTEGER;
- VAR FIELDNAME;
- BUFLEN : INTEGER;
- VAR DATA)
- : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with SQL_PARMS, tvaData do
- begin
- fcn := lValFcn;
- valCount := COUNT;
- valField.Seg := Seg(FIELDNAME);
- valField.OffSet := Ofs(FIELDNAME);
- valBufLen := BUFLEN;
- valData.Seg := Seg (DATA);
- valData.OffSet := Ofs(DATA);
- SQLLevelCall;
- COUNT := valCount;
-
- end;
- end;
- XQLValidate := SQL_PARMS.stat;
- end; { XQLValidate }
-
- FUNCTION XQLSPUtility ( CURSOR,
- OPTION : INTEGER;
- VAR STMNTCNT,
- STMNTEXEC : INTEGER;
- VAR BUFLEN : INTEGER; { Buffer length }
- VAR STATBUF) { Status buffer }
- : INTEGER;
- begin
- if (SQLManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
- with SQL_PARMS, tuData do
- begin
- fcn := lSPUtilFcn;
- cursorid := CURSOR;
- utilOption := OPTION;
- utilStmntCnt := STMNTCNT;
- utilStmntExec := STMNTEXEC;
- utilBufLen := BUFLEN;
- utilStatBuf.Seg := Seg(STATBUF);
- utilStatBuf.OffSet := Ofs(STATBUF);
-
- SQLLevelCall;
-
- STMNTCNT := utilStmntCnt;
- STMNTEXEC := utilStmntExec;
- BUFLEN := utilBufLen;
-
-
- end;
- end;
- XQLSPUtility := SQL_PARMS.stat;
- end; { XQLSPUtility }
-
- {$ENDIF} {SQL-Level Function Definitions}
-
- {$IFDEF SQL_HISTORICAL_FUNCTIONS }
- {************************************************************************
- Historical APIs
- ************************************************************************}
- {************************************************************************
- Dictionary Definition Function Prototypes
- ************************************************************************}
- FUNCTION xDictionary ( FNCTN,
- OPTION : INTEGER;
- VAR FCOUNT : INTEGER;
- VAR FBUF;
- VAR BLEN : INTEGER;
- VAR OBUF ) : INTEGER;
-
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for NetWare SQL request. }
- { }
-
- with RP_PARMS, tddfcnData do
- begin
- fcn := FNCTN;
- handle := 0;
- rtype := OPTION;
- count := FCOUNT;
- namebuf.Seg := Seg(FBUF);
- namebuf.OffSet := Ofs(FBUF);
- buflen := BLEN;
- outbuf.Seg := Seg(OBUF);
- outbuf.OffSet := Ofs(OBUF);
-
- PrimitiveCall;
-
- if (stat >= 0) then
- begin
- FCOUNT := count;
- BLEN := buflen;
- end;
- end;
- end;
- xDictionary := RP_PARMS.stat;
- end;
-
- FUNCTION xDDFile ( OPTION : INTEGER;
- VAR FCOUNT : INTEGER;{ Number of fields moved }
- VAR FBUF; { length of field buffer }
- VAR BLEN : INTEGER;{ file names and info }
- VAR OBUF) { output buffer }
- : INTEGER;
- begin
- xDDFile := xDictionary (tDDFileFcn, OPTION, FCOUNT, FBUF, BLEN, OBUF);
- end; { xDDFile }
-
- FUNCTION xDDField ( OPTION : INTEGER;
- VAR FCOUNT : INTEGER; { Number of fields moved }
- VAR FBUF; { field names and info }
- VAR BLEN : INTEGER; { length of field buffer }
- VAR OBUF)
- : INTEGER;
- begin
- xDDField := xDictionary (tDDFieldFcn, OPTION, FCOUNT, FBUF, BLEN, OBUF);
- end; { xDDField }
-
- FUNCTION xDDIndex ( OPTION : INTEGER; { option }
- VAR FCOUNT : INTEGER; { Number of fields }
- VAR FBUF; { field names }
- VAR BLEN : INTEGER; { output buffer length }
- VAR OBUF) { output buffer }
- : INTEGER;
- begin
- xDDIndex := xDictionary (tDDIndexFcn, OPTION, FCOUNT, FBUF, BLEN, OBUF);
- end; { xDDIndex }
-
- FUNCTION xDDCreate ( OPTION : INTEGER;
- VAR FNAME;
- CREATE_FILE : INTEGER;
- VAR PATH,
- OWNERNAME;
- OACC,
- FLDCOUNT : INTEGER;
- VAR FLDLIST;
- KEYCOUNT : INTEGER;
- VAR KLIST;
- BLEN : INTEGER;
- VAR CRPARMS)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tcreData do
- begin
- fcn := tDDCreFcn;
- subfunct := OPTION;
- filename.Seg := Seg(FNAME);
- filename.OffSet := Ofs(FNAME);
- create := CREATE_FILE;
- pathname.Seg := Seg(PATH);
- pathname.OffSet := Ofs(PATH);
- owner.Seg := Seg(OWNERNAME);
- owner.OffSet := Ofs(OWNERNAME);
- oaccess := OACC;
- fieldlist.Seg := Seg(FLDLIST);
- fieldlist.OffSet := Ofs(FLDLIST);
- keylist.Seg := Seg(KLIST);
- keylist.OffSet := Ofs(KLIST);
- fcount := FLDCOUNT;
- kcount := KEYCOUNT;
- buflen := BLEN;
- creparms.Seg := Seg(CRPARMS);
- creparms.OffSet := Ofs(CRPARMS);
-
- PrimitiveCall;
- end;
- end;
- xDDCreate := RP_PARMS.stat;
- end; { xDDCreate }
-
- FUNCTION xDDModify ( OPTION : INTEGER;
- VAR FNAME;
- CREATE_FILE : INTEGER;
- VAR PATH,
- OWNERNAME;
- OACC,
- FLDCOUNT : INTEGER;
- VAR FLDLIST;
- KEYCOUNT : INTEGER;
- VAR KLIST)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tmodData do
- begin
- fcn := tDDModFcn;
- subfunct := OPTION;
- filename.Seg := Seg(FNAME);
- filename.OffSet := Ofs(FNAME);
- create := CREATE_FILE;
- pathname.Seg := Seg(PATH);
- pathname.OffSet := Ofs(PATH);
- owner.Seg := Seg(OWNERNAME);
- owner.OffSet := Ofs(OWNERNAME);
- oaccess := OACC;
- fieldlist.Seg := Seg(FLDLIST);
- fieldlist.OffSet := Ofs(FLDLIST);
- keylist.Seg := Seg(KLIST);
- keylist.OffSet := Ofs(KLIST);
- fcount := FLDCOUNT;
- kcount := KEYCOUNT;
-
- PrimitiveCall;
- end;
- end;
- xDDModify := RP_PARMS.stat;
- end; { xDDModify }
-
- FUNCTION xDDDrop ( VAR FILENAME;
- FILETYPE,
- DELETEPATH : INTEGER)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- RP_PARMS.fcn := tDDDrpFcn;
- RP_PARMS.tdddropData.filename.Seg := Seg(FILENAME);
- RP_PARMS.tdddropData.filename.OffSet := Ofs(FILENAME);
- RP_PARMS.tdddropData.filetype := FILETYPE;
- RP_PARMS.tdddropData.deletepath := DELETEPATH;
-
- PrimitiveCall;
- end;
- xDDDrop := RP_PARMS.stat;
- end; { xDDDrop }
-
- FUNCTION xDDPath ( DIRTYPE : INTEGER;
- VAR PATHNAME)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- RP_PARMS.fcn := tDDPathFcn;
- RP_PARMS.tddpathData.dirtype := DIRTYPE;
- RP_PARMS.tddpathData.pathname.Seg := Seg(PATHNAME);
- RP_PARMS.tddpathData.pathname.OffSet := Ofs(PATHNAME);
-
- PrimitiveCall;
- end;
- xDDPath := RP_PARMS.stat;
- end; { xDDPath }
-
- FUNCTION xDDAttr ( OPTION : INTEGER;
- VAR FLDNAME;
- ATTRIB : INTEGER;
- VAR BSIZE : INTEGER;
- VAR ABUF)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tddattrData do
- begin
- fcn := tDDAttrFcn;
- handle := 0;
- subfunct := OPTION;
- fieldname.Seg := Seg(FLDNAME);
- fieldname.OffSet := Ofs(FLDNAME);
- attr := ATTRIB;
- bufsize := BSIZE;
- attrbuf.Seg := Seg(ABUF);
- attrbuf.OffSet := Ofs(ABUF);
-
- PrimitiveCall;
-
- BSIZE := bufsize;
- end;
- end;
- xDDAttr := RP_PARMS.stat;
- end; { xDDAttr }
-
- FUNCTION xDD ( VAR DIRPATH;
- FNCTION : INTEGER)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- RP_PARMS.fcn := tDDFcn;
- RP_PARMS.tddData.dirpath.Seg := Seg(DIRPATH);
- RP_PARMS.tddData.dirpath.OffSet := Ofs(DIRPATH);
- RP_PARMS.tddData.fnction := FNCTION;
-
- PrimitiveCall;
-
- end;
- xDD := RP_PARMS.stat;
- end; { xDD }
-
- FUNCTION xDDView ( VAR FCOUNT : INTEGER;
- VAR VNAME;
- VAR BLEN : INTEGER;
- VAR OBUF)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tddviewData do
- begin
- fcn := tDDViewFcn;
- handle := 0;
- count := FCOUNT;
- viewname.Seg := Seg(VNAME);
- viewname.OffSet := Ofs(VNAME);
- buflen := BLEN;
- outbuf.Seg := Seg(OBUF);
- outbuf.OffSet := Ofs(OBUF);
-
- PrimitiveCall;
-
- if (stat >= 0) then
- begin
- FCOUNT := count;
- BLEN := buflen;
- end;
- end;
- end;
- xDDView := RP_PARMS.stat;
- end; { xDDView }
-
- {************************************************************************
- Security Primitives
- ************************************************************************}
-
- FUNCTION xSecurity (VAR MPSWD;
- FLAG : INTEGER)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- RP_PARMS.fcn := tSecurFcn;
- RP_PARMS.handle := 0;
- RP_PARMS.tsecureData.mpswd.Seg := Seg(MPSWD);
- RP_PARMS.tsecureData.mpswd.OffSet := Ofs(MPSWD);
- RP_PARMS.tsecureData.securityflag := FLAG;
-
- PrimitiveCall;
- end;
- xSecurity := RP_PARMS.stat;
- end; { xSecurity }
-
- FUNCTION xUser (VAR MASTERPSWD;
- OPTION : INTEGER;
- VAR UNAME,
- PASSWORD;
- UGRIGHTS : INTEGER;
- VAR FCOUNT,
- BLEN : INTEGER;
- VAR UBUF)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tuserData do
- begin
- fcn := tUserFcn;
- handle := 0;
- mpswd.Seg := Seg(MASTERPSWD);
- mpswd.OffSet := Ofs(MASTERPSWD);
- subfcn := OPTION;
- username.Seg := Seg(UNAME);
- username.OffSet := Ofs(UNAME);
- pswd.Seg := Seg(PASSWORD);
- pswd.OffSet := Ofs(PASSWORD);
- grights := UGRIGHTS;
- count := FCOUNT;
- buflen := BLEN;
- userbuf.Seg := Seg(UBUF);
- userbuf.OffSet := Ofs(UBUF);
-
- PrimitiveCall;
-
- FCOUNT := count;
- BLEN := buflen;
- end;
- end;
- xUser := RP_PARMS.stat;
- end; { xUser }
-
- FUNCTION xAccess ( VAR MASTERPSWD,
- UNAME;
- OPTION,
- ARIGHTS : INTEGER;
- VAR FNAME;
- VAR FCOUNT : INTEGER;
- VAR FIELDNAME;
- VAR BLEN : INTEGER;
- VAR OBUF)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, taccessData do
- begin
- fcn := tAccessFcn;
- handle := 0;
- mpswd.Seg := Seg(MASTERPSWD);
- mpswd.OffSet := Ofs(MASTERPSWD);
- username.Seg := Seg(UNAME);
- username.OffSet := Ofs(UNAME);
- subfcn := OPTION;
- rights := ARIGHTS;
- filename.Seg := Seg(FNAME);
- filename.OffSet := Ofs(FNAME);
- count := FCOUNT;
- name.Seg := Seg(FIELDNAME);
- name.OffSet := Ofs(FIELDNAME);
- buflen := BLEN;
- outbuf.Seg := Seg(OBUF);
- outbuf.OffSet := Ofs(OBUF);
-
- PrimitiveCall;
-
- if (stat = 0) then
- begin
- FCOUNT := count;
- BLEN := buflen;
- end;
- end;
- end;
- xAccess := RP_PARMS.stat;
- end; { xAccess }
-
- FUNCTION xPassword (VAR UNAME,
- PASSWORD)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tpswdData do
- begin
- fcn := tPswdFcn;
- handle := 0;
- user.Seg := Seg(UNAME);
- user.OffSet := Ofs(UNAME);
- pswd.Seg := Seg(PASSWORD);
- pswd.OffSet := Ofs(PASSWORD);
-
- PrimitiveCall;
- end;
- end;
- xPassword := RP_PARMS.stat;
- end; { xPassword }
-
- {************************************************************************
- Miscellaneous Primitives
- ************************************************************************}
-
- FUNCTION xChar(
- CHARFCN : INTEGER;
- CHARTYPE : INTEGER;
- VAR VALUE : CHAR ) : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- RP_PARMS.fcn := tCharFcn;
- RP_PARMS.tcharData.charFcn := CHARFCN;
- RP_PARMS.tcharData.charType := CHARTYPE;
- RP_PARMS.tcharData.charValue := ORD (VALUE);
-
- PrimitiveCall;
- end;
- xChar := RP_PARMS.stat;
- end; { xChar }
-
- FUNCTION xVersion (VAR BUFFER) : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- RP_PARMS.fcn := tVersionFcn;
- RP_PARMS.tversionData.buffer.Seg := Seg(BUFFER);
- RP_PARMS.tversionData.buffer.OffSet := Ofs(BUFFER);
-
- PrimitiveCall;
- end;
- xVersion := RP_PARMS.stat;
- end; { xVersion }
-
-
- FUNCTION xConvert ( OPTION, { 0=>Format, 1=>Unformat }
- DTYPE, { Data Type for value }
- SIZE, { Internal size of value }
- DEC, { Decimal places }
- DSIZE : INTEGER; { Display size }
- VAR VALUE; { Value to convert }
- VAR RETVALUE; { Converted value on return }
- VAR MASK; { Display mask }
- JUST : INTEGER) { Justification }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tconvertData do
- begin
- fcn := tConvertFcn;
- convFcn := OPTION;
- convType := DTYPE;
- convSize := SIZE;
- convDec := DEC;
- convDSize := DSIZE;
- convVal.Seg := Seg(VALUE);
- convVal.OffSet := Ofs(VALUE);
- convRet.Seg := Seg(RETVALUE);
- convRet.OffSet := Ofs(RETVALUE);
- convMask.Seg := Seg (MASK);
- convMask.OffSet := Ofs(MASK);
- convJust := JUST;
- PrimitiveCall;
-
- end;
- end;
- xConvert := RP_PARMS.stat;
- end; { xConvert }
-
- FUNCTION xMask ( OPTION, { 0=>Validate, 1=>Default }
- DTYPE, { Data Type for value }
- SIZE, { Internal size of value }
- DEC : INTEGER; { Decimal places }
- VAR MLEN : INTEGER; { Mask length }
- VAR MASK) { Mask value }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tmaskData do
- begin
- fcn := tMaskFcn;
- maskFcn := OPTION;
- maskType := DTYPE;
- maskSize := SIZE;
- maskDec := DEC;
- maskLen := MLEN;
- maskVal.Seg := Seg(MASK);
- maskVal.OffSet := Ofs(MASK);
-
- PrimitiveCall;
-
- MLEN := maskLen;
-
- end;
- end;
- xMask := RP_PARMS.stat;
- end; { xMask }
-
-
- FUNCTION xValidate ( VAR COUNT : INTEGER;
- VAR FIELDNAME;
- BUFLEN : INTEGER;
- VAR DATA)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tvalidData do
- begin
- fcn := tValidFcn;
- valCount := COUNT;
- valField.Seg := Seg(FIELDNAME);
- valField.OffSet := Ofs(FIELDNAME);
- valBufLen := BUFLEN;
- valData.Seg := Seg (DATA);
- valData.OffSet := Ofs (DATA);
- PrimitiveCall;
- COUNT := valCount;
-
- end;
- end;
- xValidate := RP_PARMS.stat;
- end; { xValidate }
-
- {************************************************************************
- Data Manipulation Primitives
- ************************************************************************}
- FUNCTION xLogin ( VAR USERID, { user name }
- PASSWORD, { user password }
- DPATH, { dictionary directory }
- FPATH, { file path directory }
- SRES; { reserved variable }
- iFeaturesUsed : INTEGER) : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tloginData do
- begin
- fcn := tLogInFcn;
- handle := 0;
- username.Seg := Seg(USERID);
- username.OffSet := Ofs(USERID);
- pswd.Seg := Seg(PASSWORD);
- pswd.OffSet := Ofs(PASSWORD);
- dictionary.Seg := Seg(DPATH);
- dictionary.OffSet := Ofs(DPATH);
- filepath.Seg := Seg(FPATH);
- filepath.OffSet := Ofs(FPATH);
- sreserved.Seg := Seg(SRES);
- sreserved.OffSet := Ofs(SRES);
- iFeaturesUsedx := iFeaturesUsed;
-
- PrimitiveCall;
-
- if (stat = 0) then
- SessID := sessionid;
- end;
- end;
- xLogin := RP_PARMS.stat;
- end; { xLogin }
-
- FUNCTION xLogout : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- RP_PARMS.fcn := tLogOutFcn;
- RP_PARMS.handle := 0;
-
- PrimitiveCall;
-
- end;
- xLogout := RP_PARMS.stat;
- end; { xLogout }
-
- FUNCTION xNew ( VAR VHANDLE : INTEGER; { view handle }
- VAR FNAME, { Dictionary file name }
- OWNERNAME; { Btrieve owner name }
- MODE : INTEGER) { btrieve open mode }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tnewData do
- begin
- fcn := tNewFcn;
- handle := VHANDLE;
- filename.Seg := Seg(FNAME);
- filename.OffSet := Ofs(FNAME);
- owner.Seg := Seg(OWNERNAME);
- owner.OffSet := Ofs(OWNERNAME);
- openmode := MODE;
-
- PrimitiveCall;
-
- if (stat = 0) then
- VHANDLE := handle;
- end;
- end;
- xNew := RP_PARMS.stat;
- end; { xNew }
-
- FUNCTION xFree (VHANDLE : INTEGER) { view handle }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- RP_PARMS.fcn := tFreeFcn;
- RP_PARMS.handle := VHANDLE;
-
- PrimitiveCall;
-
- end;
- xFree := RP_PARMS.stat;
- end; { xFree }
-
- FUNCTION xField ( VHANDLE, { view handle }
- SUBF, { ADD/DELETE field }
- POS : INTEGER; { field position in list }
- VAR CNT : INTEGER; { # of fields in buffer }
- VAR BUF) { field name buffer }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tfldData do
- begin
- fcn := tFieldFcn;
- handle := VHANDLE;
- option := SUBF;
- position := POS;
- count := CNT;
- fldlist.Seg := Seg(BUF);
- fldlist.OffSet := Ofs(BUF);
-
- PrimitiveCall;
-
- if (stat >= 0) then
- CNT := count;
- end;
- end;
- xField := RP_PARMS.stat;
- end; { xField }
-
- FUNCTION xMovefld ( VHANDLE, { view handle }
- FPOS, { current field position }
- TPOS : INTEGER) { new field position }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tmovData do
- begin
- fcn := tMoveFldFcn;
- handle := VHANDLE;
- frompos := FPOS;
- topos := TPOS;
-
- PrimitiveCall;
- end;
- end;
- xMovefld := RP_PARMS.stat;
- end; { xMovefld }
-
- FUNCTION xDescribe ( VHANDLE : INTEGER; { view handle }
- SUBF : INTEGER; { option }
- VAR DLEN : INTEGER; { description buffer len }
- POS : INTEGER; { position in field list }
- VAR CNT : INTEGER; { number of fields }
- VAR BUF) { output buffer }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tdescData do
- begin
- fcn := tDescribeFcn;
- handle := VHANDLE;
- option := SUBF;
- desclen := DLEN;
- position := POS;
- count := CNT;
- desclist.OffSet := Ofs(BUF);
- desclist.Seg := Seg(BUF);
-
- PrimitiveCall;
-
- DLEN := desclen;
- CNT := count;
- end;
- end;
- xDescribe := RP_PARMS.stat;
- end; { xDescribe }
-
- FUNCTION xFetch ( VHANDLE : INTEGER; { view handle }
- VAR DLEN : INTEGER; { output buffer length }
- FETCH_OP: INTEGER; { option }
- VAR SELCNT, { max select count }
- REJCNT : LONGINT; { max reject count }
- VAR BUF) { output buffer }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tfetchData do
- begin
- fcn := tFetchFcn;
- handle := VHANDLE;
- datalen := DLEN;
- op := FETCH_OP;
- select := SELCNT;
- reject := REJCNT;
- databuf.Seg := Seg(BUF);
- databuf.OffSet := Ofs(BUF);
-
- PrimitiveCall;
-
- DLEN := datalen;
- SELCNT := select;
- REJCNT := reject;
- end;
- end;
- xFetch := RP_PARMS.stat;
- end; { xFetch }
-
- FUNCTION xCompute ( VHANDLE : INTEGER; { view handle }
- VAR FNAME; { expression field name }
- DATA_TYPE, { field data type }
- DATA_SIZE, { internal size }
- DEC : INTEGER; { decimal places }
- VAR ELEN : INTEGER; { length of expression }
- VAR EBUF) { buffer for expression }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tcompData do
- begin
- fcn := tComputeFcn;
- handle := VHANDLE;
- fldname.OffSet := Ofs(FNAME);
- fldname.Seg := Seg(FNAME);
- fldtype := DATA_TYPE;
- fldsize := DATA_SIZE;
- flddec := DEC;
- explen := ELEN;
- expbuf.OffSet := Ofs(EBUF);
- expbuf.Seg := Seg(EBUF);
-
- PrimitiveCall;
-
- if (stat >= 0) then
- ELEN := explen;
- end;
- end;
- xCompute := RP_PARMS.stat;
- end; { xCompute }
-
- FUNCTION xOrder ( VHANDLE, { view handle }
- CNT : INTEGER; { count of fields in list }
- VAR BUF) { fields which define order }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tordData do
- begin
- fcn := tOrderFcn;
- handle := VHANDLE;
- count := CNT;
- fldlist.Seg := Seg(BUF);
- fldlist.OffSet := Ofs(BUF);
-
- PrimitiveCall;
- end;
- end;
- xOrder := RP_PARMS.stat;
- end; { xOrder }
-
- FUNCTION xRestrict ( VHANDLE, { view handle }
- NEW_EXP : INTEGER; { new/continue expr. }
- VAR ELEN : INTEGER; { length of expression }
- VAR EBUF) { ASCII expression buffer }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, trestData do
- begin
- fcn := tRestrictFcn;
- handle := VHANDLE;
- newexp := NEW_EXP;
- explen := ELEN;
- expbuf.Seg := Seg(EBUF);
- expbuf.OffSet := Ofs(EBUF);
-
- PrimitiveCall;
-
- if (stat >= 0) then
- ELEN := explen;
- end;
- end;
- xRestrict := RP_PARMS.stat;
- end; { xRestrict }
-
- FUNCTION xJoin ( VHANDLE : INTEGER; { view handle }
- VAR NEWFILE, { file to join to view }
- OWNERNAME; { owner for new file }
- JTYPE, { include nulls? }
- VCOUNT : INTEGER; { # of fields from current view }
- VAR VNAMES; { field list from current view }
- NCOUNT : INTEGER; { # of fields from new file }
- VAR NNAMES) { field list from new file }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tjoinData do
- begin
- fcn := tJoinFcn;
- handle := VHANDLE;
- joinType := JTYPE;
- filename.Seg := Seg(NEWFILE);
- filename.OffSet := Ofs(NEWFILE);
- owner.Seg := Seg(OWNERNAME);
- owner.OffSet := Ofs(OWNERNAME);
- pCount := VCOUNT;
- pNames.Seg := Seg(VNAMES);
- pNames.OffSet := Ofs(VNAMES);
- sCount := NCOUNT;
- sNames.Seg := Seg(NNAMES);
- sNames.OffSet := Ofs(NNAMES);
-
- PrimitiveCall;
- end;
- end;
- xJoin := RP_PARMS.stat;
- end; { xJoin }
-
- FUNCTION xEdit ( FNCTN, { edit function }
- VHANDLE : INTEGER; { view handle }
- VAR COUNT : INTEGER; { file count }
- VAR FILES; { file list for insert }
- VAR EDITCNT : LONGINT; { # rows to insert }
- VAR BUFFER) { insert row buffer }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, teditData do
- begin
- fcn := FNCTN;
- handle := VHANDLE;
- filecount := COUNT;
- filelist.Seg := Seg(FILES);
- filelist.OffSet := Ofs(FILES);
- cnt := EDITCNT;
- buf.Seg := Seg(BUFFER);
- buf.OffSet := Ofs(BUFFER);
-
- PrimitiveCall;
-
- EDITCNT := cnt;
- COUNT := filecount;
- end;
- end;
- xEdit := RP_PARMS.stat;
- end; { xEdit }
-
- FUNCTION xInsert ( VHANDLE : INTEGER; { view handle }
- VAR COUNT : INTEGER; { # of files in list }
- VAR FILES; { list of files to update }
- VAR EDITCNT : LONGINT; { # of rows to update }
- VAR BUFFER) { updated row buffer }
- : INTEGER;
- begin
- xInsert := xEdit (tInsertFcn, VHANDLE, COUNT, FILES, EDITCNT, BUFFER);
- end;
-
- FUNCTION xUpdate ( VHANDLE : INTEGER; { view handle }
- VAR COUNT : INTEGER; { # of files in list }
- VAR FILES; { list of files to update }
- VAR EDITCNT : LONGINT; { # of rows to update }
- VAR BUFFER) { updated row buffer }
- : INTEGER;
- begin
- xUpdate := xEdit (tUpdateFcn, VHANDLE, COUNT, FILES, EDITCNT, BUFFER);
- end;
-
- FUNCTION xUpdall ( VHANDLE : INTEGER; { view handle }
- VAR UPDCOUNT : INTEGER; { count of files to update }
- VAR FILES; { list of files to update }
- UOP : INTEGER; { option }
- VAR SELCNT, { maximum rows to update }
- REJCNT : LONGINT; { maximum rows to reject }
- COLCNT : INTEGER; { # of fields to update }
- VAR RESULT,
- COMPARE)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tupdallData do
- begin
- fcn := tUpdallFcn;
- handle := VHANDLE;
- filecount := UPDCOUNT;
- filelist.Seg := Seg(FILES);
- filelist.OffSet := Ofs(FILES);
- op := UOP;
- select := SELCNT;
- reject := REJCNT;
- count := COLCNT;
- res.Seg := Seg(RESULT);
- res.OffSet := Ofs(RESULT);
- comp.Seg := Seg(COMPARE);
- comp.OffSet := Ofs(COMPARE);
-
- PrimitiveCall;
-
- SELCNT := select;
- REJCNT := reject;
- UPDCOUNT := filecount;
- end;
- end;
- xUpdall := RP_PARMS.stat;
- end; { xUpdall }
-
- FUNCTION xRemove ( VHANDLE : INTEGER; { view handle }
- VAR COUNT : INTEGER; { count of files in list }
- VAR FILES; { list of files for remove }
- VAR EDITCNT : LONGINT) { # of rows removed }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, teditData do
- begin
- fcn := tRemoveFcn;
- handle := VHANDLE;
- filecount := COUNT;
- filelist.Seg := Seg(FILES);
- filelist.OffSet := Ofs(FILES);
- cnt := EDITCNT;
- buf.Seg := 0;
- buf.OffSet := 0;
-
- PrimitiveCall;
-
- EDITCNT := cnt;
- COUNT := filecount;
- end;
- end;
- xRemove := RP_PARMS.stat;
- end; { xRemove }
-
- FUNCTION xRemall(
- VHANDLE : INTEGER;
- VAR COUNT : INTEGER;
- VAR FILES;
- ROP : INTEGER;
- VAR SELCNT : LONGINT;
- REJCNT : LONGINT ) : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tremallData do
- begin
- fcn := tRemallFcn;
- handle := VHANDLE;
- filecount := COUNT;
- filelist.Seg := Seg(FILES);
- filelist.OffSet := Ofs(FILES);
- op := ROP;
- select := SELCNT;
- reject := REJCNT;
-
- PrimitiveCall;
-
- SELCNT := select;
- REJCNT := reject;
- COUNT := filecount;
- end;
- end;
- xRemall := RP_PARMS.stat;
- end; { xRemall }
-
- FUNCTION xReset (VAR SRESERVED) : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- RP_PARMS.fcn := tResetFcn;
- RP_PARMS.handle := 0;
- RP_PARMS.tresetData.sreserved.Seg := Seg(SRESERVED);
- RP_PARMS.tresetData.sreserved.OffSet := Ofs(SRESERVED);
-
- PrimitiveCall;
- end;
- xReset := RP_PARMS.stat;
- end; { xReset }
-
- FUNCTION xTrans (OPERATION : INTEGER) : INTEGER; { option }
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- RP_PARMS.fcn := tTrans;
- RP_PARMS.handle := 0;
- RP_PARMS.ttransData.option := OPERATION;
- PrimitiveCall;
-
- end;
- xTrans := RP_PARMS.stat;
- end; { xTrans }
-
- FUNCTION xStore ( VHANDLE : INTEGER; { view handle }
- VAR VNAME; { name of view to store }
- BLEN : INTEGER; { length of view buffer }
- VAR VBUF) { view information buffer }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, tstoreData do
- begin
- fcn := tStoreFcn;
- handle := VHANDLE;
- StoreName.Seg := Seg(VNAME);
- StoreName.OffSet := Ofs(VNAME);
- BufLen := BLEN;
- Buf.Seg := Seg(VBUF);
- Buf.OffSet := Ofs(VBUF);
-
- PrimitiveCall;
- end;
- end;
- xStore := RP_PARMS.stat;
- end; { xStore }
-
- FUNCTION xRecall ( VAR VHANDLE : INTEGER; { view handle }
- VAR VNAME; { name of view to recall }
- ONUM : INTEGER; { # of owner names }
- VAR OLST; { list of owner names }
- MODE : INTEGER; { btrieve file open mode }
- VAR BLEN : INTEGER; { view buffer length }
- VAR VBUF) { view buffer }
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- with RP_PARMS, trecallData do
- begin
- fcn := tRecallFcn;
- handle := VHANDLE;
- RecallName.Seg := Seg(VNAME);
- RecallName.OffSet := Ofs(VNAME);
- ownernum := ONUM;
- ownerlst.Seg := Seg(OLST);
- ownerlst.OffSet := Ofs(OLST);
- openmode := MODE;
- buflen := BLEN;
- buf.Seg := Seg(VBUF);
- buf.OffSet := Ofs(VBUF);
-
- PrimitiveCall;
-
- if (stat = 0) then
- begin
- VHANDLE := handle;
- BLEN := buflen;
- end;
- end;
- end;
- xRecall := RP_PARMS.stat;
- end; { xRecall }
-
- FUNCTION xStatus ( VHANDLE : INTEGER;
- SUBFUNC : INTEGER;
- VAR LEN : INTEGER; { length of buffer }
- VAR STATBUF)
- : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
- with RP_PARMS, tstatData do
- begin
- fcn := tStatFcn;
- handle := VHANDLE;
- option := SUBFUNC;
- buflen := LEN;
- buf.Seg := Seg (STATBUF);
- buf.OffSet := Ofs(STATBUF);
-
- PrimitiveCall;
- LEN := buflen;
- end;
- end;
- xStatus := RP_PARMS.stat;
- end; { xStatus }
-
- FUNCTION xStop : INTEGER;
- begin
- if (PrimitivesManagerLoaded) then
- begin
-
- { }
- { Set up parameters for Scalable SQL request. }
- { }
-
- RP_PARMS.fcn := tStopFcn;
-
- PrimitiveCall;
- end;
- xStop := RP_PARMS.stat;
- end; { xStop }
- {$ENDIF} {Historical Function Definitions}
-
- END.
-