Edit D:\app\Administrator\product\11.2.0\dbhome_1\oc4j\j2ee\oc4j_applications\applications\em\em\WEB-INF\xsls\kuaindex.xsl
<?xml version="1.0"?> <!-- Copyright (c) 2006, 2009, Oracle and/or its affiliates. All rights reserved. NAME kuaindex.xsl DESCRIPTION Convert sxml INDEX diff document to ALTER_XML document NOT_ALTERABLE Reasons: - UNIQUE_INDEX - BITMAP_INDEX - ON_TABLE - COLUMN - PARALLEL_INSTANCES MODIFIED MM/DD/YY abodge 04/20/09 - Fix lrg 3860916 abodge 01/14/09 - Copy 10.2.0.5GC on top of 11.2 DB Control rapayne 12/02/08 - modify 'rebuild partition' to quote partition name and tablespace name. rapayne 09/25/08 - Bug 7434520:SegAttr for range-partitioned index diffs processed twice. lbarton 09/15/08 - bug 7362930: UNUSABLE index (sub)partitions lbarton 07/10/08 - bug 5709159: SQL_LIST_ITEM subelements rapayne 22/01/08 - fix parameter selection for PARALLEL (i.e., not just PARALLEL_DEGREE) lbarton 01/22/08 - Bug 6724820: table compression rapayne 16/07/07 - move CommonNotAlterable to kuacomm.xsl - check for incompatible index 'types' and mark as not alterable if appropriate: (e.g., TABLE_INDEX vs. BITMAP_JOIN_INDEX) rapayne 24/11/06 - correct ade sync problem htseng 20/11/06 - not alterable unique, col_list rapayne 06/09/06 - 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="kuacomm.xsl"/> <xsl:import href="kuatprop.xsl"/> <!-- Top-level parameters --> <xsl:param name="DROP_MISSING_COLUMNS">1</xsl:param> <!-- params for parse --> <xsl:param name="PRS_ALTERABLE">0</xsl:param> <xsl:param name="PRS_NAME">0</xsl:param> <xsl:param name="PRS_CLAUSE_TYPE">0</xsl:param> <xsl:param name="PRS_COLUMN_ATTRIBUTE">0</xsl:param> <!-- Templates --> <xsl:template match="sxml:INDEX"> <!-- ******************************************************************* Template: INDEX - top-level template for Index. ******************************************************************** --> <xsl:element name="ALTER_XML"> <xsl:attribute name="xmlns">http://xmlns.oracle.com/ku</xsl:attribute> <xsl:attribute name="version">1.0</xsl:attribute> <!-- Object type --> <xsl:element name="OBJECT_TYPE">INDEX</xsl:element> <!--Display schema.objname for CoMPareObjects 1 and 2 --> <xsl:call-template name="CmpObjects"> <xsl:with-param name="ParentNode" select="."/> </xsl:call-template> <xsl:element name="ALTER_LIST"> <!--check if index is alterable --> <xsl:call-template name="checkAlterable"> <xsl:with-param name="ParentNode" select="."/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <!--check INDEX_ATTRIBUTES --> <xsl:call-template name="CheckIndexAttr"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="AttribNode" select="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES"/> </xsl:call-template> <!--check INVISIBLE attribute --> <xsl:if test="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:INVISIBLE/@src"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:call-template name="IndexVisibility"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="InvisibleNode" select="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:INVISIBLE"/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <xsl:call-template name="IndexVisibility"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="InvisibleNode" select="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:INVISIBLE"/> <xsl:with-param name="Action">SQL</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:if> <!--check KEYCOMPRESSION --> <xsl:if test="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:KEYCOMPRESS/@src or sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:KEYCOMPRESS/@value"> <xsl:choose> <xsl:when test="sxml:TABLE_INDEX/sxml:GLOBAL_PARTITIONING"> <!-- Can not alter compression on partitioned indexes --> <xsl:call-template name="CommonNotAlterable"> <xsl:with-param name="NameParent" select="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:KEYCOMPRESS"/> <xsl:with-param name="Reason">KEY COMPRESSION</xsl:with-param> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:call-template name="CommonNotAlterable"> <xsl:with-param name="NameParent" select="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:KEYCOMPRESS"/> <xsl:with-param name="Reason">KEY COMPRESSION</xsl:with-param> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:if> <!--check PARALLEL_DEGREE --> <xsl:if test="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:PARALLEL/@src or sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:PARALLEL_DEGREE/@src or sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:PARALLEL_DEGREE/sxml:DEGREE/@value1 or sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:PARALLEL_DEGREE/sxml:INSTANCES/@value1"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:call-template name="IndexParallel"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="ParallelNode" select="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:PARALLEL | sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:PARALLEL_DEGREE"/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <xsl:call-template name="IndexParallel"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="ParallelNode" select="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:PARALLEL | sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:PARALLEL_DEGREE"/> <xsl:with-param name="Action">SQL</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:if> <xsl:if test="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:LOGGING/@value1 or sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:LOGGING/@src"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:call-template name="IndexLogging"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="LoggingNode" select="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:LOGGING"/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <xsl:call-template name="IndexLogging"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="LoggingNode" select="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:LOGGING"/> <xsl:with-param name="Action">SQL</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:if> <xsl:if test="sxml:TABLE_INDEX/sxml:UNUSABLE/@src"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:call-template name="AlterIndUsable"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="UsableNode" select="sxml:TABLE_INDEX/sxml:UNUSABLE"/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <xsl:call-template name="AlterIndUsable"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="UsableNode" select="sxml:TABLE_INDEX/sxml:UNUSABLE"/> <xsl:with-param name="Action">SQL</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:if> <xsl:if test="sxml:TABLE_INDEX/sxml:MONITORING_USAGE/@src"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:call-template name="AlterIndMonitor"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="MonitorNode" select="sxml:TABLE_INDEX/sxml:MONITORING_USAGE"/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <xsl:call-template name="AlterIndMonitor"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="MonitorNode" select="sxml:TABLE_INDEX/sxml:MONITORING_USAGE"/> <xsl:with-param name="Action">SQL</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:if> <xsl:if test="sxml:TABLE_INDEX/sxml:LOCAL_PARTITIONING//@src or sxml:TABLE_INDEX/sxml:LOCAL_PARTITIONING//@value1"> <xsl:call-template name="AlterLocalPart"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="PartList" select="sxml:TABLE_INDEX/sxml:LOCAL_PARTITIONING/sxml:PARTITION_LIST"/> </xsl:call-template> </xsl:if> <xsl:if test="sxml:TABLE_INDEX/sxml:GLOBAL_PARTITIONING//@src or sxml:TABLE_INDEX/sxml:GLOBAL_PARTITIONING//@value1"> <xsl:if test="sxml:TABLE_INDEX/sxml:GLOBAL_PARTITIONING/sxml:HASH_PARTITIONING"> <xsl:call-template name="AlterGlobalPart"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="PartList" select="sxml:TABLE_INDEX/sxml:GLOBAL_PARTITIONING/sxml:HASH_PARTITIONING"/> <xsl:with-param name="PartType">HASH</xsl:with-param> </xsl:call-template> </xsl:if> <xsl:if test="sxml:TABLE_INDEX/sxml:GLOBAL_PARTITIONING/sxml:RANGE_PARTITIONING"> <xsl:call-template name="AlterGlobalPart"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="PartList" select="sxml:TABLE_INDEX/sxml:GLOBAL_PARTITIONING/sxml:RANGE_PARTITIONING"/> <xsl:with-param name="PartType">RANGE</xsl:with-param> </xsl:call-template> </xsl:if> </xsl:if> <!-- Index name rename (the last thing we do) --> <xsl:call-template name="RenIndex"> <xsl:with-param name="ParentNode" select="."/> </xsl:call-template> </xsl:element> </xsl:element> </xsl:template> <xsl:template name="checkAlterable"> <xsl:param name="ParentNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: checkAlterable - Detects certain non-alterable cases 1. type diffs (e.g., UNIQUE_INDEX, BITMAP_INDEX) 2. COL_LIST diffs 3. index are on different tables Parameters: ParentNode - Parent node of SCHEMA, NAME Action = "PARSE" or "SQL" ******************************************************************** --> <xsl:if test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <!-- Check for "UNIQUE" difference --> <xsl:if test="sxml:UNIQUE/@src or sxml:BITMAP/@src or sxml:BITMAP_JOIN_INDEX/@src or sxml:CLUSTER_INDEX/@src or sxml:TABLE_INDEX/@src"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/> <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param> <xsl:with-param name="Value1">INCOMPATIBLE_INDEX</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:element> </xsl:if> <!-- Check for COL_LIST difference --> <xsl:for-each select="sxml:TABLE_INDEX/sxml:COL_LIST/sxml:COL_LIST_ITEM"> <xsl:if test="./@src or sxml:NAME/@value1"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/> <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param> <xsl:with-param name="Value1">COLUMNS</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:element> </xsl:if> </xsl:for-each> <!-- Check for ON_TABLE difference --> <xsl:if test="sxml:TABLE_INDEX/sxml:ON_TABLE/sxml:NAME/@value1"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/> <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param> <xsl:with-param name="Value1">ON_TABLE</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:element> </xsl:if> </xsl:if> </xsl:template> <xsl:template name="IndexVisibility"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="InvisibleNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: IndexVisibility- (1) Parameters: IndexNode InvisibleNode - Action = "PARSE" or "SQL" ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <!-- Check for "LOGGIN" difference --> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:choose> <xsl:when test="$InvisibleNode/@src='1'"> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">VISIBLE</xsl:with-param> </xsl:call-template> </xsl:when> <xsl:when test="$InvisibleNode/@src='2'"> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">INVISIBLE</xsl:with-param> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:choose> <xsl:when test="$InvisibleNode/@src='1'"> <xsl:text> VISIBLE </xsl:text> </xsl:when> <xsl:when test="$InvisibleNode/@src='2'"> <xsl:text> INVISIBLE </xsl:text> </xsl:when> </xsl:choose> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="IndexParallel"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="ParallelNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: IndexParallel - (1) Parameters: ParentNode - Parent node (i.e., PARALLEL_DEGREE> Action = "PARSE" or "SQL" ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <!-- Check for "PARALLEL" difference --> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:choose> <xsl:when test="$ParallelNode/@src='2'"> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">ADD_PARALLEL</xsl:with-param> </xsl:call-template> </xsl:when> <xsl:when test="$ParallelNode/@src='1'"> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">REMOVE_PARALLEL</xsl:with-param> </xsl:call-template> </xsl:when> <xsl:when test="$ParallelNode/sxml:DEGREE/@value1"> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">MODIFY_PARALLEL</xsl:with-param> </xsl:call-template> </xsl:when> <xsl:when test="$ParallelNode/sxml:INSTANCES/@value1"> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/> <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param> <xsl:with-param name="Value1">PARALLEL_INSTANCES</xsl:with-param> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:variable name="ParallelValue"> <xsl:choose> <xsl:when test="$ParallelNode/sxml:DEGREE"> <xsl:value-of select="$ParallelNode/sxml:DEGREE"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$ParallelNode"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:choose> <xsl:when test="$ParallelNode/@src='2' or $ParallelNode/@value1 or $ParallelNode/sxml:DEGREE/@src='2' or $ParallelNode/sxml:DEGREE/@value1"> <xsl:text> PARALLEL </xsl:text> <xsl:if test="not($ParallelValue='AUTOMATIC')"> <xsl:value-of select="$ParallelValue"/> </xsl:if> </xsl:when> <xsl:when test="$ParallelNode/@src='1'"> <xsl:text> NOPARALLEL</xsl:text> </xsl:when> </xsl:choose> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="IndexLogging"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="LoggingNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: IndexLogging- If this template is called there IS some kind of LOGGING diff. Parameters: IndexNode LoggingNode - Action = "PARSE" or "SQL" ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <!-- Check for "LOGGING" difference --> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:choose> <xsl:when test="$LoggingNode/@value1='N' or ($LoggingNode/@src='1' and $LoggingNode ='N') or ($LoggingNode/@src='2' and $LoggingNode ='Y')"> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">ADD_LOGGING</xsl:with-param> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">DISABLE_LOGGING</xsl:with-param> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:choose> <xsl:when test="$LoggingNode/@value1='N' or ($LoggingNode/@src='1' and $LoggingNode ='N') or ($LoggingNode/@src='2' and $LoggingNode ='Y')"> <xsl:text> LOGGING </xsl:text> </xsl:when> <xsl:otherwise> <xsl:text> NOLOGGING </xsl:text> </xsl:otherwise> </xsl:choose> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="AlterIndUsable"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="PartNode" select="''"/> <xsl:param name="UsableNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: AlterIndUsable Parameters: IndexNode PartNode - partition node UsableNode - Action = "PARSE" or "SQL" ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <!-- Check for "LOGGIN" difference --> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="$UsableNode"/> </xsl:call-template> <xsl:choose> <xsl:when test="$UsableNode/@src='1'"> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">USABLE</xsl:with-param> </xsl:call-template> </xsl:when> <xsl:when test="$UsableNode/@src='2'"> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">UNUSABLE</xsl:with-param> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <!-- Non-regular SQL syntax: ALTER INDEX ind [ MODIFY [SUB]PARTITION p ] UNUSABLE ALTER INDEX ind REBUILD [[SUB]PARTITION p ] --> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:choose> <xsl:when test="$UsableNode/@src='1'"> <xsl:text> REBUILD </xsl:text> <xsl:if test="string-length($PartNode)!=0"> <xsl:choose> <xsl:when test="local-name($PartNode)='PARTITION_LIST_ITEM'">PARTITION "</xsl:when> <xsl:when test="local-name($PartNode)='SUBPARTITION_LIST_ITEM'">SUBPARTITION "</xsl:when> </xsl:choose> <xsl:value-of select="$PartNode/sxml:NAME"/> <xsl:text>"</xsl:text> </xsl:if> </xsl:when> <xsl:when test="$UsableNode/@src='2'"> <xsl:if test="string-length($PartNode)!=0"> <xsl:choose> <xsl:when test="local-name($PartNode)='PARTITION_LIST_ITEM'"> MODIFY PARTITION "</xsl:when> <xsl:when test="local-name($PartNode)='SUBPARTITION_LIST_ITEM'"> MODIFY SUBPARTITION "</xsl:when> </xsl:choose> <xsl:value-of select="$PartNode/sxml:NAME"/> <xsl:text>"</xsl:text> </xsl:if> <xsl:text> UNUSABLE </xsl:text> </xsl:when> </xsl:choose> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="AlterIndMonitor"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="MonitorNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: AlterIndMonitoring- (1) Parameters: IndexNode MonitorNode - Action = "PARSE" or "SQL" ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <!-- Check for "LOGGIN" difference --> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="$MonitorNode"/> </xsl:call-template> <xsl:choose> <xsl:when test="$MonitorNode/@src='1'"> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">NOMONITORING USAGE</xsl:with-param> </xsl:call-template> </xsl:when> <xsl:when test="$MonitorNode/@src='2'"> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">MONITORING USAGE</xsl:with-param> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:choose> <xsl:when test="$MonitorNode/@src='1'"> <xsl:text> NOMONITORING USAGE </xsl:text> </xsl:when> <xsl:when test="$MonitorNode/@src='2'"> <xsl:text> MONITORING USAGE </xsl:text> </xsl:when> </xsl:choose> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="RenIndex"> <xsl:param name="ParentNode" select="''"/> <!-- ******************************************************************* Template: RenIndex Parameters: ParentNode - Parent node of SCHEMA, NAME ******************************************************************** --> <xsl:if test="$ParentNode/sxml:NAME[@value1]"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:if test="$PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_COLUMN_ATTRIBUTE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="$ParentNode"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="$ParentNode/sxml:NAME/@value1"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">RENAME_INDEX</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:if> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$ParentNode"/> </xsl:call-template> <xsl:text> RENAME TO </xsl:text> <xsl:call-template name="QuotedName"> <xsl:with-param name="NameNode" select="sxml:NAME"/> </xsl:call-template> </xsl:element> </xsl:element> </xsl:element> </xsl:element> </xsl:if> </xsl:template> <xsl:template name="CheckIndexAttr"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="AttribNode" select="''"/> <!-- ******************************************************************* Template: CheckIndexAttr Parameters: IndexNode AttribNode ******************************************************************** --> <xsl:if test=" $AttribNode/sxml:PCTUSED/@value1 or $AttribNode/sxml:INITRANS/@value1 or $AttribNode/sxml:STORAGE/sxml:INITIAL/@value1 or $AttribNode/sxml:STORAGE/sxml:NEXT/@value1 or $AttribNode/sxml:STORAGE/sxml:MINEXTENTS/@value1 or $AttribNode/sxml:STORAGE/sxml:MAXEXTENTS/@value1 or $AttribNode/sxml:STORAGE/sxml:PCTINCREASE/@value1 or $AttribNode/sxml:STORAGE/sxml:FREE_LISTS/@value1 or $AttribNode/sxml:STORAGE/sxml:FREE_LIST_GROUPS/@value1 or $AttribNode/sxml:STORAGE/sxml:BUFFER_POOL/@value1 or $AttribNode/sxml:STORAGE/sxml:FLASH_CACHE/@value1 or $AttribNode/sxml:STORAGE/sxml:CELL_FLASH_CACHE/@value1"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:call-template name="AlterIndexAttr"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="AttribNode" select="$AttribNode"/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <!-- No SQL action for INITIAL or FREE_LIST_GROUPS because they result in ORA-2170 errors --> <xsl:if test=" $AttribNode/sxml:PCTUSED/@value1 or $AttribNode/sxml:INITRANS/@value1 or $AttribNode/sxml:STORAGE/sxml:NEXT/@value1 or $AttribNode/sxml:STORAGE/sxml:MINEXTENTS/@value1 or $AttribNode/sxml:STORAGE/sxml:MAXEXTENTS/@value1 or $AttribNode/sxml:STORAGE/sxml:PCTINCREASE/@value1 or $AttribNode/sxml:STORAGE/sxml:FREE_LISTS/@value1 or $AttribNode/sxml:STORAGE/sxml:BUFFER_POOL/@value1 or $AttribNode/sxml:STORAGE/sxml:FLASH_CACHE/@value1 or $AttribNode/sxml:STORAGE/sxml:CELL_FLASH_CACHE/@value1"> <xsl:call-template name="AlterIndexAttr"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="AttribNode" select="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES"/> <xsl:with-param name="Action">SQL</xsl:with-param> </xsl:call-template> </xsl:if> </xsl:element> </xsl:if> <!-- default index attributes (tablespace and pctfree) are also part of INDEX_ATTRIBUTES but are handled a little differently --> <xsl:if test="$AttribNode/sxml:TABLESPACE/@value1"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:choose> <xsl:when test="$IndexNode/sxml:TABLE_INDEX/sxml:GLOBAL_PARTITIONING or $IndexNode/sxml:LOCAL_PARTITIONING"> <xsl:call-template name="AlterIndDefAttr"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="AttribNode" select="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES"/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <xsl:call-template name="AlterIndDefAttr"> <xsl:with-param name="IndexNode" select="."/> <xsl:with-param name="AttribNode" select="sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES"/> <xsl:with-param name="Action">SQL</xsl:with-param> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:if test="($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/> <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param> <xsl:with-param name="Value1">INDEX_NOT_PARTITIONED</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:if> </xsl:otherwise> </xsl:choose> </xsl:element> </xsl:if> </xsl:template> <xsl:template name="AlterIndexAttr"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="AttribNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: AlterIndexAttr - modify the index attributes: PCTFREE PCTUSED INITRANS storage_clause Parameters: IndexNode AttribNode Action - PARSE or SQL ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_COLUMN_ATTRIBUTE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="$IndexNode"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">INDEX_ATTRIBUTES</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:call-template name="AlterPhysicalAttributes"> <xsl:with-param name="ParentNode" select="$AttribNode"/> <xsl:with-param name="TypeNode">MODIFY</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="AlterIndDefAttr"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="AttribNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: AlterIndDefAttr - modify the index default attributes: TABLESPACE and PCTFREE Parameters: IndexNode AttribNode Action - PARSE or SQL ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_COLUMN_ATTRIBUTE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="$IndexNode"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">INDEX_TABLESPACE</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:text> MODIFY DEFAULT ATTRIBUTES </xsl:text> <xsl:if test="$AttribNode/sxml:PCTFREE/@value1"> <xsl:text> PCTFREE </xsl:text> <xsl:value-of select="$AttribNode/sxml:PCTFREE"/> </xsl:if> <xsl:if test="$AttribNode/sxml:TABLESPACE/@value1"> <xsl:text> TABLESPACE </xsl:text> <xsl:value-of select="$AttribNode/sxml:TABLESPACE"/> </xsl:if> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="DropGlobalPart"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="PartNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: DropGlobalPart Parameters: IndexNode PartNode <PARTITION_LIST_ITEM> Action PARSE or SQL ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="$PartNode"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">DROP_GLOBAL_PARTITION </xsl:with-param> </xsl:call-template> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:text> DROP PARTITION </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$PartNode"/> </xsl:call-template> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="AlterLocalPart"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="PartList" select="''"/> <!-- ******************************************************************* Template: AlterLocalPart - only allowable modification is REBUILD or MODIFY UNUSABLE Parameters: IndexNode PartList <PARTITION_LIST> ******************************************************************** --> <xsl:for-each select="$PartList/sxml:PARTITION_LIST_ITEM"> <xsl:call-template name="DoAlterLocalPart"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="PartListItem" select="."/> </xsl:call-template> <xsl:for-each select="./sxml:SUBPARTITION_LIST/sxml:SUBPARTITION_LIST_ITEM"> <xsl:call-template name="DoAlterLocalPart"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="PartListItem" select="."/> </xsl:call-template> </xsl:for-each> </xsl:for-each> </xsl:template> <xsl:template name="DoAlterLocalPart"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="PartListItem" select="''"/> <!-- ******************************************************************* Template: DoAlterLocalPart - only allowable modification is REBUILD or MODIFY UNUSABLE Parameters: IndexNode PartListItem <PARTITION_LIST_ITEM> or <SUBPARTITION_LIST_ITEM> ******************************************************************** --> <xsl:choose> <xsl:when test="$PartListItem/@src='1'"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="$PartListItem/sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/> <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param> <xsl:with-param name="Value1"> <xsl:choose> <xsl:when test="local-name($PartListItem)='PARTITION_LIST_ITEM'">DROP_LOCAL_PARTITION</xsl:when> <xsl:when test="local-name($PartListItem)='SUBPARTITION_LIST_ITEM'">DROP_LOCAL_SUBPARTITION</xsl:when> </xsl:choose> </xsl:with-param> </xsl:call-template> </xsl:element> </xsl:element> </xsl:when> <xsl:when test="$PartListItem/@src='2'"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="$PartListItem/sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/> <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param> <xsl:with-param name="Value1"> <xsl:choose> <xsl:when test="local-name($PartListItem)='PARTITION_LIST_ITEM'">ADD_LOCAL_PARTITION</xsl:when> <xsl:when test="local-name($PartListItem)='SUBPARTITION_LIST_ITEM'">ADD_LOCAL_SUBPARTITION</xsl:when> </xsl:choose> </xsl:with-param> </xsl:call-template> </xsl:element> </xsl:element> </xsl:when> <xsl:otherwise> <xsl:if test="$PartListItem/sxml:UNUSABLE/@src"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:call-template name="AlterIndUsable"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="PartNode" select="$PartListItem"/> <xsl:with-param name="UsableNode" select="$PartListItem/sxml:UNUSABLE"/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <xsl:call-template name="AlterIndUsable"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="PartNode" select="$PartListItem"/> <xsl:with-param name="UsableNode" select="$PartListItem/sxml:UNUSABLE"/> <xsl:with-param name="Action">SQL</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:if> <xsl:if test="$PartListItem//@value1"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/> <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param> <xsl:with-param name="Value1"> <xsl:choose> <xsl:when test="local-name($PartListItem)='PARTITION_LIST_ITEM'">MODIFY_LOCAL_PARTITION</xsl:when> <xsl:when test="local-name($PartListItem)='SUBPARTITION_LIST_ITEM'">MODIFY_LOCAL_SUBPARTITION</xsl:when> </xsl:choose> </xsl:with-param> </xsl:call-template> </xsl:element> </xsl:element> </xsl:if> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="AlterGlobalPart"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="PartList" select="''"/> <xsl:param name="PartType" select="''"/> <!-- ******************************************************************* Template: AlterGlobalPart - Parameters: IndexNode PartList - <RANGE_PARTITIONING> or <HASH_PARTITIONING> PartType - RANGE or HASH ******************************************************************** --> <xsl:for-each select="$PartList/sxml:PARTITION_LIST/sxml:PARTITION_LIST_ITEM"> <xsl:choose> <xsl:when test="./@src='1'"> <!-- drops are identical from HASH and RANGE partitions --> <xsl:call-template name="CommonNotAlterable"> <xsl:with-param name="NameParent" select="."/> <xsl:with-param name="Reason">DROP_GLOBAL_PARTITION</xsl:with-param> </xsl:call-template> </xsl:when> <xsl:when test="./@src='2'"> <xsl:if test="$PartType = 'HASH'"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:call-template name="AddGlobalHashPart"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="PartType" select="$PartList"/> <xsl:with-param name="PartNode" select="."/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <xsl:call-template name="AddGlobalHashPart"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="PartType" select="$PartList"/> <xsl:with-param name="PartNode" select="."/> <xsl:with-param name="Action">SQL</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:if> <xsl:if test="$PartType = 'RANGE'"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:call-template name="AddGlobalRangePart"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="PartNode" select="."/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <xsl:call-template name="AddGlobalRangePart"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="PartNode" select="."/> <xsl:with-param name="Action">SQL</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:if> </xsl:when> <xsl:otherwise> <!-- If not an ADD nor a DROP than something was modify within this existing partition --> <!-- Diffs in Partition Names are NOT alterable --> <xsl:if test="./sxml:NAME//@value1"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="./sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/> <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param> <xsl:with-param name="Value1">MODIFY_PARTITION</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:element> </xsl:if> <!-- If appropriate process SEGMENT_ATTRIBUTES differences --> <xsl:if test="./sxml:SEGMENT_ATTRIBUTES//@value1"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:call-template name="RebuildSegAttr"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="PartNode" select="."/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <xsl:call-template name="RebuildSegAttr"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="PartNode" select="."/> <xsl:with-param name="Action">SQL</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:if> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> <xsl:template name="AddGlobalHashPart"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="PartType" select="''"/> <xsl:param name="PartNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: AddGlobalHashPart Parameters: IndexNode PartNode <PARTITION_LIST_ITEM> Action PARSE or SQL ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="$PartNode"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">ADD_GLOBAL_PARTITION </xsl:with-param> </xsl:call-template> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:text> ADD PARTITION </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$PartNode"/> </xsl:call-template> <xsl:text> TABLESPACE </xsl:text> <xsl:value-of select="sxml:TABLESPACE"/> <xsl:if test="$PartNode/sxml:PARALLEL"> <xsl:text> PARALLEL </xsl:text> <xsl:value-of select="$PartNode/sxml:PARALLEL"/> </xsl:if> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="AddGlobalRangePart"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="PartNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: AddGlobalRangePart - Parameters: IndexNode PartNode Action - PARSE or SQL ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">ADD_GLOBAL_PARTITION </xsl:with-param> </xsl:call-template> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:text> SPLIT PARTITION </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="."/> </xsl:call-template> <xsl:text> AT (</xsl:text> <xsl:value-of select="./sxml:VALUES"/> <xsl:text> )</xsl:text> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="AlterSegAttr"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="PartNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: AlterSegAttr Parameters: IndexNode PartNode <PARTITION_LIST_ITEM> Action PARSE or SQL ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="$PartNode"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">MODIFY_SEGMENT_ATTRS</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:text> MODIFY DEFAULT ATTRIBUTES FOR PARTITION </xsl:text> <xsl:value-of select="$PartNode/sxml:NAME"/> <xsl:text> </xsl:text> <xsl:if test="./sxml:SEGMENT_ATTRIBUTES/sxml:TABLESPACE/@value1"> <xsl:text> TABLESPACE </xsl:text> <xsl:value-of select="./sxml:SEGMENT_ATTRIBUTES/sxml:TABLESPACE"/> </xsl:if> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="RebuildSegAttr"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="PartNode" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: RebuildSegAttr Description: this is called from AlterGlobalPartition - there are attributes which are not allowed for partitioned indexes (e.g. REVERSE) and therefore are not processed in the template. Parameters: IndexNode PartNode <PARTITION_LIST_ITEM> Action PARSE or SQL ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="$PartNode"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">REBUILD_SEGMENT_ATTRS</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:text> REBUILD PARTITION </xsl:text> <xsl:call-template name="QuotedName"> <xsl:with-param name="NameNode" select="$PartNode/sxml:NAME"/> </xsl:call-template> <xsl:if test="./sxml:SEGMENT_ATTRIBUTES/sxml:TABLESPACE/@value1"> <xsl:text> TABLESPACE </xsl:text> <xsl:call-template name="QuotedName"> <xsl:with-param name="NameNode" select="./sxml:SEGMENT_ATTRIBUTES/sxml:TABLESPACE"/> </xsl:call-template> </xsl:if> <!-- process ATTRIBUTES and STORAGE diffs if appropriate --> <xsl:if test="./sxml:SEGMENT_ATTRIBUTES//@value1"> <xsl:call-template name="AlterPhysicalAttributes"> <xsl:with-param name="ParentNode" select="./sxml:SEGMENT_ATTRIBUTES"/> <xsl:with-param name="TypeNode">MODIFY</xsl:with-param> </xsl:call-template> </xsl:if> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="RenameIndexPartition"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="PartNode" select="''"/> <xsl:param name="RenType" select="''"/> <xsl:param name="Action" select="''"/> <!-- ******************************************************************* Template: RenameIndexPartition Rename index partition or subpartition Parameters: IndexNode PartNode <PARTITION> node RenType - PARTITION or SUBPARTITION Action PARSE or SQL ******************************************************************** --> <xsl:choose> <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or $PRS_CLAUSE_TYPE=1 or $PRS_ALTERABLE=1 or $PRS_XPATH=1)"> <!-- Check for "LOGGING" difference --> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="."/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="$PartNode/sxml:NAME/@value1"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/> <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param> <xsl:with-param name="Value1">RENAME_PARTITION</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:when> <xsl:when test="$Action='SQL'"> <xsl:element name="SQL_LIST"> <xsl:element name="SQL_LIST_ITEM"> <xsl:element name="TEXT"> <xsl:text>ALTER INDEX </xsl:text> <xsl:call-template name="SchemaName"> <xsl:with-param name="ParentNode" select="$IndexNode"/> </xsl:call-template> <xsl:text> RENAME</xsl:text> <xsl:if test="$RenType = 'SUBPARTITION'"> <xsl:text> SUB</xsl:text> </xsl:if> <xsl:text> PARTITION </xsl:text> <xsl:value-of select="$PartNode/sxml:NAME/@value1"/> <xsl:text> TO </xsl:text> <xsl:value-of select="$PartNode/sxml:NAME"/> <xsl:if test="$IndexNode/sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:PARALLEL"> <xsl:text> PARALLEL </xsl:text> <xsl:value-of select="$IndexNode/sxml:TABLE_INDEX/sxml:INDEX_ATTRIBUTES/sxml:PARALLEL"/> </xsl:if> </xsl:element> </xsl:element> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> <xsl:template name="ModifyIndexPartition"> <xsl:param name="IndexNode" select="''"/> <xsl:param name="PartNode" select="''"/> <!-- ******************************************************************* Template: ModifyIndexPartition Parameters: IndexNode PartNode <PARTITION> node ******************************************************************** --> <xsl:if test="$PartNode/sxml:SEGMENT_ATTRIBUTES//@value1"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:call-template name="AlterSegAttr"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="PartNode" select="$PartNode"/> <xsl:with-param name="Action">PARSE</xsl:with-param> </xsl:call-template> <xsl:call-template name="AlterSegAttr"> <xsl:with-param name="IndexNode" select="$IndexNode"/> <xsl:with-param name="PartNode" select="$PartNode"/> <xsl:with-param name="Action">SQL</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:if> <xsl:if test="$PartNode/sxml:NAME//@value1"> <xsl:element name="ALTER_LIST_ITEM"> <xsl:element name="PARSE_LIST"> <xsl:call-template name="AddXPathParseItem"> <xsl:with-param name="Node" select="$PartNode"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_NAME"/> <xsl:with-param name="Item">NAME</xsl:with-param> <xsl:with-param name="Value1" select="$PartNode/sxml:NAME"/> </xsl:call-template> <xsl:call-template name="AddParseItem"> <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/> <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param> <xsl:with-param name="Value1">MODIFY_PARTITION</xsl:with-param> </xsl:call-template> </xsl:element> </xsl:element> </xsl:if> </xsl:template> </xsl:stylesheet>
Ms-Dos/Windows
Unix
Write backup
jsp File Browser version 1.2 by
www.vonloesch.de