MINI MINI MANI MO

Path : /opt/oracle/product/18c/dbhomeXE/rdbms/xml/xsl/
File Upload :
Current File : //opt/oracle/product/18c/dbhomeXE/rdbms/xml/xsl/kurls.xsl

<?xml version="1.0"?>
<!-- 
NAME
    kurls.xsl
DESCRIPTION
    XSLT stylesheet for XML => DDL conversion of ku$_rls_t UDTs
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
    sdavidso    02/27/17 - bug25440009 handle user name with apostrophe
    mjangir     05/02/12 - bug 14005749: quote identifier for policy_function
    aamirish    04/07/11 - Proj 35490: Import/Export support for Attribute
                           Associations of RLS Policies.
    sdavidso    04/24/09 - bug 8352552: quote identifiers for
                           DBMS_RLS.ADD_GROUPED_POLICY
    rapayne     11/02/05 - Bug 4715313: Reformat with XMLSpy
    clei        10/13/03 - ALL_COLUMNS -> ALL_ROWS
    clei        08/18/03 - add security relevant column option
    clei        11/25/02 - add Index statement type
    clei        09/03/02 - add 10i policy api extension
    dgagne      08/27/02 - comment how commas are inserted for rls
    htseng      08/02/02 - add grantee parse param
    htseng      07/26/02 - add more parse params
    dgagne      08/22/01 - Merged dgagne_add_xsl_stylesheets
    dgagne      05/09/01 - Created
 -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <!-- Import required scripts -->
 <xsl:import href="kucommon.xsl"/>
 <!-- Top-level parameters -->
 <xsl:param name="PRETTY">1</xsl:param>
 <xsl:param name="SQLTERMINATOR">0</xsl:param>
 <!-- params for parse -->
 <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 recreate RLS_POLICY -->
 <xsl:template match="RLS_POLICY_T">
  <xsl:call-template name="DoParse">
   <xsl:with-param name="Verb">DBMS_RLS.ADD_GROUPED_POLICY</xsl:with-param>
   <xsl:with-param name="ObjectType">RLS_POLICY</xsl:with-param>
   <xsl:with-param name="BaseSchemaNode" select="BASE_OBJ/OWNER_NAME"/>
   <xsl:with-param name="BaseNameNode" select="BASE_OBJ/NAME"/>
   <xsl:with-param name="BaseObjectType" select="BASE_OBJ/TYPE"/>
  </xsl:call-template>
  <xsl:text>BEGIN DBMS_RLS.ADD_GROUPED_POLICY('"</xsl:text>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="BASE_OBJ/OWNER_NAME"/>
  </xsl:call-template>
  <xsl:text>"','"</xsl:text>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="BASE_OBJ/NAME"/>
  </xsl:call-template>
  <xsl:text>"','"</xsl:text>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="GNAME"/>
  </xsl:call-template>
  <xsl:text>"','"</xsl:text>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="NAME"/>
  </xsl:call-template>
  <xsl:text>"','"</xsl:text>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="PFSCHMA"/>
  </xsl:call-template>
  <xsl:text>"','"</xsl:text>
  <xsl:if test="PPNAME">
   <xsl:call-template name="EnQuote">
    <xsl:with-param name="String" select="PPNAME"/>
   </xsl:call-template>
   <xsl:text>"."</xsl:text>
  </xsl:if>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="PFNAME"/>
  </xsl:call-template>
  <xsl:text>"','</xsl:text>
  <!--
      The stmt_type uses 5 bits, values 2048, 8, 4, 2, and 1. These represent
      INDEX,DELETE,UPDATE,INSERT AND SELECT. A comma is needed between any
      that are present. Only these 5 low bits are returned in stmt_type.
   -->
  <!-- If value 2048 is set, then add 'INDEX' -->
  <xsl:if test="STMT_TYPE >= 2048">
   <xsl:text>INDEX</xsl:text>
  </xsl:if>
  <!-- If bit 8 is set, first check to see if value 2048 was set. If it was also
       set, then 'INDEX' is already there, add in a comma first
  -->
  <xsl:if test="(STMT_TYPE mod 2048)>=8">
   <!-- need to add in DELETE? -->
   <xsl:if test="STMT_TYPE >=2048">
    <!-- need comma? -->
    <xsl:text>,</xsl:text>
   </xsl:if>
   <xsl:text>DELETE</xsl:text>
  </xsl:if>
  <xsl:if test="(STMT_TYPE mod 8)>=4">
   <!-- need to add in UPDATE? -->
   <xsl:if test="STMT_TYPE >=8">
    <!-- need comma? -->
    <xsl:text>,</xsl:text>
   </xsl:if>
   <xsl:text>UPDATE</xsl:text>
  </xsl:if>
  <!-- If bit 2 is set, first check to see if 2048, 8 or 4 was set. If either
       one of them was set, then a keyword is there with no trailing comma, add
       in a comma first.
  -->
  <xsl:if test="(STMT_TYPE mod 4)>=2">
   <!-- need to add in INSERT? -->
   <xsl:if test="STMT_TYPE >=4">
    <!-- bit 8 or bit 4 set -->
    <xsl:text>,</xsl:text>
   </xsl:if>
   <xsl:text>INSERT</xsl:text>
  </xsl:if>
  <!-- If bit 1 is set, first check to see if bit 8, 4, or 2 was set. If either
       bit 8, 4, or 2 was set, then a keyword is there with no trailing comma,
       add in a comma first.
  -->
  <xsl:if test="(STMT_TYPE mod 2)=1">
   <!-- need to add in SELECT? -->
   <xsl:if test="STMT_TYPE >=2">
    <!-- bit 8 or bit 4 set -->
    <xsl:text>,</xsl:text>
   </xsl:if>
   <xsl:text>SELECT</xsl:text>
  </xsl:if>
  <xsl:choose>
   <xsl:when test="CHECK_OPT = 1">
    <xsl:text>',TRUE</xsl:text>
   </xsl:when>
   <xsl:otherwise>
    <xsl:text>',FALSE</xsl:text>
   </xsl:otherwise>
  </xsl:choose>
  <xsl:choose>
   <xsl:when test="ENABLE_FLAG = 1">
    <xsl:text>,TRUE</xsl:text>
   </xsl:when>
   <xsl:otherwise>
    <xsl:text>,FALSE</xsl:text>
   </xsl:otherwise>
  </xsl:choose>
  <!-- static_policy will be ignored and overwritten by policy_type -->
  <xsl:text>,FALSE,</xsl:text>
  <xsl:value-of select="POLICY_TYPE"/>
  <!-- 4000 bytes predicate size limit when long_predicate is false -->
  <xsl:choose>
   <xsl:when test="LONG_PRED = 512">
    <xsl:text>,FALSE</xsl:text>
   </xsl:when>
   <xsl:otherwise>
    <xsl:text>,TRUE</xsl:text>
   </xsl:otherwise>
  </xsl:choose>
  <!-- list of security relevant cols, ok to have empty str:
       will have something like '' (empty list) or '"COL1","COL2"'
  -->
  <xsl:text>,'</xsl:text>
  <xsl:for-each select="REL_COLS/REL_COLS_ITEM">
   <xsl:text>"</xsl:text>
   <xsl:call-template name="EnQuote">
    <xsl:with-param name="String" select="SEC_REL_COL"/>
   </xsl:call-template>
   <xsl:text>"</xsl:text>
   <xsl:if test="not(position()=last())">
    <xsl:text>,</xsl:text>
   </xsl:if>
  </xsl:for-each>
  <!-- security relevant cols option -->
  <xsl:choose>
   <xsl:when test="REL_COLS_OPT = 4096">
    <xsl:text>',dbms_rls.ALL_ROWS</xsl:text>
   </xsl:when>
   <xsl:otherwise>
    <xsl:text>',NULL</xsl:text>
   </xsl:otherwise>
  </xsl:choose>
  <xsl:text>)</xsl:text>
  <xsl:text>; </xsl:text>
  <xsl:variable name="OwnerName" select="BASE_OBJ/OWNER_NAME"/>
  <xsl:variable name="ObjectName" select="BASE_OBJ/NAME"/>
  <xsl:variable name="PolicyName" select="NAME"/>
  <xsl:for-each select="RLS_ASSOC_LIST/RLS_ASSOC_LIST_ITEM">
   <xsl:call-template name="DoRLSAssociation">
    <xsl:with-param name="OwnerName" select="$OwnerName"/>
    <xsl:with-param name="ObjectName" select="$ObjectName"/>
    <xsl:with-param name="PolicyName" select="$PolicyName"/>
    <xsl:with-param name="AssocNode" select="."/>
   </xsl:call-template>
   <xsl:text>; </xsl:text>
  </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>
 <!-- Template to recreate RLS_GROUP -->
 <xsl:template match="RLS_GROUP_T">
  <xsl:call-template name="DoParse">
   <xsl:with-param name="Verb">DBMS_RLS.CREATE_POLICY_GROUP</xsl:with-param>
   <xsl:with-param name="ObjectType">RLS_GROUP</xsl:with-param>
   <xsl:with-param name="BaseSchemaNode" select="BASE_OBJ/OWNER_NAME"/>
   <xsl:with-param name="BaseNameNode" select="BASE_OBJ/NAME"/>
   <xsl:with-param name="BaseObjectType" select="BASE_OBJ/TYPE"/>
  </xsl:call-template>
  <xsl:text>BEGIN DBMS_RLS.CREATE_POLICY_GROUP('</xsl:text>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="BASE_OBJ/OWNER_NAME"/>
  </xsl:call-template>
  <xsl:text>','</xsl:text>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="BASE_OBJ/NAME"/>
  </xsl:call-template>
  <xsl:text>','</xsl:text>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="NAME"/>
  </xsl:call-template>
  <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:template>
 <!-- Template to recreate RLS_CONTEXT -->
 <xsl:template match="RLS_CONTEXT_T">
  <xsl:call-template name="DoParse">
   <xsl:with-param name="Verb">DBMS_RLS.ADD_POLICY_CONTEXT</xsl:with-param>
   <xsl:with-param name="ObjectType">RLS_CONTEXT</xsl:with-param>
   <xsl:with-param name="BaseSchemaNode" select="BASE_OBJ/OWNER_NAME"/>
   <xsl:with-param name="BaseNameNode" select="BASE_OBJ/NAME"/>
   <xsl:with-param name="BaseObjectType" select="BASE_OBJ/TYPE"/>
  </xsl:call-template>
  <xsl:text>BEGIN DBMS_RLS.ADD_POLICY_CONTEXT('</xsl:text>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="BASE_OBJ/OWNER_NAME"/>
  </xsl:call-template>
  <xsl:text>','</xsl:text>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="BASE_OBJ/NAME"/>
  </xsl:call-template>
  <xsl:text>','</xsl:text>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="NAME"/>
  </xsl:call-template>
  <xsl:text>','</xsl:text>
  <xsl:call-template name="EnQuote">
   <xsl:with-param name="String" select="ATTR"/>
  </xsl:call-template>
  <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:template>
 <xsl:template name="DoRLSAssociation">
  <xsl:param name="OwnerName" select="''"/>
  <xsl:param name="ObjectName" select="''"/>
  <xsl:param name="PolicyName" select="''"/>
  <xsl:param name="AssocNode" select="''"/>
  <xsl:text>&#xa;</xsl:text>
  <xsl:text>DBMS_RLS.ALTER_POLICY(</xsl:text>
  <xsl:text>    OBJECT_SCHEMA => </xsl:text>
  <xsl:call-template name="SingleQuotedName">
   <xsl:with-param name="NameNode" select="$OwnerName"/>
  </xsl:call-template>
  <xsl:text>,</xsl:text>
  <xsl:text>    OBJECT_NAME => </xsl:text>
  <xsl:call-template name="SingleQuotedName">
   <xsl:with-param name="NameNode" select="$ObjectName"/>
  </xsl:call-template>
  <xsl:text>,</xsl:text>
  <xsl:text>    POLICY_NAME => </xsl:text>
  <xsl:call-template name="SingleQuotedName">
   <xsl:with-param name="NameNode" select="$PolicyName"/>
  </xsl:call-template>
  <xsl:text>,</xsl:text>
  <xsl:text>    ALTER_OPTION => </xsl:text>
  <xsl:text>dbms_rls.add_attribute_association,</xsl:text>
  <xsl:text>    NAMESPACE => </xsl:text>
  <xsl:call-template name="SingleQuotedName">
   <xsl:with-param name="NameNode" select="NAMESPACE"/>
  </xsl:call-template>
  <xsl:text>,</xsl:text>
  <xsl:text>    ATTRIBUTE => </xsl:text>
  <xsl:call-template name="SingleQuotedName">
   <xsl:with-param name="NameNode" select="ATTRIBUTE"/>
  </xsl:call-template>
  <xsl:text>)</xsl:text>
 </xsl:template>
</xsl:stylesheet>

OHA YOOOO