2017-09-13 11:40 UTC Viktor Szakats (vszakats users.noreply.github.com)
* config/*/*.mk
* config/*.mk
* config/postinst.hb
* ChangeLog.txt
* src/rdd/usrrdd/rdds/*.prg
* sync with 3.4 fork minor code changes, comments, some strings
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -44,9 +44,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "rddsys.ch"
|
||||
#include "hbusrrdd.ch"
|
||||
#include "dbinfo.ch"
|
||||
#include "hbusrrdd.ch"
|
||||
#include "rddsys.ch"
|
||||
|
||||
/*
|
||||
* DBTCDX RDD
|
||||
@@ -62,7 +62,6 @@ REQUEST DBFFPT
|
||||
ANNOUNCE DBTCDX
|
||||
|
||||
FUNCTION DBTCDX_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, pSuperRddID )
|
||||
|
||||
RETURN USRRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, ;
|
||||
"DBFCDX", {}, pSuperRddID ) /* We are inheriting from DBFCDX */
|
||||
|
||||
|
||||
@@ -44,9 +44,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "rddsys.ch"
|
||||
#include "hbusrrdd.ch"
|
||||
#include "dbinfo.ch"
|
||||
#include "hbusrrdd.ch"
|
||||
#include "rddsys.ch"
|
||||
|
||||
/*
|
||||
* FPTCDX RDD
|
||||
@@ -58,11 +58,10 @@
|
||||
REQUEST DBFCDX
|
||||
REQUEST DBFFPT
|
||||
|
||||
/* Announce our RDD for forign REQUESTs */
|
||||
/* Announce our RDD for foreign REQUESTs */
|
||||
ANNOUNCE FPTCDX
|
||||
|
||||
FUNCTION FPTCDX_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, pSuperRddID )
|
||||
|
||||
RETURN USRRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, ;
|
||||
"DBFCDX", {}, pSuperRddID ) /* We are inheriting from DBFCDX */
|
||||
|
||||
|
||||
@@ -46,16 +46,16 @@
|
||||
|
||||
/*
|
||||
* A simple RDD which adds automatically update HSX indexes to DBFCDX
|
||||
* To create new HSX index for current work area use: HSX_CREATE()
|
||||
* To open already existing one use HSX_OPEN(),
|
||||
* To close use: HSX_CLOSE()
|
||||
* To retieve an handle use: HSX_HANDLE()
|
||||
* To create new HSX index for current work area use: hsx_Create()
|
||||
* To open already existing one use hsx_Open(),
|
||||
* To close use: hsx_Close()
|
||||
* To retrieve an handle use: hsx_Handle()
|
||||
*/
|
||||
|
||||
#include "rddsys.ch"
|
||||
#include "hbusrrdd.ch"
|
||||
#include "fileio.ch"
|
||||
#include "dbinfo.ch"
|
||||
#include "fileio.ch"
|
||||
#include "hbusrrdd.ch"
|
||||
#include "rddsys.ch"
|
||||
|
||||
ANNOUNCE HSCDX
|
||||
|
||||
@@ -63,8 +63,8 @@ ANNOUNCE HSCDX
|
||||
* methods: NEW and RELEASE receive pointer to work area structure
|
||||
* not work area number. It's necessary because the can be executed
|
||||
* before work area is allocated
|
||||
* these methods does not have to execute SUPER methods - these is
|
||||
* always done by low level USRRDD code
|
||||
* these methods does not have to execute SUPER methods - this is
|
||||
* always done by low-level USRRDD code
|
||||
*/
|
||||
|
||||
STATIC FUNCTION _HSX_NEW( pWA )
|
||||
@@ -72,7 +72,7 @@ STATIC FUNCTION _HSX_NEW( pWA )
|
||||
LOCAL aWData := { .F., {}, {} }
|
||||
|
||||
/*
|
||||
* Set in our private AREA item the array where we will kepp HSX indexes
|
||||
* Set in our private AREA item the array where we will keep HSX indexes
|
||||
* and HOT buffer flag
|
||||
*/
|
||||
|
||||
@@ -102,8 +102,7 @@ STATIC FUNCTION _HSX_GOCOLD( nWA )
|
||||
|
||||
LOCAL nResult, aWData, nHSX, nRecNo, nKeyNo
|
||||
|
||||
nResult := UR_SUPER_GOCOLD( nWA )
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_GOCOLD( nWA ) ) == HB_SUCCESS
|
||||
aWData := USRRDD_AREADATA( nWA )
|
||||
IF aWData[ 1 ]
|
||||
IF ! Empty( aWData[ 2 ] )
|
||||
@@ -129,8 +128,7 @@ STATIC FUNCTION _HSX_GOHOT( nWA )
|
||||
|
||||
LOCAL nResult, aWData
|
||||
|
||||
nResult := UR_SUPER_GOHOT( nWA )
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_GOHOT( nWA ) ) == HB_SUCCESS
|
||||
aWData := USRRDD_AREADATA( nWA )
|
||||
aWData[ 1 ] := .T.
|
||||
ENDIF
|
||||
@@ -141,8 +139,7 @@ STATIC FUNCTION _HSX_APPEND( nWA, lUnlockAll )
|
||||
|
||||
LOCAL nResult, aWData
|
||||
|
||||
nResult := UR_SUPER_APPEND( nWA, lUnlockAll )
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_APPEND( nWA, lUnlockAll ) ) == HB_SUCCESS
|
||||
aWData := USRRDD_AREADATA( nWA )
|
||||
aWData[ 1 ] := .T.
|
||||
ENDIF
|
||||
@@ -154,7 +151,7 @@ STATIC FUNCTION _HSX_APPEND( nWA, lUnlockAll )
|
||||
* with current work are and automatically updated.
|
||||
*/
|
||||
|
||||
FUNCTION HSX_CREATE( cFile, cExpr, nKeySize, nBufSize, lCase, nFiltSet )
|
||||
FUNCTION hsx_Create( cFile, cExpr, nKeySize, nBufSize, lCase, nFiltSet )
|
||||
|
||||
LOCAL aWData, nHsx := -1, nOpenMode
|
||||
|
||||
@@ -164,9 +161,7 @@ FUNCTION HSX_CREATE( cFile, cExpr, nKeySize, nBufSize, lCase, nFiltSet )
|
||||
aWData := USRRDD_AREADATA( Select() )
|
||||
nOpenMode := iif( dbInfo( DBI_SHARED ), 1, 0 ) + ;
|
||||
iif( dbInfo( DBI_ISREADONLY ), 2, 0 )
|
||||
nHsx := hs_Index( cFile, cExpr, nKeySize, nOpenMode, ;
|
||||
nBufSize, lCase, nFiltSet )
|
||||
IF nHsx >= 0
|
||||
IF ( nHsx := hs_Index( cFile, cExpr, nKeySize, nOpenMode, nBufSize, lCase, nFiltSet ) ) >= 0
|
||||
AAdd( aWData[ 2 ], nHsx )
|
||||
AAdd( aWData[ 3 ], cFile )
|
||||
ENDIF
|
||||
@@ -174,7 +169,7 @@ FUNCTION HSX_CREATE( cFile, cExpr, nKeySize, nBufSize, lCase, nFiltSet )
|
||||
|
||||
RETURN nHsx
|
||||
|
||||
PROCEDURE HSX_OPEN( cFile, nBufSize )
|
||||
PROCEDURE hsx_Open( cFile, nBufSize )
|
||||
|
||||
LOCAL aWData, nHsx, nOpenMode
|
||||
|
||||
@@ -184,8 +179,7 @@ PROCEDURE HSX_OPEN( cFile, nBufSize )
|
||||
aWData := USRRDD_AREADATA( Select() )
|
||||
nOpenMode := iif( dbInfo( DBI_SHARED ), 1, 0 ) + ;
|
||||
iif( dbInfo( DBI_ISREADONLY ), 2, 0 )
|
||||
nHsx := hs_Open( cFile, nBufSize, nOpenMode )
|
||||
IF nHsx >= 0
|
||||
IF ( nHsx := hs_Open( cFile, nBufSize, nOpenMode ) ) >= 0
|
||||
AAdd( aWData[ 2 ], nHsx )
|
||||
AAdd( aWData[ 3 ], cFile )
|
||||
ENDIF
|
||||
@@ -193,20 +187,21 @@ PROCEDURE HSX_OPEN( cFile, nBufSize )
|
||||
|
||||
RETURN
|
||||
|
||||
PROCEDURE HSX_CLOSE( xHSX )
|
||||
PROCEDURE hsx_Close( xHSX )
|
||||
|
||||
LOCAL aWData, nSlot
|
||||
|
||||
IF Used() .AND. rddName() == "HSCDX"
|
||||
aWData := USRRDD_AREADATA( Select() )
|
||||
IF HB_ISNUMERIC( xHSX )
|
||||
DO CASE
|
||||
CASE HB_ISNUMERIC( xHSX )
|
||||
nSlot := AScan( aWData[ 2 ], xHSX )
|
||||
ELSEIF HB_ISSTRING( xHSX )
|
||||
CASE HB_ISSTRING( xHSX )
|
||||
nSlot := AScan( aWData[ 3 ], {| _1 | _1 == xHSX } )
|
||||
ELSE
|
||||
OTHERWISE
|
||||
nSlot := 0
|
||||
ENDIF
|
||||
IF nSlot != 0
|
||||
ENDCASE
|
||||
IF nSlot > 0
|
||||
hb_ADel( aWData[ 2 ], nSlot, .T. )
|
||||
hb_ADel( aWData[ 3 ], nSlot, .T. )
|
||||
ENDIF
|
||||
@@ -214,7 +209,7 @@ PROCEDURE HSX_CLOSE( xHSX )
|
||||
|
||||
RETURN
|
||||
|
||||
FUNCTION HSX_HANDLE( cFile )
|
||||
FUNCTION hsx_Handle( cFile )
|
||||
|
||||
LOCAL aWData, nSlot
|
||||
|
||||
@@ -222,13 +217,13 @@ FUNCTION HSX_HANDLE( cFile )
|
||||
aWData := USRRDD_AREADATA( Select() )
|
||||
nSlot := AScan( aWData[ 3 ], {| _1 | _1 == cFile } )
|
||||
IF nSlot != 0
|
||||
RETURN aWData[ 2, nSlot ]
|
||||
RETURN aWData[ 2 ][ nSlot ]
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN -1
|
||||
|
||||
FUNCTION HSX_FILE( nHsx )
|
||||
FUNCTION hsx_File( nHsx )
|
||||
|
||||
LOCAL aWData, nSlot
|
||||
|
||||
@@ -236,20 +231,20 @@ FUNCTION HSX_FILE( nHsx )
|
||||
aWData := USRRDD_AREADATA( Select() )
|
||||
nSlot := AScan( aWData[ 3 ], nHsx )
|
||||
IF nSlot != 0
|
||||
RETURN aWData[ 3, nSlot ]
|
||||
RETURN aWData[ 3 ][ nSlot ]
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN ""
|
||||
|
||||
FUNCTION HSX_GET( nSlot )
|
||||
FUNCTION hsx_Get( nSlot )
|
||||
|
||||
LOCAL aWData
|
||||
|
||||
IF Used() .AND. rddName() == "HSCDX"
|
||||
aWData := USRRDD_AREADATA( Select() )
|
||||
IF nSlot > 0 .AND. nSlot <= Len( aWData[ 2 ] )
|
||||
RETURN aWData[ 2, nSlot ]
|
||||
RETURN aWData[ 2 ][ nSlot ]
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
@@ -269,11 +264,11 @@ FUNCTION HSCDX_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, pSuper
|
||||
LOCAL cSuperRDD := "DBFCDX" /* We are inheriting from DBFCDX */
|
||||
LOCAL aMyFunc[ UR_METHODCOUNT ]
|
||||
|
||||
aMyFunc[ UR_NEW ] := ( @_HSX_NEW() )
|
||||
aMyFunc[ UR_CLOSE ] := ( @_HSX_CLOSE() )
|
||||
aMyFunc[ UR_GOCOLD ] := ( @_HSX_GOCOLD() )
|
||||
aMyFunc[ UR_GOHOT ] := ( @_HSX_GOHOT() )
|
||||
aMyFunc[ UR_APPEND ] := ( @_HSX_APPEND() )
|
||||
aMyFunc[ UR_NEW ] := @_HSX_NEW()
|
||||
aMyFunc[ UR_CLOSE ] := @_HSX_CLOSE()
|
||||
aMyFunc[ UR_GOCOLD ] := @_HSX_GOCOLD()
|
||||
aMyFunc[ UR_GOHOT ] := @_HSX_GOHOT()
|
||||
aMyFunc[ UR_APPEND ] := @_HSX_APPEND()
|
||||
|
||||
RETURN USRRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, ;
|
||||
cSuperRDD, aMyFunc, pSuperRddID )
|
||||
|
||||
@@ -45,45 +45,43 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* A simple RDD which introduce logging to file. It inheriths from
|
||||
* A simple RDD which introduce logging to file. It inherits from
|
||||
* any existent RDD but if you write / replace / delete something
|
||||
* on tables it writes changes in a log file.
|
||||
*/
|
||||
|
||||
#include "rddsys.ch"
|
||||
#include "hbusrrdd.ch"
|
||||
#include "fileio.ch"
|
||||
#include "dbinfo.ch"
|
||||
#include "fileio.ch"
|
||||
#include "hbusrrdd.ch"
|
||||
#include "rddsys.ch"
|
||||
|
||||
#define ARRAY_FILENAME 1
|
||||
#define ARRAY_FHANDLE 2
|
||||
#define ARRAY_TAG 3
|
||||
#define ARRAY_ACTIVE 4
|
||||
#define ARRAY_RDDNAME 5
|
||||
#define ARRAY_MSGLOGBLOCK 6
|
||||
#define ARRAY_USERLOGBLOCK 7
|
||||
#define ARRAY_FILENAME 1
|
||||
#define ARRAY_FHANDLE 2
|
||||
#define ARRAY_TAG 3
|
||||
#define ARRAY_ACTIVE 4
|
||||
#define ARRAY_RDDNAME 5
|
||||
#define ARRAY_MSGLOGBLOCK 6
|
||||
#define ARRAY_USERLOGBLOCK 7
|
||||
|
||||
ANNOUNCE LOGRDD
|
||||
|
||||
DYNAMIC HB_LOGRDDINHERIT /* To be defined at user level */
|
||||
DYNAMIC hb_LogRddInherit /* To be defined at user level */
|
||||
|
||||
STATIC s_nRddID := -1
|
||||
|
||||
STATIC FUNCTION LOGRDD_INIT( nRDD )
|
||||
|
||||
LOCAL lActive, cFileName, cTag, cRDDName
|
||||
|
||||
/* Defaults */
|
||||
|
||||
cFileName := "changes.log"
|
||||
lActive := .F.
|
||||
cTag := NetName() + "\" + hb_UserName()
|
||||
cRDDName := hb_LogRddInherit()
|
||||
LOCAL cFileName := "changes.log"
|
||||
LOCAL lActive := .F.
|
||||
LOCAL cTag := NetName() + "\" + hb_UserName()
|
||||
LOCAL cRDDName := hb_LogRddInherit()
|
||||
|
||||
/* Log File will be open later so user can change parameters */
|
||||
|
||||
/* Store data in RDD cargo */
|
||||
/* cFileName, nHandle, cTag, lActive, cRDDName, bMsgLogBlock, bUserLogBlock */
|
||||
/* cFileName, hFile, cTag, lActive, cRDDName, bMsgLogBlock, bUserLogBlock */
|
||||
USRRDD_RDDDATA( nRDD, { cFileName, NIL, cTag, lActive, cRDDName, NIL, NIL } )
|
||||
|
||||
RETURN HB_SUCCESS
|
||||
@@ -105,9 +103,9 @@ STATIC FUNCTION LOGRDD_EXIT( nRDD )
|
||||
|
||||
STATIC FUNCTION LOGRDD_CREATE( nWA, aOpenInfo )
|
||||
|
||||
LOCAL nResult := UR_SUPER_CREATE( nWA, aOpenInfo )
|
||||
LOCAL nResult
|
||||
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_CREATE( nWA, aOpenInfo ) ) == HB_SUCCESS
|
||||
ToLog( "CREATE", nWA, aOpenInfo )
|
||||
ENDIF
|
||||
|
||||
@@ -117,9 +115,9 @@ STATIC FUNCTION LOGRDD_CREATE( nWA, aOpenInfo )
|
||||
|
||||
STATIC FUNCTION LOGRDD_CREATEFIELDS( nWA, aStruct )
|
||||
|
||||
LOCAL nResult := UR_SUPER_CREATEFIELDS( nWA, aStruct )
|
||||
LOCAL nResult
|
||||
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_CREATEFIELDS( nWA, aStruct ) ) == HB_SUCCESS
|
||||
ToLog( "CREATEFIELDS", nWA, aStruct )
|
||||
ENDIF
|
||||
|
||||
@@ -129,9 +127,9 @@ STATIC FUNCTION LOGRDD_CREATEFIELDS( nWA, aStruct )
|
||||
|
||||
STATIC FUNCTION LOGRDD_OPEN( nWA, aOpenInfo )
|
||||
|
||||
LOCAL nResult := UR_SUPER_OPEN( nWA, aOpenInfo )
|
||||
LOCAL nResult
|
||||
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_OPEN( nWA, aOpenInfo ) ) == HB_SUCCESS
|
||||
ToLog( "OPEN", nWA, aOpenInfo )
|
||||
ENDIF
|
||||
|
||||
@@ -141,11 +139,11 @@ STATIC FUNCTION LOGRDD_OPEN( nWA, aOpenInfo )
|
||||
|
||||
STATIC FUNCTION LOGRDD_CLOSE( nWA )
|
||||
|
||||
LOCAL cFile := dbInfo( DBI_FULLPATH )
|
||||
LOCAL cAlias := Alias()
|
||||
LOCAL nResult := UR_SUPER_CLOSE( nWA )
|
||||
LOCAL cFile := dbInfo( DBI_FULLPATH )
|
||||
LOCAL cAlias := Alias()
|
||||
LOCAL nResult
|
||||
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_CLOSE( nWA ) ) == HB_SUCCESS
|
||||
ToLog( "CLOSE", nWA, cFile, cAlias )
|
||||
ENDIF
|
||||
|
||||
@@ -153,9 +151,9 @@ STATIC FUNCTION LOGRDD_CLOSE( nWA )
|
||||
|
||||
STATIC FUNCTION LOGRDD_APPEND( nWA, lUnlockAll )
|
||||
|
||||
LOCAL nResult := UR_SUPER_APPEND( nWA, lUnlockAll )
|
||||
LOCAL nResult
|
||||
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_APPEND( nWA, lUnlockAll ) ) == HB_SUCCESS
|
||||
ToLog( "APPEND", nWA, lUnlockAll )
|
||||
ENDIF
|
||||
|
||||
@@ -163,9 +161,9 @@ STATIC FUNCTION LOGRDD_APPEND( nWA, lUnlockAll )
|
||||
|
||||
STATIC FUNCTION LOGRDD_DELETE( nWA )
|
||||
|
||||
LOCAL nResult := UR_SUPER_DELETE( nWA )
|
||||
LOCAL nResult
|
||||
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_DELETE( nWA ) ) == HB_SUCCESS
|
||||
ToLog( "DELETE", nWA )
|
||||
ENDIF
|
||||
|
||||
@@ -173,9 +171,9 @@ STATIC FUNCTION LOGRDD_DELETE( nWA )
|
||||
|
||||
STATIC FUNCTION LOGRDD_RECALL( nWA )
|
||||
|
||||
LOCAL nResult := UR_SUPER_RECALL( nWA )
|
||||
LOCAL nResult
|
||||
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_RECALL( nWA ) ) == HB_SUCCESS
|
||||
ToLog( "RECALL", nWA )
|
||||
ENDIF
|
||||
|
||||
@@ -186,9 +184,9 @@ STATIC FUNCTION LOGRDD_PUTVALUE( nWA, nField, xValue )
|
||||
LOCAL xOldValue := FieldGet( nField )
|
||||
LOCAL nResult := UR_SUPER_PUTVALUE( nWA, nField, xValue )
|
||||
|
||||
// Log Only Changes
|
||||
// Log changes only
|
||||
|
||||
IF !( xOldValue == xValue )
|
||||
IF ! xOldValue == xValue
|
||||
ToLog( "PUTVALUE", nWA, nField, xValue, xOldValue )
|
||||
ENDIF
|
||||
|
||||
@@ -196,9 +194,9 @@ STATIC FUNCTION LOGRDD_PUTVALUE( nWA, nField, xValue )
|
||||
|
||||
STATIC FUNCTION LOGRDD_ZAP( nWA )
|
||||
|
||||
LOCAL nResult := UR_SUPER_ZAP( nWA )
|
||||
LOCAL nResult
|
||||
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_ZAP( nWA ) ) == HB_SUCCESS
|
||||
ToLog( "ZAP", nWA )
|
||||
ENDIF
|
||||
|
||||
@@ -220,17 +218,17 @@ FUNCTION LOGRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, pSupe
|
||||
|
||||
s_nRddID := nRddID
|
||||
|
||||
aMyFunc[ UR_INIT ] := ( @LOGRDD_INIT() )
|
||||
aMyFunc[ UR_EXIT ] := ( @LOGRDD_EXIT() )
|
||||
aMyFunc[ UR_CREATE ] := ( @LOGRDD_CREATE() )
|
||||
aMyFunc[ UR_CREATEFIELDS ] := ( @LOGRDD_CREATEFIELDS() )
|
||||
aMyFunc[ UR_OPEN ] := ( @LOGRDD_OPEN() )
|
||||
aMyFunc[ UR_CLOSE ] := ( @LOGRDD_CLOSE() )
|
||||
aMyFunc[ UR_APPEND ] := ( @LOGRDD_APPEND() )
|
||||
aMyFunc[ UR_DELETE ] := ( @LOGRDD_DELETE() )
|
||||
aMyFunc[ UR_RECALL ] := ( @LOGRDD_RECALL() )
|
||||
aMyFunc[ UR_PUTVALUE ] := ( @LOGRDD_PUTVALUE() )
|
||||
aMyFunc[ UR_ZAP ] := ( @LOGRDD_ZAP() )
|
||||
aMyFunc[ UR_INIT ] := @LOGRDD_INIT()
|
||||
aMyFunc[ UR_EXIT ] := @LOGRDD_EXIT()
|
||||
aMyFunc[ UR_CREATE ] := @LOGRDD_CREATE()
|
||||
aMyFunc[ UR_CREATEFIELDS ] := @LOGRDD_CREATEFIELDS()
|
||||
aMyFunc[ UR_OPEN ] := @LOGRDD_OPEN()
|
||||
aMyFunc[ UR_CLOSE ] := @LOGRDD_CLOSE()
|
||||
aMyFunc[ UR_APPEND ] := @LOGRDD_APPEND()
|
||||
aMyFunc[ UR_DELETE ] := @LOGRDD_DELETE()
|
||||
aMyFunc[ UR_RECALL ] := @LOGRDD_RECALL()
|
||||
aMyFunc[ UR_PUTVALUE ] := @LOGRDD_PUTVALUE()
|
||||
aMyFunc[ UR_ZAP ] := @LOGRDD_ZAP()
|
||||
|
||||
RETURN USRRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, ;
|
||||
cSuperRDD, aMyFunc, pSuperRddID )
|
||||
@@ -241,9 +239,7 @@ INIT PROCEDURE _LOGRDD_INIT()
|
||||
|
||||
RETURN
|
||||
|
||||
/* -------------------------------------------------- */
|
||||
/* USER UTILITY FUNCTIONS */
|
||||
/* -------------------------------------------------- */
|
||||
/* User utility functions */
|
||||
|
||||
FUNCTION hb_LogRddLogFileName( cFileName )
|
||||
|
||||
@@ -259,7 +255,6 @@ FUNCTION hb_LogRddLogFileName( cFileName )
|
||||
IF HB_ISSTRING( cFileName )
|
||||
aRDDData[ ARRAY_FILENAME ] := cFileName
|
||||
ENDIF
|
||||
|
||||
ENDIF
|
||||
|
||||
RETURN cOldFileName
|
||||
@@ -278,7 +273,6 @@ FUNCTION hb_LogRddTag( cTag )
|
||||
IF HB_ISSTRING( cTag )
|
||||
aRDDData[ ARRAY_TAG ] := cTag
|
||||
ENDIF
|
||||
|
||||
ENDIF
|
||||
|
||||
RETURN cOldTag
|
||||
@@ -297,7 +291,6 @@ FUNCTION hb_LogRddActive( lActive )
|
||||
IF HB_ISLOGICAL( lActive )
|
||||
aRDDData[ ARRAY_ACTIVE ] := lActive
|
||||
ENDIF
|
||||
|
||||
ENDIF
|
||||
|
||||
RETURN lOldActive
|
||||
@@ -316,7 +309,6 @@ FUNCTION hb_LogRddMsgLogBlock( bMsgLogBlock )
|
||||
IF HB_ISEVALITEM( bMsgLogBlock )
|
||||
aRDDData[ ARRAY_MSGLOGBLOCK ] := bMsgLogBlock
|
||||
ENDIF
|
||||
|
||||
ENDIF
|
||||
|
||||
RETURN bOldMsgLogBlock
|
||||
@@ -335,114 +327,102 @@ FUNCTION hb_LogRddUserLogBlock( bUserLogBlock )
|
||||
IF HB_ISEVALITEM( bUserLogBlock )
|
||||
aRDDData[ ARRAY_USERLOGBLOCK ] := bUserLogBlock
|
||||
ENDIF
|
||||
|
||||
ENDIF
|
||||
|
||||
RETURN bOldUserLogBlock
|
||||
|
||||
FUNCTION hb_LogRddValueToText( uValue )
|
||||
|
||||
LOCAL cType := ValType( uValue )
|
||||
LOCAL cType
|
||||
LOCAL cText
|
||||
|
||||
DO CASE
|
||||
CASE cType == "C"
|
||||
cText := hb_StrToExp( uValue )
|
||||
|
||||
CASE cType == "N"
|
||||
cText := hb_ntos( uValue )
|
||||
|
||||
CASE cType == "D"
|
||||
cText := DToS( uValue )
|
||||
cText := "0d" + iif( Empty( cText ), "00000000", cText )
|
||||
|
||||
OTHERWISE
|
||||
cText := hb_ValToStr( uValue )
|
||||
ENDCASE
|
||||
SWITCH cType := ValType( uValue )
|
||||
CASE "C" ; cText := hb_StrToExp( uValue ) ; EXIT
|
||||
CASE "N" ; cText := hb_ntos( uValue ) ; EXIT
|
||||
CASE "D" ; cText := DToS( uValue ) ; cText := "0d" + iif( Empty( cText ), "00000000", cText ) ; EXIT
|
||||
OTHERWISE ; cText := hb_ValToStr( uValue )
|
||||
ENDSWITCH
|
||||
|
||||
RETURN "[" + cType + "]>>>" + cText + "<<<"
|
||||
|
||||
/* -------------------------------------------------- */
|
||||
/* LOCAL UTILITY FUNCTIONS */
|
||||
/* -------------------------------------------------- */
|
||||
/* Local utility functions */
|
||||
|
||||
STATIC PROCEDURE OpenLogFile( nWA )
|
||||
|
||||
LOCAL aRDDData := USRRDD_RDDDATA( USRRDD_ID( nWA ) )
|
||||
LOCAL cFileName := aRDDData[ ARRAY_FILENAME ]
|
||||
LOCAL nHandle := aRDDData[ ARRAY_FHANDLE ]
|
||||
LOCAL lActive := aRDDData[ ARRAY_ACTIVE ]
|
||||
LOCAL hFile := aRDDData[ ARRAY_FHANDLE ]
|
||||
LOCAL lActive := aRDDData[ ARRAY_ACTIVE ]
|
||||
|
||||
// TraceLog( "nHandle " + CStr( nHandle ) )
|
||||
#if 0
|
||||
TraceLog( "hFile " + CStr( hFile ) )
|
||||
#endif
|
||||
|
||||
IF lActive .AND. nHandle == NIL
|
||||
IF lActive .AND. hFile == NIL
|
||||
|
||||
/* Open Access Log File */
|
||||
IF hb_FileExists( cFileName )
|
||||
nHandle := FOpen( cFileName, FO_READWRITE + FO_SHARED )
|
||||
hFile := FOpen( cFileName, FO_READWRITE + FO_SHARED )
|
||||
ELSE
|
||||
nHandle := FCreate( cFileName )
|
||||
hFile := FCreate( cFileName )
|
||||
/* Close and reopen in shared mode */
|
||||
IF FError() == 0 .AND. nHandle != F_ERROR
|
||||
FClose( nHandle )
|
||||
nHandle := FOpen( cFileName, FO_READWRITE + FO_SHARED )
|
||||
IF FError() == 0 .AND. hFile != F_ERROR
|
||||
FClose( hFile )
|
||||
hFile := FOpen( cFileName, FO_READWRITE + FO_SHARED )
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF FError() == 0 .AND. nHandle != F_ERROR
|
||||
IF FError() == 0 .AND. hFile != F_ERROR
|
||||
/* Move to end of file */
|
||||
FSeek( nHandle, 0, FS_END )
|
||||
FSeek( hFile, 0, FS_END )
|
||||
ELSE
|
||||
nHandle := NIL
|
||||
hFile := NIL
|
||||
ENDIF
|
||||
|
||||
aRDDData[ ARRAY_FHANDLE ] := nHandle
|
||||
|
||||
aRDDData[ ARRAY_FHANDLE ] := hFile
|
||||
ENDIF
|
||||
|
||||
RETURN
|
||||
|
||||
STATIC FUNCTION ToString( cCmd, nWA, xPar1, xPar2, xPar3 )
|
||||
|
||||
LOCAL cString
|
||||
|
||||
DO CASE
|
||||
CASE cCmd == "CREATE"
|
||||
// Parameters received: xPar1 = aOpenInfo
|
||||
cString := xPar1[ UR_OI_NAME ]
|
||||
CASE cCmd == "CREATEFIELDS"
|
||||
// Parameters received: xPar1 = aStruct
|
||||
cString := hb_ValToExp( xPar1 )
|
||||
CASE cCmd == "OPEN"
|
||||
// Parameters received: xPar1 = aOpenInfo
|
||||
cString := 'Table : "' + xPar1[ UR_OI_NAME ] + '", Alias : "' + Alias() + '", WorkArea : ' + hb_ntos( nWA )
|
||||
CASE cCmd == "CLOSE"
|
||||
// Parameters received: xPar1 = cTableName, xPar2 = cAlias
|
||||
cString := 'Table : "' + xPar1 + '", Alias : "' + xPar2 + '", WorkArea : ' + hb_ntos( nWA )
|
||||
CASE cCmd == "APPEND"
|
||||
// Parameters received: xPar1 = lUnlockAll
|
||||
cString := Alias() + "->RecNo() = " + hb_ntos( RecNo() )
|
||||
CASE cCmd == "DELETE"
|
||||
SWITCH cCmd
|
||||
CASE "CREATE"
|
||||
// Parameters received: xPar1: aOpenInfo
|
||||
RETURN xPar1[ UR_OI_NAME ]
|
||||
CASE "CREATEFIELDS"
|
||||
// Parameters received: xPar1: aStruct
|
||||
RETURN hb_ValToExp( xPar1 )
|
||||
CASE "OPEN"
|
||||
// Parameters received: xPar1: aOpenInfo
|
||||
RETURN 'Table: "' + xPar1[ UR_OI_NAME ] + '", Alias: "' + Alias() + '", WorkArea: ' + hb_ntos( nWA )
|
||||
CASE "CLOSE"
|
||||
// Parameters received: xPar1: cTableName, xPar2: cAlias
|
||||
RETURN 'Table: "' + xPar1 + '", Alias: "' + xPar2 + '", WorkArea: ' + hb_ntos( nWA )
|
||||
CASE "APPEND"
|
||||
// Parameters received: xPar1: lUnlockAll
|
||||
RETURN Alias() + "->RecNo() == " + hb_ntos( RecNo() )
|
||||
CASE "DELETE"
|
||||
// Parameters received: none
|
||||
cString := Alias() + "->RecNo() = " + hb_ntos( RecNo() )
|
||||
CASE cCmd == "RECALL"
|
||||
RETURN Alias() + "->RecNo() == " + hb_ntos( RecNo() )
|
||||
CASE "RECALL"
|
||||
// Parameters received: none
|
||||
cString := Alias() + "->RecNo() = " + hb_ntos( RecNo() )
|
||||
CASE cCmd == "PUTVALUE"
|
||||
// Parameters received: xPar1 = nField, xPar2 = xValue, xPar3 = xOldValue
|
||||
RETURN Alias() + "->RecNo() == " + hb_ntos( RecNo() )
|
||||
CASE "PUTVALUE"
|
||||
// Parameters received: xPar1: nField, xPar2: xValue, xPar3: xOldValue
|
||||
HB_SYMBOL_UNUSED( xPar3 ) // Here don't log previous value
|
||||
cString := Alias() + "(" + hb_ntos( RecNo() ) + ")->" + PadR( FieldName( xPar1 ), 10 ) + " := " + hb_LogRddValueToText( xPar2 )
|
||||
CASE cCmd == "ZAP"
|
||||
RETURN Alias() + "(" + hb_ntos( RecNo() ) + ")->" + PadR( FieldName( xPar1 ), 10 ) + " := " + hb_LogRddValueToText( xPar2 )
|
||||
CASE "ZAP"
|
||||
// Parameters received: none
|
||||
cString := 'Alias : "' + Alias() + ' Table : "' + dbInfo( DBI_FULLPATH ) + '"'
|
||||
ENDCASE
|
||||
RETURN 'Alias: "' + Alias() + ' Table: "' + dbInfo( DBI_FULLPATH ) + '"'
|
||||
ENDSWITCH
|
||||
|
||||
RETURN cString
|
||||
RETURN NIL
|
||||
|
||||
STATIC PROCEDURE ToLog( cCmd, nWA, xPar1, xPar2, xPar3 )
|
||||
|
||||
LOCAL aRDDData := USRRDD_RDDDATA( USRRDD_ID( nWA ) )
|
||||
LOCAL lActive := aRDDData[ ARRAY_ACTIVE ]
|
||||
LOCAL nHandle, cTag, cRDDName, bMsgLogBlock, bUserLogBlock, cLog
|
||||
LOCAL hFile, cTag, cRDDName, bMsgLogBlock, bUserLogBlock, cLog
|
||||
|
||||
// Check if logging system is active
|
||||
|
||||
@@ -455,14 +435,14 @@ STATIC PROCEDURE ToLog( cCmd, nWA, xPar1, xPar2, xPar3 )
|
||||
// If not defined a User codeblock
|
||||
IF ! HB_ISEVALITEM( bUserLogBlock )
|
||||
|
||||
nHandle := aRDDData[ ARRAY_FHANDLE ]
|
||||
hFile := aRDDData[ ARRAY_FHANDLE ]
|
||||
|
||||
// If log file is not already open I open now
|
||||
IF nHandle == NIL
|
||||
IF hFile == NIL
|
||||
OpenLogFile( nWA )
|
||||
ENDIF
|
||||
|
||||
IF nHandle != NIL
|
||||
IF hFile != NIL
|
||||
|
||||
bMsgLogBlock := aRDDData[ ARRAY_MSGLOGBLOCK ]
|
||||
|
||||
@@ -475,17 +455,13 @@ STATIC PROCEDURE ToLog( cCmd, nWA, xPar1, xPar2, xPar3 )
|
||||
ENDIF
|
||||
// Log to file only if cLog is a valid string
|
||||
IF HB_ISSTRING( cLog )
|
||||
FWrite( nHandle, cLog + hb_eol() )
|
||||
FWrite( hFile, cLog + hb_eol() )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
ELSE
|
||||
|
||||
// Otherwise I send all to user that is responsible to log everywhere
|
||||
Eval( bUserLogBlock, cTag, cRDDName, cCmd, nWA, xPar1, xPar2, xPar3 )
|
||||
|
||||
ENDIF
|
||||
|
||||
ENDIF
|
||||
|
||||
RETURN
|
||||
|
||||
@@ -46,14 +46,14 @@
|
||||
|
||||
/*
|
||||
* A simple RDD which introduce lock counters. It has full DBFCDX
|
||||
* functionality from which it inherits but if you execute dbRLock(100)
|
||||
* twice then you will have to also repeat call to dbRUnlock(100) to
|
||||
* functionality from which it inherits but if you execute dbRLock( 100 )
|
||||
* twice then you will have to also repeat call to dbRUnlock( 100 ) to
|
||||
* really unlock the record 100. The same if for FLock()
|
||||
* This idea comes from one of messages sent by Mindaugas Kavaliauskas.
|
||||
*/
|
||||
|
||||
#include "rddsys.ch"
|
||||
#include "hbusrrdd.ch"
|
||||
#include "rddsys.ch"
|
||||
|
||||
ANNOUNCE RLCDX
|
||||
|
||||
@@ -61,8 +61,8 @@ ANNOUNCE RLCDX
|
||||
* methods: NEW and RELEASE receive pointer to work area structure
|
||||
* not work area number. It's necessary because the can be executed
|
||||
* before work area is allocated
|
||||
* these methods does not have to execute SUPER methods - these is
|
||||
* always done by low level USRRDD code
|
||||
* these methods does not have to execute SUPER methods - this is
|
||||
* always done by low-level USRRDD code
|
||||
*/
|
||||
|
||||
STATIC FUNCTION RLCDX_NEW( pWA )
|
||||
@@ -86,10 +86,8 @@ STATIC FUNCTION RLCDX_LOCK( nWA, aLockInfo )
|
||||
|
||||
/* Convert EXCLUSIVE locks to DBLM_MULTIPLE */
|
||||
IF aLockInfo[ UR_LI_METHOD ] == DBLM_EXCLUSIVE
|
||||
|
||||
aLockInfo[ UR_LI_METHOD ] := DBLM_MULTIPLE
|
||||
aLockInfo[ UR_LI_RECORD ] := RecNo()
|
||||
|
||||
ENDIF
|
||||
|
||||
IF aLockInfo[ UR_LI_METHOD ] == DBLM_MULTIPLE /* RLOCK */
|
||||
@@ -107,14 +105,13 @@ STATIC FUNCTION RLCDX_LOCK( nWA, aLockInfo )
|
||||
IF aWData[ 1 ] > 0
|
||||
aLockInfo[ UR_LI_RESULT ] := .T.
|
||||
RETURN HB_SUCCESS
|
||||
ELSEIF ( i := AScan( aWData[ 2 ], {| x | x[ 1 ] == xRecID } ) ) != 0
|
||||
++aWData[ 2, i, 2 ]
|
||||
ELSEIF ( i := AScan( aWData[ 2 ], {| x | x[ 1 ] == xRecID } ) ) > 0
|
||||
++aWData[ 2 ][ i ][ 2 ]
|
||||
aLockInfo[ UR_LI_RESULT ] := .T.
|
||||
RETURN HB_SUCCESS
|
||||
ENDIF
|
||||
|
||||
nResult := UR_SUPER_LOCK( nWA, aLockInfo )
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_LOCK( nWA, aLockInfo ) ) == HB_SUCCESS
|
||||
IF aLockInfo[ UR_LI_RESULT ]
|
||||
AAdd( aWData[ 2 ], { xRecID, 1 } )
|
||||
ENDIF
|
||||
@@ -129,8 +126,7 @@ STATIC FUNCTION RLCDX_LOCK( nWA, aLockInfo )
|
||||
RETURN HB_SUCCESS
|
||||
ENDIF
|
||||
|
||||
nResult := UR_SUPER_LOCK( nWA, aLockInfo )
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_LOCK( nWA, aLockInfo ) ) == HB_SUCCESS
|
||||
|
||||
/* FLOCK always first remove all RLOCKs, even if it fails */
|
||||
ASize( aWData[ 2 ], 0 )
|
||||
@@ -153,8 +149,8 @@ STATIC FUNCTION RLCDX_UNLOCK( nWA, xRecID )
|
||||
LOCAL aWData := USRRDD_AREADATA( nWA ), i
|
||||
|
||||
IF HB_ISNUMERIC( xRecID ) .AND. xRecID > 0
|
||||
IF ( i := AScan( aWData[ 2 ], {| x | x[ 1 ] == xRecID } ) ) != 0
|
||||
IF --aWData[ 2, i, 2 ] > 0
|
||||
IF ( i := AScan( aWData[ 2 ], {| x | x[ 1 ] == xRecID } ) ) > 0
|
||||
IF --aWData[ 2 ][ i ][ 2 ] > 0
|
||||
RETURN HB_SUCCESS
|
||||
ENDIF
|
||||
hb_ADel( aWData[ 2 ], i, .T. )
|
||||
@@ -180,16 +176,15 @@ STATIC FUNCTION RLCDX_APPEND( nWA, lUnlockAll )
|
||||
|
||||
lUnlockAll := .F.
|
||||
|
||||
nResult := UR_SUPER_APPEND( nWA, lUnlockAll )
|
||||
IF nResult == HB_SUCCESS
|
||||
IF ( nResult := UR_SUPER_APPEND( nWA, lUnlockAll ) ) == HB_SUCCESS
|
||||
|
||||
aWData := USRRDD_AREADATA( nWA )
|
||||
IF aWData[ 1 ] == 0
|
||||
xRecId := RecNo()
|
||||
/* Some RDDs may allow to set phantom locks with RLOCK so we should
|
||||
check if it's not the case and increase the counter when it is */
|
||||
IF ( i := AScan( aWData[ 2 ], {| x | x[ 1 ] == xRecID } ) ) != 0
|
||||
++aWData[ 2, i, 2 ]
|
||||
IF ( i := AScan( aWData[ 2 ], {| x | x[ 1 ] == xRecID } ) ) > 0
|
||||
++aWData[ 2 ][ i ][ 2 ]
|
||||
ELSE
|
||||
AAdd( aWData[ 2 ], { xRecID, 1 } )
|
||||
ENDIF
|
||||
@@ -212,10 +207,10 @@ FUNCTION RLCDX_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, pSuper
|
||||
LOCAL cSuperRDD := "DBFCDX" /* We are inheriting from DBFCDX */
|
||||
LOCAL aMethods[ UR_METHODCOUNT ]
|
||||
|
||||
aMethods[ UR_NEW ] := ( @RLCDX_NEW() )
|
||||
aMethods[ UR_LOCK ] := ( @RLCDX_LOCK() )
|
||||
aMethods[ UR_UNLOCK ] := ( @RLCDX_UNLOCK() )
|
||||
aMethods[ UR_APPEND ] := ( @RLCDX_APPEND() )
|
||||
aMethods[ UR_NEW ] := @RLCDX_NEW()
|
||||
aMethods[ UR_LOCK ] := @RLCDX_LOCK()
|
||||
aMethods[ UR_UNLOCK ] := @RLCDX_UNLOCK()
|
||||
aMethods[ UR_APPEND ] := @RLCDX_APPEND()
|
||||
|
||||
RETURN USRRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, ;
|
||||
cSuperRDD, aMethods, pSuperRddID )
|
||||
|
||||
@@ -50,19 +50,18 @@
|
||||
* set default memo type to SMT
|
||||
*/
|
||||
|
||||
#include "rddsys.ch"
|
||||
#include "hbusrrdd.ch"
|
||||
#include "dbinfo.ch"
|
||||
#include "hbusrrdd.ch"
|
||||
#include "rddsys.ch"
|
||||
|
||||
/* Force linking DBFCDX and DBFFPT from which our RDD inherits */
|
||||
REQUEST DBFCDX
|
||||
REQUEST DBFFPT
|
||||
|
||||
/* Announce our RDD for forign REQUESTs */
|
||||
/* Announce our RDD for foreign REQUESTs */
|
||||
ANNOUNCE SMTCDX
|
||||
|
||||
FUNCTION SMTCDX_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, pSuperRddID )
|
||||
|
||||
RETURN USRRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, ;
|
||||
"DBFCDX", {}, pSuperRddID ) /* We are inheriting from DBFCDX */
|
||||
|
||||
|
||||
@@ -44,9 +44,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "rddsys.ch"
|
||||
#include "dbinfo.ch"
|
||||
#include "hbusrrdd.ch"
|
||||
#include "rddsys.ch"
|
||||
|
||||
/* Force linking DBFCDX from which our RDD inherits */
|
||||
REQUEST DBFCDX
|
||||
@@ -54,10 +54,8 @@ REQUEST DBFFPT
|
||||
|
||||
ANNOUNCE VFPCDX
|
||||
|
||||
/* We are inheriting from DBFCDX */
|
||||
FUNCTION VFPCDX_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, pSuperRddID )
|
||||
|
||||
/* We are inheriting from DBFCDX */
|
||||
|
||||
RETURN USRRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, "DBFCDX", {}, pSuperRddID )
|
||||
|
||||
INIT PROCEDURE VFPCDX_INIT()
|
||||
|
||||
Reference in New Issue
Block a user