From: Andrea Zagli <azagli@libero.it> Date: Sat, 12 Mar 2011 09:44:23 +0000 (+0100) Subject: Added function GdaEx::batch_execute. X-Git-Tag: 0.2.2~3 X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=ca6e67c8e803046d3100d8bcb942228945953b18;p=libgdaex Added function GdaEx::batch_execute. --- diff --git a/src/gdaex.c b/src/gdaex.c index a06f796..859d171 100644 --- a/src/gdaex.c +++ b/src/gdaex.c @@ -25,6 +25,7 @@ #include <config.h> #endif +#include <stdarg.h> #include <string.h> #include <gio/gio.h> @@ -949,7 +950,7 @@ gchar else { g_warning ("Error on retrieving field's value: %s\n", - error->message); + error->message != NULL ? error->message : "no details"); ret = NULL; } @@ -977,7 +978,7 @@ gdaex_data_model_get_value_integer_at (GdaDataModel *data_model, gint row, gint if (error != NULL) { g_warning ("Error on retrieving field's value: %s\n", - error->message); + error->message != NULL ? error->message : "no details"); } else { @@ -1015,7 +1016,7 @@ gdaex_data_model_get_value_float_at (GdaDataModel *data_model, gint row, gint co if (error != NULL) { g_warning ("Error on retrieving field's value: %s\n", - error->message); + error->message != NULL ? error->message : "no details"); } else { @@ -1053,7 +1054,7 @@ gdaex_data_model_get_value_double_at (GdaDataModel *data_model, gint row, gint c if (error != NULL) { g_warning ("Error on retrieving field's value: %s\n", - error->message); + error->message != NULL ? error->message : "no details"); } else { @@ -1091,7 +1092,7 @@ gdaex_data_model_get_value_boolean_at (GdaDataModel *data_model, gint row, gint if (error != NULL) { g_warning ("Error on retrieving field's value: %s\n", - error->message); + error->message != NULL ? error->message : "no details"); } else { @@ -1142,7 +1143,7 @@ GdaTimestamp if (v == NULL || error != NULL) { g_warning ("Error on retrieving field's value: %s\n", - error->message); + error->message != NULL ? error->message : "no details"); } else if (!gda_value_is_null (v)) { @@ -1219,7 +1220,7 @@ GDate if (v == NULL || error != NULL) { g_warning ("Error on retrieving field's value: %s\n", - error->message); + error->message != NULL ? error->message : "no details"); } else if (!gda_value_is_null (v)) { @@ -1262,7 +1263,7 @@ struct tm if (v == NULL || error != NULL) { g_warning ("Error on retrieving field's value: %s\n", - error->message); + error->message != NULL ? error->message : "no details"); } else if (!gda_value_is_null (v)) { @@ -1312,7 +1313,7 @@ gdaex_begin (GdaEx *gdaex) if (error != NULL) { g_warning ("Error opening transaction: %s\n", - error->message); + error->message != NULL ? error->message : "no details"); } else { @@ -1358,7 +1359,7 @@ gdaex_execute (GdaEx *gdaex, const gchar *sql) if (error != NULL) { g_warning ("Error parsing sql: %s\n%s\n", - error->message, sql); + error->message != NULL ? error->message : "no details", sql); return -1; } @@ -1376,7 +1377,7 @@ gdaex_execute (GdaEx *gdaex, const gchar *sql) if (error != NULL) { g_warning ("Error executing command query: %s\n%s", - error->message, sql); + error->message != NULL ? error->message : "no details", sql); return -1; } else @@ -1392,6 +1393,62 @@ gdaex_execute (GdaEx *gdaex, const gchar *sql) return nrecs; } +/** + * gdaex_batch_execute: + * @gdaex: a #GdaEx object. + * @...: a #NULL terminated list of sql texts. + * + */ +GSList +*gdaex_batch_execute (GdaEx *gdaex, ...) +{ + GSList *ret; + + va_list ap; + + gchar *sql; + GdaStatement *stmt; + GError *error; + + GdaDataModel *dm; + gint recs; + + g_return_val_if_fail (IS_GDAEX (gdaex), NULL); + + GdaExPrivate *priv = GDAEX_GET_PRIVATE (gdaex); + + ret = NULL; + + va_start (ap, gdaex); + + while ((sql = va_arg (ap, gchar *)) != NULL) + { + error = NULL; + stmt = gda_sql_parser_parse_string (priv->gda_parser, sql, NULL, &error); + if (error != NULL) + { + g_warning ("Error parsing sql: %s\n%s\n", + error->message != NULL ? error->message : "no details", sql); + return NULL; + } + + if (gda_statement_get_statement_type (stmt) == GDA_SQL_STATEMENT_SELECT) + { + dm = gdaex_query (gdaex, sql); + ret = g_slist_append (ret, dm); + } + else + { + recs = gdaex_execute (gdaex, sql); + ret = g_slist_append (ret, GINT_TO_POINTER (recs)); + } + } + + va_end (ap); + + return ret; +} + /** * gdaex_commit: * @gdaex: a #GdaEx object. diff --git a/src/libgdaex.h b/src/libgdaex.h index 0a903b6..84b48b1 100644 --- a/src/libgdaex.h +++ b/src/libgdaex.h @@ -129,6 +129,8 @@ gboolean gdaex_begin (GdaEx *gdaex); gint gdaex_execute (GdaEx *gdaex, const gchar *sql); +GSList *gdaex_batch_execute (GdaEx *gdaex, ...); + gboolean gdaex_commit (GdaEx *gdaex); gboolean gdaex_rollback (GdaEx *gdaex);