summaryrefslogtreecommitdiffstats
path: root/db/postgresql/output.xsl
diff options
context:
space:
mode:
authorondrej.zara <none@none>2008-12-04 08:13:14 +0000
committerondrej.zara <none@none>2008-12-04 08:13:14 +0000
commit3e17dc90adcb2e93d9b3eb5f59adecb1c7981b84 (patch)
tree08d0f7d5f9cc5749e941bdebc63b8f9a2bffd537 /db/postgresql/output.xsl
parent6bcb4d2789f2524b62a93c85bb3aae8c95d4f902 (diff)
downloadwwwsqldesigner-3e17dc90adcb2e93d9b3eb5f59adecb1c7981b84.zip
wwwsqldesigner-3e17dc90adcb2e93d9b3eb5f59adecb1c7981b84.tar.gz
wwwsqldesigner-3e17dc90adcb2e93d9b3eb5f59adecb1c7981b84.tar.bz2
initial code from release 2.3.1
--HG-- extra : convert_revision : svn%3Ab267cdba-c1da-11dd-874b-8bacd04a0a74/trunk%402
Diffstat (limited to 'db/postgresql/output.xsl')
-rw-r--r--db/postgresql/output.xsl125
1 files changed, 125 insertions, 0 deletions
diff --git a/db/postgresql/output.xsl b/db/postgresql/output.xsl
new file mode 100644
index 0000000..0b7828e
--- /dev/null
+++ b/db/postgresql/output.xsl
@@ -0,0 +1,125 @@
+<?xml version="1.0" ?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="text"/>
+
+<xsl:template name="replace-substring">
+ <xsl:param name="value" />
+ <xsl:param name="from" />
+ <xsl:param name="to" />
+ <xsl:choose>
+ <xsl:when test="contains($value,$from)">
+ <xsl:value-of select="substring-before($value,$from)" />
+ <xsl:value-of select="$to" />
+ <xsl:call-template name="replace-substring">
+ <xsl:with-param name="value" select="substring-after($value,$from)" />
+ <xsl:with-param name="from" select="$from" />
+ <xsl:with-param name="to" select="$to" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$value" />
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="/sql">
+
+<!-- tables -->
+ <xsl:for-each select="table">
+ <xsl:text>CREATE TABLE "</xsl:text>
+ <xsl:value-of select="@name" />
+ <xsl:text>" (
+</xsl:text>
+ <xsl:for-each select="row">
+ <xsl:text>"</xsl:text>
+ <xsl:value-of select="@name" />
+ <xsl:text>" </xsl:text>
+
+ <xsl:value-of select="datatype" />
+ <xsl:text> </xsl:text>
+
+ <xsl:if test="@null = 0">
+ <xsl:text>NOT NULL </xsl:text>
+ </xsl:if>
+
+ <xsl:if test="default">
+ <xsl:text>DEFAULT </xsl:text>
+ <xsl:value-of select="default" />
+ <xsl:text> </xsl:text>
+ </xsl:if>
+
+ <xsl:if test="comment">
+ <xsl:text>/* COMMENT '</xsl:text>
+ <xsl:call-template name="replace-substring">
+ <xsl:with-param name="value" select="comment" />
+ <xsl:with-param name="from" select='"&apos;"' />
+ <xsl:with-param name="to" select='"&apos;&apos;"' />
+ </xsl:call-template>
+ <xsl:text>' */</xsl:text>
+ </xsl:if>
+
+ <xsl:if test="not (position()=last())">
+ <xsl:text>,
+</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+
+<!-- keys -->
+ <xsl:for-each select="key">
+ <xsl:text>,
+</xsl:text>
+ <xsl:choose>
+ <xsl:when test="@type = 'PRIMARY'">PRIMARY KEY (</xsl:when>
+ <xsl:when test="@type = 'UNIQUE'">UNIQUE (</xsl:when>
+ <xsl:otherwise>KEY (</xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:for-each select="part">
+ <xsl:text>"</xsl:text><xsl:value-of select="." /><xsl:text>"</xsl:text>
+ <xsl:if test="not (position() = last())">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>)</xsl:text>
+
+ </xsl:for-each>
+
+ <xsl:text>
+)</xsl:text>
+
+ <xsl:if test="comment">
+ <xsl:text> /* </xsl:text>
+ <xsl:call-template name="replace-substring">
+ <xsl:with-param name="value" select="comment" />
+ <xsl:with-param name="from" select='"&apos;"' />
+ <xsl:with-param name="to" select='"&apos;&apos;"' />
+ </xsl:call-template>
+ <xsl:text>*/</xsl:text>
+ </xsl:if>
+
+ <xsl:text>;
+
+</xsl:text>
+
+ </xsl:for-each>
+
+<!-- fk -->
+ <xsl:for-each select="table">
+ <xsl:for-each select="row">
+ <xsl:for-each select="relation">
+ <xsl:text>ALTER TABLE "</xsl:text>
+ <xsl:value-of select="../../@name" />
+ <xsl:text>" ADD FOREIGN KEY (</xsl:text>
+ <xsl:value-of select="../@name" />
+ <xsl:text>) REFERENCES "</xsl:text>
+ <xsl:value-of select="@table" />
+ <xsl:text>" ("</xsl:text>
+ <xsl:value-of select="@row" />
+ <xsl:text>");
+</xsl:text>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:for-each>
+
+</xsl:template>
+</xsl:stylesheet>