[libgda/LIBGDA_4.0] SQlite provider: call sqlite3_reset() when possible
- From: Vivien Malerba <vivien src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [libgda/LIBGDA_4.0] SQlite provider: call sqlite3_reset() when possible
- Date: Sun, 13 Sep 2009 13:24:09 +0000 (UTC)
commit d674526d841c15a2c53887a8aff5c44f3176745f
Author: Vivien Malerba <malerba gnome-db org>
Date: Mon Sep 7 21:17:57 2009 +0200
SQlite provider: call sqlite3_reset() when possible
to release ressources and avoid SQLITE_BUSY
situations
libgda/sqlite/gda-sqlite-provider.c | 2 ++
libgda/sqlite/gda-sqlite-recordset.c | 7 ++++++-
2 files changed, 8 insertions(+), 1 deletions(-)
---
diff --git a/libgda/sqlite/gda-sqlite-provider.c b/libgda/sqlite/gda-sqlite-provider.c
index b0ae551..0103e47 100644
--- a/libgda/sqlite/gda-sqlite-provider.c
+++ b/libgda/sqlite/gda-sqlite-provider.c
@@ -2537,6 +2537,7 @@ gda_sqlite_provider_statement_execute (GdaServerProvider *provider, GdaConnectio
event = fill_blob_data (cnc, params, cdata, ps, blobs_list, error);
if (event) {
/* an error occurred */
+ sqlite3_reset (ps->sqlite_stmt);
if (new_ps)
g_object_unref (ps);
if (transaction_started)
@@ -2579,6 +2580,7 @@ gda_sqlite_provider_statement_execute (GdaServerProvider *provider, GdaConnectio
gda_connection_add_event (cnc, event);
}
gda_connection_internal_statement_executed (cnc, stmt, params, event);
+ sqlite3_reset (ps->sqlite_stmt);
if (new_ps)
g_object_unref (ps);
if (transaction_started)
diff --git a/libgda/sqlite/gda-sqlite-recordset.c b/libgda/sqlite/gda-sqlite-recordset.c
index 6f59d39..55e75b0 100644
--- a/libgda/sqlite/gda-sqlite-recordset.c
+++ b/libgda/sqlite/gda-sqlite-recordset.c
@@ -94,7 +94,11 @@ gda_sqlite_recordset_dispose (GObject *object)
g_return_if_fail (GDA_IS_SQLITE_RECORDSET (recset));
if (recset->priv) {
- GDA_SQLITE_PSTMT (GDA_DATA_SELECT (object)->prep_stmt)->stmt_used = FALSE;
+ GdaSqlitePStmt *ps;
+ ps = GDA_SQLITE_PSTMT (GDA_DATA_SELECT (object)->prep_stmt);
+ ps->stmt_used = FALSE;
+ sqlite3_reset (ps->sqlite_stmt);
+
if (recset->priv->tmp_row)
g_object_unref (recset->priv->tmp_row);
g_free (recset->priv);
@@ -509,6 +513,7 @@ fetch_next_sqlite_row (GdaSqliteRecordset *model, gboolean do_store, GError **er
break;
case SQLITE_DONE:
GDA_DATA_SELECT (model)->advertized_nrows = model->priv->next_row_num;
+ sqlite3_reset (ps->sqlite_stmt);
break;
case SQLITE_MISUSE:
g_set_error (error, GDA_SERVER_PROVIDER_ERROR,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]