On 6/23/07, Piotr Pokora <[EMAIL PROTECTED]> wrote:
> "Vivien Malerba" <[EMAIL PROTECTED]> wrote:
>
> > > I think I do not follow.
> > > Do you mean I can invoke gda_connection_execute_select_command with
> > > GdaParameterList ?
> >
> > Yes, you can pass a GdaParameterList object to the
> > gda_connection_execute_select_command() function, see the
> > documentation about it for what named parameters it can contain.
>
> I try to read docs and source code, and do not get params idea.
> For MySQL provider params argument is just passed from one method to
> another. At the end ( when MySQL provider execute_command is invoked)
> these param argument is just ignored.
> gda_mysql_provider_execute_command just ignores ( doesn't use ) it at all.

This API is relatively new and not all the providers take into account
the parameters. I've just recently implemented that support for
postgres which means that you can request a cursor-based-only data
model or a random access data model (differences will be on the memory
consumed, probably not much on the performances, but it depends on
what you do with the data).

>
> I made another tests with GdaDataModel:
>
> GdaDataModel *get_a_model (GdaConnection *cnc, const gchar *sql)
> {
>         GdaDict *dict = gda_dict_new();
>         gda_dict_set_connection(dict, cnc);
>
>         GdaQuery *gdaquery =
>                 gda_query_new_from_sql(dict, sql, NULL);
>
>         GdaDataModel *_model =  gda_data_model_query_new(gdaquery);
>
>         g_object_unref(dict);
>         g_object_unref(gdaquery);
>
>         return _model;
> }
>
> GdaDataModel *get_b_model (GdaConnection *cnc, const gchar *sql)
> {
>         GdaCommand *command;
>         command = gda_command_new (sql,
>                         GDA_COMMAND_TYPE_SQL,
>                         GDA_COMMAND_OPTION_STOP_ON_ERRORS);
>
>         GdaDataModel *model =
>                 gda_connection_execute_select_command(
>                                 cnc,
>                                 command, NULL, NULL);
>         gda_command_free(command);
> }

Both methods are valid, but using the first method will give you a
data model which may be updatable (that is you can add/modify/remove
rows and the database will be modified) whereas the 2nd method will
not give you a modifiable data model (with a few exceptions of some
provider's implementations)

>
> get_a_model seems to be twice faster than get_b_model.

Very strange considering that it does _much_ more work...

>
> *But* bottleneck seems to be interesting ( get_a_model ).
>
> Time: 0,0360238552094.
>
> Add:
> gda_data_model_get_n_rows(_model);
> gda_data_model_get_n_columns(_model);
>
> Time: 0,11718416214
>
> Time is almost the same when I get only n_columns.
>
> Results with get_b_model:
>
> Time: 0.0784959793091
> Time: 0.082288980484 /* with get_n_column */

I'd be more at ease if you'd get numbers around the minute instead of
around the 1/100 second because there might be several perturbating
factors there.

>
> Should I use different than GdaDataModel approach?

The fastest method _should_ always be the method B.

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

Reply via email to