You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
488 lines
14 KiB
488 lines
14 KiB
<?xml version="1.0" encoding="UTF-8" ?> |
|
<!-- |
|
#(c) 2005 Daniel Quathamer |
|
Änderungen |
|
16.4.04 MB Erweiterung für HSQL insb. nativeaction HSQLDB wie INFORMIX |
|
5.11.2004 DQ neue Action transferTable |
|
13.9.2006 DQ nativeaction kann mit dependent_module-Tag umgehen |
|
--> |
|
<xsl:stylesheet version="1.0" |
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
|
xmlns:dbi="http://www.his.de/Abt1/Interfaces/dbi_V1.0"> |
|
<xsl:import href="column.xsl" /> |
|
<xsl:import href="xsl_functions.xsl" /> |
|
<xsl:template name="sx_action"> |
|
<xsl:param name="dbsystem"/> |
|
<xsl:param name="sx_client" /> |
|
<xsl:for-each select="loadtable"> |
|
<xsl:call-template name="loadtable"> |
|
<xsl:with-param name="dbsystem" select="$dbsystem"/> |
|
</xsl:call-template> |
|
</xsl:for-each> |
|
<xsl:for-each select="transferTable"> |
|
<xsl:call-template name="transferTable"> |
|
<xsl:with-param name="dbsystem" select="$dbsystem"/> |
|
</xsl:call-template> |
|
</xsl:for-each> |
|
<xsl:for-each select="nativeaction"> |
|
<xsl:call-template name="nativeaction"> |
|
<xsl:with-param name="dbsystem" select="$dbsystem"/> |
|
</xsl:call-template> |
|
</xsl:for-each> |
|
</xsl:template> |
|
|
|
<xsl:template name="nativeaction"> |
|
<xsl:param name="dbsystem"/> |
|
|
|
<xsl:choose> |
|
<xsl:when test="$dbsystem='POSTGRES' and @database='POSTGRES'"> |
|
<xsl:if test="@scriptfile != ''" > |
|
<xsl:choose> |
|
<xsl:when test="@logoff = 'true'" > |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:call-template name="log"> |
|
<xsl:with-param name="msg" select="concat('SQL-Script ',@scriptfile,' ausführen')" /> |
|
</xsl:call-template> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
<xsl:text> |
|
\! </xsl:text> |
|
<xsl:call-template name="DOSQL" /> |
|
|
|
</xsl:if> |
|
<xsl:if test="@sql != ''" > |
|
<xsl:choose> |
|
<xsl:when test="@logoff = 'true'" > |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:call-template name="log"> |
|
<xsl:with-param name="msg" select="concat('SQL-Ausdruck ',@sql,' ausführen')" /> |
|
</xsl:call-template> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
<xsl:value-of select="@sql" /> |
|
<xsl:text> |
|
</xsl:text> |
|
</xsl:if> |
|
</xsl:when> |
|
<xsl:when test="($dbsystem='INFORMIX' and @database='INFORMIX') or ($dbsystem='HSQLDB' and @database='HSQLDB')"> |
|
<xsl:if test="@scriptfile != ''" > |
|
<xsl:choose> |
|
<xsl:when test="@logoff = 'true'" > |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:call-template name="log"> |
|
<xsl:with-param name="msg" select="concat('SQL-Script ',@scriptfile,' ausführen')" /> |
|
</xsl:call-template> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
<xsl:text> |
|
! </xsl:text><xsl:call-template name="DOSQL" /> |
|
</xsl:if> |
|
<xsl:if test="@sql != ''" > |
|
<xsl:choose> |
|
<xsl:when test="@logoff = 'true'" > |
|
</xsl:when> |
|
<xsl:otherwise> |
|
|
|
<xsl:call-template name="log"> |
|
<xsl:with-param name="msg" select="concat('SQL-Ausdruck ',@sql,' ausführen')" /> |
|
</xsl:call-template> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
<xsl:value-of select="@sql" /> |
|
<xsl:text> |
|
</xsl:text> |
|
</xsl:if> |
|
</xsl:when> |
|
<xsl:when test="@sql !='' and @database=''"> |
|
<!--Kein DB-spezifisches Script --> |
|
<xsl:choose> |
|
<xsl:when test="@logoff = 'true'" > |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:call-template name="log"> |
|
<xsl:with-param name="msg" select="concat('SQL-Ausdruck ',@sql,' ausführen')" /> |
|
</xsl:call-template> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
<xsl:value-of select="@sql" /> |
|
<xsl:text> |
|
</xsl:text> |
|
</xsl:when> |
|
<xsl:when test="@scriptfile !='' and @database=''"> |
|
<xsl:choose> |
|
<xsl:when test="@logoff = 'true'" > |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:call-template name="log"> |
|
<xsl:with-param name="msg" select="concat('Scriptfile ',@scriptfile,' ausführen')" /> |
|
</xsl:call-template> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
|
|
|
|
<xsl:choose> |
|
<xsl:when test="$dbsystem='INFORMIX'"> |
|
<xsl:text> |
|
! </xsl:text><xsl:choose> |
|
<xsl:when test="substring(@scriptfile,string-length(@scriptfile)-1,2)='.x'"> |
|
<xsl:call-template name="shellscript" /> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:call-template name="DOSQL" /> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:when> |
|
<xsl:when test="$dbsystem='POSTGRES'"> |
|
<xsl:text> |
|
\! </xsl:text><xsl:choose> |
|
<xsl:when test="substring(@scriptfile,string-length(@scriptfile)-1,2)='.x'"> |
|
<xsl:call-template name="shellscript" /> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:call-template name="DOSQL" /> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<!--Kein DB-spezifisches Script, geht nicht --> |
|
<xsl:call-template name="log"> |
|
<xsl:with-param name="msg" select="concat('Warnung: Das Script ',@scriptfile,' kann nur ausgeführt werden, wenn $DBSYSTEM gesetzt ist.')" /> |
|
</xsl:call-template> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:when> |
|
</xsl:choose> |
|
|
|
</xsl:template> |
|
<xsl:template name="loadtable"> |
|
<xsl:param name="dbsystem"/> |
|
<xsl:call-template name="log"> |
|
<xsl:with-param name="msg" select="concat('Lade Tabelle ',@tabname)" /> |
|
</xsl:call-template> |
|
<xsl:choose> |
|
<xsl:when test="$dbsystem='POSTGRES'"> |
|
<xsl:choose> |
|
<xsl:when test="@refresh='true' or @refresh='TRUE'"> |
|
|
|
<xsl:text>\! sx_auto_upload_table.x </xsl:text><xsl:value-of select="@tabname" /><xsl:text> </xsl:text><xsl:value-of select="file/@path" /><xsl:text> |
|
</xsl:text> |
|
</xsl:when> |
|
|
|
<xsl:otherwise> |
|
<xsl:text>\! sx_upload_records.x </xsl:text><xsl:value-of select="@tabname" /><xsl:text> </xsl:text><xsl:value-of select="file/@path" /><xsl:text> |
|
</xsl:text> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
|
|
</xsl:when> |
|
<xsl:when test="$dbsystem='INFORMIX' or $dbsystem='HSQLDB'"> |
|
<xsl:choose> |
|
<xsl:when test="@refresh='true' or @refresh='TRUE'"> |
|
<!-- |
|
<xsl:if test="contains(@tabname,'_neu')"> |
|
<xsl:call-template name="log"> |
|
<xsl:with-param name="msg" select="'Aus Performancegründen wird die Tabelle neu erzeugt.'" /> |
|
</xsl:call-template> |
|
<xsl:text>!sx_create_table.x </xsl:text><xsl:value-of select="@tabname" /><xsl:text> |
|
</xsl:text> |
|
</xsl:if>--> |
|
<xsl:text>!sx_auto_upload_table.x </xsl:text><xsl:value-of select="@tabname" /><xsl:text> </xsl:text><xsl:value-of select="file/@path" /><xsl:text> |
|
</xsl:text> |
|
</xsl:when> |
|
|
|
<xsl:otherwise> |
|
<xsl:text>!sx_upload_records.x </xsl:text><xsl:value-of select="@tabname" /><xsl:text> </xsl:text><xsl:value-of select="file/@path" /><xsl:text> |
|
</xsl:text> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
|
|
</xsl:when> |
|
<xsl:otherwise> |
|
<!--Keine Aktion --> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
|
|
|
|
|
|
</xsl:template> |
|
|
|
<xsl:template name="transferTable"> |
|
<xsl:param name="dbsystem"/> |
|
<xsl:call-template name="log"> |
|
<xsl:with-param name="msg" select="concat('transferTable ',@src,' to ' ,@target)" /> |
|
</xsl:call-template> |
|
|
|
<xsl:if test="@deletetarget='delete' "> |
|
<xsl:choose> |
|
<xsl:when test="$dbsystem='POSTGRES'"> |
|
<xsl:text>\! echo "Deleting Table </xsl:text><xsl:value-of select="@target" /><xsl:text>" |
|
truncate table </xsl:text><xsl:value-of select="@target" /><xsl:text>; |
|
vacuum full </xsl:text><xsl:value-of select="@target" /><xsl:text>; |
|
</xsl:text> |
|
</xsl:when> |
|
<xsl:when test="$dbsystem='INFORMIX' or $dbsystem='HSQLDB'"> |
|
|
|
<xsl:text> |
|
delete from </xsl:text><xsl:value-of select="@target" /><xsl:text>; |
|
</xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:if> |
|
<xsl:if test="@deletetarget='drop' "> |
|
<xsl:text>! echo "Dropping Table </xsl:text><xsl:value-of select="@target" /><xsl:text>" |
|
</xsl:text> |
|
<xsl:choose> |
|
<xsl:when test="$dbsystem='POSTGRES'"> |
|
<xsl:text> |
|
\! sx_create_table.x </xsl:text><xsl:value-of select="@target" /><xsl:text> |
|
</xsl:text> |
|
</xsl:when> |
|
<xsl:when test="$dbsystem='INFORMIX'"> |
|
<xsl:text> |
|
! sx_create_table.x </xsl:text><xsl:value-of select="@target" /><xsl:text> |
|
</xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:text> |
|
delete from </xsl:text><xsl:value-of select="@target" /><xsl:text>; |
|
</xsl:text> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
|
|
</xsl:if> |
|
|
|
<xsl:choose> |
|
<xsl:when test="@mode='insert' "> |
|
<!--<xsl:text>! echo "Transferring Table </xsl:text><xsl:value-of select="@src" /><xsl:text> to </xsl:text><xsl:value-of select="@target" /><xsl:text>" |
|
</xsl:text>--> |
|
<xsl:call-template name="simpleInsert" /> |
|
</xsl:when> |
|
<xsl:when test="@mode='update,insert' "> |
|
<!--Workbench WBCOPY --> |
|
<xsl:text>WBCOPY |
|
-mode=UPDATE,INSERT |
|
-targettable=</xsl:text><xsl:value-of select="@target" /><xsl:text> |
|
</xsl:text> |
|
<!--source --> |
|
<xsl:choose> |
|
<xsl:when test="string-length(sourcequery) > 1"> |
|
<xsl:text>-sourcequery="</xsl:text> <xsl:value-of select="sourcequery" /><xsl:text>" |
|
</xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:text>-sourcetable=</xsl:text><xsl:value-of select="@src" /><xsl:text> |
|
</xsl:text> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
<!-- deletetarget--> |
|
<xsl:choose> |
|
<xsl:when test="@deletetarget='drop' or @deletetarget='delete'"> |
|
<xsl:text>-deletetarget='true' |
|
</xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:text>-deletetarget='false' |
|
</xsl:text> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
<!--columns--> |
|
<xsl:if test="string-length(columns) > 1"> |
|
<xsl:text>-columns="</xsl:text> <xsl:value-of select="columns" /><xsl:text>" |
|
</xsl:text> |
|
</xsl:if> |
|
<!--keycolumns--> |
|
<xsl:if test="string-length(keycolumns) > 1"> |
|
<xsl:text>-keycolumns="</xsl:text> <xsl:value-of select="keycolumns" /><xsl:text>" |
|
</xsl:text> |
|
</xsl:if> |
|
<xsl:text>; |
|
</xsl:text> |
|
|
|
<!--Ende Workbench --> |
|
|
|
</xsl:when> |
|
</xsl:choose> |
|
</xsl:template> |
|
<xsl:template name="updateSequences"> |
|
<xsl:for-each select="/module/database/table"> |
|
|
|
<xsl:for-each select="columns/column"> |
|
<xsl:if test="@type = 'SERIAL' or @type='serial'"> |
|
<xsl:text> |
|
select setval('</xsl:text><xsl:value-of select="concat(../../@name,'_',@name,'_seq')"/> |
|
<xsl:text>', (select max(</xsl:text> <xsl:value-of select="@name"/><xsl:text>) |
|
from </xsl:text><xsl:value-of select="../../@name"/><xsl:text>)); |
|
</xsl:text> |
|
</xsl:if> |
|
</xsl:for-each> |
|
|
|
</xsl:for-each> |
|
</xsl:template> |
|
|
|
<xsl:template name="simpleInsert"> |
|
<xsl:call-template name="log"> |
|
<xsl:with-param name="msg" select="concat('insert ',@src,' into ' ,@target)" /> |
|
</xsl:call-template> |
|
<xsl:text> |
|
insert into </xsl:text><xsl:value-of select="@target" /> |
|
<xsl:if test="string-length(columns) > 1"> |
|
<xsl:text> ( |
|
</xsl:text><xsl:value-of select="columns" /><xsl:text> ) |
|
</xsl:text> |
|
</xsl:if> |
|
<xsl:choose> |
|
<xsl:when test="string-length(sourcequery) > 1"> |
|
<xsl:text> |
|
</xsl:text><xsl:value-of select="sourcequery" /> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<!--keine Query, Tabelle komplett --> |
|
<xsl:text> select * from </xsl:text><xsl:value-of select="@src" /><xsl:text> |
|
</xsl:text> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
<xsl:text> |
|
; </xsl:text> |
|
</xsl:template> |
|
|
|
|
|
<xsl:template name="transferRows"> |
|
<xsl:param name="dbsystem"/> |
|
<xsl:param name="target"/> |
|
<xsl:param name="src"/> |
|
<xsl:call-template name="log"> |
|
<xsl:with-param name="msg" select="concat('TransferRows ',$src,' to ' ,$target)" /> |
|
</xsl:call-template> |
|
|
|
<xsl:for-each select="/module/database/table"> |
|
<xsl:if test="@name=$src"> |
|
<xsl:text> |
|
insert into </xsl:text><xsl:value-of select="$target" /><xsl:text>( |
|
</xsl:text> |
|
<xsl:call-template name="column_names" /> |
|
<xsl:text>) |
|
select |
|
</xsl:text> |
|
<xsl:call-template name="column_names" /> |
|
<xsl:text> |
|
from </xsl:text><xsl:value-of select="$src"/><xsl:text>; |
|
</xsl:text> |
|
|
|
</xsl:if> |
|
</xsl:for-each> |
|
<!--Bei Postgres muss bei serial-Feldern die Sequence aktualisiert werden --> |
|
<xsl:for-each select="/module/database/table"> |
|
<xsl:if test="@name=$target"> |
|
<xsl:for-each select="columns/column"> |
|
<xsl:if test="@type = 'SERIAL' or @type='serial'"> |
|
<xsl:text> |
|
select setval('</xsl:text><xsl:value-of select="concat($target,'_',@name,'_seq')"/> |
|
<xsl:text>', (select max(</xsl:text> <xsl:value-of select="@name"/><xsl:text>) |
|
from </xsl:text><xsl:value-of select="$target"/><xsl:text>)); |
|
</xsl:text> |
|
</xsl:if> |
|
</xsl:for-each> |
|
</xsl:if> |
|
</xsl:for-each> |
|
|
|
|
|
</xsl:template> |
|
<xsl:template name="DOSQL"> |
|
<xsl:variable name="cmd_prefix"> |
|
<!--Test auf dependent_module (z.B. für KENN-Modul) --> |
|
<xsl:choose> |
|
<xsl:when test="string-length(@dependent_module) > 0"> |
|
<xsl:text>if [ "$</xsl:text><xsl:call-template name="ucase"> |
|
<xsl:with-param name="s1" select="@dependent_module"></xsl:with-param></xsl:call-template> |
|
<xsl:text>_INSTALLED" != "" ]; then </xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:text></xsl:text> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:variable> |
|
<xsl:variable name="cmd_post"> |
|
<xsl:choose> |
|
<xsl:when test="string-length(@dependent_module) > 0"> |
|
<xsl:text>; else echo "Script nicht ausgeführt"; fi |
|
</xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:text> |
|
</xsl:text> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:variable> |
|
<!--jetzt der Befehl:--> |
|
<xsl:value-of select="$cmd_prefix" /><xsl:text> DOSQL </xsl:text><xsl:value-of select="@scriptfile" /> |
|
<xsl:value-of select="$cmd_post" /> |
|
</xsl:template> |
|
|
|
<xsl:template name="shellscript"> |
|
<xsl:variable name="cmd_prefix"> |
|
<!--Test auf dependent_module (z.B. für KENN-Modul) --> |
|
<xsl:choose> |
|
<xsl:when test="string-length(@dependent_module) > 0"> |
|
<xsl:text>if [ "$</xsl:text><xsl:call-template name="ucase"> |
|
<xsl:with-param name="s1" select="@dependent_module"></xsl:with-param></xsl:call-template> |
|
<xsl:text>_INSTALLED" != "" ]; then </xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:text></xsl:text> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:variable> |
|
<xsl:variable name="cmd_post"> |
|
<xsl:choose> |
|
<xsl:when test="string-length(@dependent_module) > 0"> |
|
<xsl:text>; else echo "Script nicht ausgeführt"; fi |
|
</xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:text> |
|
</xsl:text> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
</xsl:variable> |
|
<!--jetzt der Befehl:--> |
|
<xsl:value-of select="$cmd_prefix" /><xsl:text> </xsl:text><xsl:value-of select="@scriptfile" /> |
|
<xsl:value-of select="$cmd_post" /> |
|
</xsl:template> |
|
|
|
<xsl:template name="finalize_customer_specific_script"> |
|
<xsl:param name="dbsystem"/> |
|
<xsl:param name="type"/> |
|
<xsl:variable name="modulname"><xsl:value-of select="/module/@name"/></xsl:variable> |
|
<xsl:if test="$type !='system' and $type !='test'"> |
|
<xsl:choose> |
|
<xsl:when test="$dbsystem='POSTGRES'"> |
|
<xsl:text> |
|
\! </xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:text> |
|
! </xsl:text> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
<xsl:text>DOSQL $</xsl:text> |
|
<xsl:choose><xsl:when test="/module/@name='kern'"> |
|
<xsl:text>SUPERX_DIR/db/install/</xsl:text> |
|
</xsl:when> |
|
<xsl:otherwise> |
|
<xsl:call-template name="ucase"> |
|
<xsl:with-param name="s1" select="$modulname"/> |
|
</xsl:call-template><xsl:text>_PFAD/</xsl:text> |
|
</xsl:otherwise> |
|
</xsl:choose> |
|
<xsl:value-of select="$modulname"/><xsl:text>_</xsl:text><xsl:value-of select="$type"/><xsl:text>_custom.sql |
|
</xsl:text> |
|
</xsl:if> |
|
</xsl:template> |
|
|
|
|
|
</xsl:stylesheet>
|
|
|