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);