FireBird/LibreOffice: fb_config/pkg-config, thread-safety, eager caching

Lionel Elie Mamane lionel at mamane.lu
Thu Jul 18 19:40:47 PDT 2013


Hi,

My "git pull" today brought the firebird work in. Cool!

1) I notice that Debian has neither fb_config, nor fbembed.pc; are
   these part of the upstream build (and then it is a bug in Debian
   that they are not in the packages)? Do other distros have them?

2) This is a bit scary in the Debian package description of
   libfbembed:

    Contrary to libfbclient, libfbembed is not thread-safe.

   Taking a quick look at e.g. OResultSet::ensureDataAvailable,
   it is mutexed, but (as far as I understand) with a *different*
   mutex for each instance (for each object). So this does not keep
   multiple ResultSets from making parallel calls to non-thread-safe
   libfbembed from different threads.

3) You seem to have duplicated
   connectivity/source/{inc,commontools}/propertyids.[hc]xx
   in connectivity/source/drivers/firebird/propertyids.[hc]xx?

   With the _same_ include guard?

4) OResultSet::m_sqlData: the driver caches the *whole* resultset? Oh
   my... And not only that, it eagerly fetches the *whole* resultset?

   That will *not* scale.

   Does Firebird 3 support scrollable cursors?

   I'm not actually sure any LibreOffice code really requires
   scrollable cursors; it seems to me that when it detects that the
   driver / database does not support that, it makes a *new* query
   with "WHERE primary_key=VALUE" each time it wants to "go back"
   (this happens in dbaccess/source/core/api/KeySet.cxx and
   RowSetCache.cxx).

   If FireBird can't support previous() et al, it could just throw an
   SQLError when they are called?

   If the LibreOffice detection logic is b0rken, we should fix
   *that* rather than inefficiently fake in the driver capabilities
   that the database does not have.


(I'm away until Sunday evening.)

-- 
Lionel


More information about the LibreOffice mailing list