libgda r3185 - in trunk: . doc/C doc/C/tmpl libgda libgda/providers-support libgda/sqlite po providers/firebird providers/mysql providers/postgres providers/skel-implementation/capi tests/data-models
- From: vivien svn gnome org
- To: svn-commits-list gnome org
- Subject: libgda r3185 - in trunk: . doc/C doc/C/tmpl libgda libgda/providers-support libgda/sqlite po providers/firebird providers/mysql providers/postgres providers/skel-implementation/capi tests/data-models
- Date: Mon, 28 Jul 2008 19:51:03 +0000 (UTC)
Author: vivien
Date: Mon Jul 28 19:51:03 2008
New Revision: 3185
URL: http://svn.gnome.org/viewvc/libgda?rev=3185&view=rev
Log:
2008-07-28 Vivien Malerba <malerba gnome-db org>
* libgda/sqlite/gda-sqlite-recordset.c:
* providers/firebird/gda-firebird-recordset.c:
* providers/mysql/gda-mysql-recordset.c:
* providers/postgres/gda-postgres-recordset.c:
* providers/skel-implementation/capi/gda-capi-recordset.c:
* libgda/providers-support/gda-pmodel.[ch]:
* libgda/providers-support/gda-prow.[ch]:
* libgda/gda-data-model-row.[ch]: overwrote the current GdaRow implementation
with the GdaPRow one, and removed GdaPRow
* libgda/gda-data-access-wrapper.c:
* libgda/gda-data-model-row.[ch]:
* libgda/gda-data-model-array.[ch]: reimplemented GdaDataModelArray without using
the GdaDataModelRow object (which has been removed)
* libgda/gda-data-model.h: new error code
* libgda/gda-config.c: added missing header
* tests/data-models/check_data_proxy.c: corrected test
* po/POTFILES.in: removed non existent files, and ran "make update-po"
* doc/C: doc updates
Removed:
trunk/doc/C/tmpl/gda-data-model-row.sgml
trunk/doc/C/tmpl/gda-prow.sgml
trunk/libgda/gda-data-model-row.c
trunk/libgda/gda-data-model-row.h
trunk/libgda/providers-support/gda-prow.c
trunk/libgda/providers-support/gda-prow.h
Modified:
trunk/ChangeLog
trunk/doc/C/libgda-4.0-docs.sgml
trunk/doc/C/libgda-4.0-sections.txt
trunk/doc/C/libgda-4.0.types.in
trunk/doc/C/prov-writing.xml
trunk/doc/C/tmpl/gda-data-model-array.sgml
trunk/doc/C/tmpl/gda-row.sgml
trunk/libgda/Makefile.am
trunk/libgda/gda-config.c
trunk/libgda/gda-data-access-wrapper.c
trunk/libgda/gda-data-model-array.c
trunk/libgda/gda-data-model-array.h
trunk/libgda/gda-data-model.h
trunk/libgda/gda-row.c
trunk/libgda/gda-row.h
trunk/libgda/providers-support/Makefile.am
trunk/libgda/providers-support/gda-pmodel.c
trunk/libgda/providers-support/gda-pmodel.h
trunk/libgda/sqlite/gda-sqlite-recordset.c
trunk/po/POTFILES.in
trunk/po/ar.po
trunk/po/az.po
trunk/po/ca.po
trunk/po/cs.po
trunk/po/da.po
trunk/po/de.po
trunk/po/dz.po
trunk/po/el.po
trunk/po/en_CA.po
trunk/po/en_GB.po
trunk/po/es.po
trunk/po/eu.po
trunk/po/fa.po
trunk/po/fi.po
trunk/po/fr.po
trunk/po/ga.po
trunk/po/gl.po
trunk/po/hr.po
trunk/po/hu.po
trunk/po/it.po
trunk/po/ja.po
trunk/po/ko.po
trunk/po/lt.po
trunk/po/mk.po
trunk/po/ml.po
trunk/po/ms.po
trunk/po/nb.po
trunk/po/ne.po
trunk/po/nl.po
trunk/po/oc.po
trunk/po/pa.po
trunk/po/pl.po
trunk/po/pt.po
trunk/po/pt_BR.po
trunk/po/ru.po
trunk/po/rw.po
trunk/po/sk.po
trunk/po/sl.po
trunk/po/sq.po
trunk/po/sr.po
trunk/po/sr Latn po
trunk/po/sv.po
trunk/po/tr.po
trunk/po/uk.po
trunk/po/vi.po
trunk/po/zh_CN.po
trunk/po/zh_HK.po
trunk/po/zh_TW.po
trunk/providers/firebird/gda-firebird-recordset.c
trunk/providers/mysql/gda-mysql-recordset.c
trunk/providers/postgres/gda-postgres-recordset.c
trunk/providers/skel-implementation/capi/gda-capi-recordset.c
trunk/tests/data-models/check_data_proxy.c
Modified: trunk/doc/C/libgda-4.0-docs.sgml
==============================================================================
--- trunk/doc/C/libgda-4.0-docs.sgml (original)
+++ trunk/doc/C/libgda-4.0-docs.sgml Mon Jul 28 19:51:03 2008
@@ -45,11 +45,11 @@
<!ENTITY libgda-GdaMutex SYSTEM "xml/gda-mutex.xml">
<!ENTITY libgda-GdaLockable SYSTEM "xml/gda-lockable.xml">
<!ENTITY libgda-GdaThreader SYSTEM "xml/gda-threader.xml">
+<!ENTITY libgda-GdaRow SYSTEM "xml/gda-row.xml">
<!ENTITY libgda-GdaDataModelArray SYSTEM "xml/gda-data-model-array.xml">
<!ENTITY libgda-GdaDataModelBdb SYSTEM "xml/gda-data-model-bdb.xml">
<!ENTITY libgda-GdaDataModelDir SYSTEM "xml/gda-data-model-dir.xml">
<!ENTITY libgda-GdaDataModelQuery SYSTEM "xml/gda-data-model-query.xml">
-<!ENTITY libgda-GdaDataModelRow SYSTEM "xml/gda-data-model-row.xml">
<!ENTITY libgda-GdaDataModel SYSTEM "xml/gda-data-model.xml">
<!ENTITY libgda-GdaDataModelIter SYSTEM "xml/gda-data-model-iter.xml">
<!ENTITY libgda-GdaDataModelImport SYSTEM "xml/gda-data-model-import.xml">
@@ -60,7 +60,6 @@
<!ENTITY libgda-init SYSTEM "xml/libgda.xml">
<!ENTITY libgda-log SYSTEM "xml/gda-log.xml">
<!ENTITY libgda-quark-list SYSTEM "xml/gda-quark-list.xml">
-<!ENTITY libgda-GdaRow SYSTEM "xml/gda-row.xml">
<!ENTITY libgda-GdaServerProvider SYSTEM "xml/gda-server-provider.xml">
<!ENTITY libgda-GdaVirtualProvider SYSTEM "xml/gda-virtual-provider.xml">
<!ENTITY libgda-GdaVproviderDataModel SYSTEM "xml/gda-vprovider-data-model.xml">
@@ -98,7 +97,6 @@
<!ENTITY libgda-GdaSqlParser SYSTEM "xml/gda-sql-parser.xml">
<!ENTITY libgda-GdaMetaStore SYSTEM "xml/gda-meta-store.xml">
<!ENTITY libgda-GdaMetaStruct SYSTEM "xml/gda-meta-struct.xml">
-<!ENTITY libgda-PRow SYSTEM "xml/gda-prow.xml">
<!ENTITY libgda-PModel SYSTEM "xml/gda-pmodel.xml">
<!ENTITY libgda-PStmt SYSTEM "xml/gda-pstmt.xml">
<!ENTITY libgda-Enums SYSTEM "xml/gda-enums.xml">
@@ -576,6 +574,7 @@
&libgda-GdaDataModelImport;
&libgda-GdaDataAccessWrapper;
&libgda-GdaDataModelArray;
+ &libgda-GdaRow;
&libgda-GdaDataModelBdb;
&libgda-GdaDataModelDir;
&libgda-GdaDataProxy;
@@ -905,7 +904,6 @@
&libgda-util;
&libgda-log;
&libgda-quark-list;
- &libgda-GdaDataModelRow;
&libgda-GdaMutex;
&libgda-GdaLockable;
&libgda-GdaThreader;
@@ -1280,7 +1278,6 @@
<title>Providers' support API</title>
&libgda-GdaServerProvider;
&libgda-PModel;
- &libgda-PRow;
&libgda-PStmt;
&provider-support;
</chapter>
Modified: trunk/doc/C/libgda-4.0-sections.txt
==============================================================================
--- trunk/doc/C/libgda-4.0-sections.txt (original)
+++ trunk/doc/C/libgda-4.0-sections.txt Mon Jul 28 19:51:03 2008
@@ -180,6 +180,7 @@
gda_data_model_array_new
gda_data_model_array_new_with_g_types
gda_data_model_array_copy_model
+gda_data_model_array_get_row
gda_data_model_array_set_n_columns
gda_data_model_array_clear
<SUBSECTION Standard>
@@ -249,21 +250,6 @@
</SECTION>
<SECTION>
-<FILE>gda-data-model-row</FILE>
-<TITLE>GdaDataModelRow</TITLE>
-GdaDataModelRow
-GdaDataModelRowClass
-GdaDataModelRowPrivate
-<SUBSECTION Standard>
-GDA_DATA_MODEL_ROW
-GDA_DATA_MODEL_ROW_CLASS
-GDA_IS_DATA_MODEL_ROW
-GDA_IS_DATA_MODEL_ROW_CLASS
-GDA_TYPE_DATA_MODEL_ROW
-gda_data_model_row_get_type
-</SECTION>
-
-<SECTION>
<FILE>gda-data-model-import</FILE>
<TITLE>GdaDataModelImport</TITLE>
GdaDataModelImport
@@ -459,19 +445,8 @@
<TITLE>GdaRow</TITLE>
GdaRow
gda_row_new
-gda_row_copy
-gda_row_new_from_list
-gda_row_set_model
-gda_row_get_model
-gda_row_get_number
-gda_row_set_number
-gda_row_get_id
-gda_row_set_id
-gda_row_get_value
-gda_row_set_value
gda_row_get_length
-gda_row_set_is_default
-gda_row_get_is_default
+gda_row_get_value
<SUBSECTION Standard>
GDA_IS_ROW
GDA_IS_ROW_CLASS
@@ -1400,22 +1375,6 @@
</SECTION>
<SECTION>
-<FILE>gda-prow</FILE>
-<TITLE>GdaPRow</TITLE>
-<INCLUDE>providers-support/gda-prow.h</INCLUDE>
-GdaPRow
-gda_prow_new
-gda_prow_get_length
-gda_prow_get_value
-<SUBSECTION Standard>
-GDA_IS_PROW
-GDA_PROW
-GDA_PROW_CLASS
-GDA_TYPE_PROW
-gda_prow_get_type
-</SECTION>
-
-<SECTION>
<FILE>gda-pmodel</FILE>
<TITLE>GdaPModel</TITLE>
<INCLUDE>providers-support/gda-pmodel.h</INCLUDE>
Modified: trunk/doc/C/libgda-4.0.types.in
==============================================================================
--- trunk/doc/C/libgda-4.0.types.in (original)
+++ trunk/doc/C/libgda-4.0.types.in Mon Jul 28 19:51:03 2008
@@ -21,7 +21,7 @@
gda_data_model_array_get_type
@LIBGDA_BDB_TYPE@
gda_data_model_dir_get_type
-gda_data_model_row_get_type
+gda_row_get_type
gda_data_model_get_type
gda_data_model_import_get_type
gda_data_model_iter_get_type
Modified: trunk/doc/C/prov-writing.xml
==============================================================================
--- trunk/doc/C/prov-writing.xml (original)
+++ trunk/doc/C/prov-writing.xml Mon Jul 28 19:51:03 2008
@@ -512,12 +512,12 @@
few virtual methods, and offering some services.
</para>
<para>
- The data model represents each row in a separate <link linkend="GdaPRow">GdaPRow</link> object, and virtual
+ The data model represents each row in a separate <link linkend="GdaRow">GdaRow</link> object, and virtual
methods to retreive rows have to return new (and correctly initialized) objects of that class. The referencing
of these new objects is left up to the implementation which:
<itemizedlist>
<listitem>
- <para>can rely on the <link linkend="GdaPRow">GdaPRow</link> implementation to keep them, using
+ <para>can rely on the <link linkend="GdaRow">GdaRow</link> implementation to keep them, using
the <link linkend="gda-pmodel-take-row">gda_pmodel_take_row ()</link> method for each row object created which
is the easiest, the fastest as once created, the rows are available for further usage,
but will consume more memory with each row read from the model.</para>
@@ -559,7 +559,7 @@
<title>store_all()</title>
<para>
This method is called when the user sets the "store-all-rows" to TRUE. It has the effect of forcing the creation
- of a <link linkend="GdaPRow">GdaPRow</link> object for each row of the data model (thus increasing the memory consumption
+ of a <link linkend="GdaRow">GdaRow</link> object for each row of the data model (thus increasing the memory consumption
but reducing further access times). It is available only when the data access mode for the data model is random
(that is not cursor based). When data access is cursor based, this method will not be called.
</para>
Modified: trunk/doc/C/tmpl/gda-data-model-array.sgml
==============================================================================
--- trunk/doc/C/tmpl/gda-data-model-array.sgml (original)
+++ trunk/doc/C/tmpl/gda-data-model-array.sgml Mon Jul 28 19:51:03 2008
@@ -34,6 +34,11 @@
</para>
+<!-- ##### ARG GdaDataModelArray:read-only ##### -->
+<para>
+
+</para>
+
<!-- ##### STRUCT GdaDataModelArrayClass ##### -->
<para>
@@ -76,6 +81,17 @@
@Returns:
+<!-- ##### FUNCTION gda_data_model_array_get_row ##### -->
+<para>
+
+</para>
+
+ model:
+ row:
+ error:
+ Returns:
+
+
<!-- ##### FUNCTION gda_data_model_array_set_n_columns ##### -->
<para>
Modified: trunk/doc/C/tmpl/gda-row.sgml
==============================================================================
--- trunk/doc/C/tmpl/gda-row.sgml (original)
+++ trunk/doc/C/tmpl/gda-row.sgml Mon Jul 28 19:51:03 2008
@@ -1,12 +1,17 @@
<!-- ##### SECTION Title ##### -->
-GdaDataModel rows
+GdaDataModelArray's rows
<!-- ##### SECTION Short_Description ##### -->
-Row for a #GdaDataModel object
+Row for a #GdaDataModelArray object
<!-- ##### SECTION Long_Description ##### -->
<para>
-Each #GdaDataModel uses #GdaRow to let the user access each row it contains.
+ The #GdaDataModelArray object uses #GdaRow to store each row of data. Each #GdaRow has the same
+ number of #GValue values (equal to the number of columns of the data model).
+</para>
+<para>
+ As a side note, the #GdaRow object is also used internally by the implementation of the data models returned
+ when executing a SELECT statement.
</para>
<!-- ##### SECTION See_Also ##### -->
@@ -22,110 +27,18 @@
</para>
- object:
- priv:
-
-<!-- ##### FUNCTION gda_row_new ##### -->
-<para>
-
-</para>
-
- model:
- count:
- Returns:
-
-
-<!-- ##### FUNCTION gda_row_copy ##### -->
-<para>
-
-</para>
-
- row:
- Returns:
-
-
-<!-- ##### FUNCTION gda_row_new_from_list ##### -->
-<para>
-
-</para>
-
- model:
- values:
- Returns:
-
-
-<!-- ##### FUNCTION gda_row_set_model ##### -->
-<para>
-
-</para>
-
- row:
- model:
-
-
-<!-- ##### FUNCTION gda_row_get_model ##### -->
-<para>
-
-</para>
-
- row:
- Returns:
-
-
-<!-- ##### FUNCTION gda_row_get_number ##### -->
-<para>
-
-</para>
-
- row:
- Returns:
-
-
-<!-- ##### FUNCTION gda_row_set_number ##### -->
-<para>
-
-</para>
-
- row:
- number:
-
-<!-- ##### FUNCTION gda_row_get_id ##### -->
+<!-- ##### ARG GdaRow:nb-values ##### -->
<para>
</para>
- row:
- Returns:
-
-
-<!-- ##### FUNCTION gda_row_set_id ##### -->
-<para>
-
-</para>
-
- row:
- id:
-
-
-<!-- ##### FUNCTION gda_row_get_value ##### -->
-<para>
-
-</para>
-
- row:
- num:
- Returns:
-
-
-<!-- ##### FUNCTION gda_row_set_value ##### -->
+<!-- ##### FUNCTION gda_row_new ##### -->
<para>
</para>
- row:
- num:
- value:
+ count:
@Returns:
@@ -138,17 +51,7 @@
@Returns:
-<!-- ##### FUNCTION gda_row_set_is_default ##### -->
-<para>
-
-</para>
-
- row:
- num:
- is_default:
-
-
-<!-- ##### FUNCTION gda_row_get_is_default ##### -->
+<!-- ##### FUNCTION gda_row_get_value ##### -->
<para>
</para>
Modified: trunk/libgda/Makefile.am
==============================================================================
--- trunk/libgda/Makefile.am (original)
+++ trunk/libgda/Makefile.am Mon Jul 28 19:51:03 2008
@@ -35,7 +35,6 @@
gda-data-comparator.h \
gda-data-handler.h \
gda-data-model-array.h \
- gda-data-model-row.h \
gda-data-model.h \
$(GDA_BDB_H) \
gda-data-model-dir.h \
@@ -58,8 +57,8 @@
gda-meta-struct.h \
gda-mutex.h \
gda-quark-list.h \
- gda-set.h \
gda-row.h \
+ gda-set.h \
gda-server-operation.h \
gda-server-provider.h \
gda-server-provider-extra.h \
@@ -90,7 +89,6 @@
gda-data-handler.c \
gda-data-model-array.c \
$(GDA_BDB_S) \
- gda-data-model-row.c \
gda-data-model.c \
gda-data-model-dir.c \
gda-data-model-dsn-list.c \
@@ -113,8 +111,8 @@
gda-meta-struct-io.c \
gda-mutex.c \
gda-quark-list.c \
- gda-set.c \
gda-row.c \
+ gda-set.c \
gda-server-operation.c \
gda-server-provider.c \
gda-server-provider-extra.c \
Modified: trunk/libgda/gda-config.c
==============================================================================
--- trunk/libgda/gda-config.c (original)
+++ trunk/libgda/gda-config.c Mon Jul 28 19:51:03 2008
@@ -24,6 +24,7 @@
#include <gmodule.h>
#include <libgda/gda-config.h>
#include <glib/gi18n-lib.h>
+#include <glib/gstdio.h>
#include "gda-marshal.h"
#include <string.h>
#include <libgda/binreloc/gda-binreloc.h>
@@ -1257,7 +1258,6 @@
GdaProviderInfo *info;
GModule *handle;
gchar *path;
- gchar *ext;
void (*plugin_init) (const gchar *);
const gchar * (* plugin_get_name) (void);
const gchar * (* plugin_get_description) (void);
Modified: trunk/libgda/gda-data-access-wrapper.c
==============================================================================
--- trunk/libgda/gda-data-access-wrapper.c (original)
+++ trunk/libgda/gda-data-access-wrapper.c Mon Jul 28 19:51:03 2008
@@ -454,13 +454,22 @@
gint i;
GdaRow *row;
- row = gda_row_new ((GdaDataModel *) model, model->priv->nb_cols);
+ row = gda_row_new (model->priv->nb_cols);
for (i = 0; i < model->priv->nb_cols; i++) {
GdaHolder *holder;
holder = gda_data_model_iter_get_holder_for_field (model->priv->iter, i);
- if (holder)
- gda_row_set_value (row, i, gda_holder_get_value (holder));
+ if (holder) {
+ GValue *dest;
+ const GValue *cvalue = gda_holder_get_value (holder);
+ dest = gda_row_get_value (row, i);
+ if (cvalue) {
+ gda_value_reset_with_type (dest, G_VALUE_TYPE ((GValue *) cvalue));
+ gda_value_set_from_value (dest, cvalue);
+ }
+ else
+ gda_value_set_null (dest);
+ }
}
g_hash_table_insert (model->priv->rows, GINT_TO_POINTER (model->priv->iter_row), row);
Modified: trunk/libgda/gda-data-model-array.c
==============================================================================
--- trunk/libgda/gda-data-model-array.c (original)
+++ trunk/libgda/gda-data-model-array.c Mon Jul 28 19:51:03 2008
@@ -25,24 +25,26 @@
#include <glib/garray.h>
#include <libgda/gda-data-model-array.h>
#include <glib/gi18n-lib.h>
-#include <libgda/gda-row.h>
#include <libgda/gda-data-model.h>
#include <libgda/gda-data-model-extra.h>
#include <libgda/gda-util.h>
-#define PARENT_TYPE GDA_TYPE_DATA_MODEL_ROW
-
struct _GdaDataModelArrayPrivate {
+ gboolean notify_changes;
+ GHashTable *column_spec;
+
+ gboolean read_only;
+
/* number of columns in each row */
- gint number_of_columns;
+ gint number_of_columns;
/* the array of rows, each item is a GdaRow */
- GPtrArray *rows;
+ GArray *rows;
};
enum {
PROP_0,
-
+ PROP_READ_ONLY,
PROP_N_COLUMNS
};
@@ -55,205 +57,103 @@
static GObjectClass *parent_class = NULL;
+/* GdaDataModel interface */
+static void gda_data_model_array_data_model_init (GdaDataModelClass *iface);
+static gint gda_data_model_array_get_n_rows (GdaDataModel *model);
+static gint gda_data_model_array_get_n_columns (GdaDataModel *model);
+static GdaColumn *gda_data_model_array_describe_column (GdaDataModel *model, gint col);
+static const GValue *gda_data_model_array_get_value_at (GdaDataModel *model, gint col, gint row);
+static GdaValueAttribute gda_data_model_array_get_attributes_at (GdaDataModel *model, gint col, gint row);
+static GdaDataModelAccessFlags gda_data_model_array_get_access_flags(GdaDataModel *model);
+
+static gboolean gda_data_model_array_set_value_at (GdaDataModel *model, gint col, gint row,
+ const GValue *value, GError **error);
+static gboolean gda_data_model_array_set_values (GdaDataModel *model, gint row,
+ GList *values, GError **error);
+static gint gda_data_model_array_append_values (GdaDataModel *model, const GList *values, GError **error);
+static gint gda_data_model_array_append_row (GdaDataModel *model, GError **error);
+static gboolean gda_data_model_array_remove_row (GdaDataModel *model, gint row, GError **error);
+
+static void gda_data_model_array_set_notify (GdaDataModel *model, gboolean do_notify_changes);
+static gboolean gda_data_model_array_get_notify (GdaDataModel *model);
+
/*
* GdaDataModelArray class implementation
*/
-static gint
-gda_data_model_array_get_n_rows (GdaDataModelRow *model)
-{
- g_return_val_if_fail (GDA_IS_DATA_MODEL_ARRAY (model), -1);
- return GDA_DATA_MODEL_ARRAY (model)->priv->rows->len;
-}
-
-static gint
-gda_data_model_array_get_n_columns (GdaDataModelRow *model)
-{
- g_return_val_if_fail (GDA_IS_DATA_MODEL_ARRAY (model), -1);
- return GDA_DATA_MODEL_ARRAY (model)->priv->number_of_columns;
-}
-
-static GdaRow *
-gda_data_model_array_get_row (GdaDataModelRow *model, gint row, GError **error)
-{
- g_return_val_if_fail (GDA_IS_DATA_MODEL_ARRAY (model), NULL);
-
- if (row >= GDA_DATA_MODEL_ARRAY (model)->priv->rows->len) {
- g_set_error (error, 0, 0,
- _("Row %d out of range (0-%d)"), row,
- GDA_DATA_MODEL_ARRAY (model)->priv->rows->len- 1);
- return NULL;
- }
-
- return GDA_ROW (g_ptr_array_index (GDA_DATA_MODEL_ARRAY (model)->priv->rows, row));
-}
-
-static const GValue *
-gda_data_model_array_get_value_at (GdaDataModelRow *model, gint col, gint row)
-{
- GdaRow *fields;
-
- g_return_val_if_fail (GDA_IS_DATA_MODEL_ARRAY (model), NULL);
-
- if (GDA_DATA_MODEL_ARRAY (model)->priv->rows->len == 0) {
- g_warning (_("No row in data model"));
- return NULL;
- }
-
- if (row >= GDA_DATA_MODEL_ARRAY (model)->priv->rows->len) {
- g_warning (_("Row %d out of range (0-%d)"), row,
- GDA_DATA_MODEL_ARRAY (model)->priv->rows->len - 1);
- return NULL;
- }
-
- if (col >= GDA_DATA_MODEL_ARRAY (model)->priv->number_of_columns) {
- g_warning (_("Column %d out of range (0-%d)"), col,
- GDA_DATA_MODEL_ARRAY (model)->priv->number_of_columns - 1);
- return NULL;
- }
-
- fields = g_ptr_array_index (GDA_DATA_MODEL_ARRAY (model)->priv->rows, row);
- if (fields != NULL) {
- GValue *field;
-
- field = gda_row_get_value (fields, col);
- return (const GValue *) field;
- }
-
- return NULL;
-}
-
-static gboolean
-gda_data_model_array_is_updatable (GdaDataModelRow *model)
-{
- g_return_val_if_fail (GDA_IS_DATA_MODEL_ARRAY (model), FALSE);
- return TRUE;
-}
-
-static GdaRow *
-gda_data_model_array_append_values (GdaDataModelRow *model, const GList *values, GError **error)
-{
- gint len;
- GdaRow *row = NULL;
-
- g_return_val_if_fail (GDA_IS_DATA_MODEL_ARRAY (model), NULL);
- g_return_val_if_fail (values != NULL, NULL);
-
- len = g_list_length ((GList *) values);
- if (len != GDA_DATA_MODEL_ARRAY (model)->priv->number_of_columns) {
- g_set_error (error, 0, GDA_DATA_MODEL_VALUES_LIST_ERROR,
- _("Wrong number of values in values list"));
- return NULL;
- }
-
- row = gda_row_new_from_list (GDA_DATA_MODEL (model), values);
- if (!GDA_DATA_MODEL_ROW_CLASS (G_OBJECT_GET_CLASS (model))->append_row (model, row, error)) {
- g_object_unref (row);
- return NULL;
- }
-
- g_object_unref (row);
- return (GdaRow *) row;
-}
-
-static gboolean
-gda_data_model_array_append_row (GdaDataModelRow *model, GdaRow *row, GError **error)
+static void
+gda_data_model_array_data_model_init (GdaDataModelClass *iface)
{
- g_return_val_if_fail (GDA_IS_DATA_MODEL_ARRAY (model), FALSE);
- g_return_val_if_fail (row != NULL, FALSE);
-
- g_ptr_array_add (GDA_DATA_MODEL_ARRAY (model)->priv->rows, (GdaRow *) row);
- g_object_ref (row);
- gda_row_set_number ((GdaRow *) row, GDA_DATA_MODEL_ARRAY (model)->priv->rows->len - 1);
- gda_data_model_row_inserted ((GdaDataModel *) model, GDA_DATA_MODEL_ARRAY (model)->priv->rows->len - 1);
-
- return TRUE;
+ iface->i_get_n_rows = gda_data_model_array_get_n_rows;
+ iface->i_get_n_columns = gda_data_model_array_get_n_columns;
+ iface->i_describe_column = gda_data_model_array_describe_column;
+ iface->i_get_access_flags = gda_data_model_array_get_access_flags;
+ iface->i_get_value_at = gda_data_model_array_get_value_at;
+ iface->i_get_attributes_at = gda_data_model_array_get_attributes_at;
+
+ iface->i_create_iter = NULL;
+ iface->i_iter_at_row = NULL;
+ iface->i_iter_next = NULL;
+ iface->i_iter_prev = NULL;
+
+ iface->i_set_value_at = gda_data_model_array_set_value_at;
+ iface->i_set_values = gda_data_model_array_set_values;
+ iface->i_append_values = gda_data_model_array_append_values;
+ iface->i_append_row = gda_data_model_array_append_row;
+ iface->i_remove_row = gda_data_model_array_remove_row;
+ iface->i_find_row = NULL;
+
+ iface->i_set_notify = gda_data_model_array_set_notify;
+ iface->i_get_notify = gda_data_model_array_get_notify;
+ iface->i_send_hint = NULL;
}
-static gboolean
-gda_data_model_array_update_row (GdaDataModelRow *model, GdaRow *row, GError **error)
+GType
+gda_data_model_array_get_type (void)
{
- gint i;
- GdaDataModelArrayPrivate *priv;
- gint num;
-
- g_return_val_if_fail (GDA_IS_DATA_MODEL_ARRAY (model), FALSE);
- g_return_val_if_fail (row != NULL, FALSE);
-
- num = gda_row_get_number (row);
- priv = GDA_DATA_MODEL_ARRAY (model)->priv;
-
- for (i = 0; i < priv->rows->len; i++) {
- if (gda_row_get_number (priv->rows->pdata[i]) == num) {
- GdaRow *tmp;
-
- if (row == priv->rows->pdata[i]) {
- gda_data_model_row_updated ((GdaDataModel *) model, i);
- return TRUE;
- }
-
- tmp = gda_row_copy (row);
- g_object_unref (priv->rows->pdata[i]);
- priv->rows->pdata[i] = tmp;
- gda_data_model_row_updated ((GdaDataModel *) model, i);
-
- return TRUE;
- }
- }
+ static GType type = 0;
- g_set_error (error, 0, GDA_DATA_MODEL_ROW_NOT_FOUND_ERROR,
- _("Row not found in data model"));
- return FALSE;
-}
+ if (G_UNLIKELY (type == 0)) {
+ static GStaticMutex registering = G_STATIC_MUTEX_INIT;
+ static const GTypeInfo info = {
+ sizeof (GdaDataModelArrayClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) gda_data_model_array_class_init,
+ NULL,
+ NULL,
+ sizeof (GdaDataModelArray),
+ 0,
+ (GInstanceInitFunc) gda_data_model_array_init
+ };
-static gboolean
-gda_data_model_array_remove_row (GdaDataModelRow *model, GdaRow *row, GError **error)
-{
- gint i, rownum;
-
- g_return_val_if_fail (GDA_IS_DATA_MODEL_ARRAY (model), FALSE);
- g_return_val_if_fail (row != NULL, FALSE);
+ static const GInterfaceInfo data_model_info = {
+ (GInterfaceInitFunc) gda_data_model_array_data_model_init,
+ NULL,
+ NULL
+ };
- if (g_ptr_array_remove (GDA_DATA_MODEL_ARRAY (model)->priv->rows, (gpointer) row)) {
- /* renumber following rows */
- rownum = gda_row_get_number ((GdaRow *) row);
- for (i = (rownum + 1); i < GDA_DATA_MODEL_ARRAY (model)->priv->rows->len; i++)
- gda_row_set_number ((GdaRow *) gda_data_model_array_get_row (model, i, error), (i-1));
-
- /* tag the row as being removed */
- gda_row_set_id ((GdaRow *) row, "R");
- gda_row_set_number ((GdaRow *) row, -1);
- gda_data_model_row_removed ((GdaDataModel *) model, rownum);
- g_object_unref (row);
- return TRUE;
+ g_static_mutex_lock (®istering);
+ if (type == 0) {
+ type = g_type_register_static (G_TYPE_OBJECT, "GdaDataModelArray", &info, 0);
+ g_type_add_interface_static (type, GDA_TYPE_DATA_MODEL, &data_model_info);
+ }
+ g_static_mutex_unlock (®istering);
}
-
- g_set_error (error, 0, GDA_DATA_MODEL_ROW_NOT_FOUND_ERROR,
- _("Row not found in data model"));
- return FALSE;
+ return type;
}
static void
gda_data_model_array_class_init (GdaDataModelArrayClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GdaDataModelRowClass *model_class = GDA_DATA_MODEL_ROW_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
object_class->finalize = gda_data_model_array_finalize;
- object_class->get_property = gda_data_model_array_get_property;
object_class->set_property = gda_data_model_array_set_property;
- model_class->get_n_rows = gda_data_model_array_get_n_rows;
- model_class->get_n_columns = gda_data_model_array_get_n_columns;
- model_class->get_row = gda_data_model_array_get_row;
- model_class->get_value_at = gda_data_model_array_get_value_at;
- model_class->is_updatable = gda_data_model_array_is_updatable;
- model_class->append_values = gda_data_model_array_append_values;
- model_class->append_row = gda_data_model_array_append_row;
- model_class->update_row = gda_data_model_array_update_row;
- model_class->remove_row = gda_data_model_array_remove_row;
+ object_class->get_property = gda_data_model_array_get_property;
g_object_class_install_property (object_class,
PROP_N_COLUMNS,
@@ -264,6 +164,11 @@
G_MAXUINT,
0,
G_PARAM_READWRITE));
+ g_object_class_install_property (object_class, PROP_READ_ONLY,
+ g_param_spec_boolean ("read_only", NULL,
+ _("Whether data model can be modified"),
+ FALSE,
+ G_PARAM_READABLE | G_PARAM_WRITABLE));
}
static void
@@ -273,10 +178,24 @@
/* allocate internal structure */
model->priv = g_new0 (GdaDataModelArrayPrivate, 1);
+ model->priv->notify_changes = TRUE;
+ model->priv->column_spec = g_hash_table_new (g_direct_hash, g_direct_equal);
+ model->priv->read_only = FALSE;
model->priv->number_of_columns = 0;
- model->priv->rows = g_ptr_array_new ();
+ model->priv->rows = g_array_new (FALSE, FALSE, sizeof (GdaRow *));
}
+static void column_g_type_changed_cb (GdaColumn *column, GType old, GType new, GdaDataModelArray *model);
+
+static void
+hash_free_column (gpointer key, GdaColumn *column, GdaDataModelArray *model)
+{
+ g_signal_handlers_disconnect_by_func (G_OBJECT (column),
+ G_CALLBACK (column_g_type_changed_cb), model);
+ g_object_unref (column);
+}
+
+
static void
gda_data_model_array_finalize (GObject *object)
{
@@ -287,7 +206,10 @@
/* free memory */
gda_data_model_freeze (GDA_DATA_MODEL(model));
gda_data_model_array_clear (model);
- g_ptr_array_free (model->priv->rows, TRUE);
+ g_array_free (model->priv->rows, TRUE);
+ g_hash_table_foreach (model->priv->column_spec, (GHFunc) hash_free_column, model);
+ g_hash_table_destroy (model->priv->column_spec);
+ model->priv->column_spec = NULL;
g_free (model->priv);
model->priv = NULL;
@@ -304,10 +226,12 @@
g_return_if_fail (GDA_IS_DATA_MODEL_ARRAY (object));
model = GDA_DATA_MODEL_ARRAY (object);
- switch (prop_id)
- {
+ switch (prop_id) {
+ case PROP_READ_ONLY:
+ model->priv->read_only = g_value_get_boolean (value);
+ break;
case PROP_N_COLUMNS:
- gda_data_model_array_set_n_columns(model, g_value_get_uint(value));
+ gda_data_model_array_set_n_columns (model, g_value_get_uint (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -315,17 +239,20 @@
}
}
-static void gda_data_model_array_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+static void
+gda_data_model_array_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
GdaDataModelArray *model;
g_return_if_fail (GDA_IS_DATA_MODEL_ARRAY (object));
model = GDA_DATA_MODEL_ARRAY (object);
- switch (prop_id)
- {
+ switch (prop_id) {
+ case PROP_READ_ONLY:
+ g_value_set_boolean (value, model->priv->read_only);
+ break;
case PROP_N_COLUMNS:
- g_value_set_uint(value, model->priv->number_of_columns);
+ g_value_set_uint (value, model->priv->number_of_columns);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -333,31 +260,7 @@
}
}
-GType
-gda_data_model_array_get_type (void)
-{
- static GType type = 0;
- if (G_UNLIKELY (type == 0)) {
- static GStaticMutex registering = G_STATIC_MUTEX_INIT;
- static const GTypeInfo info = {
- sizeof (GdaDataModelArrayClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gda_data_model_array_class_init,
- NULL,
- NULL,
- sizeof (GdaDataModelArray),
- 0,
- (GInstanceInitFunc) gda_data_model_array_init
- };
- g_static_mutex_lock (®istering);
- if (type == 0)
- type = g_type_register_static (PARENT_TYPE, "GdaDataModelArray", &info, 0);
- g_static_mutex_unlock (®istering);
- }
- return type;
-}
/**
* gda_data_model_array_new
@@ -467,6 +370,31 @@
}
/**
+ * gda_data_model_array_get_row
+ * @model: a #GdaDataModelArray object
+ * @row:
+ * @error: a place to store errors, or %NULL
+ *
+ * Get a pointer to a row in @model
+ *
+ * Returns: the #GdaRow, or %NULL if an error occurred
+ */
+GdaRow *
+gda_data_model_array_get_row (GdaDataModelArray *model, gint row, GError **error)
+{
+ g_return_val_if_fail (GDA_IS_DATA_MODEL_ARRAY (model), NULL);
+
+ if (row >= model->priv->rows->len) {
+ g_set_error (error, 0, 0,
+ _("Row %d out of range (0-%d)"), row,
+ model->priv->rows->len- 1);
+ return NULL;
+ }
+
+ return g_array_index (model->priv->rows, GdaRow*, row);
+}
+
+/**
* gda_data_model_array_set_n_columns
* @model: the #GdaDataModelArray.
* @cols: number of columns for rows this data model should use.
@@ -498,9 +426,331 @@
{
g_return_if_fail (GDA_IS_DATA_MODEL_ARRAY (model));
- while (model->priv->rows->len > 0) {
- GdaRow *row = (GdaRow *) g_ptr_array_index (model->priv->rows, model->priv->rows->len-1);
+ while (model->priv->rows->len > 0)
+ gda_data_model_array_remove_row ((GdaDataModel*) model, 0, NULL);
+}
+
+
+/*
+ * GdaDataModel interface
+ */
+static gint
+gda_data_model_array_get_n_rows (GdaDataModel *model)
+{
+ g_return_val_if_fail (GDA_IS_DATA_MODEL_ARRAY (model), -1);
+ return GDA_DATA_MODEL_ARRAY (model)->priv->rows->len;
+}
+
+static gint
+gda_data_model_array_get_n_columns (GdaDataModel *model)
+{
+ g_return_val_if_fail (GDA_IS_DATA_MODEL_ARRAY (model), -1);
+ return GDA_DATA_MODEL_ARRAY (model)->priv->number_of_columns;
+}
+
+static GdaColumn *
+gda_data_model_array_describe_column (GdaDataModel *model, gint col)
+{
+ GdaColumn *column;
+
+ if (col >= gda_data_model_get_n_columns (model)) {
+ g_warning ("Column %d out of range (0-%d)", col, gda_data_model_get_n_columns (model) - 1);
+ return NULL;
+ }
+
+ column = g_hash_table_lookup (((GdaDataModelArray*) model)->priv->column_spec,
+ GINT_TO_POINTER (col));
+ if (!column) {
+ column = gda_column_new ();
+ g_signal_connect (G_OBJECT (column), "g_type_changed",
+ G_CALLBACK (column_g_type_changed_cb), model);
+ gda_column_set_position (column, col);
+ g_hash_table_insert (((GdaDataModelArray*) model)->priv->column_spec,
+ GINT_TO_POINTER (col), column);
+ }
- gda_data_model_array_remove_row (GDA_DATA_MODEL_ROW(model), row, NULL);
+ return column;
+}
+
+static void
+column_g_type_changed_cb (GdaColumn *column, GType old, GType new, GdaDataModelArray *model)
+{
+ /* emit a warning if there are GValues which are not compatible with the new type */
+ gint i, nrows, col;
+ const GValue *value;
+ gchar *str;
+ gint nb_warnings = 0;
+#define max_warnings 5
+
+ if ((new == G_TYPE_INVALID) ||
+ (new == GDA_TYPE_NULL))
+ return;
+
+ col = gda_column_get_position (column);
+ nrows = model->priv->rows->len;
+ for (i = 0; (i < nrows) && (nb_warnings < max_warnings); i++) {
+ GType vtype;
+
+ value = gda_data_model_array_get_value_at (GDA_DATA_MODEL (model), col, i);
+ if (value)
+ vtype = G_VALUE_TYPE ((GValue *) value);
+ if (value && (vtype != GDA_TYPE_NULL) && (vtype != new)) {
+ nb_warnings ++;
+ if (nb_warnings < max_warnings) {
+ if (nb_warnings == max_warnings)
+ g_warning ("Max number of warning reached, "
+ "more incompatible types...");
+ else {
+ str = gda_value_stringify ((GValue *) value);
+ g_warning ("Value of type %s not compatible with new"
+ " column type %s (value=%s)",
+ gda_g_type_to_string (G_VALUE_TYPE ((GValue *) value)),
+ gda_g_type_to_string (new), str);
+ g_free (str);
+ }
+ }
+ }
+
+ }
+}
+
+static const GValue *
+gda_data_model_array_get_value_at (GdaDataModel *model, gint col, gint row)
+{
+ GdaRow *fields;
+ GdaDataModelArray *amodel = (GdaDataModelArray*) model;
+
+ if (amodel->priv->rows->len == 0) {
+ g_warning (_("No row in data model"));
+ return NULL;
+ }
+
+ if (row >= amodel->priv->rows->len) {
+ g_warning (_("Row %d out of range (0-%d)"), row,
+ amodel->priv->rows->len - 1);
+ return NULL;
}
+
+ if (col >= amodel->priv->number_of_columns) {
+ g_warning (_("Column %d out of range (0-%d)"), col,
+ amodel->priv->number_of_columns - 1);
+ return NULL;
+ }
+
+ fields = g_array_index (amodel->priv->rows, GdaRow*, row);
+ if (fields != NULL) {
+ GValue *field;
+
+ field = gda_row_get_value (fields, col);
+ return (const GValue *) field;
+ }
+
+ return NULL;
+}
+
+static GdaValueAttribute
+gda_data_model_array_get_attributes_at (GdaDataModel *model, gint col, gint row)
+{
+ const GValue *gdavalue;
+ GdaValueAttribute flags = 0;
+ GdaColumn *column;
+
+ column = gda_data_model_array_describe_column (model, col);
+ if (gda_column_get_allow_null (column))
+ flags |= GDA_VALUE_ATTR_CAN_BE_NULL;
+ if (gda_column_get_default_value (column))
+ flags |= GDA_VALUE_ATTR_CAN_BE_DEFAULT;
+
+ if (row >= 0) {
+ gdavalue = gda_data_model_get_value_at (model, col, row);
+ if (!gdavalue || gda_value_is_null ((GValue *) gdavalue))
+ flags |= GDA_VALUE_ATTR_IS_NULL;
+ }
+
+ if (((GdaDataModelArray *)model)->priv->read_only)
+ flags |= GDA_VALUE_ATTR_NO_MODIF;
+
+ return flags;
+}
+
+
+static GdaDataModelAccessFlags
+gda_data_model_array_get_access_flags (GdaDataModel *model)
+{
+ GdaDataModelAccessFlags flags = GDA_DATA_MODEL_ACCESS_RANDOM |
+ GDA_DATA_MODEL_ACCESS_CURSOR_FORWARD |
+ GDA_DATA_MODEL_ACCESS_CURSOR_BACKWARD;
+
+ if (! ((GdaDataModelArray *)model)->priv->read_only)
+ flags |= GDA_DATA_MODEL_ACCESS_WRITE;
+
+ return flags;
+}
+
+static gboolean
+gda_data_model_array_set_value_at (GdaDataModel *model, gint col, gint row,
+ const GValue *value, GError **error)
+{
+ GdaRow *gdarow;
+ GdaDataModelArray *amodel = (GdaDataModelArray*) model;
+
+ g_return_val_if_fail (row >= 0, FALSE);
+
+ if (amodel->priv->read_only) {
+ g_set_error (error, 0, GDA_DATA_MODEL_ACCESS_ERROR,
+ _("Attempting to modify a read-only data model"));
+ return FALSE;
+ }
+
+ if (row > amodel->priv->rows->len) {
+ g_set_error (error, 0, GDA_DATA_MODEL_VALUES_LIST_ERROR,
+ _("Row number out of range"));
+ return FALSE;
+ }
+
+ gdarow = gda_data_model_array_get_row ((GdaDataModelArray *) model, row, error);
+ if (gdarow) {
+ GValue *dest;
+ dest = gda_row_get_value (gdarow, col);
+ if (value) {
+ gda_value_reset_with_type (dest, G_VALUE_TYPE ((GValue *) value));
+ gda_value_set_from_value (dest, value);
+ }
+ else
+ gda_value_set_null (dest);
+ gda_data_model_row_updated ((GdaDataModel *) model, row);
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+static gboolean
+gda_data_model_array_set_values (GdaDataModel *model, gint row, GList *values, GError **error)
+{
+ GdaRow *gdarow;
+ GdaDataModelArray *amodel = (GdaDataModelArray*) model;
+
+ g_return_val_if_fail (row >= 0, FALSE);
+
+ if (!values)
+ return TRUE;
+
+ if (amodel->priv->read_only) {
+ g_set_error (error, 0, GDA_DATA_MODEL_ACCESS_ERROR,
+ _("Attempting to modify a read-only data model"));
+ return FALSE;
+ }
+
+ if (g_list_length (values) > gda_data_model_get_n_columns (model)) {
+ g_set_error (error, 0, GDA_DATA_MODEL_VALUES_LIST_ERROR,
+ _("Too many values in list"));
+ return FALSE;
+ }
+
+ gdarow = gda_data_model_array_get_row (amodel, row, error);
+ if (gdarow) {
+ GList *list;
+ gint col;
+ for (list = values, col = 0; list; list = list->next, col++) {
+ GValue *dest;
+ dest = gda_row_get_value (gdarow, col);
+ if (list->data) {
+ gda_value_reset_with_type (dest, G_VALUE_TYPE ((GValue *) list->data));
+ gda_value_set_from_value (dest, (GValue *) list->data);
+ }
+ else
+ gda_value_set_null (dest);
+ }
+ gda_data_model_row_updated (model, row);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gint
+gda_data_model_array_append_values (GdaDataModel *model, const GList *values, GError **error)
+{
+ GdaRow *row;
+ const GList *list;
+ gint i;
+ GdaDataModelArray *amodel = (GdaDataModelArray *) model;
+
+ if (amodel->priv->read_only) {
+ g_set_error (error, 0, GDA_DATA_MODEL_ACCESS_ERROR,
+ _("Attempting to modify a read-only data model"));
+ return FALSE;
+ }
+
+ if (g_list_length ((GList *) values) > amodel->priv->number_of_columns) {
+ g_set_error (error, 0, GDA_DATA_MODEL_VALUES_LIST_ERROR,
+ _("Too many values in list"));
+ return FALSE;
+ }
+
+ row = gda_row_new (amodel->priv->number_of_columns);
+ for (i = 0, list = values; list; i++, list = list->next) {
+ GValue *dest;
+ dest = gda_row_get_value (row, i);
+ if (list->data) {
+ gda_value_reset_with_type (dest, G_VALUE_TYPE ((GValue *) list->data));
+ gda_value_set_from_value (dest, (GValue *) list->data);
+ }
+ else
+ gda_value_set_null (dest);
+ }
+
+ g_array_append_val (amodel->priv->rows, row);
+ gda_data_model_row_inserted (model, amodel->priv->rows->len - 1);
+ return amodel->priv->rows->len - 1;
+}
+
+static gint
+gda_data_model_array_append_row (GdaDataModel *model, GError **error)
+{
+ GdaRow *row;
+ GdaDataModelArray *amodel = (GdaDataModelArray *) model;
+
+ if (amodel->priv->read_only) {
+ g_set_error (error, 0, GDA_DATA_MODEL_ACCESS_ERROR,
+ _("Attempting to modify a read-only data model"));
+ return FALSE;
+ }
+
+ row = gda_row_new (amodel->priv->number_of_columns);
+ g_array_append_val (amodel->priv->rows, row);
+ gda_data_model_row_inserted (model, amodel->priv->rows->len - 1);
+ return amodel->priv->rows->len - 1;
+}
+
+static gboolean
+gda_data_model_array_remove_row (GdaDataModel *model, gint row, GError **error)
+{
+ GdaRow *gdarow;
+ GdaDataModelArray *amodel = (GdaDataModelArray *) model;
+
+ gdarow = g_array_index (amodel->priv->rows, GdaRow*, row);
+ if (gdarow) {
+ amodel->priv->rows = g_array_remove_index (amodel->priv->rows, row);
+ gda_data_model_row_removed ((GdaDataModel *) model, row);
+ g_object_unref (gdarow);
+ return TRUE;
+ }
+
+ g_set_error (error, 0, GDA_DATA_MODEL_ROW_NOT_FOUND_ERROR,
+ _("Row not found in data model"));
+ return FALSE;
+}
+
+static void
+gda_data_model_array_set_notify (GdaDataModel *model, gboolean do_notify_changes)
+{
+ ((GdaDataModelArray *) model)->priv->notify_changes = do_notify_changes;
+}
+
+static gboolean
+gda_data_model_array_get_notify (GdaDataModel *model)
+{
+ return ((GdaDataModelArray *) model)->priv->notify_changes;
}
Modified: trunk/libgda/gda-data-model-array.h
==============================================================================
--- trunk/libgda/gda-data-model-array.h (original)
+++ trunk/libgda/gda-data-model-array.h Mon Jul 28 19:51:03 2008
@@ -25,7 +25,7 @@
#define __GDA_DATA_MODEL_ARRAY_H__
#include <libgda/gda-data-model.h>
-#include <libgda/gda-data-model-row.h>
+#include <libgda/gda-row.h>
G_BEGIN_DECLS
@@ -40,18 +40,20 @@
typedef struct _GdaDataModelArrayPrivate GdaDataModelArrayPrivate;
struct _GdaDataModelArray {
- GdaDataModelRow model;
+ GObject object;
GdaDataModelArrayPrivate *priv;
};
struct _GdaDataModelArrayClass {
- GdaDataModelRowClass parent_class;
+ GObjectClass parent_class;
};
GType gda_data_model_array_get_type (void) G_GNUC_CONST;
GdaDataModel *gda_data_model_array_new_with_g_types (gint cols, ...);
GdaDataModel *gda_data_model_array_new (gint cols);
GdaDataModelArray *gda_data_model_array_copy_model (GdaDataModel *src, GError **error);
+
+GdaRow *gda_data_model_array_get_row (GdaDataModelArray *model, gint row, GError **error);
void gda_data_model_array_set_n_columns (GdaDataModelArray *model, gint cols);
void gda_data_model_array_clear (GdaDataModelArray *model);
Modified: trunk/libgda/gda-data-model.h
==============================================================================
--- trunk/libgda/gda-data-model.h (original)
+++ trunk/libgda/gda-data-model.h Mon Jul 28 19:51:03 2008
@@ -66,7 +66,8 @@
GDA_DATA_MODEL_ROW_OUT_OF_RANGE_ERROR,
GDA_DATA_MODEL_COLUMN_OUT_OF_RANGE_ERROR,
GDA_DATA_MODEL_VALUES_LIST_ERROR,
- GDA_DATA_MODEL_ROW_NOT_FOUND_ERROR
+ GDA_DATA_MODEL_ROW_NOT_FOUND_ERROR,
+ GDA_DATA_MODEL_ACCESS_ERROR
};
/* struct for the interface */
Modified: trunk/libgda/gda-row.c
==============================================================================
--- trunk/libgda/gda-row.c (original)
+++ trunk/libgda/gda-row.c Mon Jul 28 19:51:03 2008
@@ -24,34 +24,21 @@
#include "gda-row.h"
#include <string.h>
-#include "gda-marshal.h"
#include "gda-data-model.h"
#define PARENT_TYPE G_TYPE_OBJECT
struct _GdaRowPrivate {
GdaDataModel *model; /* can be NULL */
- gint number;
- gchar *id;
GValue *fields; /* GValue for each column */
- gboolean *is_default; /* one gboolean for each column */
gint nfields;
};
-/* signals */
-enum {
- VALUE_TO_CHANGE,
- VALUE_CHANGED,
- LAST_SIGNAL
-};
-
/* properties */
enum
{
PROP_0,
- PROP_MODEL,
- PROP_VALUES,
PROP_NB_VALUES
};
@@ -69,7 +56,6 @@
GValue *value,
GParamSpec *pspec);
-static guint gda_row_signals[LAST_SIGNAL] = { 0, 0 };
static GObjectClass *parent_class = NULL;
static void
@@ -78,25 +64,6 @@
GObjectClass *object_class = G_OBJECT_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
-
- gda_row_signals[VALUE_CHANGED] =
- g_signal_new ("value_changed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GdaRowClass, value_changed),
- NULL, NULL,
- gda_marshal_VOID__INT_BOXED_BOXED,
- G_TYPE_NONE,
- 3, G_TYPE_INT, G_TYPE_VALUE, G_TYPE_VALUE);
- gda_row_signals[VALUE_TO_CHANGE] =
- g_signal_new ("value_to_change",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GdaRowClass, value_to_change),
- NULL, NULL,
- gda_marshal_VOID__INT_BOXED_BOXED,
- G_TYPE_BOOLEAN,
- 3, G_TYPE_INT, G_TYPE_VALUE, G_TYPE_VALUE);
object_class->finalize = gda_row_finalize;
object_class->dispose = gda_row_dispose;
@@ -105,17 +72,6 @@
object_class->set_property = gda_row_set_property;
object_class->get_property = gda_row_get_property;
- g_object_class_install_property (object_class, PROP_MODEL,
- g_param_spec_object ("model", NULL, NULL,
- GDA_TYPE_DATA_MODEL,
- G_PARAM_READABLE | G_PARAM_WRITABLE));
-
- /* Note that this is actually a GList*,
- * but there does not seem to be a way to define that in the properties system:
- */
- g_object_class_install_property (object_class, PROP_VALUES,
- g_param_spec_pointer ("values", NULL, NULL,
- G_PARAM_WRITABLE));
g_object_class_install_property (object_class, PROP_NB_VALUES,
g_param_spec_int ("nb_values", NULL, NULL,
1, G_MAXINT, 1,
@@ -129,10 +85,7 @@
row->priv = g_new0 (GdaRowPrivate, 1);
row->priv->model = NULL;
- row->priv->number = -1;
- row->priv->id = NULL;
row->priv->fields = NULL;
- row->priv->is_default = NULL;
row->priv->nfields = 0;
}
@@ -142,10 +95,7 @@
GdaRow *row = (GdaRow *) object;
g_return_if_fail (GDA_IS_ROW (row));
-
- if (row->priv->model)
- gda_row_set_model (row, NULL);
-
+
parent_class->finalize (object);
}
@@ -159,13 +109,9 @@
if (row->priv) {
gint i;
- if (row->priv->id)
- g_free (row->priv->id);
for (i = 0; i < row->priv->nfields; i++)
gda_value_set_null (&(row->priv->fields [i]));
g_free (row->priv->fields);
- if (row->priv->is_default)
- g_free (row->priv->is_default);
g_free (row->priv);
row->priv = NULL;
@@ -185,36 +131,6 @@
row = GDA_ROW (object);
if (row->priv) {
switch (param_id) {
- case PROP_MODEL:
- gda_row_set_model (row, GDA_DATA_MODEL (g_value_get_object(value)));
- break;
- case PROP_VALUES: {
- const GList *l;
- GList *values;
- gint i;
-
- g_return_if_fail (!row->priv->fields);
-
- values = (GList *) g_value_get_pointer (value);
- i = g_list_length (values);
-
- row->priv->nfields = i;
- row->priv->fields = g_new0 (GValue, row->priv->nfields);
-
- for (i = 0, l = values; l != NULL; l = l->next, i++) {
- const GValue *value = (const GValue *) l->data;
-
- if (value && !gda_value_is_null (value)) {
- GValue *dest;
- dest = gda_row_get_value (row, i);
- gda_value_reset_with_type (dest, G_VALUE_TYPE ((GValue *) value));
- gda_value_set_from_value (dest, value);
- }
- else
- gda_value_set_null (gda_row_get_value (row, i));
- }
- break;
- }
case PROP_NB_VALUES:
g_return_if_fail (!row->priv->fields);
@@ -239,11 +155,10 @@
row = GDA_ROW (object);
if (row->priv) {
switch (param_id) {
- case PROP_MODEL:
- g_value_set_object (value, G_OBJECT (gda_row_get_model (row)));
- break;
- case PROP_VALUES:
case PROP_NB_VALUES:
+ g_value_set_int (value, row->priv->nfields);
+ break;
+ default:
g_assert_not_reached ();
break;
}
@@ -291,200 +206,11 @@
* Returns: a newly allocated #GdaRow object.
*/
GdaRow *
-gda_row_new (GdaDataModel *model, gint count)
+gda_row_new (gint count)
{
- GdaRow *row = NULL;
-
- if (model)
- g_return_val_if_fail (GDA_IS_DATA_MODEL (model), NULL);
g_return_val_if_fail (count > 0, NULL);
-
- row = g_object_new (GDA_TYPE_ROW, "model", model, "nb_values", count, NULL);
-
- return row;
-}
-
-/**
- * gda_row_copy
- * @row: the #GdaRow to copy
- *
- * Copy constructor.
- *
- * Returns: a new #GdaRow
- */
-GdaRow *
-gda_row_copy (GdaRow *row)
-{
- GdaRow *newrow;
- gint i;
-
- g_return_val_if_fail (GDA_IS_ROW (row), NULL);
- g_return_val_if_fail (row->priv, NULL);
-
- newrow = g_object_new (GDA_TYPE_ROW, "model", row->priv->model, "nb_values", row->priv->nfields, NULL);
-
- newrow->priv->number = row->priv->number;
- if (row->priv->id)
- newrow->priv->id = g_strdup (row->priv->id);
-
- /* copy values */
- newrow->priv->fields = g_new0 (GValue, row->priv->nfields);
- for (i = 0; i < row->priv->nfields; i++) {
- GValue *origval = gda_row_get_value (row, i);
- g_value_init (&(newrow->priv->fields[i]), G_VALUE_TYPE (origval));
- gda_value_set_from_value (&(newrow->priv->fields[i]), origval);
- }
-
- /* copy values' attributes */
- if (row->priv->is_default) {
- newrow->priv->is_default = g_new0 (gboolean, row->priv->nfields);
- memcpy (newrow->priv->is_default, row->priv->is_default, sizeof (gboolean) * row->priv->nfields);
- }
-
- return newrow;
-}
-
-/**
- * gda_row_new_from_list
- * @model: a #GdaDataModel this row belongs to, or %NULL if the row is outside any data model
- * @values: a list of #GValue's.
- *
- * Creates a #GdaRow from a list of #GValue's. These GValue's are
- * value-copied and the user is still responsible for freeing them with g_object_unref().
- *
- * See the gda_row_new() function's documentation for more information about the @model attribute
- *
- * Returns: the newly created row.
- */
-GdaRow *
-gda_row_new_from_list (GdaDataModel *model, const GList *values)
-{
- GdaRow *row;
- if (model)
- g_return_val_if_fail (GDA_IS_DATA_MODEL (model), NULL);
- row = g_object_new (GDA_TYPE_ROW, "model", model, "values", values, NULL);
-
- return row;
-}
-
-/**
- * gda_row_set_model
- * @row: a #GdaRow.
- * @model: a #GdaDataModel this row belongs to, or %NULL if the row is outside any data model
- *
- * Set the #GdaDataModel the given #GdaRow belongs to. Note that calling
- * this method should be reserved to GdaDataModel implementations and should
- * therefore not be called by the user.
- */
-void
-gda_row_set_model (GdaRow *row, GdaDataModel *model)
-{
- g_return_if_fail (GDA_IS_ROW (row));
- g_return_if_fail (row->priv);
-
- if (row->priv->model) {
- g_object_remove_weak_pointer (G_OBJECT (row->priv->model), (gpointer *) &(row->priv->model));
- row->priv->model = NULL;
- }
-
- if (model) {
- g_return_if_fail (GDA_IS_DATA_MODEL (model));
- row->priv->model = model;
- g_object_add_weak_pointer (G_OBJECT (model), (gpointer *) &(row->priv->model));
- }
-}
-
-/**
- * gda_row_get_model
- * @row: a #GdaRow.
- *
- * Gets the #GdaDataModel the given #GdaRow belongs to.
- *
- * Returns: a #GdaDataModel.
- */
-GdaDataModel *
-gda_row_get_model (GdaRow *row)
-{
- g_return_val_if_fail (GDA_IS_ROW (row), NULL);
- g_return_val_if_fail (row->priv, NULL);
-
- return row->priv->model;
-}
-
-/**
- * gda_row_get_number
- * @row: a #GdaRow.
- *
- * Gets the number of the given row, that is, its position in its containing
- * data model.
- *
- * Returns: the row number, or -1 if there was an error.
- */
-gint
-gda_row_get_number (GdaRow *row)
-{
- g_return_val_if_fail (GDA_IS_ROW (row), -1);
- g_return_val_if_fail (row->priv, -1);
-
- return row->priv->number;
-}
-
-/**
- * gda_row_set_number
- * @row: a #GdaRow.
- * @number: the new row number.
- *
- * Sets the row number for the given row.
- */
-void
-gda_row_set_number (GdaRow *row, gint number)
-{
- g_return_if_fail (GDA_IS_ROW (row));
- g_return_if_fail (row->priv);
-
- row->priv->number = number;
-}
-
-/**
- * gda_row_get_id
- * @row: a #GdaRow (which contains #GValue).
- *
- * Returns the unique identifier for this row. This identifier is
- * assigned by the different providers, to uniquely identify
- * rows returned to clients. If there is no ID, this means that
- * the row has not been created by a provider, or that it the
- * provider cannot identify it (ie, modifications to it won't
- * take place into the database).
- *
- * Returns: the unique identifier for this row.
- */
-const gchar *
-gda_row_get_id (GdaRow *row)
-{
- g_return_val_if_fail (GDA_IS_ROW (row), NULL);
- g_return_val_if_fail (row->priv, NULL);
-
- return (const gchar *) row->priv->id;
-}
-
-/**
- * gda_row_set_id
- * @row: a #GdaRow (which contains #GValue).
- * @id: new identifier for the row.
- *
- * Assigns a new identifier to the given row. This function is
- * usually called by providers.
- */
-void
-gda_row_set_id (GdaRow *row, const gchar *id)
-{
- g_return_if_fail (GDA_IS_ROW (row));
- g_return_if_fail (row->priv);
-
- if (row->priv->id)
- g_free (row->priv->id);
- row->priv->id = g_strdup (id);
+ return (GdaRow*) g_object_new (GDA_TYPE_ROW, "nb_values", count, NULL);
}
/**
@@ -495,7 +221,7 @@
* Gets a pointer to a #GValue stored in a #GdaRow.
*
* This is a pointer to the internal array of values. Don't try to free
- * or modify it.
+ * or modify it!
*
* Returns: a pointer to the #GValue in the position @num of @row.
*/
@@ -503,73 +229,11 @@
gda_row_get_value (GdaRow *row, gint num)
{
g_return_val_if_fail (GDA_IS_ROW (row), NULL);
- g_return_val_if_fail (row->priv, NULL);
g_return_val_if_fail (num >= 0 && num < row->priv->nfields, NULL);
return & (row->priv->fields[num]);
}
-/**
- * gda_row_set_value
- * @row: a #GdaRow
- * @num: field index.
- * @value: a #GValue to insert into @row at the @num position, or %NULL
- *
- * Sets the value stored at position @num in @row to be a copy of
- * @value.
- *
- * Returns: TRUE if no error occurred.
- */
-gboolean
-gda_row_set_value (GdaRow *row, gint num, const GValue *value)
-{
- GValue *current, *newval;
- gboolean retval;
-
- g_return_val_if_fail (GDA_IS_ROW (row), FALSE);
- g_return_val_if_fail (row->priv, FALSE);
- g_return_val_if_fail (num >= 0 && num < row->priv->nfields, FALSE);
-
- if (!value)
- newval = gda_value_new_null ();
- else
- newval = (GValue *) value;
-
- current = gda_row_get_value (row, num);
- g_signal_emit (G_OBJECT (row),
- gda_row_signals [VALUE_TO_CHANGE],
- 0, num, current, newval, &retval);
-
- /* FIXME: it seems the return value is always FALSE */
- retval = TRUE;
-
- if (retval) {
- current = gda_value_copy (gda_row_get_value (row, num));
- if (value) {
- if (gda_value_is_null (&(row->priv->fields[num])))
- gda_value_reset_with_type (&(row->priv->fields[num]),
- G_VALUE_TYPE (newval));
- retval = gda_value_set_from_value (&(row->priv->fields[num]), newval);
- }
- else
- gda_value_set_null (&(row->priv->fields[num]));
-
- if (retval) {
- const GValue *realval;
- realval = gda_row_get_value (row, num);
- g_signal_emit (G_OBJECT (row),
- gda_row_signals [VALUE_CHANGED],
- 0, num, current, realval);
- }
- gda_value_free (current);
- }
-
- if (!value)
- gda_value_free (newval);
-
-
- return retval;
-}
/**
* gda_row_get_length
@@ -585,47 +249,3 @@
return row->priv->nfields;
}
-
-
-/**
- * gda_row_set_default
- * @row: a #GdaRow
- * @num: field index
- * @is_default:
- *
- * Instructs the @row that the value at column @num must be considered as a default value
- */
-void
-gda_row_set_is_default (GdaRow *row, gint num, gboolean is_default)
-{
- g_return_if_fail (GDA_IS_ROW (row));
- g_return_if_fail (row->priv);
- g_return_if_fail (num >= 0 && num < row->priv->nfields);
-
- if (! row->priv->is_default)
- row->priv->is_default = g_new0 (gboolean, row->priv->nfields);
- row->priv->is_default [num] = is_default;
-}
-
-
-/**
- * gda_row_get_is_default
- * @row: a #GdaRow
- * @num: field index
- *
- * Tells if the value at column @num in @row must be considered as a default value
- *
- * Returns:
- */
-gboolean
-gda_row_get_is_default (GdaRow *row, gint num)
-{
- g_return_val_if_fail (GDA_IS_ROW (row), FALSE);
- g_return_val_if_fail (row->priv, FALSE);
- g_return_val_if_fail (num >= 0 && num < row->priv->nfields, FALSE);
-
- if (row->priv->is_default)
- return row->priv->is_default [num];
- else
- return FALSE;
-}
Modified: trunk/libgda/gda-row.h
==============================================================================
--- trunk/libgda/gda-row.h (original)
+++ trunk/libgda/gda-row.h Mon Jul 28 19:51:03 2008
@@ -1,5 +1,5 @@
/* GDA library
- * Copyright (C) 1998 - 2005 The GNOME Foundation.
+ * Copyright (C) 1998 - 2008 The GNOME Foundation.
*
* AUTHORS:
* Michael Lausch <michael lausch at>
@@ -26,8 +26,6 @@
#define __GDA_ROW_H__
#include <glib-object.h>
-#include <libgda/gda-column.h>
-#include <glib/gmacros.h>
#include <libgda/gda-decl.h>
G_BEGIN_DECLS
@@ -49,34 +47,13 @@
struct _GdaRowClass {
GObjectClass parent_class;
-
- /* signals */
- gboolean (* value_to_change) (GdaRow *row, gint num, const GValue *current, const GValue *proposed);
- void (* value_changed) (GdaRow *row, gint num, const GValue *old_value, const GValue *new_value);
};
-GType gda_row_get_type (void) G_GNUC_CONST;
-
-GdaRow *gda_row_new (GdaDataModel *model, gint count);
-GdaRow *gda_row_new_from_list (GdaDataModel *model, const GList *values);
-GdaRow *gda_row_copy (GdaRow *row);
-
-void gda_row_set_model (GdaRow *row, GdaDataModel *model);
-GdaDataModel *gda_row_get_model (GdaRow *row);
+GType gda_row_get_type (void) G_GNUC_CONST;
+GdaRow *gda_row_new (gint count);
gint gda_row_get_length (GdaRow *row);
-
-gint gda_row_get_number (GdaRow *row);
-void gda_row_set_number (GdaRow *row, gint number);
-
-const gchar *gda_row_get_id (GdaRow *row);
-void gda_row_set_id (GdaRow *row, const gchar *id);
-
-GValue *gda_row_get_value (GdaRow *row, gint num);
-gboolean gda_row_set_value (GdaRow *row, gint num, const GValue *value);
-
-void gda_row_set_is_default (GdaRow *row, gint num, gboolean is_default);
-gboolean gda_row_get_is_default (GdaRow *row, gint num);
+GValue *gda_row_get_value (GdaRow *row, gint num);
G_END_DECLS
Modified: trunk/libgda/providers-support/Makefile.am
==============================================================================
--- trunk/libgda/providers-support/Makefile.am (original)
+++ trunk/libgda/providers-support/Makefile.am Mon Jul 28 19:51:03 2008
@@ -8,17 +8,15 @@
psupport_headers = \
gda-pmodel.h \
- gda-prow.h \
gda-pstmt.h
libgda_psupport_la_SOURCES = \
$(psupport_headers) \
gda-pmodel.c \
- gda-prow.c \
gda-pstmt.c
libgda_psupport_la_LDFLAGS = -export-dynamic -module -avoid-version $(NO_UNDEFINED)
libgda_psupport_la_LIBADD = $(LIBGDA_LIBS)
psupportincludedir=$(includedir)/libgda-$(GDA_ABI_MAJOR_VERSION).$(GDA_ABI_MINOR_VERSION)/providers-support
-psupportinclude_HEADERS=$(psupport_headers)
\ No newline at end of file
+psupportinclude_HEADERS=$(psupport_headers)
Modified: trunk/libgda/providers-support/gda-pmodel.c
==============================================================================
--- trunk/libgda/providers-support/gda-pmodel.c (original)
+++ trunk/libgda/providers-support/gda-pmodel.c Mon Jul 28 19:51:03 2008
@@ -26,7 +26,7 @@
#include <libgda/gda-data-model-private.h>
#include <string.h>
#include "gda-pmodel.h"
-#include "gda-prow.h"
+#include "gda-row.h"
#include "gda-pstmt.h"
#include <libgda/gda-statement.h>
#include <libgda/gda-holder.h>
@@ -44,12 +44,12 @@
};
/*
- * Getting a GdaPRow from a model row:
- * model row ==(model->index)==> model->rows index ==(model->rows)==> GdaPRow
+ * Getting a GdaRow from a model row:
+ * model row ==(model->index)==> model->rows index ==(model->rows)==> GdaRow
*/
struct _GdaPModelPrivate {
GSList *columns; /* list of GdaColumn objects */
- GArray *rows; /* Array of GdaPRow */
+ GArray *rows; /* Array of GdaRow pointers */
GHashTable *index; /* key = model row number + 1, value = index in @rows array + 1*/
/* Internal iterator's information, if GDA_DATA_MODEL_CURSOR_* based access */
@@ -227,7 +227,7 @@
g_return_if_fail (GDA_IS_PMODEL (model));
model->priv = g_new0 (GdaPModelPrivate, 1);
model->cnc = NULL;
- model->priv->rows = g_array_new (FALSE, FALSE, sizeof (GdaPRow *));
+ model->priv->rows = g_array_new (FALSE, FALSE, sizeof (GdaRow *));
model->priv->index = g_hash_table_new (g_direct_hash, g_direct_equal);
model->prep_stmt = NULL;
model->priv->columns = NULL;
@@ -257,8 +257,8 @@
}
if (model->priv->rows) {
for (i = 0; i < model->priv->rows->len; i++) {
- GdaPRow *prow;
- prow = g_array_index (model->priv->rows, GdaPRow *, i);
+ GdaRow *prow;
+ prow = g_array_index (model->priv->rows, GdaRow *, i);
g_object_unref (prow);
}
g_array_free (model->priv->rows, TRUE);
@@ -447,17 +447,17 @@
/**
* gda_pmodel_take_row
* @model: a #GdaPModel data model
- * @row: a #GdaPRow row
+ * @row: a #GdaRow row
* @rownum: "external" advertized row number
*
* Stores @row into @model, externally advertized at row number @rownum. The reference to
* @row is stolen.
*/
void
-gda_pmodel_take_row (GdaPModel *model, GdaPRow *row, gint rownum)
+gda_pmodel_take_row (GdaPModel *model, GdaRow *row, gint rownum)
{
g_return_if_fail (GDA_IS_PMODEL (model));
- g_return_if_fail (GDA_IS_PROW (row));
+ g_return_if_fail (GDA_IS_ROW (row));
if (g_hash_table_lookup (model->priv->index, GINT_TO_POINTER (rownum + 1)))
g_error ("INTERNAL error: row %d already exists, aborting", rownum);
@@ -472,11 +472,11 @@
* @model: a #GdaPModel data model
* @rownum: "external" advertized row number
*
- * Get the #GdaPRow object stored within @model at row @rownum
+ * Get the #GdaRow object stored within @model at row @rownum
*
- * Returns: the requested #GdaPRow, or %NULL if not found
+ * Returns: the requested #GdaRow, or %NULL if not found
*/
-GdaPRow *
+GdaRow *
gda_pmodel_get_stored_row (GdaPModel *model, gint rownum)
{
gint irow;
@@ -487,7 +487,7 @@
if (irow <= 0)
return NULL;
else
- return g_array_index (model->priv->rows, GdaPRow *, irow - 1);
+ return g_array_index (model->priv->rows, GdaRow *, irow - 1);
}
/**
@@ -618,7 +618,7 @@
static const GValue *
gda_pmodel_get_value_at (GdaDataModel *model, gint col, gint row)
{
- GdaPRow *prow;
+ GdaRow *prow;
gint irow, nrows;
GdaPModel *imodel;
@@ -642,10 +642,10 @@
CLASS (model)->fetch_random (imodel, &prow, row, NULL);
}
else
- prow = g_array_index (imodel->priv->rows, GdaPRow *, irow - 1);
+ prow = g_array_index (imodel->priv->rows, GdaRow *, irow - 1);
if (prow)
- return gda_prow_get_value (prow, col);
+ return gda_row_get_value (prow, col);
return NULL;
}
@@ -690,12 +690,12 @@
}
}
-static void update_iter (GdaPModel *imodel, GdaPRow *prow);
+static void update_iter (GdaPModel *imodel, GdaRow *prow);
static gboolean
gda_pmodel_iter_next (GdaDataModel *model, GdaDataModelIter *iter)
{
GdaPModel *imodel;
- GdaPRow *prow = NULL;
+ GdaRow *prow = NULL;
gint target_iter_row;
gint irow;
@@ -719,7 +719,7 @@
irow = GPOINTER_TO_INT (g_hash_table_lookup (imodel->priv->index, GINT_TO_POINTER (target_iter_row + 1)));
if (irow > 0)
- prow = g_array_index (imodel->priv->rows, GdaPRow *, irow - 1);
+ prow = g_array_index (imodel->priv->rows, GdaRow *, irow - 1);
if (!CLASS (model)->fetch_next (imodel, &prow, target_iter_row, NULL))
TO_IMPLEMENT;
@@ -740,7 +740,7 @@
gda_pmodel_iter_prev (GdaDataModel *model, GdaDataModelIter *iter)
{
GdaPModel *imodel;
- GdaPRow *prow = NULL;
+ GdaRow *prow = NULL;
gint target_iter_row;
gint irow;
@@ -767,7 +767,7 @@
irow = GPOINTER_TO_INT (g_hash_table_lookup (imodel->priv->index, GINT_TO_POINTER (target_iter_row + 1)));
if (irow > 0)
- prow = g_array_index (imodel->priv->rows, GdaPRow *, irow - 1);
+ prow = g_array_index (imodel->priv->rows, GdaRow *, irow - 1);
if (!CLASS (model)->fetch_prev (imodel, &prow, target_iter_row, NULL))
TO_IMPLEMENT;
@@ -787,7 +787,7 @@
gda_pmodel_iter_at_row (GdaDataModel *model, GdaDataModelIter *iter, gint row)
{
GdaPModel *imodel;
- GdaPRow *prow = NULL;
+ GdaRow *prow = NULL;
gint irow;
g_return_val_if_fail (GDA_IS_PMODEL (model), FALSE);
@@ -802,7 +802,7 @@
irow = GPOINTER_TO_INT (g_hash_table_lookup (imodel->priv->index, GINT_TO_POINTER (row + 1)));
if (irow > 0)
- prow = g_array_index (imodel->priv->rows, GdaPRow *, irow - 1);
+ prow = g_array_index (imodel->priv->rows, GdaRow *, irow - 1);
if (CLASS (model)->fetch_at) {
if (!CLASS (model)->fetch_at (imodel, &prow, row, NULL))
@@ -833,7 +833,7 @@
}
static void
-update_iter (GdaPModel *imodel, GdaPRow *prow)
+update_iter (GdaPModel *imodel, GdaRow *prow)
{
gint i;
GdaDataModelIter *iter = imodel->priv->iter;
@@ -848,7 +848,7 @@
plist;
i++, plist = plist->next) {
const GValue *value;
- value = gda_prow_get_value (prow, i);
+ value = gda_row_get_value (prow, i);
gda_holder_set_value ((GdaHolder*) plist->data, value);
}
Modified: trunk/libgda/providers-support/gda-pmodel.h
==============================================================================
--- trunk/libgda/providers-support/gda-pmodel.h (original)
+++ trunk/libgda/providers-support/gda-pmodel.h Mon Jul 28 19:51:03 2008
@@ -24,7 +24,7 @@
#define __GDA_PMODEL_H__
#include <glib-object.h>
-#include <libgda/providers-support/gda-prow.h>
+#include <libgda/gda-row.h>
#include <libgda/providers-support/gda-pstmt.h>
G_BEGIN_DECLS
@@ -44,7 +44,7 @@
GdaPModelPrivate *priv;
/* read only information */
GdaPStmt *prep_stmt; /* use the "prepared-stmt" property to set this */
- gint nb_stored_rows; /* number of GdaPRow objects currently stored */
+ gint nb_stored_rows; /* number of GdaRow objects currently stored */
gint advertized_nrows; /* set when the number of rows becomes known */
GdaConnection *cnc;
};
@@ -66,18 +66,18 @@
/* GDA_DATA_MODEL_ACCESS_RANDOM */
gint (*fetch_nb_rows) (GdaPModel *model);
- gboolean (*fetch_random) (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
+ gboolean (*fetch_random) (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
gboolean (*store_all) (GdaPModel *model, GError **error);
/* GDA_STATEMENT_MODEL_CURSOR_* */
- gboolean (*fetch_next) (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
- gboolean (*fetch_prev) (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
- gboolean (*fetch_at) (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
+ gboolean (*fetch_next) (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
+ gboolean (*fetch_prev) (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
+ gboolean (*fetch_at) (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
};
GType gda_pmodel_get_type (void) G_GNUC_CONST;
-void gda_pmodel_take_row (GdaPModel *model, GdaPRow *row, gint rownum);
-GdaPRow *gda_pmodel_get_stored_row (GdaPModel *model, gint rownum);
+void gda_pmodel_take_row (GdaPModel *model, GdaRow *row, gint rownum);
+GdaRow *gda_pmodel_get_stored_row (GdaPModel *model, gint rownum);
GdaConnection *gda_pmodel_get_connection (GdaPModel *model);
gboolean gda_pmodel_set_modification_query (GdaPModel *model, GdaStatement *mod_stmt, GError **error);
Modified: trunk/libgda/sqlite/gda-sqlite-recordset.c
==============================================================================
--- trunk/libgda/sqlite/gda-sqlite-recordset.c (original)
+++ trunk/libgda/sqlite/gda-sqlite-recordset.c Mon Jul 28 19:51:03 2008
@@ -40,16 +40,16 @@
/* virtual methods */
static gint gda_sqlite_recordset_fetch_nb_rows (GdaPModel *model);
-static gboolean gda_sqlite_recordset_fetch_random (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
+static gboolean gda_sqlite_recordset_fetch_random (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
-static gboolean gda_sqlite_recordset_fetch_next (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
+static gboolean gda_sqlite_recordset_fetch_next (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
-static GdaPRow *fetch_next_sqlite_row (GdaSqliteRecordset *model, gboolean do_store, GError **error);
+static GdaRow *fetch_next_sqlite_row (GdaSqliteRecordset *model, gboolean do_store, GError **error);
struct _GdaSqliteRecordsetPrivate {
gint next_row_num;
- GdaPRow *tmp_row; /* used in cursor mode */
+ GdaRow *tmp_row; /* used in cursor mode */
};
static GObjectClass *parent_class = NULL;
@@ -148,7 +148,7 @@
g_print ("Hey!, all columns are known for prep stmt %p\n", pmodel->prep_stmt);
*/
for (; nb_missing > 0; ) {
- GdaPRow *prow;
+ GdaRow *prow;
prow = fetch_next_sqlite_row (model, TRUE, NULL);
if (!prow)
break;
@@ -314,13 +314,13 @@
return gtype;
}
-static GdaPRow *
+static GdaRow *
fetch_next_sqlite_row (GdaSqliteRecordset *model, gboolean do_store, GError **error)
{
int rc;
SqliteConnectionData *cdata;
GdaSqlitePStmt *ps;
- GdaPRow *prow = NULL;
+ GdaRow *prow = NULL;
cdata = (SqliteConnectionData*) gda_connection_internal_get_provider_data
(gda_pmodel_get_connection ((GdaPModel*) model));
@@ -334,7 +334,7 @@
gint col;
gboolean has_error = FALSE;
- prow = gda_prow_new (_GDA_PSTMT (ps)->ncols);
+ prow = gda_row_new (_GDA_PSTMT (ps)->ncols);
for (col = 0; col < _GDA_PSTMT (ps)->ncols; col++) {
GValue *value;
GType type = _GDA_PSTMT (ps)->types [col];
@@ -353,7 +353,7 @@
}
/* fill GValue */
- value = gda_prow_get_value (prow, col);
+ value = gda_row_get_value (prow, col);
if (sqlite3_column_text (ps->sqlite_stmt, col) == NULL) {
/* we have a NULL value */
gda_value_set_null (value);
@@ -474,7 +474,7 @@
gda_sqlite_recordset_fetch_nb_rows (GdaPModel *model)
{
GdaSqliteRecordset *imodel;
- GdaPRow *prow = NULL;
+ GdaRow *prow = NULL;
imodel = GDA_SQLITE_RECORDSET (model);
if (model->advertized_nrows >= 0)
@@ -487,12 +487,12 @@
}
/*
- * Create a new filled #GdaPRow object for the row at position @rownum.
+ * Create a new filled #GdaRow object for the row at position @rownum.
*
- * Each new #GdaPRow created is "given" to the #GdaPModel implementation using gda_pmodel_take_row ().
+ * Each new #GdaRow created is "given" to the #GdaPModel implementation using gda_pmodel_take_row ().
*/
static gboolean
-gda_sqlite_recordset_fetch_random (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_sqlite_recordset_fetch_random (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaSqliteRecordset *imodel;
@@ -518,13 +518,13 @@
}
/*
- * Create a new filled #GdaPRow object for the next cursor row
+ * Create a new filled #GdaRow object for the next cursor row
*
- * Each new #GdaPRow created is referenced only by imodel->priv->tmp_row (the #GdaPModel implementation
- * never keeps a reference to it). Before a new #GdaPRow gets created, the previous one, if set, is discarded.
+ * Each new #GdaRow created is referenced only by imodel->priv->tmp_row (the #GdaPModel implementation
+ * never keeps a reference to it). Before a new #GdaRow gets created, the previous one, if set, is discarded.
*/
static gboolean
-gda_sqlite_recordset_fetch_next (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_sqlite_recordset_fetch_next (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaSqliteRecordset *imodel = (GdaSqliteRecordset*) model;
Modified: trunk/po/POTFILES.in
==============================================================================
--- trunk/po/POTFILES.in (original)
+++ trunk/po/POTFILES.in Mon Jul 28 19:51:03 2008
@@ -12,7 +12,6 @@
libgda/gda-data-model-import.c
libgda/gda-data-model-iter.c
libgda/gda-data-model-query.c
-libgda/gda-data-model-row.c
libgda/gda-data-proxy.c
libgda/gda-easy.c
libgda/gda-init.c
Modified: trunk/providers/firebird/gda-firebird-recordset.c
==============================================================================
--- trunk/providers/firebird/gda-firebird-recordset.c (original)
+++ trunk/providers/firebird/gda-firebird-recordset.c Mon Jul 28 19:51:03 2008
@@ -38,10 +38,10 @@
/* virtual methods */
static gint gda_firebird_recordset_fetch_nb_rows (GdaPModel *model);
-static gboolean gda_firebird_recordset_fetch_random (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
-static gboolean gda_firebird_recordset_fetch_next (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
-static gboolean gda_firebird_recordset_fetch_prev (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
-static gboolean gda_firebird_recordset_fetch_at (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
+static gboolean gda_firebird_recordset_fetch_random (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
+static gboolean gda_firebird_recordset_fetch_next (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
+static gboolean gda_firebird_recordset_fetch_prev (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
+static gboolean gda_firebird_recordset_fetch_at (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
struct _GdaFirebirdRecordsetPrivate {
@@ -232,22 +232,22 @@
}
/*
- * Create a new filled #GdaPRow object for the row at position @rownum, and put it into *prow.
+ * Create a new filled #GdaRow object for the row at position @rownum, and put it into *prow.
*
* WARNING: @prow will NOT be NULL, but *prow may or may not be NULL:
- * - If *prow is NULL then a new #GdaPRow object has to be created,
- * - and otherwise *prow contains a #GdaPRow object which has already been created
+ * - If *prow is NULL then a new #GdaRow object has to be created,
+ * - and otherwise *prow contains a #GdaRow object which has already been created
* (through a call to this very function), and in this case it should not be modified
* but the function may return FALSE if an error occurred.
*
- * Memory management for that new GdaPRow object is left to the implementation, which
+ * Memory management for that new GdaRow object is left to the implementation, which
* can use gda_pmodel_take_row(). If new row objects are "given" to the GdaPModel implemantation
* using that method, then this method should detect when all the data model rows have been analysed
* (when model->nb_stored_rows == model->advertized_nrows) and then possibly discard the API handle
* as it won't be used anymore to fetch rows.
*/
static gboolean
-gda_firebird_recordset_fetch_random (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_firebird_recordset_fetch_random (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaFirebirdRecordset *imodel;
@@ -259,7 +259,7 @@
}
/*
- * Create and "give" filled #GdaPRow object for all the rows in the model
+ * Create and "give" filled #GdaRow object for all the rows in the model
*/
static gboolean
gda_firebird_recordset_store_all (GdaPModel *model, GError **error)
@@ -271,7 +271,7 @@
/* default implementation */
for (i = 0; i < model->advertized_nrows; i++) {
- GdaPRow *prow;
+ GdaRow *prow;
if (! gda_firebird_recordset_fetch_random (model, &prow, i, error))
return FALSE;
}
@@ -279,19 +279,19 @@
}
/*
- * Create a new filled #GdaPRow object for the next cursor row, and put it into *prow.
+ * Create a new filled #GdaRow object for the next cursor row, and put it into *prow.
*
* WARNING: @prow will NOT be NULL, but *prow may or may not be NULL:
- * - If *prow is NULL then a new #GdaPRow object has to be created,
- * - and otherwise *prow contains a #GdaPRow object which has already been created
+ * - If *prow is NULL then a new #GdaRow object has to be created,
+ * - and otherwise *prow contains a #GdaRow object which has already been created
* (through a call to this very function), and in this case it should not be modified
* but the function may return FALSE if an error occurred.
*
- * Memory management for that new GdaPRow object is left to the implementation, which
+ * Memory management for that new GdaRow object is left to the implementation, which
* can use gda_pmodel_take_row().
*/
static gboolean
-gda_firebird_recordset_fetch_next (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_firebird_recordset_fetch_next (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaFirebirdRecordset *imodel = (GdaFirebirdRecordset*) model;
@@ -301,19 +301,19 @@
}
/*
- * Create a new filled #GdaPRow object for the previous cursor row, and put it into *prow.
+ * Create a new filled #GdaRow object for the previous cursor row, and put it into *prow.
*
* WARNING: @prow will NOT be NULL, but *prow may or may not be NULL:
- * - If *prow is NULL then a new #GdaPRow object has to be created,
- * - and otherwise *prow contains a #GdaPRow object which has already been created
+ * - If *prow is NULL then a new #GdaRow object has to be created,
+ * - and otherwise *prow contains a #GdaRow object which has already been created
* (through a call to this very function), and in this case it should not be modified
* but the function may return FALSE if an error occurred.
*
- * Memory management for that new GdaPRow object is left to the implementation, which
+ * Memory management for that new GdaRow object is left to the implementation, which
* can use gda_pmodel_take_row().
*/
static gboolean
-gda_firebird_recordset_fetch_prev (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_firebird_recordset_fetch_prev (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaFirebirdRecordset *imodel = (GdaFirebirdRecordset*) model;
@@ -323,19 +323,19 @@
}
/*
- * Create a new filled #GdaPRow object for the cursor row at position @rownum, and put it into *prow.
+ * Create a new filled #GdaRow object for the cursor row at position @rownum, and put it into *prow.
*
* WARNING: @prow will NOT be NULL, but *prow may or may not be NULL:
- * - If *prow is NULL then a new #GdaPRow object has to be created,
- * - and otherwise *prow contains a #GdaPRow object which has already been created
+ * - If *prow is NULL then a new #GdaRow object has to be created,
+ * - and otherwise *prow contains a #GdaRow object which has already been created
* (through a call to this very function), and in this case it should not be modified
* but the function may return FALSE if an error occurred.
*
- * Memory management for that new GdaPRow object is left to the implementation, which
+ * Memory management for that new GdaRow object is left to the implementation, which
* can use gda_pmodel_take_row().
*/
static gboolean
-gda_firebird_recordset_fetch_at (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_firebird_recordset_fetch_at (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaFirebirdRecordset *imodel = (GdaFirebirdRecordset*) model;
Modified: trunk/providers/mysql/gda-mysql-recordset.c
==============================================================================
--- trunk/providers/mysql/gda-mysql-recordset.c (original)
+++ trunk/providers/mysql/gda-mysql-recordset.c Mon Jul 28 19:51:03 2008
@@ -58,22 +58,22 @@
gda_mysql_recordset_fetch_nb_rows (GdaPModel *model);
static gboolean
gda_mysql_recordset_fetch_random (GdaPModel *model,
- GdaPRow **prow,
+ GdaRow **prow,
gint rownum,
GError **error);
static gboolean
gda_mysql_recordset_fetch_next (GdaPModel *model,
- GdaPRow **prow,
+ GdaRow **prow,
gint rownum,
GError **error);
static gboolean
gda_mysql_recordset_fetch_prev (GdaPModel *model,
- GdaPRow **prow,
+ GdaRow **prow,
gint rownum,
GError **error);
static gboolean
gda_mysql_recordset_fetch_at (GdaPModel *model,
- GdaPRow **prow,
+ GdaRow **prow,
gint rownum,
GError **error);
@@ -455,7 +455,7 @@
}
-static GdaPRow *
+static GdaRow *
new_row_from_mysql_stmt (GdaMysqlRecordset *imodel,
gint rownum)
{
@@ -464,13 +464,13 @@
MYSQL_BIND *mysql_bind_result = ((GdaMysqlPStmt *) ((GdaPModel *) imodel)->prep_stmt)->mysql_bind_result;
g_assert (mysql_bind_result);
- GdaPRow *prow = gda_prow_new (((GdaPModel *) imodel)->prep_stmt->ncols);
+ GdaRow *prow = gda_row_new (((GdaPModel *) imodel)->prep_stmt->ncols);
gint col;
for (col = 0; col < ((GdaPModel *) imodel)->prep_stmt->ncols; ++col) {
gint i = col;
- GValue *value = gda_prow_get_value (prow, i);
+ GValue *value = gda_row_get_value (prow, i);
GType type = ((GdaPModel *) imodel)->prep_stmt->types[i];
gda_value_reset_with_type (value, type);
@@ -616,15 +616,15 @@
/*
- * Create a new filled #GdaPRow object for the row at position @rownum, and put it into *prow.
+ * Create a new filled #GdaRow object for the row at position @rownum, and put it into *prow.
*
* WARNING: @prow will NOT be NULL, but *prow may or may not be NULL:
- * - If *prow is NULL then a new #GdaPRow object has to be created,
- * - and otherwise *prow contains a #GdaPRow object which has already been created
+ * - If *prow is NULL then a new #GdaRow object has to be created,
+ * - and otherwise *prow contains a #GdaRow object which has already been created
* (through a call to this very function), and in this case it should not be modified
* but the function may return FALSE if an error occurred.
*
- * Memory management for that new GdaPRow object is left to the implementation, which
+ * Memory management for that new GdaRow object is left to the implementation, which
* can use gda_pmodel_take_row(). If new row objects are "given" to the GdaPModel implemantation
* using that method, then this method should detect when all the data model rows have been analysed
* (when model->nb_stored_rows == model->advertized_nrows) and then possibly discard the API handle
@@ -632,7 +632,7 @@
*/
static gboolean
gda_mysql_recordset_fetch_random (GdaPModel *model,
- GdaPRow **prow,
+ GdaRow **prow,
gint rownum,
GError **error)
{
@@ -667,7 +667,7 @@
}
/*
- * Create and "give" filled #GdaPRow object for all the rows in the model
+ * Create and "give" filled #GdaRow object for all the rows in the model
*/
static gboolean
gda_mysql_recordset_store_all (GdaPModel *model, GError **error)
@@ -679,7 +679,7 @@
/* default implementation */
for (i = 0; i < model->advertized_nrows; i++) {
- GdaPRow *prow;
+ GdaRow *prow;
if (! gda_mysql_recordset_fetch_random (model, &prow, i, error))
return FALSE;
}
@@ -687,19 +687,19 @@
}
/*
- * Create a new filled #GdaPRow object for the next cursor row, and put it into *prow.
+ * Create a new filled #GdaRow object for the next cursor row, and put it into *prow.
*
* WARNING: @prow will NOT be NULL, but *prow may or may not be NULL:
- * - If *prow is NULL then a new #GdaPRow object has to be created,
- * - and otherwise *prow contains a #GdaPRow object which has already been created
+ * - If *prow is NULL then a new #GdaRow object has to be created,
+ * - and otherwise *prow contains a #GdaRow object which has already been created
* (through a call to this very function), and in this case it should not be modified
* but the function may return FALSE if an error occurred.
*
- * Memory management for that new GdaPRow object is left to the implementation, which
+ * Memory management for that new GdaRow object is left to the implementation, which
* can use gda_pmodel_take_row().
*/
static gboolean
-gda_mysql_recordset_fetch_next (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_mysql_recordset_fetch_next (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaMysqlRecordset *imodel = (GdaMysqlRecordset*) model;
@@ -709,19 +709,19 @@
}
/*
- * Create a new filled #GdaPRow object for the previous cursor row, and put it into *prow.
+ * Create a new filled #GdaRow object for the previous cursor row, and put it into *prow.
*
* WARNING: @prow will NOT be NULL, but *prow may or may not be NULL:
- * - If *prow is NULL then a new #GdaPRow object has to be created,
- * - and otherwise *prow contains a #GdaPRow object which has already been created
+ * - If *prow is NULL then a new #GdaRow object has to be created,
+ * - and otherwise *prow contains a #GdaRow object which has already been created
* (through a call to this very function), and in this case it should not be modified
* but the function may return FALSE if an error occurred.
*
- * Memory management for that new GdaPRow object is left to the implementation, which
+ * Memory management for that new GdaRow object is left to the implementation, which
* can use gda_pmodel_take_row().
*/
static gboolean
-gda_mysql_recordset_fetch_prev (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_mysql_recordset_fetch_prev (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaMysqlRecordset *imodel = (GdaMysqlRecordset*) model;
@@ -731,19 +731,19 @@
}
/*
- * Create a new filled #GdaPRow object for the cursor row at position @rownum, and put it into *prow.
+ * Create a new filled #GdaRow object for the cursor row at position @rownum, and put it into *prow.
*
* WARNING: @prow will NOT be NULL, but *prow may or may not be NULL:
- * - If *prow is NULL then a new #GdaPRow object has to be created,
- * - and otherwise *prow contains a #GdaPRow object which has already been created
+ * - If *prow is NULL then a new #GdaRow object has to be created,
+ * - and otherwise *prow contains a #GdaRow object which has already been created
* (through a call to this very function), and in this case it should not be modified
* but the function may return FALSE if an error occurred.
*
- * Memory management for that new GdaPRow object is left to the implementation, which
+ * Memory management for that new GdaRow object is left to the implementation, which
* can use gda_pmodel_take_row().
*/
static gboolean
-gda_mysql_recordset_fetch_at (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_mysql_recordset_fetch_at (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaMysqlRecordset *imodel = (GdaMysqlRecordset*) model;
Modified: trunk/providers/postgres/gda-postgres-recordset.c
==============================================================================
--- trunk/providers/postgres/gda-postgres-recordset.c (original)
+++ trunk/providers/postgres/gda-postgres-recordset.c Mon Jul 28 19:51:03 2008
@@ -52,18 +52,18 @@
/* virtual methods */
static gint gda_postgres_recordset_fetch_nb_rows (GdaPModel *model);
-static gboolean gda_postgres_recordset_fetch_random (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
+static gboolean gda_postgres_recordset_fetch_random (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
static gboolean gda_postgres_recordset_store_all (GdaPModel *model, GError **error);
-static gboolean gda_postgres_recordset_fetch_next (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
-static gboolean gda_postgres_recordset_fetch_prev (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
-static gboolean gda_postgres_recordset_fetch_at (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
+static gboolean gda_postgres_recordset_fetch_next (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
+static gboolean gda_postgres_recordset_fetch_prev (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
+static gboolean gda_postgres_recordset_fetch_at (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
/* static helper functions */
static void make_point (GdaGeometricPoint *point, const gchar *value);
static void set_value (GdaConnection *cnc, GValue *value, GType type, const gchar *thevalue, gint length);
-static void set_prow_with_pg_res (GdaPostgresRecordset *imodel, GdaPRow *prow, gint pg_res_rownum);
-static GdaPRow *new_row_from_pg_res (GdaPostgresRecordset *imodel, gint pg_res_rownum);
+static void set_prow_with_pg_res (GdaPostgresRecordset *imodel, GdaRow *prow, gint pg_res_rownum);
+static GdaRow *new_row_from_pg_res (GdaPostgresRecordset *imodel, gint pg_res_rownum);
static gboolean row_is_in_current_pg_res (GdaPostgresRecordset *model, gint row);
static gboolean fetch_next_chunk (GdaPostgresRecordset *model, gboolean *fetch_error, GError **error);
static gboolean fetch_prev_chunk (GdaPostgresRecordset *model, gboolean *fetch_error, GError **error);
@@ -75,7 +75,7 @@
PGresult *pg_res;
/* cursor access attributes */
- GdaPRow *tmp_row; /* used to store a reference to the last #GdaPRow returned */
+ GdaRow *tmp_row; /* used to store a reference to the last #GdaRow returned */
gchar *cursor_name;
PGconn *pconn;
gint chunk_size; /* Number of rows to fetch at a time when iterating forward or backwards. */
@@ -422,12 +422,12 @@
}
/*
- * Create a new filled #GdaPRow object for the row at position @rownum.
+ * Create a new filled #GdaRow object for the row at position @rownum.
*
- * Each new #GdaPRow created is "given" to the #GdaPModel implementation using gda_pmodel_take_row ().
+ * Each new #GdaRow created is "given" to the #GdaPModel implementation using gda_pmodel_take_row ().
*/
static gboolean
-gda_postgres_recordset_fetch_random (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_postgres_recordset_fetch_random (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaPostgresRecordset *imodel = (GdaPostgresRecordset *) model;
@@ -444,7 +444,7 @@
gda_pmodel_take_row (model, *prow, rownum);
if (model->nb_stored_rows == model->advertized_nrows) {
- /* all the rows have been converted from PGresult to GdaPRow objects => we can
+ /* all the rows have been converted from PGresult to GdaRow objects => we can
* discard the PGresult */
PQclear (imodel->priv->pg_res);
imodel->priv->pg_res = NULL;
@@ -454,7 +454,7 @@
}
/*
- * Create and "give" filled #GdaPRow object for all the rows in the model
+ * Create and "give" filled #GdaRow object for all the rows in the model
*/
static gboolean
gda_postgres_recordset_store_all (GdaPModel *model, GError **error)
@@ -469,7 +469,7 @@
}
for (i = 0; i < model->advertized_nrows; i++) {
- GdaPRow *prow;
+ GdaRow *prow;
if (! gda_postgres_recordset_fetch_random (model, &prow, i, error))
return FALSE;
}
@@ -477,13 +477,13 @@
}
/*
- * Create a new filled #GdaPRow object for the next cursor row
+ * Create a new filled #GdaRow object for the next cursor row
*
- * Each new #GdaPRow created is referenced only by imodel->priv->tmp_row (the #GdaPModel implementation
- * never keeps a reference to it). Before a new #GdaPRow gets created, the previous one, if set, is discarded.
+ * Each new #GdaRow created is referenced only by imodel->priv->tmp_row (the #GdaPModel implementation
+ * never keeps a reference to it). Before a new #GdaRow gets created, the previous one, if set, is discarded.
*/
static gboolean
-gda_postgres_recordset_fetch_next (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_postgres_recordset_fetch_next (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaPostgresRecordset *imodel = (GdaPostgresRecordset*) model;
@@ -514,13 +514,13 @@
}
/*
- * Create a new filled #GdaPRow object for the previous cursor row
+ * Create a new filled #GdaRow object for the previous cursor row
*
- * Each new #GdaPRow created is referenced only by imodel->priv->tmp_row (the #GdaPModel implementation
- * never keeps a reference to it). Before a new #GdaPRow gets created, the previous one, if set, is discarded.
+ * Each new #GdaRow created is referenced only by imodel->priv->tmp_row (the #GdaPModel implementation
+ * never keeps a reference to it). Before a new #GdaRow gets created, the previous one, if set, is discarded.
*/
static gboolean
-gda_postgres_recordset_fetch_prev (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_postgres_recordset_fetch_prev (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaPostgresRecordset *imodel = (GdaPostgresRecordset*) model;
@@ -551,13 +551,13 @@
}
/*
- * Create a new filled #GdaPRow object for the cursor row at position @rownum
+ * Create a new filled #GdaRow object for the cursor row at position @rownum
*
- * Each new #GdaPRow created is referenced only by imodel->priv->tmp_row (the #GdaPModel implementation
- * never keeps a reference to it). Before a new #GdaPRow gets created, the previous one, if set, is discarded.
+ * Each new #GdaRow created is referenced only by imodel->priv->tmp_row (the #GdaPModel implementation
+ * never keeps a reference to it). Before a new #GdaRow gets created, the previous one, if set, is discarded.
*/
static gboolean
-gda_postgres_recordset_fetch_at (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_postgres_recordset_fetch_at (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaPostgresRecordset *imodel = (GdaPostgresRecordset*) model;
@@ -717,7 +717,7 @@
}
static void
-set_prow_with_pg_res (GdaPostgresRecordset *imodel, GdaPRow *prow, gint pg_res_rownum)
+set_prow_with_pg_res (GdaPostgresRecordset *imodel, GdaRow *prow, gint pg_res_rownum)
{
gchar *thevalue;
gint col;
@@ -725,22 +725,22 @@
for (col = 0; col < ((GdaPModel*) imodel)->prep_stmt->ncols; col++) {
thevalue = PQgetvalue (imodel->priv->pg_res, pg_res_rownum, col);
if (thevalue && (*thevalue != '\0' ? FALSE : PQgetisnull (imodel->priv->pg_res, pg_res_rownum, col)))
- gda_value_set_null (gda_prow_get_value (prow, col));
+ gda_value_set_null (gda_row_get_value (prow, col));
else
set_value (((GdaPModel*) imodel)->cnc,
- gda_prow_get_value (prow, col),
+ gda_row_get_value (prow, col),
((GdaPModel*) imodel)->prep_stmt->types [col],
thevalue,
PQgetlength (imodel->priv->pg_res, pg_res_rownum, col));
}
}
-static GdaPRow *
+static GdaRow *
new_row_from_pg_res (GdaPostgresRecordset *imodel, gint pg_res_rownum)
{
- GdaPRow *prow;
+ GdaRow *prow;
- prow = gda_prow_new (((GdaPModel*) imodel)->prep_stmt->ncols);
+ prow = gda_row_new (((GdaPModel*) imodel)->prep_stmt->ncols);
set_prow_with_pg_res (imodel, prow, pg_res_rownum);
return prow;
}
Modified: trunk/providers/skel-implementation/capi/gda-capi-recordset.c
==============================================================================
--- trunk/providers/skel-implementation/capi/gda-capi-recordset.c (original)
+++ trunk/providers/skel-implementation/capi/gda-capi-recordset.c Mon Jul 28 19:51:03 2008
@@ -38,10 +38,10 @@
/* virtual methods */
static gint gda_capi_recordset_fetch_nb_rows (GdaPModel *model);
-static gboolean gda_capi_recordset_fetch_random (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
-static gboolean gda_capi_recordset_fetch_next (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
-static gboolean gda_capi_recordset_fetch_prev (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
-static gboolean gda_capi_recordset_fetch_at (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error);
+static gboolean gda_capi_recordset_fetch_random (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
+static gboolean gda_capi_recordset_fetch_next (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
+static gboolean gda_capi_recordset_fetch_prev (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
+static gboolean gda_capi_recordset_fetch_at (GdaPModel *model, GdaRow **prow, gint rownum, GError **error);
struct _GdaCapiRecordsetPrivate {
@@ -232,22 +232,22 @@
}
/*
- * Create a new filled #GdaPRow object for the row at position @rownum, and put it into *prow.
+ * Create a new filled #GdaRow object for the row at position @rownum, and put it into *prow.
*
* WARNING: @prow will NOT be NULL, but *prow may or may not be NULL:
- * - If *prow is NULL then a new #GdaPRow object has to be created,
- * - and otherwise *prow contains a #GdaPRow object which has already been created
+ * - If *prow is NULL then a new #GdaRow object has to be created,
+ * - and otherwise *prow contains a #GdaRow object which has already been created
* (through a call to this very function), and in this case it should not be modified
* but the function may return FALSE if an error occurred.
*
- * Memory management for that new GdaPRow object is left to the implementation, which
+ * Memory management for that new GdaRow object is left to the implementation, which
* can use gda_pmodel_take_row(). If new row objects are "given" to the GdaPModel implemantation
* using that method, then this method should detect when all the data model rows have been analysed
* (when model->nb_stored_rows == model->advertized_nrows) and then possibly discard the API handle
* as it won't be used anymore to fetch rows.
*/
static gboolean
-gda_capi_recordset_fetch_random (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_capi_recordset_fetch_random (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaCapiRecordset *imodel;
@@ -259,7 +259,7 @@
}
/*
- * Create and "give" filled #GdaPRow object for all the rows in the model
+ * Create and "give" filled #GdaRow object for all the rows in the model
*/
static gboolean
gda_capi_recordset_store_all (GdaPModel *model, GError **error)
@@ -271,7 +271,7 @@
/* default implementation */
for (i = 0; i < model->advertized_nrows; i++) {
- GdaPRow *prow;
+ GdaRow *prow;
if (! gda_capi_recordset_fetch_random (model, &prow, i, error))
return FALSE;
}
@@ -279,19 +279,19 @@
}
/*
- * Create a new filled #GdaPRow object for the next cursor row, and put it into *prow.
+ * Create a new filled #GdaRow object for the next cursor row, and put it into *prow.
*
* WARNING: @prow will NOT be NULL, but *prow may or may not be NULL:
- * - If *prow is NULL then a new #GdaPRow object has to be created,
- * - and otherwise *prow contains a #GdaPRow object which has already been created
+ * - If *prow is NULL then a new #GdaRow object has to be created,
+ * - and otherwise *prow contains a #GdaRow object which has already been created
* (through a call to this very function), and in this case it should not be modified
* but the function may return FALSE if an error occurred.
*
- * Memory management for that new GdaPRow object is left to the implementation, which
+ * Memory management for that new GdaRow object is left to the implementation, which
* can use gda_pmodel_take_row().
*/
static gboolean
-gda_capi_recordset_fetch_next (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_capi_recordset_fetch_next (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaCapiRecordset *imodel = (GdaCapiRecordset*) model;
@@ -301,19 +301,19 @@
}
/*
- * Create a new filled #GdaPRow object for the previous cursor row, and put it into *prow.
+ * Create a new filled #GdaRow object for the previous cursor row, and put it into *prow.
*
* WARNING: @prow will NOT be NULL, but *prow may or may not be NULL:
- * - If *prow is NULL then a new #GdaPRow object has to be created,
- * - and otherwise *prow contains a #GdaPRow object which has already been created
+ * - If *prow is NULL then a new #GdaRow object has to be created,
+ * - and otherwise *prow contains a #GdaRow object which has already been created
* (through a call to this very function), and in this case it should not be modified
* but the function may return FALSE if an error occurred.
*
- * Memory management for that new GdaPRow object is left to the implementation, which
+ * Memory management for that new GdaRow object is left to the implementation, which
* can use gda_pmodel_take_row().
*/
static gboolean
-gda_capi_recordset_fetch_prev (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_capi_recordset_fetch_prev (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaCapiRecordset *imodel = (GdaCapiRecordset*) model;
@@ -323,19 +323,19 @@
}
/*
- * Create a new filled #GdaPRow object for the cursor row at position @rownum, and put it into *prow.
+ * Create a new filled #GdaRow object for the cursor row at position @rownum, and put it into *prow.
*
* WARNING: @prow will NOT be NULL, but *prow may or may not be NULL:
- * - If *prow is NULL then a new #GdaPRow object has to be created,
- * - and otherwise *prow contains a #GdaPRow object which has already been created
+ * - If *prow is NULL then a new #GdaRow object has to be created,
+ * - and otherwise *prow contains a #GdaRow object which has already been created
* (through a call to this very function), and in this case it should not be modified
* but the function may return FALSE if an error occurred.
*
- * Memory management for that new GdaPRow object is left to the implementation, which
+ * Memory management for that new GdaRow object is left to the implementation, which
* can use gda_pmodel_take_row().
*/
static gboolean
-gda_capi_recordset_fetch_at (GdaPModel *model, GdaPRow **prow, gint rownum, GError **error)
+gda_capi_recordset_fetch_at (GdaPModel *model, GdaRow **prow, gint rownum, GError **error)
{
GdaCapiRecordset *imodel = (GdaCapiRecordset*) model;
Modified: trunk/tests/data-models/check_data_proxy.c
==============================================================================
--- trunk/tests/data-models/check_data_proxy.c (original)
+++ trunk/tests/data-models/check_data_proxy.c Mon Jul 28 19:51:03 2008
@@ -524,7 +524,7 @@
/*
* delete a proxy row, in current proxy's chunk
*/
- declare_expected_signals ("R5", "Delete a proxy row - 3");
+ declare_expected_signals ("R6", "Delete a proxy row - 3");
if (!check_data_model_remove_row (model, 25)) goto out;
clean_expected_signals (proxy);
gda_data_model_dump (proxy, stdout);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]