2002-04-30 20:49 UTC-0300 Horacio Roldan <harbour_ar@yahoo.com.ar>
* source/rdd/dbfcdx/dbfcdx1.c
* source/rdd/dbfcdx/dbfcdx2.h
! fixed sharing flags in index creation
! fixed tag order after index creation
+ added function hb_cdxReorderTagList
+ added dummies handlers for DBOI_KEYADD, DBOI_KEYDELETE.
This commit is contained in:
@@ -188,6 +188,7 @@ typedef struct _CDXINDEX
|
||||
struct _CDXINDEX * pNext; /* The next index in the list */
|
||||
/* USHORT uiTag; */ /* current tag focus */
|
||||
BOOL fShared; /* Shared file */
|
||||
BOOL fReadonly; /* Read only file */
|
||||
int lockWrite;
|
||||
int lockRead;
|
||||
int changesWritten;
|
||||
|
||||
@@ -2631,7 +2631,7 @@ static void hb_cdxIndexPageWrite( LPCDXINDEX pIndex, LONG lPos, void * pBuffer,
|
||||
USHORT uiSize )
|
||||
{
|
||||
/* testing properly rights */
|
||||
if ( pIndex->pArea->fReadonly )
|
||||
if ( pIndex->fReadonly )
|
||||
hb_errInternal( 9101, "hb_cdxIndexPageWrite on readonly database.", "", "" );
|
||||
|
||||
/* if ( pIndex->fShared && !pIndex->lockWrite ) */
|
||||
@@ -3503,6 +3503,39 @@ static USHORT hb_cdxFindTag( CDXAREAP pArea, LPDBORDERINFO pOrderInfo )
|
||||
return uiTag;
|
||||
}
|
||||
|
||||
static LPCDXTAG hb_cdxReorderTagList ( LPCDXTAG TagList )
|
||||
{
|
||||
LPCDXTAG pTag1, pTag2, pTagTmp;
|
||||
|
||||
pTag1 = TagList;
|
||||
while( pTag1->pNext )
|
||||
{
|
||||
if( pTag1->TagBlock < pTag1->pNext->TagBlock )
|
||||
pTag1 = pTag1->pNext;
|
||||
else
|
||||
{
|
||||
if( TagList->TagBlock > pTag1->pNext->TagBlock )
|
||||
{
|
||||
pTagTmp = TagList;
|
||||
TagList = pTag1->pNext;
|
||||
pTag1->pNext = pTag1->pNext->pNext;
|
||||
TagList->pNext = pTagTmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
pTag2 = TagList;
|
||||
while( pTag2->pNext && (pTag2->pNext->TagBlock < pTag1->pNext->TagBlock) )
|
||||
pTag2 = pTag2->pNext;
|
||||
|
||||
pTagTmp = pTag2->pNext;
|
||||
pTag2->pNext = pTag1->pNext;
|
||||
pTag1->pNext = pTag1->pNext->pNext;
|
||||
pTag2->pNext->pNext = pTagTmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TagList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -4747,7 +4780,9 @@ ERRCODE hb_cdxOrderListAdd( CDXAREAP pAreaCdx, LPDBORDERINFO pOrderInfo )
|
||||
/* load the tags*/
|
||||
pIndex->pCompound = hb_cdxTagNew( pIndex, szFileName, 0 );
|
||||
pIndex->pCompound->OptFlags = 0xE0;
|
||||
pIndex->fShared = pAreaCdx->fShared;
|
||||
pIndex->fShared = pAreaCdx->fShared;
|
||||
pIndex->fReadonly = pAreaCdx->fReadonly;
|
||||
|
||||
hb_cdxIndexResetAvailPage( pIndex );
|
||||
|
||||
hb_cdxIndexLockRead( pIndex, NULL );
|
||||
@@ -5148,6 +5183,8 @@ ERRCODE hb_cdxOrderCreate( CDXAREAP pAreaCdx, LPDBORDERCREATEINFO pOrderInfo )
|
||||
{
|
||||
pIndex->hFile = hb_spCreate( ( BYTE * ) szFileName, FC_NORMAL );
|
||||
bNewFile = TRUE;
|
||||
pIndex->fShared = pAreaCdx->fShared;
|
||||
pIndex->fReadonly = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -5155,6 +5192,8 @@ ERRCODE hb_cdxOrderCreate( CDXAREAP pAreaCdx, LPDBORDERCREATEINFO pOrderInfo )
|
||||
( pAreaCdx->fShared ?
|
||||
FO_DENYNONE : FO_EXCLUSIVE ) );
|
||||
bNewFile = FALSE;
|
||||
pIndex->fShared = pAreaCdx->fShared;
|
||||
pIndex->fReadonly = FALSE;
|
||||
}
|
||||
|
||||
if( pIndex->hFile == FS_ERROR )
|
||||
@@ -5179,6 +5218,8 @@ ERRCODE hb_cdxOrderCreate( CDXAREAP pAreaCdx, LPDBORDERCREATEINFO pOrderInfo )
|
||||
hb_fsSeek( pIndex->hFile, 0, FS_SET );
|
||||
}
|
||||
|
||||
hb_cdxIndexLockWrite( pIndex, NULL );
|
||||
|
||||
if( bNewFile )
|
||||
{
|
||||
pIndex->NextAvail = 0;
|
||||
@@ -5210,6 +5251,9 @@ ERRCODE hb_cdxOrderCreate( CDXAREAP pAreaCdx, LPDBORDERCREATEINFO pOrderInfo )
|
||||
}
|
||||
hb_cdxTagKeyRead( pIndex->pCompound, NEXT_RECORD );
|
||||
}
|
||||
if ( pIndex->TagList != NULL ) {
|
||||
pIndex->TagList = hb_cdxReorderTagList(pIndex->TagList);
|
||||
}
|
||||
}
|
||||
|
||||
/* Update DBF header */
|
||||
@@ -5242,6 +5286,8 @@ ERRCODE hb_cdxOrderCreate( CDXAREAP pAreaCdx, LPDBORDERCREATEINFO pOrderInfo )
|
||||
|
||||
hb_xfree( szTagName );
|
||||
|
||||
hb_cdxIndexUnLockWrite( pIndex, NULL );
|
||||
|
||||
/* Clear pArea->lpdbOrdCondInfo */
|
||||
SELF_ORDSETCOND( ( AREAP ) pArea, NULL );
|
||||
|
||||
@@ -5451,6 +5497,13 @@ ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pOrderInf
|
||||
}
|
||||
break;
|
||||
|
||||
case DBOI_KEYADD :
|
||||
hb_itemPutL( pOrderInfo->itmResult, 0 );
|
||||
break;
|
||||
case DBOI_KEYDELETE :
|
||||
hb_itemPutL( pOrderInfo->itmResult, 0 );
|
||||
break;
|
||||
|
||||
default:
|
||||
return SUPER_ORDINFO( ( AREAP ) pArea, uiIndex, pOrderInfo );
|
||||
|
||||
|
||||
@@ -139,6 +139,7 @@ static LPCDXTAG hb_cdxGetActiveTag( CDXAREAP pArea );
|
||||
static USHORT hb_cdxFindTag( CDXAREAP pArea, LPDBORDERINFO pOrderInfo );
|
||||
static LPCDXTAG hb_cdxGetTagByNumber(CDXAREAP pArea, USHORT uiTag );
|
||||
static PHB_ITEM hb_cdxKeyGetItem( LPKEYINFO pKey, PHB_ITEM pItem, USHORT uiType );
|
||||
static LPCDXTAG hb_cdxReorderTagList ( LPCDXTAG TagList );
|
||||
|
||||
static USHORT hb_cdxIndexCheckVersion( LPCDXINDEX pIndex );
|
||||
static USHORT hb_cdxIndexUnLockRead( LPCDXINDEX pIndex, LPCDXTAG pTag );
|
||||
|
||||
Reference in New Issue
Block a user