summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'gnome-extra/libgda/files/libgda-4.99.4-statement-rewriting-fix.patch')
-rw-r--r--gnome-extra/libgda/files/libgda-4.99.4-statement-rewriting-fix.patch465
1 files changed, 0 insertions, 465 deletions
diff --git a/gnome-extra/libgda/files/libgda-4.99.4-statement-rewriting-fix.patch b/gnome-extra/libgda/files/libgda-4.99.4-statement-rewriting-fix.patch
deleted file mode 100644
index 07077e5..0000000
--- a/gnome-extra/libgda/files/libgda-4.99.4-statement-rewriting-fix.patch
+++ /dev/null
@@ -1,465 +0,0 @@
-From 7d7742477ad03f19a168c763b988a7807421e9ca Mon Sep 17 00:00:00 2001
-From: Vivien Malerba <malerba@gnome-db.org>
-Date: Sat, 17 Sep 2011 14:26:09 +0000
-Subject: Fixed nasty bug introduced in commit #036420a459b0bb241716cd9a14c3dd1eb2b21f63
-
-which "Improved statement rewriting for NULL parameters", and in other
-commits for each provider
----
-diff --git a/libgda/sqlite/gda-sqlite-provider.c b/libgda/sqlite/gda-sqlite-provider.c
-index afeab3c..69ccd16 100644
---- a/libgda/sqlite/gda-sqlite-provider.c
-+++ b/libgda/sqlite/gda-sqlite-provider.c
-@@ -2935,7 +2935,33 @@ gda_sqlite_provider_statement_execute (GdaServerProvider *provider, GdaConnectio
- else if (!rstmt)
- return NULL;
- else {
-+ /* The strategy here is to execute @rstmt using the prepared
-+ * statement associcted to @stmt, but adapted to @rstmt, so all
-+ * the column names, etc remain the same.
-+ *
-+ * The adaptation consists to replace SQLite specific information
-+ * in the GdaSqlitePStmt object.
-+ *
-+ * The trick is to adapt @ps, then associate @ps with @rstmt, then
-+ * execute @rstmt, and then undo the trick */
- GObject *obj;
-+ GdaSqlitePStmt *tps;
-+ if (!gda_sqlite_provider_statement_prepare (provider, cnc,
-+ rstmt, error))
-+ return NULL;
-+ tps = (GdaSqlitePStmt *)
-+ gda_connection_get_prepared_statement (cnc, rstmt);
-+
-+ /* adapt @ps with @tps's SQLite specific information */
-+ GdaSqlitePStmt hps;
-+ hps.sqlite_stmt = ps->sqlite_stmt; /* save */
-+ ps->sqlite_stmt = tps->sqlite_stmt; /* override */
-+ hps.stmt_used = ps->stmt_used; /* save */
-+ ps->stmt_used = tps->stmt_used; /* override */
-+ g_object_ref (tps);
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) ps);
-+
-+ /* execute rstmt (it will use @ps) */
- obj = gda_sqlite_provider_statement_execute (provider, cnc,
- rstmt, params,
- model_usage,
-@@ -2943,15 +2969,14 @@ gda_sqlite_provider_statement_execute (GdaServerProvider *provider, GdaConnectio
- last_inserted_row,
- task_id, async_cb,
- cb_data, error);
-+
-+ /* revert adaptations */
-+ ps->sqlite_stmt = hps.sqlite_stmt;
-+ ps->stmt_used = hps.stmt_used;
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) tps);
-+ g_object_unref (tps);
- g_object_unref (rstmt);
-- if (GDA_IS_DATA_SELECT (obj)) {
-- GdaPStmt *pstmt;
-- g_object_get (obj, "prepared-stmt", &pstmt, NULL);
-- if (pstmt) {
-- gda_pstmt_set_gda_statement (pstmt, stmt);
-- g_object_unref (pstmt);
-- }
-- }
-+
- if (new_ps)
- g_object_unref (ps);
- pending_blobs_free_list (blobs_list);
-diff --git a/providers/jdbc/gda-jdbc-provider.c b/providers/jdbc/gda-jdbc-provider.c
-index 164e67f..c1192fb 100644
---- a/providers/jdbc/gda-jdbc-provider.c
-+++ b/providers/jdbc/gda-jdbc-provider.c
-@@ -1429,9 +1429,49 @@ gda_jdbc_provider_statement_execute (GdaServerProvider *provider, GdaConnection
- else if (!rstmt)
- return NULL;
- else {
-- GObject *obj;
-- g_object_unref (ps);
- _gda_jdbc_release_jenv (jni_detach);
-+
-+ /* The strategy here is to execute @rstmt using the prepared
-+ * statement associcted to @stmt, but adapted to @rstmt, so all
-+ * the column names, etc remain the same.
-+ *
-+ * The adaptation consists to replace Jdbc specific information
-+ * in the GdaJdbcPStmt object.
-+ *
-+ * The trick is to adapt @ps, then associate @ps with @rstmt, then
-+ * execute @rstmt, and then undo the trick */
-+ GObject *obj;
-+ GdaJdbcPStmt *tps;
-+ if (!gda_jdbc_provider_statement_prepare (provider, cnc,
-+ rstmt, error)) {
-+ g_object_unref (ps);
-+ return NULL;
-+ }
-+ tps = (GdaJdbcPStmt *)
-+ gda_connection_get_prepared_statement (cnc, rstmt);
-+
-+ /* adapt @ps with @tps's Jdbc specific information */
-+ GdaJdbcPStmt hps;
-+ hps.pstmt_obj = ps->pstmt_obj; /* save */
-+ ps->pstmt_obj = tps->pstmt_obj; /* override */
-+ g_object_ref (tps);
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) ps);
-+
-+ /* execute rstmt (it will use @ps) */
-+ obj = gda_jdbc_provider_statement_execute (provider, cnc,
-+ rstmt, params,
-+ model_usage,
-+ col_types,
-+ last_inserted_row,
-+ task_id, async_cb,
-+ cb_data, error);
-+
-+ /* revert adaptations */
-+ ps->pstmt_obj = hps.pstmt_obj;
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) tps);
-+ g_object_unref (tps);
-+ g_object_unref (rstmt);
-+
- obj = gda_jdbc_provider_statement_execute (provider, cnc,
- rstmt, params,
- model_usage,
-@@ -1440,14 +1480,7 @@ gda_jdbc_provider_statement_execute (GdaServerProvider *provider, GdaConnection
- task_id, async_cb,
- cb_data, error);
- g_object_unref (rstmt);
-- if (GDA_IS_DATA_SELECT (obj)) {
-- GdaPStmt *pstmt;
-- g_object_get (obj, "prepared-stmt", &pstmt, NULL);
-- if (pstmt) {
-- gda_pstmt_set_gda_statement (pstmt, stmt);
-- g_object_unref (pstmt);
-- }
-- }
-+ g_object_unref (ps);
- return obj;
- }
- }
-diff --git a/providers/mysql/gda-mysql-provider.c b/providers/mysql/gda-mysql-provider.c
-index d581828..8baf0a3 100644
---- a/providers/mysql/gda-mysql-provider.c
-+++ b/providers/mysql/gda-mysql-provider.c
-@@ -2304,8 +2304,35 @@ gda_mysql_provider_statement_execute (GdaServerProvider *provider,
- else if (!rstmt)
- return NULL;
- else {
-- GObject *obj;
- free_bind_param_data (mem_to_free);
-+
-+ /* The strategy here is to execute @rstmt using the prepared
-+ * statement associcted to @stmt, but adapted to @rstmt, so all
-+ * the column names, etc remain the same.
-+ *
-+ * The adaptation consists to replace MySQL specific information
-+ * in the GdaMysqlPStmt object.
-+ *
-+ * The trick is to adapt @ps, then associate @ps with @rstmt, then
-+ * execute @rstmt, and then undo the trick */
-+ GObject *obj;
-+ GdaMysqlPStmt *tps;
-+ if (!gda_mysql_provider_statement_prepare (provider, cnc,
-+ rstmt, error))
-+ return NULL;
-+ tps = (GdaMysqlPStmt *)
-+ gda_connection_get_prepared_statement (cnc, rstmt);
-+
-+ /* adapt @ps with @tps's Mysql specific information */
-+ GdaMysqlPStmt hps;
-+ hps.mysql_stmt = ps->mysql_stmt; /* save */
-+ ps->mysql_stmt = tps->mysql_stmt; /* override */
-+ hps.stmt_used = ps->stmt_used; /* save */
-+ ps->stmt_used = tps->stmt_used; /* override */
-+ g_object_ref (tps);
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) ps);
-+
-+ /* execute rstmt (it will use @ps) */
- obj = gda_mysql_provider_statement_execute (provider, cnc,
- rstmt, params,
- model_usage,
-@@ -2313,15 +2340,13 @@ gda_mysql_provider_statement_execute (GdaServerProvider *provider,
- last_inserted_row,
- task_id, async_cb,
- cb_data, error);
-+
-+ /* revert adaptations */
-+ ps->mysql_stmt = hps.mysql_stmt;
-+ ps->stmt_used = hps.stmt_used;
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) tps);
-+ g_object_unref (tps);
- g_object_unref (rstmt);
-- if (GDA_IS_DATA_SELECT (obj)) {
-- GdaPStmt *pstmt;
-- g_object_get (obj, "prepared-stmt", &pstmt, NULL);
-- if (pstmt) {
-- gda_pstmt_set_gda_statement (pstmt, stmt);
-- g_object_unref (pstmt);
-- }
-- }
- return obj;
- }
- }
-diff --git a/providers/oracle/gda-oracle-provider.c b/providers/oracle/gda-oracle-provider.c
-index 1d40105..9d0f485 100644
---- a/providers/oracle/gda-oracle-provider.c
-+++ b/providers/oracle/gda-oracle-provider.c
-@@ -1931,8 +1931,35 @@ gda_oracle_provider_statement_execute (GdaServerProvider *provider, GdaConnectio
- else if (!rstmt)
- return NULL;
- else {
-+ /* The strategy here is to execute @rstmt using the prepared
-+ * statement associcted to @stmt, but adapted to @rstmt, so all
-+ * the column names, etc remain the same.
-+ *
-+ * The adaptation consists to replace Oracle specific information
-+ * in the GdaOraclePStmt object.
-+ *
-+ * The trick is to adapt @ps, then associate @ps with @rstmt, then
-+ * execute @rstmt, and then undo the trick */
- GObject *obj;
-- g_object_unref (ps);
-+ GdaOraclePStmt *tps;
-+ if (!gda_oracle_provider_statement_prepare (provider, cnc,
-+ rstmt, error)) {
-+ g_object_unref (ps);
-+ return NULL;
-+ }
-+ tps = (GdaOraclePStmt *)
-+ gda_connection_get_prepared_statement (cnc, rstmt);
-+
-+ /* adapt @ps with @tps's Oracle specific information */
-+ GdaOraclePStmt hps;
-+ hps.hstmt = ps->hstmt; /* save */
-+ ps->hstmt = tps->hstmt; /* override */
-+ hps.ora_values = ps->ora_values; /* save */
-+ ps->ora_values = tps->ora_values; /* override */
-+ g_object_ref (tps);
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) ps);
-+
-+ /* execute rstmt (it will use @ps) */
- obj = gda_oracle_provider_statement_execute (provider, cnc,
- rstmt, params,
- model_usage,
-@@ -1940,15 +1967,14 @@ gda_oracle_provider_statement_execute (GdaServerProvider *provider, GdaConnectio
- last_inserted_row,
- task_id, async_cb,
- cb_data, error);
-+
-+ /* revert adaptations */
-+ ps->hstmt = hps.hstmt;
-+ ps->ora_values = hps.ora_values;
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) tps);
-+ g_object_unref (tps);
- g_object_unref (rstmt);
-- if (GDA_IS_DATA_SELECT (obj)) {
-- GdaPStmt *pstmt;
-- g_object_get (obj, "prepared-stmt", &pstmt, NULL);
-- if (pstmt) {
-- gda_pstmt_set_gda_statement (pstmt, stmt);
-- g_object_unref (pstmt);
-- }
-- }
-+ g_object_unref (ps);
- return obj;
- }
- }
-diff --git a/providers/postgres/gda-postgres-provider.c b/providers/postgres/gda-postgres-provider.c
-index 6adca14..85db58e 100644
---- a/providers/postgres/gda-postgres-provider.c
-+++ b/providers/postgres/gda-postgres-provider.c
-@@ -2017,13 +2017,39 @@ gda_postgres_provider_statement_execute (GdaServerProvider *provider, GdaConnect
- else if (!rstmt)
- return NULL;
- else {
-- GObject *obj;
- params_freev (param_values, param_mem, nb_params);
- g_free (param_lengths);
- g_free (param_formats);
- if (transaction_started)
- gda_connection_rollback_transaction (cnc, NULL, NULL);
-
-+ /* The strategy here is to execute @rstmt using the prepared
-+ * statement associcted to @stmt, but adapted to @rstmt, so all
-+ * the column names, etc remain the same.
-+ *
-+ * The adaptation consists to replace Postgresql specific information
-+ * in the GdaPostgresPStmt object.
-+ *
-+ * The trick is to adapt @ps, then associate @ps with @rstmt, then
-+ * execute @rstmt, and then undo the trick */
-+ GObject *obj;
-+ GdaPostgresPStmt *tps;
-+ if (!gda_postgres_provider_statement_prepare (provider, cnc,
-+ rstmt, error))
-+ return NULL;
-+ tps = (GdaPostgresPStmt *)
-+ gda_connection_get_prepared_statement (cnc, rstmt);
-+
-+ /* adapt @ps with @tps's SQLite specific information */
-+ GdaPostgresPStmt hps;
-+ hps.pconn = ps->pconn; /* save */
-+ ps->pconn = tps->pconn; /* override */
-+ hps.prep_name = ps->prep_name; /* save */
-+ ps->prep_name = tps->prep_name; /* override */
-+ g_object_ref (tps);
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) ps);
-+
-+ /* execute rstmt (it will use @ps) */
- obj = gda_postgres_provider_statement_execute (provider, cnc,
- rstmt, params,
- model_usage,
-@@ -2031,15 +2057,13 @@ gda_postgres_provider_statement_execute (GdaServerProvider *provider, GdaConnect
- last_inserted_row,
- task_id, async_cb,
- cb_data, error);
-+
-+ /* revert adaptations */
-+ ps->pconn = hps.pconn;
-+ ps->prep_name = hps.prep_name;
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) tps);
-+ g_object_unref (tps);
- g_object_unref (rstmt);
-- if (GDA_IS_DATA_SELECT (obj)) {
-- GdaPStmt *pstmt;
-- g_object_get (obj, "prepared-stmt", &pstmt, NULL);
-- if (pstmt) {
-- gda_pstmt_set_gda_statement (pstmt, stmt);
-- g_object_unref (pstmt);
-- }
-- }
- return obj;
- }
- }
-diff --git a/providers/skel-implementation/capi/gda-capi-provider.c b/providers/skel-implementation/capi/gda-capi-provider.c
-index 653f9ea..764d027 100644
---- a/providers/skel-implementation/capi/gda-capi-provider.c
-+++ b/providers/skel-implementation/capi/gda-capi-provider.c
-@@ -1181,7 +1181,31 @@ gda_capi_provider_statement_execute (GdaServerProvider *provider, GdaConnection
- else if (!rstmt)
- return NULL;
- else {
-+ /* The strategy here is to execute @rstmt using the prepared
-+ * statement associcted to @stmt, but adapted to @rstmt, so all
-+ * the column names, etc remain the same.
-+ *
-+ * The adaptation consists to replace Capi specific information
-+ * in the GdaCapiPStmt object.
-+ *
-+ * The trick is to adapt @ps, then associate @ps with @rstmt, then
-+ * execute @rstmt, and then undo the trick */
- GObject *obj;
-+ GdaCapiPStmt *tps;
-+ if (!gda_capi_provider_statement_prepare (provider, cnc,
-+ rstmt, error))
-+ return NULL;
-+ tps = (GdaCapiPStmt *)
-+ gda_connection_get_prepared_statement (cnc, rstmt);
-+
-+ /* adapt @ps with @tps's Capi specific information */
-+ GdaCapiPStmt hps;
-+ /* TO ADD: hps.capi_stmt = ps->capi_stmt;*/ /* save */
-+ /* TO_ADD: ps->capi_stmt = tps->capi_stmt;*/ /* override */
-+ g_object_ref (tps);
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) ps);
-+
-+ /* execute rstmt (it will use @ps) */
- obj = gda_capi_provider_statement_execute (provider, cnc,
- rstmt, params,
- model_usage,
-@@ -1189,15 +1213,13 @@ gda_capi_provider_statement_execute (GdaServerProvider *provider, GdaConnection
- last_inserted_row,
- task_id, async_cb,
- cb_data, error);
-+
-+ /* revert adaptations */
-+ /* TO_ADD: ps->capi_stmt = hps.capi_stmt; */
-+
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) tps);
-+ g_object_unref (tps);
- g_object_unref (rstmt);
-- if (GDA_IS_DATA_SELECT (obj)) {
-- GdaPStmt *pstmt;
-- g_object_get (obj, "prepared-stmt", &pstmt, NULL);
-- if (pstmt) {
-- gda_pstmt_set_gda_statement (pstmt, stmt);
-- g_object_unref (pstmt);
-- }
-- }
- return obj;
- }
- }
-diff --git a/providers/web/gda-web-provider.c b/providers/web/gda-web-provider.c
-index 4500f01..9061126 100644
---- a/providers/web/gda-web-provider.c
-+++ b/providers/web/gda-web-provider.c
-@@ -1572,25 +1572,49 @@ gda_web_provider_statement_execute (GdaServerProvider *provider, GdaConnection *
- else if (!rstmt)
- return NULL;
- else {
-- GObject *obj;
-- g_object_unref (ps);
- xmlFreeDoc (doc);
-+
-+ /* The strategy here is to execute @rstmt using the prepared
-+ * statement associcted to @stmt, but adapted to @rstmt, so all
-+ * the column names, etc remain the same.
-+ *
-+ * The adaptation consists to replace Web specific information
-+ * in the GdaWebPStmt object.
-+ *
-+ * The trick is to adapt @ps, then associate @ps with @rstmt, then
-+ * execute @rstmt, and then undo the trick */
-+ GObject *obj;
-+ GdaWebPStmt *tps;
-+ if (!gda_web_provider_statement_prepare (provider, cnc,
-+ rstmt, error)) {
-+ g_object_unref (ps);
-+ return NULL;
-+ }
-+ tps = (GdaWebPStmt *)
-+ gda_connection_get_prepared_statement (cnc, rstmt);
-+
-+ /* adapt @ps with @tps's Web specific information */
-+ GdaWebPStmt hps;
-+ hps.pstmt_hash = ps->pstmt_hash; /* save */
-+ ps->pstmt_hash = tps->pstmt_hash; /* override */
-+ g_object_ref (tps);
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) ps);
-+
-+ /* execute rstmt (it will use @ps) */
- obj = gda_web_provider_statement_execute (provider, cnc,
-- rstmt, params,
-- model_usage,
-- col_types,
-- last_inserted_row,
-- task_id, async_cb,
-- cb_data, error);
-+ rstmt, params,
-+ model_usage,
-+ col_types,
-+ last_inserted_row,
-+ task_id, async_cb,
-+ cb_data, error);
-+
-+ /* revert adaptations */
-+ ps->pstmt_hash = hps.pstmt_hash;
-+ gda_connection_add_prepared_statement (cnc, rstmt, (GdaPStmt *) tps);
-+ g_object_unref (tps);
- g_object_unref (rstmt);
-- if (GDA_IS_DATA_SELECT (obj)) {
-- GdaPStmt *pstmt;
-- g_object_get (obj, "prepared-stmt", &pstmt, NULL);
-- if (pstmt) {
-- gda_pstmt_set_gda_statement (pstmt, stmt);
-- g_object_unref (pstmt);
-- }
-- }
-+ g_object_unref (ps);
- return obj;
- }
- }
---
-cgit v0.9.0.2