Hello Przemek

Przemyslaw Czerpak-2 wrote:
> 
> This function suggest that xbase++ force unique aliases for each workarea
> what is not Clipper compatible. CA-Clipper allows to use empty alias for
> each workarea, i.e. what xbase++ shows in this code:
> 
>    proc main()
>       dbCreate( "_tst", { { "F","C",10,0 } } )
>       use _tst alias "" new shared
>       ? select(), used(), "["+alias()+"]"
>       use _tst alias "" new shared
>       ? select(), used(), "["+alias()+"]"
>       wait
>    return
> 
> The second thing which we can find is the fact that in ZEROSPACE we cannot
> store workareas with repeated alias names. But the documentation you sent
> before to dbRequest()/dbRelease() says:
> ,----------------------------------------------------------------------------
> | The transfer of alias names follows the FIFO principle (First in first
> out).
> | If the Zero space contains multiple alias names, DbRequest() transfers
> the
> | alias that was released first. If <cAlias> is specified DbRequest()
> | transfers the first alias name that matches <cAlias> . For more
> information,
> | refer to function DbRelease(). 
> `----------------------------------------------------------------------------
> The above suggests that multiple aliases can match <cAlias>.
> In Harbour hb_waDetach()/hb_waRequest() respects it.
> IMHO just like relation references this part also does not work correctly
> in xbase++. This code should confirm it:
> 
>    proc main()
>       dbCreate( "_tst", { { "F","C",10,0 } } )
>       use _tst alias "tst1" new shared
>       dbRelease()
>       use _tst alias "tst1" new shared
>       dbRelease()
>       aeval( WorkSpaceList( 2 ), {|s, i| qout( i, s ) } )
>       wait
>    return
> 
> Sth has to work in different way then expected and documented.
> Anyhow I can implement such function in Harbour but it will
> return repeated alias names if such situation happens.
> 
>> WorkSpaceEval( <bAreaBlock>, [<nWorkSpace>] ) --> nProcessed 
> 
> It's not clear for me how they implemented ZEROSPACE iteration without
> breaking some other rules and personally I have very serious doubts
> they resolved all possible problems.
> I have not information about ZEROSPACE locking. What will happen
> if two threads will try to execute WorkSpaceEval() and/or some others
> threads dbRelease()/dbRequest()?. I have no information in which
> workspace codeblock is executed. How WA are transferred before and
> during iteration. What happens when alias conflicts can appear.
> 
> If you can check all of the above (documentation does not say anything
> about that and as we can see is really far from real behavior so we cannot
> trust it and have to confirm the exact behavior by tests) then I can try
> to implement of course if final version does not introduce some bad
> anomalies and I'm not sure it doesn't.
> 
>> It will be nice if you used above namespace.
>> We will be more near to Xbase++.
> 
> See above. I have nothing against but I have to know what I should
> implement.
> As long as we do not touch ZEROSPACE then you can implement them yourself
> as .prg wrappers to hb_waEval(), i.e.:
> 
>    function WorkSpaceList( nWorkSpace )
>       local aAliasNames := {}
> 
>       // ZEROSPACE is unsupported
>       if valtype( nWorkSpace ) != "N" .or. nWorkSpace != 2
>          hb_waEval( {|| aadd( aAliasNames, alias() ) } )
>       endif
>       return aAliasNames
> 
>    function WorkSpaceEval( bCode, nWorkSpace )
>       local nCount := 0
> 
>       // ZEROSPACE is unsupported
>       if valtype( nWorkSpace ) != "N" .or. nWorkSpace != 2
>          hb_waEval( {|| eval( bCode ), ++nCount } )
>       endif
>       return nCount
> 
> Support for ZEROSPACE in WorkSpaceList() is trivial but can be implemented
> only in C. I can add it in necessary. BTW please check above two example
> with xbase++.
> Support for ZEROSPACE in WorkSpaceEval() it's much more complicated and
> personally I do not like it because it has to introduce some exceptions/
> anomalies. If some well check what xbase++ does then I can replicate this
> behavior in some compatibility library but only if it will not be source
> of some serious bugs.
> 


We need some real Xbase++ user here to test this scenario.
I will try but my knowledge will be limited in this case.

Angel, can you help ?
Rodd Graham, if you are reading this mail, please come forward.

Regards
Pritpal Bedi

-- 
View this message in context: 
http://www.nabble.com/MT-workareas-cloning-tp24050058p24074785.html
Sent from the Harbour - Dev mailing list archive at Nabble.com.

_______________________________________________
Harbour mailing list
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to