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<String, String> 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><jboss-install>/server/<profile>/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><jboss-install>/server/<profile>/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> )
<EOF></para></entry></row>
+( <link linkend="prod4">createUpdateProcedure</link> | <link
linkend="prod9">forEachRowTriggerAction</link> )
<EOF></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>::=
-<ALTER> ( ( <link linkend="prod11">nonReserved</link>
<link linkend="prod2">id</link> <AS> <link
linkend="prod12">queryExpression</link> ) | ( <PROCEDURE>
<link linkend="prod2">id</link> <AS> <link
linkend="prod13">block</link> ) | ( <TRIGGER>
<ON> <link linkend="prod2">id</link> <link
linkend="prod11">nonReserved</link> <OF> (
<INSERT> | <UPDATE> | <DELETE> )
<AS> <link linkend="prod9">triggerAction</link> )
)</para></entry></row>
+<CREATE> <TRIGGER> <ON> <link
linkend="prod2">id</link> <link
linkend="prod11">nonReserved</link> <OF> (
<INSERT> | <UPDATE> | <DELETE> )
<AS> <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>::=
-<FOR> <EACH> <ROW> <link
linkend="prod13">block</link></para></entry></row>
+<ALTER> ( ( <link linkend="prod11">nonReserved</link>
<link linkend="prod2">id</link> <AS> <link
linkend="prod13">queryExpression</link> ) | ( <PROCEDURE>
<link linkend="prod2">id</link> <AS> <link
linkend="prod14">block</link> ) | ( <TRIGGER>
<ON> <link linkend="prod2">id</link> <link
linkend="prod11">nonReserved</link> <OF> (
<INSERT> | <UPDATE> | <DELETE> ) ( (
<AS> <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>::=
+<FOR> <EACH> <ROW> <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>::=
<DROP> <TABLE> <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>::=
-<CREATE> <LOCAL> <TEMPORARY>
<TABLE> <link linkend="prod2">id</link>
<LPAREN> <link linkend="prod20">tableElement</link> (
<COMMA> <link linkend="prod20">tableElement</link> )*
( <COMMA> <PRIMARY> <link
linkend="prod11">nonReserved</link> <LPAREN> <link
linkend="prod2">id</link> ( <COMMA> <link
linkend="prod2">id</link> )* <RPAREN> )?
<RPAREN></para></entry></row>
+<CREATE> <LOCAL> <TEMPORARY>
<TABLE> <link linkend="prod2">id</link>
<LPAREN> <link linkend="prod21">tableElement</link> (
<COMMA> <link linkend="prod21">tableElement</link> )*
( <COMMA> <PRIMARY> <link
linkend="prod11">nonReserved</link> <LPAREN> <link
linkend="prod2">id</link> ( <COMMA> <link
linkend="prod2">id</link> )* <RPAREN> )?
<RPAREN></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> ) ( <NOT>
<NULL> )?</para></entry></row>
+<link linkend="prod2">id</link> ( <link
linkend="prod22">dataTypeString</link> | <link
linkend="prod11">nonReserved</link> ) ( <NOT>
<NULL> )?</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>::=
-<ERROR> <link
linkend="prod23">expression</link></para></entry></row>
+<ERROR> <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> )
<SEMICOLON></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> )
<SEMICOLON></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> | ( <BEGIN>
( <link linkend="prod24">statement</link> )* <END> )
)</para></entry></row>
+( <link linkend="prod25">statement</link> | ( <BEGIN>
( <link linkend="prod25">statement</link> )* <END> )
)</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>::=
<BREAK></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>::=
<CONTINUE></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>::=
-<WHILE> <LPAREN> <link
linkend="prod34">criteria</link> <RPAREN> <link
linkend="prod13">block</link></para></entry></row>
+<WHILE> <LPAREN> <link
linkend="prod35">criteria</link> <RPAREN> <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>::=
-<LOOP> <ON> <LPAREN> <link
linkend="prod12">queryExpression</link> <RPAREN>
<AS> <link linkend="prod2">id</link> <link
linkend="prod13">block</link></para></entry></row>
+<LOOP> <ON> <LPAREN> <link
linkend="prod13">queryExpression</link> <RPAREN>
<AS> <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>::=
-<IF> <LPAREN> <link
linkend="prod34">criteria</link> <RPAREN> <link
linkend="prod13">block</link> ( <ELSE> <link
linkend="prod13">block</link>
)?</para></entry></row>
+<IF> <LPAREN> <link
linkend="prod35">criteria</link> <RPAREN> <link
linkend="prod14">block</link> ( <ELSE> <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>::=
( ( <EQ> | <NE> | <NE2> | <LE> |
<GE> | <LT> | <GT> | <IN> |
<LIKE> | ( <IS> <NULL> ) |
<BETWEEN> ) )? <CRITERIA> ( <ON>
<LPAREN> <link linkend="prod2">id</link> (
<COMMA> <link linkend="prod2">id</link> )*
<RPAREN> )?</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>::=
-<HAS> <link
linkend="prod35">criteriaSelector</link></para></entry></row>
+<HAS> <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>::=
-<DECLARE> <link linkend="prod37">dataType</link>
<link linkend="prod2">id</link> ( ( <link
linkend="prod11">nonReserved</link> | <EQ> ) <link
linkend="prod38">assignStatementOperand</link>
)?</para></entry></row>
+<DECLARE> <link linkend="prod38">dataType</link>
<link linkend="prod2">id</link> ( ( <link
linkend="prod11">nonReserved</link> | <EQ> ) <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> | <EQ> ) <link
linkend="prod38">assignStatementOperand</link></para></entry></row>
+<link linkend="prod2">id</link> ( <link
linkend="prod11">nonReserved</link> | <EQ> ) <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> | <EQ> ) <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> | <EQ> ) <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>::=
-<TRANSLATE> <link
linkend="prod35">criteriaSelector</link> ( <WITH>
<LPAREN> <link linkend="prod2">id</link>
<EQ> <link linkend="prod23">expression</link> (
<COMMA> <link linkend="prod2">id</link>
<EQ> <link linkend="prod23">expression</link> )*
<RPAREN> )?</para></entry></row>
+<TRANSLATE> <link
linkend="prod36">criteriaSelector</link> ( <WITH>
<LPAREN> <link linkend="prod2">id</link>
<EQ> <link linkend="prod24">expression</link> (
<COMMA> <link linkend="prod2">id</link>
<EQ> <link linkend="prod24">expression</link> )*
<RPAREN> )?</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor
id="prod4"
xreflabel="createUpdateProcedure"/>createUpdateProcedure</para></entry>
<entry align="left" valign="top"><para>::=
-<CREATE> ( <VIRTUAL> )? ( <UPDATE> )?
<PROCEDURE> <link
linkend="prod13">block</link></para></entry></row>
+<CREATE> ( <VIRTUAL> )? ( <UPDATE> )?
<PROCEDURE> <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>::=
-( <EXECUTE> | <EXEC> ) ( ( <STRING> |
<IMMEDIATE> ) )? <link
linkend="prod23">expression</link> ( <AS> <link
linkend="prod41">createElementsWithTypes</link> ( <INTO>
<link linkend="prod2">id</link> )? )? ( <USING>
<link linkend="prod42">setClauseList</link> )? (
<UPDATE> ( ( <INTEGERVAL> ) | ( <STAR> ) )
)?</para></entry></row>
+( <EXECUTE> | <EXEC> ) ( ( <STRING> |
<IMMEDIATE> ) )? <link
linkend="prod24">expression</link> ( <AS> <link
linkend="prod42">createElementsWithTypes</link> ( <INTO>
<link linkend="prod2">id</link> )? )? ( <USING>
<link linkend="prod43">setClauseList</link> )? (
<UPDATE> ( ( <INTEGERVAL> ) | ( <STAR> ) )
)?</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> <EQ> (
<COMMA> <link linkend="prod2">id</link>
<EQ> )*</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> ( <COMMA> <link
linkend="prod2">id</link> <link
linkend="prod21">dataTypeString</link>
)*</para></entry></row>
+<link linkend="prod2">id</link> <link
linkend="prod22">dataTypeString</link> ( <COMMA> <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>::=
-<LBRACE> ( <QMARK> <EQ> )? <CALL>
<link linkend="prod2">id</link> ( <LPAREN> ( <link
linkend="prod43">executeUnnamedParams</link> ) <RPAREN>
)? <RBRACE> ( <link linkend="prod44">option</link>
)?</para></entry></row>
+<LBRACE> ( <QMARK> <EQ> )? <CALL>
<link linkend="prod2">id</link> ( <LPAREN> ( <link
linkend="prod44">executeUnnamedParams</link> ) <RPAREN>
)? <RBRACE> ( <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>::=
-( ( <EXEC> | <EXECUTE> | <CALL> ) <link
linkend="prod2">id</link> <LPAREN> ( <link
linkend="prod45">executeNamedParams</link> | <link
linkend="prod43">executeUnnamedParams</link> ) <RPAREN> )
( <link linkend="prod44">option</link>
)?</para></entry></row>
+( ( <EXEC> | <EXECUTE> | <CALL> ) <link
linkend="prod2">id</link> <LPAREN> ( <link
linkend="prod46">executeNamedParams</link> | <link
linkend="prod44">executeUnnamedParams</link> ) <RPAREN> )
( <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> ( <COMMA>
<link linkend="prod23">expression</link> )*
)?</para></entry></row>
+( <link linkend="prod24">expression</link> ( <COMMA>
<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> <EQ> (
<GT> )? <link linkend="prod23">expression</link> (
<COMMA> <link linkend="prod2">id</link>
<EQ> ( <GT> )? <link
linkend="prod23">expression</link> )*
)</para></entry></row>
+( <link linkend="prod2">id</link> <EQ> (
<GT> )? <link linkend="prod24">expression</link> (
<COMMA> <link linkend="prod2">id</link>
<EQ> ( <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>::=
-<INSERT> <INTO> <link
linkend="prod2">id</link> ( <link
linkend="prod46">columnList</link> )? ( ( <VALUES>
<link linkend="prod47">rowValues</link> ) | ( <link
linkend="prod12">queryExpression</link> ) ) ( <link
linkend="prod44">option</link>
)?</para></entry></row>
+<INSERT> <INTO> <link
linkend="prod2">id</link> ( <link
linkend="prod47">columnList</link> )? ( ( <VALUES>
<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>::=
<LPAREN> <link linkend="prod2">id</link> (
<COMMA> <link linkend="prod2">id</link> )*
<RPAREN></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>::=
-<LPAREN> <link linkend="prod23">expression</link> (
<COMMA> <link linkend="prod23">expression</link> )*
<RPAREN></para></entry></row>
+<LPAREN> <link linkend="prod24">expression</link> (
<COMMA> <link linkend="prod24">expression</link> )*
<RPAREN></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>::=
-<UPDATE> <link linkend="prod2">id</link>
<SET> <link linkend="prod42">setClauseList</link> (
<link linkend="prod48">where</link> )? ( <link
linkend="prod44">option</link>
)?</para></entry></row>
+<UPDATE> <link linkend="prod2">id</link>
<SET> <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>::=
-<DELETE> <FROM> <link
linkend="prod2">id</link> ( <link
linkend="prod48">where</link> )? ( <link
linkend="prod44">option</link>
)?</para></entry></row>
+<DELETE> <FROM> <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>::=
-( <WITH> <link
linkend="prod49">withListElement</link> ( <COMMA>
<link linkend="prod49">withListElement</link> )* )? <link
linkend="prod50">queryExpressionBody</link></para></entry></row>
+( <WITH> <link
linkend="prod50">withListElement</link> ( <COMMA>
<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> )? <AS>
<LPAREN> <link linkend="prod12">queryExpression</link>
<RPAREN></para></entry></row>
+<link linkend="prod2">id</link> ( <link
linkend="prod47">columnList</link> )? <AS>
<LPAREN> <link linkend="prod13">queryExpression</link>
<RPAREN></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> ( ( <UNION> |
<EXCEPT> ) ( <ALL> | <DISTINCT> )? <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> ( ( <UNION> |
<EXCEPT> ) ( <ALL> | <DISTINCT> )? <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> (
<INTERSECT> ( <ALL> | <DISTINCT> )? <link
linkend="prod54">queryPrimary</link>
)*</para></entry></row>
+<link linkend="prod55">queryPrimary</link> (
<INTERSECT> ( <ALL> | <DISTINCT> )? <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> | ( <TABLE>
<link linkend="prod2">id</link> ) | ( <LPAREN>
<link linkend="prod50">queryExpressionBody</link>
<RPAREN> ) )</para></entry></row>
+( <link linkend="prod56">query</link> | ( <TABLE>
<link linkend="prod2">id</link> ) | ( <LPAREN>
<link linkend="prod51">queryExpressionBody</link>
<RPAREN> ) )</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>::=
<INTO> ( <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>::=
-<SELECT> ( <ALL> | ( <DISTINCT> ) )? (
<STAR> | ( <link linkend="prod61">selectSymbol</link>
( <COMMA> <link linkend="prod61">selectSymbol</link>
)* ) )</para></entry></row>
+<SELECT> ( <ALL> | ( <DISTINCT> ) )? (
<STAR> | ( <link linkend="prod62">selectSymbol</link>
( <COMMA> <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> ( ( <AS>
)? <link linkend="prod2">id</link> )?
)</para></entry></row>
+( <link linkend="prod24">expression</link> ( ( <AS>
)? <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> ( <AS>
<link linkend="prod2">id</link> )?
)</para></entry></row>
+( <link linkend="prod24">expression</link> ( <AS>
<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>::=
<ALL_IN_GROUP></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>::=
-<XMLAGG> <LPAREN> <link
linkend="prod23">expression</link> ( <link
linkend="prod52">orderby</link> )?
<RPAREN></para></entry></row>
+<XMLAGG> <LPAREN> <link
linkend="prod24">expression</link> ( <link
linkend="prod53">orderby</link> )?
<RPAREN></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>::=
-<ARRAY_AGG> <LPAREN> <link
linkend="prod23">expression</link> ( <link
linkend="prod52">orderby</link> )?
<RPAREN></para></entry></row>
+<ARRAY_AGG> <LPAREN> <link
linkend="prod24">expression</link> ( <link
linkend="prod53">orderby</link> )?
<RPAREN></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> <LPAREN>
<FOR> <link linkend="prod64">derivedColumn</link> (
<COMMA> <link linkend="prod64">derivedColumn</link> )*
( <ID> <link linkend="prod68">charVal</link> )? ( (
<ID> <link linkend="prod68">charVal</link> ) )? (
<ID> )? ( ( <ID> <link
linkend="prod2">id</link> ) )? ( <link
linkend="prod52">orderby</link> )?
<RPAREN></para></entry></row>
+<link linkend="prod11">nonReserved</link> <LPAREN>
<FOR> <link linkend="prod65">derivedColumn</link> (
<COMMA> <link linkend="prod65">derivedColumn</link> )*
( <ID> <link linkend="prod69">charVal</link> )? ( (
<ID> <link linkend="prod69">charVal</link> ) )? (
<ID> )? ( ( <ID> <link
linkend="prod2">id</link> ) )? ( <link
linkend="prod53">orderby</link> )?
<RPAREN></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>
<LPAREN> <STAR> <RPAREN> ) | ( ( <link
linkend="prod11">nonReserved</link> | <ANY> |
<SOME> ) <LPAREN> ( <DISTINCT> |
<ALL> )? <link linkend="prod23">expression</link>
<RPAREN> ) )</para></entry></row>
+( ( <link linkend="prod11">nonReserved</link>
<LPAREN> <STAR> <RPAREN> ) | ( ( <link
linkend="prod11">nonReserved</link> | <ANY> |
<SOME> ) <LPAREN> ( <DISTINCT> |
<ALL> )? <link linkend="prod24">expression</link>
<RPAREN> ) )</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>::=
-<FROM> ( <link linkend="prod70">tableReference</link>
( <COMMA> <link linkend="prod70">tableReference</link>
)* )</para></entry></row>
+<FROM> ( <link linkend="prod71">tableReference</link>
( <COMMA> <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>::=
-( ( <LBRACE> <link
linkend="prod11">nonReserved</link> <link
linkend="prod71">joinedTable</link> <RBRACE> ) | <link
linkend="prod71">joinedTable</link>
)</para></entry></row>
+( ( <LBRACE> <link
linkend="prod11">nonReserved</link> <link
linkend="prod72">joinedTable</link> <RBRACE> ) | <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>::=
-( ( <CROSS> | <UNION> ) <JOIN> <link
linkend="prod72">tablePrimary</link>
)</para></entry></row>
+( ( <CROSS> | <UNION> ) <JOIN> <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>::=
-( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> (
<OUTER> )? ) | ( <FULL> ( <OUTER> )? ) |
<INNER> )? <JOIN> <link
linkend="prod70">tableReference</link> <ON> <link
linkend="prod34">criteria</link>
)</para></entry></row>
+( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> (
<OUTER> )? ) | ( <FULL> ( <OUTER> )? ) |
<INNER> )? <JOIN> <link
linkend="prod71">tableReference</link> <ON> <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> | ( <LPAREN>
<link linkend="prod71">joinedTable</link> <RPAREN> ) )
( ( <MAKEDEP> ) | ( <MAKENOTDEP> )
)?</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> | ( <LPAREN>
<link linkend="prod72">joinedTable</link> <RPAREN> ) )
( ( <MAKEDEP> ) | ( <MAKENOTDEP> )
)?</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>::=
-<XMLSERIALIZE> <LPAREN> ( <link
linkend="prod11">nonReserved</link> )? <link
linkend="prod23">expression</link> ( <AS> (
<STRING> | <VARCHAR> | <CLOB> ) )?
<RPAREN></para></entry></row>
+<XMLSERIALIZE> <LPAREN> ( <link
linkend="prod11">nonReserved</link> )? <link
linkend="prod24">expression</link> ( <AS> (
<STRING> | <VARCHAR> | <CLOB> ) )?
<RPAREN></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor
id="prod11"
xreflabel="nonReserved"/>nonReserved</para></entry>
<entry align="left" valign="top"><para>::=
<ID></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>::=
-<ID> <LPAREN> <link
linkend="prod23">expression</link> <link
linkend="prod11">nonReserved</link> <link
linkend="prod41">createElementsWithTypes</link> <RPAREN>
( <AS> )? <link
linkend="prod2">id</link></para></entry></row>
+<ID> <LPAREN> <link
linkend="prod24">expression</link> <link
linkend="prod11">nonReserved</link> <link
linkend="prod42">createElementsWithTypes</link> <RPAREN>
( <AS> )? <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>::=
-<ID> <LPAREN> <link
linkend="prod23">expression</link> <link
linkend="prod11">nonReserved</link> <link
linkend="prod81">textColumn</link> ( <COMMA> <link
linkend="prod81">textColumn</link> )* ( <ID> <link
linkend="prod68">charVal</link> )? ( ( <ESCAPE> <link
linkend="prod68">charVal</link> ) | ( <ID> <link
linkend="prod68">charVal</link> ) )? ( <ID> ( <link
linkend="prod82">intVal</link> )? )? ( <ID> <link
linkend="prod82">intVal</link> )? <RPAREN> (
<AS> )? <link
linkend="prod2">id</link></para></entry></row>
+<ID> <LPAREN> <link
linkend="prod24">expression</link> <link
linkend="prod11">nonReserved</link> <link
linkend="prod82">textColumn</link> ( <COMMA> <link
linkend="prod82">textColumn</link> )* ( <ID> <link
linkend="prod69">charVal</link> )? ( ( <ESCAPE> <link
linkend="prod69">charVal</link> ) | ( <ID> <link
linkend="prod69">charVal</link> ) )? ( <ID> ( <link
linkend="prod83">intVal</link> )? )? ( <ID> <link
linkend="prod83">intVal</link> )? <RPAREN> (
<AS> )? <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> ( <ID> <link
linkend="prod82">intVal</link>
)?</para></entry></row>
+<link linkend="prod2">id</link> <link
linkend="prod38">dataType</link> ( <ID> <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>::=
-<XMLQUERY> <LPAREN> ( <link
linkend="prod84">xmlNamespaces</link> <COMMA> )? <link
linkend="prod1">stringVal</link> ( <ID> <link
linkend="prod64">derivedColumn</link> ( <COMMA> <link
linkend="prod64">derivedColumn</link> )* )? ( ( <NULL> |
<link linkend="prod11">nonReserved</link> ) <ON>
<link linkend="prod11">nonReserved</link> )?
<RPAREN></para></entry></row>
+<XMLQUERY> <LPAREN> ( <link
linkend="prod85">xmlNamespaces</link> <COMMA> )? <link
linkend="prod1">stringVal</link> ( <ID> <link
linkend="prod65">derivedColumn</link> ( <COMMA> <link
linkend="prod65">derivedColumn</link> )* )? ( ( <NULL> |
<link linkend="prod11">nonReserved</link> ) <ON>
<link linkend="prod11">nonReserved</link> )?
<RPAREN></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>::=
-<XMLTABLE> <LPAREN> ( <link
linkend="prod84">xmlNamespaces</link> <COMMA> )? <link
linkend="prod1">stringVal</link> ( <ID> <link
linkend="prod64">derivedColumn</link> ( <COMMA> <link
linkend="prod64">derivedColumn</link> )* )? ( <ID>
<link linkend="prod85">xmlColumn</link> ( <COMMA>
<link linkend="prod85">xmlColumn</link> )* )? <RPAREN>
( <AS> )? <link
linkend="prod2">id</link></para></entry></row>
+<XMLTABLE> <LPAREN> ( <link
linkend="prod85">xmlNamespaces</link> <COMMA> )? <link
linkend="prod1">stringVal</link> ( <ID> <link
linkend="prod65">derivedColumn</link> ( <COMMA> <link
linkend="prod65">derivedColumn</link> )* )? ( <ID>
<link linkend="prod86">xmlColumn</link> ( <COMMA>
<link linkend="prod86">xmlColumn</link> )* )? <RPAREN>
( <AS> )? <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> ( ( <FOR> <link
linkend="prod11">nonReserved</link> ) | ( <link
linkend="prod37">dataType</link> ( <DEFAULT_KEYWORD>
<link linkend="prod23">expression</link> )? ( <link
linkend="prod11">nonReserved</link> <link
linkend="prod1">stringVal</link> )? )
)</para></entry></row>
+<link linkend="prod2">id</link> ( ( <FOR> <link
linkend="prod11">nonReserved</link> ) | ( <link
linkend="prod38">dataType</link> ( <DEFAULT_KEYWORD>
<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>::=
<INTEGERVAL></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>::=
-( <TABLE> )? <LPAREN> ( <link
linkend="prod12">queryExpression</link> | <link
linkend="prod14">storedProcedure</link> ) <RPAREN> (
<AS> )? <link
linkend="prod2">id</link></para></entry></row>
+( <TABLE> )? <LPAREN> ( <link
linkend="prod13">queryExpression</link> | <link
linkend="prod15">storedProcedure</link> ) <RPAREN> (
<AS> )? <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>::=
( <ID> ( ( <AS> )? <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>::=
-<WHERE> <link
linkend="prod34">criteria</link></para></entry></row>
+<WHERE> <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> ( <OR>
<link linkend="prod87">compoundCritAnd</link>
)*</para></entry></row>
+<link linkend="prod88">compoundCritAnd</link> ( <OR>
<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> ( <AND>
<link linkend="prod88">notCrit</link>
)*</para></entry></row>
+<link linkend="prod89">notCrit</link> ( <AND>
<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>::=
-( <NOT> )? <link
linkend="prod89">booleanPrimary</link></para></entry></row>
+( <NOT> )? <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>::=
( <EQ> | <NE> | <NE2> | <LT> |
<LE> | <GT> | <GE>
)</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>
+<LPAREN> ( <link
linkend="prod13">queryExpression</link> | ( <link
linkend="prod15">storedProcedure</link> ) )
<RPAREN></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>::=
-<LPAREN> ( <link
linkend="prod12">queryExpression</link> | ( <link
linkend="prod14">storedProcedure</link> ) )
<RPAREN></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> ( <ANY> |
<SOME> | <ALL> ) <link
linkend="prod99">subquery</link></para></entry></row>
+<link linkend="prod99">operator</link> ( <ANY> |
<SOME> | <ALL> ) <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>::=
-( <NOT> )? <LIKE> <link
linkend="prod90">commonValueExpression</link> ( <ESCAPE>
<link linkend="prod68">charVal</link> | ( <LBRACE>
<ESCAPE> <link linkend="prod68">charVal</link>
<RBRACE> ) )?</para></entry></row>
+( <NOT> )? <LIKE> <link
linkend="prod91">commonValueExpression</link> ( <ESCAPE>
<link linkend="prod69">charVal</link> | ( <LBRACE>
<ESCAPE> <link linkend="prod69">charVal</link>
<RBRACE> ) )?</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>::=
-( <NOT> )? <BETWEEN> <link
linkend="prod90">commonValueExpression</link> <AND>
<link
linkend="prod90">commonValueExpression</link></para></entry></row>
+( <NOT> )? <BETWEEN> <link
linkend="prod91">commonValueExpression</link> <AND>
<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>::=
<IS> ( <NOT> )?
<NULL></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>::=
-( <NOT> )? <IN> ( ( <link
linkend="prod100">subqueryAndHint</link> ) | ( <LPAREN>
<link linkend="prod90">commonValueExpression</link> (
<COMMA> <link
linkend="prod90">commonValueExpression</link> )* <RPAREN>
) )</para></entry></row>
+( <NOT> )? <IN> ( ( <link
linkend="prod101">subqueryAndHint</link> ) | ( <LPAREN>
<link linkend="prod91">commonValueExpression</link> (
<COMMA> <link
linkend="prod91">commonValueExpression</link> )* <RPAREN>
) )</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>::=
-<EXISTS> <link
linkend="prod100">subqueryAndHint</link></para></entry></row>
+<EXISTS> <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>::=
-<GROUP> <BY> ( <link
linkend="prod101">groupByItem</link> ( <COMMA> <link
linkend="prod101">groupByItem</link> )*
)</para></entry></row>
+<GROUP> <BY> ( <link
linkend="prod102">groupByItem</link> ( <COMMA> <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>::=
-<HAVING> <link
linkend="prod34">criteria</link></para></entry></row>
+<HAVING> <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>::=
-<ORDER> <BY> <link
linkend="prod102">sortSpecification</link> ( <COMMA>
<link linkend="prod102">sortSpecification</link>
)*</para></entry></row>
+<ORDER> <BY> <link
linkend="prod103">sortSpecification</link> ( <COMMA>
<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> ( <ASC> |
<DESC> )? ( <link linkend="prod11">nonReserved</link>
<link linkend="prod11">nonReserved</link>
)?</para></entry></row>
+<link linkend="prod104">sortKey</link> ( <ASC> |
<DESC> )? ( <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>::=
<LIMIT> ( <INTEGERVAL> | <QMARK> ) (
<COMMA> ( <INTEGERVAL> | <QMARK> )
)?</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>::=
<OPTION> ( <MAKEDEP> <link
linkend="prod2">id</link> ( <COMMA> <link
linkend="prod2">id</link> )* | <MAKENOTDEP> <link
linkend="prod2">id</link> ( <COMMA> <link
linkend="prod2">id</link> )* | <NOCACHE> ( <link
linkend="prod2">id</link> ( <COMMA> <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> (
<CONCAT_OP> <link
linkend="prod104">plusExpression</link> )*
)</para></entry></row>
+( <link linkend="prod105">plusExpression</link> (
<CONCAT_OP> <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>::=
( <PLUS> | <MINUS> )</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>::=
( <STAR> | <SLASH> )</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>::=
-( <QMARK> | <POS_REF> | <link
linkend="prod109">literal</link> | ( <LBRACE> <link
linkend="prod11">nonReserved</link> <link
linkend="prod110">function</link> <RBRACE> ) | ( <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> ) | ( <ID> (
<LSBRACE> <link linkend="prod82">intVal</link>
<RSBRACE> )? ) | <link
linkend="prod99">subquery</link> | ( <LPAREN> <link
linkend="prod23">expression</link> <RPAREN> (
<LSBRACE> <link linkend="prod82">intVal</link>
<RSBRACE> )? ) | <link
linkend="prod111">searchedCaseExpression</link> | <link
linkend="prod112">caseExpression</link>
)</para></entry></row>
+( <QMARK> | <POS_REF> | <link
linkend="prod110">literal</link> | ( <LBRACE> <link
linkend="prod11">nonReserved</link> <link
linkend="prod111">function</link> <RBRACE> ) | ( <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> ) | ( <ID> (
<LSBRACE> <link linkend="prod83">intVal</link>
<RSBRACE> )? ) | <link
linkend="prod100">subquery</link> | ( <LPAREN> <link
linkend="prod24">expression</link> <RPAREN> (
<LSBRACE> <link linkend="prod83">intVal</link>
<RSBRACE> )? ) | <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>::=
-<CASE> <link linkend="prod23">expression</link> (
<WHEN> <link linkend="prod23">expression</link>
<THEN> <link linkend="prod23">expression</link> )+ (
<ELSE> <link linkend="prod23">expression</link> )?
<END></para></entry></row>
+<CASE> <link linkend="prod24">expression</link> (
<WHEN> <link linkend="prod24">expression</link>
<THEN> <link linkend="prod24">expression</link> )+ (
<ELSE> <link linkend="prod24">expression</link> )?
<END></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>::=
-<CASE> ( <WHEN> <link
linkend="prod34">criteria</link> <THEN> <link
linkend="prod23">expression</link> )+ ( <ELSE> <link
linkend="prod23">expression</link> )?
<END></para></entry></row>
+<CASE> ( <WHEN> <link
linkend="prod35">criteria</link> <THEN> <link
linkend="prod24">expression</link> )+ ( <ELSE> <link
linkend="prod24">expression</link> )?
<END></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>::=
-( ( <CONVERT> <LPAREN> <link
linkend="prod23">expression</link> <COMMA> <link
linkend="prod37">dataType</link> <RPAREN> ) | (
<CAST> <LPAREN> <link
linkend="prod23">expression</link> <AS> <link
linkend="prod37">dataType</link> <RPAREN> ) | ( <link
linkend="prod11">nonReserved</link> <LPAREN> <link
linkend="prod23">expression</link> <COMMA> <link
linkend="prod113">stringConstant</link> <RPAREN> ) | (
<link linkend="prod11">nonReserved</link> <LPAREN>
<link linkend="prod114">intervalType</link> <COMMA>
<link linkend="prod23">expression</link> <COMMA>
<link linkend="prod23">expression</link> <RPAREN> ) |
<link linkend="prod115">queryString</link> | ( (
<LEFT> | <RIGHT> | <CHAR> | <USER>
| <YEAR> | <MONTH> | <HOUR> |
<MINUTE> | <SECOND> | <XMLCONCAT> |
<XMLCOMMENT> ) <LPAREN> ( <link
linkend="prod23">expression</link> !
( <COMMA> <link linkend="prod23">expression</link> )*
)? <RPAREN> ) | ( ( <INSERT> ) <LPAREN> (
<link linkend="prod23">expression</link> ( <COMMA>
<link linkend="prod23">expression</link> )* )?
<RPAREN> ) | ( ( <TRANSLATE> ) <LPAREN> (
<link linkend="prod23">expression</link> ( <COMMA>
<link linkend="prod23">expression</link> )* )?
<RPAREN> ) | <link linkend="prod116">xmlParse</link> |
<link linkend="prod117">xmlElement</link> | ( <XMLPI>
<LPAREN> ( <ID> <link
linkend="prod118">idExpression</link> | <link
linkend="prod118">idExpression</link> ) ( <COMMA>
<link linkend="prod23">expression</link> )? <RPAREN> )
| <link linkend="prod119">xmlForest</link> | <link
linkend="prod80">xmlSerialize</link> | <link
linkend="prod83">xmlQuery</link> | ( <link
linkend="prod2">id</link> <LPAREN> ( <link
linkend="prod23">expression</link> ( <COMMA> <link
linkend="prod23">expression</link> )*!
)? <RPAREN> ) )</para></entry></row>
+( ( <CONVERT> <LPAREN> <link
linkend="prod24">expression</link> <COMMA> <link
linkend="prod38">dataType</link> <RPAREN> ) | (
<CAST> <LPAREN> <link
linkend="prod24">expression</link> <AS> <link
linkend="prod38">dataType</link> <RPAREN> ) | ( <link
linkend="prod11">nonReserved</link> <LPAREN> <link
linkend="prod24">expression</link> <COMMA> <link
linkend="prod114">stringConstant</link> <RPAREN> ) | (
<link linkend="prod11">nonReserved</link> <LPAREN>
<link linkend="prod115">intervalType</link> <COMMA>
<link linkend="prod24">expression</link> <COMMA>
<link linkend="prod24">expression</link> <RPAREN> ) |
<link linkend="prod116">queryString</link> | ( (
<LEFT> | <RIGHT> | <CHAR> | <USER>
| <YEAR> | <MONTH> | <HOUR> |
<MINUTE> | <SECOND> | <XMLCONCAT> |
<XMLCOMMENT> ) <LPAREN> ( <link
linkend="prod24">expression</link> !
( <COMMA> <link linkend="prod24">expression</link> )*
)? <RPAREN> ) | ( ( <INSERT> ) <LPAREN> (
<link linkend="prod24">expression</link> ( <COMMA>
<link linkend="prod24">expression</link> )* )?
<RPAREN> ) | ( ( <TRANSLATE> ) <LPAREN> (
<link linkend="prod24">expression</link> ( <COMMA>
<link linkend="prod24">expression</link> )* )?
<RPAREN> ) | <link linkend="prod117">xmlParse</link> |
<link linkend="prod118">xmlElement</link> | ( <XMLPI>
<LPAREN> ( <ID> <link
linkend="prod119">idExpression</link> | <link
linkend="prod119">idExpression</link> ) ( <COMMA>
<link linkend="prod24">expression</link> )? <RPAREN> )
| <link linkend="prod120">xmlForest</link> | <link
linkend="prod81">xmlSerialize</link> | <link
linkend="prod84">xmlQuery</link> | ( <link
linkend="prod2">id</link> <LPAREN> ( <link
linkend="prod24">expression</link> ( <COMMA> <link
linkend="prod24">expression</link> )*!
)? <RPAREN> ) )</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>::=
-<XMLPARSE> <LPAREN> <link
linkend="prod11">nonReserved</link> <link
linkend="prod23">expression</link> ( <link
linkend="prod11">nonReserved</link> )?
<RPAREN></para></entry></row>
+<XMLPARSE> <LPAREN> <link
linkend="prod11">nonReserved</link> <link
linkend="prod24">expression</link> ( <link
linkend="prod11">nonReserved</link> )?
<RPAREN></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> <LPAREN>
<link linkend="prod23">expression</link> ( <COMMA>
<link linkend="prod64">derivedColumn</link> )*
<RPAREN></para></entry></row>
+<link linkend="prod11">nonReserved</link> <LPAREN>
<link linkend="prod24">expression</link> ( <COMMA>
<link linkend="prod65">derivedColumn</link> )*
<RPAREN></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>::=
-<XMLELEMENT> <LPAREN> ( <ID> <link
linkend="prod2">id</link> | <link
linkend="prod2">id</link> ) ( <COMMA> <link
linkend="prod84">xmlNamespaces</link> )? ( <COMMA>
<link linkend="prod120">xmlAttributes</link> )? (
<COMMA> <link linkend="prod23">expression</link> )*
<RPAREN></para></entry></row>
+<XMLELEMENT> <LPAREN> ( <ID> <link
linkend="prod2">id</link> | <link
linkend="prod2">id</link> ) ( <COMMA> <link
linkend="prod85">xmlNamespaces</link> )? ( <COMMA>
<link linkend="prod121">xmlAttributes</link> )? (
<COMMA> <link linkend="prod24">expression</link> )*
<RPAREN></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>::=
-<XMLATTRIBUTES> <LPAREN> <link
linkend="prod64">derivedColumn</link> ( <COMMA> <link
linkend="prod64">derivedColumn</link> )*
<RPAREN></para></entry></row>
+<XMLATTRIBUTES> <LPAREN> <link
linkend="prod65">derivedColumn</link> ( <COMMA> <link
linkend="prod65">derivedColumn</link> )*
<RPAREN></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>::=
-<XMLFOREST> <LPAREN> ( <link
linkend="prod84">xmlNamespaces</link> <COMMA> )? <link
linkend="prod64">derivedColumn</link> ( <COMMA> <link
linkend="prod64">derivedColumn</link> )*
<RPAREN></para></entry></row>
+<XMLFOREST> <LPAREN> ( <link
linkend="prod85">xmlNamespaces</link> <COMMA> )? <link
linkend="prod65">derivedColumn</link> ( <COMMA> <link
linkend="prod65">derivedColumn</link> )*
<RPAREN></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>::=
-<XMLNAMESPACES> <LPAREN> <link
linkend="prod121">namespaceItem</link> ( <COMMA> <link
linkend="prod121">namespaceItem</link> )*
<RPAREN></para></entry></row>
+<XMLNAMESPACES> <LPAREN> <link
linkend="prod122">namespaceItem</link> ( <COMMA> <link
linkend="prod122">namespaceItem</link> )*
<RPAREN></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> <AS>
<link linkend="prod2">id</link>
)</para></entry></row>
<row>
@@ -870,23 +873,23 @@
<entry align="left" valign="top"><para>::=
( <DEFAULT_KEYWORD> <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>::=
( <STRING> | <VARCHAR> | <BOOLEAN> |
<BYTE> | <TINYINT> | <SHORT> |
<SMALLINT> | <CHAR> | <INTEGER> |
<LONG> | <BIGINT> | <BIGINTEGER> |
<FLOAT> | <REAL> | <DOUBLE> |
<BIGDECIMAL> | <DECIMAL> | <DATE> |
<TIME> | <TIMESTAMP> | <OBJECT> |
<BLOB> | <CLOB> | <XML>
)</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> |
<INTEGERVAL> | <FLOATVAL> | <FALSE> |
<TRUE> | <UNKNOWN> | <NULL> | ( (
<BOOLEANTYPE> | <TIMESTAMPTYPE> | <DATETYPE> |
<TIMETYPE> ) <link linkend="prod1">stringVal</link>
<RBRACE> ) )</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) {