[teiid-commits] teiid SVN: r3138 - in trunk: build/kits/jboss-container/deployers/teiid.deployer and 9 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Tue May 3 12:21:09 EDT 2011


Author: shawkins
Date: 2011-05-03 12:21:08 -0400 (Tue, 03 May 2011)
New Revision: 3138

Added:
   trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml
Modified:
   trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java
   trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml
   trunk/documentation/caching-guide/src/main/docbook/en-US/content/results.xml
   trunk/documentation/client-developers-guide/src/main/docbook/en-US/content/prepared-statements.xml
   trunk/documentation/developer-guide/src/main/docbook/en-US/Developer_Guide.xml
   trunk/documentation/docbook/custom.dtd
   trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml
   trunk/documentation/reference/src/main/docbook/en-US/content/system_schema.xml
   trunk/documentation/reference/src/main/docbook/en-US/content/translators.xml
   trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
   trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java
   trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
Log:
TEIID-1326 refining runtime update logic and rounding out the docs

Modified: trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java	2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java	2011-05-03 16:21:08 UTC (rev 3138)
@@ -29,6 +29,20 @@
 public interface MetadataRepository {
 	
 	/**
+	 * Marks the start of vdb metadata loading
+	 * @param vdbName
+	 * @param vdbVersion
+	 */
+	void startLoadVdb(String vdbName, int vdbVersion);
+	
+	/**
+	 * Marks the end of vdb metadata loading
+	 * @param vdbName
+	 * @param vdbVersion
+	 */
+	void endLoadVdb(String vdbName, int vdbVersion);
+	
+	/**
 	 * Returns an updated view definition (AS SQL only) or null if the current view definition should be used
 	 * should be used.
 	 */
@@ -67,7 +81,7 @@
 	 * @param triggerOperation
 	 * @return
 	 */
-	boolean isInsteadOfTriggerEnabled(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation);
+	Boolean isInsteadOfTriggerEnabled(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation);
 	
 	/**
 	 * Set the given trigger enabled.

Modified: trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml
===================================================================
--- trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml	2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml	2011-05-03 16:21:08 UTC (rev 3138)
@@ -11,6 +11,10 @@
         
     <bean name="VDBRepository" class="org.teiid.deployers.VDBRepository">
         <property name="systemFunctionManager"><inject bean="SystemFunctionManager"/></property>
+        <!-- 
+          Optionally set a org.teiid.metadata.MetadataRepository for persistent metadata updates
+        -->
+        <!-- <property name="metadataRepository"><inject bean="MetadataRepository"/></property> -->
     </bean>
     
     <bean name="SecurityHelper" class="org.teiid.jboss.JBossSecurityHelper"/>    

Modified: trunk/documentation/caching-guide/src/main/docbook/en-US/content/results.xml
===================================================================
--- trunk/documentation/caching-guide/src/main/docbook/en-US/content/results.xml	2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/caching-guide/src/main/docbook/en-US/content/results.xml	2011-05-03 16:21:08 UTC (rev 3138)
@@ -99,6 +99,8 @@
 		</para>
 		<note><para>While the result data is not held in memory, cache keys - including parameter values - may be held in memory.  
 		Thus the cache should not be given an unlimited maximum size.</para></note>
+		<para>Result set cache entries can be invalidated by data change events.  The maxStaleness setting determines how long an entry will remain 
+		in the case after one of the tables that contributed to the results has been changed.  See the Developers Guide for further customization.</para>
 	</section>
 	<section>
 		<title>Cache Administration</title>

Modified: trunk/documentation/client-developers-guide/src/main/docbook/en-US/content/prepared-statements.xml
===================================================================
--- trunk/documentation/client-developers-guide/src/main/docbook/en-US/content/prepared-statements.xml	2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/client-developers-guide/src/main/docbook/en-US/content/prepared-statements.xml	2011-05-03 16:21:08 UTC (rev 3138)
@@ -25,9 +25,6 @@
     		<para>Plans are cached for the entire VDB or for just a particular session.  The scope of a plan is detected automatically based upon the functions evaluated during it's planning process.</para>
     	</listitem>
     	<listitem>
-    		<para>Runtime updates of costing information do not yet cause replanning.  At this time only session scoped temporary table or internally materialized tables update their costing information.</para>
-    	</listitem>
-    	<listitem>
     		<para>Stored procedures executed through a <code>CallableStatement</code> have their plans cached just as a <code>PreparedStatement</code>.</para>
     	</listitem>
     	<listitem>

Modified: trunk/documentation/developer-guide/src/main/docbook/en-US/Developer_Guide.xml
===================================================================
--- trunk/documentation/developer-guide/src/main/docbook/en-US/Developer_Guide.xml	2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/developer-guide/src/main/docbook/en-US/Developer_Guide.xml	2011-05-03 16:21:08 UTC (rev 3138)
@@ -15,9 +15,8 @@
     <xi:include href="content/adminapi.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
     <xi:include href="content/logging.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
     <xi:include href="content/security.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="content/runtime-updates.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
     <xi:include href="content/appendix-a.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
     <xi:include href="content/appendix-b.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-   
-   
 </book>
 

Added: trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml
===================================================================
--- trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml	                        (rev 0)
+++ trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml	2011-05-03 16:21:08 UTC (rev 3138)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % CustomDTD SYSTEM "../../../../../../docbook/custom.dtd">
+%CustomDTD;
+]>
+<chapter id="runtime-updates">
+	<title>Runtime Updates</title>
+	<para>Teiid supports several mechanisms for updating the runtime system.</para>
+	<section>
+		<title>Data Updates</title>
+		<para>Data change events are used by Teiid to invalidate result set cache entries.  Result set cache entires are tracked by the tables that contributed to their results.  
+		By default Teiid will capture internal data events against physical sources and distribute them across the cluster.
+		This approach has several limitations.  First updates are scoped only to their originating VDB/version.  Second updates made out side of Teiid are not captured.  
+		To increase data consistency external change data capture tools can be used to send events to Teiid.  From within a Teiid cluster the <code>org.teiid.events.EventDistributorFactory</code> 
+		and <code>org.teiid.events.EventDistributor</code> can be used to distribute change events.  The <code>EventDistributorFactory</code> is implemented by the 
+		<code>RuntimeEngineDeployer</code> bean and should be looked up by its name "teiid/engine-deployer". See the example below.</para>
+		<example>
+			<title>Usage of the <code>EventDistributor</code></title>
+					<programlisting language="java">InitialContext ctx = new InitialContext();
+EventDistributorFactory edf = (EventDistributorFactory)ctx.lookup("teiid/engine-deployer");
+EventDistributor ed = edf.getEventDistributor();
+ed.dataModification(vdbName, vdbVersion, schema, tableName);</programlisting>
+			<para>This will distribute a change event for schema.tableName in vdb vdbName.vdbVersion.</para>
+		</example>
+		<para>The use of the other <code>EventDistributor</code> methods to manual distribute other events is not recommended.</para>
+	</section>
+	<section>
+		<title>Runtime Metadata Updates</title>
+		<para>Runtime updates via system procedures and DDL statements are by default ephemeral.  They are effective across the cluster only for the currently running vdbs.  
+		With the next vdb start the values will revert to whatever is stored in the vdb.  Updates may be made persistent though by configuring a <code>org.teiid.metadata.MetadataRepository</code>.  
+		An instance of a <code>MetadataRepository</code> can be installed via the &teiid-deployer-beans; file in the <code>VDBRepository</code> bean. 
+		The <code>MetadataRepository</code> repository instance may fully implement as many of the methods as needed and return null from any unneeded getter.</para>
+		<note><para>It is not recommended to directly manipulate <code>org.teiid.metadata.AbstractMetadataRecord</code> instances.  
+		System procedures and DDL statements should be used instead since the effects will be distributed through the cluster and will not introduce inconsistencies.</para></note>
+		<para><code>org.teiid.metadata.AbstractMetadataRecord</code> objects passed to the <code>MetadataRepository</code> have not yet been modified.  
+		If the <code>MetadataRepository</code> cannot persist the update, then a <code>RuntimeException</code> should be thrown to prevent the update from being applied by the runtime engine.</para>
+		<section>
+			<title>Costing Updates</title>
+			<para>See the Reference for the system procedures <code>SYSADMIN.setColumnStats</code> and <code>SYSADMIN.setTableStats</code>.  
+			To make costing updates persistent <code>MetadataRepository</code> implementations should be provided for:
+			<programlisting language="java">TableStats getTableStats(String vdbName, int vdbVersion, Table table);
+void setTableStats(String vdbName, int vdbVersion, Table table, TableStats tableStats);
+ColumnStats getColumnStats(String vdbName, int vdbVersion, Column column);
+void setColumnStats(String vdbName, int vdbVersion, Column column, ColumnStats columnStats);</programlisting>
+			</para>
+		</section>
+		<section>
+			<title>Schema Updates</title>
+			<para>See the Reference for supported DDL statements.  To make schema updates persistent implementations should be provided for:</para>
+			<programlisting>String getViewDefinition(String vdbName, int vdbVersion, Table table);
+void setViewDefinition(String vdbName, int vdbVersion, Table table, String viewDefinition);
+String getInsteadOfTriggerDefinition(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation);
+void setInsteadOfTriggerDefinition(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation, String triggerDefinition);
+boolean isInsteadOfTriggerEnabled(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation);
+void setInsteadOfTriggerEnabled(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation, boolean enabled);
+String getProcedureDefinition(String vdbName, int vdbVersion, Procedure procedure);
+void setProcedureDefinition(String vdbName, int vdbVersion, Procedure procedure, String procedureDefinition);			
+LinkedHashMap&lt;String, String&gt; getProperties(String vdbName, int vdbVersion, AbstractMetadataRecord record);
+void setProperty(String vdbName, int vdbVersion, AbstractMetadataRecord record, String name, String value);</programlisting>
+		</section>
+	</section>
+</chapter>
\ No newline at end of file


Property changes on: trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/documentation/docbook/custom.dtd
===================================================================
--- trunk/documentation/docbook/custom.dtd	2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/docbook/custom.dtd	2011-05-03 16:21:08 UTC (rev 3138)
@@ -6,4 +6,5 @@
 <!ENTITY javaDocUrl "http://docs.jboss.org/teiid/&versionNumber;/apidocs">
 <!ENTITY desDocUrl "http://www.jboss.org/teiiddesigner/docs.html">
 <!ENTITY jboss-beans "<code>&lt;jboss-install&gt;/server/&lt;profile&gt;/deploy/teiid/teiid-jboss-beans.xml</code>">
-<!ENTITY metadata-update-note "<note><para>A <code>MetadataRepository</code> must be configured to make a non-temporary metadata update persistent. See the Developers Guide Runtime Updates section for more.</para></note>">
+<!ENTITY teiid-deployer-beans "<code>&lt;jboss-install&gt;/server/&lt;profile&gt;/deploy/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml</code>">
+<!ENTITY metadata-update-note "<note><para>A <code>MetadataRepository</code> must be configured to make a non-temporary metadata update persistent. See the Developers Guide Runtime Metadata Updates section for more.</para></note>">

Modified: trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml	2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml	2011-05-03 16:21:08 UTC (rev 3138)
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
 <appendix id="grammar">
-  <title>BNF for SQL Grammar</title>
-<section>
+  <title>BNF for SQL Grammar</title><section>
 <title>TOKENS</title>
 <informaltable frame="none">
 <tgroup cols="1">
@@ -416,449 +415,453 @@
 <row>
 <entry align="right" valign="top"><para><anchor id="prod8" xreflabel="updateProcedure"/>updateProcedure</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod4">createUpdateProcedure</link> | <link linkend="prod9">triggerAction</link> ) &lt;EOF&gt;</para></entry></row>
+( <link linkend="prod4">createUpdateProcedure</link> | <link linkend="prod9">forEachRowTriggerAction</link> ) &lt;EOF&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod10" xreflabel="alter"/>alter</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod10" xreflabel="createTrigger"/>createTrigger</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;ALTER&gt; ( ( <link linkend="prod11">nonReserved</link> <link linkend="prod2">id</link> &lt;AS&gt; <link linkend="prod12">queryExpression</link> ) | ( &lt;PROCEDURE&gt; <link linkend="prod2">id</link> &lt;AS&gt; <link linkend="prod13">block</link> ) | ( &lt;TRIGGER&gt; &lt;ON&gt; <link linkend="prod2">id</link> <link linkend="prod11">nonReserved</link> &lt;OF&gt; ( &lt;INSERT&gt; | &lt;UPDATE&gt; | &lt;DELETE&gt; ) &lt;AS&gt; <link linkend="prod9">triggerAction</link> ) )</para></entry></row>
+&lt;CREATE&gt; &lt;TRIGGER&gt; &lt;ON&gt; <link linkend="prod2">id</link> <link linkend="prod11">nonReserved</link> &lt;OF&gt; ( &lt;INSERT&gt; | &lt;UPDATE&gt; | &lt;DELETE&gt; ) &lt;AS&gt; <link linkend="prod9">forEachRowTriggerAction</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod9" xreflabel="triggerAction"/>triggerAction</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod12" xreflabel="alter"/>alter</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;FOR&gt; &lt;EACH&gt; &lt;ROW&gt; <link linkend="prod13">block</link></para></entry></row>
+&lt;ALTER&gt; ( ( <link linkend="prod11">nonReserved</link> <link linkend="prod2">id</link> &lt;AS&gt; <link linkend="prod13">queryExpression</link> ) | ( &lt;PROCEDURE&gt; <link linkend="prod2">id</link> &lt;AS&gt; <link linkend="prod14">block</link> ) | ( &lt;TRIGGER&gt; &lt;ON&gt; <link linkend="prod2">id</link> <link linkend="prod11">nonReserved</link> &lt;OF&gt; ( &lt;INSERT&gt; | &lt;UPDATE&gt; | &lt;DELETE&gt; ) ( ( &lt;AS&gt; <link linkend="prod9">forEachRowTriggerAction</link> ) | <link linkend="prod11">nonReserved</link> ) ) )</para></entry></row>
 <row>
+<entry align="right" valign="top"><para><anchor id="prod9" xreflabel="forEachRowTriggerAction"/>forEachRowTriggerAction</para></entry>
+<entry align="left" valign="top"><para>::= 
+&lt;FOR&gt; &lt;EACH&gt; &lt;ROW&gt; <link linkend="prod14">block</link></para></entry></row>
+<row>
 <entry align="right" valign="top"><para><anchor id="prod5" xreflabel="userCommand"/>userCommand</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod12">queryExpression</link> | <link linkend="prod14">storedProcedure</link> | <link linkend="prod15">insert</link> | <link linkend="prod16">update</link> | <link linkend="prod17">delete</link> | <link linkend="prod18">dropTable</link> | <link linkend="prod19">createTempTable</link> | <link linkend="prod10">alter</link> )</para></entry></row>
+( <link linkend="prod13">queryExpression</link> | <link linkend="prod15">storedProcedure</link> | <link linkend="prod16">insert</link> | <link linkend="prod17">update</link> | <link linkend="prod18">delete</link> | <link linkend="prod19">dropTable</link> | <link linkend="prod20">createTempTable</link> | <link linkend="prod12">alter</link> | <link linkend="prod10">createTrigger</link> )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod18" xreflabel="dropTable"/>dropTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod19" xreflabel="dropTable"/>dropTable</para></entry>
 <entry align="left" valign="top"><para>::= 
 &lt;DROP&gt; &lt;TABLE&gt; <link linkend="prod2">id</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod19" xreflabel="createTempTable"/>createTempTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod20" xreflabel="createTempTable"/>createTempTable</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;CREATE&gt; &lt;LOCAL&gt; &lt;TEMPORARY&gt; &lt;TABLE&gt; <link linkend="prod2">id</link> &lt;LPAREN&gt; <link linkend="prod20">tableElement</link> ( &lt;COMMA&gt; <link linkend="prod20">tableElement</link> )* ( &lt;COMMA&gt; &lt;PRIMARY&gt; <link linkend="prod11">nonReserved</link> &lt;LPAREN&gt; <link linkend="prod2">id</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> )* &lt;RPAREN&gt; )? &lt;RPAREN&gt;</para></entry></row>
+&lt;CREATE&gt; &lt;LOCAL&gt; &lt;TEMPORARY&gt; &lt;TABLE&gt; <link linkend="prod2">id</link> &lt;LPAREN&gt; <link linkend="prod21">tableElement</link> ( &lt;COMMA&gt; <link linkend="prod21">tableElement</link> )* ( &lt;COMMA&gt; &lt;PRIMARY&gt; <link linkend="prod11">nonReserved</link> &lt;LPAREN&gt; <link linkend="prod2">id</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> )* &lt;RPAREN&gt; )? &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod20" xreflabel="tableElement"/>tableElement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod21" xreflabel="tableElement"/>tableElement</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod2">id</link> ( <link linkend="prod21">dataTypeString</link> | <link linkend="prod11">nonReserved</link> ) ( &lt;NOT&gt; &lt;NULL&gt; )?</para></entry></row>
+<link linkend="prod2">id</link> ( <link linkend="prod22">dataTypeString</link> | <link linkend="prod11">nonReserved</link> ) ( &lt;NOT&gt; &lt;NULL&gt; )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod22" xreflabel="errorStatement"/>errorStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod23" xreflabel="errorStatement"/>errorStatement</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;ERROR&gt; <link linkend="prod23">expression</link></para></entry></row>
+&lt;ERROR&gt; <link linkend="prod24">expression</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod24" xreflabel="statement"/>statement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod25" xreflabel="statement"/>statement</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod25">ifStatement</link> | <link linkend="prod26">loopStatement</link> | <link linkend="prod27">whileStatement</link> | <link linkend="prod28">delimitedStatement</link> )</para></entry></row>
+( <link linkend="prod26">ifStatement</link> | <link linkend="prod27">loopStatement</link> | <link linkend="prod28">whileStatement</link> | <link linkend="prod29">delimitedStatement</link> )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod28" xreflabel="delimitedStatement"/>delimitedStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod29" xreflabel="delimitedStatement"/>delimitedStatement</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod29">assignStatement</link> | <link linkend="prod30">sqlStatement</link> | <link linkend="prod22">errorStatement</link> | <link linkend="prod31">declareStatement</link> | <link linkend="prod32">continueStatement</link> | <link linkend="prod33">breakStatement</link> ) &lt;SEMICOLON&gt;</para></entry></row>
+( <link linkend="prod30">assignStatement</link> | <link linkend="prod31">sqlStatement</link> | <link linkend="prod23">errorStatement</link> | <link linkend="prod32">declareStatement</link> | <link linkend="prod33">continueStatement</link> | <link linkend="prod34">breakStatement</link> ) &lt;SEMICOLON&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod13" xreflabel="block"/>block</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod14" xreflabel="block"/>block</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod24">statement</link> | ( &lt;BEGIN&gt; ( <link linkend="prod24">statement</link> )* &lt;END&gt; ) )</para></entry></row>
+( <link linkend="prod25">statement</link> | ( &lt;BEGIN&gt; ( <link linkend="prod25">statement</link> )* &lt;END&gt; ) )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod33" xreflabel="breakStatement"/>breakStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod34" xreflabel="breakStatement"/>breakStatement</para></entry>
 <entry align="left" valign="top"><para>::= 
 &lt;BREAK&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod32" xreflabel="continueStatement"/>continueStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod33" xreflabel="continueStatement"/>continueStatement</para></entry>
 <entry align="left" valign="top"><para>::= 
 &lt;CONTINUE&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod27" xreflabel="whileStatement"/>whileStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod28" xreflabel="whileStatement"/>whileStatement</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;WHILE&gt; &lt;LPAREN&gt; <link linkend="prod34">criteria</link> &lt;RPAREN&gt; <link linkend="prod13">block</link></para></entry></row>
+&lt;WHILE&gt; &lt;LPAREN&gt; <link linkend="prod35">criteria</link> &lt;RPAREN&gt; <link linkend="prod14">block</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod26" xreflabel="loopStatement"/>loopStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod27" xreflabel="loopStatement"/>loopStatement</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;LOOP&gt; &lt;ON&gt; &lt;LPAREN&gt; <link linkend="prod12">queryExpression</link> &lt;RPAREN&gt; &lt;AS&gt; <link linkend="prod2">id</link> <link linkend="prod13">block</link></para></entry></row>
+&lt;LOOP&gt; &lt;ON&gt; &lt;LPAREN&gt; <link linkend="prod13">queryExpression</link> &lt;RPAREN&gt; &lt;AS&gt; <link linkend="prod2">id</link> <link linkend="prod14">block</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod25" xreflabel="ifStatement"/>ifStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod26" xreflabel="ifStatement"/>ifStatement</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;IF&gt; &lt;LPAREN&gt; <link linkend="prod34">criteria</link> &lt;RPAREN&gt; <link linkend="prod13">block</link> ( &lt;ELSE&gt; <link linkend="prod13">block</link> )?</para></entry></row>
+&lt;IF&gt; &lt;LPAREN&gt; <link linkend="prod35">criteria</link> &lt;RPAREN&gt; <link linkend="prod14">block</link> ( &lt;ELSE&gt; <link linkend="prod14">block</link> )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod35" xreflabel="criteriaSelector"/>criteriaSelector</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod36" xreflabel="criteriaSelector"/>criteriaSelector</para></entry>
 <entry align="left" valign="top"><para>::= 
 ( ( &lt;EQ&gt; | &lt;NE&gt; | &lt;NE2&gt; | &lt;LE&gt; | &lt;GE&gt; | &lt;LT&gt; | &lt;GT&gt; | &lt;IN&gt; | &lt;LIKE&gt; | ( &lt;IS&gt; &lt;NULL&gt; ) | &lt;BETWEEN&gt; ) )? &lt;CRITERIA&gt; ( &lt;ON&gt; &lt;LPAREN&gt; <link linkend="prod2">id</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> )* &lt;RPAREN&gt; )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod36" xreflabel="hasCriteria"/>hasCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod37" xreflabel="hasCriteria"/>hasCriteria</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;HAS&gt; <link linkend="prod35">criteriaSelector</link></para></entry></row>
+&lt;HAS&gt; <link linkend="prod36">criteriaSelector</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod31" xreflabel="declareStatement"/>declareStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod32" xreflabel="declareStatement"/>declareStatement</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;DECLARE&gt; <link linkend="prod37">dataType</link> <link linkend="prod2">id</link> ( ( <link linkend="prod11">nonReserved</link> | &lt;EQ&gt; ) <link linkend="prod38">assignStatementOperand</link> )?</para></entry></row>
+&lt;DECLARE&gt; <link linkend="prod38">dataType</link> <link linkend="prod2">id</link> ( ( <link linkend="prod11">nonReserved</link> | &lt;EQ&gt; ) <link linkend="prod39">assignStatementOperand</link> )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod29" xreflabel="assignStatement"/>assignStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod30" xreflabel="assignStatement"/>assignStatement</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod2">id</link> ( <link linkend="prod11">nonReserved</link> | &lt;EQ&gt; ) <link linkend="prod38">assignStatementOperand</link></para></entry></row>
+<link linkend="prod2">id</link> ( <link linkend="prod11">nonReserved</link> | &lt;EQ&gt; ) <link linkend="prod39">assignStatementOperand</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod38" xreflabel="assignStatementOperand"/>assignStatementOperand</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod39" xreflabel="assignStatementOperand"/>assignStatementOperand</para></entry>
 <entry align="left" valign="top"><para>::= 
-( ( <link linkend="prod15">insert</link> ) | <link linkend="prod16">update</link> | <link linkend="prod17">delete</link> | ( <link linkend="prod23">expression</link> ) | <link linkend="prod12">queryExpression</link> )</para></entry></row>
+( ( <link linkend="prod16">insert</link> ) | <link linkend="prod17">update</link> | <link linkend="prod18">delete</link> | ( <link linkend="prod24">expression</link> ) | <link linkend="prod13">queryExpression</link> )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod30" xreflabel="sqlStatement"/>sqlStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod31" xreflabel="sqlStatement"/>sqlStatement</para></entry>
 <entry align="left" valign="top"><para>::= 
-( ( <link linkend="prod5">userCommand</link> ) | <link linkend="prod39">dynamicCommand</link> | ( <link linkend="prod2">id</link> ( <link linkend="prod11">nonReserved</link> | &lt;EQ&gt; ) <link linkend="prod14">storedProcedure</link> ) )</para></entry></row>
+( ( <link linkend="prod5">userCommand</link> ) | <link linkend="prod40">dynamicCommand</link> | ( <link linkend="prod2">id</link> ( <link linkend="prod11">nonReserved</link> | &lt;EQ&gt; ) <link linkend="prod15">storedProcedure</link> ) )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod40" xreflabel="translateCriteria"/>translateCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod41" xreflabel="translateCriteria"/>translateCriteria</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;TRANSLATE&gt; <link linkend="prod35">criteriaSelector</link> ( &lt;WITH&gt; &lt;LPAREN&gt; <link linkend="prod2">id</link> &lt;EQ&gt; <link linkend="prod23">expression</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> &lt;EQ&gt; <link linkend="prod23">expression</link> )* &lt;RPAREN&gt; )?</para></entry></row>
+&lt;TRANSLATE&gt; <link linkend="prod36">criteriaSelector</link> ( &lt;WITH&gt; &lt;LPAREN&gt; <link linkend="prod2">id</link> &lt;EQ&gt; <link linkend="prod24">expression</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> &lt;EQ&gt; <link linkend="prod24">expression</link> )* &lt;RPAREN&gt; )?</para></entry></row>
 <row>
 <entry align="right" valign="top"><para><anchor id="prod4" xreflabel="createUpdateProcedure"/>createUpdateProcedure</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;CREATE&gt; ( &lt;VIRTUAL&gt; )? ( &lt;UPDATE&gt; )? &lt;PROCEDURE&gt; <link linkend="prod13">block</link></para></entry></row>
+&lt;CREATE&gt; ( &lt;VIRTUAL&gt; )? ( &lt;UPDATE&gt; )? &lt;PROCEDURE&gt; <link linkend="prod14">block</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod39" xreflabel="dynamicCommand"/>dynamicCommand</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod40" xreflabel="dynamicCommand"/>dynamicCommand</para></entry>
 <entry align="left" valign="top"><para>::= 
-( &lt;EXECUTE&gt; | &lt;EXEC&gt; ) ( ( &lt;STRING&gt; | &lt;IMMEDIATE&gt; ) )? <link linkend="prod23">expression</link> ( &lt;AS&gt; <link linkend="prod41">createElementsWithTypes</link> ( &lt;INTO&gt; <link linkend="prod2">id</link> )? )? ( &lt;USING&gt; <link linkend="prod42">setClauseList</link> )? ( &lt;UPDATE&gt; ( ( &lt;INTEGERVAL&gt; ) | ( &lt;STAR&gt; ) ) )?</para></entry></row>
+( &lt;EXECUTE&gt; | &lt;EXEC&gt; ) ( ( &lt;STRING&gt; | &lt;IMMEDIATE&gt; ) )? <link linkend="prod24">expression</link> ( &lt;AS&gt; <link linkend="prod42">createElementsWithTypes</link> ( &lt;INTO&gt; <link linkend="prod2">id</link> )? )? ( &lt;USING&gt; <link linkend="prod43">setClauseList</link> )? ( &lt;UPDATE&gt; ( ( &lt;INTEGERVAL&gt; ) | ( &lt;STAR&gt; ) ) )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod42" xreflabel="setClauseList"/>setClauseList</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod43" xreflabel="setClauseList"/>setClauseList</para></entry>
 <entry align="left" valign="top"><para>::= 
 <link linkend="prod2">id</link> &lt;EQ&gt; ( &lt;COMMA&gt; <link linkend="prod2">id</link> &lt;EQ&gt; )*</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod41" xreflabel="createElementsWithTypes"/>createElementsWithTypes</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod42" xreflabel="createElementsWithTypes"/>createElementsWithTypes</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod2">id</link> <link linkend="prod21">dataTypeString</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> <link linkend="prod21">dataTypeString</link> )*</para></entry></row>
+<link linkend="prod2">id</link> <link linkend="prod22">dataTypeString</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> <link linkend="prod22">dataTypeString</link> )*</para></entry></row>
 <row>
 <entry align="right" valign="top"><para><anchor id="prod6" xreflabel="callableStatement"/>callableStatement</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;LBRACE&gt; ( &lt;QMARK&gt; &lt;EQ&gt; )? &lt;CALL&gt; <link linkend="prod2">id</link> ( &lt;LPAREN&gt; ( <link linkend="prod43">executeUnnamedParams</link> ) &lt;RPAREN&gt; )? &lt;RBRACE&gt; ( <link linkend="prod44">option</link> )?</para></entry></row>
+&lt;LBRACE&gt; ( &lt;QMARK&gt; &lt;EQ&gt; )? &lt;CALL&gt; <link linkend="prod2">id</link> ( &lt;LPAREN&gt; ( <link linkend="prod44">executeUnnamedParams</link> ) &lt;RPAREN&gt; )? &lt;RBRACE&gt; ( <link linkend="prod45">option</link> )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod14" xreflabel="storedProcedure"/>storedProcedure</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod15" xreflabel="storedProcedure"/>storedProcedure</para></entry>
 <entry align="left" valign="top"><para>::= 
-( ( &lt;EXEC&gt; | &lt;EXECUTE&gt; | &lt;CALL&gt; ) <link linkend="prod2">id</link> &lt;LPAREN&gt; ( <link linkend="prod45">executeNamedParams</link> | <link linkend="prod43">executeUnnamedParams</link> ) &lt;RPAREN&gt; ) ( <link linkend="prod44">option</link> )?</para></entry></row>
+( ( &lt;EXEC&gt; | &lt;EXECUTE&gt; | &lt;CALL&gt; ) <link linkend="prod2">id</link> &lt;LPAREN&gt; ( <link linkend="prod46">executeNamedParams</link> | <link linkend="prod44">executeUnnamedParams</link> ) &lt;RPAREN&gt; ) ( <link linkend="prod45">option</link> )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod43" xreflabel="executeUnnamedParams"/>executeUnnamedParams</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod44" xreflabel="executeUnnamedParams"/>executeUnnamedParams</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod23">expression</link> ( &lt;COMMA&gt; <link linkend="prod23">expression</link> )* )?</para></entry></row>
+( <link linkend="prod24">expression</link> ( &lt;COMMA&gt; <link linkend="prod24">expression</link> )* )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod45" xreflabel="executeNamedParams"/>executeNamedParams</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod46" xreflabel="executeNamedParams"/>executeNamedParams</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod2">id</link> &lt;EQ&gt; ( &lt;GT&gt; )? <link linkend="prod23">expression</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> &lt;EQ&gt; ( &lt;GT&gt; )? <link linkend="prod23">expression</link> )* )</para></entry></row>
+( <link linkend="prod2">id</link> &lt;EQ&gt; ( &lt;GT&gt; )? <link linkend="prod24">expression</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> &lt;EQ&gt; ( &lt;GT&gt; )? <link linkend="prod24">expression</link> )* )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod15" xreflabel="insert"/>insert</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod16" xreflabel="insert"/>insert</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;INSERT&gt; &lt;INTO&gt; <link linkend="prod2">id</link> ( <link linkend="prod46">columnList</link> )? ( ( &lt;VALUES&gt; <link linkend="prod47">rowValues</link> ) | ( <link linkend="prod12">queryExpression</link> ) ) ( <link linkend="prod44">option</link> )?</para></entry></row>
+&lt;INSERT&gt; &lt;INTO&gt; <link linkend="prod2">id</link> ( <link linkend="prod47">columnList</link> )? ( ( &lt;VALUES&gt; <link linkend="prod48">rowValues</link> ) | ( <link linkend="prod13">queryExpression</link> ) ) ( <link linkend="prod45">option</link> )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod46" xreflabel="columnList"/>columnList</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod47" xreflabel="columnList"/>columnList</para></entry>
 <entry align="left" valign="top"><para>::= 
 &lt;LPAREN&gt; <link linkend="prod2">id</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> )* &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod47" xreflabel="rowValues"/>rowValues</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod48" xreflabel="rowValues"/>rowValues</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;LPAREN&gt; <link linkend="prod23">expression</link> ( &lt;COMMA&gt; <link linkend="prod23">expression</link> )* &lt;RPAREN&gt;</para></entry></row>
+&lt;LPAREN&gt; <link linkend="prod24">expression</link> ( &lt;COMMA&gt; <link linkend="prod24">expression</link> )* &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod16" xreflabel="update"/>update</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod17" xreflabel="update"/>update</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;UPDATE&gt; <link linkend="prod2">id</link> &lt;SET&gt; <link linkend="prod42">setClauseList</link> ( <link linkend="prod48">where</link> )? ( <link linkend="prod44">option</link> )?</para></entry></row>
+&lt;UPDATE&gt; <link linkend="prod2">id</link> &lt;SET&gt; <link linkend="prod43">setClauseList</link> ( <link linkend="prod49">where</link> )? ( <link linkend="prod45">option</link> )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod17" xreflabel="delete"/>delete</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod18" xreflabel="delete"/>delete</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;DELETE&gt; &lt;FROM&gt; <link linkend="prod2">id</link> ( <link linkend="prod48">where</link> )? ( <link linkend="prod44">option</link> )?</para></entry></row>
+&lt;DELETE&gt; &lt;FROM&gt; <link linkend="prod2">id</link> ( <link linkend="prod49">where</link> )? ( <link linkend="prod45">option</link> )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod12" xreflabel="queryExpression"/>queryExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod13" xreflabel="queryExpression"/>queryExpression</para></entry>
 <entry align="left" valign="top"><para>::= 
-( &lt;WITH&gt; <link linkend="prod49">withListElement</link> ( &lt;COMMA&gt; <link linkend="prod49">withListElement</link> )* )? <link linkend="prod50">queryExpressionBody</link></para></entry></row>
+( &lt;WITH&gt; <link linkend="prod50">withListElement</link> ( &lt;COMMA&gt; <link linkend="prod50">withListElement</link> )* )? <link linkend="prod51">queryExpressionBody</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod49" xreflabel="withListElement"/>withListElement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod50" xreflabel="withListElement"/>withListElement</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod2">id</link> ( <link linkend="prod46">columnList</link> )? &lt;AS&gt; &lt;LPAREN&gt; <link linkend="prod12">queryExpression</link> &lt;RPAREN&gt;</para></entry></row>
+<link linkend="prod2">id</link> ( <link linkend="prod47">columnList</link> )? &lt;AS&gt; &lt;LPAREN&gt; <link linkend="prod13">queryExpression</link> &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod50" xreflabel="queryExpressionBody"/>queryExpressionBody</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod51" xreflabel="queryExpressionBody"/>queryExpressionBody</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod51">queryTerm</link> ( ( &lt;UNION&gt; | &lt;EXCEPT&gt; ) ( &lt;ALL&gt; | &lt;DISTINCT&gt; )? <link linkend="prod51">queryTerm</link> )* ( <link linkend="prod52">orderby</link> )? ( <link linkend="prod53">limit</link> )? ( <link linkend="prod44">option</link> )?</para></entry></row>
+<link linkend="prod52">queryTerm</link> ( ( &lt;UNION&gt; | &lt;EXCEPT&gt; ) ( &lt;ALL&gt; | &lt;DISTINCT&gt; )? <link linkend="prod52">queryTerm</link> )* ( <link linkend="prod53">orderby</link> )? ( <link linkend="prod54">limit</link> )? ( <link linkend="prod45">option</link> )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod51" xreflabel="queryTerm"/>queryTerm</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod52" xreflabel="queryTerm"/>queryTerm</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod54">queryPrimary</link> ( &lt;INTERSECT&gt; ( &lt;ALL&gt; | &lt;DISTINCT&gt; )? <link linkend="prod54">queryPrimary</link> )*</para></entry></row>
+<link linkend="prod55">queryPrimary</link> ( &lt;INTERSECT&gt; ( &lt;ALL&gt; | &lt;DISTINCT&gt; )? <link linkend="prod55">queryPrimary</link> )*</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod54" xreflabel="queryPrimary"/>queryPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod55" xreflabel="queryPrimary"/>queryPrimary</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod55">query</link> | ( &lt;TABLE&gt; <link linkend="prod2">id</link> ) | ( &lt;LPAREN&gt; <link linkend="prod50">queryExpressionBody</link> &lt;RPAREN&gt; ) )</para></entry></row>
+( <link linkend="prod56">query</link> | ( &lt;TABLE&gt; <link linkend="prod2">id</link> ) | ( &lt;LPAREN&gt; <link linkend="prod51">queryExpressionBody</link> &lt;RPAREN&gt; ) )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod55" xreflabel="query"/>query</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod56" xreflabel="query"/>query</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod56">select</link> ( <link linkend="prod57">into</link> )? ( <link linkend="prod58">from</link> ( <link linkend="prod48">where</link> )? ( <link linkend="prod59">groupBy</link> )? ( <link linkend="prod60">having</link> )? )?</para></entry></row>
+<link linkend="prod57">select</link> ( <link linkend="prod58">into</link> )? ( <link linkend="prod59">from</link> ( <link linkend="prod49">where</link> )? ( <link linkend="prod60">groupBy</link> )? ( <link linkend="prod61">having</link> )? )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod57" xreflabel="into"/>into</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod58" xreflabel="into"/>into</para></entry>
 <entry align="left" valign="top"><para>::= 
 &lt;INTO&gt; ( <link linkend="prod2">id</link> )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod56" xreflabel="select"/>select</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod57" xreflabel="select"/>select</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;SELECT&gt; ( &lt;ALL&gt; | ( &lt;DISTINCT&gt; ) )? ( &lt;STAR&gt; | ( <link linkend="prod61">selectSymbol</link> ( &lt;COMMA&gt; <link linkend="prod61">selectSymbol</link> )* ) )</para></entry></row>
+&lt;SELECT&gt; ( &lt;ALL&gt; | ( &lt;DISTINCT&gt; ) )? ( &lt;STAR&gt; | ( <link linkend="prod62">selectSymbol</link> ( &lt;COMMA&gt; <link linkend="prod62">selectSymbol</link> )* ) )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod61" xreflabel="selectSymbol"/>selectSymbol</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="selectSymbol"/>selectSymbol</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod62">selectExpression</link> | <link linkend="prod63">allInGroupSymbol</link> )</para></entry></row>
+( <link linkend="prod63">selectExpression</link> | <link linkend="prod64">allInGroupSymbol</link> )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="selectExpression"/>selectExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="selectExpression"/>selectExpression</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod23">expression</link> ( ( &lt;AS&gt; )? <link linkend="prod2">id</link> )? )</para></entry></row>
+( <link linkend="prod24">expression</link> ( ( &lt;AS&gt; )? <link linkend="prod2">id</link> )? )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod64" xreflabel="derivedColumn"/>derivedColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod65" xreflabel="derivedColumn"/>derivedColumn</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod23">expression</link> ( &lt;AS&gt; <link linkend="prod2">id</link> )? )</para></entry></row>
+( <link linkend="prod24">expression</link> ( &lt;AS&gt; <link linkend="prod2">id</link> )? )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="allInGroupSymbol"/>allInGroupSymbol</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod64" xreflabel="allInGroupSymbol"/>allInGroupSymbol</para></entry>
 <entry align="left" valign="top"><para>::= 
 &lt;ALL_IN_GROUP&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod65" xreflabel="xmlAgg"/>xmlAgg</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="xmlAgg"/>xmlAgg</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;XMLAGG&gt; &lt;LPAREN&gt; <link linkend="prod23">expression</link> ( <link linkend="prod52">orderby</link> )? &lt;RPAREN&gt;</para></entry></row>
+&lt;XMLAGG&gt; &lt;LPAREN&gt; <link linkend="prod24">expression</link> ( <link linkend="prod53">orderby</link> )? &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="arrayAgg"/>arrayAgg</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod67" xreflabel="arrayAgg"/>arrayAgg</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;ARRAY_AGG&gt; &lt;LPAREN&gt; <link linkend="prod23">expression</link> ( <link linkend="prod52">orderby</link> )? &lt;RPAREN&gt;</para></entry></row>
+&lt;ARRAY_AGG&gt; &lt;LPAREN&gt; <link linkend="prod24">expression</link> ( <link linkend="prod53">orderby</link> )? &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod67" xreflabel="textAgg"/>textAgg</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="textAgg"/>textAgg</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod11">nonReserved</link> &lt;LPAREN&gt; &lt;FOR&gt; <link linkend="prod64">derivedColumn</link> ( &lt;COMMA&gt; <link linkend="prod64">derivedColumn</link> )* ( &lt;ID&gt; <link linkend="prod68">charVal</link> )? ( ( &lt;ID&gt; <link linkend="prod68">charVal</link> ) )? ( &lt;ID&gt; )? ( ( &lt;ID&gt; <link linkend="prod2">id</link> ) )? ( <link linkend="prod52">orderby</link> )? &lt;RPAREN&gt;</para></entry></row>
+<link linkend="prod11">nonReserved</link> &lt;LPAREN&gt; &lt;FOR&gt; <link linkend="prod65">derivedColumn</link> ( &lt;COMMA&gt; <link linkend="prod65">derivedColumn</link> )* ( &lt;ID&gt; <link linkend="prod69">charVal</link> )? ( ( &lt;ID&gt; <link linkend="prod69">charVal</link> ) )? ( &lt;ID&gt; )? ( ( &lt;ID&gt; <link linkend="prod2">id</link> ) )? ( <link linkend="prod53">orderby</link> )? &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="aggregateSymbol"/>aggregateSymbol</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="aggregateSymbol"/>aggregateSymbol</para></entry>
 <entry align="left" valign="top"><para>::= 
-( ( <link linkend="prod11">nonReserved</link> &lt;LPAREN&gt; &lt;STAR&gt; &lt;RPAREN&gt; ) | ( ( <link linkend="prod11">nonReserved</link> | &lt;ANY&gt; | &lt;SOME&gt; ) &lt;LPAREN&gt; ( &lt;DISTINCT&gt; | &lt;ALL&gt; )? <link linkend="prod23">expression</link> &lt;RPAREN&gt; ) )</para></entry></row>
+( ( <link linkend="prod11">nonReserved</link> &lt;LPAREN&gt; &lt;STAR&gt; &lt;RPAREN&gt; ) | ( ( <link linkend="prod11">nonReserved</link> | &lt;ANY&gt; | &lt;SOME&gt; ) &lt;LPAREN&gt; ( &lt;DISTINCT&gt; | &lt;ALL&gt; )? <link linkend="prod24">expression</link> &lt;RPAREN&gt; ) )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod58" xreflabel="from"/>from</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod59" xreflabel="from"/>from</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;FROM&gt; ( <link linkend="prod70">tableReference</link> ( &lt;COMMA&gt; <link linkend="prod70">tableReference</link> )* )</para></entry></row>
+&lt;FROM&gt; ( <link linkend="prod71">tableReference</link> ( &lt;COMMA&gt; <link linkend="prod71">tableReference</link> )* )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="tableReference"/>tableReference</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="tableReference"/>tableReference</para></entry>
 <entry align="left" valign="top"><para>::= 
-( ( &lt;LBRACE&gt; <link linkend="prod11">nonReserved</link> <link linkend="prod71">joinedTable</link> &lt;RBRACE&gt; ) | <link linkend="prod71">joinedTable</link> )</para></entry></row>
+( ( &lt;LBRACE&gt; <link linkend="prod11">nonReserved</link> <link linkend="prod72">joinedTable</link> &lt;RBRACE&gt; ) | <link linkend="prod72">joinedTable</link> )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="joinedTable"/>joinedTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="joinedTable"/>joinedTable</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod72">tablePrimary</link> ( ( <link linkend="prod73">crossJoin</link> | <link linkend="prod74">qualifiedJoin</link> ) )*</para></entry></row>
+<link linkend="prod73">tablePrimary</link> ( ( <link linkend="prod74">crossJoin</link> | <link linkend="prod75">qualifiedJoin</link> ) )*</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="crossJoin"/>crossJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="crossJoin"/>crossJoin</para></entry>
 <entry align="left" valign="top"><para>::= 
-( ( &lt;CROSS&gt; | &lt;UNION&gt; ) &lt;JOIN&gt; <link linkend="prod72">tablePrimary</link> )</para></entry></row>
+( ( &lt;CROSS&gt; | &lt;UNION&gt; ) &lt;JOIN&gt; <link linkend="prod73">tablePrimary</link> )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
 <entry align="left" valign="top"><para>::= 
-( ( ( &lt;RIGHT&gt; ( &lt;OUTER&gt; )? ) | ( &lt;LEFT&gt; ( &lt;OUTER&gt; )? ) | ( &lt;FULL&gt; ( &lt;OUTER&gt; )? ) | &lt;INNER&gt; )? &lt;JOIN&gt; <link linkend="prod70">tableReference</link> &lt;ON&gt; <link linkend="prod34">criteria</link> )</para></entry></row>
+( ( ( &lt;RIGHT&gt; ( &lt;OUTER&gt; )? ) | ( &lt;LEFT&gt; ( &lt;OUTER&gt; )? ) | ( &lt;FULL&gt; ( &lt;OUTER&gt; )? ) | &lt;INNER&gt; )? &lt;JOIN&gt; <link linkend="prod71">tableReference</link> &lt;ON&gt; <link linkend="prod35">criteria</link> )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="tablePrimary"/>tablePrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="tablePrimary"/>tablePrimary</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod75">textTable</link> | <link linkend="prod76">arrayTable</link> | <link linkend="prod77">xmlTable</link> | <link linkend="prod78">unaryFromClause</link> | <link linkend="prod79">subqueryFromClause</link> | ( &lt;LPAREN&gt; <link linkend="prod71">joinedTable</link> &lt;RPAREN&gt; ) ) ( ( &lt;MAKEDEP&gt; ) | ( &lt;MAKENOTDEP&gt; ) )?</para></entry></row>
+( <link linkend="prod76">textTable</link> | <link linkend="prod77">arrayTable</link> | <link linkend="prod78">xmlTable</link> | <link linkend="prod79">unaryFromClause</link> | <link linkend="prod80">subqueryFromClause</link> | ( &lt;LPAREN&gt; <link linkend="prod72">joinedTable</link> &lt;RPAREN&gt; ) ) ( ( &lt;MAKEDEP&gt; ) | ( &lt;MAKENOTDEP&gt; ) )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;XMLSERIALIZE&gt; &lt;LPAREN&gt; ( <link linkend="prod11">nonReserved</link> )? <link linkend="prod23">expression</link> ( &lt;AS&gt; ( &lt;STRING&gt; | &lt;VARCHAR&gt; | &lt;CLOB&gt; ) )? &lt;RPAREN&gt;</para></entry></row>
+&lt;XMLSERIALIZE&gt; &lt;LPAREN&gt; ( <link linkend="prod11">nonReserved</link> )? <link linkend="prod24">expression</link> ( &lt;AS&gt; ( &lt;STRING&gt; | &lt;VARCHAR&gt; | &lt;CLOB&gt; ) )? &lt;RPAREN&gt;</para></entry></row>
 <row>
 <entry align="right" valign="top"><para><anchor id="prod11" xreflabel="nonReserved"/>nonReserved</para></entry>
 <entry align="left" valign="top"><para>::= 
 &lt;ID&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="arrayTable"/>arrayTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="arrayTable"/>arrayTable</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;ID&gt; &lt;LPAREN&gt; <link linkend="prod23">expression</link> <link linkend="prod11">nonReserved</link> <link linkend="prod41">createElementsWithTypes</link> &lt;RPAREN&gt; ( &lt;AS&gt; )? <link linkend="prod2">id</link></para></entry></row>
+&lt;ID&gt; &lt;LPAREN&gt; <link linkend="prod24">expression</link> <link linkend="prod11">nonReserved</link> <link linkend="prod42">createElementsWithTypes</link> &lt;RPAREN&gt; ( &lt;AS&gt; )? <link linkend="prod2">id</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="textTable"/>textTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="textTable"/>textTable</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;ID&gt; &lt;LPAREN&gt; <link linkend="prod23">expression</link> <link linkend="prod11">nonReserved</link> <link linkend="prod81">textColumn</link> ( &lt;COMMA&gt; <link linkend="prod81">textColumn</link> )* ( &lt;ID&gt; <link linkend="prod68">charVal</link> )? ( ( &lt;ESCAPE&gt; <link linkend="prod68">charVal</link> ) | ( &lt;ID&gt; <link linkend="prod68">charVal</link> ) )? ( &lt;ID&gt; ( <link linkend="prod82">intVal</link> )? )? ( &lt;ID&gt; <link linkend="prod82">intVal</link> )? &lt;RPAREN&gt; ( &lt;AS&gt; )? <link linkend="prod2">id</link></para></entry></row>
+&lt;ID&gt; &lt;LPAREN&gt; <link linkend="prod24">expression</link> <link linkend="prod11">nonReserved</link> <link linkend="prod82">textColumn</link> ( &lt;COMMA&gt; <link linkend="prod82">textColumn</link> )* ( &lt;ID&gt; <link linkend="prod69">charVal</link> )? ( ( &lt;ESCAPE&gt; <link linkend="prod69">charVal</link> ) | ( &lt;ID&gt; <link linkend="prod69">charVal</link> ) )? ( &lt;ID&gt; ( <link linkend="prod83">intVal</link> )? )? ( &lt;ID&gt; <link linkend="prod83">intVal</link> )? &lt;RPAREN&gt; ( &lt;AS&gt; )? <link linkend="prod2">id</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="textColumn"/>textColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod82" xreflabel="textColumn"/>textColumn</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod2">id</link> <link linkend="prod37">dataType</link> ( &lt;ID&gt; <link linkend="prod82">intVal</link> )?</para></entry></row>
+<link linkend="prod2">id</link> <link linkend="prod38">dataType</link> ( &lt;ID&gt; <link linkend="prod83">intVal</link> )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod83" xreflabel="xmlQuery"/>xmlQuery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod84" xreflabel="xmlQuery"/>xmlQuery</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;XMLQUERY&gt; &lt;LPAREN&gt; ( <link linkend="prod84">xmlNamespaces</link> &lt;COMMA&gt; )? <link linkend="prod1">stringVal</link> ( &lt;ID&gt; <link linkend="prod64">derivedColumn</link> ( &lt;COMMA&gt; <link linkend="prod64">derivedColumn</link> )* )? ( ( &lt;NULL&gt; | <link linkend="prod11">nonReserved</link> ) &lt;ON&gt; <link linkend="prod11">nonReserved</link> )? &lt;RPAREN&gt;</para></entry></row>
+&lt;XMLQUERY&gt; &lt;LPAREN&gt; ( <link linkend="prod85">xmlNamespaces</link> &lt;COMMA&gt; )? <link linkend="prod1">stringVal</link> ( &lt;ID&gt; <link linkend="prod65">derivedColumn</link> ( &lt;COMMA&gt; <link linkend="prod65">derivedColumn</link> )* )? ( ( &lt;NULL&gt; | <link linkend="prod11">nonReserved</link> ) &lt;ON&gt; <link linkend="prod11">nonReserved</link> )? &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="xmlTable"/>xmlTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="xmlTable"/>xmlTable</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;XMLTABLE&gt; &lt;LPAREN&gt; ( <link linkend="prod84">xmlNamespaces</link> &lt;COMMA&gt; )? <link linkend="prod1">stringVal</link> ( &lt;ID&gt; <link linkend="prod64">derivedColumn</link> ( &lt;COMMA&gt; <link linkend="prod64">derivedColumn</link> )* )? ( &lt;ID&gt; <link linkend="prod85">xmlColumn</link> ( &lt;COMMA&gt; <link linkend="prod85">xmlColumn</link> )* )? &lt;RPAREN&gt; ( &lt;AS&gt; )? <link linkend="prod2">id</link></para></entry></row>
+&lt;XMLTABLE&gt; &lt;LPAREN&gt; ( <link linkend="prod85">xmlNamespaces</link> &lt;COMMA&gt; )? <link linkend="prod1">stringVal</link> ( &lt;ID&gt; <link linkend="prod65">derivedColumn</link> ( &lt;COMMA&gt; <link linkend="prod65">derivedColumn</link> )* )? ( &lt;ID&gt; <link linkend="prod86">xmlColumn</link> ( &lt;COMMA&gt; <link linkend="prod86">xmlColumn</link> )* )? &lt;RPAREN&gt; ( &lt;AS&gt; )? <link linkend="prod2">id</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="xmlColumn"/>xmlColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod86" xreflabel="xmlColumn"/>xmlColumn</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod2">id</link> ( ( &lt;FOR&gt; <link linkend="prod11">nonReserved</link> ) | ( <link linkend="prod37">dataType</link> ( &lt;DEFAULT_KEYWORD&gt; <link linkend="prod23">expression</link> )? ( <link linkend="prod11">nonReserved</link> <link linkend="prod1">stringVal</link> )? ) )</para></entry></row>
+<link linkend="prod2">id</link> ( ( &lt;FOR&gt; <link linkend="prod11">nonReserved</link> ) | ( <link linkend="prod38">dataType</link> ( &lt;DEFAULT_KEYWORD&gt; <link linkend="prod24">expression</link> )? ( <link linkend="prod11">nonReserved</link> <link linkend="prod1">stringVal</link> )? ) )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod82" xreflabel="intVal"/>intVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod83" xreflabel="intVal"/>intVal</para></entry>
 <entry align="left" valign="top"><para>::= 
 &lt;INTEGERVAL&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
 <entry align="left" valign="top"><para>::= 
-( &lt;TABLE&gt; )? &lt;LPAREN&gt; ( <link linkend="prod12">queryExpression</link> | <link linkend="prod14">storedProcedure</link> ) &lt;RPAREN&gt; ( &lt;AS&gt; )? <link linkend="prod2">id</link></para></entry></row>
+( &lt;TABLE&gt; )? &lt;LPAREN&gt; ( <link linkend="prod13">queryExpression</link> | <link linkend="prod15">storedProcedure</link> ) &lt;RPAREN&gt; ( &lt;AS&gt; )? <link linkend="prod2">id</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
 <entry align="left" valign="top"><para>::= 
 ( &lt;ID&gt; ( ( &lt;AS&gt; )? <link linkend="prod2">id</link> )? )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod48" xreflabel="where"/>where</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod49" xreflabel="where"/>where</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;WHERE&gt; <link linkend="prod34">criteria</link></para></entry></row>
+&lt;WHERE&gt; <link linkend="prod35">criteria</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod34" xreflabel="criteria"/>criteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod35" xreflabel="criteria"/>criteria</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod86">compoundCritOr</link></para></entry></row>
+<link linkend="prod87">compoundCritOr</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod86" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod87" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod87">compoundCritAnd</link> ( &lt;OR&gt; <link linkend="prod87">compoundCritAnd</link> )*</para></entry></row>
+<link linkend="prod88">compoundCritAnd</link> ( &lt;OR&gt; <link linkend="prod88">compoundCritAnd</link> )*</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod87" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod88">notCrit</link> ( &lt;AND&gt; <link linkend="prod88">notCrit</link> )*</para></entry></row>
+<link linkend="prod89">notCrit</link> ( &lt;AND&gt; <link linkend="prod89">notCrit</link> )*</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="notCrit"/>notCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="notCrit"/>notCrit</para></entry>
 <entry align="left" valign="top"><para>::= 
-( &lt;NOT&gt; )? <link linkend="prod89">booleanPrimary</link></para></entry></row>
+( &lt;NOT&gt; )? <link linkend="prod90">booleanPrimary</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="booleanPrimary"/>booleanPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod90" xreflabel="booleanPrimary"/>booleanPrimary</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod40">translateCriteria</link> | ( <link linkend="prod90">commonValueExpression</link> ( ( <link linkend="prod91">betweenCrit</link> | <link linkend="prod92">matchCrit</link> | <link linkend="prod93">setCrit</link> | <link linkend="prod94">isNullCrit</link> | <link linkend="prod95">subqueryCompareCriteria</link> | <link linkend="prod96">compareCrit</link> ) )? ) | <link linkend="prod97">existsCriteria</link> | <link linkend="prod36">hasCriteria</link> )</para></entry></row>
+( <link linkend="prod41">translateCriteria</link> | ( <link linkend="prod91">commonValueExpression</link> ( ( <link linkend="prod92">betweenCrit</link> | <link linkend="prod93">matchCrit</link> | <link linkend="prod94">setCrit</link> | <link linkend="prod95">isNullCrit</link> | <link linkend="prod96">subqueryCompareCriteria</link> | <link linkend="prod97">compareCrit</link> ) )? ) | <link linkend="prod98">existsCriteria</link> | <link linkend="prod37">hasCriteria</link> )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="operator"/>operator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod99" xreflabel="operator"/>operator</para></entry>
 <entry align="left" valign="top"><para>::= 
 ( &lt;EQ&gt; | &lt;NE&gt; | &lt;NE2&gt; | &lt;LT&gt; | &lt;LE&gt; | &lt;GT&gt; | &lt;GE&gt; )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="compareCrit"/>compareCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod97" xreflabel="compareCrit"/>compareCrit</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod98">operator</link> <link linkend="prod90">commonValueExpression</link></para></entry></row>
+<link linkend="prod99">operator</link> <link linkend="prod91">commonValueExpression</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod99" xreflabel="subquery"/>subquery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod100" xreflabel="subquery"/>subquery</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod100">subqueryAndHint</link></para></entry></row>
+&lt;LPAREN&gt; ( <link linkend="prod13">queryExpression</link> | ( <link linkend="prod15">storedProcedure</link> ) ) &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod100" xreflabel="subqueryAndHint"/>subqueryAndHint</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="subqueryAndHint"/>subqueryAndHint</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;LPAREN&gt; ( <link linkend="prod12">queryExpression</link> | ( <link linkend="prod14">storedProcedure</link> ) ) &lt;RPAREN&gt;</para></entry></row>
+<link linkend="prod100">subquery</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod95" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod98">operator</link> ( &lt;ANY&gt; | &lt;SOME&gt; | &lt;ALL&gt; ) <link linkend="prod99">subquery</link></para></entry></row>
+<link linkend="prod99">operator</link> ( &lt;ANY&gt; | &lt;SOME&gt; | &lt;ALL&gt; ) <link linkend="prod100">subquery</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod92" xreflabel="matchCrit"/>matchCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="matchCrit"/>matchCrit</para></entry>
 <entry align="left" valign="top"><para>::= 
-( &lt;NOT&gt; )? &lt;LIKE&gt; <link linkend="prod90">commonValueExpression</link> ( &lt;ESCAPE&gt; <link linkend="prod68">charVal</link> | ( &lt;LBRACE&gt; &lt;ESCAPE&gt; <link linkend="prod68">charVal</link> &lt;RBRACE&gt; ) )?</para></entry></row>
+( &lt;NOT&gt; )? &lt;LIKE&gt; <link linkend="prod91">commonValueExpression</link> ( &lt;ESCAPE&gt; <link linkend="prod69">charVal</link> | ( &lt;LBRACE&gt; &lt;ESCAPE&gt; <link linkend="prod69">charVal</link> &lt;RBRACE&gt; ) )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="charVal"/>charVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="charVal"/>charVal</para></entry>
 <entry align="left" valign="top"><para>::= 
 <link linkend="prod1">stringVal</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="betweenCrit"/>betweenCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod92" xreflabel="betweenCrit"/>betweenCrit</para></entry>
 <entry align="left" valign="top"><para>::= 
-( &lt;NOT&gt; )? &lt;BETWEEN&gt; <link linkend="prod90">commonValueExpression</link> &lt;AND&gt; <link linkend="prod90">commonValueExpression</link></para></entry></row>
+( &lt;NOT&gt; )? &lt;BETWEEN&gt; <link linkend="prod91">commonValueExpression</link> &lt;AND&gt; <link linkend="prod91">commonValueExpression</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="isNullCrit"/>isNullCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod95" xreflabel="isNullCrit"/>isNullCrit</para></entry>
 <entry align="left" valign="top"><para>::= 
 &lt;IS&gt; ( &lt;NOT&gt; )? &lt;NULL&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="setCrit"/>setCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="setCrit"/>setCrit</para></entry>
 <entry align="left" valign="top"><para>::= 
-( &lt;NOT&gt; )? &lt;IN&gt; ( ( <link linkend="prod100">subqueryAndHint</link> ) | ( &lt;LPAREN&gt; <link linkend="prod90">commonValueExpression</link> ( &lt;COMMA&gt; <link linkend="prod90">commonValueExpression</link> )* &lt;RPAREN&gt; ) )</para></entry></row>
+( &lt;NOT&gt; )? &lt;IN&gt; ( ( <link linkend="prod101">subqueryAndHint</link> ) | ( &lt;LPAREN&gt; <link linkend="prod91">commonValueExpression</link> ( &lt;COMMA&gt; <link linkend="prod91">commonValueExpression</link> )* &lt;RPAREN&gt; ) )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod97" xreflabel="existsCriteria"/>existsCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="existsCriteria"/>existsCriteria</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;EXISTS&gt; <link linkend="prod100">subqueryAndHint</link></para></entry></row>
+&lt;EXISTS&gt; <link linkend="prod101">subqueryAndHint</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod59" xreflabel="groupBy"/>groupBy</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod60" xreflabel="groupBy"/>groupBy</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;GROUP&gt; &lt;BY&gt; ( <link linkend="prod101">groupByItem</link> ( &lt;COMMA&gt; <link linkend="prod101">groupByItem</link> )* )</para></entry></row>
+&lt;GROUP&gt; &lt;BY&gt; ( <link linkend="prod102">groupByItem</link> ( &lt;COMMA&gt; <link linkend="prod102">groupByItem</link> )* )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="groupByItem"/>groupByItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod102" xreflabel="groupByItem"/>groupByItem</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod23">expression</link></para></entry></row>
+<link linkend="prod24">expression</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod60" xreflabel="having"/>having</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod61" xreflabel="having"/>having</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;HAVING&gt; <link linkend="prod34">criteria</link></para></entry></row>
+&lt;HAVING&gt; <link linkend="prod35">criteria</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod52" xreflabel="orderby"/>orderby</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod53" xreflabel="orderby"/>orderby</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;ORDER&gt; &lt;BY&gt; <link linkend="prod102">sortSpecification</link> ( &lt;COMMA&gt; <link linkend="prod102">sortSpecification</link> )*</para></entry></row>
+&lt;ORDER&gt; &lt;BY&gt; <link linkend="prod103">sortSpecification</link> ( &lt;COMMA&gt; <link linkend="prod103">sortSpecification</link> )*</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod102" xreflabel="sortSpecification"/>sortSpecification</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="sortSpecification"/>sortSpecification</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod103">sortKey</link> ( &lt;ASC&gt; | &lt;DESC&gt; )? ( <link linkend="prod11">nonReserved</link> <link linkend="prod11">nonReserved</link> )?</para></entry></row>
+<link linkend="prod104">sortKey</link> ( &lt;ASC&gt; | &lt;DESC&gt; )? ( <link linkend="prod11">nonReserved</link> <link linkend="prod11">nonReserved</link> )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="sortKey"/>sortKey</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod104" xreflabel="sortKey"/>sortKey</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod23">expression</link></para></entry></row>
+<link linkend="prod24">expression</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod53" xreflabel="limit"/>limit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod54" xreflabel="limit"/>limit</para></entry>
 <entry align="left" valign="top"><para>::= 
 &lt;LIMIT&gt; ( &lt;INTEGERVAL&gt; | &lt;QMARK&gt; ) ( &lt;COMMA&gt; ( &lt;INTEGERVAL&gt; | &lt;QMARK&gt; ) )?</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod44" xreflabel="option"/>option</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod45" xreflabel="option"/>option</para></entry>
 <entry align="left" valign="top"><para>::= 
 &lt;OPTION&gt; ( &lt;MAKEDEP&gt; <link linkend="prod2">id</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> )* | &lt;MAKENOTDEP&gt; <link linkend="prod2">id</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> )* | &lt;NOCACHE&gt; ( <link linkend="prod2">id</link> ( &lt;COMMA&gt; <link linkend="prod2">id</link> )* )? )*</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod23" xreflabel="expression"/>expression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod24" xreflabel="expression"/>expression</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod34">criteria</link></para></entry></row>
+<link linkend="prod35">criteria</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod90" xreflabel="commonValueExpression"/>commonValueExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="commonValueExpression"/>commonValueExpression</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod104">plusExpression</link> ( &lt;CONCAT_OP&gt; <link linkend="prod104">plusExpression</link> )* )</para></entry></row>
+( <link linkend="prod105">plusExpression</link> ( &lt;CONCAT_OP&gt; <link linkend="prod105">plusExpression</link> )* )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod104" xreflabel="plusExpression"/>plusExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod105" xreflabel="plusExpression"/>plusExpression</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod105">timesExpression</link> ( <link linkend="prod106">plusOperator</link> <link linkend="prod105">timesExpression</link> )* )</para></entry></row>
+( <link linkend="prod106">timesExpression</link> ( <link linkend="prod107">plusOperator</link> <link linkend="prod106">timesExpression</link> )* )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod106" xreflabel="plusOperator"/>plusOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod107" xreflabel="plusOperator"/>plusOperator</para></entry>
 <entry align="left" valign="top"><para>::= 
 ( &lt;PLUS&gt; | &lt;MINUS&gt; )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod105" xreflabel="timesExpression"/>timesExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod106" xreflabel="timesExpression"/>timesExpression</para></entry>
 <entry align="left" valign="top"><para>::= 
-( <link linkend="prod107">valueExpressionPrimary</link> ( <link linkend="prod108">timesOperator</link> <link linkend="prod107">valueExpressionPrimary</link> )* )</para></entry></row>
+( <link linkend="prod108">valueExpressionPrimary</link> ( <link linkend="prod109">timesOperator</link> <link linkend="prod108">valueExpressionPrimary</link> )* )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod108" xreflabel="timesOperator"/>timesOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod109" xreflabel="timesOperator"/>timesOperator</para></entry>
 <entry align="left" valign="top"><para>::= 
 ( &lt;STAR&gt; | &lt;SLASH&gt; )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod107" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod108" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
 <entry align="left" valign="top"><para>::= 
-( &lt;QMARK&gt; | &lt;POS_REF&gt; | <link linkend="prod109">literal</link> | ( &lt;LBRACE&gt; <link linkend="prod11">nonReserved</link> <link linkend="prod110">function</link> &lt;RBRACE&gt; ) | ( <link linkend="prod67">textAgg</link> ) | ( <link linkend="prod69">aggregateSymbol</link> ) | ( <link linkend="prod69">aggregateSymbol</link> ) | ( <link linkend="prod69">aggregateSymbol</link> ) | ( <link linkend="prod65">xmlAgg</link> ) | ( <link linkend="prod66">arrayAgg</link> ) | ( <link linkend="prod110">function</link> ) | ( &lt;ID&gt; ( &lt;LSBRACE&gt; <link linkend="prod82">intVal</link> &lt;RSBRACE&gt; )? ) | <link linkend="prod99">subquery</link> | ( &lt;LPAREN&gt; <link linkend="prod23">expression</link> &lt;RPAREN&gt; ( &lt;LSBRACE&gt; <link linkend="prod82">intVal</link> &lt;RSBRACE&gt; )? ) | <link linkend="prod111">searchedCaseExpression</link> | <link linkend="prod112">caseExpression</link> )</para></entry></row>
+( &lt;QMARK&gt; | &lt;POS_REF&gt; | <link linkend="prod110">literal</link> | ( &lt;LBRACE&gt; <link linkend="prod11">nonReserved</link> <link linkend="prod111">function</link> &lt;RBRACE&gt; ) | ( <link linkend="prod68">textAgg</link> ) | ( <link linkend="prod70">aggregateSymbol</link> ) | ( <link linkend="prod70">aggregateSymbol</link> ) | ( <link linkend="prod70">aggregateSymbol</link> ) | ( <link linkend="prod66">xmlAgg</link> ) | ( <link linkend="prod67">arrayAgg</link> ) | ( <link linkend="prod111">function</link> ) | ( &lt;ID&gt; ( &lt;LSBRACE&gt; <link linkend="prod83">intVal</link> &lt;RSBRACE&gt; )? ) | <link linkend="prod100">subquery</link> | ( &lt;LPAREN&gt; <link linkend="prod24">expression</link> &lt;RPAREN&gt; ( &lt;LSBRACE&gt; <link linkend="prod83">intVal</link> &lt;RSBRACE&gt; )? ) | <link linkend="prod112">searchedCaseExpression</link> | <link linkend="prod113">caseExpression</link> )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod112" xreflabel="caseExpression"/>caseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod113" xreflabel="caseExpression"/>caseExpression</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;CASE&gt; <link linkend="prod23">expression</link> ( &lt;WHEN&gt; <link linkend="prod23">expression</link> &lt;THEN&gt; <link linkend="prod23">expression</link> )+ ( &lt;ELSE&gt; <link linkend="prod23">expression</link> )? &lt;END&gt;</para></entry></row>
+&lt;CASE&gt; <link linkend="prod24">expression</link> ( &lt;WHEN&gt; <link linkend="prod24">expression</link> &lt;THEN&gt; <link linkend="prod24">expression</link> )+ ( &lt;ELSE&gt; <link linkend="prod24">expression</link> )? &lt;END&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod111" xreflabel="searchedCaseExpression"/>searchedCaseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod112" xreflabel="searchedCaseExpression"/>searchedCaseExpression</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;CASE&gt; ( &lt;WHEN&gt; <link linkend="prod34">criteria</link> &lt;THEN&gt; <link linkend="prod23">expression</link> )+ ( &lt;ELSE&gt; <link linkend="prod23">expression</link> )? &lt;END&gt;</para></entry></row>
+&lt;CASE&gt; ( &lt;WHEN&gt; <link linkend="prod35">criteria</link> &lt;THEN&gt; <link linkend="prod24">expression</link> )+ ( &lt;ELSE&gt; <link linkend="prod24">expression</link> )? &lt;END&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod110" xreflabel="function"/>function</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod111" xreflabel="function"/>function</para></entry>
 <entry align="left" valign="top"><para>::= 
-( ( &lt;CONVERT&gt; &lt;LPAREN&gt; <link linkend="prod23">expression</link> &lt;COMMA&gt; <link linkend="prod37">dataType</link> &lt;RPAREN&gt; ) | ( &lt;CAST&gt; &lt;LPAREN&gt; <link linkend="prod23">expression</link> &lt;AS&gt; <link linkend="prod37">dataType</link> &lt;RPAREN&gt; ) | ( <link linkend="prod11">nonReserved</link> &lt;LPAREN&gt; <link linkend="prod23">expression</link> &lt;COMMA&gt; <link linkend="prod113">stringConstant</link> &lt;RPAREN&gt; ) | ( <link linkend="prod11">nonReserved</link> &lt;LPAREN&gt; <link linkend="prod114">intervalType</link> &lt;COMMA&gt; <link linkend="prod23">expression</link> &lt;COMMA&gt; <link linkend="prod23">expression</link> &lt;RPAREN&gt; ) | <link linkend="prod115">queryString</link> | ( ( &lt;LEFT&gt; | &lt;RIGHT&gt; | &lt;CHAR&gt; | &lt;USER&gt; | &lt;YEAR&gt; | &lt;MONTH&gt; | &lt;HOUR&gt; | &lt;MINUTE&gt; | &lt;SECOND&gt; | &lt;XMLCONCAT&gt; | &lt;XMLCOMMENT&gt; ) &lt;LPAREN&gt; ( <link linkend="prod23">expression</link> !
 ( &lt;COMMA&gt; <link linkend="prod23">expression</link> )* )? &lt;RPAREN&gt; ) | ( ( &lt;INSERT&gt; ) &lt;LPAREN&gt; ( <link linkend="prod23">expression</link> ( &lt;COMMA&gt; <link linkend="prod23">expression</link> )* )? &lt;RPAREN&gt; ) | ( ( &lt;TRANSLATE&gt; ) &lt;LPAREN&gt; ( <link linkend="prod23">expression</link> ( &lt;COMMA&gt; <link linkend="prod23">expression</link> )* )? &lt;RPAREN&gt; ) | <link linkend="prod116">xmlParse</link> | <link linkend="prod117">xmlElement</link> | ( &lt;XMLPI&gt; &lt;LPAREN&gt; ( &lt;ID&gt; <link linkend="prod118">idExpression</link> | <link linkend="prod118">idExpression</link> ) ( &lt;COMMA&gt; <link linkend="prod23">expression</link> )? &lt;RPAREN&gt; ) | <link linkend="prod119">xmlForest</link> | <link linkend="prod80">xmlSerialize</link> | <link linkend="prod83">xmlQuery</link> | ( <link linkend="prod2">id</link> &lt;LPAREN&gt; ( <link linkend="prod23">expression</link> ( &lt;COMMA&gt; <link linkend="prod23">expression</link> )*!
  )? &lt;RPAREN&gt; ) )</para></entry></row>
+( ( &lt;CONVERT&gt; &lt;LPAREN&gt; <link linkend="prod24">expression</link> &lt;COMMA&gt; <link linkend="prod38">dataType</link> &lt;RPAREN&gt; ) | ( &lt;CAST&gt; &lt;LPAREN&gt; <link linkend="prod24">expression</link> &lt;AS&gt; <link linkend="prod38">dataType</link> &lt;RPAREN&gt; ) | ( <link linkend="prod11">nonReserved</link> &lt;LPAREN&gt; <link linkend="prod24">expression</link> &lt;COMMA&gt; <link linkend="prod114">stringConstant</link> &lt;RPAREN&gt; ) | ( <link linkend="prod11">nonReserved</link> &lt;LPAREN&gt; <link linkend="prod115">intervalType</link> &lt;COMMA&gt; <link linkend="prod24">expression</link> &lt;COMMA&gt; <link linkend="prod24">expression</link> &lt;RPAREN&gt; ) | <link linkend="prod116">queryString</link> | ( ( &lt;LEFT&gt; | &lt;RIGHT&gt; | &lt;CHAR&gt; | &lt;USER&gt; | &lt;YEAR&gt; | &lt;MONTH&gt; | &lt;HOUR&gt; | &lt;MINUTE&gt; | &lt;SECOND&gt; | &lt;XMLCONCAT&gt; | &lt;XMLCOMMENT&gt; ) &lt;LPAREN&gt; ( <link linkend="prod24">expression</link> !
 ( &lt;COMMA&gt; <link linkend="prod24">expression</link> )* )? &lt;RPAREN&gt; ) | ( ( &lt;INSERT&gt; ) &lt;LPAREN&gt; ( <link linkend="prod24">expression</link> ( &lt;COMMA&gt; <link linkend="prod24">expression</link> )* )? &lt;RPAREN&gt; ) | ( ( &lt;TRANSLATE&gt; ) &lt;LPAREN&gt; ( <link linkend="prod24">expression</link> ( &lt;COMMA&gt; <link linkend="prod24">expression</link> )* )? &lt;RPAREN&gt; ) | <link linkend="prod117">xmlParse</link> | <link linkend="prod118">xmlElement</link> | ( &lt;XMLPI&gt; &lt;LPAREN&gt; ( &lt;ID&gt; <link linkend="prod119">idExpression</link> | <link linkend="prod119">idExpression</link> ) ( &lt;COMMA&gt; <link linkend="prod24">expression</link> )? &lt;RPAREN&gt; ) | <link linkend="prod120">xmlForest</link> | <link linkend="prod81">xmlSerialize</link> | <link linkend="prod84">xmlQuery</link> | ( <link linkend="prod2">id</link> &lt;LPAREN&gt; ( <link linkend="prod24">expression</link> ( &lt;COMMA&gt; <link linkend="prod24">expression</link> )*!
  )? &lt;RPAREN&gt; ) )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod113" xreflabel="stringConstant"/>stringConstant</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod114" xreflabel="stringConstant"/>stringConstant</para></entry>
 <entry align="left" valign="top"><para>::= 
 <link linkend="prod1">stringVal</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod116" xreflabel="xmlParse"/>xmlParse</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod117" xreflabel="xmlParse"/>xmlParse</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;XMLPARSE&gt; &lt;LPAREN&gt; <link linkend="prod11">nonReserved</link> <link linkend="prod23">expression</link> ( <link linkend="prod11">nonReserved</link> )? &lt;RPAREN&gt;</para></entry></row>
+&lt;XMLPARSE&gt; &lt;LPAREN&gt; <link linkend="prod11">nonReserved</link> <link linkend="prod24">expression</link> ( <link linkend="prod11">nonReserved</link> )? &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod115" xreflabel="queryString"/>queryString</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod116" xreflabel="queryString"/>queryString</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod11">nonReserved</link> &lt;LPAREN&gt; <link linkend="prod23">expression</link> ( &lt;COMMA&gt; <link linkend="prod64">derivedColumn</link> )* &lt;RPAREN&gt;</para></entry></row>
+<link linkend="prod11">nonReserved</link> &lt;LPAREN&gt; <link linkend="prod24">expression</link> ( &lt;COMMA&gt; <link linkend="prod65">derivedColumn</link> )* &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod117" xreflabel="xmlElement"/>xmlElement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod118" xreflabel="xmlElement"/>xmlElement</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;XMLELEMENT&gt; &lt;LPAREN&gt; ( &lt;ID&gt; <link linkend="prod2">id</link> | <link linkend="prod2">id</link> ) ( &lt;COMMA&gt; <link linkend="prod84">xmlNamespaces</link> )? ( &lt;COMMA&gt; <link linkend="prod120">xmlAttributes</link> )? ( &lt;COMMA&gt; <link linkend="prod23">expression</link> )* &lt;RPAREN&gt;</para></entry></row>
+&lt;XMLELEMENT&gt; &lt;LPAREN&gt; ( &lt;ID&gt; <link linkend="prod2">id</link> | <link linkend="prod2">id</link> ) ( &lt;COMMA&gt; <link linkend="prod85">xmlNamespaces</link> )? ( &lt;COMMA&gt; <link linkend="prod121">xmlAttributes</link> )? ( &lt;COMMA&gt; <link linkend="prod24">expression</link> )* &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod120" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod121" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;XMLATTRIBUTES&gt; &lt;LPAREN&gt; <link linkend="prod64">derivedColumn</link> ( &lt;COMMA&gt; <link linkend="prod64">derivedColumn</link> )* &lt;RPAREN&gt;</para></entry></row>
+&lt;XMLATTRIBUTES&gt; &lt;LPAREN&gt; <link linkend="prod65">derivedColumn</link> ( &lt;COMMA&gt; <link linkend="prod65">derivedColumn</link> )* &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod119" xreflabel="xmlForest"/>xmlForest</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod120" xreflabel="xmlForest"/>xmlForest</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;XMLFOREST&gt; &lt;LPAREN&gt; ( <link linkend="prod84">xmlNamespaces</link> &lt;COMMA&gt; )? <link linkend="prod64">derivedColumn</link> ( &lt;COMMA&gt; <link linkend="prod64">derivedColumn</link> )* &lt;RPAREN&gt;</para></entry></row>
+&lt;XMLFOREST&gt; &lt;LPAREN&gt; ( <link linkend="prod85">xmlNamespaces</link> &lt;COMMA&gt; )? <link linkend="prod65">derivedColumn</link> ( &lt;COMMA&gt; <link linkend="prod65">derivedColumn</link> )* &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod84" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
 <entry align="left" valign="top"><para>::= 
-&lt;XMLNAMESPACES&gt; &lt;LPAREN&gt; <link linkend="prod121">namespaceItem</link> ( &lt;COMMA&gt; <link linkend="prod121">namespaceItem</link> )* &lt;RPAREN&gt;</para></entry></row>
+&lt;XMLNAMESPACES&gt; &lt;LPAREN&gt; <link linkend="prod122">namespaceItem</link> ( &lt;COMMA&gt; <link linkend="prod122">namespaceItem</link> )* &lt;RPAREN&gt;</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod121" xreflabel="namespaceItem"/>namespaceItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod122" xreflabel="namespaceItem"/>namespaceItem</para></entry>
 <entry align="left" valign="top"><para>::= 
 ( <link linkend="prod1">stringVal</link> &lt;AS&gt; <link linkend="prod2">id</link> )</para></entry></row>
 <row>
@@ -870,23 +873,23 @@
 <entry align="left" valign="top"><para>::= 
 ( &lt;DEFAULT_KEYWORD&gt; <link linkend="prod1">stringVal</link> )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod118" xreflabel="idExpression"/>idExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod119" xreflabel="idExpression"/>idExpression</para></entry>
 <entry align="left" valign="top"><para>::= 
 <link linkend="prod2">id</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod21" xreflabel="dataTypeString"/>dataTypeString</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod22" xreflabel="dataTypeString"/>dataTypeString</para></entry>
 <entry align="left" valign="top"><para>::= 
 ( &lt;STRING&gt; | &lt;VARCHAR&gt; | &lt;BOOLEAN&gt; | &lt;BYTE&gt; | &lt;TINYINT&gt; | &lt;SHORT&gt; | &lt;SMALLINT&gt; | &lt;CHAR&gt; | &lt;INTEGER&gt; | &lt;LONG&gt; | &lt;BIGINT&gt; | &lt;BIGINTEGER&gt; | &lt;FLOAT&gt; | &lt;REAL&gt; | &lt;DOUBLE&gt; | &lt;BIGDECIMAL&gt; | &lt;DECIMAL&gt; | &lt;DATE&gt; | &lt;TIME&gt; | &lt;TIMESTAMP&gt; | &lt;OBJECT&gt; | &lt;BLOB&gt; | &lt;CLOB&gt; | &lt;XML&gt; )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod37" xreflabel="dataType"/>dataType</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod38" xreflabel="dataType"/>dataType</para></entry>
 <entry align="left" valign="top"><para>::= 
-<link linkend="prod21">dataTypeString</link></para></entry></row>
+<link linkend="prod22">dataTypeString</link></para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod114" xreflabel="intervalType"/>intervalType</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod115" xreflabel="intervalType"/>intervalType</para></entry>
 <entry align="left" valign="top"><para>::= 
 ( <link linkend="prod11">nonReserved</link> )</para></entry></row>
 <row>
-<entry align="right" valign="top"><para><anchor id="prod109" xreflabel="literal"/>literal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod110" xreflabel="literal"/>literal</para></entry>
 <entry align="left" valign="top"><para>::= 
 ( <link linkend="prod1">stringVal</link> | &lt;INTEGERVAL&gt; | &lt;FLOATVAL&gt; | &lt;FALSE&gt; | &lt;TRUE&gt; | &lt;UNKNOWN&gt; | &lt;NULL&gt; | ( ( &lt;BOOLEANTYPE&gt; | &lt;TIMESTAMPTYPE&gt; | &lt;DATETYPE&gt; | &lt;TIMETYPE&gt; ) <link linkend="prod1">stringVal</link> &lt;RBRACE&gt; ) )</para></entry></row>
 </tbody>

Modified: trunk/documentation/reference/src/main/docbook/en-US/content/system_schema.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/system_schema.xml	2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/system_schema.xml	2011-05-03 16:21:08 UTC (rev 3138)
@@ -1795,7 +1795,7 @@
 			</section>
 		</section>
         <warning>
-		  <para>The OID column is is guranteed to be unique/consistent only for given version running instance of a VDB. If a different version of
+		  <para>The OID column is guranteed to be unique/consistent only for given version running instance of a VDB. If a different version of
           the VDB is deployed, these IDs are not guranteed to be the same or unique across both versions of the VDB. Dynamic VDB OIDs are not cluster safe.</para>
 	  </warning>
 	</section>
@@ -1804,17 +1804,17 @@
 		<section>
     	<title>SYS.getXMLSchemas</title>
     	<para>Returns a resultset with a single column, schema, containing the schemas as clobs.</para>
-        <para><synopsis>SYS.getXMLSchemas(in string document)</synopsis></para>
+        <para><synopsis>SYS.getXMLSchemas(document in string) returns schema string</synopsis></para>
         </section>
         <section>
     	<title>SYSADMIN.refreshMatView</title>
     	<para>Returns integer RowsUpdated. -1 indicates a load is in progress, otherwise the cardinality of the table is returned.  See the Caching Guide for more.</para>
-        <para><synopsis>SYSADMIN.refreshMatView(return integer RowsUpdated, in string ViewName, in boolean Invalidate)</synopsis></para>
+        <para><synopsis>SYSADMIN.refreshMatView(RowsUpdated return integer, ViewName in string, Invalidate in boolean)</synopsis></para>
         </section>
         <section>
     	<title>SYSADMIN.refreshMatViewRow</title>
     	<para>Returns integer RowsUpdated. -1 indicates the materialized table is currently invalid. 0 indicates that the specified row did not exist in the live data query or in the materialized table.  See the Caching Guide for more.</para>
-        <para><synopsis>SYSADMIN.refreshMatViewRow(return integer RowsUpdated, in string ViewName, in object Key)</synopsis></para>
+        <para><synopsis>SYSADMIN.refreshMatViewRow(RowsUpdated return integer, ViewName in string, Key in object)</synopsis></para>
         </section>
         <section>
         	<title>Metadata Procedures</title>
@@ -1822,24 +1822,25 @@
 	        <section>
 	    	<title>SYSADMIN.setTableStats</title>
 	    	<para>Set statistics for the given table.</para>
-	        <para><synopsis>SYSADMIN.setTableStats(in string TableName, in integer Cardinality)</synopsis></para>
+	        <para><synopsis>SYSADMIN.setTableStats(TableName in string, Cardinality in integer)</synopsis></para>
 	        </section>
 	        <section>
 	    	<title>SYSADMIN.setColumnStats</title>
 	    	<para>Set statistics for the given column.</para>
-	        <para><synopsis>SYSADMIN.setColumnStats(in string TableName, in string ColumnName, in integer DistinctCount, in integer NullCount, in string Max, in string Min)</synopsis></para>
-	        <para>Passing a null stat value will leave corresponding metadata value unchanged.</para>
+	        <para><synopsis>SYSADMIN.setColumnStats(TableName in string, ColumnName in string, DistinctCount in integer, NullCount in integer, Max in string, Min in string)</synopsis></para>
+	        <para>All stat values are nullable. Passing a null stat value will leave corresponding metadata value unchanged.</para>
 	        </section>
 	        <section>
 	    	<title>SYSADMIN.setProperty</title>
 	    	<para>Set an extension metadata property for the given record.  Extension metadata is typically used by <xref linkend="translators"/>.</para>
-	        <para><synopsis>SYSADMIN.setProperty(return clob OldValue, in string Uid, in string Name, in clob Value)</synopsis></para>
+	        <para><synopsis>SYSADMIN.setProperty(OldValue return clob, Uid in string, Name in string, Value in clob)</synopsis></para>
 	        <para>Setting a value to null will remove the property.</para>
 	        <example lang="sql">
 	        	<title>Example Property Set</title>
 	        	<programlisting>CALL SYSADMIN.setProperty(uid=>(SELECT uid FROM TABLES WHERE name='tab'), name=>'some name', value=>'some value')</programlisting>
 	        	<para>This will set the property 'some name'='some value' on table tab.</para>
 	        </example>
+	        <para>The use of this procedure will not trigger replanning of associated prepared plans.</para>
 	        </section>
         </section>
 	</section>

Modified: trunk/documentation/reference/src/main/docbook/en-US/content/translators.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/translators.xml	2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/translators.xml	2011-05-03 16:21:08 UTC (rev 3138)
@@ -63,7 +63,7 @@
         <table>
             <title>Base Execution Properties - shared by all translators</title>
             <tgroup cols="3">
-                <colspec colwidth="3*" />
+                <colspec colwidth="4*" />
                 <colspec colwidth="6*" />
                 <colspec colwidth="2*" />
                 <thead>
@@ -343,7 +343,7 @@
             <table>
                 <title>Execution Properties - shared by all JDBC Translators</title>
                 <tgroup cols="3">
-                    <colspec colwidth="3*" />
+                    <colspec colwidth="4*" />
                     <colspec colwidth="6*" />
                     <colspec colwidth="2*" />
                     <thead>
@@ -391,7 +391,7 @@
         <table>
             <title>Importer Properties - shared by all JDBC Translators</title>
             <tgroup cols="3">
-            <colspec colwidth="3*" />
+            <colspec colwidth="4*" />
             <colspec colwidth="6*" />
             <colspec colwidth="2*" />
                 <thead>
@@ -818,7 +818,7 @@
                     in the query, and the value is 'true' the connector will call queryAll.
                     </para>
                     
-                    <programlisting language="SQL"><![CDATA[select * from Contact where isDeleted = true;</programlisting>
+                    <programlisting language="SQL"><![CDATA[select * from Contact where isDeleted = true;]]></programlisting>
                     
                     <para>
                     If the isDeleted column is used as a parameter in the query,
@@ -985,7 +985,7 @@
             <link linkend="xmltable">XMLTABLE</link> table functions to use CSV or XML 
             formated data.
             </para>
-            
+            <note><para>Setting the proper binding value on the translator is recommended as it removes the need for callers to pass an explict value.  If your service is actually uses SOAP11, but the binding used SOAP12 you will receive execution failures.</para></note>
             <table>
                 <title>Execution Properties</title>
                 <tgroup cols="3">
@@ -1003,7 +1003,6 @@
                         <row>
                             <entry>DefaultBinding</entry>
                             <entry>The binding that should be used if one is not specified.  Can be one of HTTP, SOAP11, or SOAP12
-                            <note><para>Setting the proper binding value on the translator is recommended as it removes the need for callers to pass an explict value.  If your service is actually uses SOAP11, but the binding used SOAP12 you will receive execution failures.</para></note>
                             </entry>
                             <entry>SOAP12</entry>
                         </row>

Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java	2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java	2011-05-03 16:21:08 UTC (rev 3138)
@@ -378,18 +378,13 @@
 						if (target == null) {
 							throw new TeiidProcessingException(QueryPlugin.Util.getString("DataTierManagerImpl.unknown_uuid", uuid)); //$NON-NLS-1$
 						}
-						if (value == null) {
-							result = target.setProperty(key, null);
-						} else {
-							strVal = ObjectConverterUtil.convertToString(value.getCharacterStream());
-							result = target.setProperty(key, strVal);
+						if (this.metadataRepository != null) {
+							this.metadataRepository.setProperty(vdbName, vdbVersion, target, key, strVal);
 						}
+						result = target.setProperty(key, strVal);
 						if (eventDistributor != null) {
 							eventDistributor.setProperty(vdbName, vdbVersion, uuid, key, strVal);
 						}
-						if (this.metadataRepository != null) {
-							this.metadataRepository.setProperty(vdbName, vdbVersion, target, key, strVal);
-						}
 						if (result == null) {
 							rows.add(Arrays.asList((Clob)null));
 						} else {
@@ -420,42 +415,31 @@
 					Integer nullVals = (Integer)((Constant)proc.getParameter(4).getExpression()).getValue();
 					String max = (String) ((Constant)proc.getParameter(5).getExpression()).getValue();
 					String min = (String) ((Constant)proc.getParameter(6).getExpression()).getValue();
-					if (distinctVals != null) {
-						c.setDistinctValues(distinctVals);
-					}
-					if (nullVals != null) {
-						c.setNullValues(nullVals);					
-					}
-					if (max != null) {
-						c.setMaximumValue(max);
-					}
-					if (min != null) {
-						c.setMinimumValue(min);
-					}
 					ColumnStats columnStats = new ColumnStats();
 					columnStats.setDistinctValues(distinctVals);
 					columnStats.setNullValues(nullVals);
 					columnStats.setMaximumValue(max);
 					columnStats.setMinimumValue(min);
-					if (eventDistributor != null) {
-						eventDistributor.setColumnStats(vdbName, vdbVersion, table.getParent().getName(), table.getName(), columnName, columnStats);
-					}
 					if (this.metadataRepository != null) {
 						this.metadataRepository.setColumnStats(vdbName, vdbVersion, c, columnStats);
 					}
+					c.setColumnStats(columnStats);
+					if (eventDistributor != null) {
+						eventDistributor.setColumnStats(vdbName, vdbVersion, table.getParent().getName(), table.getName(), columnName, columnStats);
+					}
 					break;
 				case SETTABLESTATS:
 					Constant val = (Constant)proc.getParameter(2).getExpression();
 					int cardinality = (Integer)val.getValue();
-					table.setCardinality(cardinality);
 					TableStats tableStats = new TableStats();
 					tableStats.setCardinality(cardinality);
-					if (eventDistributor != null) {
-						eventDistributor.setTableStats(vdbName, vdbVersion, table.getParent().getName(), table.getName(), tableStats);
-					}
 					if (this.metadataRepository != null) {
 						this.metadataRepository.setTableStats(vdbName, vdbVersion, table, tableStats);
 					}
+					table.setCardinality(cardinality);
+					if (eventDistributor != null) {
+						eventDistributor.setTableStats(vdbName, vdbVersion, table.getParent().getName(), table.getName(), tableStats);
+					}
 					break;
 				}
 				table.setLastModified(System.currentTimeMillis());

Modified: trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java	2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java	2011-05-03 16:21:08 UTC (rev 3138)
@@ -60,13 +60,13 @@
     		VDBMetaData vdb = workContext.getVDB();
     		Table t = (Table)obj.getTarget().getMetadataID();
     		String sql = obj.getDefinition().toString();
+			if (pdm.getMetadataRepository() != null) {
+				pdm.getMetadataRepository().setViewDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t, sql);
+			}
     		alterView(vdb, t, sql);
     		if (pdm.getEventDistributor() != null) {
     			pdm.getEventDistributor().setViewDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t.getParent().getName(), t.getName(), sql);
 			}
-			if (pdm.getMetadataRepository() != null) {
-				pdm.getMetadataRepository().setViewDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t, sql);
-			}
     	}
 
     	@Override
@@ -74,13 +74,13 @@
     		VDBMetaData vdb = workContext.getVDB();
     		Procedure p = (Procedure)obj.getTarget().getMetadataID();
     		String sql = obj.getDefinition().toString();
+			if (pdm.getMetadataRepository() != null) {
+				pdm.getMetadataRepository().setProcedureDefinition(workContext.getVdbName(), workContext.getVdbVersion(), p, sql);
+			}
     		alterProcedureDefinition(vdb, p, sql);
     		if (pdm.getEventDistributor() != null) {
     			pdm.getEventDistributor().setProcedureDefinition(workContext.getVdbName(), workContext.getVdbVersion(), p.getParent().getName(), p.getName(), sql);
 			}
-			if (pdm.getMetadataRepository() != null) {
-				pdm.getMetadataRepository().setProcedureDefinition(workContext.getVdbName(), workContext.getVdbVersion(), p, sql);
-			}
     	}
 
     	@Override
@@ -101,10 +101,6 @@
     		} else if (getPlanForEvent(t, event) == null) {
 				throw new TeiidRuntimeException(new TeiidProcessingException(QueryPlugin.Util.getString("DdlPlan.event_not_exists", t.getName(), obj.getEvent()))); //$NON-NLS-1$
     		}
-    		alterInsteadOfTrigger(vdb, t, sql, obj.getEnabled(), event);
-    		if (pdm.getEventDistributor() != null) {
-    			pdm.getEventDistributor().setInsteadOfTriggerDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t.getParent().getName(), t.getName(), obj.getEvent(), sql, obj.getEnabled());
-			}
 			if (pdm.getMetadataRepository() != null) {
 				if (sql != null) {
 					pdm.getMetadataRepository().setInsteadOfTriggerDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t, obj.getEvent(), sql);
@@ -112,6 +108,10 @@
 					pdm.getMetadataRepository().setInsteadOfTriggerEnabled(workContext.getVdbName(), workContext.getVdbVersion(), t, obj.getEvent(), obj.getEnabled());
 				}
 			}
+    		alterInsteadOfTrigger(vdb, t, sql, obj.getEnabled(), event);
+    		if (pdm.getEventDistributor() != null) {
+    			pdm.getEventDistributor().setInsteadOfTriggerDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t.getParent().getName(), t.getName(), obj.getEvent(), sql, obj.getEnabled());
+			}
     	}
     }
 

Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java	2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java	2011-05-03 16:21:08 UTC (rev 3138)
@@ -114,6 +114,7 @@
 		int vdbVersion = cvdb.getVDB().getVersion();
 		LinkedList<MetadataStore> allStores = new LinkedList<MetadataStore>(stores.getStores());
 		allStores.addAll(Arrays.asList(cvdb.getAdditionalStores()));
+		metadataRepository.startLoadVdb(vdbName, vdbVersion);
 		for (MetadataStore metadataStore : allStores) {
 			Collection<AbstractMetadataRecord> records = new LinkedHashSet<AbstractMetadataRecord>();
 			for (Schema schema : metadataStore.getSchemas().values()) {
@@ -187,6 +188,7 @@
 				}
 			}
 		}
+		metadataRepository.endLoadVdb(vdbName, vdbVersion);
 	}
 
 	public VDBMetaData getVDB(String name, int version) {



More information about the teiid-commits mailing list