MINI MINI MANI MO
<?xml version="1.0"?>
<!--
Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
NAME
kustrig.xsl
DESCRIPTION
Convert mdapi TRIGGER_T document to TRIGGER document (SXML)
MODIFIED MM/DD/YY
rapayne 05/20/14 - bug 18609821: fix COMPOUND trigger ddl as well
EDITIONABLE ddl.
bwright 08/16/13 - Bug 17312600: Remove hard tabs from DP src code
rapayne 06/15/11 - lrg 5665517: fix xmlns violation.
lbarton 06/02/08 - bug 6767780: view trigger on nested table col
lbarton 11/09/05 - bug 4724986: fix handling of xmlns
sdavidso 11/02/05 - fix inconsistent stylesheet format
htseng 17/02/05 - Initial version
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://xmlns.oracle.com/ku">
<!-- Top level imports -->
<xsl:import href="kuscomm.xsl"/>
<!-- *******************************************************************
Template: TRIGGER_T - top-level template for TRIGGER.
This template puts out
- the opening TRIGGER element (with xmlns and version attributes)
- NAME elements
******************************************************************** -->
<xsl:template match="TRIGGER_T">
<xsl:element name="TRIGGER" namespace="http://xmlns.oracle.com/ku">
<xsl:attribute name="version">1.0</xsl:attribute>
<xsl:apply-templates select="SCHEMA_OBJ"/>
<xsl:call-template name="Editionable">
<xsl:with-param name="SchemaObjNode" select="SCHEMA_OBJ"/>
</xsl:call-template>
<xsl:element name="TRIGGER_TYPE">
<xsl:choose>
<xsl:when test="TYPE_NUM=0 or TYPE_NUM=1">BEFORE</xsl:when>
<xsl:when test="TYPE_NUM=2 or TYPE_NUM=3">AFTER</xsl:when>
<xsl:when test="TYPE_NUM=4">INSTEAD_OF</xsl:when>
<xsl:when test="TYPE_NUM=5">COMPOUND</xsl:when>
</xsl:choose>
</xsl:element>
<!-- event_clause -->
<xsl:choose>
<xsl:when test="SYS_EVTS!=0">
<xsl:if test="(PROPERTY mod 16)>= 8">
<xsl:call-template name="database_event_clause"/>
</xsl:if>
<xsl:if test="(PROPERTY mod 32)>= 16">
<xsl:call-template name="ddl_event_clause"/>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="dml_event_clause"/>
</xsl:otherwise>
</xsl:choose>
<!-- when_condition -->
<xsl:if test="WHENCLAUSE">
<xsl:element name="WHEN_CONDITION">
<xsl:value-of select="WHENCLAUSE"/>
</xsl:element>
</xsl:if>
<!-- plsql_block/class_procedure -->
<xsl:choose>
<xsl:when test="BODY_VCNT">
<xsl:choose>
<!-- Have to strip trailing ';' off CALL triggers(go figure) -->
<xsl:when test="(PROPERTY mod 4)>=2">
<xsl:element name="CALL_PROCEDURE">
<xsl:for-each select="BODY_VCNT/BODY_VCNT_ITEM">
<xsl:choose>
<xsl:when test="position()=last() and
contains(substring(.,string-length(.)),';')">
<xsl:value-of select="substring(.,1,string-length(.)-1)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
<xsl:text>
 </xsl:text>
</xsl:for-each>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="PLSQL_BLOCK">
<xsl:for-each select="BODY_VCNT/BODY_VCNT_ITEM">
<xsl:value-of select="."/>
<xsl:text>
 </xsl:text>
