I know people hate it when I write long msgs, but this is very
important so please everyone wade through it to find the pieces 
that apply to you.  I can also use some guidance on handling
cvs and the changelog. When pulling whole files over, should
I attempt to gather the myriad changelogs from the Harbour
project? I'm leaning toward a simple entry to see Readme.txt
for a list of changes in this re-write.  Also, the diff for
these files is useless; a zillion lines have changed and
code has been moved. Does that affect how we want it posted?
- Brian Hays

Viktor did a lot of great work on rddads. 
But some of the choices made in that project would create some updating
issues for users.  Generally I think they're worth the pain as he
addressed many long-standing inconsistencies in the code,
but obviously we want to reduce the number of required changes
as much as possible.  The required changes seem minor to me.
Before I post the code we should agree on
some things.  We should start a separate thread on the 
ADS_REQUIRE_VERSION issue; Viktor has replaced it with a better
#define as part of his "auto-detecting" the installed version
of ACE--his proposal is that developers always have a real
installation of the aceapi, and the (x)Harbour build will look
there for headers and to determine dll versions and even create
ace32.lib for Borland users.
There are a few functions whose return values are different 
upon errors, so anyone using them would need to review/alter
those values. For example, some management funcs that returned
arrays on success returned, on error, a number (the ads error code).
Others returned an empty array and expected the caller to use 
adsGetLastError for error details. Viktor standardized on this.

I recommend going with the changes and loudly advertising the need 
to read the review notes. Here are some hilites of possible 
compatibility issues:

   * contrib/rddads/ads1.c
     ! Two occurences of AdsShowError() calls guarded with 
       DEBUG. This call pops up a visual dialog box on screen 
       and halts execution until this is confirmed by the user. 
       Not very desirable inside RDD code in real life 
       environments. Proper error code were and are still 
       returned in these cases.

The calls to AdsShowError() have been a problem for a few users,
so fixing this is great.

   * contrib/rddads/adsfunc.c
     * Final reformat and optimization.
     ! Fixed to not call AdsShowError() by default, only when 
       DEBUG is #define-d. For about the same reason as above. 
       Caller should use AdsGetLastError() to get the error 
       code and string and present it to the user as required.
     + QUESTIONs added.

   * contrib/rddads/adsmgmnt.c
     * ADSMGGETOPENTABLES() changed to return empty array 
       instead of error code in case of error. This way it 
       now behaves consistently with the rest of the mgmnt 
       functions. Error code and string can be get by 
       the caller using ADSGETLASTERROR().
     + ADSMGGETOPENTABLES2() added, which is similar to 
       ADSMGGETOPENTABLES(), but will also return lock type 
       for all tables, this way clearing a long standing 
       TODO in the source.

This is the list of incompatible changes:
- ADSCOPYTABLECONTENTS() now throws RTE if dest area is non-ADS.
- ADSCOPYTABLECONTENTS() will not change the current workarea
   to the destination area anymore. 
(Some users may have planned on the old behavior: please review).

- ADSMGGETINSTALLINFO(), ADSMGGETACTIVITYINFO(),
   ADSGETCOMMSTATS(), ADSMGGETCONFIGINFO() will now return
   an empty array on error instead of NIL.
- ADS_REQUIRE_VERSION one digit -> ADS_LIB_VERSION three digits
   (or four when 10.0 ACE comes out), with the note that
   ADS_LIB_VERSION is not obligatory.
- ADS_DIR/ADS_INC envvar requirement, pointing to .h/.lib/.dll
   dir (f.e. C:\ads\acesdk).
- ADSSTMTSETTABLEPASSWORD() now needs pArea->hStatement,
   rather than an active connection. 

- C level public vars and three functions changed names. NOTICE:
   hb_ads_iFileType 
   hb_ads_iLockType 
   hb_ads_iCheckRights 
   hb_ads_iCharType 
   hb_ads_bTestRecLocks 
   hb_ads_hConnect
   These should only affect anyone who wrote external C sources
   that accessed these vars, which should be extremely rare but we
   do need to warn people just in case.

- ADSTESTLOGIN() now requires param 7 to be passed by ref
   and param 8 is now ignored.
- ADSMGGETUSERNAMES() will return an array where all items
   will always have 6 elements regardless of the ACE version.

New/fixed stuff (no incompatibility issues here):
- ADSVERSION() memory corruption with wrong parameter.
- ADSBLOB2FILE(), ADSFILE2BLOB() GPF when current wa is not ADS.
- ADSDDSETDATABASEPROPERTY() able to clear values.
- ADSDDSETDATABASEPROPERTY(), ADSDDGETDATABASEPROPERTY()
   extended with new properties.
- ADSMGGETLOCKS() implemented.
- ADSMGGETWORKERTHREADACTIVITY() implemented.
- ADS_VFP support and some other 9.0 capabilities added to
   several places where they were missing from.





-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft 
Defy all challenges. Microsoft(R) Visual Studio 2008. 
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
xHarbour-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xharbour-developers

Reply via email to