On Mon, 2009-07-20 at 10:52 +0200, Vivien Malerba wrote:

> 
> 
> 
> 2009/7/20 Bas Driessen <[email protected]>
> 
>         On Sun, 2009-07-19 at 13:31 +0200, Vivien Malerba wrote:
>         
>         > 
>         > 
>         > 2009/7/19 Bas Driessen <[email protected]>
>         > 
>         >         Hello,
>         >         
>         >         Question regarding partial meta store update. I
>         >         found that the following to update a single table
>         >         does not appear to work:
>         >         
>         >                 g_print ("\nPartial metastore update for
>         >         table '%s'...\n", TABLE_NAME);
>         >                 GdaMetaContext mcontext = {"_tables", 1,
>         >         NULL, NULL};
>         >                 mcontext.column_names = g_new (gchar *, 1);
>         >                 mcontext.column_names[0] = "table_name";
>         >                 mcontext.column_values = g_new (GValue *,
>         >         1);
>         >                 g_value_set_string
>         >         ((mcontext.column_values[0] = gda_value_new
>         >         (G_TYPE_STRING)), TABLE_NAME);
>         >                 if (!gda_connection_update_meta_store
>         >         (connection, &mcontext, &error))
>         >                         return -1;
>         >         
>         >         After this, my meta store is NOT updated. 
>         > 
>         > 
>         > This may depend on the actual value of TABLE_NAME,
>         > specifically if it is a mix of upper and lower case, or if
>         > it's a reserved keyword. The proper way is:
>         > tmp = gda_sql_identifier_quote (TABLE_NAME, cnc, NULL, TRUE,
>         > FALSE); // or with the last argument being TRUE, see the doc
>         > g_value_set_string ((mcontext.column_values[0] =
>         > gda_value_new (G_TYPE_STRING)), tmp);
>         > g_free (tmp);
>         > 
>         > Note that this is brand new (just been sorted out) and will
>         > require the master or LIBGDA_4.0 branches up to date.
>         >  
>         > 
>         >         
>         
>         Thanks Vivien, but this unfortunately is not still not
>         working. Let me explain my testing scenario and if I
>         understand this the correct way.
>         
>         -1 I have a database with a table called "groups"
>         -2 I run the gda_connection_update_meta_store to update the
>         meta store.
>         -3 I look into the meta store with sqlite3 and execute "select
>         * from _tables". I can see the "groups" table in that list.
> 
> So far so good:)
>  
>         
>         -4 I add a table called "parts"
>         -5 I run the code above (with your modification) where the
>         TABLE_NAME is set to "parts" (without quotes).
>         -6 I execute "select * from _tables" and I expect to see the
>         "parts" entry, but it is not there.
> 
> It should be there...
>  
>         
>         -7 I execute the gda_connection_update_meta_store to do the
>         full update.
>         -8 I execute "select * from _tables" and I expect to see the
>         "parts" entry and now it is there.
>         
>         My questions:
>         
>         -1 Is my understanding of how this mechanism should work
>         correct?
> 
> Ye, it is.
>  
>         
>         -2 Anything (obvious) that is not in the code above?
>         -3 I use "gda_meta_store_new_with_file" to open my (sqlite3)
>         meta store database. Is it possible that somehow it is mixing
>         up the internal (memory) database with the external one?
> 
> I don't think so, but I'd prefer to have some actual code to look at
> before I can say...
> 
> If you send me a standlone program which shows the bug, I'll make the
> necessary corrections (either to Libgda or to your code).


Attached a small application that demonstrates the single table problem. Set up 
as follows:


(postgresql) database with 1 more tables
data source called "stocksql" (or change the connection name in the
source).

The program performs the following steps:

-1 Open the connection
-2 Open the meta store
-3 Drop table "xparts" (if exists)
-4 Build complete meta store
-5 Create table "xparts"
-6 Update SINGLE table meta store.


After this open: sqlite3 /tmp/single.db

select * from _tables

There should be an entry for "xparts", but it is not there.

Is this enough input?

As a comment, I quickly put this together, so the error handling and
program style is not the nicest :) Also I did not use DDL calls for drop
table etc as that is not the focus anyway.

Thank you,
Bas.

Attachment: single.tar.bz2
Description: application/bzip-compressed-tar

_______________________________________________
gnome-db-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gnome-db-list

Reply via email to