[Libreoffice] Bug 38811 - [EasyHack] default to SQLite not HSQLDB in Base

Michael Meeks michael.meeks at suse.com
Wed Nov 23 04:31:33 PST 2011


Hi Mohsin,

	Of course, https://bugs.freedesktop.org/show_bug.cgi?id=38811 is a
great place for some pointers on this topic; but I prefer E-mail for its
friendliness and ease; so - first, welcome !

On Tue, 2011-11-22 at 19:10 +1100, Mohsin Mansur wrote:
> I am interested in writing the SQLite driver code for Base. 

	It's a key piece we need working on, so you're much appreciated.

> * What classes/services/interfaces at a minimum have to be
> implemented? I browsed through the drivers tree and it appears that
> not all drivers implement all services (except for some basic ones
> such as tables and columns). How does one decide what to implement and
> what not to implement?

	I guess starting with the most minimal one you can find ;-) I imagine
something like the evolution connector might show something like that.
As/when something works grow it I guess.

> * Are the code skeletons for the drivers usually auto-generated or
> written by hand ? There is some documentation for generating code
> skeletons from UNOIDL files on the LibreOffice SDK API page but I
> don't know if that's relevant to this case or not (once again, driver
> developers can let me know what they did).

	That is certainly possible. It seems sub-classing the sdbc base-classes
is the way to go to implement most of the UNO interfaces you need.

> * Are there any existing unit tests for testing Base functionality
> with new drivers? If not, how were the existing drivers tested?

	I strongly suspect the answer is 'no' :-) one of the reasons we want an
sqlite database backend present in the build is in order to be able to
have fast, during-compile unit testing of 'base' so ...

	Often there are useful things in the workben/ directory that, while not
unit tests, may help. eg.
connectivity/workben/skeleton/how_to_write_a_driver.txt - of course
these tend to be somewhat outdated as well (as a bonus).

> * (a simple one) How will I set the default driver to SQLite in the
> source code?

	That is a good question too. So this should prolly done by UNO service
names; you can see the service names in:

	connectivity/source/drivers/hsqldb/hsqldb.component

	a quick git grep for them reveals that this is not how it is done ;-)

	dbaccess/source/core/misc/dsntypes.cxx

	has a URL scheme, with this:

::rtl::OUString ODsnTypeCollection::getEmbeddedDatabase() const
{
    ::rtl::OUString sEmbeddedDatabaseURL;
    static const ::rtl::OUString s_sNodeName(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.DataAccess")); ///Installed
    const ::utl::OConfigurationTreeRoot aInstalled = ::utl::OConfigurationTreeRoot::createWithServiceFactory(m_xFactory, s_sNodeName, -1, ::utl::OConfigurationTreeRoot::CM_READONLY);
    if ( aInstalled.isValid() )
    {
        if ( aInstalled.hasByName("EmbeddedDatabases/DefaultEmbeddedDatabase/Value") )
        {
            static const ::rtl::OUString s_sValue(RTL_CONSTASCII_USTRINGPARAM("EmbeddedDatabases/DefaultEmbeddedDatabase/Value"));

            aInstalled.getNodeValue(s_sValue) >>= sEmbeddedDatabaseURL;
            if ( sEmbeddedDatabaseURL.getLength() )
                aInstalled.getNodeValue(s_sValue + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")) + sEmbeddedDatabaseURL + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/URL"))) >>= sEmbeddedDatabaseURL;
        }
    }
    if ( !sEmbeddedDatabaseURL.getLength() )
        sEmbeddedDatabaseURL = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:embedded:hsqldb"));
    return sEmbeddedDatabaseURL;
}

	That looks like it might well be what you want; I'd compile that with
debug and/or an fprintf & step through it...

	I -assume- that there is some setting that can be set for this in the
UI, but perhaps this is a hidden setting.

	Hope that helps !

		Michael.

-- 
michael.meeks at suse.com  <><, Pseudo Engineer, itinerant idiot



More information about the LibreOffice mailing list