</xsl:for-each>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<!-- end length greater than 4000 -->
<xsl:otherwise>
<!-- body length less than 4000 -->
<xsl:choose>
<!-- Have to strip trailing ';' off CALL triggers(go figure) -->
<xsl:when test="(PROPERTY mod 4)>=2">
<xsl:element name="CALL_PROCEDURE">
<xsl:choose>
<xsl:when test="contains(substring(BODY,string-length(BODY)),';')">
<xsl:value-of select="substring(BODY,1,string-length(BODY)-1)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="BODY"/>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="PLSQL_BLOCK">
<xsl:value-of select="BODY"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="ENABLED=0">
<xsl:element name="DISABLE"/>
</xsl:if>
</xsl:element>
</xsl:template>
<!-- *******************************************************************
Template: database_event_clause
******************************************************************** -->
<xsl:template name="database_event_clause">
<xsl:element name="DATABASE_EVENT">
<xsl:element name="EVENT_LIST">
<xsl:call-template name="event_clause"/>
</xsl:element>
</xsl:element>
</xsl:template>
<!-- *******************************************************************
Template: ddl_event_clause
******************************************************************** -->
<xsl:template name="ddl_event_clause">
<xsl:element name="DDL_EVENT">
<xsl:element name="EVENT_LIST">
<xsl:call-template name="event_clause"/>
</xsl:element>
<xsl:choose>
<xsl:when test="(PROPERTY mod 16)>= 8">
<xsl:element name="DATABASE"/>
</xsl:when>
<xsl:when test="(PROPERTY mod 32)>= 16">
<xsl:element name="SCHEMA">
<xsl:value-of select="BASE_OBJ_SCHEMA"/>
</xsl:element>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:element>
</xsl:template>
<!-- *******************************************************************
Template: event_clause
******************************************************************** -->
<xsl:template name="event_clause">
<xsl:if test="(SYS_EVTS mod 8)>=4">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">SERVERERROR</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 16)>=8">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">LOGON</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 32)>=16">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">LOGOFF</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 2 )>=1">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">STARTUP</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 4)>=2">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">SHUTDOWN</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 16777216)>=8388608">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">SUSPEND</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 128)>=64">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">ALTER</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 512)>=256">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">ANALYZE</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 32768)>= 16384">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">ASSOCIATE STATISTICS</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 65536)>=32768">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">AUDIT</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 1024)>=512">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">COMMENT</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 64 )>=32">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">CREATE</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 131072)>=65536">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">DISASSOCIATE STATISTICS</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 256)>=128">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">DROP</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 2048)>=1024">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">GRANT</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 262144)>=131072">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">NOAUDIT</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 16384)>=8192">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">RENAME</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 4096)>=2048">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">REVOKE</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="(SYS_EVTS mod 8192)>=4096">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">TRUNCATE</xsl:element>
</xsl:element>
</xsl:if>
</xsl:template>
<!-- *******************************************************************
Template: dml_event_clause
******************************************************************** -->
<xsl:template name="dml_event_clause">
<xsl:element name="DML_EVENT">
<xsl:element name="EVENT_LIST">
<xsl:if test="ACT_INSERT!=0">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">
<xsl:text>INSERT</xsl:text>
</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="ACT_DELETE!=0">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">
<xsl:text>DELETE</xsl:text>
</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="ACT_UPDATE!=0">
<xsl:element name="EVENT_LIST_ITEM">
<xsl:element name="EVENT">
<xsl:text>UPDATE</xsl:text>
</xsl:element>
<!-- column_list -->
<xsl:choose>
<xsl:when test="COLS/COLS_ITEM[TYPE_NUM=1024]">
<!-- really should ckeck if a column exist then output COL_LIST tag -->
<xsl:element name="COL_LIST">
<xsl:for-each select="COLS/COLS_ITEM[TYPE_NUM=1024]">
<xsl:element name="COL_LIST_ITEM">
<xsl:element name="NAME">
<xsl:value-of select="NAME"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:if test="COLS/COLS_ITEM[TYPE_NUM=0]">
<xsl:element name="COL_LIST">
<xsl:for-each select="COLS/COLS_ITEM[TYPE_NUM=0]">
<xsl:element name="COL_LIST_ITEM">
<xsl:element name="NAME">
<xsl:value-of select="NAME"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
<!-- EVENT_LIST_ITEM -->
</xsl:if>
</xsl:element>
<!-- EVENT_LIST -->
<!-- nested table -->
<xsl:if test="(PROPERTY mod 64)>=32">
<xsl:element name="NESTED_TABLE_COLUMN">
<xsl:value-of select="NTNAME"/>
</xsl:element>
</xsl:if>
<xsl:apply-templates select="BASE_OBJ"/>
<xsl:if test="REFOLDNAME!='OLD' or REFNEWNAME!='NEW' or REFPRTNAME or
TYPE_NUM=1 or TYPE_NUM=3 or TYPE_NUM=4">
<xsl:element name="REFERENCING">
<xsl:if test="REFOLDNAME!='OLD'">
<xsl:element name="OLD_AS">
<xsl:value-of select="REFOLDNAME"/>
</xsl:element>
</xsl:if>
<xsl:if test="REFNEWNAME!='NEW'">
<xsl:element name="NEW_AS">
<xsl:value-of select="REFNEWNAME"/>
</xsl:element>
</xsl:if>
<xsl:if test="REFPRTNAME">
<xsl:element name="PARENT_AS">
<xsl:value-of select="REFPRTNAME"/>
</xsl:element>
</xsl:if>
<xsl:if test="TYPE_NUM=1 or TYPE_NUM=3 or TYPE_NUM=4">
<xsl:element name="FOR_EACH_ROW"/>
</xsl:if>
</xsl:element>
<!-- REFERENCING -->
</xsl:if>
</xsl:element>
<!-- DML_EVENT -->
</xsl:template>
</xsl:stylesheet>
OHA YOOOO