Backend customisation and be->price_lookup
Neil Williams
linux at codehelp.co.uk
Thu Sep 22 08:07:03 EDT 2005
As well as backend configuration options, there is an evident need to remove
GnuCash-specific backend handlers from QofBackend in a way that abstracts the
functionality and allows other applications to use their own customised
handlers in their backends.
e.g. The GnuCash version of QofBackend includes price_lookup which is
evidently unsuitable for a generic library like QOF which knows nothing of
prices. Equally, some other QOF application may want similar functionality -
although I've no idea what just now.
be->price_lookup is already highlighted as needing replacement:
/** XXX price_lookup should be removed during the redesign
* of the SQL backend... prices can now be queried using
* the generic query mechanism.
src/engine/qofbackend-p.h
Until that happens, I propose to use backend_extensions - a new GHashTable -
to provide the link between the backend customised function and the
application.
static const char* lookup_func = "GNCPriceLookupID";
if (be)
{
void (*price_lookup) (QofBackend *, GNCPriceLookup *);
price_lookup = qof_backend_extension(lookup_func);
if(price_lookup)
{
The hashtable will be populated by QofBackendProvider when it calls the init
function of the particular backend. This way, the number, type and IDstring
of all backend extensions are entirely determined by the backend in use.
Those routines that use the extensions simply attempt a lookup - using the
same string - and receive a NULL if the current backend does not support the
function with the IDstring requested.
This will be implemented in CashUtil initially before being incorporated into
the main QOF library sometime after QOF 0.6.0 is on full release (possibly in
0.6.1).
Those backends that set price_lookup or export would stop using
be->price_lookup and instead register the extension in their
QofBackendProvider init function using:
void qof_backend_extension_add(char *IDstring, gpointer data);
where IDstring is the static char* that the application uses to locate the
function and data is a gpointer to the function itself.
qof_backend_extension_add("GNCPriceLookupID", pgendPriceFind);
Note that this does mean that the extension is only registered once - when the
backend GModule is first loaded, usually at application startup. Backends can
either use more than one extension for different circumstances or modify
their existing functions (and maybe prototypes) to use a status flag of some
kind.
be->price_lookup is only currently available within the GnuCash tree and will
be unusable once QOF is spun out as an external library, hence the new
mechanism.
Alternatively, can price_lookup be dropped and a generic (QofQuery) query used
already?
Are there any implications for Finance::Quote?
--
Neil Williams
=============
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.gnucash.org/pipermail/gnucash-devel/attachments/20050922/59d56f87/attachment.bin
More information about the gnucash-devel
mailing list