MINI MINI MANI MO
<?xml version="1.0"?>
<!--
Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
NAME
kutrigc.xsl
DESCRIPTION
Templates for common and utility functions used by both kustrigd.xsl
and kuatrig.xsl
NOTE
Because these templates may be applied to SXML difference documents,
they must be aware of the @src and @value1 attributes.
MODIFIED MM/DD/YY
abodge 03/31/15 - Bug 20728442: use TargetSchemaName in CM mode
tbhukya 01/05/15 - Bug 20319428: Modify incorrect if stmt
rapayne 05/20/14 - bug 18609821: fix COMPOUND trigger ddl as well
EDITIONABLE ddl.
abodge 09/22/09 - CONSOLIDATE STYLESHEETS: Multistatement support
lbarton 06/02/08 - bug 6767780: view trigger on nested table col
lbarton 01/02/07 - Initial version
-->
<xsl:stylesheet version="1.0" xmlns:sxml="http://xmlns.oracle.com/ku" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Top level imports -->
<xsl:import href="kuscommc.xsl"/>
<xsl:template name="CreTrigger">
<!-- *******************************************************************
Template: CreTrigger
Current node: TRIGGER
This template puts out
- CREATE TRIGGER schema.name
******************************************************************** -->
<xsl:text> CREATE OR REPLACE</xsl:text>
<xsl:if test="$VERSION>=1200000000">
<xsl:choose>
<xsl:when test="sxml:NONEDITIONABLE"> NONEDITIONABLE</xsl:when>
<xsl:otherwise> EDITIONABLE</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:text> TRIGGER </xsl:text>
<xsl:choose>
<xsl:when test="$CM_MODE=1">
<xsl:call-template name="TargetSchemaName">
<xsl:with-param name="ParentNode" select="."/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="SchemaName">
<xsl:with-param name="ParentNode" select="."/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:apply-templates select="sxml:TRIGGER_TYPE"/>
<!-- one of the following three will match -->
<xsl:apply-templates select="sxml:DDL_EVENT[not(@src='1')]"/>
<xsl:apply-templates select="sxml:DML_EVENT[not(@src='1')]"/>
<xsl:apply-templates select="sxml:DATABASE_EVENT[not(@src='1')]"/>
<!-- when_condition -->
<xsl:if test="sxml:WHEN_CONDITION[not(@src='1')]">
<xsl:if test="$PRETTY=1">
<xsl:text>
</xsl:text>
</xsl:if>
<xsl:text> WHEN (</xsl:text>
<xsl:value-of select="sxml:WHEN_CONDITION"/>
<xsl:text>)</xsl:text>
</xsl:if>
<xsl:if test="sxml:PLSQL_BLOCK[not(@src='1')]">
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text> </xsl:text>
<xsl:value-of select="sxml:PLSQL_BLOCK"/>
</xsl:if>
<xsl:if test="sxml:CALL_PROCEDURE[not(@src='1')]">
<xsl:if test="$PRETTY=1">
<xsl:text>
</xsl:text>
</xsl:if>
<xsl:text> CALL </xsl:text>
<xsl:value-of select="sxml:CALL_PROCEDURE"/>
</xsl:if>
</xsl:template>
<xsl:template match="sxml:TRIGGER_TYPE">
<!-- *******************************************************************
Template: TRIGGER_TYPE - This template puts out one of
BEFORE
AFTER
INSTEAD OF
FOR (i.e., COMPOUND triggers)
******************************************************************** -->
<xsl:choose>
<xsl:when test=".='BEFORE'"> BEFORE </xsl:when>
<xsl:when test=".='AFTER'"> AFTER </xsl:when>
<xsl:when test=".='INSTEAD_OF'"> INSTEAD OF </xsl:when>
<xsl:when test=".='COMPOUND'"> FOR </xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="sxml:DATABASE_EVENT">
<!-- *******************************************************************
Template: DATABASE_EVENT
******************************************************************** -->
<xsl:apply-templates select="sxml:EVENT_LIST"/>
<xsl:text> ON DATABASE</xsl:text>
</xsl:template>
<xsl:template match="sxml:DDL_EVENT">
<!-- *******************************************************************
Template: DDL_EVENT
******************************************************************** -->
<xsl:apply-templates select="sxml:EVENT_LIST"/>
<xsl:apply-templates select="sxml:DATABASE[not(@src='1')]"/>
<xsl:apply-templates select="sxml:SCHEMA[not(@src='1')]"/>
</xsl:template>
<xsl:template match="sxml:DML_EVENT">
<!-- *******************************************************************
Template: DML_EVENT
******************************************************************** -->
<xsl:apply-templates select="sxml:EVENT_LIST"/>
<xsl:text> ON </xsl:text>
<xsl:apply-templates select="sxml:NESTED_TABLE_COLUMN[not(@src='1')]"/>
<xsl:call-template name="TargetSchemaName">
<xsl:with-param name="ParentNode" select="."/>
</xsl:call-template>
<xsl:apply-templates select="sxml:REFERENCING"/>
</xsl:template>
<xsl:template match="sxml:EVENT_LIST">
<!-- *******************************************************************
Template: EVENT_LIST
******************************************************************** -->
<xsl:for-each select="sxml:EVENT_LIST_ITEM[not(@src='1')]">
<xsl:value-of select="sxml:EVENT"/>
<xsl:apply-templates select="sxml:COL_LIST"/>
<xsl:if test="position()!=last()"> OR </xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template match="sxml:COL_LIST">
<!-- *******************************************************************
Template: COL_LIST
******************************************************************** -->
<xsl:text> OF </xsl:text>
<xsl:for-each select="sxml:COL_LIST_ITEM[not(@src='1')]">
<xsl:value-of select="sxml:NAME"/>
<xsl:if test="position()!=last()">, </xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template match="sxml:DATABASE">
<!-- *******************************************************************
Template: DATABASE
******************************************************************** -->
<xsl:text> ON DATABASE</xsl:text>
</xsl:template>
<xsl:template match="sxml:SCHEMA">
<!-- *******************************************************************
Template: SCHEMA
******************************************************************** -->
<xsl:text> ON "</xsl:text>
<xsl:value-of select="."/>
<xsl:text>".SCHEMA</xsl:text>
</xsl:template>
<xsl:template match="sxml:NESTED_TABLE_COLUMN">
<!-- *******************************************************************
Template: NESTED_TABLE_COLUMN
******************************************************************** -->
<xsl:text>NESTED TABLE </xsl:text>
<xsl:value-of select="."/>
<xsl:text> OF </xsl:text>
</xsl:template>
<xsl:template match="sxml:REFERENCING">
<!-- *******************************************************************
Template: REFERENCING
******************************************************************** -->
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text> REFERENCING </xsl:text>
<xsl:if test="sxml:NEW_AS[not(@src='1')]">
<xsl:text>NEW AS </xsl:text>
<xsl:value-of select="sxml:NEW_AS"/>
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if test="sxml:OLD_AS[not(@src='1')]">
<xsl:text>OLD AS </xsl:text>
<xsl:value-of select="sxml:OLD_AS"/>
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if test="sxml:PARENT_AS[not(@src='1')]">
<xsl:text>PARENT AS </xsl:text>
<xsl:value-of select="sxml:PARENT_AS"/>
<xsl:text> </xsl:text>
</xsl:if>
<xsl:if test="sxml:FOR_EACH_ROW[not(@src='1')]">
<xsl:text>FOR EACH ROW</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="sxml:DISABLE">
<!-- *******************************************************************
Template: DISABLE
******************************************************************** -->
<xsl:choose>
<xsl:when test="$CM_MODE=1 and $PRS_DDL=1">
<xsl:value-of select="$PRS_DELIM"/>
<xsl:text>C</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>
</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text> ALTER TRIGGER </xsl:text>
<xsl:call-template name="SchemaName">
<xsl:with-param name="ParentNode" select=".."/>
</xsl:call-template>
<xsl:text> DISABLE</xsl:text>
<xsl:if test="$SQLTERMINATOR=1">
<xsl:text>;</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
OHA YOOOO