2000-01-22 18:00 UTC-0800 Brian Hays <bhays@abacuslaw.com>

This commit is contained in:
Brian Hays
2001-01-23 01:58:40 +00:00
parent db38a8239b
commit 706918a336
8 changed files with 2003 additions and 1763 deletions

View File

@@ -1,3 +1,43 @@
2000-01-22 18:00 UTC-0800 Brian Hays <bhays@abacuslaw.com>
* contrib/rdd_ads/ads1.c
! integrated AOF creation into dbSetFilter if SET OPTIMIZE is on.
AdsCreateIndex():
* fixed bug to set focus to the new order
+ added USECURRENT support for subindexing. Since ADS by default does NOT
obey the scope like COMIX, I create a While expression from the index
key and scope expression (if there is one).
NOTE:
if the new tag/file already exists AND a bagname specifies a
non-structural bag, it does not subindex!
All records get added to the index.
The app needs to see if it's there already and delete it.
(Temp tags created with USECURRENT to the structural index are
always created correctly.)
* contrib/rdd_ads/adsfunc.c
* ADSCustomizeAOF( [<nRecno | aRecNos>] [, <nType>] ) --> nSuccess
Added support for default values (add current record to bitmap if no
parameters are passed) and for an array of record numbers to be
passed so up to 16,383 records can be set or cleared with one call to the
server.
Now returns 0 for success, otherwise the ADS error code.
+ added AdsIsIndexed() to quickly return if currently indexed vs. natural order
I hope to remove this if we agree to make it an rdd func
* harbour/contrib/rdd_ads/doc/en/adsfuncs.txt
ord.ch and hbapirdd.h
added constants for DBOI_OPTLEVEL return values
#define DBOI_OPTIMIZED_NONE 0
#define DBOI_OPTIMIZED_PART 1
#define DBOI_OPTIMIZED_FULL 2
hb_api.txt
hb_apiit.txt
added text for hb_param and hb_itemParam
2001-01-22 13:15 UTC-0500 David G. Holm <dholm@jsd-llc.com>
+ doc/en/gtslang.txt
+ New file provided by Marek Paliwoda <paliwoda@inetia.pl>

View File

