On 10/21/06, Murray Cumming <[EMAIL PROTECTED]> wrote:
> On Sat, 2006-10-21 at 15:45 +0200, Vivien Malerba wrote:
> > On 10/21/06, Murray Cumming <[EMAIL PROTECTED]> wrote:
> > > The documentation for gda_connection_execute_command (pasted below) is
> > > not clear to me, particularly
> > >
> > > "The return value is a GList of #GdaDataModel's, and #GdaParameterList".
> > >
> > > This seems to mean that the GList* contains some GdaDataModels and some
> > > GdaParameterLists. If so, what's the sequence or way to identify each
> > > element? And what would the GdaParameterList items tell me? Where is
> > > this demonstrated in example code?
> >
> > You understood correctly. The returned list can hold pointers to
> > GdaDataModel or GdaParameterList objects, in the same list.
> > Identifying them is easily done using GObject's introspection features
> > such as GDA_IS_DATA_MODEL() or GDA_IS_PARAMETER_LIST().
>
> OK. This needs to be mentioned in the documentation.

I'll fix the documentation in this regard, then.

>
> Also, is there ever >1 GdaDataModel or GdaParameterList in that GList?
> Does it ever contain both? It would be nice to know what to expect, and
> why/when.

You get as many items in the retunred GList as there are queries
(separated by ";") in the command. For example it the command was made
with "SELECT * FROM mytable; DELETE FROM mytable" then you'd get first
a GdaDataModel for the 1st query and then a GdaParameterList for the
2nd. I'll update the documentation to make this clear.

>
> > A GdaDataModel is returned in the list whenever the SQL was a SELECT
> > query (or a query returning a data set), and a GdaParameterList is
> > returned whenever the query was something else.
> >
> > What the GdaParameterList contains is a list of named values which are
> > described in gda_server_provider_execute_command(), the most usefull
> > one (and only supported at the moment if I remember) being named
> > "IMPACTED_ROWS" which contains the number of rows impacted by the
> > query.
> >
> > Note that if you know that the command contains a SELECT query, then
> > you'd better use gda_connection_execute_select_command() and if you
> > know that the command is not as SELECT query, then you should use
> > gda_connection_execute_non_select_command().
> > These two functions are wrapper around the first one and make things
> > easier to use.
> >
> > >
> > > Please note also that, because it's so odd to have 2 types of element in
> > > a GList, people are likely to interpret this text as just meaning that
> > > the params parameter is an output parameter. That guess would be
> > > reinforced by the missing const for that parameter.
> > >
> >
> > I know it can seem a bit strange but is it worth creating overhead
> > with a structure such as
> > struct {
> >       gboolean this_is_a_data_model;
> >       union {
> >              GdaDataModel *model;
> >              GdaParameterList *plist;
> >       } data;
> > }
> > and returning a list of these structures.
>
> How about either
> - returning two GLists.

We can only return one list because the index in the list of a
GdaDataModel or GdaParameterList corresponds to the query in the
command at the same index.

> or
> - Making this function private and just having a execute method for
> select and an execute method for parameters?

You cant' always know in advance which query whill return what. For
example a "DESCRIBE" query in MySQL will return a GdaDataModel even
though it does not start with "SELECT".

But if you know in advance what's in your command, then use one of the
other functions I mentioned. I'll also update the documentation in
this regard.

Cheers,

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

Reply via email to