MINI MINI MANI MO
<?xml version="1.0"?>
<!--
Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
NAME
kuradmp.xsl
DESCRIPTION
XSLT stylesheet for XML => DDL
conversion of ku$_radm_policy_t UDTs
corresponding to 12c project RADM, dictionary table radm$.
NOTES
Do NOT modify this file under any circumstance. Copy the file
if you wish to use this stylesheet with an external XML/XSL parser
MODIFIED MM/DD/YY
rapayne 07/28/17 - bug 26033751: correctly handle objects with
special chars (eg. spaces, apos, etc).
rapayne 07/17/17 - bug 26450663: generates incorrect ddl when
NULLIFY function type
jjanosik 06/23/17 - Bug 24719359: add support for RADM_POLICY_EXPR
mjangir 06/28/16 - bug 19450444: support regexp data redaction
tbhukya 01/05/15 - Bug 20319428: Remove unnecessary comment line
dahlim 11/08/11 - lrg 5750942, due to renaming of DBMS_RADM to _REDACT
dahlim 06/08/11 - Created
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Import the kucommon.xsl script, otherwise this template will never get invoked. See line 43 in kucommon.xsl, where the comment is "Top level template for all objects", this is the xsl equivalent of 'main'. -->
<xsl:import href="kucommon.xsl"/>
<!-- Top-level parameters -->
<!-- Parameters for DDL generation -->
<xsl:param name="PRETTY">1</xsl:param>
<xsl:param name="SQLTERMINATOR">0</xsl:param>
<!-- Parameters required for DoParse to function correctly. -->
<xsl:param name="PRS_DDL">0</xsl:param>
<xsl:param name="PRS_DELIM">\{]`</xsl:param>
<xsl:param name="PRS_VERB">0</xsl:param>
<xsl:param name="PRS_OBJECT_TYPE">0</xsl:param>
<xsl:param name="PRS_SCHEMA">0</xsl:param>
<xsl:param name="PRS_NAME">0</xsl:param>
<xsl:param name="PRS_GRANTEE">0</xsl:param>
<xsl:param name="PRS_GRANTOR">0</xsl:param>
<xsl:param name="PRS_BASE_OBJECT_SCHEMA">0</xsl:param>
<xsl:param name="PRS_BASE_OBJECT_NAME">0</xsl:param>
<xsl:param name="PRS_BASE_OBJECT_TYPE">0</xsl:param>
<!-- Template to insert values into table radm_pe$ -->
<xsl:template match="RADM_POLICY_EXPR_T">
<xsl:if test='ENAME'>
<xsl:call-template name="DoParse">
<xsl:with-param name="Verb">DBMS_REDACT</xsl:with-param>
<xsl:with-param name="ObjectType">RADM_POLICY_EXPRESSION</xsl:with-param>
</xsl:call-template>
<xsl:text>BEGIN </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>DBMS_REDACT.CREATE_POLICY_EXPRESSION(policy_expression_name => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="ENAME"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>expression => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="EXPR"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>policy_expression_description => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="DESCR"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
<xsl:text>); </xsl:text>
<xsl:text>
</xsl:text>
<xsl:text>END; </xsl:text>
<!-- Terminate inner SQL statement -->
<xsl:call-template name="DoTerminator">
<xsl:with-param name="Text"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<!-- Template to insert values into table radm$ -->
<xsl:template match="RADM_POLICY_T">
<xsl:call-template name="DoParse">
<xsl:with-param name="Verb">DBMS_REDACT</xsl:with-param>
<xsl:with-param name="ObjectType">RADM_POLICY</xsl:with-param>
</xsl:call-template>
<xsl:text>BEGIN </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>DBMS_REDACT.ADD_POLICY(object_schema => </xsl:text>
<xsl:call-template name="TSQuoteObject">
<xsl:with-param name="Schema" select="BASE_OBJ/OWNER_NAME"/>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>object_name => </xsl:text>
<xsl:call-template name="TSQuoteObject">
<xsl:with-param name="Object" select="BASE_OBJ/NAME"/>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>policy_name => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="PNAME"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>expression => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="PEXPR"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>enable => </xsl:text>
<xsl:choose>
<xsl:when test="(ENABLE_FLAG=0)">FALSE</xsl:when>
<xsl:otherwise>TRUE</xsl:otherwise>
</xsl:choose>
<xsl:text>); </xsl:text>
<xsl:text>
</xsl:text>
<!-- to insert values into table radm_mc$ -->
<xsl:variable name="Owner" select="BASE_OBJ/OWNER_NAME"/>
<xsl:variable name="ObjName" select="BASE_OBJ/NAME"/>
<xsl:for-each select="MC_LIST/MC_LIST_ITEM">
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>DBMS_REDACT.ALTER_POLICY (object_schema => </xsl:text>
<xsl:call-template name="TSQuoteObject">
<xsl:with-param name="Schema" select="$Owner"/>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>object_name => </xsl:text>
<xsl:call-template name="TSQuoteObject">
<xsl:with-param name="Object" select="$ObjName"/>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>policy_name => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="PNAME"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>action => DBMS_REDACT.ADD_COLUMN</xsl:text>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>column_name => </xsl:text>
<xsl:call-template name="TSQuoteObject">
<xsl:with-param name="Object" select="COL_NAME"/>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>function_type => </xsl:text>
<xsl:choose>
<xsl:when test="(MFUNC=0)">
<xsl:text>DBMS_REDACT.NONE</xsl:text>
</xsl:when>
<xsl:when test="(MFUNC=1)">
<xsl:text>DBMS_REDACT.FULL</xsl:text>
</xsl:when>
<xsl:when test="(MFUNC=2)">
<xsl:text>DBMS_REDACT.PARTIAL</xsl:text>
</xsl:when>
<xsl:when test="(MFUNC=3)">
<xsl:text>DBMS_REDACT.FORMAT_PRESERVING</xsl:text>
</xsl:when>
<xsl:when test="(MFUNC=4)">
<xsl:text>DBMS_REDACT.RANDOM</xsl:text>
</xsl:when>
<xsl:when test="(MFUNC=5)">
<xsl:text>DBMS_REDACT.REGEXP</xsl:text>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>regexp_pattern => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="REGEXP_PATT"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>regexp_replace_string => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="REGEXP_REPL"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>regexp_position => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="REGEXP_POSI"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>regexp_occurrence => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="REGEXP_OCCU"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>regexp_match_parameter => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="REGEXP_MATC"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:when test="(MFUNC=6)">
<xsl:text>DBMS_REDACT.NULLIFY</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>DBMS_REDACT.RANDOM</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>function_parameters => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="MPARAMS"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
<xsl:text>); </xsl:text>
<xsl:text>
</xsl:text>
<!-- Add a policy expression to the column if there is one -->
<xsl:if test='PE_NAME'>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>DBMS_REDACT.APPLY_POLICY_EXPR_TO_COL(object_schema => </xsl:text>
<xsl:call-template name="TSQuoteObject">
<xsl:with-param name="Object" select="$Owner"/>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>object_name => </xsl:text>
<xsl:call-template name="TSQuoteObject">
<xsl:with-param name="Object" select="$ObjName"/>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>column_name => </xsl:text>
<xsl:call-template name="TSQuoteObject">
<xsl:with-param name="Object" select="COL_NAME"/>
</xsl:call-template>
<xsl:text>, </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text>policy_expression_name => </xsl:text>
<xsl:call-template name="EscapeString">
<xsl:with-param name="OrigStr" select="PE_NAME"/>
<xsl:with-param name="Leading">'</xsl:with-param>
<xsl:with-param name="Trailing">'</xsl:with-param>
<xsl:with-param name="NullVal">NULL</xsl:with-param>
</xsl:call-template>
<xsl:text>); </xsl:text>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>END; </xsl:text>
<!-- Terminate inner SQL statement -->
<xsl:call-template name="DoTerminator">
<xsl:with-param name="Text"/>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
OHA YOOOO