#include <config.h>
#endif
+#include <string.h>
+
#include <libxml/xpath.h>
#include <libxml/xinclude.h>
+
+#include <libxslt/xslt.h>
+#include <libxslt/xsltInternals.h>
+#include <libxslt/transform.h>
+
#include <sql-parser/gda-sql-parser.h>
#include "libdbtransformer.h"
+gchar *str_xslt_doc =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<xsl:stylesheet version=\"1.0\"\n"
+"xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n"
+"<xsl:template match=\"/\">\n"
+"<dbtransformer>\n"
+" <xsl:for-each select=\"dbtransformer/dbtransformation\">\n"
+" <xsl:sort select=\"@id\" data-type=\"number\"/>\n"
+" <xsl:text> </xsl:text>\n"
+" <xsl:text>	</xsl:text>\n"
+" <xsl:copy-of select=\".\"/>\n"
+" </xsl:for-each>\n"
+"<xsl:text> </xsl:text>\n"
+"</dbtransformer>\n"
+"</xsl:template>\n"
+"</xsl:stylesheet>";
+
static void dbt_class_init (DbtClass *class);
static void dbt_init (Dbt *dbt);
}
}
+static gboolean
+dbt_sort_xml (Dbt *dbt)
+{
+ gboolean ret;
+
+ DbtPrivate *priv;
+
+ xmlDocPtr xslt_xdoc;
+ xsltStylesheetPtr xslt;
+
+ ret = FALSE;
+
+ priv = DBT_GET_PRIVATE (dbt);
+
+ xmlSubstituteEntitiesDefault (1);
+
+ xslt_xdoc = xmlParseMemory (str_xslt_doc, strlen (str_xslt_doc));
+ if (xslt_xdoc == NULL)
+ {
+ g_warning ("Unable to parse the XSLT doc.");
+ return ret;
+ }
+
+ xslt = xsltParseStylesheetDoc (xslt_xdoc);
+ if (xslt == NULL)
+ {
+ g_warning ("Unable to parse the XSLT doc.");
+ return ret;
+ }
+
+ priv->xml_doc = xsltApplyStylesheet (xslt, priv->xml_doc, NULL);
+ if (priv->xml_doc == NULL)
+ {
+ g_warning ("Unable to apply the XSLT.");
+ return ret;
+ }
+
+ priv->xml_root = xmlDocGetRootElement (priv->xml_doc);
+ if (priv->xml_root == NULL)
+ {
+ g_warning ("No root node after applied the XSLT.");
+ return ret;
+ }
+
+ if (!dbt_check_xml_root (priv->xml_root))
+ {
+ priv->xml_root = NULL;
+
+ g_warning ("No root node after applied the XSLT.");
+ return ret;
+ }
+
+ ret = TRUE;
+
+ xsltFreeStylesheet (xslt);
+
+ return ret;
+}
+
/**
* dbt_set_xml:
* @dbt:
if (!dbt_check_xml_root (priv->xml_root))
{
priv->xml_root = NULL;
+ return;
}
else
{
g_warning ("Unable to include xml external files.");
}
}
+
+ dbt_sort_xml (dbt);
}
/**
* dbt_set_xml_from_filename:
if (!dbt_check_xml_root (priv->xml_root))
{
priv->xml_root = NULL;
+ return;
}
+
+ dbt_sort_xml (dbt);
}
static gboolean
<?xml version="1.0" ?>
<dbtransformer>
- <dbtransformation id="1">
+ <dbtransformation id="5">
<drop_table>
<table_name>clients</table_name>
</drop_table>
<table_name>orders</table_name>
</drop_table>
<drop_table>
- <table_name>newtable</table_name>
+ <table_name>newtablename</table_name>
</drop_table>
</dbtransformation>
- <!--<dbtransformation id="1">
+ <dbtransformation id="1">
<sql>
CREATE TABLE clients (id integer, name varchar(50), CONSTRAINT clients_pkey PRIMARY KEY (id))
</sql>
</sql>
</dbtransformation>
- <dbtransformation id="2">
+ <dbtransformation id="4">
<sql>
ALTER TABLE orders ADD COLUMN total double
</sql>
- </dbtransformation>-->
+ </dbtransformation>
<dbtransformation id="3">
+ <rename_table>
+ <table_name>newtable</table_name>
+ <new_table_name>newtablename</new_table_name>
+ </rename_table>
+ </dbtransformation>
+
+ <dbtransformation id="2">
<gda_op>
<serv_op_data type="CREATE_TABLE">
<op_data path="/TABLE_DEF_P/TABLE_NAME">newtable</op_data>
</gda_op>
</dbtransformation>
- <dbtransformation id="4">
- <rename_table>
- <table_name>newtable</table_name>
- <new_table_name>newtablename</new_table_name>
- </rename_table>
- </dbtransformation>
-
</dbtransformer>