diff options
author | ondrej.zara <none@none> | 2008-12-04 08:13:14 +0000 |
---|---|---|
committer | ondrej.zara <none@none> | 2008-12-04 08:13:14 +0000 |
commit | 3e17dc90adcb2e93d9b3eb5f59adecb1c7981b84 (patch) | |
tree | 08d0f7d5f9cc5749e941bdebc63b8f9a2bffd537 /db/postgresql/output.xsl | |
parent | 6bcb4d2789f2524b62a93c85bb3aae8c95d4f902 (diff) | |
download | wwwsqldesigner-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.xsl | 125 |
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='"'"' /> + <xsl:with-param name="to" select='"''"' /> + </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='"'"' /> + <xsl:with-param name="to" select='"''"' /> + </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> |