MINI MINI MANI MO
<?xml version="1.0"?>
<!--
NAME
kusrlsd.xsl
DESCRIPTION
Convert RLS_POLICY document (SXML) to creation DDL.
Convert RLS_GROUP document (SXML) to creation DDL.
Convert RLS_CONTEXT document (SXML) to creation DDL.
MODIFIED MM/DD/YY
sdavidso 03/13/17 - bug25440009 handle user name with apostrophe
mjangir 05/02/12 - bug 14005749: quote identifier for policy_function
sdavidso 04/27/09 - bug 8352552: quote identifiers for
DBMS_RLS.ADD_GROUPED_POLICY
sdavidso 11/02/05 - fix inconsistent stylesheet format
lbarton 08/10/05 - lbarton_mddiff
htseng 07/20/05 -
lbarton 07/08/05 -
htseng 04/11/05 - 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="kuscommd.xsl"/>
<!-- Top-level parameters -->
<!-- Parameters for DDL generation -->
<xsl:param name="PRETTY">1</xsl:param>
<xsl:param name="SQLTERMINATOR">0</xsl:param>
<!-- *******************************************************************
Template: top-level template for RLS_POLICY.
Template: top-level template for RLS_GROUP.
Template: top-level template for RLS_CONTEXT.
******************************************************************** -->
<xsl:template match="sxml:RLS_POLICY">
<xsl:text> BEGIN DBMS_RLS.ADD_GROUPED_POLICY('"</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:SCHEMA"/>
</xsl:call-template>
<xsl:text>"','"</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:NAME"/>
</xsl:call-template>
<xsl:text>"','"</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:POLICY_GROUP"/>
</xsl:call-template>
<xsl:text>"','"</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:POLICY_NAME"/>
</xsl:call-template>
<xsl:text>"','"</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:FUNCTION_SCHEMA"/>
</xsl:call-template>
<xsl:text>"','"</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:POLICY_FUNCTION"/>
</xsl:call-template>
<xsl:text>"','</xsl:text>
<xsl:variable name="TypList">
<xsl:for-each select="sxml:STATEMENT_TYPE_LIST/sxml:STATEMENT_TYPE_LIST_ENTRY/sxml:NAME">
<xsl:value-of select="."/>
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="$TypList"/>
</xsl:call-template>
<xsl:text>',</xsl:text>
<xsl:choose>
<xsl:when test="sxml:UPDATE_CHECK='Y'">
<xsl:text>TRUE,</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>FALSE,</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="sxml:ENABLE='Y'">
<xsl:text>TRUE,</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>FALSE,</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="sxml:STATIC_POLICY='Y'">
<xsl:text>TRUE,</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>FALSE,</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="sxml:POLICY_TYPE"/>
<xsl:text>,</xsl:text>
<xsl:choose>
<xsl:when test="sxml:LONG_PREDICATE='Y'">
<xsl:text>TRUE,'</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>FALSE,'</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:variable name="ColList">
<xsl:for-each select="sxml:RELEVANT_COLUMN_LIST/sxml:RELEVANT_COLUMN_LIST_ENTRY/sxml:NAME">
<xsl:text>"</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
<xsl:if test="not(position()=last())">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="$ColList"/>
</xsl:call-template>
<xsl:text>',</xsl:text>
<!-- security relevant cols option -->
<xsl:choose>
<xsl:when test="sxml:ALL_ROWS">
<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>; END;</xsl:text>
<!-- Terminate inner SQL statement -->
<xsl:call-template name="DoTerminator"/>
</xsl:template>
<!-- Template to recreate RLS_GROUP -->
<xsl:template match="sxml:RLS_GROUP">
<xsl:text> BEGIN DBMS_RLS.CREATE_POLICY_GROUP('</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:SCHEMA"/>
</xsl:call-template>
<xsl:text>','</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:NAME"/>
</xsl:call-template>
<xsl:text>','</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:POLICY_GROUP"/>
</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="sxml:RLS_CONTEXT">
<xsl:text> BEGIN DBMS_RLS.ADD_POLICY_CONTEXT('</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:SCHEMA"/>
</xsl:call-template>
<xsl:text>','</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:NAME"/>
</xsl:call-template>
<xsl:text>','</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:NAMESPACE"/>
</xsl:call-template>
<xsl:text>','</xsl:text>
<xsl:call-template name="EscapeStringSxD">
<xsl:with-param name="TheString" select="sxml:ATTRIBUTE"/>
</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:stylesheet>
OHA YOOOO