]> saetta.ns0.it Git - libzakdbt/commitdiff
Test if transformation is already executed.
authorAndrea Zagli <a.zagli@comune.scandicci.fi.it>
Thu, 1 Jul 2010 17:02:00 +0000 (19:02 +0200)
committerAndrea Zagli <a.zagli@comune.scandicci.fi.it>
Thu, 1 Jul 2010 17:02:00 +0000 (19:02 +0200)
.gitignore
src/dbtransformer.c
tests/test.db

index f9812aef1f178d582e472643872f0b4570702ba2..bdde3954e42fb4c494258ae6160abaa2fbc6e3a3 100644 (file)
@@ -46,3 +46,4 @@ mkinstalldirs
 stamp-it
 intltool-*
 Rules-quot
+*.exe
index 92581e541e35f2bd511e0bbf4d3891031da521ac..3c107018ecd84f4c402a4fb4538d4a0225f00f06 100644 (file)
@@ -323,6 +323,57 @@ dbt_check_db (Dbt *dbt)
        return ret;
 }
 
+static gboolean
+dbt_check_to_execute (Dbt *dbt, guint id)
+{
+       DbtPrivate *priv;
+
+       gboolean ret;
+
+       gchar *sql;
+       GError *error;
+       GdaStatement *stmt;
+
+       priv = DBT_GET_PRIVATE (dbt);
+
+       ret = FALSE;
+
+       GdaSqlParser *parser = g_object_get_data (G_OBJECT (priv->gda_conn), "parser");
+       if (!parser)
+               {
+                       g_warning ("Invalid sql parser.");
+                       return ret;
+               }
+
+       sql = g_strdup_printf ("SELECT id FROM  dbt_transformations"
+                              " WHERE id = %d",
+                              id);
+       stmt = gda_sql_parser_parse_string (parser, sql, NULL, &error);
+       if (!stmt)
+               {
+                       g_warning ("Unable to check operation existance: %s\n",
+                                  error && error->message ? error->message : "No detail");
+               }
+       else
+               {
+                       GdaDataModel *dm;
+
+                       dm = gda_connection_statement_execute_select (priv->gda_conn, stmt, NULL, &error);
+                       g_object_unref (stmt);
+                       if (dm && gda_data_model_get_n_rows (dm) == 0)
+                               {
+                                       ret = TRUE;
+                               }
+               }
+
+       if (!ret)
+               {
+                       g_message ("Operation id %d already executed.", id);
+               }
+
+       return ret;
+}
+
 static gboolean
 dbt_save_transformation (Dbt *dbt, guint id, const gchar *operation)
 {
@@ -425,49 +476,52 @@ dbt_transform (Dbt *dbt)
 
                                        id = strtol (xmlGetProp (xnodeset->nodeTab[i], (const gchar *)"id"), NULL, 10);
 
-                                       xnode = xnodeset->nodeTab[i]->children;
-                                       while (xnode != NULL)
+                                       if (dbt_check_to_execute (dbt, id))
                                                {
-                                                       if (!xmlNodeIsText (xnode)
-                                                           && xmlStrcmp (xnode->name, (const xmlChar *)"sql") == 0)
+                                                       xnode = xnodeset->nodeTab[i]->children;
+                                                       while (xnode != NULL)
                                                                {
-                                                                       gchar *sql = (gchar *)xmlNodeGetContent (xnode);
+                                                                       if (!xmlNodeIsText (xnode)
+                                                                               && xmlStrcmp (xnode->name, (const xmlChar *)"sql") == 0)
+                                                                               {
+                                                                                       gchar *sql = (gchar *)xmlNodeGetContent (xnode);
 
-                                                                       GdaStatement *stmt;
-                                                                       GError *error = NULL;
+                                                                                       GdaStatement *stmt;
+                                                                                       GError *error = NULL;
 
-                                                                       stmt = gda_sql_parser_parse_string (parser, g_strstrip (sql), NULL, &error);
-                                                                       if (stmt == NULL)
-                                                                               {
-                                                                                       g_warning ("Unable to create GdaStatement from sql: %s\n%s",
-                                                                                                          sql, error && error->message ? error->message : "No detail");
-                                                                               }
-                                                                       else
-                                                                               {
-                                                                                       guint nrows = gda_connection_statement_execute_non_select (priv->gda_conn, stmt, NULL, NULL, &error);
-                                                                                       if (nrows == -1)
+                                                                                       stmt = gda_sql_parser_parse_string (parser, g_strstrip (sql), NULL, &error);
+                                                                                       if (stmt == NULL)
                                                                                                {
-                                                                                                       g_warning ("NON SELECT error: %s\n%s\n", sql,
-                                                                                                                  error && error->message ? error->message : "No detail");
+                                                                                                       g_warning ("Unable to create GdaStatement from sql: %s\n%s",
+                                                                                                                          sql, error && error->message ? error->message : "No detail");
                                                                                                }
-                                                                                       g_object_unref (stmt);
+                                                                                       else
+                                                                                               {
+                                                                                                       guint nrows = gda_connection_statement_execute_non_select (priv->gda_conn, stmt, NULL, NULL, &error);
+                                                                                                       if (nrows == -1)
+                                                                                                               {
+                                                                                                                       g_warning ("NON SELECT error: %s\n%s\n", sql,
+                                                                                                                                          error && error->message ? error->message : "No detail");
+                                                                                                               }
+                                                                                                       g_object_unref (stmt);
+                                                                                               }
+                                                                               }
+                                                                       else if (!xmlNodeIsText (xnode))
+                                                                               {
+                                                                                       g_warning ("Invalid tag: %s", xnode->name);
                                                                                }
+
+                                                                       xnode = xnode->next;
                                                                }
-                                                       else if (!xmlNodeIsText (xnode))
+
+                                                       if (tosave)
                                                                {
-                                                                       g_warning ("Invalid tag: %s", xnode->name);
+                                                                       gchar *operation;
+                                                                       xmlBufferPtr xbuf = xmlBufferCreate ();
+                                                                       xmlNodeDump (xbuf, priv->xml_doc, xnodeset->nodeTab[i], 0, 0);
+                                                                       operation = g_strstrip (g_strdup (xbuf->content));
+                                                                       dbt_save_transformation (dbt, id, g_strstrip (operation));
                                                                }
-
-                                                       xnode = xnode->next;
-                                               }
-
-                                       if (tosave)
-                                               {
-                                                       gchar *operation;
-                                                       xmlBufferPtr xbuf = xmlBufferCreate ();
-                                                       xmlNodeDump (xbuf, priv->xml_doc, xnodeset->nodeTab[i], 0, 0);
-                                                       operation = g_strstrip (g_strdup (xbuf->content));
-                                                       dbt_save_transformation (dbt, id, g_strstrip (operation));
                                                }
                                }
                }
index 81e5ffacacc5aa0aa2d13df7dfca3a35e89f12dd..d2bd5f9bbccb77ce95b239d9c493f855f2db840d 100644 (file)
Binary files a/tests/test.db and b/tests/test.db differ