2014-10-20 17:33 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* config/lang2po.hb
! fixed negative UTC offsets to string conversion
* include/dbinfo.ch
* src/rdd/dbfcdx/dbfcdx1.c
* src/rdd/dbfnsx/dbfnsx1.c
* src/rdd/dbfntx/dbfntx1.c
+ added DBOI_INDEXPAGESIZE - get index page size
* include/dbinfo.ch
* include/hbrdddbf.h
* src/rdd/dbf1.c
+ added RDDI_INDEXPAGESIZE - get/set default index page size
* include/hbrddcdx.h
* src/rdd/dbfcdx/dbfcdx1.c
* modification for user defined index page size (work in progress)
This commit is contained in:
@@ -10,6 +10,25 @@
|
||||
* Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment
|
||||
*/
|
||||
|
||||
2014-10-20 17:33 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
|
||||
* config/lang2po.hb
|
||||
! fixed negative UTC offsets to string conversion
|
||||
|
||||
* include/dbinfo.ch
|
||||
* src/rdd/dbfcdx/dbfcdx1.c
|
||||
* src/rdd/dbfnsx/dbfnsx1.c
|
||||
* src/rdd/dbfntx/dbfntx1.c
|
||||
+ added DBOI_INDEXPAGESIZE - get index page size
|
||||
|
||||
* include/dbinfo.ch
|
||||
* include/hbrdddbf.h
|
||||
* src/rdd/dbf1.c
|
||||
+ added RDDI_INDEXPAGESIZE - get/set default index page size
|
||||
|
||||
* include/hbrddcdx.h
|
||||
* src/rdd/dbfcdx/dbfcdx1.c
|
||||
* modification for user defined index page size (work in progress)
|
||||
|
||||
2014-10-19 14:46 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
|
||||
* src/rtl/gtwvt/gtwvt.c
|
||||
* small cleanup in HB_GTI_UNITRANS
|
||||
|
||||
@@ -119,8 +119,8 @@ STATIC FUNCTION ISO_TimeStamp()
|
||||
RETURN hb_StrFormat( "%1$s%2$s%3$02d%4$02d", ;
|
||||
hb_TToC( hb_DateTime(), "YYYY-MM-DD", "HH:MM" ), ;
|
||||
iif( nOffset < 0, "-", "+" ), ;
|
||||
Int( nOffset / 3600 ), ;
|
||||
Int( ( ( nOffset / 3600 ) - Int( nOffset / 3600 ) ) * 60 ) )
|
||||
Int( Abs( nOffset ) / 3600 ), ;
|
||||
Int( Abs( nOffset ) % 3600 / 60 ) )
|
||||
|
||||
STATIC FUNCTION Item( cOri, cTrs, nPos )
|
||||
|
||||
|
||||
@@ -105,6 +105,7 @@
|
||||
#define RDDI_PASSWORD 42 /* Get/Set default password */
|
||||
#define RDDI_LOCKRETRY 43 /* Get/Set record and file lock timeout value */
|
||||
#define RDDI_DIRTYREAD 44 /* Get/Set index dirty read flag */
|
||||
#define RDDI_INDEXPAGESIZE 45 /* Get/Set default index page size */
|
||||
|
||||
/*
|
||||
Constants for SELF_ORDINFO ()
|
||||
@@ -203,6 +204,7 @@
|
||||
#define DBOI_USECURRENT 131 /* get/set "use current index" flag */
|
||||
#define DBOI_INDEXTYPE 132 /* current index type */
|
||||
#define DBOI_RESETPOS 133 /* rest logical and raw positions */
|
||||
#define DBOI_INDEXPAGESIZE 134 /* get index page size */
|
||||
|
||||
/* return values for DBOI_OPTLEVEL */
|
||||
#define DBOI_OPTIMIZED_NONE 0
|
||||
|
||||
@@ -62,16 +62,13 @@ HB_EXTERN_BEGIN
|
||||
#define CDX_PAGELEN (1<<CDX_PAGELEN_BITS)
|
||||
#define CDX_HEADERLEN 1024
|
||||
#define CDX_HEADEREXPLEN (CDX_HEADERLEN - 512)
|
||||
#define CDX_HEADERPAGES ((CDX_HEADERLEN+CDX_PAGELEN-1)/CDX_PAGELEN)
|
||||
#define CDX_INT_FREESPACE (CDX_PAGELEN-12) /* 500 */
|
||||
#define CDX_EXT_FREESPACE (CDX_PAGELEN-24) /* 488 */
|
||||
#define CDX_DUMMYNODE 0xFFFFFFFFL
|
||||
#define CDX_INT_HEADSIZE 12
|
||||
#define CDX_EXT_HEADSIZE 24
|
||||
#define CDX_INT_FREESPACE (CDX_PAGELEN-CDX_INT_HEADSIZE) /* 500 */
|
||||
#define CDX_EXT_FREESPACE (CDX_PAGELEN-CDX_EXT_HEADSIZE) /* 488 */
|
||||
|
||||
#define CDX_HARBOUR_SIGNATURE 0x52434842L /* Harbour index signature: RCHB */
|
||||
|
||||
|
||||
/* #define CDX_LOCKOFFSET 0x7FFFFFFEL */
|
||||
/* #define CDX_LOCKSIZE 1L */
|
||||
#define CDX_STACKSIZE 64
|
||||
#define CDX_PAGECACHESIZE 8
|
||||
#define CDX_NODE_BRANCH 0
|
||||
@@ -80,6 +77,7 @@ HB_EXTERN_BEGIN
|
||||
#define CDX_NODE_UNUSED 0xFF
|
||||
#define CDX_IGNORE_REC_NUM 0x0L
|
||||
#define CDX_MAX_REC_NUM 0xFFFFFFFFL
|
||||
#define CDX_DUMMYNODE 0xFFFFFFFFL
|
||||
#define CDX_BALANCE_LEAFPAGES 3
|
||||
#define CDX_BALANCE_INTPAGES 3
|
||||
|
||||
@@ -194,7 +192,7 @@ typedef struct _CDXTAGHEADER
|
||||
{
|
||||
HB_BYTE rootPtr [ 4 ]; /* offset of the root node */
|
||||
HB_BYTE freePtr [ 4 ]; /* offset of list of free pages or -1 */
|
||||
HB_BYTE reserved1[ 4 ]; /* Version number ??? */
|
||||
HB_BYTE counter [ 4 ]; /* update counter (in root node) */
|
||||
HB_BYTE keySize [ 2 ]; /* key length */
|
||||
HB_BYTE indexOpt; /* index options see CDX_TYPE_* */
|
||||
HB_BYTE indexSig; /* index signature */
|
||||
@@ -270,13 +268,9 @@ typedef struct _CDXPAGE
|
||||
HB_ULONG Left;
|
||||
HB_ULONG Right;
|
||||
|
||||
HB_BYTE PageType;
|
||||
int iKeys;
|
||||
int iCurKey;
|
||||
|
||||
HB_BOOL fChanged;
|
||||
HB_BYTE bUsed;
|
||||
|
||||
HB_ULONG RNMask;
|
||||
HB_BYTE ReqByte;
|
||||
HB_BYTE RNBits;
|
||||
@@ -284,7 +278,20 @@ typedef struct _CDXPAGE
|
||||
HB_BYTE TCBits;
|
||||
HB_BYTE DCMask;
|
||||
HB_BYTE TCMask;
|
||||
|
||||
HB_BYTE PageType;
|
||||
HB_BYTE bUsed;
|
||||
HB_BOOL fChanged;
|
||||
HB_BOOL fBufChanged;
|
||||
|
||||
HB_BYTE * pKeyBuf; /* pointer to uncompressed leaf page key pool */
|
||||
|
||||
struct _CDXPAGE * Owner;
|
||||
struct _CDXPAGE * Child;
|
||||
struct _CDXTAG * TagParent;
|
||||
struct _CDXPAGE * pPoolPrev;
|
||||
struct _CDXPAGE * pPoolNext;
|
||||
|
||||
union
|
||||
{
|
||||
CDXEXTNODE extNode;
|
||||
@@ -295,14 +302,6 @@ typedef struct _CDXPAGE
|
||||
HB_SHORT bufKeyPos; /* they have to be just after the node */
|
||||
HB_SHORT bufKeyLen; /* and maybe temporary overwriten when adding */
|
||||
HB_SHORT iFree; /* new key to interior node record. */
|
||||
HB_BYTE * pKeyBuf; /* pointer to uncompressed leaf page key pool */
|
||||
/* HB_SHORT iKeyInBuf; */
|
||||
|
||||
struct _CDXPAGE * Owner;
|
||||
struct _CDXPAGE * Child;
|
||||
struct _CDXTAG * TagParent;
|
||||
struct _CDXPAGE * pPoolPrev;
|
||||
struct _CDXPAGE * pPoolNext;
|
||||
} CDXPAGE;
|
||||
typedef CDXPAGE * LPCDXPAGE;
|
||||
|
||||
@@ -393,6 +392,9 @@ typedef struct _CDXINDEX
|
||||
HB_BOOL fReadonly; /* Read only file */
|
||||
HB_BOOL fDelete; /* delete on close flag */
|
||||
HB_BOOL fLargeFile; /* page numbers instead of page offsets in index file */
|
||||
HB_USHORT uiHeaderLen; /* length of tag header */
|
||||
HB_USHORT uiPageLen; /* length of index page */
|
||||
HB_UINT uiPageBits; /* length of index page in bits */
|
||||
HB_ULONG nextAvail; /* offset to next free page in the end of index file */
|
||||
HB_ULONG freePage; /* offset to next free page inside index file */
|
||||
LPCDXLIST freeLst; /* list of free pages in index file */
|
||||
|
||||
@@ -143,6 +143,7 @@ typedef struct _DBFDATA
|
||||
HB_BYTE bMemoType; /* DB_MEMO_FPT */
|
||||
HB_BYTE bMemoExtType; /* DB_MEMOVER_FLEX */
|
||||
HB_USHORT uiDirtyRead; /* HB_IDXREAD_CLEANMASK */
|
||||
HB_USHORT uiIndexPageSize; /* 0 */
|
||||
HB_ULONG ulMemoBlockSize; /* 0 */
|
||||
|
||||
HB_BOOL fSortRecNo;
|
||||
|
||||
@@ -5959,6 +5959,16 @@ static HB_ERRCODE hb_dbfRddInfo( LPRDDNODE pRDD, HB_USHORT uiIndex, HB_ULONG ulC
|
||||
hb_itemPutL( pItem, fDirty );
|
||||
break;
|
||||
}
|
||||
case RDDI_INDEXPAGESIZE:
|
||||
{
|
||||
int iPageSize = hb_itemGetNI( pItem );
|
||||
|
||||
hb_itemPutNI( pItem, pData->uiIndexPageSize );
|
||||
if( iPageSize && iPageSize >= 0x200 && iPageSize <= 0x2000 &&
|
||||
( ( iPageSize - 1 ) & iPageSize ) == 0 )
|
||||
pData->uiIndexPageSize = ( HB_USHORT ) iPageSize;
|
||||
break;
|
||||
}
|
||||
case RDDI_TRIGGER:
|
||||
{
|
||||
char * szTrigger = pData->szTrigger;
|
||||
|
||||
@@ -78,17 +78,11 @@
|
||||
#include "hbregex.h"
|
||||
#include "hbapicdp.h"
|
||||
|
||||
#if 1
|
||||
#define hb_cdxFilePageOffset( I, B ) ( ( HB_FOFFSET ) ( B ) << ( ( I )->fLargeFile ? CDX_PAGELEN_BITS : 0 ) )
|
||||
#define hb_cdxFilePageNum( I, O ) ( ( HB_ULONG ) ( ( O ) >> ( ( I )->fLargeFile ? CDX_PAGELEN_BITS : 0 ) ) )
|
||||
#define hb_cdxFilePageNext( I, C ) ( ( C ) << ( ( I )->fLargeFile ? 0 : CDX_PAGELEN_BITS ) )
|
||||
#define hb_cdxFilePageRootValid( I, B ) ( ( I )->fLargeFile ? CDX_PAGELEN != CDX_DUMMYNODE : ( ( B ) % CDX_PAGELEN == 0 ) )
|
||||
#else
|
||||
#define hb_cdxFilePageOffset( I, B ) ( ( HB_FOFFSET ) ( B ) )
|
||||
#define hb_cdxFilePageNum( I, O ) ( ( HB_ULONG ) ( O ) )
|
||||
#define hb_cdxFilePageNext( I, C ) ( ( C ) << CDX_PAGELEN_BITS )
|
||||
#define hb_cdxFilePageRootValid( I, B ) ( ( B ) % CDX_PAGELEN == 0 )
|
||||
#endif
|
||||
#define hb_cdxFilePageOffset( I, B ) ( ( HB_FOFFSET ) ( B ) << ( ( I )->fLargeFile ? ( I )->uiPageBits : 0 ) )
|
||||
#define hb_cdxFilePageNum( I, O ) ( ( HB_ULONG ) ( ( O ) >> ( ( I )->fLargeFile ? ( I )->uiPageBits : 0 ) ) )
|
||||
#define hb_cdxFilePageNext( I, C ) ( ( C ) << ( ( I )->fLargeFile ? 0 : ( I )->uiPageBits ) )
|
||||
#define hb_cdxFilePageRootValid( I, B ) ( ( I )->fLargeFile ? ( B ) != CDX_DUMMYNODE : ( ( B ) % ( I )->uiPageLen == 0 ) )
|
||||
|
||||
/*
|
||||
* Tag->fRePos = HB_TRUE means that rootPage->...->childLeafPage path is
|
||||
* bad and has to be reloaded
|
||||
@@ -1012,13 +1006,10 @@ static HB_ULONG hb_cdxIndexGetAvailPage( LPCDXINDEX pIndex, HB_BOOL fHeader )
|
||||
HB_ULONG ulPage;
|
||||
|
||||
if( pIndex->fReadonly )
|
||||
{
|
||||
hb_errInternal( 9101, "hb_cdxIndexGetAvailPage on readonly database.", NULL, NULL );
|
||||
}
|
||||
|
||||
if( pIndex->fShared && ! pIndex->lockWrite )
|
||||
{
|
||||
hb_errInternal( 9102, "hb_cdxIndexGetAvailPage on not locked index file.", NULL, NULL );
|
||||
}
|
||||
|
||||
if( pIndex->freePage != 0 && pIndex->freePage != CDX_DUMMYNODE && ! fHeader )
|
||||
{
|
||||
@@ -1034,38 +1025,45 @@ static HB_ULONG hb_cdxIndexGetAvailPage( LPCDXINDEX pIndex, HB_BOOL fHeader )
|
||||
{
|
||||
if( hb_fileReadAt( pFile, byBuf, 4, hb_cdxFilePageOffset( pIndex, ulPage ) ) != 4 )
|
||||
hb_errInternal( EDBF_READ, "hb_cdxIndexGetAvailPage: Read index page failed.", NULL, NULL );
|
||||
pIndex->freePage = HB_GET_LE_UINT32( byBuf );
|
||||
#ifdef HB_CDX_DBGUPDT
|
||||
cdxReadNO++;
|
||||
#endif
|
||||
pIndex->freePage = HB_GET_LE_UINT32( byBuf );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int iCnt = ( fHeader ? CDX_HEADERPAGES : 1 );
|
||||
HB_SIZE nSize = fHeader ? pIndex->uiHeaderLen : pIndex->uiPageLen, nLen = 0;
|
||||
|
||||
if( pIndex->nextAvail == CDX_DUMMYNODE )
|
||||
pIndex->nextAvail = hb_cdxFilePageNum( pIndex, hb_fileSize( pFile ) );
|
||||
|
||||
ulPage = pIndex->nextAvail;
|
||||
pIndex->nextAvail += hb_cdxFilePageNext( pIndex, iCnt );
|
||||
do
|
||||
{
|
||||
pIndex->nextAvail += hb_cdxFilePageNext( pIndex, 1 );
|
||||
nLen += pIndex->uiPageLen;
|
||||
}
|
||||
while( nLen < nSize );
|
||||
|
||||
/* TODO: ### */
|
||||
if( fHeader )
|
||||
{
|
||||
HB_BYTE byPageBuf[ CDX_PAGELEN ];
|
||||
HB_FOFFSET fOffset = hb_cdxFilePageOffset( pIndex, ulPage );
|
||||
HB_BYTE * byPageBuf;
|
||||
|
||||
if( nSize < ( HB_SIZE ) pIndex->uiPageLen )
|
||||
nSize = pIndex->uiPageLen;
|
||||
byPageBuf = ( HB_BYTE * ) hb_xgrabz( nSize );
|
||||
|
||||
hb_cdxIndexLockFlush( pIndex );
|
||||
memset( byPageBuf, 0, CDX_PAGELEN );
|
||||
do
|
||||
{
|
||||
if( hb_fileWriteAt( pFile, byPageBuf, CDX_PAGELEN, fOffset ) != CDX_PAGELEN )
|
||||
hb_errInternal( EDBF_WRITE, "Write in index page failed.", NULL, NULL );
|
||||
fOffset += CDX_PAGELEN;
|
||||
}
|
||||
while( --iCnt );
|
||||
if( hb_fileWriteAt( pFile, byPageBuf, nSize,
|
||||
hb_cdxFilePageOffset( pIndex, ulPage ) ) != nSize )
|
||||
hb_errInternal( EDBF_WRITE, "Write in index page failed.", NULL, NULL );
|
||||
#ifdef HB_CDX_DBGUPDT
|
||||
cdxWriteNO++;
|
||||
#endif
|
||||
pIndex->fChanged = HB_TRUE;
|
||||
hb_xfree( byPageBuf );
|
||||
}
|
||||
}
|
||||
return ulPage;
|
||||
@@ -1078,7 +1076,7 @@ static void hb_cdxIndexPutAvailPage( LPCDXINDEX pIndex, HB_ULONG ulPage, HB_BOOL
|
||||
{
|
||||
if( ulPage != 0 && ulPage != CDX_DUMMYNODE )
|
||||
{
|
||||
int iCnt = ( fHeader ? CDX_HEADERPAGES : 1 );
|
||||
HB_SIZE nSize = fHeader ? pIndex->uiHeaderLen : pIndex->uiPageLen, nLen = 0;
|
||||
LPCDXLIST pLst;
|
||||
|
||||
if( pIndex->fReadonly )
|
||||
@@ -1095,8 +1093,9 @@ static void hb_cdxIndexPutAvailPage( LPCDXINDEX pIndex, HB_ULONG ulPage, HB_BOOL
|
||||
pLst->pNext = pIndex->freeLst;
|
||||
pIndex->freeLst = pLst;
|
||||
ulPage += hb_cdxFilePageNext( pIndex, 1 );
|
||||
nLen += pIndex->uiPageLen;
|
||||
}
|
||||
while( --iCnt );
|
||||
while( nLen < nSize );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1106,9 +1105,7 @@ static void hb_cdxIndexPutAvailPage( LPCDXINDEX pIndex, HB_ULONG ulPage, HB_BOOL
|
||||
static void hb_cdxIndexFlushAvailPage( LPCDXINDEX pIndex )
|
||||
{
|
||||
LPCDXLIST pLst = pIndex->freeLst;
|
||||
HB_BYTE byPageBuf[ CDX_PAGELEN ];
|
||||
HB_ULONG ulPage;
|
||||
HB_BOOL fClean = HB_TRUE;
|
||||
|
||||
if( pIndex->fReadonly )
|
||||
hb_errInternal( 9101, "hb_cdxIndexFlushAvailPage on readonly database.", NULL, NULL );
|
||||
@@ -1117,24 +1114,26 @@ static void hb_cdxIndexFlushAvailPage( LPCDXINDEX pIndex )
|
||||
hb_cdxIndexLockFlush( pIndex );
|
||||
|
||||
ulPage = pIndex->freePage;
|
||||
while( pLst && pLst->fStat )
|
||||
if( pLst && pLst->fStat )
|
||||
{
|
||||
if( fClean )
|
||||
HB_BYTE * byPageBuf = ( HB_BYTE * ) hb_xgrabz( pIndex->uiPageLen );
|
||||
|
||||
do
|
||||
{
|
||||
memset( byPageBuf, 0, CDX_PAGELEN );
|
||||
fClean = HB_FALSE;
|
||||
}
|
||||
HB_PUT_LE_UINT32( byPageBuf, pLst->nextPage );
|
||||
if( hb_fileWriteAt( pIndex->pFile, byPageBuf, CDX_PAGELEN,
|
||||
hb_cdxFilePageOffset( pIndex, ulPage ) ) != CDX_PAGELEN )
|
||||
hb_errInternal( EDBF_WRITE, "Write in index page failed.", NULL, NULL );
|
||||
pIndex->fChanged = HB_TRUE;
|
||||
ulPage = pLst->nextPage;
|
||||
pLst->fStat = HB_FALSE;
|
||||
pLst = pLst->pNext;
|
||||
HB_PUT_LE_UINT32( byPageBuf, pLst->nextPage );
|
||||
if( hb_fileWriteAt( pIndex->pFile, byPageBuf, pIndex->uiPageLen,
|
||||
hb_cdxFilePageOffset( pIndex, ulPage ) ) != pIndex->uiPageLen )
|
||||
hb_errInternal( EDBF_WRITE, "Write in index page failed.", NULL, NULL );
|
||||
#ifdef HB_CDX_DBGUPDT
|
||||
cdxWriteNO++;
|
||||
cdxWriteNO++;
|
||||
#endif
|
||||
pIndex->fChanged = HB_TRUE;
|
||||
ulPage = pLst->nextPage;
|
||||
pLst->fStat = HB_FALSE;
|
||||
pLst = pLst->pNext;
|
||||
}
|
||||
while( pLst && pLst->fStat );
|
||||
hb_xfree( byPageBuf );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1157,10 +1156,8 @@ static void hb_cdxIndexDropAvailPage( LPCDXINDEX pIndex )
|
||||
* write index page
|
||||
*/
|
||||
static void hb_cdxIndexPageWrite( LPCDXINDEX pIndex, HB_ULONG ulPage,
|
||||
const HB_BYTE * pBuffer, HB_BOOL fHeader )
|
||||
const HB_BYTE * pBuffer, HB_SIZE nSize )
|
||||
{
|
||||
HB_SIZE nSize = fHeader ? CDX_HEADERLEN : CDX_PAGELEN;
|
||||
|
||||
if( pIndex->fReadonly )
|
||||
hb_errInternal( 9101, "hb_cdxIndexPageWrite on readonly database.", NULL, NULL );
|
||||
if( pIndex->fShared && ! pIndex->lockWrite )
|
||||
@@ -1180,10 +1177,8 @@ static void hb_cdxIndexPageWrite( LPCDXINDEX pIndex, HB_ULONG ulPage,
|
||||
* read index page
|
||||
*/
|
||||
static void hb_cdxIndexPageRead( LPCDXINDEX pIndex, HB_ULONG ulPage,
|
||||
HB_BYTE * pBuffer, HB_BOOL fHeader )
|
||||
HB_BYTE * pBuffer, HB_SIZE nSize )
|
||||
{
|
||||
HB_SIZE nSize = fHeader ? CDX_HEADERLEN : CDX_PAGELEN;
|
||||
|
||||
if( pIndex->fShared && ! ( pIndex->lockRead || pIndex->lockWrite ) )
|
||||
hb_errInternal( 9103, "hb_cdxIndexPageRead on not locked index file.", NULL, NULL );
|
||||
|
||||
@@ -2285,7 +2280,8 @@ static void hb_cdxPageLoad( LPCDXPAGE pPage )
|
||||
pPage->fBufChanged = HB_FALSE;
|
||||
}
|
||||
hb_cdxIndexPageRead( pPage->TagParent->pIndex, pPage->Page,
|
||||
( HB_BYTE * ) &pPage->node, HB_FALSE );
|
||||
( HB_BYTE * ) &pPage->node,
|
||||
pPage->TagParent->pIndex->uiPageLen );
|
||||
pPage->PageType = ( HB_BYTE ) HB_GET_LE_UINT16( pPage->node.intNode.attr );
|
||||
pPage->Left = HB_GET_LE_UINT32( pPage->node.intNode.leftPtr );
|
||||
pPage->Right = HB_GET_LE_UINT32( pPage->node.intNode.rightPtr );
|
||||
@@ -2365,7 +2361,8 @@ static void hb_cdxPageStore( LPCDXPAGE pPage )
|
||||
#endif
|
||||
}
|
||||
hb_cdxIndexPageWrite( pPage->TagParent->pIndex, pPage->Page,
|
||||
( const HB_BYTE * ) &pPage->node, HB_FALSE );
|
||||
( const HB_BYTE * ) &pPage->node,
|
||||
pPage->TagParent->pIndex->uiPageLen );
|
||||
#ifdef HB_CDX_DBGCODE_EXT
|
||||
hb_cdxPageCheckKeys( pPage );
|
||||
#endif
|
||||
@@ -3433,8 +3430,8 @@ static void hb_cdxTagHeaderStore( LPCDXTAG pTag )
|
||||
memset( &tagHeader, 0, sizeof( tagHeader ) );
|
||||
HB_PUT_LE_UINT32( tagHeader.rootPtr, pTag->RootBlock );
|
||||
HB_PUT_LE_UINT16( tagHeader.keySize, pTag->uiLen );
|
||||
HB_PUT_LE_UINT16( tagHeader.headerLen, CDX_HEADERLEN );
|
||||
HB_PUT_LE_UINT16( tagHeader.pageLen, CDX_PAGELEN );
|
||||
HB_PUT_LE_UINT16( tagHeader.headerLen, pTag->pIndex->uiHeaderLen );
|
||||
HB_PUT_LE_UINT16( tagHeader.pageLen, pTag->pIndex->uiPageLen );
|
||||
tagHeader.indexOpt = pTag->OptFlags;
|
||||
if( pTag->TagBlock == 0 )
|
||||
{
|
||||
@@ -3471,7 +3468,8 @@ static void hb_cdxTagHeaderStore( LPCDXTAG pTag )
|
||||
}
|
||||
}
|
||||
hb_cdxIndexPageWrite( pTag->pIndex, pTag->TagBlock,
|
||||
( const HB_BYTE * ) &tagHeader, HB_TRUE );
|
||||
( const HB_BYTE * ) &tagHeader,
|
||||
sizeof( tagHeader ) );
|
||||
}
|
||||
|
||||
#if defined( HB_SIXCDX )
|
||||
@@ -3496,7 +3494,7 @@ static void hb_cdxTagLoad( LPCDXTAG pTag )
|
||||
|
||||
/* read the page from a file */
|
||||
hb_cdxIndexPageRead( pTag->pIndex, pTag->TagBlock,
|
||||
( HB_BYTE * ) &tagHeader, HB_TRUE );
|
||||
( HB_BYTE * ) &tagHeader, sizeof( tagHeader ) );
|
||||
|
||||
uiForPos = HB_GET_LE_UINT16( tagHeader.forExpPos );
|
||||
uiForLen = HB_GET_LE_UINT16( tagHeader.forExpLen );
|
||||
@@ -3723,9 +3721,8 @@ static void hb_cdxTagClose( LPCDXTAG pTag )
|
||||
pTag->RootPage = NULL;
|
||||
}
|
||||
if( pTag->TagChanged )
|
||||
{
|
||||
hb_cdxTagHeaderStore( pTag );
|
||||
}
|
||||
|
||||
pTag->fRePos = HB_TRUE;
|
||||
}
|
||||
|
||||
@@ -3739,7 +3736,7 @@ static void hb_cdxTagOpen( LPCDXTAG pTag )
|
||||
if( ! pTag->RootPage )
|
||||
{
|
||||
hb_cdxIndexPageRead( pTag->pIndex, pTag->TagBlock,
|
||||
( HB_BYTE * ) &tagHeader, HB_TRUE );
|
||||
( HB_BYTE * ) &tagHeader, sizeof( tagHeader ) );
|
||||
pTag->RootBlock = HB_GET_LE_UINT32( tagHeader.rootPtr );
|
||||
if( pTag->RootBlock && pTag->RootBlock != CDX_DUMMYNODE )
|
||||
pTag->RootPage = hb_cdxPageNew( pTag, NULL, pTag->RootBlock );
|
||||
@@ -4797,6 +4794,12 @@ static LPCDXINDEX hb_cdxIndexNew( CDXAREAP pArea )
|
||||
pIndex->pFile = NULL;
|
||||
pIndex->pArea = pArea;
|
||||
pIndex->nextAvail = CDX_DUMMYNODE;
|
||||
pIndex->uiHeaderLen = CDX_HEADERLEN;
|
||||
pIndex->uiPageLen = CDX_PAGELEN;
|
||||
pIndex->uiPageBits = CDX_PAGELEN_BITS;
|
||||
while( ( 1 << pIndex->uiPageBits ) < pIndex->uiPageLen )
|
||||
++pIndex->uiPageBits;
|
||||
|
||||
return pIndex;
|
||||
}
|
||||
|
||||
@@ -8693,6 +8696,11 @@ static HB_ERRCODE hb_cdxOrderInfo( CDXAREAP pArea, HB_USHORT uiIndex, LPDBORDERI
|
||||
DBOI_TYPE_COMPOUND : DBOI_TYPE_UNDEF );
|
||||
break;
|
||||
|
||||
case DBOI_INDEXPAGESIZE:
|
||||
pInfo->itmResult = hb_itemPutNI( pInfo->itmResult, pTag ?
|
||||
pTag->pIndex->uiPageLen : 0 );
|
||||
break;
|
||||
|
||||
default:
|
||||
return SUPER_ORDINFO( ( AREAP ) pArea, uiIndex, pInfo );
|
||||
|
||||
|
||||
@@ -7652,6 +7652,9 @@ static HB_ERRCODE hb_nsxOrderInfo( NSXAREAP pArea, HB_USHORT uiIndex, LPDBORDERI
|
||||
pInfo->itmResult = hb_itemPutNI( pInfo->itmResult,
|
||||
pTag->pIndex->iTags > 1 ? DBOI_TYPE_COMPOUND : DBOI_TYPE_COMPACT );
|
||||
break;
|
||||
case DBOI_INDEXPAGESIZE:
|
||||
pInfo->itmResult = hb_itemPutNI( pInfo->itmResult, NSX_PAGELEN );
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if( pInfo->itmResult )
|
||||
@@ -7776,6 +7779,7 @@ static HB_ERRCODE hb_nsxOrderInfo( NSXAREAP pArea, HB_USHORT uiIndex, LPDBORDERI
|
||||
case DBOI_ORDERCOUNT:
|
||||
case DBOI_SCOPEEVAL:
|
||||
case DBOI_UPDATECOUNTER:
|
||||
case DBOI_INDEXPAGESIZE:
|
||||
hb_itemPutNI( pInfo->itmResult, 0 );
|
||||
break;
|
||||
case DBOI_FILEHANDLE:
|
||||
|
||||
@@ -7264,6 +7264,9 @@ static HB_ERRCODE hb_ntxOrderInfo( NTXAREAP pArea, HB_USHORT uiIndex, LPDBORDERI
|
||||
DBOI_TYPE_COMPOUND : DBOI_TYPE_NONCOMPACT );
|
||||
#endif
|
||||
break;
|
||||
case DBOI_INDEXPAGESIZE:
|
||||
hb_itemPutNI( pInfo->itmResult, NTXBLOCKSIZE );
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if( pInfo->itmResult )
|
||||
@@ -7388,6 +7391,7 @@ static HB_ERRCODE hb_ntxOrderInfo( NTXAREAP pArea, HB_USHORT uiIndex, LPDBORDERI
|
||||
case DBOI_ORDERCOUNT:
|
||||
case DBOI_SCOPEEVAL:
|
||||
case DBOI_UPDATECOUNTER:
|
||||
case DBOI_INDEXPAGESIZE:
|
||||
hb_itemPutNI( pInfo->itmResult, 0 );
|
||||
break;
|
||||
case DBOI_FILEHANDLE:
|
||||
|
||||
Reference in New Issue
Block a user