@@ -270,17 +270,17 @@ static BOOL strcmpNoCase( char * s1, char * s2, int n )
*/
#define adsBof NULL
//ERRCODE adsBof( ADSAREAP pArea, BOOL * pBof )
//{
// HB_TRACE(HB_TR_DEBUG, ("adsBof(%p, %p)", pArea, pBof));
/*ERRCODE adsBof( ADSAREAP pArea, BOOL * pBof )
{
HB_TRACE(HB_TR_DEBUG, ("adsBof(%p, %p)", pArea, pBof));
// if( pArea->uiParents )
// {
// AdsAtBOF( pArea->hTable, (UNSIGNED16 *)&(pArea->fBof) );
// *pBof = pArea->fBof;
// }
// return SUPER_BOF( (AREAP)pArea, pBof );
//}
if( pArea->uiParents )
{
AdsAtBOF( pArea->hTable, (UNSIGNED16 *)&(pArea->fBof) );
*pBof = pArea->fBof;
}
return SUPER_BOF( (AREAP)pArea, pBof );
}*/
ERRCODE adsEof( ADSAREAP pArea, BOOL * pEof )
{
@@ -987,7 +987,6 @@ static ERRCODE adsCreate( ADSAREAP pArea, LPDBOPENINFO pCreateInfo)
adsLockType, adsRights,
hb_set.HB_SET_MBLOCKSIZE,
ucfieldDefs, &hTable);
hb_xfree(ucfieldDefs);
if( uRetVal != AE_SUCCESS )
{
@@ -1100,14 +1099,12 @@ static ERRCODE adsOpen( ADSAREAP pArea, LPDBOPENINFO pOpenInfo )
pArea->hOrdCurrent = 0;
//HB_TRACE(HB_TR_ALWAYS, ("\n\nadsOpen(%p) pOpenInfo->abName(%s) pOpenInfo->fShared(%d) pOpenInfo->fReadonly(%d)",
// pArea, pOpenInfo->abName, (int)pOpenInfo->fShared, (int)pOpenInfo->fReadonly ));
ulRetVal = AdsOpenTable ( 0, pOpenInfo->abName, NULL,
adsFileType, adsCharType, adsLockType, adsRights,
( (pOpenInfo->fShared) ? ADS_SHARED : ADS_EXCLUSIVE ) |
( (pOpenInfo->fReadonly) ? ADS_READONLY : ADS_DEFAULT ),
&hTable);
if( ulRetVal != AE_SUCCESS )
{
commonError( pArea, EG_OPEN, ( USHORT ) ulRetVal, ( char * ) pOpenInfo->abName );
@@ -1356,9 +1353,13 @@ static ERRCODE adsOrderListRebuild( ADSAREAP pArea )
static ERRCODE adsOrderCreate( ADSAREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
{
ADSHANDLE phIndex;
ADSHANDLE hTableOrIndex ;
UNSIGNED32 ulRetVal;
UNSIGNED32 ulOptions = ADS_DEFAULT;
PHB_ITEM pItem = pOrderInfo->abExpr;
PHB_ITEM pExprItem = pOrderInfo->abExpr;
UNSIGNED16 pus16 = 0;
UNSIGNED8 pucWhile[ (ADS_MAX_KEY_LENGTH * 2) + 3 ];
HB_TRACE(HB_TR_DEBUG, ("adsOrderCreate(%p, %p)", pArea, pOrderInfo));
if( !pOrderInfo->abBagName || *(pOrderInfo->abBagName) == '\0' )
@@ -1369,15 +1370,56 @@ static ERRCODE adsOrderCreate( ADSAREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
ulOptions = ADS_COMPOUND;
}
ulRetVal = AdsCreateIndex( pArea->hTable, pOrderInfo->abBagName,
pOrderInfo->atomBagName, (UCHAR*)hb_itemGetCPtr( pItem ),
( pArea->lpdbOrdCondInfo && pArea->lpdbOrdCondInfo->abFor )? (UCHAR*)pArea->lpdbOrdCondInfo->abFor:(UCHAR*)"",
(UCHAR*)"", ulOptions, &phIndex);
pucWhile[0] = 0;
if ( pArea->lpdbOrdCondInfo && pArea->lpdbOrdCondInfo->fUseCurrent && pArea->hOrdCurrent )
{
UNSIGNED8 pucScope[ ADS_MAX_KEY_LENGTH+1 ];
UNSIGNED16 pusBufLen = ADS_MAX_KEY_LENGTH;
/*
ADS subIndex does not obey scope, so create a While expression
from the index key and scope expression if there is one.
*/
ulRetVal = AdsGetScope( pArea->hOrdCurrent, ADS_BOTTOM, pucScope, &pusBufLen );
if ( ulRetVal == AE_SUCCESS && pusBufLen)
{
/* TODO:
if tag/file exists AND a bagname specifies a non-structural bag, it does not subindex!
Have to see if it's there already and delete it! For now, warn users to delete
secondary bags before creating temp indexes with USECURRENT
*/
AdsGetKeyType(pArea->hOrdCurrent, &pus16);
strcpy(pucWhile, (UCHAR*)hb_itemGetCPtr( pExprItem ) );
if ( pus16 == ADS_STRING ) /* add quotation marks around the key */
{
strcat(pucWhile, "<=\"");
strcat(pucWhile, pucScope );
strcat(pucWhile, "\"" );
}
else
{
strcat(pucWhile, "<=");
strcat(pucWhile, pucScope );
}
}
hTableOrIndex = pArea->hOrdCurrent;
}
else
{
hTableOrIndex = pArea->hTable;
}
ulRetVal = AdsCreateIndex( hTableOrIndex, pOrderInfo->abBagName,
pOrderInfo->atomBagName, (UCHAR*)hb_itemGetCPtr( pExprItem ),
( pArea->lpdbOrdCondInfo && pArea->lpdbOrdCondInfo->abFor ) ? (UCHAR*)pArea->lpdbOrdCondInfo->abFor : (UCHAR*)"",
pucWhile, ulOptions, &phIndex);
if ( ulRetVal != AE_SUCCESS )
{
commonError( pArea, EG_CREATE, ( USHORT ) ulRetVal, (char*) pOrderInfo->abBagName );
return FAILURE;
}
}else
pArea->hOrdCurrent = phIndex;
return adsGoTop( pArea );
}
@@ -1501,7 +1543,7 @@ static ERRCODE adsOrderInfo( ADSAREAP pArea, USHORT uiIndex, LPDBORDERINFO pOrde
case DBOI_RECNO : /* TODO: OR IS THIS JUST RECNO?? */
case DBOI_KEYNORAW :
if( phIndex )
AdsGetKeyNum ( phIndex, ADS_IGNOREFILTERS, &pul32);
AdsGetKeyNum ( phIndex, ADS_RESPECTSCOPES, &pul32);
else
AdsGetRecordNum ( pArea->hTable, ADS_IGNOREFILTERS, &pul32);
hb_itemPutNL(pOrderInfo->itmResult, pul32);
@@ -1557,8 +1599,8 @@ static ERRCODE adsOrderInfo( ADSAREAP pArea, USHORT uiIndex, LPDBORDERINFO pOrde
hb_itemPutNL(pOrderInfo->itmResult, pul32);
break;
case DBOI_KEYCOUNTRAW : /* ignore filter or scope */
AdsGetRecordCount( (phIndex ? phIndex : pArea->hTable), ADS_IGNOREFILTERS, &pul32);
case DBOI_KEYCOUNTRAW : /* ignore filter but RESPECT SCOPE */
AdsGetRecordCount( (phIndex ? phIndex : pArea->hTable), ADS_RESPECTSCOPES, &pul32);
hb_itemPutNL(pOrderInfo->itmResult, pul32);
break;
@@ -1593,18 +1635,18 @@ static ERRCODE adsOrderInfo( ADSAREAP pArea, USHORT uiIndex, LPDBORDERINFO pOrde
AdsGetAOFOptLevel( pArea->hTable, &pus16, NULL, NULL );
switch( pus16 )
{
case ADS_OPTIMIZED_FULL:
hb_itemPutNI(pOrderInfo->itmResult, 2);
case ADS_OPTIMIZED_FULL: /* ADS values are different from Harbour */
hb_itemPutNI(pOrderInfo->itmResult, DBOI_OPTIMIZED_FULL);
break;
case ADS_OPTIMIZED_PART:
hb_itemPutNI(pOrderInfo->itmResult, 1);
hb_itemPutNI(pOrderInfo->itmResult, DBOI_OPTIMIZED_PART);
break;
default:
hb_itemPutNI(pOrderInfo->itmResult, 0);
hb_itemPutNI(pOrderInfo->itmResult, DBOI_OPTIMIZED_NONE);
}
break;
/* Unsupported:
/* Unsupported TODO:
DBOI_FILEHANDLE
DBOI_FULLPATH
@@ -1616,6 +1658,7 @@ DBOI_KEYADD
DBOI_KEYDELETE
DBOI_KEYSINCLUDED
DBOI_SKIPUNIQUE
// these are really global settings:
DBOI_STRICTREAD
DBOI_OPTIMIZE
DBOI_AUTOORDER
@@ -1639,9 +1682,20 @@ DBOI_AUTOSHARE
static ERRCODE adsClearFilter( ADSAREAP pArea )
{
HB_TRACE(HB_TR_DEBUG, ("adsClearFilter(%p)", pArea));
HB_TRACE(HB_TR_DEBUG, ("adsClearFilter(%p)", pArea));
/*
We don't know if an AOF was used.
Since a call to the server would need to be made to see if there's an AOF
anyway, just always attempt to clear it.
///
///UNSIGNED8 aucAOF[64];
///UNSIGNED16 usLength;
/// if ( AdsGetAOF( pArea->hTable, aucAOF, &usLength ) == AE_SUCCESS && usLength > 0)
*/
AdsClearAOF ( pArea->hTable );
AdsClearFilter ( pArea->hTable );
return SUPER_CLEARFILTER( ( AREAP ) pArea );
}
@@ -1671,6 +1725,9 @@ static ERRCODE adsScopeInfo( ADSAREAP pArea, USHORT nScope, PHB_ITEM pItem )
static ERRCODE adsSetFilter( ADSAREAP pArea, LPDBFILTERINFO pFilterInfo )
{
BOOL bValidExpr = FALSE;
UNSIGNED16 usResolve = ADS_RESOLVE_DYNAMIC ; /*ADS_RESOLVE_IMMEDIATE ;get this from a SETting*/
UNSIGNED32 ulRetVal = AE_INVALID_EXPRESSION;
HB_TRACE(HB_TR_DEBUG, ("adsSetFilter(%p, %p)", pArea, pFilterInfo));
/* ----------------- NOTE: ------------------
@@ -1679,11 +1736,21 @@ static ERRCODE adsSetFilter( ADSAREAP pArea, LPDBFILTERINFO pFilterInfo )
filter the records locally.
--------------------------------------------------*/
AdsIsExprValid( pArea->hTable, (UNSIGNED8*) hb_itemGetCPtr( pFilterInfo->abFilterText), (UNSIGNED16*) &bValidExpr );
if ( bValidExpr )
AdsSetFilter( pArea->hTable, (UNSIGNED8*) hb_itemGetCPtr( pFilterInfo->abFilterText ) );
/* must do this first as it calls clearFilter */
if (SUPER_SETFILTER( ( AREAP ) pArea, pFilterInfo ) == SUCCESS )
{
AdsIsExprValid( pArea->hTable, (UNSIGNED8*) hb_itemGetCPtr( pFilterInfo->abFilterText), (UNSIGNED16*) &bValidExpr );
if ( bValidExpr )
{
return SUPER_SETFILTER( ( AREAP ) pArea, pFilterInfo );
if ( hb_set.HB_SET_OPTIMIZE )
{
ulRetVal = AdsSetAOF( pArea->hTable, (UNSIGNED8*) hb_itemGetCPtr( pFilterInfo->abFilterText), usResolve );
}else
ulRetVal = AdsSetFilter( pArea->hTable, (UNSIGNED8*) hb_itemGetCPtr( pFilterInfo->abFilterText ) );
}
}
return ulRetVal == AE_SUCCESS ? SUCCESS : FAILURE ;
}
#define adsSetLocate NULL
@@ -1917,3 +1984,55 @@ HB_FUNC( ADS_GETFUNCTABLE )
else
hb_retni( FAILURE );
}
HB_FUNC( ADSCUSTOMIZEAOF )
{
ADSAREAP pArea;
UNSIGNED32 ulNumRecs = 0;
UNSIGNED32 ulRecord;
UNSIGNED32 *pulRecords;
UNSIGNED16 usOption = ADS_AOF_ADD_RECORD;
UNSIGNED32 ulRetVal = AE_SUCCESS + 1; /* initialize to something other than success */
pArea = (ADSAREAP) hb_rddGetCurrentWorkAreaPointer();
if( pArea )
{
if( ISNUM(2) ) /* add, delete or toggle */
usOption = hb_parni( 2 );
if( ISNIL(1) ) /* default to current record */
{
ulNumRecs = 1;
AdsGetRecordNum( pArea->hTable, ADS_IGNOREFILTERS,
(UNSIGNED32 *)&(pArea->ulRecNo) );
ulRecord = pArea->ulRecNo;
}
else if( ISNUM( 1 ) ) /* Passed a single recno */
ulRecord = hb_parnl( 1 );
else if( ISARRAY( 1 ) ) /* convert array of recnos to C array */
ulNumRecs = hb_parinfa( 1, 0 );
if ( ulNumRecs )
{
pulRecords = (UNSIGNED32 *) hb_xgrab( ulNumRecs * sizeof( UNSIGNED32 ) );
if ( ulNumRecs > 1 ) /* convert array of recnos to C array */
{
for ( ulRecord = 0; ulRecord < ulNumRecs; ulRecord++)
pulRecords[ulRecord] = hb_parnl( 1, ulRecord + 1);
}else
pulRecords[0] = ulRecord;
ulRetVal = AdsCustomizeAOF( pArea->hTable, ulNumRecs, pulRecords, usOption);
/* if server has Customized AOF, clear the super filter so bits won't get flipped off! */
if ( ulRetVal == AE_SUCCESS )
SUPER_CLEARFILTER( ( AREAP ) pArea );
hb_xfree(pulRecords);
}
hb_retnl( ulRetVal );
}
else
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "ADSCUSTOMIZEAOF" );
}

View File

@@ -36,8 +36,9 @@
#define HB_OS_WIN_32_USED
#include "hbapi.h"
#include "hbinit.h"
#include "hbapiitm.h"
#include "hbinit.h"
#include "hbvm.h"
#include "rddsys.ch"
#include "hbapilng.h"
#include "hbdate.h"
@@ -53,6 +54,8 @@ int adsRights = 1;
int adsCharType = ADS_ANSI;
ADSHANDLE adsConnectHandle = 0;
PHB_ITEM itmCobCallBack = 0;
HB_FUNC( ADSSETFILETYPE )
{
int fileType, oldType = adsFileType;
@@ -273,28 +276,6 @@ HB_FUNC( ADSCLEARAOF )
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "ADSCLEARAOF" );
}
HB_FUNC( ADSCUSTOMIZEAOF )
{
ADSAREAP pArea;
UNSIGNED32 pulRecords[1];
UNSIGNED16 usOption = ADS_AOF_ADD_RECORD;
UNSIGNED32 ulRetVal;
pArea = (ADSAREAP) hb_rddGetCurrentWorkAreaPointer();
if( pArea )
{
pulRecords[0] = hb_parnl( 1 );
if( ISNUM(2) )
usOption = hb_parni( 2 );
ulRetVal = AdsCustomizeAOF( pArea->hTable, 1, pulRecords, usOption);
if ( ulRetVal == AE_SUCCESS )
hb_retl( 1 );
else
hb_retl( 0 );
}
else
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "ADSCUSTOMIZEAOF" );
}
HB_FUNC( ADSEVALAOF )
{
@@ -320,17 +301,18 @@ HB_FUNC( ADSGETAOF )
ADSAREAP pArea;
UNSIGNED8 pucFilter[HARBOUR_MAX_RDD_FILTER_LENGTH+1];
UNSIGNED16 pusLen = HARBOUR_MAX_RDD_FILTER_LENGTH;
UNSIGNED32 ulRetVal;
UNSIGNED32 ulRetVal = FAILURE;
pArea = (ADSAREAP) hb_rddGetCurrentWorkAreaPointer();
if( pArea )
{
ulRetVal = AdsGetAOF( pArea->hTable, pucFilter, &pusLen );
if ( ulRetVal == AE_SUCCESS )
hb_retc( ( char * ) pucFilter );
}
else
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, "ADSGETAOF" );
if ( ulRetVal == AE_SUCCESS )
hb_retc( ( char * ) pucFilter );
else
hb_retc( "" );
}
HB_FUNC( ADSGETAOFOPTLEVEL )
@@ -370,7 +352,7 @@ HB_FUNC( ADSGETAOFNOOPT )
HB_FUNC( ADSISRECORDINAOF )
{
ADSAREAP pArea;
UNSIGNED32 ulRecordNumber = 0;
UNSIGNED32 ulRecordNumber = 0; /* 0 for current record */
UNSIGNED16 bIsInAOF;
UNSIGNED32 ulRetVal;
@@ -378,8 +360,9 @@ HB_FUNC( ADSISRECORDINAOF )
if( pArea )
{
if( hb_pcount() > 0 )
ulRecordNumber = hb_parni( 1 );
ulRecordNumber = hb_parnl( 1 );
ulRetVal = AdsIsRecordInAOF( pArea->hTable, ulRecordNumber, &bIsInAOF );
if ( ulRetVal == AE_SUCCESS && bIsInAOF )
hb_retl( 1 );
else
@@ -404,7 +387,7 @@ HB_FUNC( ADSSETAOF )
{
ADSAREAP pArea;
char * pucFilter;
UNSIGNED16 usResolve = ADS_RESOLVE_IMMEDIATE;
UNSIGNED16 usResolve = ADS_RESOLVE_DYNAMIC ; //ADS_RESOLVE_IMMEDIATE
UNSIGNED32 ulRetVal;
pArea = (ADSAREAP) hb_rddGetCurrentWorkAreaPointer();
@@ -805,3 +788,79 @@ HB_FUNC( ADSCONVERTTABLE )
hb_errRT_DBCMD( EG_NOTABLE, 2001, NULL, " ADSCONVERTTABLE" );
}
UNSIGNED32 WINAPI ShowPercentage( UNSIGNED16 usPercentDone )
{
PHB_ITEM pPercentDone = hb_itemPutNI(NULL, usPercentDone);
if ( itmCobCallBack )
{
hb_vmEvalBlockV( itmCobCallBack, 1, pPercentDone ) ;
}
else
{
HB_TRACE(HB_TR_DEBUG, ("ShowPercentage(%d) called with no codeblock set.\n", usPercentDone ));
}
hb_itemRelease( pPercentDone );
return 0;
} /* ShowPercentage */
HB_FUNC( ADSREGCALLBACK )
{
UNSIGNED32 ulRetVal;
/* Note: current implementation is not thread safe.
ADS can register multiple callbacks, but one per thread/connection.
To be thread safe, we need multiple connections.
The registered function (and its codeblock itmCobCallBack) should
NOT make any Advantage Client Engine calls. If it does,
it is possible to get error code 6619 "Communication Layer is busy".
*/
itmCobCallBack = hb_itemParam( 1 );
if ( !itmCobCallBack || ( hb_itemType(itmCobCallBack) != HB_IT_BLOCK ) )
{
hb_retl( FALSE );
return;
}
hb_gcLockItem( itmCobCallBack );
ulRetVal = AdsRegisterProgressCallback( ShowPercentage );
if ( ulRetVal != AE_SUCCESS )
{
hb_gcUnlockItem( itmCobCallBack );
hb_itemRelease( itmCobCallBack );
itmCobCallBack = 0;
hb_retl( FALSE );
return;
}
}
HB_FUNC( ADSCLRCALLBACK )
{
if ( itmCobCallBack )
{
hb_retni( AdsClearProgressCallback () );
hb_gcUnlockItem( itmCobCallBack );
hb_itemRelease( itmCobCallBack );
itmCobCallBack = 0;
}
}
HB_FUNC( ADSISINDEXED )
{
ADSAREAP pArea;
pArea = (ADSAREAP) hb_rddGetCurrentWorkAreaPointer();
if(pArea)
hb_retl(pArea->hOrdCurrent);
else
hb_retl( FALSE );
}

View File

@@ -131,13 +131,13 @@
* $ONELINER$
* Add or remove records from an existing AOF
* $SYNTAX$
* ADSCustomizeAOF( [<nRecno | aRecNos>] [, <nType>] ) --> lSuccess
* ADSCustomizeAOF( [<nRecno | aRecNos>] [, <nType>] ) --> nSuccess
* $ARGUMENTS$
* <nRecno | aRecNos> Can be either a single record number or an array of
* record numbers to add or delete from the AOF. If omitted, defaults to
* the current record.
*
* <nType> The type of operation:
* <nType> The type of operation:
* <table>
* ADS_AOF_ADD_RECORD Add the record to the AOF (set the bit). This is the default operation.
@@ -145,7 +145,7 @@
* ADS_AOF_TOGGLE_RECORD Switch the record into or out of the AOF.
* </table>
* $RETURNS$
* <lSuccess> True if the operation is successful.
* <nError> ADS error code, or 0 for success.
* $DESCRIPTION$
* An Advantage Optimized Filter (AOF) consists of a bitmap of the records in
* the database. If bit 5 is on, record 5 is considered a visible record.
@@ -207,6 +207,8 @@
* <nOptimizationLevel> </par>
* Values are defined in ads.ch:
* ADS_OPTIMIZED_FULL, ADS_OPTIMIZED_PART, ADS_OPTIMIZED_NONE.
* IMPORTANT NOTE: These values are NOT the same as those returned
* by dbOrderInfo().
* $DESCRIPTION$
* See ACE.HLP for full details about the Advantage Database Server.
* $EXAMPLES$
@@ -268,7 +270,7 @@
* $SYNTAX$
* ADSGetAOF() --> cFilter
* $ARGUMENTS$
* None
* None
* $RETURNS$
* <cFilter> The filter expression used in the call to AdsSetAOF.
* $DESCRIPTION$

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -154,6 +154,10 @@ extern void hb_rddShutDown( void );
#define DBOI_AUTOORDER 63 /* Get/set default order: production index */
#define DBOI_AUTOSHARE 64 /* Get/set automatic sharing control */
/* Return values for DBOI_OPTLEVEL */
#define DBOI_OPTIMIZED_NONE 0
#define DBOI_OPTIMIZED_PART 1
#define DBOI_OPTIMIZED_FULL 2
/* Codes for SELF_INFO() */

View File

@@ -117,5 +117,10 @@
#define DBOI_AUTOORDER 63 /* Get/set default order: production index */
#define DBOI_AUTOSHARE 64 /* Get/set automatic sharing control */
/* Return values for DBOI_OPTLEVEL */
#define DBOI_OPTIMIZED_NONE 0
#define DBOI_OPTIMIZED_PART 1
#define DBOI_OPTIMIZED_FULL 2
#endif