From e67c40b7dec822cfa8b5b8036cee5de61ac6f2e3 Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Fri, 19 Sep 2008 22:43:02 +0000 Subject: [PATCH] 2008-09-20 00:42 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + harbour/source/rdd/wadetach.c + added .prg functions: hb_waDetach( [|], [] ) -> hb_waRequest( [], [], [<@xCargo>], [] ) -> The first one detach workarea from current thread and move it to special hidden holder. Before detaching all relations (parent and child) to detached workarea are cleared. The second one restores area from the holder and attach it to calling thread. + added xBase++ compatible functions DbRelease() / DbRequest() xBase++ users please test. If possible please also check what xBase++ does with relations and active RLOCKs/FLOCK on released WA. --- harbour/ChangeLog | 67 +++++++++++++++++++++++-------------- harbour/common.mak | 1 + harbour/source/rdd/Makefile | 1 + 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 7ae6bbfdb5..a016343b60 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,21 @@ 2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2008-09-20 00:42 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + + harbour/source/rdd/wadetach.c + + added .prg functions: + hb_waDetach( [|], [] ) -> + hb_waRequest( [], [], [<@xCargo>], [] ) + -> + The first one detach workarea from current thread and move it + to special hidden holder. Before detaching all relations (parent + and child) to detached workarea are cleared. + The second one restores area from the holder and attach it + to calling thread. + + added xBase++ compatible functions DbRelease() / DbRequest() + xBase++ users please test. If possible please also check what xBase++ + does with relations and active RLOCKs/FLOCK on released WA. + 2008-09-19 22:27 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/source/vm/set.c ! fixed casting @@ -37,40 +52,40 @@ ! fixed return value after rt error. * Added rt error as in clipper when OrdkeyVal is greater than 240, with default capabilities as in clipper. - code to test it: - FUNCTION MAIN() + code to test it: + FUNCTION MAIN() - LOCAL i - LOCAL nSec := SECONDS() + LOCAL i + LOCAL nSec := SECONDS() - REQUEST DBFCDX - RddSetDefault( "DBFCDX" ) + REQUEST DBFCDX + RddSetDefault( "DBFCDX" ) - DBCREATE( "__MYTEST", { { "test", "C", 241, 0 } } ) + DBCREATE( "__MYTEST", { { "test", "C", 241, 0 } } ) - USE __MYTEST - INDEX ON FIELD->Test TO __MYTEST + USE __MYTEST + INDEX ON FIELD->Test TO __MYTEST - FOR i := 1 TO 10 - APPEND BLANK - FIELD->test := Replicate( "1", 240 ) + Str( 10 - i, 1 ) - NEXT + FOR i := 1 TO 10 + APPEND BLANK + FIELD->test := Replicate( "1", 240 ) + Str( 10 - i, 1 ) + NEXT - DbGoTop() - ? &(OrdKey()) - ? "Length of &(OrdKey()) :" + Str( Len( &(OrdKey()) ) ) - ? OrdKeyVal() - ? "Length of OrdKeyVal() :" + Str( Len(OrdKeyVal()) ) - WHILE ! EOF() - ? Right( FIELD->Test, 1 ) - DbSkip() - ENDDO + DbGoTop() + ? &(OrdKey()) + ? "Length of &(OrdKey()) :" + Str( Len( &(OrdKey()) ) ) + ? OrdKeyVal() + ? "Length of OrdKeyVal() :" + Str( Len(OrdKeyVal()) ) + WHILE ! EOF() + ? Right( FIELD->Test, 1 ) + DbSkip() + ENDDO - USE - FERASE( "__MYTEST.DBF" ) - FERASE( "__MYTEST.CDX" ) + USE + FERASE( "__MYTEST.DBF" ) + FERASE( "__MYTEST.CDX" ) - RETURN NIL + RETURN NIL 2008-09-19 11:00 UTC+0200 Viktor Szakats (harbour.01 syenar hu) * contrib/hbct/fcopy.prg diff --git a/harbour/common.mak b/harbour/common.mak index f7e406309b..d2d1c43dd0 100644 --- a/harbour/common.mak +++ b/harbour/common.mak @@ -891,6 +891,7 @@ RDD_LIB_OBJS = \ $(OBJ_DIR)\dbcmdhb$(OBJEXT) \ $(OBJ_DIR)\dbcmdx$(OBJEXT) \ $(OBJ_DIR)\dbdrop$(OBJEXT) \ + $(OBJ_DIR)\dbdetach$(OBJEXT) \ $(OBJ_DIR)\dbexists$(OBJEXT) \ $(OBJ_DIR)\fieldhb$(OBJEXT) \ $(OBJ_DIR)\hbdbsort$(OBJEXT) \ diff --git a/harbour/source/rdd/Makefile b/harbour/source/rdd/Makefile index d2b23a5323..ac9fae3fbb 100644 --- a/harbour/source/rdd/Makefile +++ b/harbour/source/rdd/Makefile @@ -10,6 +10,7 @@ C_SOURCES=\ dbcmdhb.c \ dbcmdx.c \ dbdrop.c \ + dbdetach.c \ dbexists.c \ fieldhb.c \ workarea.c \