[libgda] SQlite provider: call sqlite3_reset() when possible



commit 56cfdc32202aea25310da469288b1cf115747fd2
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 0ea46e8..c15a577 100644
--- a/libgda/sqlite/gda-sqlite-provider.c
+++ b/libgda/sqlite/gda-sqlite-provider.c
@@ -2534,6 +2534,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)
@@ -2576,6 +2577,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 9745b66..958e87f 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]