MINI MINI MANI MO
<?xml version="1.0"?>
<!--
Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
NAME
kuobjtbl.xsl
DESCRIPTION
XSLT stylesheet for XML => DDL conversion of object table ADTs
NOTES
Do NOT modify this file under any circumstance. If you wish to use this
stylesheet with an external XML/XSL parser, first make a copy then reverse
the comments on any xsl:import statements appearing below.
MODIFIED MM/DD/YY
tojhuan 07/20/16 - lrg 18954633: hide element IDs in XMLSCHEMA clauses
tbhukya 01/05/15 - Bug 20319428: Declare referred params and import
xsl files for referred templates
rapayne 11/19/14 - bug-18637315 - ensure oidindex generates TABLESPACE
clause when deferred_stg.
bwright 08/16/13 - Bug 17312600: Remove hard tabs from DP src code
lbarton 06/17/09 - lrg 3543159: XMLType virtual columns
shvenugo 03/23/09 - add store all varrays as lobs(tables) support
rapayne 12/06/08 - merge BLOCKSIZE logic for CM
htseng 03/20/06 - add xmltype binary support
lbarton 01/20/06 - code restructuring
lbarton 11/02/05 - Bug 4715313: reformat files for use with XMLSpy
lbarton 01/04/05 - bug 4017065: SUBSTITUTABLE on object table
rpfau 12/02/04 - Have callers of DoXMLTypeStorage emit XMLTYPE and
simplify call logic.
lbarton 05/12/04 - Disentangle OID and EXPORT
rpfau 03/31/04 - Fix temporary table with name specified for
oidindex - bug 3470762. Remove OidIndex template.
bmccarth 10/30/03 - get REF correct for XMLSchemas
lbarton 09/02/03 - Bug 3103169: dataobjnum for oidindex storage
lbarton 03/20/03 - Bug 2859037: emit OID if EXPORT true
bmccarth 03/31/03 - change call to lobmd
lbarton 02/26/03 - emit owner with type synonym
bmccarth 03/07/03 - add space after element num
ataracha 02/19/03 - add space after out_of_line
lbarton 01/30/03 - syntax for out-of-line tables
bmccarth 10/08/02 - bug 2518404-xmlschema location
bmccarth 08/15/02 - Move OID of table to after XMLTABLE
bmccarth 08/08/02 - add space after oid value
lbarton 04/03/02 - xdb bugfix
lbarton 10/25/01 - xdb support
dgagne 07/12/01 - fix OidIndex clause, missing index name
gclaborn 11/03/00 - change name
gclaborn 08/29/00 - use table, not type OID in OID clause
lbarton 07/07/00 - bugfix: PkOid
lbarton 05/17/00 - Params for new API
lbarton 03/17/00 - Add module header
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Needed for template DoConstraintColList -->
<xsl:import href="kuconstr.xsl"/>
<!-- Needed for template DoXMLTypeStorage -->
<xsl:import href="kulob.xsl"/>
<!-- Top level params -->
<xsl:param name="OID">0</xsl:param>
<xsl:param name="PRETTY">1</xsl:param>
<xsl:param name="SEGMENT_ATTRIBUTES">1</xsl:param>
<xsl:param name="PCTSPACE">100</xsl:param>
<xsl:param name="VERSION">9999999999</xsl:param>
<xsl:template name="ObjTable">
<!-- *******************************************************************
Template: ObjTable
For an object table generate
OF typeowner.typename [ OID oid ] [ substitution-clauses ]
******************************************************************** -->
<xsl:for-each select="COL_LIST/COL_LIST_ITEM[NAME='SYS_NC_ROWINFO$']/TYPEMD">
<xsl:text>OF </xsl:text>
<xsl:choose>
<xsl:when test="SYN_NAME">
<xsl:if test="SYN_OWNER!='PUBLIC'">
<xsl:text>"</xsl:text>
<xsl:value-of select="SYN_OWNER"/>
<xsl:text>".</xsl:text>
</xsl:if>
<xsl:text>"</xsl:text>
<xsl:value-of select="SYN_NAME"/>
<xsl:text>"</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="SCHEMA_OBJ"/>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="$OID=1">
<xsl:if test="$PRETTY=1">
<xsl:text>
</xsl:text>
</xsl:if>
<xsl:text> OID '</xsl:text>
<xsl:value-of select="../../../SCHEMA_OBJ/OID"/>
<!-- Use table's OID -->
<xsl:text>' </xsl:text>
</xsl:if>
<!-- object table substitution -->
<xsl:choose>
<!-- 0x800 - SUBSTITUTABLE specified explicitly -->
<xsl:when test="(FLAGS mod 4096)>= 2048">
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text> SUBSTITUTABLE AT ALL LEVELS </xsl:text>
</xsl:when>
<!-- 0x400 - NOT SUBSTITUTABLE specified explicitly -->
<xsl:when test="(FLAGS mod 2048)>=1024">
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
<xsl:text> NOT SUBSTITUTABLE AT ALL LEVELS </xsl:text>
</xsl:when>
</xsl:choose>
<!-- Because of parsing issues with XMLSchema based object tables -->
<!-- don't check for that here (it's done later by the caller) -->
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template name="DoOidindex">
<!-- *******************************************************************
Template: DoOidindex - emit OIDINDEX clause
Current node: TABLE_T
If not a temporary table and segment_attributes is TRUE,
write OIDINDEX and segment attributes. If user name specified,
write that too.
If a temporary table, segment_attributes not allowed. But if a
user name was specified, write out OIDINDEX and the name.
If name specified for oidindex (not system generated), write it out.
******************************************************************** -->
<xsl:choose>
<!-- Skip XMLSchema object table -->
<xsl:when test="COL_LIST/COL_LIST_ITEM[NAME='SYS_NC_ROWINFO$']/OPQMD/SCHEMA_ELMT"/>
<xsl:otherwise>
<xsl:for-each select="COL_LIST/COL_LIST_ITEM/OIDINDEX">
<xsl:choose>
<xsl:when test="(../../../PROPERTY mod 8388608)>=4194304">
<!-- temp table. If oidindex has a user specified name, write -->
<!-- OIDINDEX and name -->
<xsl:if test="(FLAGS mod 16) < 8">
<!-- user specified name -->
<xsl:text>OIDINDEX </xsl:text>
<xsl:value-of select="NAME"/>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<!-- Not a temp table. -->
<xsl:choose>
<xsl:when test="$SEGMENT_ATTRIBUTES=0">
<!-- SEGMENT_ATTRIBUTES=0, Only write OIDINDEX and name if user -->
<!-- specified a name. -->
<xsl:if test="(FLAGS mod 16) < 8">
<xsl:text>OIDINDEX </xsl:text>
<xsl:value-of select="NAME"/>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<!-- SEGMENT_ATTRIBUTES=1, always write OIDINDEX -->
<xsl:text>OIDINDEX </xsl:text>
<!-- If oidindex has a user specified name, write it -->
<xsl:if test="(FLAGS mod 16) < 8">
<xsl:value-of select="NAME"/>
</xsl:if>
<xsl:text> ( </xsl:text>
<xsl:apply-templates select="PCT_FREE">
<xsl:with-param name="ADT_type">INDEX</xsl:with-param>
</xsl:apply-templates>
<!-- Write storage attributes only if both SEGMENT_ATTRIBUTES and -->
<!-- STORAGE are TRUE. That check is done in template -->
<!-- "NamedStorage" which is called by template match "STORAGE" -->
<xsl:apply-templates select="STORAGE">
<xsl:with-param name="BlkSize" select="../BLOCKSIZE | BLOCKSIZE"/>
<xsl:with-param name="Dataobjnum" select="STORAGE/HWMINCR"/>
<xsl:with-param name="Pctspace" select="$PCTSPACE"/>
</xsl:apply-templates>
<!-- If there is a DEFERRED_STG node then we need to make sure generate
TABLESPACE clause manually
-->
<xsl:if test="DEFERRED_STG">
<xsl:if test="$TABLESPACE=1 and TS_NAME">
<xsl:apply-templates select="TS_NAME"/>
</xsl:if>
</xsl:if>
<xsl:text>) </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="PkOid">
<!-- *******************************************************************
Template; PkOid
????? Looks like this template is no longer used
******************************************************************** -->
<xsl:text>(PRIMARY KEY (</xsl:text>
<xsl:call-template name="DoConstraintColList">
<xsl:with-param name="ColListNode" select="CON1_LIST/CON1_LIST_ITEM[CONTYPE='2']/COL_LIST"/>
</xsl:call-template>
<xsl:text>)) OBJECT ID PRIMARY KEY
</xsl:text>
</xsl:template>
<xsl:template match="OPQMD/SCHEMA_ELMT">
<!-- *******************************************************************
Template; OPQMD/SCHEMA_ELMT
******************************************************************** -->
<xsl:apply-templates select="../../LOBMD"/>
<xsl:call-template name="DoSchemaElmt">
<xsl:with-param name="SchemaElmt" select="current()"/>
</xsl:call-template>
<xsl:call-template name="DoAllowDisallow">
<xsl:with-param name="OpqmdElmt" select=".."/>
</xsl:call-template>
<xsl:if test="((../FLAGS) mod 64)>=32">
<xsl:text>OUT_OF_LINE </xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="LOBMD">
<!-- *******************************************************************
Template: LOBMD
******************************************************************** -->
<xsl:call-template name="DoXMLTypeStorage"/>
<xsl:if test="$PRETTY=1">
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template name="DoSchemaElmt">
<xsl:param name="SchemaElmt" select="''"/>
<!-- *******************************************************************
Template: DoSchemaElmt - emit the XMLSchema_spec clause
Parameters:
SchemaElmt - the SCHEMA_ELMT node
******************************************************************** -->
<xsl:text> XMLSCHEMA "</xsl:text>
<xsl:value-of select="$SchemaElmt/XMLSCHEMA"/>
<xsl:text>" ELEMENT "</xsl:text>
<xsl:value-of select="$SchemaElmt/ELEMENT_NAME"/>
<xsl:text>" </xsl:text>
<xsl:if test="(($SchemaElmt/../FLAGS) mod 64)>=32">
<xsl:text>OUT_OF_LINE </xsl:text>
</xsl:if>
</xsl:template>
<xsl:template name="DoAllowDisallow">
<xsl:param name="OpqmdElmt" select="''"/>
<!-- *******************************************************************
Template: DoAllowDisallow - emit [DIS]ALLOW [NON]SCHEMA
Parameters:
OpqmdElmt - the OPQMD node
******************************************************************** -->
<xsl:if test="(($OpqmdElmt/FLAGS) mod 4096)>=2048 and $VERSION >= 1102000000">
<xsl:text>STORE ALL VARRAYS AS LOBS </xsl:text>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:if>
<xsl:if test="(($OpqmdElmt/FLAGS) mod 128)>=64">
<xsl:choose>
<xsl:when test="(($OpqmdElmt/FLAGS) mod 512 )>=256">
<xsl:text>DISALLOW NONSCHEMA </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>ALLOW NONSCHEMA </xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="(($OpqmdElmt/FLAGS) mod 256 )>=128">
<xsl:text>ALLOW ANYSCHEMA </xsl:text>
</xsl:when>
<xsl:when test="(($OpqmdElmt/FLAGS) mod 512 )<256">
<xsl:text>DISALLOW ANYSCHEMA </xsl:text>
</xsl:when>
</xsl:choose>
<xsl:if test="$PRETTY=1">
<xsl:text>
 </xsl:text>
</xsl:if>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
OHA YOOOO