[libgda] Misc. optimizations
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] Misc. optimizations
- Date: Sat, 10 Jul 2010 20:00:05 +0000 (UTC)
commit 39134b3d3a9f3c3e29e92f906b3719264ebacb47
Author: Vivien Malerba <malerba gnome-db org>
Date: Sat Jul 10 21:58:50 2010 +0200
Misc. optimizations
libgda/Makefile.am | 1 +
libgda/gda-connection-event.c | 27 ++++----
libgda/gda-connection.c | 8 +--
libgda/gda-data-select.c | 7 +-
libgda/gda-holder.c | 24 ++++---
libgda/gda-set.c | 117 ++++++++++++++++++++++------------
libgda/gda-set.h | 1 +
libgda/gda-statement-priv.h | 34 ++++++++++
libgda/gda-statement.c | 5 ++
libgda/sqlite/gda-sqlite-provider.c | 6 +-
10 files changed, 153 insertions(+), 77 deletions(-)
---
diff --git a/libgda/Makefile.am b/libgda/Makefile.am
index a3bb973..1563260 100644
--- a/libgda/Makefile.am
+++ b/libgda/Makefile.am
@@ -165,6 +165,7 @@ libgda_sources = \
gda-marshal.c \
gda-meta-store-extra.h \
gda-meta-struct-private.h \
+ gda-statement-priv.h \
global.h \
md5.h \
md5c.c \
diff --git a/libgda/gda-connection-event.c b/libgda/gda-connection-event.c
index f13e4a4..90358ac 100644
--- a/libgda/gda-connection-event.c
+++ b/libgda/gda-connection-event.c
@@ -156,16 +156,9 @@ static void gda_connection_event_set_property (GObject *object, guint prop_id, c
g_return_if_fail (GDA_IS_CONNECTION_EVENT (object));
event = GDA_CONNECTION_EVENT (object);
- switch(prop_id)
- {
+ switch(prop_id) {
case PROP_TYPE:
- event->priv->type = g_value_get_int (value);
- if (!event->priv->sqlstate && (event->priv->type == GDA_CONNECTION_EVENT_ERROR))
- gda_connection_event_set_sqlstate (event, GDA_SQLSTATE_GENERAL_ERROR);
- else if (((event->priv->type == GDA_CONNECTION_EVENT_NOTICE) ||
- (event->priv->type == GDA_CONNECTION_EVENT_COMMAND)) &&
- event->priv->sqlstate)
- gda_connection_event_set_sqlstate (event, NULL);
+ gda_connection_event_set_event_type (event, g_value_get_int (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -180,10 +173,9 @@ static void gda_connection_event_get_property (GObject *object, guint prop_id, G
g_return_if_fail (GDA_IS_CONNECTION_EVENT (object));
event = GDA_CONNECTION_EVENT (object);
- switch(prop_id)
- {
+ switch(prop_id) {
case PROP_TYPE:
- g_value_set_int(value, event->priv->type);
+ g_value_set_int (value, event->priv->type);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -205,7 +197,16 @@ gda_connection_event_set_event_type (GdaConnectionEvent *event, GdaConnectionEve
g_return_if_fail (GDA_IS_CONNECTION_EVENT (event));
g_return_if_fail (event->priv);
- g_object_set (G_OBJECT (event), "type", (int) type, NULL);
+ if (event->priv->type == type)
+ return;
+
+ event->priv->type = type;
+ if (!event->priv->sqlstate && (event->priv->type == GDA_CONNECTION_EVENT_ERROR))
+ gda_connection_event_set_sqlstate (event, GDA_SQLSTATE_GENERAL_ERROR);
+ else if (((event->priv->type == GDA_CONNECTION_EVENT_NOTICE) ||
+ (event->priv->type == GDA_CONNECTION_EVENT_COMMAND)) &&
+ event->priv->sqlstate)
+ gda_connection_event_set_sqlstate (event, NULL);
}
/**
diff --git a/libgda/gda-connection.c b/libgda/gda-connection.c
index 0b6b1ee..6ecf9c8 100644
--- a/libgda/gda-connection.c
+++ b/libgda/gda-connection.c
@@ -47,6 +47,7 @@
#include <libgda/gda-lockable.h>
#include <libgda/thread-wrapper/gda-thread-provider.h>
#include <libgda/gda-repetitive-statement.h>
+#include <gda-statement-priv.h>
#include <glib/gstdio.h>
#include <fcntl.h>
@@ -5030,12 +5031,10 @@ gda_connection_internal_savepoint_removed (GdaConnection *cnc, const gchar *svp_
void
gda_connection_internal_statement_executed (GdaConnection *cnc, GdaStatement *stmt, GdaSet *params, GdaConnectionEvent *error)
{
- g_return_if_fail (GDA_IS_CONNECTION (cnc));
-
if (!error || (error && (gda_connection_event_get_event_type (error) != GDA_CONNECTION_EVENT_ERROR))) {
- GdaSqlStatement *sqlst;
+ const GdaSqlStatement *sqlst;
GdaSqlStatementTransaction *trans;
- g_object_get (G_OBJECT (stmt), "structure", &sqlst, NULL);
+ sqlst = _gda_statement_get_internal_struct (stmt);
trans = (GdaSqlStatementTransaction*) sqlst->contents; /* warning: this may be inaccurate if stmt_type is not
a transaction type, but the compiler does not care */
@@ -5093,7 +5092,6 @@ gda_connection_internal_statement_executed (GdaConnection *cnc, GdaStatement *st
break;
}
}
- gda_sql_statement_free (sqlst);
}
}
diff --git a/libgda/gda-data-select.c b/libgda/gda-data-select.c
index 263aebe..e69cd7d 100644
--- a/libgda/gda-data-select.c
+++ b/libgda/gda-data-select.c
@@ -37,6 +37,7 @@
#include <libgda/gda-connection.h>
#include <libgda/gda-util.h>
#include <sql-parser/gda-sql-parser.h>
+#include <gda-statement-priv.h>
#define CLASS(x) (GDA_DATA_SELECT_CLASS (G_OBJECT_GET_CLASS (x)))
@@ -1480,7 +1481,7 @@ gda_data_select_compute_row_selection_condition (GdaDataSelect *model, GError **
GdaSqlExpr *expr;
gboolean retval = FALSE;
GdaStatement *stmt;
- GdaSqlStatement *sqlst = NULL;
+ const GdaSqlStatement *sqlst = NULL;
GdaSqlStatementSelect *select;
GdaSqlSelectTarget *target;
GdaMetaStruct *mstruct = NULL;
@@ -1500,7 +1501,7 @@ gda_data_select_compute_row_selection_condition (GdaDataSelect *model, GError **
return FALSE;
}
- g_object_get (G_OBJECT (stmt), "structure", &sqlst, NULL);
+ sqlst = _gda_statement_get_internal_struct (stmt);
g_assert (sqlst->stmt_type == GDA_SQL_STATEMENT_SELECT);
select = (GdaSqlStatementSelect*) sqlst->contents;
if (!select->from || ! select->from->targets || ! select->from->targets->data) {
@@ -1529,8 +1530,6 @@ gda_data_select_compute_row_selection_condition (GdaDataSelect *model, GError **
retval = gda_data_select_set_row_selection_condition (model, expr, error);
out:
- if (sqlst)
- gda_sql_statement_free (sqlst);
if (mstruct)
g_object_unref (mstruct);
if (nvalue)
diff --git a/libgda/gda-holder.c b/libgda/gda-holder.c
index fbf27fe..2d0f0e4 100644
--- a/libgda/gda-holder.c
+++ b/libgda/gda-holder.c
@@ -32,6 +32,8 @@
#include <libgda/gda-custom-marshal.h>
#include <libgda/gda-types.h>
+#define __gda_value_is_null(value) (!G_IS_VALUE (value))
+
/*
* Main static functions
*/
@@ -585,11 +587,11 @@ gda_holder_set_property (GObject *object,
/* updating the holder's validity regarding the NULL value */
if (!not_null &&
- (!holder->priv->value || gda_value_is_null (holder->priv->value)))
+ (!holder->priv->value || __gda_value_is_null (holder->priv->value)))
holder->priv->valid = TRUE;
if (not_null &&
- (!holder->priv->value || gda_value_is_null (holder->priv->value)))
+ (!holder->priv->value || __gda_value_is_null (holder->priv->value)))
holder->priv->valid = FALSE;
g_signal_emit (holder, gda_holder_signals[CHANGED], 0);
@@ -756,7 +758,7 @@ gda_holder_get_value_str (GdaHolder *holder, GdaDataHandler *dh)
g_return_val_if_fail (holder->priv, NULL);
current_val = gda_holder_get_value (holder);
- if (!current_val || gda_value_is_null (current_val))
+ if (!current_val || __gda_value_is_null (current_val))
return NULL;
else {
if (!dh)
@@ -908,11 +910,11 @@ real_gda_holder_set_value (GdaHolder *holder, GValue *value, gboolean do_copy, G
}
/* holder will be changed? */
- newnull = !value || gda_value_is_null (value);
+ newnull = !value || __gda_value_is_null (value);
current_val = gda_holder_get_value (holder);
if (current_val == value)
changed = FALSE;
- else if ((!current_val || gda_value_is_null ((GValue *)current_val)) && newnull)
+ else if ((!current_val || __gda_value_is_null ((GValue *)current_val)) && newnull)
changed = FALSE;
else if (value && current_val &&
(G_VALUE_TYPE (value) == G_VALUE_TYPE ((GValue *)current_val)))
@@ -1042,11 +1044,11 @@ real_gda_holder_set_const_value (GdaHolder *holder, const GValue *value,
#endif
/* holder will be changed? */
- newnull = !value || gda_value_is_null (value);
+ newnull = !value || __gda_value_is_null (value);
current_val = gda_holder_get_value (holder);
if (current_val == value)
changed = FALSE;
- else if ((!current_val || gda_value_is_null (current_val)) && newnull)
+ else if ((!current_val || __gda_value_is_null (current_val)) && newnull)
changed = FALSE;
else if (value && current_val &&
(G_VALUE_TYPE (value) == G_VALUE_TYPE (current_val)))
@@ -1371,8 +1373,8 @@ gda_holder_set_default_value (GdaHolder *holder, const GValue *value)
const GValue *current = gda_holder_get_value (holder);
/* check if default is equal to current value */
- if (gda_value_is_null (value) &&
- (!current || gda_value_is_null (current)))
+ if (__gda_value_is_null (value) &&
+ (!current || __gda_value_is_null (current)))
holder->priv->default_forced = TRUE;
else if ((G_VALUE_TYPE (value) == holder->priv->g_type) &&
current && !gda_value_compare (value, current))
@@ -1633,12 +1635,12 @@ gda_holder_set_full_bind (GdaHolder *holder, GdaHolder *alias_of)
g_return_if_fail (alias_of->priv);
g_return_if_fail (holder->priv->g_type == alias_of->priv->g_type);
cvalue = gda_holder_get_value (alias_of);
- if (cvalue && !gda_value_is_null ((GValue*)cvalue))
+ if (cvalue && !__gda_value_is_null ((GValue*)cvalue))
value2 = gda_value_copy ((GValue*)cvalue);
}
cvalue = gda_holder_get_value (holder);
- if (cvalue && !gda_value_is_null ((GValue*)cvalue))
+ if (cvalue && !__gda_value_is_null ((GValue*)cvalue))
value1 = gda_value_copy ((GValue*)cvalue);
diff --git a/libgda/gda-set.c b/libgda/gda-set.c
index bf82967..58254d4 100644
--- a/libgda/gda-set.c
+++ b/libgda/gda-set.c
@@ -96,6 +96,7 @@ struct _GdaSetPrivate
gchar *descr;
GHashTable *holders_hash; /* key = GdaHoler ID, value = GdaHolder */
GArray *holders_array;
+ gboolean read_only;
};
static void
@@ -347,6 +348,7 @@ gda_set_init (GdaSet *set)
set->groups_list = NULL;
set->priv->holders_hash = g_hash_table_new (g_str_hash, g_str_equal);
set->priv->holders_array = NULL;
+ set->priv->read_only = FALSE;
}
@@ -365,11 +367,33 @@ gda_set_new (GSList *holders)
{
GObject *obj;
- obj = g_object_new (GDA_TYPE_SET, "holders", holders, NULL);
-
- return GDA_SET (obj);
+ obj = g_object_new (GDA_TYPE_SET, NULL);
+ for (; holders; holders = holders->next)
+ gda_set_real_add_holder ((GdaSet*) obj, GDA_HOLDER (holders->data));
+ compute_public_data ((GdaSet*) obj);
+
+ return (GdaSet*) obj;
}
+/*
+ * _gda_set_new_read_only
+ */
+GdaSet *
+_gda_set_new_read_only (GSList *holders)
+{
+ GObject *obj;
+
+ obj = g_object_new (GDA_TYPE_SET, NULL);
+ ((GdaSet*) obj)->priv->read_only = TRUE;
+ for (; holders; holders = holders->next)
+ gda_set_real_add_holder ((GdaSet*) obj, GDA_HOLDER (holders->data));
+ compute_public_data ((GdaSet*) obj);
+
+ return (GdaSet*) obj;
+}
+
+
+
/**
* gda_set_copy:
* @set: a #GdaSet object
@@ -900,13 +924,15 @@ gda_set_remove_holder (GdaSet *set, GdaHolder *holder)
g_return_if_fail (g_slist_find (set->holders, holder));
g_signal_handlers_disconnect_by_func (G_OBJECT (holder),
- G_CALLBACK (changed_holder_cb), set);
- g_signal_handlers_disconnect_by_func (G_OBJECT (holder),
G_CALLBACK (validate_change_holder_cb), set);
- g_signal_handlers_disconnect_by_func (G_OBJECT (holder),
- G_CALLBACK (source_changed_holder_cb), set);
- g_signal_handlers_disconnect_by_func (G_OBJECT (holder),
- G_CALLBACK (att_holder_changed_cb), set);
+ if (! set->priv->read_only) {
+ g_signal_handlers_disconnect_by_func (G_OBJECT (holder),
+ G_CALLBACK (changed_holder_cb), set);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (holder),
+ G_CALLBACK (source_changed_holder_cb), set);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (holder),
+ G_CALLBACK (att_holder_changed_cb), set);
+ }
/* now destroy the GdaSetNode and the GdaSetSource if necessary */
node = gda_set_get_node (set, holder);
@@ -954,13 +980,17 @@ validate_change_holder_cb (GdaHolder *holder, const GValue *value, GdaSet *set)
{
/* signal the holder validate-change */
GError *error = NULL;
+ if (set->priv->read_only)
+ g_set_error (&error, 0, 0, _("Data set does not allow mofifications"));
+ else {
#ifdef GDA_DEBUG_signal
- g_print (">> 'VALIDATE_HOLDER_CHANGE' from %s\n", __FUNCTION__);
+ g_print (">> 'VALIDATE_HOLDER_CHANGE' from %s\n", __FUNCTION__);
#endif
- g_signal_emit (G_OBJECT (set), gda_set_signals[VALIDATE_HOLDER_CHANGE], 0, holder, value, &error);
+ g_signal_emit (G_OBJECT (set), gda_set_signals[VALIDATE_HOLDER_CHANGE], 0, holder, value, &error);
#ifdef GDA_DEBUG_signal
- g_print ("<< 'VALIDATE_HOLDER_CHANGED' from %s\n", __FUNCTION__);
+ g_print ("<< 'VALIDATE_HOLDER_CHANGED' from %s\n", __FUNCTION__);
#endif
+ }
return error;
}
@@ -998,14 +1028,16 @@ gda_set_dispose (GObject *object)
if (set->holders) {
for (list = set->holders; list; list = list->next) {
g_signal_handlers_disconnect_by_func (G_OBJECT (list->data),
- G_CALLBACK (changed_holder_cb), set);
- g_signal_handlers_disconnect_by_func (G_OBJECT (list->data),
G_CALLBACK (validate_change_holder_cb), set);
- g_signal_handlers_disconnect_by_func (G_OBJECT (list->data),
- G_CALLBACK (source_changed_holder_cb), set);
- g_signal_handlers_disconnect_by_func (G_OBJECT (list->data),
- G_CALLBACK (att_holder_changed_cb), set);
- g_object_unref (G_OBJECT (list->data));
+ if (! set->priv->read_only) {
+ g_signal_handlers_disconnect_by_func (G_OBJECT (list->data),
+ G_CALLBACK (changed_holder_cb), set);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (list->data),
+ G_CALLBACK (source_changed_holder_cb), set);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (list->data),
+ G_CALLBACK (att_holder_changed_cb), set);
+ }
+ g_object_unref (list->data);
}
g_slist_free (set->holders);
}
@@ -1063,8 +1095,7 @@ compute_public_data (GdaSet *set)
GdaSetNode *node;
GdaSetSource *source;
GdaSetGroup *group;
- GHashTable *groups = g_hash_table_new (NULL, NULL); /* key = source model,
- value = GdaSetGroup */
+ GHashTable *groups = NULL;
/*
* Get rid of all the previous structures
@@ -1089,14 +1120,14 @@ compute_public_data (GdaSet *set)
if (node->source_model)
g_object_ref (node->source_model);
- set->nodes_list = g_slist_append (set->nodes_list, node);
+ set->nodes_list = g_slist_prepend (set->nodes_list, node);
}
+ set->nodes_list = g_slist_reverse (set->nodes_list);
/*
* Creation of the GdaSetSource and GdaSetGroup structures
*/
- list = set->nodes_list;
- while (list) {
+ for (list = set->nodes_list; list;list = list->next) {
node = GDA_SET_NODE (list->data);
/* source */
@@ -1115,7 +1146,7 @@ compute_public_data (GdaSet *set)
/* group */
group = NULL;
- if (node->source_model)
+ if (node->source_model && groups)
group = g_hash_table_lookup (groups, node->source_model);
if (group)
group->nodes = g_slist_append (group->nodes, node);
@@ -1123,15 +1154,18 @@ compute_public_data (GdaSet *set)
group = g_new0 (GdaSetGroup, 1);
group->nodes = g_slist_append (NULL, node);
group->nodes_source = source;
- set->groups_list = g_slist_append (set->groups_list, group);
- if (node->source_model)
+ set->groups_list = g_slist_prepend (set->groups_list, group);
+ if (node->source_model) {
+ if (!groups)
+ groups = g_hash_table_new (NULL, NULL); /* key = source model,
+ value = GdaSetGroup */
g_hash_table_insert (groups, node->source_model, group);
+ }
}
-
- list = g_slist_next (list);
}
-
- g_hash_table_destroy (groups);
+ set->groups_list = g_slist_reverse (set->groups_list);
+ if (groups)
+ g_hash_table_destroy (groups);
#ifdef GDA_DEBUG_signal
g_print (">> 'PUBLIC_DATA_CHANGED' from %p\n", set);
@@ -1175,9 +1209,6 @@ gda_set_real_add_holder (GdaSet *set, GdaHolder *holder)
GdaHolder *similar;
const gchar *hid;
- if (g_slist_find (set->holders, holder))
- return FALSE;
-
/*
* try to find a similar holder in the set->holders:
* a holder B is similar to a holder A if it has the same ID
@@ -1187,7 +1218,7 @@ gda_set_real_add_holder (GdaSet *set, GdaHolder *holder)
g_warning (_("GdaHolder needs to have an ID"));
return FALSE;
}
- g_return_val_if_fail (hid, FALSE);
+
similar = (GdaHolder*) g_hash_table_lookup (set->priv->holders_hash, hid);
if (!similar) {
/* really add @holder to the set */
@@ -1198,16 +1229,20 @@ gda_set_real_add_holder (GdaSet *set, GdaHolder *holder)
set->priv->holders_array = NULL;
}
g_object_ref (holder);
- g_signal_connect (G_OBJECT (holder), "changed",
- G_CALLBACK (changed_holder_cb), set);
g_signal_connect (G_OBJECT (holder), "validate-change",
G_CALLBACK (validate_change_holder_cb), set);
- g_signal_connect (G_OBJECT (holder), "source-changed",
- G_CALLBACK (source_changed_holder_cb), set);
- g_signal_connect (G_OBJECT (holder), "attribute-changed",
- G_CALLBACK (att_holder_changed_cb), set);
+ if (! set->priv->read_only) {
+ g_signal_connect (G_OBJECT (holder), "changed",
+ G_CALLBACK (changed_holder_cb), set);
+ g_signal_connect (G_OBJECT (holder), "source-changed",
+ G_CALLBACK (source_changed_holder_cb), set);
+ g_signal_connect (G_OBJECT (holder), "attribute-changed",
+ G_CALLBACK (att_holder_changed_cb), set);
+ }
return TRUE;
}
+ else if (similar == holder)
+ return FALSE;
else {
#ifdef GDA_DEBUG_NO
g_print ("In Set %p, Holder %p and %p are similar, keeping %p only\n", set, similar, holder, similar);
diff --git a/libgda/gda-set.h b/libgda/gda-set.h
index f158d6e..8dd10a0 100644
--- a/libgda/gda-set.h
+++ b/libgda/gda-set.h
@@ -136,6 +136,7 @@ GdaSetGroup *gda_set_get_group (GdaSet *set, GdaHolder *holder);
/* private */
gboolean _gda_set_validate (GdaSet *set, GError **error);
+GdaSet * _gda_set_new_read_only (GSList *holders);
G_END_DECLS
diff --git a/libgda/gda-statement-priv.h b/libgda/gda-statement-priv.h
new file mode 100644
index 0000000..3ef9a58
--- /dev/null
+++ b/libgda/gda-statement-priv.h
@@ -0,0 +1,34 @@
+/* gda-statement-priv.h
+ *
+ * Copyright (C) 2010 Vivien Malerba
+ *
+ * This Library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this Library; see the file COPYING.LIB. If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GDA_STATEMENT_PRIV__
+#define __GDA_STATEMENT_PRIV__
+
+
+G_BEGIN_DECLS
+
+const GdaSqlStatement *_gda_statement_get_internal_struct (GdaStatement *stmt);
+
+G_END_DECLS
+
+#endif
+
+
+
diff --git a/libgda/gda-statement.c b/libgda/gda-statement.c
index 063c66f..ffb62bb 100644
--- a/libgda/gda-statement.c
+++ b/libgda/gda-statement.c
@@ -192,6 +192,11 @@ gda_statement_new (void)
return GDA_STATEMENT (obj);
}
+const GdaSqlStatement *
+_gda_statement_get_internal_struct (GdaStatement *stmt)
+{
+ return stmt->priv->internal_struct;
+}
/**
* gda_statement_copy:
diff --git a/libgda/sqlite/gda-sqlite-provider.c b/libgda/sqlite/gda-sqlite-provider.c
index 232b2b6..e7c373d 100644
--- a/libgda/sqlite/gda-sqlite-provider.c
+++ b/libgda/sqlite/gda-sqlite-provider.c
@@ -2121,7 +2121,7 @@ make_last_inserted_set (GdaConnection *cnc, GdaStatement *stmt, sqlite3_int64 la
if (holders) {
holders = g_slist_reverse (holders);
- set = gda_set_new (holders);
+ set = _gda_set_new_read_only (holders);
g_slist_foreach (holders, (GFunc) g_object_unref, NULL);
g_slist_free (holders);
}
@@ -2731,12 +2731,12 @@ gda_sqlite_provider_statement_execute (GdaServerProvider *provider, GdaConnectio
g_value_set_int ((value = gda_value_new (G_TYPE_INT)), changes);
gda_holder_take_value (holder, value, NULL);
list = g_slist_append (NULL, holder);
- set = (GObject*) gda_set_new (list);
+ set = (GObject*) _gda_set_new_read_only (list);
g_slist_free (list);
g_object_unref (holder);
}
else
- set = (GObject*) gda_set_new (NULL);
+ set = (GObject*) _gda_set_new_read_only (NULL);
return set;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]