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