void ddlUdiStruct(
CONTROL *ctl,
char *OptnStr,
char *ArgList, /* command argument list */
WtInt32 ItemCount,
WtInt32 *RecNoList, /* [in] 1-rel TB RecNo */
WtInt32 *OpcodeList, /* [in] update type; Ref. UdiOpXxx */
WtInt32 *StatusList, /* [in/out] return item status */
char *OldValueList,
char *NewValueList);
/* macros for ddlUdiStruct() param *Status ... */
#define UdiGetStatusCode(s) ((s) & 0xffff)
#define UdiGetStatusParam(s) (((s) >> 16) & 0xffff)
#define UdiPutStatus(s,v) s = (v)
#define UdiPutStatusCode(s,v) s = (((s) & 0xffff0000) | ((v) & 0xffff))
#define UdiPutStatusParam(s,v) s = (((s) & 0xffff) | ((((v) & 0xffff) << 16)))
/* symbolic values for ddlUdiStruct() param *OpcodeList ... */
#define UdiOpChange 4 /* change an existing record (already structured) */
#define UdiOpCreate 5 /* create structure for an existing record */
#define UdiOpDelete 6 /* delete structure for existing record */
#define UdiOpUndelete 7
/* Note: UdiOpChange consists of two steps: */
/* 1) Delete the old index value; */
/* 2) Insert the new index value; */
/* UdiOpChDel is the delete step of UdiOpChange; */
/* UdiOpChIns is the insert step of UdiOpChange; */
#define UdiOpChDel 8 /* change an existing record; delete op */
#define UdiOpChIns 9 /* change an existing record; insert op */
Permitted values in OptnStr:
|
/E - continue processing if error occurs;
reference Description of Parameter StatusList below; /F - blank fill ascii fields that contain the null character; |
Form of ArgList:
|
<TableName> <RdName> |
|
<TableName> represents the target Table name; <RdName> represents the name of the RD that describes each record in OldValueList and NewValueList. <RdName> can be the WildCard "*". In the case where <TableName> contains one or more Virtual Columns, the WildCard RD consists of all level 0 fields in the Virtual Schema; i.e., both literal fields and virtual fields. |
|
ddlUdiStruct() is an index maintenance function for User Defined Indexes, or UDIs.
Although UDI does not require a connection to literal data in the underlying database, it does require a connection to a literal record. |
|
WtInt32 ItemCount is the number of items being submitted;
each item is represented by the respective values in RecNoList, OpcodeList,
StatusList, OldValueList, and NewValueList. |
| WtInt32 *RecNoList is an array containing ItemCount Thunderbolt 1-relative Record Numbers in table <TableName>; |
| WtInt32 *OpcodeList is an array containing ItemCount Opcodes as defined above. |
|
WtInt32 *StatusList is an array containing ItemCount status words
that are returned to the caller by ddlUdiStruct(). After an item has been processed successfully, zero is stored into *StatusList. If an item cannot be processed successfully, an error code is stored into *StatusList; in most cases, an additional error parameter is stored into the upper half of *StatusList. Two macros are defined in the #include file to access the components of *StatusList: UdiGetStatusCode(*StatusList) UdiGetStatusParam(*StatusList) For invalid values of *RecNoList and *OpcodeList, status is 211; there is no param. All other status codes result from the structure process; in these cases, the param is the 1-relative position in <RdName> of the offending index. If the /E option is not present, processing terminates after the first error. However, if the /E option is present, processing continues regardless of errors. [For every index, there is an internal pointer called end-of-structured-information, or EOSI. This is the record number of the highest indexed record. When creating a new index value with UdiOpCreate, the record number must be <= EOSI+1. When updating an existing index value with UdiOpChange etc, the record number must be <= EOSI.] If the record number/EOSI relation is not met, the requested index update is not performed. If the /E option is not present, this condition is not diagnosed. If the /E option is present, this condition results in error code 121. |
|
char *OldValueList is a buffer containing ItemCount record images; each of whose contents and length are defined by the Record Description
<RdName>; there is no delimiter between record images. See additional comments under *NewValueList. |
|
char *NewValueList is a buffer containing ItemCount record images; each of whose contents and length are defined by the Record Description
<RdName>; there is no delimiter between record images. Each value of *OpcodeList requires a different configuration of *OldValueList and *NewValueList. In cases where data is not required, there must still be fillers to act as place holders. The specific configurations are:
|
| Control.Ans1 | Incoming ItemCount |
| Control.Ans2 | Number of items processed |
| Control.Status |
Error code 211 is returned by ddlUdiStruct() if 1) a value in the *OpcodeList is < 0 or > 9 [UdiOpMax] 2) a value in *RecNoList is < 0 or > current last recno |
Copyright © 2019 , WhamTech, Inc. All rights reserved. This
document is provided for information purposes only and the contents hereof are
subject to change without notice. Names may be
trademarks of their respective owners.