Re: [gnome-db] Meta Store issue with MySQL.



On Thu, 2009-07-30 at 16:17 +0200, Vivien Malerba wrote:


2009/7/30 Bas Driessen <bas driessen xobas com>

> 2009/7/30 Bas Driessen <bas driessen xobas com>
>
>>  Hello,
>>
>> My database is in MySQL. When I run the following command to rebuild the
>> MetaStore (which lives in a sqlite3 database):
>>
>> gda_connection_update_meta_store(connection, NULL, &error)
>>
>> I get the following error/warning:
>>
>> ** (process:22406): WARNING **: (+5): Wrong Holder value type, expected
>> type 'boolean' when value's type is 'string' (Provider ThreadWrapper)
>>
>>
>> and the MySQL table information is not in the MetaStore. In fact if I
>> do:
>>
>> select * from _tables;
>>
>> nothing shows up.
>>
>> Anyone else having this problem?
>>
>
> The reason for this error is that a SELECT statement internally run by the
> MySQL provider to get meta data returned a column of type string instead
> to
> a boolean. To solve this, the correction consists in locating the faulty
> SELECT, and use gda_connection_statement_execute_select_full() with an
> array
> of expected types for the columns instead of
> gda_connection_statement_execute_select(). This is already done at several
> places in gda-mysql-meta.c.
>
> If you want to try to correct it, and if you are in the master branch, you
> can use the definitions in
> libgda/providers-support/gda-meta-column-types.h
> (which is dynamically generated).
>
> Otherwise, I'd need to have more information to correct the problem
> myself.


OK, I will try to locate and correct the issue in libgda. Just wanted to
have confirmed first that this is an issue in libgda and not in my setup.

To help you, you can uncomment the line 2324 of the gda-meta-store.c file, so you'll get debug info about all the results the provider is returning for the meta store.


Thanks Vivien ... I tried, but it is difficult to get a handle on the flow of code etc. Therefore, I created a small reproducible. Probably faster to get to the core of this issue :)

Steps in the little program below as follows:

-1 Open connection to MySQL. My data source is called "mystock".
-2 Open a data store in sqlite format.
-3 Rebuild the complete store. This will fail. Even if there are no base tables, there should always be something in the _tables for instance. There is nothing there, which probably makes sense as a rollback is triggered if there is a problem.

To check the result:

sqlite3 /tmp/mysql_meta.db

select * from _tables;

Nothing returned.

Can you please test if this is failing in your environment too? The code is as follows:

==============
#include <libgda/libgda.h>

int
main (int argc, char *argv[])
{
        GdaConnection* connection;
        GError* error = NULL;
        GdaMetaStore *store;

        gda_init();
        error = NULL;

        /* open connection */
        printf("Start.\n");
        printf("Open connection.\n");
        connection = gda_connection_open_from_dsn ("mystock", NULL, GDA_CONNECTION_OPTIONS_NONE, &error);
        if (!connection)
        {
                fprintf (stderr, "%s\n", error->message);
                return -1;
        }

        /* Open Meta Store */
        printf("Open Meta Store.\n");
        store = gda_meta_store_new_with_file("/tmp/mysql_meta.db");
        g_object_set(G_OBJECT(connection), "meta-store", store, NULL);
        if (!store)
        {
                printf("Can not open store.\n");
                return -1;
        }

        /* Build Complete store */
        printf("Build complete store.\n");
        if (!gda_connection_update_meta_store(connection, NULL, &error))
        {
                fprintf (stderr, "%s\n", error->message);
                return -1;
        }

        /* The End */
        printf("End.\n");
        return 0;
}

==============

Thanks,
Bas.




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]