]> saetta.ns0.it Git - libzakdbt/commitdiff
Added and managed drop_view tag.
authorAndrea Zagli <azagli@libero.it>
Fri, 30 Jul 2010 17:27:18 +0000 (19:27 +0200)
committerAndrea Zagli <azagli@libero.it>
Fri, 30 Jul 2010 17:27:18 +0000 (19:27 +0200)
docs/dbtransformer.dtd
src/dbtransformer.c

index b040d0802694537bb14afe045f0dad52e3392b06..28f1e998c154e5ab710171109489c5570f0e8c46 100644 (file)
@@ -1,6 +1,10 @@
 <!ELEMENT dbtransformer (transformation+)>
 
-<!ELEMENT transformation (comment?, gda_op*, sql*, drop_table*)>
+<!ELEMENT transformation (comment?,
+                          gda_op*,
+                          sql*,
+                          drop_table*,
+                          drop_view*)>
 
 <!ATTLIST transformation
        id CDATA #REQUIRED
@@ -13,3 +17,7 @@
 <!ELEMENT drop_table (table_name)>
 
 <!ELEMENT table_name (#PCDATA) #REQUIRED>
+
+<!ELEMENT drop_view (view_name)>
+
+<!ELEMENT view_name (#PCDATA) #REQUIRED>
index ad40381b1fc31065be749baf5a1db46371e84e3a..8f25b00c49d103e5b833cd0a459d74d8be5abbb0 100644 (file)
@@ -667,7 +667,75 @@ dbt_parse_drop_table (Dbt *dbt, xmlNodePtr xnode)
                }
        else
                {
-                       g_warning ("You must provide the name of the table.");
+                       g_warning ("You must provide the name of the table to drop.");
+                       ret = FALSE;
+               }
+
+       return ret;
+}
+
+static gboolean
+dbt_parse_drop_view (Dbt *dbt, xmlNodePtr xnode)
+{
+       DbtPrivate *priv;
+
+       gboolean ret;
+
+       xmlNodePtr cur;
+       gchar *view_name;
+
+       GError *error;
+
+       ret = TRUE;
+
+       priv = DBT_GET_PRIVATE (dbt);
+
+       view_name = NULL;
+       cur = xnode->children;
+       while (cur != NULL && ret)
+               {
+                       if (xmlStrcmp (cur->name, (const xmlChar *)"view_name") == 0)
+                               {
+                                       view_name = g_strstrip (g_strdup ((gchar *)xmlNodeGetContent (cur)));
+                               }
+
+                       cur = cur->next;
+               }
+
+       if (view_name != NULL && g_strcmp0 (view_name, "") != 0)
+               {
+                       gchar *sql;
+                       GdaStatement *stmt;
+
+                       sql = g_strdup_printf ("DROP VIEW %s", view_name);
+
+                       error = NULL;
+                       stmt = gda_sql_parser_parse_string (priv->gda_parser, sql, NULL, &error);
+                       if (stmt == NULL)
+                               {
+                                       g_warning ("Unable to create GdaStatement from sql: %s.\n%s",
+                                                          error != NULL && error->message != NULL ? error->message : "no detail",
+                                                          sql);
+                                       ret = FALSE;
+                               }
+                       else
+                               {
+                                       guint nrows;
+
+                                       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",
+                                                                          error != NULL && error->message != NULL ? error->message : "no detail",
+                                                                          sql);
+                                                       ret = FALSE;
+                                               }
+                                       g_object_unref (stmt);
+                               }
+               }
+       else
+               {
+                       g_warning ("You must provide the name of the view to drop.");
                        ret = FALSE;
                }
 
@@ -752,6 +820,10 @@ dbt_transform (Dbt *dbt)
                                                                                                {
                                                                                                        tosave = dbt_parse_drop_table (dbt, xnode);
                                                                                                }
+                                                                                       else if (xmlStrcmp (xnode->name, (const xmlChar *)"drop_view") == 0)
+                                                                                               {
+                                                                                                       tosave = dbt_parse_drop_view (dbt, xnode);
+                                                                                               }
                                                                                        else
                                                                                                {
                                                                                                        g_warning ("Invalid tag: %s.", xnode->name);