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