Re: [gnome-db] append row to data model.
- From: Bas Driessen <bas driessen xobas com>
- To: Vivien Malerba <vmalerba gmail com>
- Cc: GNOME-DB List <gnome-db-list gnome org>
- Subject: Re: [gnome-db] append row to data model.
- Date: Thu, 26 Jan 2006 20:26:22 +1000
On Thu, 2006-01-26 at 11:12 +0100, Vivien Malerba wrote:
2006/1/26, Bas Driessen <bas driessen xobas com>:
> On Thu, 2006-01-26 at 10:49 +0100, Vivien Malerba wrote:
> 2006/1/26, Bas Driessen <bas driessen xobas com>:
> [...]
> >
> > I agree with the concept to address this issue, but I don't believe this
> > code above will work OK. If I append a row with values to the datamodel,
> it
> > returns the line number of the new row and it exits. At that point I also
> > want to append it to the database. In the code above, you try to add the
> row
> > to the database if appending to the datamodel fails, but that is the other
> > way around if I read it correctly. I will do a some testing.
>
> Calling the gda_data_model_row_append_values() will
> (because the
> GdaPostgresRecordset object does not implement the GdaDataModelRow's
> append_value() virtual function):
> * create a new GdaRow object initialized with the correct values
> * call the GdaDataModelRow's append_row() virtual function which is
> defined in gda-postgres-recordset.c:208, and will do the job.
> * return the row number of the new row.
>
> Tell me if it works
>
>
> If I change the gda_data_model_row_append_values as below,
> it works OK. I just tested it.
>
> static gint
> gda_data_model_row_append_values (GdaDataModel *model,
> const GList *values, GError **error)
> {
> GdaRow *row;
>
> g_return_val_if_fail (GDA_IS_DATA_MODEL_ROW (model), -1);
> g_return_val_if_fail (CLASS (model)->append_values != NULL, -1);
>
> row = CLASS (model)->append_values (GDA_DATA_MODEL_ROW (model),
> values, error);
> if (row)
> {
> CLASS (model)->append_row (GDA_DATA_MODEL_ROW (model), row,
> error);
> return gda_row_get_number (row);
> }
> else
> return -1;
> }
>
>
Right, but this results in the GdaRow being added twice to the data
Hash data model (once when calling "row = CLASS
(model)->append_values...", and once when calling "CLASS
(model)->append_row").
May I suggest that you:
1) modify the above function to
static gint
gda_data_model_row_append_values (GdaDataModel *model, const GList
*values, GError **error)
{
GdaRow *row;
g_return_val_if_fail (GDA_IS_DATA_MODEL_ROW (model), -1);
g_return_val_if_fail (CLASS (model)->append_values != NULL, -1);
row = CLASS (model)->append_values (GDA_DATA_MODEL_ROW
(model), values, error);
if (row)
return gda_row_get_number (row);
else
return -1;
}
2) and modify line 206 of gda-data-model-hash.c to:
if (! GDA_DATA_MODEL_ROW_CLASS (G_OBJECT_GET_CLASS
(model))->append_row (model, row, error)) {
The idea is to make the gda_data_model_hash_append_values() function call
GdaPostgresRecordset's defined append_row() instead of calling
directly the GdaDataModelHash's append_row() function (which anyway
gets called at the end of the GdaPostgresRecordset's defined
append_row() function).
Can you try that?
Thanks Vivian, that works OK. 1 record added to the table in the database and 1 row added to the datamodel. Perfect! Just a concern. This will now only work for hash implementations. I believe that the MySQL provider uses something else (have to look into again). Can we make this change more generic?
Bas.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]