teiid SVN: r2720 - branches/7.1.x/test-integration/db/src/assembly.
by teiid-commits@lists.jboss.org
Author: vhalbert(a)redhat.com
Date: 2010-11-11 21:26:12 -0500 (Thu, 11 Nov 2010)
New Revision: 2720
Modified:
branches/7.1.x/test-integration/db/src/assembly/binaries.xml
Log:
TEIID-1354 as part of the changes to support controlling the output directory and running in hudson, the xerces jar is needed in the kit.
Modified: branches/7.1.x/test-integration/db/src/assembly/binaries.xml
===================================================================
--- branches/7.1.x/test-integration/db/src/assembly/binaries.xml 2010-11-12 02:24:06 UTC (rev 2719)
+++ branches/7.1.x/test-integration/db/src/assembly/binaries.xml 2010-11-12 02:26:12 UTC (rev 2720)
@@ -29,6 +29,7 @@
<include>org.apache.ant:ant-launcher</include>
<include>ant-contrib:cpptasks</include>
<include>ant-contrib:ant-contrib</include>
+ <include>xerces:xercesImpl</include>
</includes>
</dependencySet>
14 years, 1 month
teiid SVN: r2719 - branches/7.1.x/test-integration/db/src/main/resources/ctc_tests.
by teiid-commits@lists.jboss.org
Author: vhalbert(a)redhat.com
Date: 2010-11-11 21:24:06 -0500 (Thu, 11 Nov 2010)
New Revision: 2719
Modified:
branches/7.1.x/test-integration/db/src/main/resources/ctc_tests/ctc.xml
Log:
TEIID-1354 changes to support controlling the output directory
Modified: branches/7.1.x/test-integration/db/src/main/resources/ctc_tests/ctc.xml
===================================================================
--- branches/7.1.x/test-integration/db/src/main/resources/ctc_tests/ctc.xml 2010-11-11 19:56:29 UTC (rev 2718)
+++ branches/7.1.x/test-integration/db/src/main/resources/ctc_tests/ctc.xml 2010-11-12 02:24:06 UTC (rev 2719)
@@ -49,13 +49,13 @@
<path location="${proj.dir}"/>
</pathconvert>
- <property name="root_output" value="${proj_dir}/bulk-query-tests" />
+ <property name="root_output" value="${output.dir}" />
</target>
<target name="set.linux"
if="UnixOS">
- <property name="root_output" value="${proj.dir}/bulk-query-tests" />
+ <property name="root_output" value="${output.dir}" />
<property name="proj_dir" value="${proj.dir}" />
</target>
@@ -144,9 +144,9 @@
<path location="${vdb.artifacts.dir}"/>
</pathconvert>
- <pathconvert targetos="unix" property="outpu_.dir" >
+ <pathconvert targetos="unix" property="root.output" >
<map from="\" to="/"/>
- <path location="${output.dir}"/>
+ <path location="${root_output}"/>
</pathconvert>
@@ -169,7 +169,7 @@
<jvmarg value="-Ddatasourceloc=${datasourceloc}" />
<jvmarg value="-Dserver.host.name=${server.host.name}" />
<jvmarg value="-Dproj.dir=${proj_dir}" />
- <jvmarg value="-Doutput.dir=${output_dir}" />
+ <jvmarg value="-Doutput.dir=${root.output}" />
</java>
@@ -204,7 +204,7 @@
<jvmarg value="-Ddatasourceloc=${datasourceloc}" />
<jvmarg value="-Dserver.host.name=${server.host.name}" />
<jvmarg value="-Dproj.dir=${proj_dir}" />
- <jvmarg value="-Doutput.dir=${output.dir}" />
+ <jvmarg value="-Doutput.dir=${root_output}" />
</java>
14 years, 1 month
teiid SVN: r2718 - in branches/7.1.x: test-integration/db/src/test/java/org/teiid/adminapi/jboss and 1 other directories.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2010-11-11 14:56:29 -0500 (Thu, 11 Nov 2010)
New Revision: 2718
Modified:
branches/7.1.x/jboss-integration/src/main/java/org/teiid/adminapi/jboss/ManagedUtil.java
branches/7.1.x/test-integration/db/src/test/java/org/teiid/adminapi/jboss/TestConnectorBindings.java
branches/7.1.x/test-integration/db/src/test/resources/TransactionsRevisited.vdb
Log:
TEIID-1356: Enum type was not being properly handled to wrap into metavalue.
Modified: branches/7.1.x/jboss-integration/src/main/java/org/teiid/adminapi/jboss/ManagedUtil.java
===================================================================
--- branches/7.1.x/jboss-integration/src/main/java/org/teiid/adminapi/jboss/ManagedUtil.java 2010-11-09 22:45:31 UTC (rev 2717)
+++ branches/7.1.x/jboss-integration/src/main/java/org/teiid/adminapi/jboss/ManagedUtil.java 2010-11-11 19:56:29 UTC (rev 2718)
@@ -43,11 +43,13 @@
import org.jboss.managed.api.ManagedCommon;
import org.jboss.managed.api.ManagedOperation;
import org.jboss.managed.api.ManagedProperty;
+import org.jboss.metatype.api.types.EnumMetaType;
import org.jboss.metatype.api.types.MapCompositeMetaType;
import org.jboss.metatype.api.types.MetaType;
import org.jboss.metatype.api.types.SimpleMetaType;
import org.jboss.metatype.api.values.CollectionValue;
import org.jboss.metatype.api.values.EnumValue;
+import org.jboss.metatype.api.values.EnumValueSupport;
import org.jboss.metatype.api.values.MapCompositeValueSupport;
import org.jboss.metatype.api.values.MetaValue;
import org.jboss.metatype.api.values.PropertiesMetaValue;
@@ -165,6 +167,10 @@
}
}
+ public static EnumValue wrap(EnumMetaType type, String value) {
+ return new EnumValueSupport(type, value);
+ }
+
public static SimpleValue wrap(MetaType type, String value) {
if (type instanceof SimpleMetaType) {
SimpleMetaType st = (SimpleMetaType)type;
Modified: branches/7.1.x/test-integration/db/src/test/java/org/teiid/adminapi/jboss/TestConnectorBindings.java
===================================================================
--- branches/7.1.x/test-integration/db/src/test/java/org/teiid/adminapi/jboss/TestConnectorBindings.java 2010-11-09 22:45:31 UTC (rev 2717)
+++ branches/7.1.x/test-integration/db/src/test/java/org/teiid/adminapi/jboss/TestConnectorBindings.java 2010-11-11 19:56:29 UTC (rev 2718)
@@ -28,6 +28,7 @@
import org.teiid.adminapi.Transaction;
import org.teiid.adminapi.Translator;
import org.teiid.adminapi.VDB;
+import org.teiid.adminapi.VDB.ConnectionType;
import org.teiid.core.util.UnitTestUtil;
@Ignore
@@ -42,7 +43,7 @@
//if (!Bootstrap.getInstance().isStarted()) Bootstrap.getInstance().bootstrap();
ds = new ServerDatasourceConnection();
//admin = AdminProvider.getRemote( "jnp://localhost:1099", "javaduke", "anotherduke");
- admin = AdminFactory.getInstance().createAdmin("admin", "admin".toCharArray(), "mm://localhost:31443"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ admin = AdminFactory.getInstance().createAdmin("admin", "admin".toCharArray(), "mms://127.0.0.1:31443"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
installVDB();
}
@@ -81,6 +82,22 @@
assertNull(admin.getVDB("TransactionsRevisited", 1)); //$NON-NLS-1$
}
+
+ @Test
+ public void testChangeConnectionType() throws Exception {
+ VDB vdb = admin.getVDB("TransactionsRevisited", 1);
+ assertNotNull(vdb); //$NON-NLS-1$
+
+ ConnectionType ct = vdb.getConnectionType();
+ assertEquals(ConnectionType.BY_VERSION, ct);
+
+ admin.changeVDBConnectionType("TransactionsRevisited", 1, ConnectionType.ANY);
+
+ vdb = admin.getVDB("TransactionsRevisited", 1);
+
+ ct = vdb.getConnectionType();
+ assertEquals(ConnectionType.ANY, ct);
+ }
@Test public void testGetVDB() throws Exception {
VDB vdb = admin.getVDB("TransactionsRevisited", 1);
Modified: branches/7.1.x/test-integration/db/src/test/resources/TransactionsRevisited.vdb
===================================================================
(Binary files differ)
14 years, 1 month
teiid SVN: r2717 - branches/7.1.x/test-integration/db/src/main/resources/ctc_tests.
by teiid-commits@lists.jboss.org
Author: vhalbert(a)redhat.com
Date: 2010-11-09 17:45:31 -0500 (Tue, 09 Nov 2010)
New Revision: 2717
Modified:
branches/7.1.x/test-integration/db/src/main/resources/ctc_tests/ctc.xml
branches/7.1.x/test-integration/db/src/main/resources/ctc_tests/runclienttest.sh
Log:
TEIID-1354 updated scripts to support overriding the output directory
Modified: branches/7.1.x/test-integration/db/src/main/resources/ctc_tests/ctc.xml
===================================================================
--- branches/7.1.x/test-integration/db/src/main/resources/ctc_tests/ctc.xml 2010-11-09 17:24:57 UTC (rev 2716)
+++ branches/7.1.x/test-integration/db/src/main/resources/ctc_tests/ctc.xml 2010-11-09 22:45:31 UTC (rev 2717)
@@ -6,7 +6,7 @@
<classpath>
<pathelement path="${maven.runtime.classpath}" />
</classpath>
- </taskdef>
+ </taskdef>
<target name="main" depends="init, is.config.file, set.default.config.file, set.config.file"
if="" unless="" description="create all property files">
@@ -36,8 +36,8 @@
<available file="${scenario.dir}/${scenario.file}" />
</condition>
- <delete file="${ERROR_FILE}"/>
-
+ <delete file="${ERROR_FILE}"/>
+
</target>
<target name="set.win"
@@ -84,7 +84,7 @@
<property name="use.config.file" value="${config.file}" />
<echo>USE CONFIG: ${use.config.file}</echo>
- </target>
+ </target>
<target name="run.all.test"
unless="single" >
@@ -143,6 +143,11 @@
<map from="\" to="/"/>
<path location="${vdb.artifacts.dir}"/>
</pathconvert>
+
+ <pathconvert targetos="unix" property="outpu_.dir" >
+ <map from="\" to="/"/>
+ <path location="${output.dir}"/>
+ </pathconvert>
<java classname="org.teiid.test.client.TestClient" fork="true" >
@@ -153,6 +158,9 @@
</fileset>
</classpath>
<jvmarg value="-Xmx1024m" />
+ <!--
+ <jvmarg value="-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y" />
+ -->
<jvmarg value="-Dconfig=${use.config.file}" />
<jvmarg value="-Dscenariofile=${scenario_file}" />
<jvmarg value="-Dqueryset.artifacts.dir=${queryset_artifacts_dir}" />
@@ -161,7 +169,7 @@
<jvmarg value="-Ddatasourceloc=${datasourceloc}" />
<jvmarg value="-Dserver.host.name=${server.host.name}" />
<jvmarg value="-Dproj.dir=${proj_dir}" />
-
+ <jvmarg value="-Doutput.dir=${output_dir}" />
</java>
@@ -185,6 +193,9 @@
</fileset>
</classpath>
<jvmarg value="-Xmx1024m" />
+ <!--
+ <jvmarg value="-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y" />
+ -->
<jvmarg value="-Dconfig=${use.config.file}" />
<jvmarg value="-Dscenariofile=${scenario.file}" />
<jvmarg value="-Dqueryset.artifacts.dir=${queryset.artifacts.dir}" />
@@ -193,6 +204,7 @@
<jvmarg value="-Ddatasourceloc=${datasourceloc}" />
<jvmarg value="-Dserver.host.name=${server.host.name}" />
<jvmarg value="-Dproj.dir=${proj_dir}" />
+ <jvmarg value="-Doutput.dir=${output.dir}" />
</java>
Modified: branches/7.1.x/test-integration/db/src/main/resources/ctc_tests/runclienttest.sh
===================================================================
--- branches/7.1.x/test-integration/db/src/main/resources/ctc_tests/runclienttest.sh 2010-11-09 17:24:57 UTC (rev 2716)
+++ branches/7.1.x/test-integration/db/src/main/resources/ctc_tests/runclienttest.sh 2010-11-09 22:45:31 UTC (rev 2717)
@@ -14,7 +14,7 @@
# - SCENARIODIR - directory location where the scenario files found and determine which query sets and vdbs to use,
# - DATASOURCEDIR - root directory location to find the various datasources to use
# - CONFIGFILE - specify the configuration file to use (override ctc-test.properties)
-
+# - OUTPUTDIR - optional, can set the location the reports and generated files will be writtent o
######################################################
# DEBUGGING OPTION
#
@@ -84,6 +84,15 @@
#ANT_ARGS="${ANT_ARGS} -Dvdb.artifacts.dir=${vdb.artifacts.dir}"
ANT_ARGS="${ANT_ARGS} -Dproj.dir=${PRGDIR}"
+if [ -z "${OUTPUTDIR}" ]
+ then
+
+ OUTPUTDIR=${PRGDIR}
+
+fi
+
+ANT_ARGS="${ANT_ARGS} -Doutput.dir=${OUTPUTDIR}"
+
# default to the ip address used to start the server
SVRNAME="0.0.0.0"
@@ -133,6 +142,8 @@
mkdir "${PRGDIR}"/log
fi
+#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"
+
if [ -n "${JAVA_OPTS}" ]; then
ANT_OPTS="${JAVA_OPTS} $ANT_OPTS "
fi
14 years, 1 month
teiid SVN: r2716 - branches/7.2.x/cache-jbosscache/src/main/java/org/teiid/cache/jboss.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2010-11-09 12:24:57 -0500 (Tue, 09 Nov 2010)
New Revision: 2716
Modified:
branches/7.2.x/cache-jbosscache/src/main/java/org/teiid/cache/jboss/JBossCacheFactory.java
Log:
TEIID-1350: having a string based expiration at root is not needed, as setResident is set to true. Since we do not know the key types going in to cache, assuming that all keys are going to strings is wrong.
Modified: branches/7.2.x/cache-jbosscache/src/main/java/org/teiid/cache/jboss/JBossCacheFactory.java
===================================================================
--- branches/7.2.x/cache-jbosscache/src/main/java/org/teiid/cache/jboss/JBossCacheFactory.java 2010-11-09 17:15:56 UTC (rev 2715)
+++ branches/7.2.x/cache-jbosscache/src/main/java/org/teiid/cache/jboss/JBossCacheFactory.java 2010-11-09 17:24:57 UTC (rev 2716)
@@ -64,7 +64,6 @@
Node cacheRoot = this.cacheStore.getRoot().addChild(Fqn.fromString("Teiid")); //$NON-NLS-1$
Node node = cacheRoot.addChild(Fqn.fromString(type.location()));
- node.put(ExpirationAlgorithmConfig.EXPIRATION_KEY, Long.MAX_VALUE);
node.setResident(true);
Region cacheRegion = this.cacheStore.getRegion(node.getFqn(), true);
14 years, 1 month
teiid SVN: r2715 - branches/7.1.x/cache-jbosscache/src/main/java/org/teiid/cache/jboss.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2010-11-09 12:15:56 -0500 (Tue, 09 Nov 2010)
New Revision: 2715
Modified:
branches/7.1.x/cache-jbosscache/src/main/java/org/teiid/cache/jboss/JBossCacheFactory.java
Log:
TEIID-1350: having a string based expiration at root is not needed, as "setResident" is set to true. Since we do not know the key types going in to cache, assuming that all keys are going to strings is wrong.
Modified: branches/7.1.x/cache-jbosscache/src/main/java/org/teiid/cache/jboss/JBossCacheFactory.java
===================================================================
--- branches/7.1.x/cache-jbosscache/src/main/java/org/teiid/cache/jboss/JBossCacheFactory.java 2010-11-05 18:06:57 UTC (rev 2714)
+++ branches/7.1.x/cache-jbosscache/src/main/java/org/teiid/cache/jboss/JBossCacheFactory.java 2010-11-09 17:15:56 UTC (rev 2715)
@@ -64,7 +64,6 @@
Node cacheRoot = this.cacheStore.getRoot().addChild(Fqn.fromString("Teiid")); //$NON-NLS-1$
Node node = cacheRoot.addChild(Fqn.fromString(type.location()));
- node.put(ExpirationAlgorithmConfig.EXPIRATION_KEY, Long.MAX_VALUE);
node.setResident(true);
Region cacheRegion = this.cacheStore.getRegion(node.getFqn(), true);
14 years, 1 month
teiid SVN: r2714 - in trunk: build/kits/jboss-container/deploy/teiid and 26 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-11-05 14:06:57 -0400 (Fri, 05 Nov 2010)
New Revision: 2714
Added:
trunk/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/TestQueryExecutionImpl.java
Modified:
trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml
trunk/build/kits/jboss-container/teiid-releasenotes.html
trunk/cache-jbosscache/pom.xml
trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java
trunk/console/src/main/java/org/teiid/rhq/admin/DQPManagementView.java
trunk/console/src/main/java/org/teiid/rhq/plugin/Facet.java
trunk/console/src/main/java/org/teiid/rhq/plugin/PlatformComponent.java
trunk/console/src/main/java/org/teiid/rhq/plugin/util/ProfileServiceUtil.java
trunk/console/src/main/resources/META-INF/rhq-plugin.xml
trunk/documentation/admin-guide/src/main/docbook/en-US/content/appendix-a.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/procedures.xml
trunk/engine/src/main/java/org/teiid/cache/CacheConfiguration.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPConfiguration.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPWorkContext.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/SessionAwareCache.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/JoinRegion.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/NewCalculateCostUtil.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java
trunk/engine/src/main/java/org/teiid/query/parser/QueryParser.java
trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/CriteriaTranslatorVisitor.java
trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java
trunk/engine/src/main/resources/org/teiid/query/i18n.properties
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPWorkContext.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestDependentJoins.java
trunk/engine/src/test/java/org/teiid/query/processor/TestMaterialization.java
trunk/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java
trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java
trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java
trunk/jboss-integration/src/main/resources/org/teiid/jboss/i18n.properties
trunk/runtime/src/main/java/org/teiid/transport/SocketConfiguration.java
Log:
forward merge or 7.2 and updates for 7.3
Modified: trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml
===================================================================
--- trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml 2010-11-05 18:06:57 UTC (rev 2714)
@@ -57,6 +57,7 @@
be replicated.
-->
<bean name="ResultsetCacheConfig" class="org.teiid.cache.CacheConfiguration">
+ <property name="name">ResultSetCacheConfig</property>
<property name="enabled">true</property>
<!-- Max Entries allowed for ResultSet Cache (default 1024) -->
<property name="maxEntries">1024</property>
@@ -99,7 +100,7 @@
Note: this is a memory based cache. (default 512) -->
<property name="preparedPlanCacheMaxCount">512</property>
<!-- Turn on role checking of resources based on the roles defined in VDB (default true) -->
- <property name="useDataRoles" class="java.lang.Boolean">true</property>
+ <property name="useDataRoles">true</property>
<!-- Long running query threshold, after which a alert can be generated by tooling if configured-->
<property name="queryThresholdInSecs">600</property>
<!-- Maximum rows allowed from a source query. -1 indicates no limit. (default -1)-->
@@ -110,6 +111,7 @@
<!-- JDBC Socket connection properties (SSL see below) -->
<bean name="JdbcSocketConfiguration" class="org.teiid.transport.SocketConfiguration">
+ <property name="name">JdbcSocketConfiguration</property>
<property name="enabled">true</property>
<property name="bindAddress">${jboss.bind.address}</property>
<property name="portNumber">31000</property>
@@ -144,6 +146,7 @@
<!-- Admin Socket connection settings (SSL see below) -->
<bean name="AdminSocketConfiguration" class="org.teiid.transport.SocketConfiguration">
+ <property name="name">AdminSocketConfiguration</property>
<property name="enabled">true</property>
<property name="bindAddress">${jboss.bind.address}</property>
<property name="portNumber">31443</property>
@@ -178,6 +181,7 @@
<!-- JDBC Socket connection properties (SSL see below) -->
<bean name="OdbcSocketConfiguration" class="org.teiid.transport.SocketConfiguration">
+ <property name="name">OdbcSocketConfiguration</property>
<property name="enabled">true</property>
<property name="bindAddress">${jboss.bind.address}</property>
<property name="portNumber">35432</property>
Modified: trunk/build/kits/jboss-container/teiid-releasenotes.html
===================================================================
--- trunk/build/kits/jboss-container/teiid-releasenotes.html 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/build/kits/jboss-container/teiid-releasenotes.html 2010-11-05 18:06:57 UTC (rev 2714)
@@ -7,7 +7,7 @@
</STYLE>
</HEAD>
<BODY LANG="en-US" DIR="LTR">
-<P><A HREF="http://www.teiid.org/"><IMG SRC="https://www.jboss.org/dms/teiid/images/teiid_banner.png" NAME="graphics1" ALT="Teiid" ALIGN=BOTTOM WIDTH=800></A>
+<P><A HREF="http://www.teiid.org/"><IMG SRC="https://www.jboss.org/dms/teiid/images/teiid-banner.png" NAME="graphics1" ALT="Teiid" ALIGN=BOTTOM WIDTH=800></A>
<H1>Teiid ${project.version} Release Notes</H1>
<P>Teiid ${project.version} adds performance and integration features.
@@ -26,28 +26,12 @@
</UL>
<H2><A NAME="Highlights"></A>Highlights</H2>
<UL>
- <LI><B>SQL Support</B>
- <UL>
- <LI><B>Non-Recursive Common Table Expressions</B> - The WITH clause (and associated pushdown) for non-recursive queries is now supported.
- <LI><B>Explicit Table Syntax</B> - TABLE x can now be used as a shortcut for SELECT * FROM x
- </UL>
- <LI><B>JSON Support</B> - JSON, which could be obtained through the ws-translator using http calls or other methods, can be converted to XML using the system function jsonToXml. XMLTABLE and other integration logic can then be used on the JSON results.
- <LI><B>Transaction Statements</B> - JDBC/ODBC now accepts START TRANSACTION, COMMIT, and ROLLBACK statements to control local transactions.
- <LI><B>Procedure Result Caching</B> - virtual procedure definitions may use a cache hint to cache results in the result set cache.
- <LI><B>Improved Plan Caching</B> - plans used by internal materialization and stored procedure plans will be automatically cached in the prepared plan cache. Improvements were also made to reduce the memory footprint of the plans.
- <LI><B>Refined Load Balancing and Fail Over</B> - clients can use use the statement "SET NEWINSTANCE TRUE" to allow their connection to select a new server instance. See the Client Developer's Guide for more information.
- <LI><B>Simplified Role Usage</B> - a role can now be assigned to any authenticated user via the any-authenticated attribute on the data-role element.
- <LI><B>Materialized View Performance</B> - materialized view tables will now automatically create and use non-unique secondary indexes for unique constraints and indexes defined on the view.
- <LI><B>Binary Web Service Calls</B> - the ws translator now provides an invokeHttp procedure to return the blob contents and string content type of an http/https call.
- <LI><B>Improved clustering support</B> - see the Admin Guide chapter on clustering.
- <LI><B>IPv6 support</B> - Teiid can started using IPv6 bind address and can be used with JDBC connection.
- <LI><B>SESSION_ID</B> - A new system function "SESSION_ID" is added to the system function library.
- <LI><B>Assignment Syntax Improvements<B> - Teiid's procedure syntax for assignments was clarified so that the assignment value must be a proper expression. INSERT/UPDATE/DELETE update counts must be obtained from VARIABLES.ROWCOUNT, scalar values must be obtained via a scalar subquery. The parser will continue to accept the old syntax and convert the query into the proper form.
- <LI><B>TEXTAGG</B> - SQL support for Text aggregation. Using this function expression values can be aggregated into a CSV BLOB with configurable delimiter, header, and encoding. The result can be optionally saved to a text file.
+
</UL>
<h2><a name="Compatibility">Compatibility Issues</a></h2>
<ul>
+ <li>TRANSLATE CRITERIA has been deprecated. An alternative approach to update procedures will be introduced in a subsequent version.
<li>Support for named parameter syntax using param=value has been deprecated, since it is ambiguous with a comparison predicate boolean value expression. param<b>=></b>value should be used instead.
</ul>
<h4>from 7.1</h4>
Modified: trunk/cache-jbosscache/pom.xml
===================================================================
--- trunk/cache-jbosscache/pom.xml 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/cache-jbosscache/pom.xml 2010-11-05 18:06:57 UTC (rev 2714)
@@ -25,5 +25,10 @@
<artifactId>jbosscache-core</artifactId>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.jboss.man</groupId>
+ <artifactId>jboss-managed</artifactId>
+ <scope>provided</scope>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
Modified: trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java
===================================================================
--- trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -41,6 +41,7 @@
import org.teiid.language.TableReference;
import org.teiid.logging.LogConstants;
import org.teiid.logging.LogManager;
+import org.teiid.logging.MessageLevel;
import org.teiid.metadata.AbstractMetadataRecord;
import org.teiid.metadata.Column;
import org.teiid.metadata.RuntimeMetadata;
@@ -185,7 +186,7 @@
results = connection.queryMore(results.getQueryLocator(), context.getBatchSize());
}
resultBatch = new ArrayList<List<Object>>();
-
+ topResultIndex = 0;
for(SObject sObject : results.getRecords()) {
List<Object[]> result = getObjectData(sObject);
for(Iterator<Object[]> i = result.iterator(); i.hasNext(); ) {
@@ -291,6 +292,9 @@
}
private void logFields(String sObjectName, List<Object> fields) throws TranslatorException {
+ if (!LogManager.isMessageToBeRecorded(LogConstants.CTX_CONNECTOR, MessageLevel.DETAIL)) {
+ return;
+ }
LogManager.logDetail(LogConstants.CTX_CONNECTOR, "SalesForce Object Name = " + sObjectName); //$NON-NLS-1$
LogManager.logDetail(LogConstants.CTX_CONNECTOR, "FieldCount = " + fields.size()); //$NON-NLS-1$
for(int i = 0; i < fields.size(); i++) {
Copied: trunk/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/TestQueryExecutionImpl.java (from rev 2707, branches/7.2.x/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/TestQueryExecutionImpl.java)
===================================================================
--- trunk/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/TestQueryExecutionImpl.java (rev 0)
+++ trunk/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/TestQueryExecutionImpl.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -0,0 +1,69 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.translator.salesforce.execution;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.teiid.cdk.api.TranslationUtility;
+import org.teiid.language.Select;
+import org.teiid.metadata.RuntimeMetadata;
+import org.teiid.translator.ExecutionContext;
+import org.teiid.translator.salesforce.SalesforceConnection;
+import org.teiid.translator.salesforce.execution.visitors.TestVisitors;
+import org.w3c.dom.Element;
+
+import com.sforce.soap.partner.QueryResult;
+import com.sforce.soap.partner.sobject.SObject;
+
+@SuppressWarnings("nls")
+public class TestQueryExecutionImpl {
+
+ private static TranslationUtility translationUtility = new TranslationUtility(TestVisitors.exampleSalesforce());
+
+ @Test public void testBatching() throws Exception {
+ Select command = (Select)translationUtility.parseCommand("select Name from Account"); //$NON-NLS-1$
+ SalesforceConnection sfc = Mockito.mock(SalesforceConnection.class);
+ QueryResult qr = new QueryResult();
+ SObject so = new SObject();
+ so.setType("Account");
+ Element elem = Mockito.mock(Element.class);
+ Mockito.stub(elem.getLocalName()).toReturn("AccountName");
+ so.getAny().add(elem);
+ qr.getRecords().add(so);
+ qr.setDone(false);
+ QueryResult finalQr = new QueryResult();
+ so.getAny().add(elem);
+ finalQr.getRecords().add(so);
+ finalQr.setDone(true);
+ Mockito.stub(sfc.query("SELECT Account.AccountName FROM Account", 0, false)).toReturn(qr);
+ Mockito.stub(sfc.queryMore(null, 0)).toReturn(finalQr);
+ QueryExecutionImpl qei = new QueryExecutionImpl(command, sfc, Mockito.mock(RuntimeMetadata.class), Mockito.mock(ExecutionContext.class));
+ qei.execute();
+ assertNotNull(qei.next());
+ assertNotNull(qei.next());
+ assertNull(qei.next());
+ }
+
+}
Modified: trunk/console/src/main/java/org/teiid/rhq/admin/DQPManagementView.java
===================================================================
--- trunk/console/src/main/java/org/teiid/rhq/admin/DQPManagementView.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/console/src/main/java/org/teiid/rhq/admin/DQPManagementView.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -64,10 +64,8 @@
public class DQPManagementView implements PluginConstants {
private static ManagedComponent mc = null;
- private static final Log LOG = LogFactory
- .getLog(PluginConstants.DEFAULT_LOGGER_CATEGORY);
- private static final MetaValueFactory metaValueFactory = MetaValueFactory
- .getInstance();
+ private static final Log LOG = LogFactory.getLog(PluginConstants.DEFAULT_LOGGER_CATEGORY);
+ private static final MetaValueFactory metaValueFactory = MetaValueFactory.getInstance();
private static final String VDB_EXT = ".vdb"; //$NON-NLS-1$
@@ -83,13 +81,10 @@
Object resultObject = new Object();
if (componentType.equals(PluginConstants.ComponentType.Platform.NAME)) {
- resultObject = getPlatformMetric(connection, componentType, metric,
- valueMap);
+ resultObject = getPlatformMetric(connection, componentType, metric, valueMap);
} else if (componentType.equals(PluginConstants.ComponentType.VDB.NAME)) {
- resultObject = getVdbMetric(connection, componentType, identifier,
- metric, valueMap);
+ resultObject = getVdbMetric(connection, componentType, identifier,metric, valueMap);
}
-
return resultObject;
}
@@ -98,44 +93,33 @@
Object resultObject = new Object();
- if (metric
- .equals(PluginConstants.ComponentType.Platform.Metrics.QUERY_COUNT)) {
+ if (metric.equals(PluginConstants.ComponentType.Platform.Metrics.QUERY_COUNT)) {
resultObject = new Double(getQueryCount(connection).doubleValue());
- } else if (metric
- .equals(PluginConstants.ComponentType.Platform.Metrics.SESSION_COUNT)) {
+ } else if (metric.equals(PluginConstants.ComponentType.Platform.Metrics.SESSION_COUNT)) {
resultObject = new Double(getSessionCount(connection).doubleValue());
- } else if (metric
- .equals(PluginConstants.ComponentType.Platform.Metrics.LONG_RUNNING_QUERIES)) {
+ } else if (metric.equals(PluginConstants.ComponentType.Platform.Metrics.LONG_RUNNING_QUERIES)) {
Collection<Request> longRunningQueries = new ArrayList<Request>();
- getRequestCollectionValue(getLongRunningQueries(connection),
- longRunningQueries);
+ getRequestCollectionValue(getLongRunningQueries(connection), longRunningQueries);
resultObject = new Double(longRunningQueries.size());
- } else if (metric
- .equals(PluginConstants.ComponentType.Platform.Metrics.BUFFER_USAGE)) {
+ } else if (metric.equals(PluginConstants.ComponentType.Platform.Metrics.BUFFER_USAGE)) {
try {
- resultObject = ProfileServiceUtil
- .doubleValue(getUsedBufferSpace(connection));
+ resultObject = ProfileServiceUtil.doubleValue(getUsedBufferSpace(connection));
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.GET_BUFFER_USAGE; //$NON-NLS-1$
LOG.error(msg, e);
}
- } else if (metric.startsWith(Admin.Cache.PREPARED_PLAN_CACHE.toString()
- + ".") //$NON-NLS-1$
- || metric.startsWith(Admin.Cache.QUERY_SERVICE_RESULT_SET_CACHE
- .toString()
- + ".")) { //$NON-NLS-1$
+ } else if (metric.startsWith(Admin.Cache.PREPARED_PLAN_CACHE.toString() + ".") //$NON-NLS-1$
+ || metric.startsWith(Admin.Cache.QUERY_SERVICE_RESULT_SET_CACHE .toString()+ ".")) { //$NON-NLS-1$
return getCacheProperty(connection, metric);
}
return resultObject;
}
- private Object getCacheProperty(ProfileServiceConnection connection,
- String metric) {
+ private Object getCacheProperty(ProfileServiceConnection connection,String metric) {
int dotIndex = metric.indexOf('.');
String cacheType = metric.substring(0, dotIndex);
String property = metric.substring(dotIndex + 1);
- CompositeValueSupport mv = (CompositeValueSupport) getCacheStats(
- connection, cacheType);
+ CompositeValueSupport mv = (CompositeValueSupport) getCacheStats(connection, cacheType);
MetaValue v = mv.get(property);
return ((SimpleValue) v).getValue();
}
@@ -146,27 +130,19 @@
Object resultObject = new Object();
- if (metric
- .equals(PluginConstants.ComponentType.VDB.Metrics.ERROR_COUNT)) {
+ if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.ERROR_COUNT)) {
// TODO remove version parameter after AdminAPI is changed
- resultObject = getErrorCount(connection, (String) valueMap
- .get(VDB.NAME));
- } else if (metric
- .equals(PluginConstants.ComponentType.VDB.Metrics.STATUS)) {
+ resultObject = getErrorCount(connection, (String) valueMap.get(VDB.NAME));
+ } else if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.STATUS)) {
// TODO remove version parameter after AdminAPI is changed
- resultObject = getVDBStatus(connection, (String) valueMap
- .get(VDB.NAME));
- } else if (metric
- .equals(PluginConstants.ComponentType.VDB.Metrics.QUERY_COUNT)) {
+ resultObject = getVDBStatus(connection, (String) valueMap.get(VDB.NAME));
+ } else if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.QUERY_COUNT)) {
resultObject = new Double(getQueryCount(connection).doubleValue());
- } else if (metric
- .equals(PluginConstants.ComponentType.VDB.Metrics.SESSION_COUNT)) {
+ } else if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.SESSION_COUNT)) {
resultObject = new Double(getSessionCount(connection).doubleValue());
- } else if (metric
- .equals(PluginConstants.ComponentType.VDB.Metrics.LONG_RUNNING_QUERIES)) {
+ } else if (metric.equals(PluginConstants.ComponentType.VDB.Metrics.LONG_RUNNING_QUERIES)) {
Collection<Request> longRunningQueries = new ArrayList<Request>();
- getRequestCollectionValue(getLongRunningQueries(connection),
- longRunningQueries);
+ getRequestCollectionValue(getLongRunningQueries(connection), longRunningQueries);
resultObject = new Double(longRunningQueries.size());
}
return resultObject;
@@ -179,14 +155,10 @@
public void executeOperation(ProfileServiceConnection connection,
ExecutedResult operationResult, final Map<String, Object> valueMap) {
- if (operationResult.getComponentType().equals(
- PluginConstants.ComponentType.Platform.NAME)) {
- executePlatformOperation(connection, operationResult,
- operationResult.getOperationName(), valueMap);
- } else if (operationResult.getComponentType().equals(
- PluginConstants.ComponentType.VDB.NAME)) {
- executeVdbOperation(connection, operationResult, operationResult
- .getOperationName(), valueMap);
+ if (operationResult.getComponentType().equals(PluginConstants.ComponentType.Platform.NAME)) {
+ executePlatformOperation(connection, operationResult, operationResult.getOperationName(), valueMap);
+ } else if (operationResult.getComponentType().equals( PluginConstants.ComponentType.VDB.NAME)) {
+ executeVdbOperation(connection, operationResult, operationResult .getOperationName(), valueMap);
}
}
@@ -199,50 +171,37 @@
if (operationName.equals(Platform.Operations.GET_LONGRUNNINGQUERIES)) {
List<String> fieldNameList = operationResult.getFieldNameList();
- getRequestCollectionValue(getLongRunningQueries(connection),
- resultObject);
- operationResult.setContent(createReportResultList(fieldNameList,
- resultObject.iterator()));
+ getRequestCollectionValue(getLongRunningQueries(connection), resultObject);
+ operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
} else if (operationName.equals(Platform.Operations.GET_SESSIONS)) {
List<String> fieldNameList = operationResult.getFieldNameList();
MetaValue sessionMetaValue = getSessions(connection);
- getSessionCollectionValue(sessionMetaValue,
- activeSessionsCollection);
- operationResult.setContent(createReportResultList(fieldNameList,
- activeSessionsCollection.iterator()));
+ getSessionCollectionValue(sessionMetaValue,activeSessionsCollection);
+ operationResult.setContent(createReportResultList(fieldNameList, activeSessionsCollection.iterator()));
} else if (operationName.equals(Platform.Operations.GET_REQUESTS)) {
List<String> fieldNameList = operationResult.getFieldNameList();
MetaValue requestMetaValue = getRequests(connection);
getRequestCollectionValue(requestMetaValue, resultObject);
- operationResult.setContent(createReportResultList(fieldNameList,
- resultObject.iterator()));
+ operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
} else if (operationName.equals(Platform.Operations.GET_TRANSACTIONS)) {
List<String> fieldNameList = operationResult.getFieldNameList();
MetaValue transactionMetaValue = getTransactions(connection);
- getTransactionCollectionValue(transactionMetaValue,
- transactionsCollection);
- operationResult.setContent(createReportResultList(fieldNameList,
- resultObject.iterator()));
+ getTransactionCollectionValue(transactionMetaValue,transactionsCollection);
+ operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
} else if (operationName.equals(Platform.Operations.KILL_TRANSACTION)) {
- Long sessionID = (Long) valueMap
- .get(Operation.Value.TRANSACTION_ID);
- MetaValue[] args = new MetaValue[] { metaValueFactory
- .create(sessionID) };
+ Long sessionID = (Long) valueMap.get(Operation.Value.TRANSACTION_ID);
+ MetaValue[] args = new MetaValue[] { metaValueFactory .create(sessionID) };
try {
- executeManagedOperation(connection, getRuntimeEngineDeployer(
- connection, mc), Platform.Operations.KILL_TRANSACTION,
- args);
+ executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc), Platform.Operations.KILL_TRANSACTION, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.KILL_TRANSACTION; //$NON-NLS-1$
LOG.error(msg, e);
}
} else if (operationName.equals(Platform.Operations.KILL_SESSION)) {
Long sessionID = (Long) valueMap.get(Operation.Value.SESSION_ID);
- MetaValue[] args = new MetaValue[] { metaValueFactory
- .create(sessionID) };
+ MetaValue[] args = new MetaValue[] { metaValueFactory .create(sessionID) };
try {
- executeManagedOperation(connection, getRuntimeEngineDeployer(
- connection, mc), Platform.Operations.KILL_SESSION, args);
+ executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc), Platform.Operations.KILL_SESSION, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.KILL_SESSION; //$NON-NLS-1$
LOG.error(msg, e);
@@ -254,25 +213,21 @@
metaValueFactory.create(requestID),
metaValueFactory.create(sessionID) };
try {
- executeManagedOperation(connection, getRuntimeEngineDeployer(
- connection, mc), Platform.Operations.KILL_REQUEST, args);
+ executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc), Platform.Operations.KILL_REQUEST, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.KILL_REQUEST; //$NON-NLS-1$
LOG.error(msg, e);
}
} else if (operationName.equals(Platform.Operations.DEPLOY_VDB_BY_URL)) {
String vdbUrl = (String) valueMap.get(Operation.Value.VDB_URL);
- String deployName = (String) valueMap
- .get(Operation.Value.VDB_DEPLOY_NAME);
+ String deployName = (String) valueMap.get(Operation.Value.VDB_DEPLOY_NAME);
Object vdbVersion = valueMap.get(Operation.Value.VDB_VERSION);
// strip off vdb extension if user added it
if (deployName.endsWith(VDB_EXT)) {
- deployName = deployName.substring(0, deployName
- .lastIndexOf(VDB_EXT));
+ deployName = deployName.substring(0, deployName.lastIndexOf(VDB_EXT));
}
if (vdbVersion != null) {
- deployName = deployName
- + "." + ((Integer) vdbVersion).toString() + VDB_EXT; //$NON-NLS-1$
+ deployName = deployName + "." + ((Integer) vdbVersion).toString() + VDB_EXT; //$NON-NLS-1$
}
// add vdb extension if there was no version
if (!deployName.endsWith(VDB_EXT)) {
@@ -281,8 +236,7 @@
try {
URL url = new URL(vdbUrl);
- DeploymentUtils.deployArchive(deployName, connection
- .getDeploymentManager(), url, false);
+ DeploymentUtils.deployArchive(deployName, connection.getDeploymentManager(), url, false);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.DEPLOY_VDB_BY_URL; //$NON-NLS-1$
LOG.error(msg, e);
@@ -297,41 +251,30 @@
Collection<ArrayList<String>> sqlResultsObject = new ArrayList<ArrayList<String>>();
Collection<Request> resultObject = new ArrayList<Request>();
Collection<Session> activeSessionsCollection = new ArrayList<Session>();
- String vdbName = (String) valueMap
- .get(PluginConstants.ComponentType.VDB.NAME);
- String vdbVersion = (String) valueMap
- .get(PluginConstants.ComponentType.VDB.VERSION);
+ String vdbName = (String) valueMap.get(PluginConstants.ComponentType.VDB.NAME);
+ String vdbVersion = (String) valueMap.get(PluginConstants.ComponentType.VDB.VERSION);
if (operationName.equals(VDB.Operations.GET_PROPERTIES)) {
List<String> fieldNameList = operationResult.getFieldNameList();
getProperties(connection, PluginConstants.ComponentType.VDB.NAME);
- operationResult.setContent(createReportResultList(fieldNameList,
- resultObject.iterator()));
+ operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
} else if (operationName.equals(VDB.Operations.GET_SESSIONS)) {
List<String> fieldNameList = operationResult.getFieldNameList();
MetaValue sessionMetaValue = getSessions(connection);
- getSessionCollectionValueForVDB(sessionMetaValue,
- activeSessionsCollection, vdbName);
- operationResult.setContent(createReportResultList(fieldNameList,
- activeSessionsCollection.iterator()));
+ getSessionCollectionValueForVDB(sessionMetaValue, activeSessionsCollection, vdbName);
+ operationResult.setContent(createReportResultList(fieldNameList, activeSessionsCollection.iterator()));
} else if (operationName.equals(VDB.Operations.GET_REQUESTS)) {
List<String> fieldNameList = operationResult.getFieldNameList();
- MetaValue requestMetaValue = getRequestsForVDB(connection, vdbName,
- Integer.parseInt(vdbVersion));
+ MetaValue requestMetaValue = getRequestsForVDB(connection, vdbName, Integer.parseInt(vdbVersion));
getRequestCollectionValue(requestMetaValue, resultObject);
- operationResult.setContent(createReportResultList(fieldNameList,
- resultObject.iterator()));
+ operationResult.setContent(createReportResultList(fieldNameList, resultObject.iterator()));
} else if (operationName.equals(VDB.Operations.GET_MATVIEWS)) {
List<String> fieldNameList = operationResult.getFieldNameList();
- MetaValue resultsMetaValue = executeMaterializedViewQuery(
- connection, formatVdbName(vdbName), Integer
- .parseInt(vdbVersion));
+ MetaValue resultsMetaValue = executeMaterializedViewQuery( connection, formatVdbName(vdbName), Integer.parseInt(vdbVersion));
getResultsCollectionValue(resultsMetaValue, sqlResultsObject);
- operationResult.setContent(createReportResultListForMatViewQuery(
- fieldNameList, sqlResultsObject.iterator()));
+ operationResult.setContent(createReportResultListForMatViewQuery(fieldNameList, sqlResultsObject.iterator()));
} else if (operationName.equals(VDB.Operations.RELOAD_MATVIEW)) {
- MetaValue resultsMetaValue = reloadMaterializedView(connection,
- formatVdbName(vdbName), Integer.parseInt(vdbVersion),
+ MetaValue resultsMetaValue = reloadMaterializedView(connection, formatVdbName(vdbName), Integer.parseInt(vdbVersion),
(String) valueMap.get(Operation.Value.MATVIEW_SCHEMA),
(String) valueMap.get(Operation.Value.MATVIEW_TABLE),
(Boolean) valueMap.get(Operation.Value.INVALIDATE_MATVIEW));
@@ -353,15 +296,13 @@
return vdbName.substring(0, vdbName.indexOf(".")); //$NON-NLS-1$
}
- public MetaValue getProperties(ProfileServiceConnection connection,
- final String component) {
+ public MetaValue getProperties(ProfileServiceConnection connection, final String component) {
MetaValue propertyValue = null;
MetaValue args = null;
try {
- propertyValue = executeManagedOperation(connection,
- getRuntimeEngineDeployer(connection, mc),
+ propertyValue = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
PluginConstants.Operation.GET_PROPERTIES, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.GET_PROPERTIES; //$NON-NLS-1$
@@ -378,10 +319,7 @@
MetaValue args = null;
try {
- requestsCollection = executeManagedOperation(connection,
- getRuntimeEngineDeployer(connection, mc),
-
- PluginConstants.Operation.GET_REQUESTS, args);
+ requestsCollection = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc), PluginConstants.Operation.GET_REQUESTS, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + Platform.Operations.GET_REQUESTS; //$NON-NLS-1$
LOG.error(msg, e);
@@ -398,15 +336,11 @@
MetaValue[] args = new MetaValue[] {
MetaValueFactory.getInstance().create(vdbName),
MetaValueFactory.getInstance().create(vdbVersion),
- MetaValueFactory.getInstance().create(
- Operation.Value.MAT_VIEW_QUERY),
- MetaValueFactory.getInstance()
- .create(Long.parseLong("9999999")) }; //$NON-NLS-1$
+ MetaValueFactory.getInstance().create(Operation.Value.MAT_VIEW_QUERY),
+ MetaValueFactory.getInstance().create(Long.parseLong("9999999")) }; //$NON-NLS-1$
try {
- resultsCollection = executeManagedOperation(connection,
- getRuntimeEngineDeployer(connection, mc),
- VDB.Operations.EXECUTE_QUERIES, args);
+ resultsCollection = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc), VDB.Operations.EXECUTE_QUERIES, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + VDB.Operations.EXECUTE_QUERIES; //$NON-NLS-1$
LOG.error(msg, e);
@@ -429,12 +363,10 @@
MetaValueFactory.getInstance().create(vdbName),
MetaValueFactory.getInstance().create(vdbVersion),
MetaValueFactory.getInstance().create(query),
- MetaValueFactory.getInstance()
- .create(Long.parseLong("9999999")) }; //$NON-NLS-1$
+ MetaValueFactory.getInstance().create(Long.parseLong("9999999")) }; //$NON-NLS-1$
try {
- result = executeManagedOperation(connection,
- getRuntimeEngineDeployer(connection, mc),
+ result = executeManagedOperation(connection, getRuntimeEngineDeployer(connection, mc),
VDB.Operations.EXECUTE_QUERIES, args);
} catch (Exception e) {
final String msg = "Exception executing operation: " + VDB.Operations.RELOAD_MATVIEW; //$NON-NLS-1$
@@ -508,12 +440,10 @@
ManagedComponent mcVdb = null;
try {
- mcVdb = ProfileServiceUtil
- .getManagedComponent(connection,
+ mcVdb = ProfileServiceUtil.getManagedComponent(connection,
new org.jboss.managed.api.ComponentType(
PluginConstants.ComponentType.VDB.TYPE,
- PluginConstants.ComponentType.VDB.SUBTYPE),
- vdbName);
+ PluginConstants.ComponentType.VDB.SUBTYPE), vdbName);
} catch (NamingException e) {
final String msg = "NamingException in getVDBStatus(): " + e.getExplanation(); //$NON-NLS-1$
LOG.error(msg, e);
@@ -539,9 +469,8 @@
try {
if (args.length == 1 && args[0] == null) {
return mo.invoke();
- } else {
- return mo.invoke(args);
}
+ return mo.invoke(args);
} catch (Exception e) {
final String msg = "Exception getting the AdminApi in " + operation; //$NON-NLS-1$
LOG.error(msg, e);
@@ -575,8 +504,7 @@
* @param mc
* @return
*/
- private static ManagedComponent getBufferService(
- ProfileServiceConnection connection, ManagedComponent mc) {
+ private static ManagedComponent getBufferService(ProfileServiceConnection connection, ManagedComponent mc) {
try {
mc = ProfileServiceUtil.getBufferService(connection);
} catch (NamingException e) {
@@ -589,9 +517,7 @@
return mc;
}
- public static MetaValue getManagedProperty(
- ProfileServiceConnection connection, ManagedComponent mc,
- String property) throws Exception {
+ public static MetaValue getManagedProperty(ProfileServiceConnection connection, ManagedComponent mc, String property) throws Exception {
ManagedProperty managedProperty = null;
try {
@@ -619,7 +545,7 @@
getRequestCollectionValue(requests, requestsCollection);
- if (requestsCollection != null && !requestsCollection.isEmpty()) {
+ if (!requestsCollection.isEmpty()) {
count = requestsCollection.size();
}
@@ -639,17 +565,14 @@
* @return count
* @throws Exception
*/
- private int getErrorCount(ProfileServiceConnection connection,
- String vdbName) {
+ private int getErrorCount(ProfileServiceConnection connection,String vdbName) {
ManagedComponent mcVdb = null;
try {
- mcVdb = ProfileServiceUtil
- .getManagedComponent(connection,
+ mcVdb = ProfileServiceUtil.getManagedComponent(connection,
new org.jboss.managed.api.ComponentType(
PluginConstants.ComponentType.VDB.TYPE,
- PluginConstants.ComponentType.VDB.SUBTYPE),
- vdbName);
+ PluginConstants.ComponentType.VDB.SUBTYPE),vdbName);
} catch (NamingException e) {
final String msg = "NamingException in getVDBStatus(): " + e.getExplanation(); //$NON-NLS-1$
LOG.error(msg, e);
@@ -661,14 +584,12 @@
// Get models from VDB
int count = 0;
ManagedProperty property = mcVdb.getProperty("models"); //$NON-NLS-1$
- CollectionValueSupport valueSupport = (CollectionValueSupport) property
- .getValue();
+ CollectionValueSupport valueSupport = (CollectionValueSupport) property.getValue();
MetaValue[] metaValues = valueSupport.getElements();
for (MetaValue value : metaValues) {
GenericValueSupport genValueSupport = (GenericValueSupport) value;
- ManagedObjectImpl managedObject = (ManagedObjectImpl) genValueSupport
- .getValue();
+ ManagedObjectImpl managedObject = (ManagedObjectImpl) genValueSupport.getValue();
// Get any model errors/warnings
MetaValue errors = managedObject.getProperty("errors").getValue(); //$NON-NLS-1$
@@ -684,14 +605,10 @@
protected MetaValue getCacheStats(ProfileServiceConnection connection,
String type) {
try {
- return executeManagedOperation(connection,
- getRuntimeEngineDeployer(connection, mc),
- Platform.Operations.GET_CACHE_STATS, SimpleValueSupport
- .wrap(type));
+ return executeManagedOperation(connection,getRuntimeEngineDeployer(connection, mc),
+ Platform.Operations.GET_CACHE_STATS, SimpleValueSupport.wrap(type));
} catch (Exception e) {
- LOG
- .error(
- "Exception executing operation: " + Platform.Operations.GET_CACHE_STATS, e); //$NON-NLS-1$
+ LOG.error("Exception executing operation: " + Platform.Operations.GET_CACHE_STATS, e); //$NON-NLS-1$
}
return null;
}
@@ -729,61 +646,49 @@
return usedBufferSpace;
}
- private void getRequestCollectionValue(MetaValue pValue,
- Collection<Request> list) {
+ private void getRequestCollectionValue(MetaValue pValue, Collection<Request> list) {
MetaType metaType = pValue.getMetaType();
if (metaType.isCollection()) {
- for (MetaValue value : ((CollectionValueSupport) pValue)
- .getElements()) {
+ for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isComposite()) {
RequestMetadataMapper rmm = new RequestMetadataMapper();
RequestMetadata request = rmm.unwrapMetaValue(value);
list.add(request);
} else {
- throw new IllegalStateException(pValue
- + " is not a Composite type"); //$NON-NLS-1$
+ throw new IllegalStateException(pValue + " is not a Composite type"); //$NON-NLS-1$
}
}
}
}
- private void getResultsCollectionValue(MetaValue pValue,
- Collection<ArrayList<String>> list) {
+ private void getResultsCollectionValue(MetaValue pValue, Collection<ArrayList<String>> list) {
MetaType metaType = pValue.getMetaType();
if (metaType.isCollection()) {
- for (MetaValue value : ((CollectionValueSupport) pValue)
- .getElements()) {
+ for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isCollection()) {
- ArrayList<String> row = (ArrayList<String>) MetaValueFactory
- .getInstance().unwrap(value);
+ ArrayList<String> row = (ArrayList<String>) MetaValueFactory.getInstance().unwrap(value);
list.add(row);
}
}
}
}
- private void getResultsCollectionValueForMatViewRefresh(MetaValue pValue,
- Collection<ArrayList<String>> list) {
+ private void getResultsCollectionValueForMatViewRefresh(MetaValue pValue, Collection<ArrayList<String>> list) {
MetaType metaType = pValue.getMetaType();
for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isCollection()) {
- ArrayList<String> row = (ArrayList<String>) MetaValueFactory
- .getInstance().unwrap(value);
+ ArrayList<String> row = (ArrayList<String>) MetaValueFactory.getInstance().unwrap(value);
list.add(row);
}
}
-
}
- public static <T> void getTransactionCollectionValue(MetaValue pValue,
- Collection<Transaction> list) {
+ public static <T> void getTransactionCollectionValue(MetaValue pValue, Collection<Transaction> list) {
MetaType metaType = pValue.getMetaType();
if (metaType.isCollection()) {
- for (MetaValue value : ((CollectionValueSupport) pValue)
- .getElements()) {
+ for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isComposite()) {
- Transaction transaction = (Transaction) MetaValueFactory
- .getInstance().unwrap(value);
+ Transaction transaction = (Transaction) MetaValueFactory.getInstance().unwrap(value);
list.add(transaction);
} else {
throw new IllegalStateException(pValue
@@ -793,15 +698,12 @@
}
}
- public static <T> void getSessionCollectionValue(MetaValue pValue,
- Collection<Session> list) {
+ public static <T> void getSessionCollectionValue(MetaValue pValue,Collection<Session> list) {
MetaType metaType = pValue.getMetaType();
if (metaType.isCollection()) {
- for (MetaValue value : ((CollectionValueSupport) pValue)
- .getElements()) {
+ for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isComposite()) {
- Session Session = (Session) MetaValueFactory.getInstance()
- .unwrap(value);
+ Session Session = (Session) MetaValueFactory.getInstance().unwrap(value);
list.add(Session);
} else {
throw new IllegalStateException(pValue
@@ -811,28 +713,23 @@
}
}
- public static <T> void getSessionCollectionValueForVDB(MetaValue pValue,
- Collection<Session> list, String vdbName) {
+ public static <T> void getSessionCollectionValueForVDB(MetaValue pValue,Collection<Session> list, String vdbName) {
MetaType metaType = pValue.getMetaType();
if (metaType.isCollection()) {
- for (MetaValue value : ((CollectionValueSupport) pValue)
- .getElements()) {
+ for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isComposite()) {
- Session session = (Session) MetaValueFactory.getInstance()
- .unwrap(value);
+ Session session = (Session) MetaValueFactory.getInstance().unwrap(value);
if (session.getVDBName().equals(vdbName)) {
list.add(session);
}
} else {
- throw new IllegalStateException(pValue
- + " is not a Composite type"); //$NON-NLS-1$
+ throw new IllegalStateException(pValue+ " is not a Composite type"); //$NON-NLS-1$
}
}
}
}
- private Collection createReportResultList(List fieldNameList,
- Iterator objectIter) {
+ private Collection createReportResultList(List fieldNameList, Iterator objectIter) {
Collection reportResultList = new ArrayList();
while (objectIter.hasNext()) {
@@ -858,16 +755,13 @@
return reportResultList;
}
- private Collection createReportResultListForMatViewQuery(
- List fieldNameList, Iterator objectIter) {
+ private Collection createReportResultListForMatViewQuery(List fieldNameList, Iterator objectIter) {
Collection reportResultList = new ArrayList();
// Iterate through rows
while (objectIter.hasNext()) {
- ArrayList<Object> columnValues = (ArrayList<Object>) objectIter
- .next();
+ ArrayList<Object> columnValues = (ArrayList<Object>) objectIter.next();
- Class cls = null;
try {
Iterator fieldIter = fieldNameList.iterator();
Map reportValueMap = new HashMap<String, Object>();
Modified: trunk/console/src/main/java/org/teiid/rhq/plugin/Facet.java
===================================================================
--- trunk/console/src/main/java/org/teiid/rhq/plugin/Facet.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/console/src/main/java/org/teiid/rhq/plugin/Facet.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -351,9 +351,7 @@
Map<String, ManagedProperty> managedProperties = managedComponent
.getProperties();
- ProfileServiceUtil.convertConfigurationToManagedProperties(
- managedProperties, resourceConfig, resourceContext
- .getResourceType());
+ ProfileServiceUtil.convertConfigurationToManagedProperties(managedProperties, resourceConfig, resourceContext.getResourceType(), null);
try {
managementView.updateComponent(managedComponent);
@@ -398,23 +396,23 @@
DeploymentManager deploymentManager = getConnection()
.getDeploymentManager();
-
- log.debug("Stopping deployment [" + this.deploymentName + "]..."); //$NON-NLS-1$ //$NON-NLS-2$
+
+ log.debug("Stopping deployment [" + this.deploymentUrl + "]..."); //$NON-NLS-1$ //$NON-NLS-2$
DeploymentProgress progress = deploymentManager
- .stop(this.deploymentName);
+ .stop(this.deploymentUrl);
DeploymentStatus stopStatus = DeploymentUtils.run(progress);
if (stopStatus.isFailed()) {
- log.error("Failed to stop deployment '" + this.deploymentName //$NON-NLS-1$
+ log.error("Failed to stop deployment '" + this.deploymentUrl //$NON-NLS-1$
+ "'.", stopStatus.getFailure()); //$NON-NLS-1$
throw new Exception("Failed to stop deployment '" //$NON-NLS-1$
+ this.deploymentName + "' - cause: " //$NON-NLS-1$
+ stopStatus.getFailure());
}
- log.debug("Removing deployment [" + this.deploymentName + "]..."); //$NON-NLS-1$ //$NON-NLS-2$
- progress = deploymentManager.remove(this.deploymentName);
+ log.debug("Removing deployment [" + this.deploymentUrl + "]..."); //$NON-NLS-1$ //$NON-NLS-2$
+ progress = deploymentManager.remove(this.deploymentUrl);
DeploymentStatus removeStatus = DeploymentUtils.run(progress);
if (removeStatus.isFailed()) {
- log.error("Failed to remove deployment '" + this.deploymentName //$NON-NLS-1$
+ log.error("Failed to remove deployment '" + this.deploymentUrl //$NON-NLS-1$
+ "'.", removeStatus.getFailure()); //$NON-NLS-1$
throw new Exception("Failed to remove deployment '" //$NON-NLS-1$
+ this.deploymentName + "' - cause: " //$NON-NLS-1$
@@ -758,11 +756,9 @@
DeploymentTemplateInfo template;
try {
template = managementView.getTemplate(templateName);
- Map<String, ManagedProperty> managedProperties = template
- .getProperties();
+ Map<String, ManagedProperty> managedProperties = template.getProperties();
- ProfileServiceUtil.convertConfigurationToManagedProperties(
- managedProperties, resourceConfig, resourceType);
+ ProfileServiceUtil.convertConfigurationToManagedProperties(managedProperties, resourceConfig, resourceType, null);
LOG.debug("Applying template [" + templateName //$NON-NLS-1$
+ "] to create ManagedComponent of type [" + componentType //$NON-NLS-1$
Modified: trunk/console/src/main/java/org/teiid/rhq/plugin/PlatformComponent.java
===================================================================
--- trunk/console/src/main/java/org/teiid/rhq/plugin/PlatformComponent.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/console/src/main/java/org/teiid/rhq/plugin/PlatformComponent.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -58,9 +58,6 @@
public class PlatformComponent extends Facet {
private final Log LOG = LogFactory.getLog(PluginConstants.DEFAULT_LOGGER_CATEGORY);
- String[] PLATFORM_SERVICES_NAMES = { "RuntimeEngineDeployer", //$NON-NLS-1$
- "BufferService", "SessionService", "JdbcSocketConfiguration" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-
@Override
public void start(ResourceContext context) {
this.setComponentName(context.getPluginConfiguration().getSimpleValue( "name", null)); //$NON-NLS-1$
@@ -167,18 +164,18 @@
PluginConstants.ComponentType.Platform.TEIID_TYPE,
PluginConstants.ComponentType.Platform.TEIID_SUB_TYPE);
- ManagedComponent managedComponent = null;
report.setStatus(ConfigurationUpdateStatus.SUCCESS);
try {
managementView = getConnection().getManagementView();
-
- for (String serviceName : PLATFORM_SERVICES_NAMES) {
-
- managedComponent = managementView.getComponent(serviceName, componentType);
+ Set<ManagedComponent> allComponents = managementView.getComponentsForType(componentType);
+
+ for (ManagedComponent managedComponent : allComponents) {
+
Map<String, ManagedProperty> managedProperties = managedComponent.getProperties();
- ProfileServiceUtil.convertConfigurationToManagedProperties(managedProperties, resourceConfig, resourceContext.getResourceType());
+
+ ProfileServiceUtil.convertConfigurationToManagedProperties(managedProperties, resourceConfig, resourceContext.getResourceType(), managedComponent.getName());
try {
managementView.updateComponent(managedComponent);
@@ -234,10 +231,11 @@
} catch (Exception e) {
LOG.error("Exception getting components in Platform loadConfiguration(): " + e.getMessage()); //$NON-NLS-1$
}
-
+
for (ManagedComponent mc : mcSet) {
Map<String, ManagedProperty> mcMap = mc.getProperties();
- setProperties(mcMap, configuration);
+ String name = mc.getName();
+ setProperties(name, mcMap, configuration);
}
}
@@ -245,12 +243,11 @@
* @param mcMap
* @param configuration
*/
- private void setProperties(Map<String, ManagedProperty> mcMap,
- Configuration configuration) {
+ private void setProperties(String compName, Map<String, ManagedProperty> mcMap, Configuration configuration) {
for (ManagedProperty mProp : mcMap.values()) {
try {
String value = ProfileServiceUtil.stringValue(mProp.getValue());
- PropertySimple prop = new PropertySimple(mProp.getName(), value);
+ PropertySimple prop = new PropertySimple(compName+"."+mProp.getName(), value); //$NON-NLS-1$
configuration.put(prop);
} catch (Exception e) {
LOG.error("Exception setting properties in Platform loadConfiguration(): " + e.getMessage()); //$NON-NLS-1$
Modified: trunk/console/src/main/java/org/teiid/rhq/plugin/util/ProfileServiceUtil.java
===================================================================
--- trunk/console/src/main/java/org/teiid/rhq/plugin/util/ProfileServiceUtil.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/console/src/main/java/org/teiid/rhq/plugin/util/ProfileServiceUtil.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -407,37 +407,33 @@
return config;
}
- public static void convertConfigurationToManagedProperties(
- Map<String, ManagedProperty> managedProperties,
- Configuration configuration, ResourceType resourceType) {
- ConfigurationDefinition configDefinition = resourceType
- .getResourceConfigurationDefinition();
+ public static void convertConfigurationToManagedProperties(Map<String, ManagedProperty> managedProperties, Configuration configuration, ResourceType resourceType, String prefix) {
+ ConfigurationDefinition configDefinition = resourceType.getResourceConfigurationDefinition();
for (ManagedProperty managedProperty : managedProperties.values()) {
String propertyName = managedProperty.getName();
- PropertyDefinition propertyDefinition = configDefinition
- .get(propertyName);
+ if (prefix != null) {
+ propertyName = prefix + "." + propertyName; //$NON-NLS-1$
+ }
+ PropertyDefinition propertyDefinition = configDefinition.get(propertyName);
if (propertyDefinition == null) {
// The managed property is not defined in the configuration
continue;
}
- populateManagedPropertyFromProperty(managedProperty,
- propertyDefinition, configuration);
+ populateManagedPropertyFromProperty(managedProperty,propertyDefinition, configuration);
}
return;
}
- public static void populateManagedPropertyFromProperty(
- ManagedProperty managedProperty,
- PropertyDefinition propertyDefinition, Configuration configuration) {
+ public static void populateManagedPropertyFromProperty(ManagedProperty managedProperty, PropertyDefinition propertyDefinition, Configuration configuration) {
// If the ManagedProperty defines a default value, assume it's more
// definitive than any default value that may
// have been defined in the plugin descriptor, and update the
// PropertyDefinition to use that as its default
// value.
MetaValue defaultValue = managedProperty.getDefaultValue();
- if (defaultValue != null)
- updateDefaultValueOnPropertyDefinition(propertyDefinition,
- defaultValue);
+ if (defaultValue != null) {
+ updateDefaultValueOnPropertyDefinition(propertyDefinition,defaultValue);
+ }
MetaValue metaValue = managedProperty.getValue();
PropertyAdapter propertyAdapter = null;
if (metaValue != null) {
@@ -445,24 +441,15 @@
+ metaValue.getMetaType() + " from Teiid property " //$NON-NLS-1$
+ propertyDefinition.getName() + " with definition " //$NON-NLS-1$
+ propertyDefinition + "..."); //$NON-NLS-1$
- propertyAdapter = PropertyAdapterFactory
- .getPropertyAdapter(metaValue);
+ propertyAdapter = PropertyAdapterFactory.getPropertyAdapter(metaValue);
- propertyAdapter.populateMetaValueFromProperty(configuration
- .getSimple(propertyDefinition.getName()), metaValue,
- propertyDefinition);
+ propertyAdapter.populateMetaValueFromProperty(configuration.getSimple(propertyDefinition.getName()), metaValue, propertyDefinition);
managedProperty.setValue(metaValue);
} else {
MetaType metaType = managedProperty.getMetaType();
- if (propertyAdapter == null)
- propertyAdapter = PropertyAdapterFactory
- .getPropertyAdapter(metaType);
- LOG.trace("Converting property " + propertyDefinition.getName() //$NON-NLS-1$
- + " with definition " + propertyDefinition //$NON-NLS-1$
- + " to MetaValue of type " + metaType + "..."); //$NON-NLS-1$ //$NON-NLS-2$
- metaValue = propertyAdapter.convertToMetaValue(configuration
- .getSimple(propertyDefinition.getName()),
- propertyDefinition, metaType);
+ propertyAdapter = PropertyAdapterFactory.getPropertyAdapter(metaType);
+ LOG.trace("Converting property " + propertyDefinition.getName() + " with definition " + propertyDefinition + " to MetaValue of type " + metaType + "..."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ metaValue = propertyAdapter.convertToMetaValue(configuration.getSimple(propertyDefinition.getName()),propertyDefinition, metaType);
managedProperty.setValue(metaValue);
}
@@ -472,10 +459,8 @@
PropertyDefinition propertyDefinition,
@NotNull MetaValue defaultValue) {
if (!(propertyDefinition instanceof PropertyDefinitionSimple)) {
- LOG
- .debug("Cannot update default value on non-simple property definition " //$NON-NLS-1$
- + propertyDefinition
- + "(default value is " //$NON-NLS-1$
+ LOG.debug("Cannot update default value on non-simple property definition " //$NON-NLS-1$
+ + propertyDefinition + "(default value is " //$NON-NLS-1$
+ defaultValue + ")."); //$NON-NLS-1$
return;
}
@@ -490,13 +475,11 @@
if (metaType.isSimple()) {
SimpleValue defaultSimpleValue = (SimpleValue) defaultValue;
Serializable value = defaultSimpleValue.getValue();
- propertyDefinitionSimple.setDefaultValue((value != null) ? value
- .toString() : null);
+ propertyDefinitionSimple.setDefaultValue((value != null) ? value.toString() : null);
} else { // defaultValueMetaType.isEnum()
EnumValue defaultEnumValue = (EnumValue) defaultValue;
Serializable value = defaultEnumValue.getValue();
- propertyDefinitionSimple.setDefaultValue((value != null) ? value
- .toString() : null);
+ propertyDefinitionSimple.setDefaultValue((value != null) ? value.toString() : null);
}
}
Modified: trunk/console/src/main/resources/META-INF/rhq-plugin.xml
===================================================================
--- trunk/console/src/main/resources/META-INF/rhq-plugin.xml 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/console/src/main/resources/META-INF/rhq-plugin.xml 2010-11-05 18:06:57 UTC (rev 2714)
@@ -296,104 +296,112 @@
property="QUERY_SERVICE_RESULT_SET_CACHE.requestCount" description="Total number of requests made against cache" />
<resource-configuration>
- <c:group name="teiidProperties" displayName="Runtime Engine Properties"
+ <c:group name="RuntimeEngineDeployer" displayName="Runtime Engine Properties (restart required before modifications take effect)"
hiddenByDefault="false">
- <c:simple-property name="maxRowsFetchSize"
+ <c:simple-property name="RuntimeEngineDeployer.maxRowsFetchSize"
displayName="Max Rows Fetch Size"
description="The maximum number of result set cache entries. 0 indicates no limit. (default 1024)"
required="false" readOnly="false" />
- <c:simple-property name="processName" displayName="Process Name"
- description="Name that uniquely identifies this process" required="false"
- readOnly="false" />
- <c:simple-property name="maxThreads" displayName="Max Threads"
+ <c:simple-property name="RuntimeEngineDeployer.maxThreads" displayName="Max Threads"
description="Process pool maximum thread count. (default 64)"
- required="false" readOnly="false" />
- <c:simple-property name="timeSliceInMilli"
+ required="false" readOnly="false" />
+ <c:simple-property name="RuntimeEngineDeployer.maxActivePlans"
+ displayName="Maximum Concurrent Active plans"
+ description="Increase this value on highly concurrent systems - but ensure that the underlying pools can handle the increased load without timeouts.(default 20)"
+ required="false" readOnly="false" />
+ <c:simple-property name="RuntimeEngineDeployer.timeSliceInMilli"
displayName="Time Slice In Milliseconds"
description="Query processor time slice, in milliseconds. (default 2000)"
required="false" readOnly="false" />
- <c:simple-property name="lobChunkSizeInKB"
+ <c:simple-property name="RuntimeEngineDeployer.lobChunkSizeInKB"
displayName="Lob Chunk Size In KB"
description="The max lob chunk size in KB transferred to the client for xml, blobs, clobs (default 100KB)"
- required="false" readOnly="false" />
- <c:simple-property name="resultSetCacheEnabled"
- displayName="Result Set Cache Enabled"
- description="Denotes whether or not result set caching is enabled. (default true)"
- required="false" readOnly="false" type="boolean" />
- <c:simple-property name="resultSetCacheMaxEntries"
- displayName="Result Set Cache Max Entries"
- description="The maximum number of result set cache entries. -1 indicates no limit. (default 1024)"
- required="false" readOnly="false" />
- <c:simple-property name="resultSetCacheMaxEntryAge"
- displayName="Result Set Cache Max Entry Age"
- description="The maximum age of a result set cache entry in seconds. -1 indicates no max. (default 7200)"
- required="false" readOnly="false" />
- <c:simple-property name="preparedPlanCacheMaxCount"
+ required="false" readOnly="false" />
+ <c:simple-property name="RuntimeEngineDeployer.preparedPlanCacheMaxCount"
displayName="Prepared Plan Cache Max Count"
description="The maximum number of query plans that are cached. Note: this is a memory based cache. (default 250)"
required="false" readOnly="false" />
- <c:simple-property name="activeSessionsCount"
- displayName="Active Session Count" description="Count of active sessions"
- required="false" readOnly="false" />
- <c:simple-property name="queryThresholdInSecs"
+ <c:simple-property name="RuntimeEngineDeployer.queryThresholdInSecs"
displayName="Long Running Query Threshold"
description="Length of time in seconds before a query is considered long running"
required="false" readOnly="false" />
+ <c:simple-property name="RuntimeEngineDeployer.useDataRoles"
+ displayName="Data Roles Enabled"
+ description="Turn on role checking of resources based on the roles defined in VDB (default true)"
+ required="false" readOnly="false" />
</c:group>
- <c:group name="bufferServiceProperties" displayName="Buffer Service Properties"
+
+ <c:group name="ResultSetCacheConfig" displayName="ResultSet Cache Properties" hiddenByDefault="false">
+ <!-- the below property on RuntimeEngineDeployer -->
+ <c:simple-property name="RuntimeEngineDeployer.resultSetCacheEnabled"
+ displayName="Enabled"
+ description="Denotes whether or not result set caching is enabled. (default true)"
+ required="false" readOnly="false" type="boolean" />
+ <c:simple-property name="ResultSetCacheConfig.maxEntries"
+ displayName="Max Entries"
+ description="The maximum number of result set cache entries. -1 indicates no limit. (default 1024)"
+ required="false" readOnly="false" />
+ <c:simple-property name="ResultSetCacheConfig.maxAgeInSeconds"
+ displayName="Max Entry Age"
+ description="The maximum age of a result set cache entry in seconds. -1 indicates no max. (default 7200)"
+ required="false" readOnly="false" />
+ </c:group>
+
+ <c:group name="BufferService" displayName="Buffer Service Properties"
hiddenByDefault="false">
- <c:simple-property name="maxBufferSpace"
+ <c:simple-property name="BufferService.maxBufferSpace"
displayName="Max Buffer Space"
description="Max file storage space, in MB, to be used for buffer files (default 50G)"
required="false" readOnly="false" />
- <c:simple-property name="processorBatchSize"
+ <c:simple-property name="BufferService.processorBatchSize"
displayName="Processor Batch Size"
description="The max row count of a batch sent internally within the query processor. Should be <= the connectorBatchSize. (default 512)"
required="false" readOnly="false" />
- <c:simple-property name="connectorBatchSize"
+ <c:simple-property name="BufferService.connectorBatchSize"
displayName="Connector Batch Size"
description="The max row count of a batch from a connector. Should be even multiple of processorBatchSize. (default 1024)"
required="false" readOnly="false" />
- <c:simple-property name="maxProcessingBatchesColumns"
+ <c:simple-property name="BufferService.maxProcessingBatchesColumns"
displayName="Max Processing Batches Columns"
description="The number of batch columns guarenteed to a processing operation. Set this value lower if the workload typically processes larger numbers of concurrent queries with large intermediate results from operations such as sorting, grouping, etc. (default 128)"
required="false" readOnly="false" />
- <c:simple-property name="maxFileSize" displayName="Max File Size"
+ <c:simple-property name="BufferService.maxFileSize" displayName="Max File Size"
description="Max file size for buffer files (default 2GB)"
required="false" readOnly="false" />
- <c:simple-property name="maxReserveBatchColumns"
+ <c:simple-property name="BufferService.maxReserveBatchColumns"
displayName="Max Reserve Batch Columns"
description="The number of batch columns to allow in memory (default 16384). This value should be set lower or higher depending on the available memory to Teiid in the VM. 16384 is considered a good default for a dedicated 32-bit VM running Teiid with a 1 gig heap."
required="false" readOnly="false" />
</c:group>
- <c:group name="jdbcSocketConfigurationProperties"
- displayName="Jdbc Socket Configuration Properties" hiddenByDefault="false">
- <c:simple-property name="portNumber" displayName="Port Number"
+ <c:group name="JdbcSocketConfiguration" displayName="Jdbc Socket Configuration Properties" hiddenByDefault="false">
+ <c:simple-property name="JdbcSocketConfiguration.enabled" displayName="Enable"
+ description="Enable Socket based JDBC access" required="false" readOnly="false" />
+ <c:simple-property name="JdbcSocketConfiguration.hostName" displayName="Host Name"
+ description="Host Name" required="false" readOnly="false" />
+ <c:simple-property name="JdbcSocketConfiguration.portNumber" displayName="Port Number"
description="Port Number" required="false" readOnly="false" />
- <c:simple-property name="sslEnabled" displayName="SSL Enabled"
- description="SSL enabled" required="false" readOnly="false" type="boolean"
+ <c:simple-property name="JdbcSocketConfiguration.sslEnabled" displayName="SSL Enabled"
+ description="SSL enabled" required="false" readOnly="true" type="boolean"
default="true" />
- <c:simple-property name="hostName" displayName="Host Name"
- description="Host Name" required="false" readOnly="false" />
- <c:simple-property name="maxSocketThreads"
+ <c:simple-property name="JdbcSocketConfiguration.maxSocketThreads"
displayName="Max Socket Threads" description="Max NIO threads"
required="false" readOnly="false" />
- <c:simple-property name="inputBufferSize"
+ <c:simple-property name="JdbcSocketConfiguration.inputBufferSize"
displayName="Input Buffer Size"
description="SO_RCVBUF size, 0 indicates that system default should be used (default 0)"
required="false" readOnly="false" />
- <c:simple-property name="outputBufferSize"
+ <c:simple-property name="JdbcSocketConfiguration.outputBufferSize"
displayName="Output Buffer Size"
description="SO_SNDBUF size, 0 indicates that system default should be used (default 0)"
required="false" readOnly="false" />
</c:group>
- <c:group name="sessionServiceProperties" displayName="Session Service Properties"
+ <c:group name="SessionService" displayName="Session Service Properties"
hiddenByDefault="false">
- <c:simple-property name="sessionExpirationTimeLimit"
+ <c:simple-property name="SessionService.sessionExpirationTimeLimit"
displayName="Session Expiration Time Limit"
description="Max allowed time before the session is terminated by the system, 0 indicates unlimited (default 0)"
required="false" readOnly="false" />
- <c:simple-property name="sessionMaxLimit"
+ <c:simple-property name="SessionService.sessionMaxLimit"
displayName="Session Max Limit"
description="Maximum number of sessions allowed by the system (default 5000)"
required="false" readOnly="false" />
Modified: trunk/documentation/admin-guide/src/main/docbook/en-US/content/appendix-a.xml
===================================================================
--- trunk/documentation/admin-guide/src/main/docbook/en-US/content/appendix-a.xml 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/documentation/admin-guide/src/main/docbook/en-US/content/appendix-a.xml 2010-11-05 18:06:57 UTC (rev 2714)
@@ -37,6 +37,17 @@
<para>The connectAsAdmin methods create a contextual connection to the AdminAPI of the Teiid Server. The connect methods return an extension of the Groovy Sql object to be used for Sql calls to the Teiid Server.</para>
</answer>
</qandaentry>
+
+ <qandaentry>
+ <question>
+ <para>What does "getAdmin()" call do? Why do I need it?</para>
+ </question>
+ <answer>
+ <para>"getAdmin()" returns this contextual connection object created when you executed "connectAsAdmin()" method.
+ This object implements the interface "org.teiid.adminapi.Admin" and AdminShell commands provided are
+ wrappers around this API. Advanced users can use this API directly if the provided wrapper commands do not meet their needs.</para>
+ </answer>
+ </qandaentry>
<qandaentry>
<question>
Modified: trunk/documentation/docbook/custom.dtd
===================================================================
--- trunk/documentation/docbook/custom.dtd 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/documentation/docbook/custom.dtd 2010-11-05 18:06:57 UTC (rev 2714)
@@ -1,4 +1,4 @@
-<!ENTITY versionNumber "7.2">
+<!ENTITY versionNumber "7.3">
<!ENTITY copyrightYear "2009">
<!ENTITY copyrightHolder "Red Hat, Inc.">
<!ENTITY url "http://www.jboss.org/teiid/">
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml 2010-11-05 18:06:57 UTC (rev 2714)
@@ -427,7 +427,7 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod22" xreflabel="delimitedStatement"/>delimitedStatement</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod23">sqlStatement</link> | <link linkend="prod16">errorStatement</link> | <link linkend="prod24">assignStatement</link> | <link linkend="prod25">declareStatement</link> | <link linkend="prod26">continueStatement</link> | <link linkend="prod27">breakStatement</link> ) <SEMICOLON></para></entry></row>
+( <link linkend="prod23">assignStatement</link> | <link linkend="prod24">sqlStatement</link> | <link linkend="prod16">errorStatement</link> | <link linkend="prod25">declareStatement</link> | <link linkend="prod26">continueStatement</link> | <link linkend="prod27">breakStatement</link> ) <SEMICOLON></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod28" xreflabel="block"/>block</para></entry>
<entry align="left" valign="top"><para>::=
@@ -463,19 +463,19 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod25" xreflabel="declareStatement"/>declareStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<DECLARE> <link linkend="prod32">dataType</link> <link linkend="prod2">id</link> ( <EQ> <link linkend="prod33">assignStatementOperand</link> )?</para></entry></row>
+<DECLARE> <link linkend="prod32">dataType</link> <link linkend="prod2">id</link> ( ( <link linkend="prod15">nonReserved</link> | <EQ> ) <link linkend="prod33">assignStatementOperand</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod24" xreflabel="assignStatement"/>assignStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod23" xreflabel="assignStatement"/>assignStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> <EQ> <link linkend="prod33">assignStatementOperand</link></para></entry></row>
+<link linkend="prod2">id</link> ( <link linkend="prod15">nonReserved</link> | <EQ> ) <link linkend="prod33">assignStatementOperand</link></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod33" xreflabel="assignStatementOperand"/>assignStatementOperand</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <link linkend="prod9">insert</link> ) | <link linkend="prod10">update</link> | <link linkend="prod11">delete</link> | <link linkend="prod8">storedProcedure</link> | ( <link linkend="prod17">expression</link> ) | <link linkend="prod7">queryExpression</link> )</para></entry></row>
+( ( <link linkend="prod9">insert</link> ) | <link linkend="prod10">update</link> | <link linkend="prod11">delete</link> | ( <link linkend="prod17">expression</link> ) | <link linkend="prod7">queryExpression</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod23" xreflabel="sqlStatement"/>sqlStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod24" xreflabel="sqlStatement"/>sqlStatement</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <link linkend="prod34">dynamicCommand</link> ) | <link linkend="prod5">userCommand</link> )</para></entry></row>
+( ( <link linkend="prod5">userCommand</link> ) | <link linkend="prod34">dynamicCommand</link> | ( <link linkend="prod2">id</link> ( <link linkend="prod15">nonReserved</link> | <EQ> ) <link linkend="prod8">storedProcedure</link> ) )</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod35" xreflabel="translateCriteria"/>translateCriteria</para></entry>
<entry align="left" valign="top"><para>::=
@@ -487,7 +487,7 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod34" xreflabel="dynamicCommand"/>dynamicCommand</para></entry>
<entry align="left" valign="top"><para>::=
-( <EXECUTE> | <EXEC> ) <STRING> <link linkend="prod17">expression</link> ( <AS> <link linkend="prod14">createElementsWithTypes</link> ( <INTO> <link linkend="prod2">id</link> )? )? ( <USING> <link linkend="prod36">setClauseList</link> )? ( <UPDATE> ( ( <INTEGERVAL> ) | ( <STAR> ) ) )?</para></entry></row>
+( <EXECUTE> | <EXEC> ) ( ( <STRING> | <IMMEDIATE> ) )? <link linkend="prod17">expression</link> ( <AS> <link linkend="prod14">createElementsWithTypes</link> ( <INTO> <link linkend="prod2">id</link> )? )? ( <USING> <link linkend="prod36">setClauseList</link> )? ( <UPDATE> ( ( <INTEGERVAL> ) | ( <STAR> ) ) )?</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod36" xreflabel="setClauseList"/>setClauseList</para></entry>
<entry align="left" valign="top"><para>::=
@@ -585,35 +585,39 @@
<entry align="left" valign="top"><para>::=
<XMLAGG> <LPAREN> <link linkend="prod17">expression</link> ( <link linkend="prod46">orderby</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod60" xreflabel="aggregateSymbol"/>aggregateSymbol</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod60" xreflabel="textAgg"/>textAgg</para></entry>
<entry align="left" valign="top"><para>::=
+<link linkend="prod15">nonReserved</link> <LPAREN> <FOR> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* ( <ID> <link linkend="prod61">charVal</link> )? ( ( <ID> <link linkend="prod61">charVal</link> ) )? ( <ID> )? ( ( <ID> <link linkend="prod2">id</link> ) )? ( <link linkend="prod46">orderby</link> )? <RPAREN></para></entry></row>
+<row>
+<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="aggregateSymbol"/>aggregateSymbol</para></entry>
+<entry align="left" valign="top"><para>::=
( ( <link linkend="prod15">nonReserved</link> <LPAREN> <STAR> <RPAREN> ) | ( ( <link linkend="prod15">nonReserved</link> | <ANY> | <SOME> ) <LPAREN> ( <DISTINCT> | <ALL> )? <link linkend="prod17">expression</link> <RPAREN> ) )</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod52" xreflabel="from"/>from</para></entry>
<entry align="left" valign="top"><para>::=
-<FROM> ( <link linkend="prod61">tableReference</link> ( <COMMA> <link linkend="prod61">tableReference</link> )* )</para></entry></row>
+<FROM> ( <link linkend="prod63">tableReference</link> ( <COMMA> <link linkend="prod63">tableReference</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod61" xreflabel="tableReference"/>tableReference</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="tableReference"/>tableReference</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <LBRACE> <link linkend="prod15">nonReserved</link> <link linkend="prod62">joinedTable</link> <RBRACE> ) | <link linkend="prod62">joinedTable</link> )</para></entry></row>
+( ( <LBRACE> <link linkend="prod15">nonReserved</link> <link linkend="prod64">joinedTable</link> <RBRACE> ) | <link linkend="prod64">joinedTable</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="joinedTable"/>joinedTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod64" xreflabel="joinedTable"/>joinedTable</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod63">tablePrimary</link> ( ( <link linkend="prod64">crossJoin</link> | <link linkend="prod65">qualifiedJoin</link> ) )*</para></entry></row>
+<link linkend="prod65">tablePrimary</link> ( ( <link linkend="prod66">crossJoin</link> | <link linkend="prod67">qualifiedJoin</link> ) )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod64" xreflabel="crossJoin"/>crossJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="crossJoin"/>crossJoin</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <CROSS> | <UNION> ) <JOIN> <link linkend="prod63">tablePrimary</link> )</para></entry></row>
+( ( <CROSS> | <UNION> ) <JOIN> <link linkend="prod65">tablePrimary</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod65" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod67" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
<entry align="left" valign="top"><para>::=
-( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> ( <OUTER> )? ) | ( <FULL> ( <OUTER> )? ) | <INNER> )? <JOIN> <link linkend="prod61">tableReference</link> <ON> <link linkend="prod29">criteria</link> )</para></entry></row>
+( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> ( <OUTER> )? ) | ( <FULL> ( <OUTER> )? ) | <INNER> )? <JOIN> <link linkend="prod63">tableReference</link> <ON> <link linkend="prod29">criteria</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="tablePrimary"/>tablePrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod65" xreflabel="tablePrimary"/>tablePrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod66">textTable</link> | <link linkend="prod67">xmlTable</link> | <link linkend="prod68">unaryFromClause</link> | <link linkend="prod69">subqueryFromClause</link> | ( <LPAREN> <link linkend="prod62">joinedTable</link> <RPAREN> ) ) ( ( <MAKEDEP> ) | ( <MAKENOTDEP> ) )?</para></entry></row>
+( <link linkend="prod68">textTable</link> | <link linkend="prod69">xmlTable</link> | <link linkend="prod70">unaryFromClause</link> | <link linkend="prod71">subqueryFromClause</link> | ( <LPAREN> <link linkend="prod64">joinedTable</link> <RPAREN> ) ) ( ( <MAKEDEP> ) | ( <MAKENOTDEP> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
<entry align="left" valign="top"><para>::=
<XMLSERIALIZE> <LPAREN> ( <link linkend="prod15">nonReserved</link> )? <link linkend="prod17">expression</link> ( <AS> ( <STRING> | <VARCHAR> | <CLOB> ) )? <RPAREN></para></entry></row>
<row>
@@ -621,35 +625,35 @@
<entry align="left" valign="top"><para>::=
<ID></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="textTable"/>textTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="textTable"/>textTable</para></entry>
<entry align="left" valign="top"><para>::=
-<ID> <LPAREN> <link linkend="prod17">expression</link> <link linkend="prod15">nonReserved</link> <link linkend="prod71">textColumn</link> ( <COMMA> <link linkend="prod71">textColumn</link> )* ( <ID> <link linkend="prod72">charVal</link> )? ( ( <ESCAPE> <link linkend="prod72">charVal</link> ) | ( <ID> <link linkend="prod72">charVal</link> ) )? ( <ID> ( <link linkend="prod73">intVal</link> )? )? ( <ID> <link linkend="prod73">intVal</link> )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<ID> <LPAREN> <link linkend="prod17">expression</link> <link linkend="prod15">nonReserved</link> <link linkend="prod73">textColumn</link> ( <COMMA> <link linkend="prod73">textColumn</link> )* ( <ID> <link linkend="prod61">charVal</link> )? ( ( <ESCAPE> <link linkend="prod61">charVal</link> ) | ( <ID> <link linkend="prod61">charVal</link> ) )? ( <ID> ( <link linkend="prod74">intVal</link> )? )? ( <ID> <link linkend="prod74">intVal</link> )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="textColumn"/>textColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="textColumn"/>textColumn</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> <link linkend="prod32">dataType</link> ( <ID> <link linkend="prod73">intVal</link> )?</para></entry></row>
+<link linkend="prod2">id</link> <link linkend="prod32">dataType</link> ( <ID> <link linkend="prod74">intVal</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="xmlQuery"/>xmlQuery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="xmlQuery"/>xmlQuery</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLQUERY> <LPAREN> ( <link linkend="prod75">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* )? ( ( <NULL> | <link linkend="prod15">nonReserved</link> ) <ON> <link linkend="prod15">nonReserved</link> )? <RPAREN></para></entry></row>
+<XMLQUERY> <LPAREN> ( <link linkend="prod76">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* )? ( ( <NULL> | <link linkend="prod15">nonReserved</link> ) <ON> <link linkend="prod15">nonReserved</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod67" xreflabel="xmlTable"/>xmlTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="xmlTable"/>xmlTable</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLTABLE> <LPAREN> ( <link linkend="prod75">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* )? ( <ID> <link linkend="prod76">xmlColumn</link> ( <COMMA> <link linkend="prod76">xmlColumn</link> )* )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<XMLTABLE> <LPAREN> ( <link linkend="prod76">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* )? ( <ID> <link linkend="prod77">xmlColumn</link> ( <COMMA> <link linkend="prod77">xmlColumn</link> )* )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="xmlColumn"/>xmlColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="xmlColumn"/>xmlColumn</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod2">id</link> ( ( <FOR> <link linkend="prod15">nonReserved</link> ) | ( <link linkend="prod32">dataType</link> ( <DEFAULT_KEYWORD> <link linkend="prod17">expression</link> )? ( <link linkend="prod15">nonReserved</link> <link linkend="prod1">stringVal</link> )? ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="intVal"/>intVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="intVal"/>intVal</para></entry>
<entry align="left" valign="top"><para>::=
<INTEGERVAL></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
<entry align="left" valign="top"><para>::=
( <TABLE> )? <LPAREN> ( <link linkend="prod7">queryExpression</link> | <link linkend="prod8">storedProcedure</link> ) <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
<entry align="left" valign="top"><para>::=
( <ID> ( ( <AS> )? <link linkend="prod2">id</link> )? )</para></entry></row>
<row>
@@ -659,69 +663,69 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod29" xreflabel="criteria"/>criteria</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod77">compoundCritOr</link></para></entry></row>
+<link linkend="prod78">compoundCritOr</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod78">compoundCritAnd</link> ( <OR> <link linkend="prod78">compoundCritAnd</link> )*</para></entry></row>
+<link linkend="prod79">compoundCritAnd</link> ( <OR> <link linkend="prod79">compoundCritAnd</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod79">notCrit</link> ( <AND> <link linkend="prod79">notCrit</link> )*</para></entry></row>
+<link linkend="prod80">notCrit</link> ( <AND> <link linkend="prod80">notCrit</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="notCrit"/>notCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="notCrit"/>notCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <link linkend="prod80">booleanPrimary</link></para></entry></row>
+( <NOT> )? <link linkend="prod81">booleanPrimary</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="booleanPrimary"/>booleanPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="booleanPrimary"/>booleanPrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod35">translateCriteria</link> | ( <link linkend="prod81">commonValueExpression</link> ( ( <link linkend="prod82">betweenCrit</link> | <link linkend="prod83">matchCrit</link> | <link linkend="prod84">setCrit</link> | <link linkend="prod85">isNullCrit</link> | <link linkend="prod86">subqueryCompareCriteria</link> | <link linkend="prod87">compareCrit</link> ) )? ) | <link linkend="prod88">existsCriteria</link> | <link linkend="prod31">hasCriteria</link> )</para></entry></row>
+( <link linkend="prod35">translateCriteria</link> | ( <link linkend="prod82">commonValueExpression</link> ( ( <link linkend="prod83">betweenCrit</link> | <link linkend="prod84">matchCrit</link> | <link linkend="prod85">setCrit</link> | <link linkend="prod86">isNullCrit</link> | <link linkend="prod87">subqueryCompareCriteria</link> | <link linkend="prod88">compareCrit</link> ) )? ) | <link linkend="prod89">existsCriteria</link> | <link linkend="prod31">hasCriteria</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="operator"/>operator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod90" 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="prod87" xreflabel="compareCrit"/>compareCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="compareCrit"/>compareCrit</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod89">operator</link> <link linkend="prod81">commonValueExpression</link></para></entry></row>
+<link linkend="prod90">operator</link> <link linkend="prod82">commonValueExpression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod90" xreflabel="subquery"/>subquery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="subquery"/>subquery</para></entry>
<entry align="left" valign="top"><para>::=
-<LPAREN> ( <link linkend="prod7">queryExpression</link> | <link linkend="prod8">storedProcedure</link> ) <RPAREN></para></entry></row>
+<LPAREN> ( <link linkend="prod7">queryExpression</link> | ( <link linkend="prod8">storedProcedure</link> ) ) <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod86" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod87" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod89">operator</link> ( <ANY> | <SOME> | <ALL> ) <link linkend="prod90">subquery</link></para></entry></row>
+<link linkend="prod90">operator</link> ( <ANY> | <SOME> | <ALL> ) <link linkend="prod91">subquery</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod83" xreflabel="matchCrit"/>matchCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod84" xreflabel="matchCrit"/>matchCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <LIKE> <link linkend="prod81">commonValueExpression</link> ( <ESCAPE> <link linkend="prod72">charVal</link> | ( <LBRACE> <ESCAPE> <link linkend="prod72">charVal</link> <RBRACE> ) )?</para></entry></row>
+( <NOT> )? <LIKE> <link linkend="prod82">commonValueExpression</link> ( <ESCAPE> <link linkend="prod61">charVal</link> | ( <LBRACE> <ESCAPE> <link linkend="prod61">charVal</link> <RBRACE> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="charVal"/>charVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod61" 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="prod82" xreflabel="betweenCrit"/>betweenCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod83" xreflabel="betweenCrit"/>betweenCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <BETWEEN> <link linkend="prod81">commonValueExpression</link> <AND> <link linkend="prod81">commonValueExpression</link></para></entry></row>
+( <NOT> )? <BETWEEN> <link linkend="prod82">commonValueExpression</link> <AND> <link linkend="prod82">commonValueExpression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="isNullCrit"/>isNullCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod86" 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="prod84" xreflabel="setCrit"/>setCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="setCrit"/>setCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <IN> ( ( <link linkend="prod90">subquery</link> ) | ( <LPAREN> <link linkend="prod81">commonValueExpression</link> ( <COMMA> <link linkend="prod81">commonValueExpression</link> )* <RPAREN> ) )</para></entry></row>
+( <NOT> )? <IN> ( ( <link linkend="prod91">subquery</link> ) | ( <LPAREN> <link linkend="prod82">commonValueExpression</link> ( <COMMA> <link linkend="prod82">commonValueExpression</link> )* <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="existsCriteria"/>existsCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="existsCriteria"/>existsCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<EXISTS> <link linkend="prod90">subquery</link></para></entry></row>
+<EXISTS> <link linkend="prod91">subquery</link></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod53" xreflabel="groupBy"/>groupBy</para></entry>
<entry align="left" valign="top"><para>::=
-<GROUP> <BY> ( <link linkend="prod91">groupByItem</link> ( <COMMA> <link linkend="prod91">groupByItem</link> )* )</para></entry></row>
+<GROUP> <BY> ( <link linkend="prod92">groupByItem</link> ( <COMMA> <link linkend="prod92">groupByItem</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="groupByItem"/>groupByItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod92" xreflabel="groupByItem"/>groupByItem</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod17">expression</link></para></entry></row>
<row>
@@ -731,13 +735,13 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod46" xreflabel="orderby"/>orderby</para></entry>
<entry align="left" valign="top"><para>::=
-<ORDER> <BY> <link linkend="prod92">sortSpecification</link> ( <COMMA> <link linkend="prod92">sortSpecification</link> )*</para></entry></row>
+<ORDER> <BY> <link linkend="prod93">sortSpecification</link> ( <COMMA> <link linkend="prod93">sortSpecification</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod92" xreflabel="sortSpecification"/>sortSpecification</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="sortSpecification"/>sortSpecification</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod93">sortKey</link> ( <ASC> | <DESC> )? ( <link linkend="prod15">nonReserved</link> <link linkend="prod15">nonReserved</link> )?</para></entry></row>
+<link linkend="prod94">sortKey</link> ( <ASC> | <DESC> )? ( <link linkend="prod15">nonReserved</link> <link linkend="prod15">nonReserved</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="sortKey"/>sortKey</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="sortKey"/>sortKey</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod17">expression</link></para></entry></row>
<row>
@@ -753,71 +757,71 @@
<entry align="left" valign="top"><para>::=
<link linkend="prod29">criteria</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="commonValueExpression"/>commonValueExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod82" xreflabel="commonValueExpression"/>commonValueExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod94">plusExpression</link> ( <CONCAT_OP> <link linkend="prod94">plusExpression</link> )* )</para></entry></row>
+( <link linkend="prod95">plusExpression</link> ( <CONCAT_OP> <link linkend="prod95">plusExpression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="plusExpression"/>plusExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod95" xreflabel="plusExpression"/>plusExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod95">timesExpression</link> ( <link linkend="prod96">plusOperator</link> <link linkend="prod95">timesExpression</link> )* )</para></entry></row>
+( <link linkend="prod96">timesExpression</link> ( <link linkend="prod97">plusOperator</link> <link linkend="prod96">timesExpression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="plusOperator"/>plusOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod97" 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="prod95" xreflabel="timesExpression"/>timesExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="timesExpression"/>timesExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod97">valueExpressionPrimary</link> ( <link linkend="prod98">timesOperator</link> <link linkend="prod97">valueExpressionPrimary</link> )* )</para></entry></row>
+( <link linkend="prod98">valueExpressionPrimary</link> ( <link linkend="prod99">timesOperator</link> <link linkend="prod98">valueExpressionPrimary</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="timesOperator"/>timesOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod99" 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="prod97" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <QMARK> | <link linkend="prod99">literal</link> | ( <LBRACE> <link linkend="prod15">nonReserved</link> <link linkend="prod100">function</link> <RBRACE> ) | ( <link linkend="prod60">aggregateSymbol</link> ) | ( <link linkend="prod60">aggregateSymbol</link> ) | ( <link linkend="prod60">aggregateSymbol</link> ) | ( <link linkend="prod59">xmlAgg</link> ) | ( <link linkend="prod100">function</link> ) | ( <ID> ) | <link linkend="prod90">subquery</link> | ( <LPAREN> <link linkend="prod17">expression</link> <RPAREN> ) | <link linkend="prod101">searchedCaseExpression</link> | <link linkend="prod102">caseExpression</link> )</para></entry></row>
+( <QMARK> | <link linkend="prod100">literal</link> | ( <LBRACE> <link linkend="prod15">nonReserved</link> <link linkend="prod101">function</link> <RBRACE> ) | ( <link linkend="prod60">textAgg</link> ) | ( <link linkend="prod62">aggregateSymbol</link> ) | ( <link linkend="prod62">aggregateSymbol</link> ) | ( <link linkend="prod62">aggregateSymbol</link> ) | ( <link linkend="prod59">xmlAgg</link> ) | ( <link linkend="prod101">function</link> ) | ( <ID> ) | <link linkend="prod91">subquery</link> | ( <LPAREN> <link linkend="prod17">expression</link> <RPAREN> ) | <link linkend="prod102">searchedCaseExpression</link> | <link linkend="prod103">caseExpression</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod102" xreflabel="caseExpression"/>caseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="caseExpression"/>caseExpression</para></entry>
<entry align="left" valign="top"><para>::=
<CASE> <link linkend="prod17">expression</link> ( <WHEN> <link linkend="prod17">expression</link> <THEN> <link linkend="prod17">expression</link> )+ ( <ELSE> <link linkend="prod17">expression</link> )? <END></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="searchedCaseExpression"/>searchedCaseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod102" xreflabel="searchedCaseExpression"/>searchedCaseExpression</para></entry>
<entry align="left" valign="top"><para>::=
<CASE> ( <WHEN> <link linkend="prod29">criteria</link> <THEN> <link linkend="prod17">expression</link> )+ ( <ELSE> <link linkend="prod17">expression</link> )? <END></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod100" xreflabel="function"/>function</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="function"/>function</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <CONVERT> <LPAREN> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod32">dataType</link> <RPAREN> ) | ( <CAST> <LPAREN> <link linkend="prod17">expression</link> <AS> <link linkend="prod32">dataType</link> <RPAREN> ) | ( <link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod103">stringConstant</link> <RPAREN> ) | ( <link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod104">intervalType</link> <COMMA> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod17">expression</link> <RPAREN> ) | <link linkend="prod105">queryString</link> | ( ( <LEFT> | <RIGHT> | <CHAR> | <USER> | <YEAR> | <MONTH> | <HOUR> | <MINUTE> | <SECOND> | <XMLCONCAT> | <XMLCOMMENT> ) <LPAREN> ( <link linkend="prod17">expression</link> !
( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | ( ( <INSERT> ) <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | ( ( <TRANSLATE> ) <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | <link linkend="prod106">xmlParse</link> | <link linkend="prod107">xmlElement</link> | ( <XMLPI> <LPAREN> ( <ID> <link linkend="prod108">idExpression</link> | <link linkend="prod108">idExpression</link> ) ( <COMMA> <link linkend="prod17">expression</link> )? <RPAREN> ) | <link linkend="prod109">xmlForest</link> | <link linkend="prod70">xmlSerialize</link> | <link linkend="prod74">xmlQuery</link> | ( <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )*!
)? <RPAREN> ) )</para></entry></row>
+( ( <CONVERT> <LPAREN> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod32">dataType</link> <RPAREN> ) | ( <CAST> <LPAREN> <link linkend="prod17">expression</link> <AS> <link linkend="prod32">dataType</link> <RPAREN> ) | ( <link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod104">stringConstant</link> <RPAREN> ) | ( <link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod105">intervalType</link> <COMMA> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod17">expression</link> <RPAREN> ) | <link linkend="prod106">queryString</link> | ( ( <LEFT> | <RIGHT> | <CHAR> | <USER> | <YEAR> | <MONTH> | <HOUR> | <MINUTE> | <SECOND> | <XMLCONCAT> | <XMLCOMMENT> ) <LPAREN> ( <link linkend="prod17">expression</link> !
( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | ( ( <INSERT> ) <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | ( ( <TRANSLATE> ) <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | <link linkend="prod107">xmlParse</link> | <link linkend="prod108">xmlElement</link> | ( <XMLPI> <LPAREN> ( <ID> <link linkend="prod109">idExpression</link> | <link linkend="prod109">idExpression</link> ) ( <COMMA> <link linkend="prod17">expression</link> )? <RPAREN> ) | <link linkend="prod110">xmlForest</link> | <link linkend="prod72">xmlSerialize</link> | <link linkend="prod75">xmlQuery</link> | ( <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )*!
)? <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="stringConstant"/>stringConstant</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod104" 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="prod106" xreflabel="xmlParse"/>xmlParse</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod107" xreflabel="xmlParse"/>xmlParse</para></entry>
<entry align="left" valign="top"><para>::=
<XMLPARSE> <LPAREN> <link linkend="prod15">nonReserved</link> <link linkend="prod17">expression</link> ( <link linkend="prod15">nonReserved</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod105" xreflabel="queryString"/>queryString</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod106" xreflabel="queryString"/>queryString</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod107" xreflabel="xmlElement"/>xmlElement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod108" 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="prod75">xmlNamespaces</link> )? ( <COMMA> <link linkend="prod110">xmlAttributes</link> )? ( <COMMA> <link linkend="prod17">expression</link> )* <RPAREN></para></entry></row>
+<XMLELEMENT> <LPAREN> ( <ID> <link linkend="prod2">id</link> | <link linkend="prod2">id</link> ) ( <COMMA> <link linkend="prod76">xmlNamespaces</link> )? ( <COMMA> <link linkend="prod111">xmlAttributes</link> )? ( <COMMA> <link linkend="prod17">expression</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod110" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod111" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
<entry align="left" valign="top"><para>::=
<XMLATTRIBUTES> <LPAREN> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod109" xreflabel="xmlForest"/>xmlForest</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod110" xreflabel="xmlForest"/>xmlForest</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLFOREST> <LPAREN> ( <link linkend="prod75">xmlNamespaces</link> <COMMA> )? <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* <RPAREN></para></entry></row>
+<XMLFOREST> <LPAREN> ( <link linkend="prod76">xmlNamespaces</link> <COMMA> )? <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLNAMESPACES> <LPAREN> <link linkend="prod111">namespaceItem</link> ( <COMMA> <link linkend="prod111">namespaceItem</link> )* <RPAREN></para></entry></row>
+<XMLNAMESPACES> <LPAREN> <link linkend="prod112">namespaceItem</link> ( <COMMA> <link linkend="prod112">namespaceItem</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod111" xreflabel="namespaceItem"/>namespaceItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod112" 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>
@@ -829,7 +833,7 @@
<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="prod108" xreflabel="idExpression"/>idExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod109" xreflabel="idExpression"/>idExpression</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod2">id</link></para></entry></row>
<row>
@@ -837,11 +841,11 @@
<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="prod104" xreflabel="intervalType"/>intervalType</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod105" xreflabel="intervalType"/>intervalType</para></entry>
<entry align="left" valign="top"><para>::=
( <link linkend="prod15">nonReserved</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod99" xreflabel="literal"/>literal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod100" 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/procedures.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2010-11-05 18:06:57 UTC (rev 2714)
@@ -552,11 +552,14 @@
</section>
<section>
<title>TRANSLATE CRITERIA</title>
- <para>You can use the TRANSLATE CRITERIA clause to convert the criteria from the user application’s SQL command into the form required to interact with the target source or view tables. The TRANSLATE CRITERIA statement uses the SELECT transformation to infer the column mapping. This clause evaluates to a translated criteria that is evaluated in the context of a command.</para>
+ <warning><para>TRANSLATE CRITERIA has been deprecated. An alternative approach to update procedures will be introduced in a subsequent version.</para></warning>
+ <para>You can use the TRANSLATE CRITERIA clause to convert the criteria from the user application’s SQL command into the form required to interact with the target source or view tables. The TRANSLATE CRITERIA statement uses the SELECT transformation to infer the column mapping. This clause evaluates to a translated criteria that is evaluated in the context of a command.
+ You can use these mappings either to replace the default mappings generated from the SELECT transformation or to specify a reverse expression when a virtual column is defined by an expression.</para>
<para>
Usage:
<synopsis>TRANSLATE [criteria operator] CRITERIA [ON (column list)] [WITH (mapping list)]</synopsis>
</para>
+ <para>If there is no user criteria, then the translated criteria is always treated as TRUE.</para>
<itemizedlist>
<para>Syntax Rules</para>
<listitem>
@@ -571,9 +574,16 @@
<para>The columns in a TRANSLATE CRITERIA ON clause always refer to view columns.
</para>
</listitem>
+ <listitem>
+ <para>The WITH clause always has items with form <elem> = <expression> where the left hand side must refer to a view column.
+ </para>
+ </listitem>
+ <listitem>
+ <para>If the WITH clause or a specific mapping is not specified, then a mapping is created based on the SELECT clause of the SELECT transformation (the view column gets mapped to expression in SELECT clause at same position).
+ </para>
+ </listitem>
</itemizedlist>
- <para>You can use these mappings either to replace the default mappings generated from the SELECT transformation or to specify a reverse expression when a virtual column is defined by an expression.</para>
- <para>Some samples of the HAS TRANSLATE clause:</para>
+ <para>Some samples of TRANSLATE CRITERIA:</para>
<informaltable>
<tgroup cols="2">
<colspec colwidth="1*"/>
@@ -600,18 +610,7 @@
</tbody>
</tgroup>
</informaltable>
- <para>
- The TRANSLATE CRITERIA, ON clause always refers to view columns.
- The WITH clause always has items with form <elem> = <expression>,
- where the <elem> is a view column and the <expression>
- specifies what that view column should be
- replaced with when TRANSLATE CRITERIA translates the view
- criteria (from UPDATE or DELETE) into a physical criteria in
- the command. By default, a mapping is created based on the
- SELECT clause of the SELECT transformation (view column
- gets mapped to expression in SELECT clause at same
- position).
- </para>
+ <note><para>If a specific predicate type or column set is specified by TRANSALATE CRITERIA, but the user criteria has predicates that do not match, then an exception will be thrown.</para></note>
</section>
</section>
<section>
Modified: trunk/engine/src/main/java/org/teiid/cache/CacheConfiguration.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/cache/CacheConfiguration.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/cache/CacheConfiguration.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -22,6 +22,13 @@
package org.teiid.cache;
+import org.jboss.managed.api.annotation.ManagementComponent;
+import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementObjectID;
+import org.jboss.managed.api.annotation.ManagementProperties;
+import org.jboss.managed.api.annotation.ManagementProperty;
+
+@ManagementObject(componentType=@ManagementComponent(type="teiid",subtype="dqp"), properties=ManagementProperties.EXPLICIT)
public class CacheConfiguration {
public static CacheConfiguration DEFAULT = new CacheConfiguration(Policy.LRU, 60*60, 100); // 1 hours with 100 nodes.
@@ -35,6 +42,7 @@
private int maxage;
private int maxEntries;
private boolean enabled = true;
+ private String name;
public CacheConfiguration() {
}
@@ -48,7 +56,8 @@
public Policy getPolicy() {
return this.policy;
}
-
+
+ @ManagementProperty(description="The maximum age of a result set cache entry in seconds. -1 indicates no max. (default 7200)")
public int getMaxAgeInSeconds(){
return maxage;
}
@@ -57,6 +66,7 @@
this.maxage = maxage;
}
+ @ManagementProperty(description="The maximum number of result set cache entries. -1 indicates no limit. (default 1024)")
public int getMaxEntries() {
return this.maxEntries;
}
@@ -69,6 +79,16 @@
this.policy = Policy.valueOf(type);
}
+ @ManagementProperty(description="Name of the configuration", readOnly=true)
+ @ManagementObjectID(type="cache")
+ public String getName() {
+ return this.name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
@Override
public int hashCode() {
final int prime = 31;
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPConfiguration.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPConfiguration.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPConfiguration.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -104,11 +104,6 @@
public void setPreparedPlanCacheMaxCount(int preparedPlanCacheMaxCount) {
this.preparedPlanCacheMaxCount = preparedPlanCacheMaxCount;
}
-
- @ManagementProperty(description="The maximum number of result set cache entries. -1 indicates no limit. (default 1024)")
- public int getResultSetCacheMaxEntries() {
- return this.resultsetCacheConfig.getMaxEntries();
- }
public CacheConfiguration getResultsetCacheConfig() {
return this.resultsetCacheConfig;
@@ -120,29 +115,20 @@
@ManagementProperty(description="Denotes whether or not result set caching is enabled. (default true)")
public boolean isResultSetCacheEnabled() {
- return this.resultsetCacheConfig.isEnabled();
+ return this.resultsetCacheConfig != null && this.resultsetCacheConfig.isEnabled();
}
- @ManagementProperty(description="The maximum age of a result set cache entry in seconds. -1 indicates no max. (default 7200)")
- public int getResultSetCacheMaxEntryAge() {
- return this.resultsetCacheConfig.getMaxAgeInSeconds();
- }
-
- public void setResultSetCacheMaxEntryAge(int maxAge) {
- this.resultsetCacheConfig.setMaxAgeInSeconds(maxAge);
- }
-
/**
* Determine whether role checking is enabled on the server.
* @return <code>true</code> if server-side role checking is enabled.
*/
@ManagementProperty(description="Turn on role checking on resources based on the roles defined in VDB")
- public boolean useDataRoles() {
+ public boolean getUseDataRoles() {
return useDataRoles;
}
- public void setUseDataRoles(Boolean useEntitlements) {
- this.useDataRoles = useEntitlements.booleanValue();
+ public void setUseDataRoles(boolean useEntitlements) {
+ this.useDataRoles = useEntitlements;
}
@ManagementProperty(description="Long running query threshold, after which a alert can be generated by tooling if configured")
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -681,7 +681,7 @@
public void start(DQPConfiguration config) {
this.processorTimeslice = config.getTimeSliceInMilli();
this.maxFetchSize = config.getMaxRowsFetchSize();
- this.useEntitlements = config.useDataRoles();
+ this.useEntitlements = config.getUseDataRoles();
this.queryThreshold = config.getQueryThresholdInSecs();
this.maxSourceRows = config.getMaxSourceRows();
this.exceptionOnMaxSourceRows = config.isExceptionOnMaxSourceRows();
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPWorkContext.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPWorkContext.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPWorkContext.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -29,7 +29,6 @@
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
@@ -199,9 +198,6 @@
if (this.policies == null) {
this.policies = new HashMap<String, DataPolicy>();
Set<String> userRoles = getUserRoles();
- if (userRoles.isEmpty()) {
- return this.policies;
- }
// get data roles from the VDB
for (DataPolicy policy : getVDB().getDataPolicies()) {
@@ -217,13 +213,7 @@
if (policy.isAnyAuthenticated()) {
return true;
}
- List<String> roles = policy.getMappedRoleNames();
- for (String role:roles) {
- if (userRoles.contains(role)) {
- return true;
- }
- }
- return false;
+ return !Collections.disjoint(policy.getMappedRoleNames(), userRoles);
}
private Set<String> getUserRoles() {
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -60,6 +60,7 @@
import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.function.metadata.FunctionMethod;
import org.teiid.query.parser.ParseInfo;
+import org.teiid.query.parser.QueryParser;
import org.teiid.query.processor.BatchCollector;
import org.teiid.query.processor.QueryProcessor;
import org.teiid.query.sql.lang.Command;
@@ -333,19 +334,33 @@
protected void processNew() throws TeiidProcessingException, TeiidComponentException {
SessionAwareCache<CachedResults> rsCache = dqpCore.getRsCache();
- ParseInfo pi = Request.createParseInfo(requestMsg);
- CacheID cacheId = new CacheID(this.dqpWorkContext, pi, requestMsg.getCommandString());
- boolean cachable = cacheId.setParameters(requestMsg.getParameterValues());
- if (rsCache != null && cachable) {
- CachedResults cr = rsCache.get(cacheId);
- if (cr != null && (requestMsg.useResultSetCache() || cr.getHint() != null)) {
- this.resultsBuffer = cr.getResults();
- this.analysisRecord = cr.getAnalysisRecord();
- request.initMetadata();
- this.originalCommand = cr.getCommand(requestMsg.getCommandString(), request.metadata, pi);
- request.validateAccess(this.originalCommand);
- this.doneProducingBatches();
- return;
+
+ boolean cachable = false;
+ CacheID cacheId = null;
+ boolean canUseCached = (requestMsg.useResultSetCache() ||
+ QueryParser.getQueryParser().parseCacheHint(requestMsg.getCommandString()) != null);
+
+ if (rsCache != null) {
+ if (!canUseCached) {
+ LogManager.logDetail(LogConstants.CTX_DQP, requestID, "No cache directive"); //$NON-NLS-1$
+ } else {
+ ParseInfo pi = Request.createParseInfo(requestMsg);
+ cacheId = new CacheID(this.dqpWorkContext, pi, requestMsg.getCommandString());
+ cachable = cacheId.setParameters(requestMsg.getParameterValues());
+ if (cachable) {
+ CachedResults cr = rsCache.get(cacheId);
+ if (cr != null) {
+ this.resultsBuffer = cr.getResults();
+ this.analysisRecord = cr.getAnalysisRecord();
+ request.initMetadata();
+ this.originalCommand = cr.getCommand(requestMsg.getCommandString(), request.metadata, pi);
+ request.validateAccess(this.originalCommand);
+ this.doneProducingBatches();
+ return;
+ }
+ } else {
+ LogManager.logDetail(LogConstants.CTX_DQP, requestID, "Parameters are not serializable - cache cannot be used for", cacheId); //$NON-NLS-1$
+ }
}
}
request.processRequest();
@@ -356,6 +371,7 @@
processor = request.processor;
resultsBuffer = processor.createTupleBuffer();
if (this.cid != null && originalCommand.getCacheHint() != null) {
+ LogManager.logDetail(LogConstants.CTX_DQP, requestID, "Using cache hint", originalCommand.getCacheHint()); //$NON-NLS-1$
resultsBuffer.setPrefersMemory(originalCommand.getCacheHint().getPrefersMemory());
}
collector = new BatchCollector(processor, resultsBuffer) {
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/SessionAwareCache.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/SessionAwareCache.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/SessionAwareCache.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -39,6 +39,8 @@
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.EquivalenceUtil;
import org.teiid.core.util.HashCodeUtil;
+import org.teiid.logging.LogConstants;
+import org.teiid.logging.LogManager;
import org.teiid.query.function.metadata.FunctionMethod;
import org.teiid.query.parser.ParseInfo;
import org.teiid.vdb.runtime.VDBKey;
@@ -117,7 +119,10 @@
}
if (result != null) {
+ LogManager.logTrace(LogConstants.CTX_DQP, "Cache hit for", id); //$NON-NLS-1$
cacheHit.getAndIncrement();
+ } else {
+ LogManager.logTrace(LogConstants.CTX_DQP, "Cache miss for", id); //$NON-NLS-1$
}
return result;
}
@@ -140,6 +145,7 @@
public void put(CacheID id, int determinismLevel, T t, Long ttl){
if (determinismLevel >= FunctionMethod.SESSION_DETERMINISTIC) {
id.setSessionId(id.originalSessionId);
+ LogManager.logTrace(LogConstants.CTX_DQP, "Adding to session/local cache", id); //$NON-NLS-1$
this.localCache.put(id, t, ttl);
}
else {
@@ -161,6 +167,7 @@
}
if (insert) {
+ LogManager.logTrace(LogConstants.CTX_DQP, "Adding to global/distributed cache", id); //$NON-NLS-1$
this.distributedCache.put(id, t, ttl);
}
}
@@ -173,6 +180,8 @@
public void clearAll(){
this.localCache.clear();
this.distributedCache.clear();
+ this.totalRequests.set(0);
+ this.cacheHit.set(0);
}
public void clearForVDB(String vdbName, int version) {
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -233,7 +233,7 @@
return;
}
if (! CapabilitiesUtil.supportsScalarFunction(modelID, obj, metadata, capFinder)) {
- markInvalid(obj, (obj.isImplicit()?"(implicit) convert":"") + " Function not supported by source"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ markInvalid(obj, (obj.isImplicit()?"(implicit) ":"") + obj.getName() + " function not supported by source"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
} catch(QueryMetadataException e) {
handleException(new TeiidComponentException(e));
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/JoinRegion.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/JoinRegion.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/JoinRegion.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -184,13 +184,11 @@
if (combined.size() < 2) {
root = combined.values().iterator().next();
- root.removeProperty(NodeConstants.Info.EST_CARDINALITY);
} else {
root = RulePlanJoins.createJoinNode();
for (Map.Entry<PlanNode, PlanNode> entry : combined.entrySet()) {
PlanNode joinSourceRoot = entry.getValue();
- joinSourceRoot.removeProperty(NodeConstants.Info.EST_CARDINALITY);
if (root.getChildCount() == 2) {
PlanNode parentJoin = RulePlanJoins.createJoinNode();
parentJoin.addFirstChild(root);
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/NewCalculateCostUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/NewCalculateCostUtil.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/NewCalculateCostUtil.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -827,7 +827,7 @@
*/
private static float getNDV(Collection<ElementSymbol> elements, PlanNode current, float cardinality, QueryMetadataInterface metadata)
throws QueryMetadataException, TeiidComponentException {
- float result = 1;
+ float result = UNKNOWN_VALUE;
for (ElementSymbol elementSymbol : elements) {
Object elemID = elementSymbol.getMetadataID();
@@ -844,9 +844,6 @@
}
}
}
- if (ndv == UNKNOWN_VALUE) {
- return UNKNOWN_VALUE;
- }
} else if (cardinality != UNKNOWN_VALUE) {
int groupCardinality = metadata.getCardinality(elementSymbol.getGroupSymbol().getMetadataID());
if (groupCardinality != UNKNOWN_VALUE && groupCardinality > cardinality) {
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -489,6 +489,7 @@
}
static PlanNode performRaise(PlanNode rootNode, PlanNode accessNode, PlanNode parentNode) {
+ accessNode.removeProperty(NodeConstants.Info.EST_CARDINALITY);
NodeEditor.removeChildNode(parentNode, accessNode);
parentNode.addAsParent(accessNode);
PlanNode grandparentNode = accessNode.getParent();
Modified: trunk/engine/src/main/java/org/teiid/query/parser/QueryParser.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/parser/QueryParser.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/query/parser/QueryParser.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -26,6 +26,7 @@
import org.teiid.api.exception.query.QueryParserException;
import org.teiid.query.QueryPlugin;
+import org.teiid.query.sql.lang.CacheHint;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.Criteria;
import org.teiid.query.sql.symbol.Expression;
@@ -123,6 +124,13 @@
}
return result;
}
+
+ public CacheHint parseCacheHint(String sql) throws QueryParserException {
+ if(sql == null || sql.length() == 0) {
+ throw new QueryParserException(QueryPlugin.Util.getString("QueryParser.emptysql")); //$NON-NLS-1$
+ }
+ return SQLParserUtil.getQueryCacheOption(sql);
+ }
/**
* Takes a SQL string representing an SQL criteria (i.e. just the WHERE
Modified: trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -115,7 +115,6 @@
import org.teiid.query.sql.lang.XMLTable;
import org.teiid.query.sql.lang.PredicateCriteria.Negatable;
import org.teiid.query.sql.navigator.PostOrderNavigator;
-import org.teiid.query.sql.navigator.PreOrderNavigator;
import org.teiid.query.sql.proc.Block;
import org.teiid.query.sql.proc.CommandStatement;
import org.teiid.query.sql.proc.CreateUpdateProcedureCommand;
@@ -543,31 +542,18 @@
if (!(userCmd instanceof TranslatableProcedureContainer)) {
return FALSE_CRITERIA;
}
-
+
Criteria userCriteria = ((TranslatableProcedureContainer)userCmd).getCriteria();
-
- if(userCriteria == null) {
- return FALSE_CRITERIA;
+
+ if (userCriteria == null) {
+ return TRUE_CRITERIA;
}
// get the symbolmap between virtual elements and theie counterpart expressions
// from the virtual group's query transform
CriteriaTranslatorVisitor translateVisitor = new CriteriaTranslatorVisitor(procCommand.getSymbolMap());
- // check if there is a CriteriaSelector specified to restrict
- // parts of user's criteria to be translated
- // get the CriteriaSelector, elements on the selector and the selector type
- CriteriaSelector selector = transCrit.getSelector();
- HasCriteria hasCrit = new HasCriteria(selector);
-
- // base on the selector evaluate Has criteria, if false
- // return a false criteria
- Criteria result = rewriteCriteria(hasCrit);
-
- if(result.equals(FALSE_CRITERIA)) {
- return FALSE_CRITERIA;
- }
- translateVisitor.setCriteriaSelector(selector);
+ translateVisitor.setCriteriaSelector(transCrit.getSelector());
if(transCrit.hasTranslations()) {
translateVisitor.setTranslations(transCrit.getTranslations());
}
@@ -575,14 +561,12 @@
// create a clone of user's criteria that is then translated
Criteria userClone = (Criteria) userCriteria.clone();
- // CriteriaTranslatorVisitor visits the user's criteria
- PreOrderNavigator.doVisit(userClone, translateVisitor);
+ translateVisitor.translate(userClone);
// translated criteria
- translatedCriteria = translateVisitor.getTranslatedCriteria();
((TranslatableProcedureContainer)userCmd).addImplicitParameters(translateVisitor.getImplicitParams());
- translatedCriteria = rewriteCriteria(translatedCriteria);
+ translatedCriteria = rewriteCriteria(userClone);
// apply any implicit conversions
try {
Modified: trunk/engine/src/main/java/org/teiid/query/sql/visitor/CriteriaTranslatorVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/visitor/CriteriaTranslatorVisitor.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/query/sql/visitor/CriteriaTranslatorVisitor.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -22,22 +22,23 @@
package org.teiid.query.sql.visitor;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
+import org.teiid.api.exception.query.QueryValidatorException;
+import org.teiid.core.TeiidRuntimeException;
import org.teiid.core.util.Assertion;
+import org.teiid.query.QueryPlugin;
import org.teiid.query.sql.lang.BetweenCriteria;
import org.teiid.query.sql.lang.CompareCriteria;
-import org.teiid.query.sql.lang.CompoundCriteria;
import org.teiid.query.sql.lang.Criteria;
import org.teiid.query.sql.lang.DependentSetCriteria;
import org.teiid.query.sql.lang.IsNullCriteria;
import org.teiid.query.sql.lang.MatchCriteria;
import org.teiid.query.sql.lang.SetCriteria;
+import org.teiid.query.sql.navigator.PreOrderNavigator;
import org.teiid.query.sql.proc.CriteriaSelector;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
@@ -52,16 +53,108 @@
* of the elements those translations override any symbol mappings.</p>
*/
public class CriteriaTranslatorVisitor extends ExpressionMappingVisitor {
+
+ class CriteriaTranslatorNavigator extends PreOrderNavigator {
+ public CriteriaTranslatorNavigator() {
+ super(CriteriaTranslatorVisitor.this);
+ }
+
+ /**
+ * <p> This method updates the <code>BetweenCriteria</code> object it receives as an
+ * argument by replacing the virtual elements present in the expressions in the
+ * function with translated expressions.</p>
+ * @param obj The BetweenCriteria object to be updated with translated expressions
+ */
+ public void visit(BetweenCriteria obj) {
+ if (!selectorContainsCriteriaElements(obj, CriteriaSelector.BETWEEN)) {
+ throw new TeiidRuntimeException(new QueryValidatorException(QueryPlugin.Util.getString("Translate.error", obj, selector))); //$NON-NLS-1$
+ }
+ super.visit(obj);
+ }
+
+ /**
+ * <p> This method updates the <code>CompareCriteria</code> object it receives as an
+ * argument by replacing the virtual elements present in the expressions in the
+ * function with translated expressions.</p>
+ * @param obj The CompareCriteria object to be updated with translated expressions
+ */
+ public void visit(CompareCriteria obj) {
+
+ if (!selectorContainsCriteriaElements(obj, obj.getOperator())) {
+ throw new TeiidRuntimeException(new QueryValidatorException(QueryPlugin.Util.getString("Translate.error", obj, selector))); //$NON-NLS-1$
+ }
+
+ super.visit(obj);
+ }
+
+ /**
+ * <p> This method updates the <code>IsNullCriteria</code> object it receives as an
+ * argument by replacing the virtual elements present in the expressions in the
+ * function with translated expressions.</p>
+ * @param obj The IsNullCriteria object to be updated with translated expressions
+ */
+ public void visit(IsNullCriteria obj) {
+
+ if (!selectorContainsCriteriaElements(obj, CriteriaSelector.IS_NULL)) {
+ throw new TeiidRuntimeException(new QueryValidatorException(QueryPlugin.Util.getString("Translate.error", obj, selector))); //$NON-NLS-1$
+ }
+ super.visit(obj);
+ }
+
+ /**
+ * <p> This method updates the <code>MatchCriteria</code> object it receives as an
+ * argument by replacing the virtual elements present in the expressions in the
+ * function with translated expressions</p>
+ * @param obj The SetCriteria object to be updated with translated expressions
+ */
+ public void visit(MatchCriteria obj) {
+
+ if (!selectorContainsCriteriaElements(obj, CriteriaSelector.LIKE)) {
+ throw new TeiidRuntimeException(new QueryValidatorException(QueryPlugin.Util.getString("Translate.error", obj, selector))); //$NON-NLS-1$
+ }
+
+ super.visit(obj);
+ }
+
+ /**
+ * <p> This method updates the <code>SetCriteria</code> object it receives as an
+ * argument by replacing the virtual elements present in the expressions in the
+ * function with translated expressions</p>
+ * @param obj The SetCriteria object to be updated with translated expressions
+ */
+ public void visit(SetCriteria obj) {
+
+ if (!selectorContainsCriteriaElements(obj, CriteriaSelector.IN)) {
+ throw new TeiidRuntimeException(new QueryValidatorException(QueryPlugin.Util.getString("Translate.error", obj, selector))); //$NON-NLS-1$
+ }
+
+ super.visit(obj);
+ }
+
+ /**
+ * <p> This method updates the <code>SetCriteria</code> object it receives as an
+ * argument by replacing the virtual elements present in the expressions in the
+ * function with translated expressions</p>
+ * @param obj The SetCriteria object to be updated with translated expressions
+ */
+ public void visit(DependentSetCriteria obj) {
+
+ if (!selectorContainsCriteriaElements(obj, CriteriaSelector.IN)) {
+ throw new TeiidRuntimeException(new QueryValidatorException(QueryPlugin.Util.getString("Translate.error", obj, selector))); //$NON-NLS-1$
+ }
+
+ super.visit(obj);
+ }
+
+ }
+
// criteria selector specified on the TranslateCriteria obj
private CriteriaSelector selector;
// translation in for of CompareCriteria objs on the TranslateCriteria obj
private Collection translations;
- // list of translated criteria
- private List<Criteria> translatedCriteria = new ArrayList<Criteria>();
-
private Map<ElementSymbol, Reference> implicitParams = new HashMap<ElementSymbol, Reference>();
/**
@@ -101,101 +194,6 @@
this.translations = translations;
}
- // ############### Visitor methods for language objects ##################
-
- /**
- * <p> This method updates the <code>BetweenCriteria</code> object it receives as an
- * argument by replacing the virtual elements present in the expressions in the
- * function with translated expressions.</p>
- * @param obj The BetweenCriteria object to be updated with translated expressions
- */
- public void visit(BetweenCriteria obj) {
- if (!selectorContainsCriteriaElements(obj, CriteriaSelector.BETWEEN)) {
- return;
- }
- super.visit(obj);
- translatedCriteria.add(obj);
- }
-
- /**
- * <p> This method updates the <code>CompareCriteria</code> object it receives as an
- * argument by replacing the virtual elements present in the expressions in the
- * function with translated expressions.</p>
- * @param obj The CompareCriteria object to be updated with translated expressions
- */
- public void visit(CompareCriteria obj) {
-
- if (!selectorContainsCriteriaElements(obj, obj.getOperator())) {
- return;
- }
-
- super.visit(obj);
- translatedCriteria.add(obj);
- }
-
- /**
- * <p> This method updates the <code>IsNullCriteria</code> object it receives as an
- * argument by replacing the virtual elements present in the expressions in the
- * function with translated expressions.</p>
- * @param obj The IsNullCriteria object to be updated with translated expressions
- */
- public void visit(IsNullCriteria obj) {
-
- if (!selectorContainsCriteriaElements(obj, CriteriaSelector.IS_NULL)) {
- return;
- }
- super.visit(obj);
- translatedCriteria.add(obj);
- }
-
- /**
- * <p> This method updates the <code>MatchCriteria</code> object it receives as an
- * argument by replacing the virtual elements present in the expressions in the
- * function with translated expressions</p>
- * @param obj The SetCriteria object to be updated with translated expressions
- */
- public void visit(MatchCriteria obj) {
-
- if (!selectorContainsCriteriaElements(obj, CriteriaSelector.LIKE)) {
- return;
- }
-
- super.visit(obj);
- translatedCriteria.add(obj);
- }
-
- /**
- * <p> This method updates the <code>SetCriteria</code> object it receives as an
- * argument by replacing the virtual elements present in the expressions in the
- * function with translated expressions</p>
- * @param obj The SetCriteria object to be updated with translated expressions
- */
- public void visit(SetCriteria obj) {
-
- if (!selectorContainsCriteriaElements(obj, CriteriaSelector.IN)) {
- return;
- }
-
- super.visit(obj);
- translatedCriteria.add(obj);
- }
-
- /**
- * <p> This method updates the <code>SetCriteria</code> object it receives as an
- * argument by replacing the virtual elements present in the expressions in the
- * function with translated expressions</p>
- * @param obj The SetCriteria object to be updated with translated expressions
- */
- public void visit(DependentSetCriteria obj) {
-
- if (!selectorContainsCriteriaElements(obj, CriteriaSelector.IN)) {
- return;
- }
-
- super.visit(obj);
- translatedCriteria.add(obj);
- }
-
/* ############### Helper Methods ################## */
private boolean selectorContainsCriteriaElements(Criteria criteria, int criteriaType) {
@@ -249,26 +247,17 @@
return super.replaceExpression(obj);
}
- /**
- * <p>Gets the criteria translated by this visitor, differrent parts of the user's
- * criteria are translated and they are combined as a <code>CompoundCriteria</code>
- * using an AND operator. Returns a null if no part of the user's criteria could
- * be translated.</p>
- * @return The criteria after vistor completes translation of the criteria on the
- * virtual group
- */
- public Criteria getTranslatedCriteria() {
- if(translatedCriteria.size() > 0) {
- if(translatedCriteria.size() == 1) {
- return translatedCriteria.get(0);
- }
- return new CompoundCriteria(CompoundCriteria.AND, translatedCriteria);
- }
- return null;
- }
-
public Map<ElementSymbol, Reference> getImplicitParams() {
return implicitParams;
}
+ public void translate(Criteria crit) throws QueryValidatorException {
+ CriteriaTranslatorNavigator nav = new CriteriaTranslatorNavigator();
+ try {
+ crit.acceptVisitor(nav);
+ } catch (TeiidRuntimeException e) {
+ throw (QueryValidatorException)e.getCause();
+ }
+ }
+
}
Modified: trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -489,7 +489,10 @@
}
}
+ List<ElementSymbol> variables = table.getColumns();
+
if (ts == null) {
+ variables = allColumns;
//TODO: coordinate a distributed load
//TODO: order by primary key nulls first - then have an insert ordered optimization
String transformation = metadata.getVirtualPlan(group.getMetadataID()).getQuery();
@@ -510,7 +513,7 @@
}
//TODO: if this insert fails, it's unnecessary to do the undo processing
- table.insert(ts, table.getColumns());
+ table.insert(ts, variables);
rowCount = table.getRowCount();
//TODO: could pre-process indexes to remove overlap
for (Object index : metadata.getIndexesInGroup(group.getMetadataID())) {
Modified: trunk/engine/src/main/resources/org/teiid/query/i18n.properties
===================================================================
--- trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2010-11-05 18:06:57 UTC (rev 2714)
@@ -881,4 +881,6 @@
failed_to_unwrap_connection=Failed to unwrap the source connection.
connection_factory_not_found=Failed to the Connection Factory with JNDI name {0}. Please check the name for spelling or deploy the Connection Factory with specified name.
-RelationalPlanner.nonpushdown_command=Source command "{0}" contains non-pushdown constructs.
\ No newline at end of file
+RelationalPlanner.nonpushdown_command=Source command "{0}" contains non-pushdown constructs.
+
+Translate.error=Cannot translate criteria "{0}", it is not matched by selector "{1}"
\ No newline at end of file
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPWorkContext.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPWorkContext.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPWorkContext.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -26,7 +26,9 @@
import org.mockito.Mockito;
import org.teiid.adminapi.DataPolicy;
+import org.teiid.adminapi.impl.DataPolicyMetadata;
import org.teiid.adminapi.impl.SessionMetadata;
+import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.core.util.UnitTestUtil;
import junit.framework.TestCase;
@@ -67,12 +69,27 @@
public void testClearPolicies() {
DQPWorkContext message = new DQPWorkContext();
message.setSession(Mockito.mock(SessionMetadata.class));
+ Mockito.stub(message.getSession().getVdb()).toReturn(new VDBMetaData());
Map<String, DataPolicy> map = message.getAllowedDataPolicies();
map.put("role", Mockito.mock(DataPolicy.class)); //$NON-NLS-1$
assertFalse(map.isEmpty());
message.setSession(Mockito.mock(SessionMetadata.class));
+ Mockito.stub(message.getSession().getVdb()).toReturn(new VDBMetaData());
map = message.getAllowedDataPolicies();
assertTrue(map.isEmpty());
}
+
+ public void testAnyAuthenticated() {
+ DQPWorkContext message = new DQPWorkContext();
+ message.setSession(Mockito.mock(SessionMetadata.class));
+ VDBMetaData vdb = new VDBMetaData();
+ DataPolicyMetadata dpm = new DataPolicyMetadata();
+ dpm.setAnyAuthenticated(true);
+ vdb.addDataPolicy(dpm);
+ Mockito.stub(message.getSession().getVdb()).toReturn(vdb);
+
+ Map<String, DataPolicy> map = message.getAllowedDataPolicies();
+ assertEquals(1, map.size());
+ }
}
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestDependentJoins.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestDependentJoins.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestDependentJoins.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -22,13 +22,15 @@
package org.teiid.query.optimizer;
+import static org.junit.Assert.*;
+
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
-import junit.framework.TestCase;
-
+import org.junit.Test;
+import org.teiid.metadata.Column;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TransformationMetadata;
import org.teiid.query.optimizer.TestOptimizer.ComparisonMode;
@@ -48,9 +50,8 @@
import org.teiid.query.unittest.FakeMetadataFactory;
import org.teiid.query.unittest.FakeMetadataObject;
-
-
-public class TestDependentJoins extends TestCase {
+@SuppressWarnings("nls")
+public class TestDependentJoins {
static void checkDependentGroups(ProcessorPlan plan, String[] groups) {
if(! (plan instanceof RelationalPlan)) {
@@ -130,7 +131,7 @@
}
}
- public void testOptionMakeDep1() throws Exception {
+ @Test public void testOptionMakeDep1() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
@@ -161,7 +162,7 @@
});
}
- public void testOptionMakeDep2() throws Exception {
+ @Test public void testOptionMakeDep2() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, false);
@@ -191,7 +192,7 @@
});
}
- public void testDepJoinHintForceLeft() throws Exception {
+ @Test public void testDepJoinHintForceLeft() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select * FROM vm1.g4 option makedep pm1.g1", TestOptimizer.example1(), //$NON-NLS-1$
new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0 WHERE g_0.e1 IN (<dependent values>)", "SELECT g_0.e1 FROM pm1.g2 AS g_0" }, TestOptimizer.getGenericFinder(false), TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING ); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
@@ -213,7 +214,7 @@
checkDependentGroups(plan, new String[] {"pm1.g1"}); //$NON-NLS-1$
}
- public void testDepJoinHintForceRight() throws Exception {
+ @Test public void testDepJoinHintForceRight() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select * FROM vm1.g4 option makedep pm1.g2", TestOptimizer.example1(), //$NON-NLS-1$
new String[] { "SELECT g_0.e1 FROM pm1.g2 AS g_0 WHERE g_0.e1 IN (<dependent values>)", "SELECT g_0.e1 FROM pm1.g1 AS g_0" }, TestOptimizer.getGenericFinder(false), TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING ); //$NON-NLS-1$ //$NON-NLS-2$
@@ -236,7 +237,7 @@
checkDependentGroups(plan, new String[] {"pm1.g2"}); //$NON-NLS-1$
}
- public void testDepJoinMultiGroupBaseline() throws Exception {
+ @Test public void testDepJoinMultiGroupBaseline() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select vm1.g4.*, pm1.g3.e1 FROM vm1.g4, pm1.g3 where pm1.g3.e1=vm1.g4.e1", TestOptimizer.example1(), //$NON-NLS-1$
new String[] { "SELECT pm1.g1.e1 FROM pm1.g1", //$NON-NLS-1$
"SELECT pm1.g2.e1 FROM pm1.g2", //$NON-NLS-1$
@@ -260,7 +261,7 @@
checkDependentGroups(plan, new String[0]);
}
- public void testDepJoinMultiGroupForceOther() throws Exception {
+ @Test public void testDepJoinMultiGroupForceOther() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select vm1.g4.*, pm1.g3.e1 FROM vm1.g4, pm1.g3 where pm1.g3.e1=vm1.g4.e1 option makedep pm1.g2", TestOptimizer.example1(), //$NON-NLS-1$
new String[] { "SELECT g_0.e1 FROM pm1.g3 AS g_0", "SELECT g_0.e1 FROM pm1.g2 AS g_0 WHERE g_0.e1 IN (<dependent values>)", "SELECT g_0.e1 FROM pm1.g1 AS g_0" }, TestOptimizer.getGenericFinder(false), TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
TestOptimizer.checkNodeTypes(plan, new int[] {
@@ -282,7 +283,7 @@
checkDependentGroups(plan, new String[] {"pm1.g2"}); //$NON-NLS-1$
}
- public void testDepJoinHintForceLeft_NotDep() throws Exception {
+ @Test public void testDepJoinHintForceLeft_NotDep() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select * FROM vm1.g4 option makedep pm1.g1 makenotdep pm1.g2", TestOptimizer.example1(), //$NON-NLS-1$
new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0 WHERE g_0.e1 IN (<dependent values>)", "SELECT g_0.e1 FROM pm1.g2 AS g_0" }, TestOptimizer.getGenericFinder(false), TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING ); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
@@ -305,7 +306,7 @@
checkNotDependentGroups(plan, new String[] {"pm1.g2"}); //$NON-NLS-1$
}
- public void testDepJoinHintForceRight_NotDep() throws Exception {
+ @Test public void testDepJoinHintForceRight_NotDep() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select * FROM vm1.g4 option makedep pm1.g2 makenotdep pm1.g1", TestOptimizer.example1(), //$NON-NLS-1$
new String[] { "SELECT g_0.e1 FROM pm1.g2 AS g_0 WHERE g_0.e1 IN (<dependent values>)", "SELECT g_0.e1 FROM pm1.g1 AS g_0" }, TestOptimizer.getGenericFinder(false), TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING ); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
@@ -328,7 +329,7 @@
checkNotDependentGroups(plan, new String[] {"pm1.g1"}); //$NON-NLS-1$
}
- public void testDepJoinMultiGroupForceOther_NotDep() throws Exception {
+ @Test public void testDepJoinMultiGroupForceOther_NotDep() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select vm1.g4.*, pm1.g3.e1 FROM vm1.g4, pm1.g3 where pm1.g3.e1=vm1.g4.e1 option makedep pm1.g2 makenotdep pm1.g1, pm1.g3", TestOptimizer.example1(), //$NON-NLS-1$
new String[] { "SELECT g_0.e1 FROM pm1.g3 AS g_0", "SELECT g_0.e1 FROM pm1.g2 AS g_0 WHERE g_0.e1 IN (<dependent values>)", "SELECT g_0.e1 FROM pm1.g1 AS g_0" }, TestOptimizer.getGenericFinder(false), TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
TestOptimizer.checkNodeTypes(plan, new int[] {
@@ -354,7 +355,7 @@
/**
* Test that access node with unsatisfied access pattern is made dependent
*/
- public void testMakeDependentAccessPattern1() throws Exception {
+ @Test public void testMakeDependentAccessPattern1() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select pm1.g1.e1 from pm1.g1, pm4.g1 where pm1.g1.e1 = pm4.g1.e1", FakeMetadataFactory.example1Cached(), //$NON-NLS-1$
new String[] { "SELECT g_0.e1 FROM pm4.g1 AS g_0 WHERE g_0.e1 IN (<dependent values>)", "SELECT g_0.e1 FROM pm1.g1 AS g_0" }, TestOptimizer.getGenericFinder(false), TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
checkDependentGroups(plan, new String[] {"pm4.g1"}); //$NON-NLS-1$
@@ -364,7 +365,7 @@
* Test that access node with unsatisfied access pattern is made dependent
* (Same query written slightly different way)
*/
- public void testMakeDependentAccessPattern1a() throws Exception {
+ @Test public void testMakeDependentAccessPattern1a() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select pm1.g1.e1 from pm4.g1, pm1.g1 where pm4.g1.e1 = pm1.g1.e1", FakeMetadataFactory.example1Cached(), //$NON-NLS-1$
new String[] { "SELECT g_0.e1 FROM pm4.g1 AS g_0 WHERE g_0.e1 IN (<dependent values>)", "SELECT g_0.e1 FROM pm1.g1 AS g_0" }, TestOptimizer.getGenericFinder(false), TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
checkDependentGroups(plan, new String[] {"pm4.g1"}); //$NON-NLS-1$
@@ -373,7 +374,7 @@
/**
* Test that access node with unsatisfied access pattern is made dependent
*/
- public void testMakeDependentAccessPattern2() throws Exception {
+ @Test public void testMakeDependentAccessPattern2() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select pm1.g1.e1 from pm1.g1, pm4.g1 where pm4.g1.e2 = 1 and pm1.g1.e1 = pm4.g1.e1", FakeMetadataFactory.example1Cached(), //$NON-NLS-1$
new String[] { "SELECT g_0.e1 FROM pm4.g1 AS g_0 WHERE (g_0.e2 = 1) AND (g_0.e1 IN (<dependent values>))", "SELECT g_0.e1 FROM pm1.g1 AS g_0" }, TestOptimizer.getGenericFinder(false), TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
checkDependentGroups(plan, new String[] {"pm4.g1"}); //$NON-NLS-1$
@@ -383,7 +384,7 @@
* Test that second access pattern of access node is chosen to make
* dependent with
*/
- public void testMakeDependentAccessPattern3() throws Exception {
+ @Test public void testMakeDependentAccessPattern3() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select pm1.g1.e1 from pm1.g1, pm4.g2 where pm1.g1.e1 = pm4.g2.e5", FakeMetadataFactory.example1Cached(), //$NON-NLS-1$
new String[] { "SELECT g_0.e5 FROM pm4.g2 AS g_0 WHERE g_0.e5 IN (<dependent values>)", "SELECT g_0.e1 FROM pm1.g1 AS g_0" }, TestOptimizer.getGenericFinder(false), TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
checkDependentGroups(plan, new String[] {"pm4.g2"}); //$NON-NLS-1$
@@ -394,7 +395,7 @@
* be made dependent, but merge join is used since no access pattern
* needs to be fulfilled and there is no cost info available for either source
*/
- public void testPushSelectAndMakeDependentAccessPattern1() throws Exception {
+ @Test public void testPushSelectAndMakeDependentAccessPattern1() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select pm1.g1.e1 from pm1.g1, pm4.g1 where pm4.g1.e1 = 'abc' and pm1.g1.e1 = 'abc' and pm1.g1.e2 = pm4.g1.e2", FakeMetadataFactory.example1Cached(), //$NON-NLS-1$
new String[] { "SELECT pm1.g1.e2, pm1.g1.e1 FROM pm1.g1 WHERE pm1.g1.e1 = 'abc'", "SELECT pm4.g1.e2 FROM pm4.g1 WHERE pm4.g1.e1 = 'abc'" }, TestOptimizer.getGenericFinder(false), ComparisonMode.CORRECTED_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
checkDependentGroups(plan, new String[0]);
@@ -423,7 +424,7 @@
* needs to be fulfilled and there is no cost info available for either source
* (Same query written slightly different)
*/
- public void testPushSelectAndMakeDependentAccessPattern1a() throws Exception {
+ @Test public void testPushSelectAndMakeDependentAccessPattern1a() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select pm1.g1.e1 from pm4.g1, pm1.g1 where pm4.g1.e2 = pm1.g1.e2 and pm4.g1.e1 = 'abc' and pm1.g1.e1 = 'abc'", FakeMetadataFactory.example1Cached(), //$NON-NLS-1$
new String[] { "SELECT pm1.g1.e2, pm1.g1.e1 FROM pm1.g1 WHERE pm1.g1.e1 = 'abc'", "SELECT pm4.g1.e2 FROM pm4.g1 WHERE pm4.g1.e1 = 'abc'" }, TestOptimizer.getGenericFinder(false), ComparisonMode.CORRECTED_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
checkDependentGroups(plan, new String[0]);
@@ -450,7 +451,7 @@
* Tests that it is enforced if an access node can't be made dependent
* because of it's (already-satisfied) access pattern - merge join is used
*/
- public void testPushSelectAndMakeDependentAccessPattern2() throws Exception {
+ @Test public void testPushSelectAndMakeDependentAccessPattern2() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("select pm1.g1.e1 from pm1.g1, pm4.g1 where pm4.g1.e1 = 'abc' and pm1.g1.e2 = pm4.g1.e2", FakeMetadataFactory.example1Cached(), //$NON-NLS-1$
new String[] { "SELECT pm1.g1.e2, pm1.g1.e1 FROM pm1.g1", "SELECT pm4.g1.e2 FROM pm4.g1 WHERE pm4.g1.e1 = 'abc'" }, TestOptimizer.getGenericFinder(false), ComparisonMode.CORRECTED_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
checkDependentGroups(plan, new String[0] );
@@ -474,7 +475,7 @@
}
/** Should use dependent join since one access node is "strong" */
- public void testUseMergeJoin1() throws Exception {
+ @Test public void testUseMergeJoin1() throws Exception {
// Create query
String sql = "SELECT pm1.g1.e1 FROM pm1.g1, pm1.g2 WHERE pm1.g1.e1 = pm1.g2.e1";//$NON-NLS-1$
@@ -513,7 +514,7 @@
}
/** Should not use a dependent join since neither access node is "strong" */
- public void testUseMergeJoin2() throws Exception {
+ @Test public void testUseMergeJoin2() throws Exception {
// Create query
String sql = "SELECT pm1.g1.e1 FROM pm1.g1, pm1.g2 WHERE pm1.g1.e1 = pm1.g2.e1";//$NON-NLS-1$
@@ -549,7 +550,7 @@
}
/** should have one dependent joins */
- public void testMultiMergeJoin3() throws Exception {
+ @Test public void testMultiMergeJoin3() throws Exception {
// Create query
String sql = "SELECT pm1.g2.e1 FROM pm1.g3, pm1.g2, pm1.g1 WHERE pm1.g2.e1 = pm1.g3.e1 AND pm1.g1.e1 = pm1.g2.e1";//$NON-NLS-1$
@@ -591,7 +592,7 @@
});
}
- public void testMultiMergeJoin2() throws Exception {
+ @Test public void testMultiMergeJoin2() throws Exception {
String sql = "SELECT pm1.g1.e1 FROM pm1.g1, pm1.g2, pm1.g3 WHERE pm1.g1.e1 = pm1.g2.e1 AND pm1.g2.e1 = pm1.g3.e1";//$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
@@ -637,7 +638,7 @@
* should be one merge join and one dependent join
* Unlike the above tests, here the model pm1 supports ORDER BY.
*/
- public void testMultiMergeJoin5_defect13448() throws Exception {
+ @Test public void testMultiMergeJoin5_defect13448() throws Exception {
// Create query
String sql = "SELECT pm1.g1.e1 FROM pm1.g1, pm1.g2, pm1.g3 WHERE pm1.g1.e1 = pm1.g2.e1 AND pm1.g1.e1 = pm1.g3.e1";//$NON-NLS-1$
@@ -681,7 +682,7 @@
});
}
- public void testMergeJoinVirtualGroups() throws Exception {
+ @Test public void testMergeJoinVirtualGroups() throws Exception {
String sql = "SELECT vm1.g1.e1 FROM vm1.g1, vm1.g2a WHERE vm1.g1.e1 = vm1.g2a.e1";//$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
@@ -722,7 +723,7 @@
});
}
- public void testRLMCase2077() throws Exception {
+ @Test public void testRLMCase2077() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
@@ -766,7 +767,7 @@
}
- public void testRLMCase2077_2() throws Exception {
+ @Test public void testRLMCase2077_2() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
@@ -809,5 +810,47 @@
});
}
+
+ @Test public void testCostingCleanup() throws Exception {
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
+ caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
+ caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, true);
+ capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
+ capFinder.addCapabilities("BQT2", caps); //$NON-NLS-1$
+ TransformationMetadata metadata = FakeMetadataFactory.exampleBQT();
+ FakeMetadataFactory.setCardinality("bqt1.smalla", 3000, metadata); //$NON-NLS-1$
+ FakeMetadataFactory.setCardinality("bqt2.smalla", 10000, metadata); //$NON-NLS-1$
+ Column fmo = (Column)metadata.getElementID("bqt1.smalla.intnum");
+ fmo.setDistinctValues(1000);
+ ProcessorPlan plan = TestOptimizer.helpPlan(
+ "SELECT max(a.stringkey) from bqt1.smalla a, bqt2.smalla a2, bqt1.smalla a1 where a.intnum = a2.intnum and a1.stringnum = a2.stringnum and a.floatnum = a1.floatnum", //$NON-NLS-1$
+ metadata,
+ null, capFinder,
+ new String[] {"SELECT g_1.stringnum AS c_0, g_0.intnum AS c_1, MAX(g_0.stringkey) AS c_2 FROM bqt1.smalla AS g_0, bqt1.smalla AS g_1 WHERE g_0.floatnum = g_1.floatnum GROUP BY g_1.stringnum, g_0.intnum ORDER BY c_0, c_1", "SELECT DISTINCT g_0.stringnum AS c_0, g_0.intnum AS c_1 FROM bqt2.smalla AS g_0 WHERE (g_0.stringnum IN (<dependent values>)) AND (g_0.intnum IN (<dependent values>)) ORDER BY c_0, c_1"},
+ TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING );
+
+ TestOptimizer.checkNodeTypes(plan, new int[] {
+ 1, // Access
+ 1, // DependentAccess
+ 0, // DependentSelect
+ 0, // DependentProject
+ 0, // DupRemove
+ 1, // Grouping
+ 0, // NestedLoopJoinStrategy
+ 1, // MergeJoinStrategy
+ 0, // Null
+ 0, // PlanExecution
+ 1, // Project
+ 0, // Select
+ 0, // Sort
+ 0 // UnionAll
+ });
+
+ }
+
}
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestMaterialization.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestMaterialization.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestMaterialization.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -145,5 +145,9 @@
execute("SELECT * from vgroup6 where y in ('zne', 'zwo') order by y desc", Arrays.asList("two", "zwo"), Arrays.asList("one", "zne"));
execute("SELECT * from vgroup6 where y is null", Arrays.asList((String)null, (String)null));
}
+
+ @Test public void testPrimaryKeyOnOtherColumn() throws Exception {
+ execute("SELECT * from vgroup7 where y is null", Arrays.asList("1", null, 1));
+ }
}
Modified: trunk/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/test/java/org/teiid/query/rewriter/TestQueryRewriter.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -1185,30 +1185,69 @@
assertEquals("Rewritten command was not expected", rewritProc, procReturned); //$NON-NLS-1$
}
- // virtual group elements used in procedure in if statement(TRANSLATE CRITERIA)
+ // virtual group elements used in procedure (TRANSLATE CRITERIA)
@Test public void testRewriteProcedure16() throws Exception {
- String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
- procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
- procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
- procedure = procedure + "Select pm1.g1.e2 from pm1.g1 where TRANSLATE CRITERIA;\n"; //$NON-NLS-1$
- procedure = procedure + "END\n"; //$NON-NLS-1$
+ String procedure = exampleTranslateUpdate();
String userQuery = "UPDATE vm1.g3 SET x='x' where e4= 1"; //$NON-NLS-1$
String rewritProc = "CREATE PROCEDURE\n"; //$NON-NLS-1$
rewritProc = rewritProc + "BEGIN\n"; //$NON-NLS-1$
rewritProc = rewritProc + "DECLARE integer var1;\n"; //$NON-NLS-1$
- rewritProc = rewritProc + "SELECT pm1.g1.e2 FROM pm1.g1 WHERE e4 = 0.02;\n"; //$NON-NLS-1$
+ rewritProc = rewritProc + "UPDATE pm1.g1 SET e1 = 'x' WHERE e4 = 0.02;\n"; //$NON-NLS-1$
rewritProc = rewritProc + "END"; //$NON-NLS-1$
String procReturned = this.getRewritenProcedure(procedure, userQuery,
FakeMetadataObject.Props.UPDATE_PROCEDURE);
assertEquals("Rewritten command was not expected", rewritProc, procReturned); //$NON-NLS-1$
+ }
+
+ @Test public void testRewriteNoUserCriteria() throws Exception {
+ String procedure = exampleTranslateUpdate();
+
+ String userQuery = "UPDATE vm1.g3 SET x='x'"; //$NON-NLS-1$
+
+ String rewritProc = "CREATE PROCEDURE\n"; //$NON-NLS-1$
+ rewritProc = rewritProc + "BEGIN\n"; //$NON-NLS-1$
+ rewritProc = rewritProc + "DECLARE integer var1;\n"; //$NON-NLS-1$
+ rewritProc = rewritProc + "UPDATE pm1.g1 SET e1 = 'x' WHERE 1 = 1;\n"; //$NON-NLS-1$
+ rewritProc = rewritProc + "END"; //$NON-NLS-1$
+
+ String procReturned = this.getRewritenProcedure(procedure, userQuery,
+ FakeMetadataObject.Props.UPDATE_PROCEDURE);
+
+ assertEquals("Rewritten command was not expected", rewritProc, procReturned); //$NON-NLS-1$
+ }
+
+ @Test public void testRewriteOrUserCriteria() throws Exception {
+ String procedure = exampleTranslateUpdate();
+
+ String userQuery = "UPDATE vm1.g3 SET x='x' where x = '1' or x = '2'"; //$NON-NLS-1$
+
+ String rewritProc = "CREATE PROCEDURE\n"; //$NON-NLS-1$
+ rewritProc = rewritProc + "BEGIN\n"; //$NON-NLS-1$
+ rewritProc = rewritProc + "DECLARE integer var1;\n"; //$NON-NLS-1$
+ rewritProc = rewritProc + "UPDATE pm1.g1 SET e1 = 'x' WHERE (CONCAT(e1, 'm') = '1') OR (CONCAT(e1, 'm') = '2');\n"; //$NON-NLS-1$
+ rewritProc = rewritProc + "END"; //$NON-NLS-1$
+
+ String procReturned = this.getRewritenProcedure(procedure, userQuery,
+ FakeMetadataObject.Props.UPDATE_PROCEDURE);
+
+ assertEquals("Rewritten command was not expected", rewritProc, procReturned); //$NON-NLS-1$
+ }
+
+ private String exampleTranslateUpdate() {
+ String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
+ procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
+ procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
+ procedure = procedure + "update pm1.g1 set pm1.g1.e1 = inputs.x where TRANSLATE CRITERIA;\n"; //$NON-NLS-1$
+ procedure = procedure + "END\n"; //$NON-NLS-1$
+ return procedure;
}
// virtual group elements used in procedure in if statement(TRANSLATE CRITERIA)
- @Test public void testRewriteProcedure17() throws Exception {
+ @Test(expected=QueryValidatorException.class) public void testRewriteProcedure17() throws Exception {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
@@ -1217,16 +1256,8 @@
String userQuery = "UPDATE vm1.g3 SET x='x' where e4= 1"; //$NON-NLS-1$
- String rewritProc = "CREATE PROCEDURE\n"; //$NON-NLS-1$
- rewritProc = rewritProc + "BEGIN\n"; //$NON-NLS-1$
- rewritProc = rewritProc + "DECLARE integer var1;\n"; //$NON-NLS-1$
- rewritProc = rewritProc + "SELECT pm1.g1.e2 FROM pm1.g1 WHERE "+FALSE_STR+";\n"; //$NON-NLS-1$ //$NON-NLS-2$
- rewritProc = rewritProc + "END"; //$NON-NLS-1$
-
- String procReturned = this.getRewritenProcedure(procedure, userQuery,
+ this.getRewritenProcedure(procedure, userQuery,
FakeMetadataObject.Props.UPDATE_PROCEDURE);
-
- assertEquals("Rewritten command was not expected", rewritProc, procReturned); //$NON-NLS-1$
}
// Bug 8212 elements in INPUT and CHANGING special groups are cese sensitive
@@ -1367,7 +1398,7 @@
}
// elements being set in updates are dropped if INPUT var is not available
- @Test public void testRewriteProcedure24() throws Exception {
+ @Test(expected=QueryValidatorException.class) public void testRewriteProcedure24() throws Exception {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "UPDATE pm1.g1 SET e2=Input.e2 WHERE TRANSLATE LIKE CRITERIA ON (e1) WITH (e1=concat(pm1.g1.e1, '%'));\n"; //$NON-NLS-1$
@@ -1375,17 +1406,10 @@
String userQuery = "UPDATE vm1.g1 set E2=1 where e2 = 1 and e1 LIKE 'mnopxyz_'"; //$NON-NLS-1$
- String rewritProc = "CREATE PROCEDURE\n"; //$NON-NLS-1$
- rewritProc = rewritProc + "BEGIN\n"; //$NON-NLS-1$
- rewritProc = rewritProc + "UPDATE pm1.g1 SET e2 = 1 WHERE concat(pm1.g1.e1, '%') LIKE 'mnopxyz_';\n"; //$NON-NLS-1$
- rewritProc = rewritProc + "END"; //$NON-NLS-1$
+ this.getRewritenProcedure(procedure, userQuery,
+ FakeMetadataObject.Props.UPDATE_PROCEDURE);
+ }
- String procReturned = this.getRewritenProcedure(procedure, userQuery,
- FakeMetadataObject.Props.UPDATE_PROCEDURE);
-
- assertEquals("Rewritten command was not expected", rewritProc, procReturned); //$NON-NLS-1$
- }
-
// INPUT vars in insert statements replaced by default variable when user's inser ignores values
@Test public void testRewriteProcedure25() throws Exception {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
@@ -1429,7 +1453,7 @@
}
// virtual group elements used in procedure in if statement(TRANSLATE CRITERIA)
- @Test public void testRewriteProcedure27() throws Exception {
+ @Test(expected=QueryValidatorException.class) public void testRewriteProcedure27() throws Exception {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
@@ -1438,16 +1462,8 @@
String userQuery = "UPDATE vm1.g1 SET e1='x' where e2 LIKE 'xyz'"; //$NON-NLS-1$
- String rewritProc = "CREATE PROCEDURE\n"; //$NON-NLS-1$
- rewritProc = rewritProc + "BEGIN\n"; //$NON-NLS-1$
- rewritProc = rewritProc + "DECLARE integer var1;\n"; //$NON-NLS-1$
- rewritProc = rewritProc + "SELECT pm1.g1.e2 FROM pm1.g1, pm1.g2 WHERE "+FALSE_STR+";\n"; //$NON-NLS-1$ //$NON-NLS-2$
- rewritProc = rewritProc + "END"; //$NON-NLS-1$
-
- String procReturned = this.getRewritenProcedure(procedure, userQuery,
+ this.getRewritenProcedure(procedure, userQuery,
FakeMetadataObject.Props.UPDATE_PROCEDURE);
-
- assertEquals("Rewritten command was not expected", rewritProc, procReturned); //$NON-NLS-1$
}
/**
Modified: trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -391,6 +391,16 @@
createKey(KeyRecord.Type.Index, "idx", vGroup6, vElements6.subList(1, 2));
+ //non-covering index
+ QueryNode vTrans7 = new QueryNode("VGroup7", "SELECT '1', 'z' || substring(x, 2) as y, 1 as z FROM matsrc"); //$NON-NLS-1$ //$NON-NLS-2$
+ Table vGroup7 = createVirtualGroup("VGroup7", virtModel, vTrans7); //$NON-NLS-1$
+ vGroup7.setMaterialized(true);
+ List<Column> vElements7 = createElements(vGroup7,
+ new String[] { "x", "y", "z" }, //$NON-NLS-1$
+ new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER});
+
+ createKey(KeyRecord.Type.Primary, "pk", vGroup7, vElements7.subList(1, 2));
+
Schema sp = createVirtualModel("sp", metadataStore); //$NON-NLS-1$
ColumnSet<Procedure> rs = createResultSet("sp1.vsprs1", new String[] { "StringKey" }, new String[] { DataTypeManager.DefaultDataTypes.STRING }); //$NON-NLS-1$ //$NON-NLS-2$
ProcedureParameter param = createParameter("param1", ParameterInfo.IN, DataTypeManager.DefaultDataTypes.STRING); //$NON-NLS-1$
Modified: trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java
===================================================================
--- trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -170,21 +170,21 @@
this.csr.registerClientService(DQP.class, proxyService(DQP.class, this.dqpCore, LogConstants.CTX_DQP), LogConstants.CTX_DQP);
this.csr.registerClientService(Admin.class, proxyService(Admin.class, admin, LogConstants.CTX_ADMIN_API), LogConstants.CTX_ADMIN_API);
- if (this.jdbcSocketConfiguration.isEnabled()) {
+ if (this.jdbcSocketConfiguration.getEnabled()) {
this.jdbcSocket = new SocketListener(this.jdbcSocketConfiguration, csr, this.dqpCore.getBufferManager(), offset);
LogManager.logInfo(LogConstants.CTX_RUNTIME, IntegrationPlugin.Util.getString("socket_enabled","Teiid JDBC = ",(this.jdbcSocketConfiguration.getSSLConfiguration().isSslEnabled()?"mms://":"mm://")+this.jdbcSocketConfiguration.getHostAddress().getHostName()+":"+(this.jdbcSocketConfiguration.getPortNumber()+offset))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
} else {
LogManager.logInfo(LogConstants.CTX_RUNTIME, IntegrationPlugin.Util.getString("socket_not_enabled", "jdbc connections")); //$NON-NLS-1$ //$NON-NLS-2$
}
- if (this.adminSocketConfiguration.isEnabled()) {
+ if (this.adminSocketConfiguration.getEnabled()) {
this.adminSocket = new SocketListener(this.adminSocketConfiguration, csr, this.dqpCore.getBufferManager(), offset);
LogManager.logInfo(LogConstants.CTX_RUNTIME, IntegrationPlugin.Util.getString("socket_enabled","Teiid Admin", (this.adminSocketConfiguration.getSSLConfiguration().isSslEnabled()?"mms://":"mm://")+this.adminSocketConfiguration.getHostAddress().getHostName()+":"+(this.adminSocketConfiguration.getPortNumber()+offset))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
} else {
LogManager.logInfo(LogConstants.CTX_RUNTIME, IntegrationPlugin.Util.getString("socket_not_enabled", "admin connections")); //$NON-NLS-1$ //$NON-NLS-2$
}
- if (this.odbcSocketConfiguration.isEnabled()) {
+ if (this.odbcSocketConfiguration.getEnabled()) {
this.vdbRepository.odbcEnabled();
this.odbcSocket = new ODBCSocketListener(this.odbcSocketConfiguration, csr, this.dqpCore.getBufferManager(), offset);
LogManager.logInfo(LogConstants.CTX_RUNTIME, IntegrationPlugin.Util.getString("odbc_enabled","Teiid ODBC - SSL=", (this.odbcSocketConfiguration.getSSLConfiguration().isSslEnabled()?"ON":"OFF")+" Host = "+this.odbcSocketConfiguration.getHostAddress().getHostName()+" Port = "+(this.odbcSocketConfiguration.getPortNumber()+offset))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
@@ -192,7 +192,7 @@
LogManager.logInfo(LogConstants.CTX_RUNTIME, IntegrationPlugin.Util.getString("odbc_not_enabled")); //$NON-NLS-1$
}
- LogManager.logInfo(LogConstants.CTX_RUNTIME, IntegrationPlugin.Util.getString("engine_started", new Date(System.currentTimeMillis()).toString())); //$NON-NLS-1$
+ LogManager.logInfo(LogConstants.CTX_RUNTIME, IntegrationPlugin.Util.getString("engine_started", getRuntimeVersion(), new Date(System.currentTimeMillis()).toString())); //$NON-NLS-1$
if (jndiName != null) {
final InitialContext ic ;
try {
Modified: trunk/jboss-integration/src/main/resources/org/teiid/jboss/i18n.properties
===================================================================
--- trunk/jboss-integration/src/main/resources/org/teiid/jboss/i18n.properties 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/jboss-integration/src/main/resources/org/teiid/jboss/i18n.properties 2010-11-05 18:06:57 UTC (rev 2714)
@@ -20,7 +20,7 @@
# 02110-1301 USA.
#
-engine_started=Teiid Engine Started = {0}
+engine_started=Teiid Engine {0} Started = {1}
socket_enabled={0} {1}
odbc_not_enabled=ODBC transport is not enabled in Teiid.
odbc_enabled={0} {1}
Modified: trunk/runtime/src/main/java/org/teiid/transport/SocketConfiguration.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/transport/SocketConfiguration.java 2010-11-05 15:02:21 UTC (rev 2713)
+++ trunk/runtime/src/main/java/org/teiid/transport/SocketConfiguration.java 2010-11-05 18:06:57 UTC (rev 2714)
@@ -26,6 +26,7 @@
import org.jboss.managed.api.annotation.ManagementComponent;
import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementObjectID;
import org.jboss.managed.api.annotation.ManagementProperties;
import org.jboss.managed.api.annotation.ManagementProperty;
import org.teiid.core.TeiidRuntimeException;
@@ -42,8 +43,18 @@
private SSLConfiguration sslConfiguration;
private boolean enabled;
private String hostName;
+ private String name;
+ @ManagementProperty(description="Name of the configuration", readOnly=true)
+ @ManagementObjectID(type="socket")
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+
public void setBindAddress(String addr) {
this.hostName = addr;
}
@@ -79,8 +90,8 @@
}
}
- @ManagementProperty(description="SSL enabled", readOnly=true)
- public boolean isEnabled() {
+ @ManagementProperty(description="enabled")
+ public boolean getEnabled() {
return enabled;
}
@@ -88,22 +99,22 @@
this.enabled = enabled;
}
- @ManagementProperty(description="SO_SNDBUF size, 0 indicates that system default should be used (default 0)",readOnly=true)
+ @ManagementProperty(description="SO_SNDBUF size, 0 indicates that system default should be used (default 0)")
public int getOutputBufferSize() {
return outputBufferSize;
}
- @ManagementProperty(description="SO_RCVBUF size, 0 indicates that system default should be used (default 0)",readOnly=true)
+ @ManagementProperty(description="SO_RCVBUF size, 0 indicates that system default should be used (default 0)")
public int getInputBufferSize() {
return inputBufferSize;
}
- @ManagementProperty(description="Max NIO threads",readOnly=true)
+ @ManagementProperty(description="Max NIO threads")
public int getMaxSocketThreads() {
return maxSocketThreads;
}
- @ManagementProperty(description="Port Number",readOnly=true)
+ @ManagementProperty(description="Port Number")
public int getPortNumber() {
return portNumber;
}
@@ -126,7 +137,7 @@
}
}
- @ManagementProperty(description="Host Name",readOnly=true)
+ @ManagementProperty(description="Host Name")
public String getHostName() {
resolveHostName();
return this.hostName;
@@ -134,5 +145,10 @@
public SSLConfiguration getSSLConfiguration() {
return sslConfiguration;
- }
+ }
+
+ @ManagementProperty(description="SSL enabled")
+ public boolean getSslEnabled() {
+ return this.sslConfiguration != null && this.sslConfiguration.isSslEnabled();
+ }
}
14 years, 1 month
teiid SVN: r2713 - tags/teiid-parent-7.2.0.Final/build/kits/jboss-container and 1 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-11-05 11:02:21 -0400 (Fri, 05 Nov 2010)
New Revision: 2713
Modified:
branches/7.2.x/documentation/reference/src/main/docbook/en-US/content/grammar.xml
branches/7.2.x/documentation/reference/src/main/docbook/en-US/content/procedures.xml
tags/teiid-parent-7.2.0.Final/build/kits/jboss-container/teiid-releasenotes.html
tags/teiid-parent-7.2.0.Final/documentation/reference/src/main/docbook/en-US/content/grammar.xml
tags/teiid-parent-7.2.0.Final/documentation/reference/src/main/docbook/en-US/content/procedures.xml
Log:
updating missed files for release
Modified: branches/7.2.x/documentation/reference/src/main/docbook/en-US/content/grammar.xml
===================================================================
--- branches/7.2.x/documentation/reference/src/main/docbook/en-US/content/grammar.xml 2010-11-05 14:43:05 UTC (rev 2712)
+++ branches/7.2.x/documentation/reference/src/main/docbook/en-US/content/grammar.xml 2010-11-05 15:02:21 UTC (rev 2713)
@@ -427,7 +427,7 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod22" xreflabel="delimitedStatement"/>delimitedStatement</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod23">sqlStatement</link> | <link linkend="prod16">errorStatement</link> | <link linkend="prod24">assignStatement</link> | <link linkend="prod25">declareStatement</link> | <link linkend="prod26">continueStatement</link> | <link linkend="prod27">breakStatement</link> ) <SEMICOLON></para></entry></row>
+( <link linkend="prod23">assignStatement</link> | <link linkend="prod24">sqlStatement</link> | <link linkend="prod16">errorStatement</link> | <link linkend="prod25">declareStatement</link> | <link linkend="prod26">continueStatement</link> | <link linkend="prod27">breakStatement</link> ) <SEMICOLON></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod28" xreflabel="block"/>block</para></entry>
<entry align="left" valign="top"><para>::=
@@ -463,19 +463,19 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod25" xreflabel="declareStatement"/>declareStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<DECLARE> <link linkend="prod32">dataType</link> <link linkend="prod2">id</link> ( <EQ> <link linkend="prod33">assignStatementOperand</link> )?</para></entry></row>
+<DECLARE> <link linkend="prod32">dataType</link> <link linkend="prod2">id</link> ( ( <link linkend="prod15">nonReserved</link> | <EQ> ) <link linkend="prod33">assignStatementOperand</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod24" xreflabel="assignStatement"/>assignStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod23" xreflabel="assignStatement"/>assignStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> <EQ> <link linkend="prod33">assignStatementOperand</link></para></entry></row>
+<link linkend="prod2">id</link> ( <link linkend="prod15">nonReserved</link> | <EQ> ) <link linkend="prod33">assignStatementOperand</link></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod33" xreflabel="assignStatementOperand"/>assignStatementOperand</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <link linkend="prod9">insert</link> ) | <link linkend="prod10">update</link> | <link linkend="prod11">delete</link> | <link linkend="prod8">storedProcedure</link> | ( <link linkend="prod17">expression</link> ) | <link linkend="prod7">queryExpression</link> )</para></entry></row>
+( ( <link linkend="prod9">insert</link> ) | <link linkend="prod10">update</link> | <link linkend="prod11">delete</link> | ( <link linkend="prod17">expression</link> ) | <link linkend="prod7">queryExpression</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod23" xreflabel="sqlStatement"/>sqlStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod24" xreflabel="sqlStatement"/>sqlStatement</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <link linkend="prod34">dynamicCommand</link> ) | <link linkend="prod5">userCommand</link> )</para></entry></row>
+( ( <link linkend="prod5">userCommand</link> ) | <link linkend="prod34">dynamicCommand</link> | ( <link linkend="prod2">id</link> ( <link linkend="prod15">nonReserved</link> | <EQ> ) <link linkend="prod8">storedProcedure</link> ) )</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod35" xreflabel="translateCriteria"/>translateCriteria</para></entry>
<entry align="left" valign="top"><para>::=
@@ -487,7 +487,7 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod34" xreflabel="dynamicCommand"/>dynamicCommand</para></entry>
<entry align="left" valign="top"><para>::=
-( <EXECUTE> | <EXEC> ) <STRING> <link linkend="prod17">expression</link> ( <AS> <link linkend="prod14">createElementsWithTypes</link> ( <INTO> <link linkend="prod2">id</link> )? )? ( <USING> <link linkend="prod36">setClauseList</link> )? ( <UPDATE> ( ( <INTEGERVAL> ) | ( <STAR> ) ) )?</para></entry></row>
+( <EXECUTE> | <EXEC> ) ( ( <STRING> | <IMMEDIATE> ) )? <link linkend="prod17">expression</link> ( <AS> <link linkend="prod14">createElementsWithTypes</link> ( <INTO> <link linkend="prod2">id</link> )? )? ( <USING> <link linkend="prod36">setClauseList</link> )? ( <UPDATE> ( ( <INTEGERVAL> ) | ( <STAR> ) ) )?</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod36" xreflabel="setClauseList"/>setClauseList</para></entry>
<entry align="left" valign="top"><para>::=
@@ -585,35 +585,39 @@
<entry align="left" valign="top"><para>::=
<XMLAGG> <LPAREN> <link linkend="prod17">expression</link> ( <link linkend="prod46">orderby</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod60" xreflabel="aggregateSymbol"/>aggregateSymbol</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod60" xreflabel="textAgg"/>textAgg</para></entry>
<entry align="left" valign="top"><para>::=
+<link linkend="prod15">nonReserved</link> <LPAREN> <FOR> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* ( <ID> <link linkend="prod61">charVal</link> )? ( ( <ID> <link linkend="prod61">charVal</link> ) )? ( <ID> )? ( ( <ID> <link linkend="prod2">id</link> ) )? ( <link linkend="prod46">orderby</link> )? <RPAREN></para></entry></row>
+<row>
+<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="aggregateSymbol"/>aggregateSymbol</para></entry>
+<entry align="left" valign="top"><para>::=
( ( <link linkend="prod15">nonReserved</link> <LPAREN> <STAR> <RPAREN> ) | ( ( <link linkend="prod15">nonReserved</link> | <ANY> | <SOME> ) <LPAREN> ( <DISTINCT> | <ALL> )? <link linkend="prod17">expression</link> <RPAREN> ) )</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod52" xreflabel="from"/>from</para></entry>
<entry align="left" valign="top"><para>::=
-<FROM> ( <link linkend="prod61">tableReference</link> ( <COMMA> <link linkend="prod61">tableReference</link> )* )</para></entry></row>
+<FROM> ( <link linkend="prod63">tableReference</link> ( <COMMA> <link linkend="prod63">tableReference</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod61" xreflabel="tableReference"/>tableReference</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="tableReference"/>tableReference</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <LBRACE> <link linkend="prod15">nonReserved</link> <link linkend="prod62">joinedTable</link> <RBRACE> ) | <link linkend="prod62">joinedTable</link> )</para></entry></row>
+( ( <LBRACE> <link linkend="prod15">nonReserved</link> <link linkend="prod64">joinedTable</link> <RBRACE> ) | <link linkend="prod64">joinedTable</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="joinedTable"/>joinedTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod64" xreflabel="joinedTable"/>joinedTable</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod63">tablePrimary</link> ( ( <link linkend="prod64">crossJoin</link> | <link linkend="prod65">qualifiedJoin</link> ) )*</para></entry></row>
+<link linkend="prod65">tablePrimary</link> ( ( <link linkend="prod66">crossJoin</link> | <link linkend="prod67">qualifiedJoin</link> ) )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod64" xreflabel="crossJoin"/>crossJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="crossJoin"/>crossJoin</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <CROSS> | <UNION> ) <JOIN> <link linkend="prod63">tablePrimary</link> )</para></entry></row>
+( ( <CROSS> | <UNION> ) <JOIN> <link linkend="prod65">tablePrimary</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod65" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod67" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
<entry align="left" valign="top"><para>::=
-( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> ( <OUTER> )? ) | ( <FULL> ( <OUTER> )? ) | <INNER> )? <JOIN> <link linkend="prod61">tableReference</link> <ON> <link linkend="prod29">criteria</link> )</para></entry></row>
+( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> ( <OUTER> )? ) | ( <FULL> ( <OUTER> )? ) | <INNER> )? <JOIN> <link linkend="prod63">tableReference</link> <ON> <link linkend="prod29">criteria</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="tablePrimary"/>tablePrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod65" xreflabel="tablePrimary"/>tablePrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod66">textTable</link> | <link linkend="prod67">xmlTable</link> | <link linkend="prod68">unaryFromClause</link> | <link linkend="prod69">subqueryFromClause</link> | ( <LPAREN> <link linkend="prod62">joinedTable</link> <RPAREN> ) ) ( ( <MAKEDEP> ) | ( <MAKENOTDEP> ) )?</para></entry></row>
+( <link linkend="prod68">textTable</link> | <link linkend="prod69">xmlTable</link> | <link linkend="prod70">unaryFromClause</link> | <link linkend="prod71">subqueryFromClause</link> | ( <LPAREN> <link linkend="prod64">joinedTable</link> <RPAREN> ) ) ( ( <MAKEDEP> ) | ( <MAKENOTDEP> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
<entry align="left" valign="top"><para>::=
<XMLSERIALIZE> <LPAREN> ( <link linkend="prod15">nonReserved</link> )? <link linkend="prod17">expression</link> ( <AS> ( <STRING> | <VARCHAR> | <CLOB> ) )? <RPAREN></para></entry></row>
<row>
@@ -621,35 +625,35 @@
<entry align="left" valign="top"><para>::=
<ID></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="textTable"/>textTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="textTable"/>textTable</para></entry>
<entry align="left" valign="top"><para>::=
-<ID> <LPAREN> <link linkend="prod17">expression</link> <link linkend="prod15">nonReserved</link> <link linkend="prod71">textColumn</link> ( <COMMA> <link linkend="prod71">textColumn</link> )* ( <ID> <link linkend="prod72">charVal</link> )? ( ( <ESCAPE> <link linkend="prod72">charVal</link> ) | ( <ID> <link linkend="prod72">charVal</link> ) )? ( <ID> ( <link linkend="prod73">intVal</link> )? )? ( <ID> <link linkend="prod73">intVal</link> )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<ID> <LPAREN> <link linkend="prod17">expression</link> <link linkend="prod15">nonReserved</link> <link linkend="prod73">textColumn</link> ( <COMMA> <link linkend="prod73">textColumn</link> )* ( <ID> <link linkend="prod61">charVal</link> )? ( ( <ESCAPE> <link linkend="prod61">charVal</link> ) | ( <ID> <link linkend="prod61">charVal</link> ) )? ( <ID> ( <link linkend="prod74">intVal</link> )? )? ( <ID> <link linkend="prod74">intVal</link> )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="textColumn"/>textColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="textColumn"/>textColumn</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> <link linkend="prod32">dataType</link> ( <ID> <link linkend="prod73">intVal</link> )?</para></entry></row>
+<link linkend="prod2">id</link> <link linkend="prod32">dataType</link> ( <ID> <link linkend="prod74">intVal</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="xmlQuery"/>xmlQuery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="xmlQuery"/>xmlQuery</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLQUERY> <LPAREN> ( <link linkend="prod75">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* )? ( ( <NULL> | <link linkend="prod15">nonReserved</link> ) <ON> <link linkend="prod15">nonReserved</link> )? <RPAREN></para></entry></row>
+<XMLQUERY> <LPAREN> ( <link linkend="prod76">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* )? ( ( <NULL> | <link linkend="prod15">nonReserved</link> ) <ON> <link linkend="prod15">nonReserved</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod67" xreflabel="xmlTable"/>xmlTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="xmlTable"/>xmlTable</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLTABLE> <LPAREN> ( <link linkend="prod75">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* )? ( <ID> <link linkend="prod76">xmlColumn</link> ( <COMMA> <link linkend="prod76">xmlColumn</link> )* )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<XMLTABLE> <LPAREN> ( <link linkend="prod76">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* )? ( <ID> <link linkend="prod77">xmlColumn</link> ( <COMMA> <link linkend="prod77">xmlColumn</link> )* )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="xmlColumn"/>xmlColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="xmlColumn"/>xmlColumn</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod2">id</link> ( ( <FOR> <link linkend="prod15">nonReserved</link> ) | ( <link linkend="prod32">dataType</link> ( <DEFAULT_KEYWORD> <link linkend="prod17">expression</link> )? ( <link linkend="prod15">nonReserved</link> <link linkend="prod1">stringVal</link> )? ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="intVal"/>intVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="intVal"/>intVal</para></entry>
<entry align="left" valign="top"><para>::=
<INTEGERVAL></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
<entry align="left" valign="top"><para>::=
( <TABLE> )? <LPAREN> ( <link linkend="prod7">queryExpression</link> | <link linkend="prod8">storedProcedure</link> ) <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
<entry align="left" valign="top"><para>::=
( <ID> ( ( <AS> )? <link linkend="prod2">id</link> )? )</para></entry></row>
<row>
@@ -659,69 +663,69 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod29" xreflabel="criteria"/>criteria</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod77">compoundCritOr</link></para></entry></row>
+<link linkend="prod78">compoundCritOr</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod78">compoundCritAnd</link> ( <OR> <link linkend="prod78">compoundCritAnd</link> )*</para></entry></row>
+<link linkend="prod79">compoundCritAnd</link> ( <OR> <link linkend="prod79">compoundCritAnd</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod79">notCrit</link> ( <AND> <link linkend="prod79">notCrit</link> )*</para></entry></row>
+<link linkend="prod80">notCrit</link> ( <AND> <link linkend="prod80">notCrit</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="notCrit"/>notCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="notCrit"/>notCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <link linkend="prod80">booleanPrimary</link></para></entry></row>
+( <NOT> )? <link linkend="prod81">booleanPrimary</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="booleanPrimary"/>booleanPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="booleanPrimary"/>booleanPrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod35">translateCriteria</link> | ( <link linkend="prod81">commonValueExpression</link> ( ( <link linkend="prod82">betweenCrit</link> | <link linkend="prod83">matchCrit</link> | <link linkend="prod84">setCrit</link> | <link linkend="prod85">isNullCrit</link> | <link linkend="prod86">subqueryCompareCriteria</link> | <link linkend="prod87">compareCrit</link> ) )? ) | <link linkend="prod88">existsCriteria</link> | <link linkend="prod31">hasCriteria</link> )</para></entry></row>
+( <link linkend="prod35">translateCriteria</link> | ( <link linkend="prod82">commonValueExpression</link> ( ( <link linkend="prod83">betweenCrit</link> | <link linkend="prod84">matchCrit</link> | <link linkend="prod85">setCrit</link> | <link linkend="prod86">isNullCrit</link> | <link linkend="prod87">subqueryCompareCriteria</link> | <link linkend="prod88">compareCrit</link> ) )? ) | <link linkend="prod89">existsCriteria</link> | <link linkend="prod31">hasCriteria</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="operator"/>operator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod90" 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="prod87" xreflabel="compareCrit"/>compareCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="compareCrit"/>compareCrit</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod89">operator</link> <link linkend="prod81">commonValueExpression</link></para></entry></row>
+<link linkend="prod90">operator</link> <link linkend="prod82">commonValueExpression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod90" xreflabel="subquery"/>subquery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="subquery"/>subquery</para></entry>
<entry align="left" valign="top"><para>::=
-<LPAREN> ( <link linkend="prod7">queryExpression</link> | <link linkend="prod8">storedProcedure</link> ) <RPAREN></para></entry></row>
+<LPAREN> ( <link linkend="prod7">queryExpression</link> | ( <link linkend="prod8">storedProcedure</link> ) ) <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod86" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod87" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod89">operator</link> ( <ANY> | <SOME> | <ALL> ) <link linkend="prod90">subquery</link></para></entry></row>
+<link linkend="prod90">operator</link> ( <ANY> | <SOME> | <ALL> ) <link linkend="prod91">subquery</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod83" xreflabel="matchCrit"/>matchCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod84" xreflabel="matchCrit"/>matchCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <LIKE> <link linkend="prod81">commonValueExpression</link> ( <ESCAPE> <link linkend="prod72">charVal</link> | ( <LBRACE> <ESCAPE> <link linkend="prod72">charVal</link> <RBRACE> ) )?</para></entry></row>
+( <NOT> )? <LIKE> <link linkend="prod82">commonValueExpression</link> ( <ESCAPE> <link linkend="prod61">charVal</link> | ( <LBRACE> <ESCAPE> <link linkend="prod61">charVal</link> <RBRACE> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="charVal"/>charVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod61" 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="prod82" xreflabel="betweenCrit"/>betweenCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod83" xreflabel="betweenCrit"/>betweenCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <BETWEEN> <link linkend="prod81">commonValueExpression</link> <AND> <link linkend="prod81">commonValueExpression</link></para></entry></row>
+( <NOT> )? <BETWEEN> <link linkend="prod82">commonValueExpression</link> <AND> <link linkend="prod82">commonValueExpression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="isNullCrit"/>isNullCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod86" 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="prod84" xreflabel="setCrit"/>setCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="setCrit"/>setCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <IN> ( ( <link linkend="prod90">subquery</link> ) | ( <LPAREN> <link linkend="prod81">commonValueExpression</link> ( <COMMA> <link linkend="prod81">commonValueExpression</link> )* <RPAREN> ) )</para></entry></row>
+( <NOT> )? <IN> ( ( <link linkend="prod91">subquery</link> ) | ( <LPAREN> <link linkend="prod82">commonValueExpression</link> ( <COMMA> <link linkend="prod82">commonValueExpression</link> )* <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="existsCriteria"/>existsCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="existsCriteria"/>existsCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<EXISTS> <link linkend="prod90">subquery</link></para></entry></row>
+<EXISTS> <link linkend="prod91">subquery</link></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod53" xreflabel="groupBy"/>groupBy</para></entry>
<entry align="left" valign="top"><para>::=
-<GROUP> <BY> ( <link linkend="prod91">groupByItem</link> ( <COMMA> <link linkend="prod91">groupByItem</link> )* )</para></entry></row>
+<GROUP> <BY> ( <link linkend="prod92">groupByItem</link> ( <COMMA> <link linkend="prod92">groupByItem</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="groupByItem"/>groupByItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod92" xreflabel="groupByItem"/>groupByItem</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod17">expression</link></para></entry></row>
<row>
@@ -731,13 +735,13 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod46" xreflabel="orderby"/>orderby</para></entry>
<entry align="left" valign="top"><para>::=
-<ORDER> <BY> <link linkend="prod92">sortSpecification</link> ( <COMMA> <link linkend="prod92">sortSpecification</link> )*</para></entry></row>
+<ORDER> <BY> <link linkend="prod93">sortSpecification</link> ( <COMMA> <link linkend="prod93">sortSpecification</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod92" xreflabel="sortSpecification"/>sortSpecification</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="sortSpecification"/>sortSpecification</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod93">sortKey</link> ( <ASC> | <DESC> )? ( <link linkend="prod15">nonReserved</link> <link linkend="prod15">nonReserved</link> )?</para></entry></row>
+<link linkend="prod94">sortKey</link> ( <ASC> | <DESC> )? ( <link linkend="prod15">nonReserved</link> <link linkend="prod15">nonReserved</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="sortKey"/>sortKey</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="sortKey"/>sortKey</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod17">expression</link></para></entry></row>
<row>
@@ -753,71 +757,71 @@
<entry align="left" valign="top"><para>::=
<link linkend="prod29">criteria</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="commonValueExpression"/>commonValueExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod82" xreflabel="commonValueExpression"/>commonValueExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod94">plusExpression</link> ( <CONCAT_OP> <link linkend="prod94">plusExpression</link> )* )</para></entry></row>
+( <link linkend="prod95">plusExpression</link> ( <CONCAT_OP> <link linkend="prod95">plusExpression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="plusExpression"/>plusExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod95" xreflabel="plusExpression"/>plusExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod95">timesExpression</link> ( <link linkend="prod96">plusOperator</link> <link linkend="prod95">timesExpression</link> )* )</para></entry></row>
+( <link linkend="prod96">timesExpression</link> ( <link linkend="prod97">plusOperator</link> <link linkend="prod96">timesExpression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="plusOperator"/>plusOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod97" 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="prod95" xreflabel="timesExpression"/>timesExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="timesExpression"/>timesExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod97">valueExpressionPrimary</link> ( <link linkend="prod98">timesOperator</link> <link linkend="prod97">valueExpressionPrimary</link> )* )</para></entry></row>
+( <link linkend="prod98">valueExpressionPrimary</link> ( <link linkend="prod99">timesOperator</link> <link linkend="prod98">valueExpressionPrimary</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="timesOperator"/>timesOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod99" 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="prod97" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <QMARK> | <link linkend="prod99">literal</link> | ( <LBRACE> <link linkend="prod15">nonReserved</link> <link linkend="prod100">function</link> <RBRACE> ) | ( <link linkend="prod60">aggregateSymbol</link> ) | ( <link linkend="prod60">aggregateSymbol</link> ) | ( <link linkend="prod60">aggregateSymbol</link> ) | ( <link linkend="prod59">xmlAgg</link> ) | ( <link linkend="prod100">function</link> ) | ( <ID> ) | <link linkend="prod90">subquery</link> | ( <LPAREN> <link linkend="prod17">expression</link> <RPAREN> ) | <link linkend="prod101">searchedCaseExpression</link> | <link linkend="prod102">caseExpression</link> )</para></entry></row>
+( <QMARK> | <link linkend="prod100">literal</link> | ( <LBRACE> <link linkend="prod15">nonReserved</link> <link linkend="prod101">function</link> <RBRACE> ) | ( <link linkend="prod60">textAgg</link> ) | ( <link linkend="prod62">aggregateSymbol</link> ) | ( <link linkend="prod62">aggregateSymbol</link> ) | ( <link linkend="prod62">aggregateSymbol</link> ) | ( <link linkend="prod59">xmlAgg</link> ) | ( <link linkend="prod101">function</link> ) | ( <ID> ) | <link linkend="prod91">subquery</link> | ( <LPAREN> <link linkend="prod17">expression</link> <RPAREN> ) | <link linkend="prod102">searchedCaseExpression</link> | <link linkend="prod103">caseExpression</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod102" xreflabel="caseExpression"/>caseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="caseExpression"/>caseExpression</para></entry>
<entry align="left" valign="top"><para>::=
<CASE> <link linkend="prod17">expression</link> ( <WHEN> <link linkend="prod17">expression</link> <THEN> <link linkend="prod17">expression</link> )+ ( <ELSE> <link linkend="prod17">expression</link> )? <END></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="searchedCaseExpression"/>searchedCaseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod102" xreflabel="searchedCaseExpression"/>searchedCaseExpression</para></entry>
<entry align="left" valign="top"><para>::=
<CASE> ( <WHEN> <link linkend="prod29">criteria</link> <THEN> <link linkend="prod17">expression</link> )+ ( <ELSE> <link linkend="prod17">expression</link> )? <END></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod100" xreflabel="function"/>function</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="function"/>function</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <CONVERT> <LPAREN> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod32">dataType</link> <RPAREN> ) | ( <CAST> <LPAREN> <link linkend="prod17">expression</link> <AS> <link linkend="prod32">dataType</link> <RPAREN> ) | ( <link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod103">stringConstant</link> <RPAREN> ) | ( <link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod104">intervalType</link> <COMMA> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod17">expression</link> <RPAREN> ) | <link linkend="prod105">queryString</link> | ( ( <LEFT> | <RIGHT> | <CHAR> | <USER> | <YEAR> | <MONTH> | <HOUR> | <MINUTE> | <SECOND> | <XMLCONCAT> | <XMLCOMMENT> ) <LPAREN> ( <link linkend="prod17">expression</link> !
( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | ( ( <INSERT> ) <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | ( ( <TRANSLATE> ) <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | <link linkend="prod106">xmlParse</link> | <link linkend="prod107">xmlElement</link> | ( <XMLPI> <LPAREN> ( <ID> <link linkend="prod108">idExpression</link> | <link linkend="prod108">idExpression</link> ) ( <COMMA> <link linkend="prod17">expression</link> )? <RPAREN> ) | <link linkend="prod109">xmlForest</link> | <link linkend="prod70">xmlSerialize</link> | <link linkend="prod74">xmlQuery</link> | ( <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )*!
)? <RPAREN> ) )</para></entry></row>
+( ( <CONVERT> <LPAREN> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod32">dataType</link> <RPAREN> ) | ( <CAST> <LPAREN> <link linkend="prod17">expression</link> <AS> <link linkend="prod32">dataType</link> <RPAREN> ) | ( <link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod104">stringConstant</link> <RPAREN> ) | ( <link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod105">intervalType</link> <COMMA> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod17">expression</link> <RPAREN> ) | <link linkend="prod106">queryString</link> | ( ( <LEFT> | <RIGHT> | <CHAR> | <USER> | <YEAR> | <MONTH> | <HOUR> | <MINUTE> | <SECOND> | <XMLCONCAT> | <XMLCOMMENT> ) <LPAREN> ( <link linkend="prod17">expression</link> !
( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | ( ( <INSERT> ) <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | ( ( <TRANSLATE> ) <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | <link linkend="prod107">xmlParse</link> | <link linkend="prod108">xmlElement</link> | ( <XMLPI> <LPAREN> ( <ID> <link linkend="prod109">idExpression</link> | <link linkend="prod109">idExpression</link> ) ( <COMMA> <link linkend="prod17">expression</link> )? <RPAREN> ) | <link linkend="prod110">xmlForest</link> | <link linkend="prod72">xmlSerialize</link> | <link linkend="prod75">xmlQuery</link> | ( <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )*!
)? <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="stringConstant"/>stringConstant</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod104" 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="prod106" xreflabel="xmlParse"/>xmlParse</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod107" xreflabel="xmlParse"/>xmlParse</para></entry>
<entry align="left" valign="top"><para>::=
<XMLPARSE> <LPAREN> <link linkend="prod15">nonReserved</link> <link linkend="prod17">expression</link> ( <link linkend="prod15">nonReserved</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod105" xreflabel="queryString"/>queryString</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod106" xreflabel="queryString"/>queryString</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod107" xreflabel="xmlElement"/>xmlElement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod108" 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="prod75">xmlNamespaces</link> )? ( <COMMA> <link linkend="prod110">xmlAttributes</link> )? ( <COMMA> <link linkend="prod17">expression</link> )* <RPAREN></para></entry></row>
+<XMLELEMENT> <LPAREN> ( <ID> <link linkend="prod2">id</link> | <link linkend="prod2">id</link> ) ( <COMMA> <link linkend="prod76">xmlNamespaces</link> )? ( <COMMA> <link linkend="prod111">xmlAttributes</link> )? ( <COMMA> <link linkend="prod17">expression</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod110" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod111" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
<entry align="left" valign="top"><para>::=
<XMLATTRIBUTES> <LPAREN> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod109" xreflabel="xmlForest"/>xmlForest</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod110" xreflabel="xmlForest"/>xmlForest</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLFOREST> <LPAREN> ( <link linkend="prod75">xmlNamespaces</link> <COMMA> )? <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* <RPAREN></para></entry></row>
+<XMLFOREST> <LPAREN> ( <link linkend="prod76">xmlNamespaces</link> <COMMA> )? <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLNAMESPACES> <LPAREN> <link linkend="prod111">namespaceItem</link> ( <COMMA> <link linkend="prod111">namespaceItem</link> )* <RPAREN></para></entry></row>
+<XMLNAMESPACES> <LPAREN> <link linkend="prod112">namespaceItem</link> ( <COMMA> <link linkend="prod112">namespaceItem</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod111" xreflabel="namespaceItem"/>namespaceItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod112" 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>
@@ -829,7 +833,7 @@
<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="prod108" xreflabel="idExpression"/>idExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod109" xreflabel="idExpression"/>idExpression</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod2">id</link></para></entry></row>
<row>
@@ -837,11 +841,11 @@
<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="prod104" xreflabel="intervalType"/>intervalType</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod105" xreflabel="intervalType"/>intervalType</para></entry>
<entry align="left" valign="top"><para>::=
( <link linkend="prod15">nonReserved</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod99" xreflabel="literal"/>literal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod100" 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: branches/7.2.x/documentation/reference/src/main/docbook/en-US/content/procedures.xml
===================================================================
--- branches/7.2.x/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2010-11-05 14:43:05 UTC (rev 2712)
+++ branches/7.2.x/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2010-11-05 15:02:21 UTC (rev 2713)
@@ -552,11 +552,14 @@
</section>
<section>
<title>TRANSLATE CRITERIA</title>
- <para>You can use the TRANSLATE CRITERIA clause to convert the criteria from the user application’s SQL command into the form required to interact with the target source or view tables. The TRANSLATE CRITERIA statement uses the SELECT transformation to infer the column mapping. This clause evaluates to a translated criteria that is evaluated in the context of a command.</para>
+ <warning><para>TRANSLATE CRITERIA has been deprecated. An alternative approach to update procedures will be introduced in a subsequent version.</para></warning>
+ <para>You can use the TRANSLATE CRITERIA clause to convert the criteria from the user application’s SQL command into the form required to interact with the target source or view tables. The TRANSLATE CRITERIA statement uses the SELECT transformation to infer the column mapping. This clause evaluates to a translated criteria that is evaluated in the context of a command.
+ You can use these mappings either to replace the default mappings generated from the SELECT transformation or to specify a reverse expression when a virtual column is defined by an expression.</para>
<para>
Usage:
<synopsis>TRANSLATE [criteria operator] CRITERIA [ON (column list)] [WITH (mapping list)]</synopsis>
</para>
+ <para>If there is no user criteria, then the translated criteria is always treated as TRUE.</para>
<itemizedlist>
<para>Syntax Rules</para>
<listitem>
@@ -571,9 +574,16 @@
<para>The columns in a TRANSLATE CRITERIA ON clause always refer to view columns.
</para>
</listitem>
+ <listitem>
+ <para>The WITH clause always has items with form <elem> = <expression> where the left hand side must refer to a view column.
+ </para>
+ </listitem>
+ <listitem>
+ <para>If the WITH clause or a specific mapping is not specified, then a mapping is created based on the SELECT clause of the SELECT transformation (the view column gets mapped to expression in SELECT clause at same position).
+ </para>
+ </listitem>
</itemizedlist>
- <para>You can use these mappings either to replace the default mappings generated from the SELECT transformation or to specify a reverse expression when a virtual column is defined by an expression.</para>
- <para>Some samples of the HAS TRANSLATE clause:</para>
+ <para>Some samples of TRANSLATE CRITERIA:</para>
<informaltable>
<tgroup cols="2">
<colspec colwidth="1*"/>
@@ -600,18 +610,7 @@
</tbody>
</tgroup>
</informaltable>
- <para>
- The TRANSLATE CRITERIA, ON clause always refers to view columns.
- The WITH clause always has items with form <elem> = <expression>,
- where the <elem> is a view column and the <expression>
- specifies what that view column should be
- replaced with when TRANSLATE CRITERIA translates the view
- criteria (from UPDATE or DELETE) into a physical criteria in
- the command. By default, a mapping is created based on the
- SELECT clause of the SELECT transformation (view column
- gets mapped to expression in SELECT clause at same
- position).
- </para>
+ <note><para>If a specific predicate type or column set is specified by TRANSALATE CRITERIA, but the user criteria has predicates that do not match, then an exception will be thrown.</para></note>
</section>
</section>
<section>
Modified: tags/teiid-parent-7.2.0.Final/build/kits/jboss-container/teiid-releasenotes.html
===================================================================
--- tags/teiid-parent-7.2.0.Final/build/kits/jboss-container/teiid-releasenotes.html 2010-11-05 14:43:05 UTC (rev 2712)
+++ tags/teiid-parent-7.2.0.Final/build/kits/jboss-container/teiid-releasenotes.html 2010-11-05 15:02:21 UTC (rev 2713)
@@ -165,7 +165,293 @@
<h2><a name="Details">Detailed Release Notes</a></h2>
Detailed Release Notes - Teiid - Version ${project.version}
+<h2> Bug
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1168'>TEIID-1168</a>] - Query Testing - CLOB, LOB, etc is returning an object reference in CTC rather than returning the content of the object (content is needed for validation purposes)
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1218'>TEIID-1218</a>] - AdminShell help for changeVDBConnectionType is "Cancel a request"
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1219'>TEIID-1219</a>] - Metadata for XML Document models not being showing up after Admin API mergeVDB() call.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1221'>TEIID-1221</a>] - Query Processing Uncorrelated subquery evaluation - Not saving state causing re-execution without closing prior connection
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1222'>TEIID-1222</a>] - Partially qualified unambiguous virtual procedure problem resolving inputs.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1223'>TEIID-1223</a>] - Cache hint cannot be specified against set queries or callable statements
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1224'>TEIID-1224</a>] - Stored Procedures - java exception being thrown relating to pre-evaluation of uncorrelated subqueries
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1229'>TEIID-1229</a>] - In predicate issue with temp table composite key
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1230'>TEIID-1230</a>] - TeiidDriver is used instead of MetaMatrixDriver during connection to the MM Server
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1232'>TEIID-1232</a>] - Cannot create LDAP connection.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1233'>TEIID-1233</a>] - VDB version from the file name is not being picked up
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1234'>TEIID-1234</a>] - Parameter ordering is incorrect
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1235'>TEIID-1235</a>] - The bind address 0.0.0.0 is always resolving to localhost
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1240'>TEIID-1240</a>] - Exception with false join predicate
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1243'>TEIID-1243</a>] - teiid admin console plugin cannot show dynamic VDB content
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1244'>TEIID-1244</a>] - JBoss AS admin console troubles with text based connection factory
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1245'>TEIID-1245</a>] - exception trying to get a test connection through admin console to a text file based connection factory
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1247'>TEIID-1247</a>] - Passthrough Authentication on JDBC Connection not switching identities
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1249'>TEIID-1249</a>] - VDB scoped cached results not checked for access
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1251'>TEIID-1251</a>] - Fully qualified order by key can resolve incorrectly
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1254'>TEIID-1254</a>] - Detect session scoped temp tables in setting determism
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1256'>TEIID-1256</a>] - Clear caches when VDB with same version re-deployed
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1257'>TEIID-1257</a>] - Teiid creates multiple "buffer" directories
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1266'>TEIID-1266</a>] - jboss-log4j.xml - after modified by installing teiid - references org.apache.log4j.RollingFileAppender
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1269'>TEIID-1269</a>] - Closing connections to Teiid may result in a stack trace written to the server's log file
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1270'>TEIID-1270</a>] - adminshell - getAdmin() returns: ERROR org.teiid.core.TeiidRuntimeException: toString
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1274'>TEIID-1274</a>] - NPE during the execution of query when a wrong JNDI name supplied
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1276'>TEIID-1276</a>] - Updating an existing VDB via copy-paste in the filesystem causes ConcurrentModificationException
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1278'>TEIID-1278</a>] - vdb-deployer.xsd should have a description for translators.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1279'>TEIID-1279</a>] - Got an Unexpected exception when starting the server, after digging, I think the message should have indicated that the UDF requires static methods
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1283'>TEIID-1283</a>] - Race condition results in bad resultset for query on union
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1286'>TEIID-1286</a>] - Invalid Link in Teiid Developer Guide
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1289'>TEIID-1289</a>] - hasNext causes indexing issue
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1290'>TEIID-1290</a>] - Application name is null in JOPR
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1292'>TEIID-1292</a>] - Invalid Fetch Size using JDBC ODBC bridge to query MS Access via a Teiid VDB
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1297'>TEIID-1297</a>] - Missing message key when no result for executed system procedure: "Request.no_result_set" in: org.teiid.query.i18n
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1298'>TEIID-1298</a>] - invalid links in Teiid Client Developer Guide
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1302'>TEIID-1302</a>] - Selecting data from salesforce results in a IndexOutOfBoundsException
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1303'>TEIID-1303</a>] - Sybase issues
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1305'>TEIID-1305</a>] - Problem executing an ORDER BY against the ModeShape data source
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1307'>TEIID-1307</a>] - Client Dev Guide - repeated property in tables for Driver & Datasource
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1310'>TEIID-1310</a>] - SYS.VDBResources table is set as a non-system-owned table - should be isSystem = true
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1313'>TEIID-1313</a>] - Possible duplicate rows at when using nested table feature. When using TABLE or XMLTABLE or TEXTTABLE.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1315'>TEIID-1315</a>] - Teiid misinterprets relative location of XSD when doc model is in different folder: causes Unknown Query Metadata error
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1316'>TEIID-1316</a>] - XML encoding of a blob is not properly detected.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1317'>TEIID-1317</a>] - Limit keyword causes class cast exception running query against DB2 translator
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1318'>TEIID-1318</a>] - Adminshell: Accessing VDB version results in exception: Connector worker process failed for atomic-request
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1319'>TEIID-1319</a>] - Incorrect format for postgres timestamp to string
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1320'>TEIID-1320</a>] - Oracle datetime columns as timestamp have invalid tostring
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1321'>TEIID-1321</a>] - Error message when connecting to missing VDB is misleading (makes it sound like it exists)
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1322'>TEIID-1322</a>] - Stored procedures are not pre-evaluating scalar subquery arguments.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1325'>TEIID-1325</a>] - Teiid Admin connection re-connect fails every time
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1333'>TEIID-1333</a>] - Dynamic VDB can be set to ACTIVE, even when the data source is not available.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1334'>TEIID-1334</a>] - java.net.URISyntaxException starting jboss-soa-p-5 (i.e. with Teiid) installed on LINUX under folder name containing spaces
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1336'>TEIID-1336</a>] - EDS adminshell - clearCache() having no effect
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1337'>TEIID-1337</a>] - Cached costing needs cleared more completely
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1340'>TEIID-1340</a>] - Unable to delete vdb using JOPR, throws exception
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1342'>TEIID-1342</a>] - NPE in RuntimeEngineDeployer Starting JBossAS
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1345'>TEIID-1345</a>] - VDB with even one data role requires all users to have at least one mappable role
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1346'>TEIID-1346</a>] - Rewrite is wrong with translate criteria and no user criteria
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1347'>TEIID-1347</a>] - Configuration Update for Teiid Engine Should Look for compName Instead of Name
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1348'>TEIID-1348</a>] - Internal Mat View of table with Primary Key gets duplicate key error when populating temporary mat view table
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1156'>TEIID-1156</a>] - Description fields for UDF Model objects are limited to 128 characters
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1205'>TEIID-1205</a>] - First deployment of weather example fails to query and requires restarting JBoss AS (weather does not exist)
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1232'>TEIID-1232</a>] - Cannot create LDAP connection.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1247'>TEIID-1247</a>] - Passthrough Authentication on JDBC Connection not switching identities
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1295'>TEIID-1295</a>] - Multisource updates affecting multiple sources returns wrong update count
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1296'>TEIID-1296</a>] - Multi-Source may not be wrapping the transactional scope correctly
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1308'>TEIID-1308</a>] - Multi-source vdb table's metadata does not report the implicit "source_name" column
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1309'>TEIID-1309</a>] - The engine should validate against using an insert with a query expression in a multisource scenario.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1346'>TEIID-1346</a>] - Rewrite is wrong with translate criteria and no user criteria
+</li>
+</ul>
+
+<h2> Feature Request
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-951'>TEIID-951</a>] - Add/Verify ipv6 readiness
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-982'>TEIID-982</a>] - Materialized Views should be treated as a service in MMx through the Console
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1030'>TEIID-1030</a>] - Provide ability to retrieve a VDB archive from ModeShape repository and then deploy the Teiid runtime.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1103'>TEIID-1103</a>] - Add ability to configure transport settings for the ws resource adapter
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1104'>TEIID-1104</a>] - Teiid engine will be clusterable.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1106'>TEIID-1106</a>] - Create the ModeShape connector to be used with the ModeShape jdbc driver to access the ModeShape JCR repository
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1138'>TEIID-1138</a>] - Add support to call binary web services
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1196'>TEIID-1196</a>] - Support Deployment of VDB via a URL in Jopr Plugin
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1204'>TEIID-1204</a>] - Re-enable failover support
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1209'>TEIID-1209</a>] - Add cache usage statistics
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1210'>TEIID-1210</a>] - Add support for non-unique indexes for materialized view tables
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1212'>TEIID-1212</a>] - Add replication for internal materialized view tables
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1213'>TEIID-1213</a>] - Procedure results should be cachable as well
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1215'>TEIID-1215</a>] - Add a performance tuning chapter to the admin guide
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1220'>TEIID-1220</a>] - Change Data Roles from a Global (server-wide) to a VDB-based property
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1225'>TEIID-1225</a>] - Reuse procedure plans
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1263'>TEIID-1263</a>] - Reference Guide Section 10.3.1.2 - No sample code for "periodically checking the result object for new warnings"
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-962'>TEIID-962</a>] - Create new system function to dump temp table contents to file.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1171'>TEIID-1171</a>] - Add support for the with clause
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1237'>TEIID-1237</a>] - Stored procedures should allow for better use of inout/out/return values
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1250'>TEIID-1250</a>] - Allow usage of select expressions in order by, even with group by/distinct.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1273'>TEIID-1273</a>] - Add support for using source_name with multisource INSERT Statements
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1288'>TEIID-1288</a>] - Add support for explicit table syntax
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1306'>TEIID-1306</a>] - Add support for JSON data sources (JSON translator, JSON-to-table mapping functions).
+</li>
+</ul>
+<h2> Patch
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1285'>TEIID-1285</a>] - fixes from Data Services Platform version of the Teiid Developer Guide
+</li>
+</ul>
+
+<h2> Quality Risk
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-950'>TEIID-950</a>] - Add ability to control access to environment variables
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1027'>TEIID-1027</a>] - Clean up i18n files
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1202'>TEIID-1202</a>] - JOPR Console VDB View has couple usability issues
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1211'>TEIID-1211</a>] - Refine load-balancing support in AS
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1214'>TEIID-1214</a>] - The translators displayed in the JOPR console need a full description, not just Teiid Translator, because a 2 char. name (i.e., ws) with no description isn't clear
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1231'>TEIID-1231</a>] - Model visibility should only refer to whether entries are in metadata
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1238'>TEIID-1238</a>] - WS Connector config/configname should not be specific to ws-security
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1246'>TEIID-1246</a>] - Determine access strategy for SYS/pg_catalog
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1252'>TEIID-1252</a>] - LOB handling strategy issues
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1259'>TEIID-1259</a>] - Multi-line error message is difficult to follow
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1260'>TEIID-1260</a>] - All admin traffic should be encrypted by default
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1261'>TEIID-1261</a>] - Add documentation of transaction considerations
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1264'>TEIID-1264</a>] - Make "build" project manage all the responsibility of the assemblies
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1265'>TEIID-1265</a>] - Document the replacement approach for credentail maps
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1271'>TEIID-1271</a>] - Add more logging for pushdown decisions
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1272'>TEIID-1272</a>] - Join planning should make better decisions when mixing costing and unknown values
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1293'>TEIID-1293</a>] - subqueries should not allow select into
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1294'>TEIID-1294</a>] - procedure validation issues
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1312'>TEIID-1312</a>] - Default stored procedure params should not show up in string form
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-885'>TEIID-885</a>] - CTC vdbs should use appropriate capabilities
+</li>
+</ul>
+
+<h2> Task
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1236'>TEIID-1236</a>] - Provide sample DS.xml files for all the data sources that Teiid supports.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1255'>TEIID-1255</a>] - Add documentation about usage of Multi-Source
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1258'>TEIID-1258</a>] - fixed formatting of translators.xml in reference guide
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1262'>TEIID-1262</a>] - Update Netty to 3.2.1 in the 7.1.x branch
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1277'>TEIID-1277</a>] - Add documentation/article about how to use the "import web-service as relational model" generated model.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1284'>TEIID-1284</a>] - Need more detail in the Admin guide regarding data roles
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1299'>TEIID-1299</a>] - Remove un-implemented Admin API methods.
+</li>
+</ul>
+
+<h2> Thirdparty Change
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1314'>TEIID-1314</a>] - BigDecimal values truncated with jConnect 6.05
+</li>
+</ul>
+
+<h2> Sub-task
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1148'>TEIID-1148</a>] - Require the use of CXF
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1228'>TEIID-1228</a>] - Add JOPR data role display
+</li>
+</ul>
+
<h2><a name="Documentation">Documentation and Help</a></h2>
The <a href="http://www.jboss.org/teiid/">Teiid community project</a> is hosted on jboss.org.
Modified: tags/teiid-parent-7.2.0.Final/documentation/reference/src/main/docbook/en-US/content/grammar.xml
===================================================================
--- tags/teiid-parent-7.2.0.Final/documentation/reference/src/main/docbook/en-US/content/grammar.xml 2010-11-05 14:43:05 UTC (rev 2712)
+++ tags/teiid-parent-7.2.0.Final/documentation/reference/src/main/docbook/en-US/content/grammar.xml 2010-11-05 15:02:21 UTC (rev 2713)
@@ -427,7 +427,7 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod22" xreflabel="delimitedStatement"/>delimitedStatement</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod23">sqlStatement</link> | <link linkend="prod16">errorStatement</link> | <link linkend="prod24">assignStatement</link> | <link linkend="prod25">declareStatement</link> | <link linkend="prod26">continueStatement</link> | <link linkend="prod27">breakStatement</link> ) <SEMICOLON></para></entry></row>
+( <link linkend="prod23">assignStatement</link> | <link linkend="prod24">sqlStatement</link> | <link linkend="prod16">errorStatement</link> | <link linkend="prod25">declareStatement</link> | <link linkend="prod26">continueStatement</link> | <link linkend="prod27">breakStatement</link> ) <SEMICOLON></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod28" xreflabel="block"/>block</para></entry>
<entry align="left" valign="top"><para>::=
@@ -463,19 +463,19 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod25" xreflabel="declareStatement"/>declareStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<DECLARE> <link linkend="prod32">dataType</link> <link linkend="prod2">id</link> ( <EQ> <link linkend="prod33">assignStatementOperand</link> )?</para></entry></row>
+<DECLARE> <link linkend="prod32">dataType</link> <link linkend="prod2">id</link> ( ( <link linkend="prod15">nonReserved</link> | <EQ> ) <link linkend="prod33">assignStatementOperand</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod24" xreflabel="assignStatement"/>assignStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod23" xreflabel="assignStatement"/>assignStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> <EQ> <link linkend="prod33">assignStatementOperand</link></para></entry></row>
+<link linkend="prod2">id</link> ( <link linkend="prod15">nonReserved</link> | <EQ> ) <link linkend="prod33">assignStatementOperand</link></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod33" xreflabel="assignStatementOperand"/>assignStatementOperand</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <link linkend="prod9">insert</link> ) | <link linkend="prod10">update</link> | <link linkend="prod11">delete</link> | <link linkend="prod8">storedProcedure</link> | ( <link linkend="prod17">expression</link> ) | <link linkend="prod7">queryExpression</link> )</para></entry></row>
+( ( <link linkend="prod9">insert</link> ) | <link linkend="prod10">update</link> | <link linkend="prod11">delete</link> | ( <link linkend="prod17">expression</link> ) | <link linkend="prod7">queryExpression</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod23" xreflabel="sqlStatement"/>sqlStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod24" xreflabel="sqlStatement"/>sqlStatement</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <link linkend="prod34">dynamicCommand</link> ) | <link linkend="prod5">userCommand</link> )</para></entry></row>
+( ( <link linkend="prod5">userCommand</link> ) | <link linkend="prod34">dynamicCommand</link> | ( <link linkend="prod2">id</link> ( <link linkend="prod15">nonReserved</link> | <EQ> ) <link linkend="prod8">storedProcedure</link> ) )</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod35" xreflabel="translateCriteria"/>translateCriteria</para></entry>
<entry align="left" valign="top"><para>::=
@@ -487,7 +487,7 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod34" xreflabel="dynamicCommand"/>dynamicCommand</para></entry>
<entry align="left" valign="top"><para>::=
-( <EXECUTE> | <EXEC> ) <STRING> <link linkend="prod17">expression</link> ( <AS> <link linkend="prod14">createElementsWithTypes</link> ( <INTO> <link linkend="prod2">id</link> )? )? ( <USING> <link linkend="prod36">setClauseList</link> )? ( <UPDATE> ( ( <INTEGERVAL> ) | ( <STAR> ) ) )?</para></entry></row>
+( <EXECUTE> | <EXEC> ) ( ( <STRING> | <IMMEDIATE> ) )? <link linkend="prod17">expression</link> ( <AS> <link linkend="prod14">createElementsWithTypes</link> ( <INTO> <link linkend="prod2">id</link> )? )? ( <USING> <link linkend="prod36">setClauseList</link> )? ( <UPDATE> ( ( <INTEGERVAL> ) | ( <STAR> ) ) )?</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod36" xreflabel="setClauseList"/>setClauseList</para></entry>
<entry align="left" valign="top"><para>::=
@@ -585,35 +585,39 @@
<entry align="left" valign="top"><para>::=
<XMLAGG> <LPAREN> <link linkend="prod17">expression</link> ( <link linkend="prod46">orderby</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod60" xreflabel="aggregateSymbol"/>aggregateSymbol</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod60" xreflabel="textAgg"/>textAgg</para></entry>
<entry align="left" valign="top"><para>::=
+<link linkend="prod15">nonReserved</link> <LPAREN> <FOR> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* ( <ID> <link linkend="prod61">charVal</link> )? ( ( <ID> <link linkend="prod61">charVal</link> ) )? ( <ID> )? ( ( <ID> <link linkend="prod2">id</link> ) )? ( <link linkend="prod46">orderby</link> )? <RPAREN></para></entry></row>
+<row>
+<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="aggregateSymbol"/>aggregateSymbol</para></entry>
+<entry align="left" valign="top"><para>::=
( ( <link linkend="prod15">nonReserved</link> <LPAREN> <STAR> <RPAREN> ) | ( ( <link linkend="prod15">nonReserved</link> | <ANY> | <SOME> ) <LPAREN> ( <DISTINCT> | <ALL> )? <link linkend="prod17">expression</link> <RPAREN> ) )</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod52" xreflabel="from"/>from</para></entry>
<entry align="left" valign="top"><para>::=
-<FROM> ( <link linkend="prod61">tableReference</link> ( <COMMA> <link linkend="prod61">tableReference</link> )* )</para></entry></row>
+<FROM> ( <link linkend="prod63">tableReference</link> ( <COMMA> <link linkend="prod63">tableReference</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod61" xreflabel="tableReference"/>tableReference</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="tableReference"/>tableReference</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <LBRACE> <link linkend="prod15">nonReserved</link> <link linkend="prod62">joinedTable</link> <RBRACE> ) | <link linkend="prod62">joinedTable</link> )</para></entry></row>
+( ( <LBRACE> <link linkend="prod15">nonReserved</link> <link linkend="prod64">joinedTable</link> <RBRACE> ) | <link linkend="prod64">joinedTable</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="joinedTable"/>joinedTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod64" xreflabel="joinedTable"/>joinedTable</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod63">tablePrimary</link> ( ( <link linkend="prod64">crossJoin</link> | <link linkend="prod65">qualifiedJoin</link> ) )*</para></entry></row>
+<link linkend="prod65">tablePrimary</link> ( ( <link linkend="prod66">crossJoin</link> | <link linkend="prod67">qualifiedJoin</link> ) )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod64" xreflabel="crossJoin"/>crossJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="crossJoin"/>crossJoin</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <CROSS> | <UNION> ) <JOIN> <link linkend="prod63">tablePrimary</link> )</para></entry></row>
+( ( <CROSS> | <UNION> ) <JOIN> <link linkend="prod65">tablePrimary</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod65" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod67" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
<entry align="left" valign="top"><para>::=
-( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> ( <OUTER> )? ) | ( <FULL> ( <OUTER> )? ) | <INNER> )? <JOIN> <link linkend="prod61">tableReference</link> <ON> <link linkend="prod29">criteria</link> )</para></entry></row>
+( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> ( <OUTER> )? ) | ( <FULL> ( <OUTER> )? ) | <INNER> )? <JOIN> <link linkend="prod63">tableReference</link> <ON> <link linkend="prod29">criteria</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="tablePrimary"/>tablePrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod65" xreflabel="tablePrimary"/>tablePrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod66">textTable</link> | <link linkend="prod67">xmlTable</link> | <link linkend="prod68">unaryFromClause</link> | <link linkend="prod69">subqueryFromClause</link> | ( <LPAREN> <link linkend="prod62">joinedTable</link> <RPAREN> ) ) ( ( <MAKEDEP> ) | ( <MAKENOTDEP> ) )?</para></entry></row>
+( <link linkend="prod68">textTable</link> | <link linkend="prod69">xmlTable</link> | <link linkend="prod70">unaryFromClause</link> | <link linkend="prod71">subqueryFromClause</link> | ( <LPAREN> <link linkend="prod64">joinedTable</link> <RPAREN> ) ) ( ( <MAKEDEP> ) | ( <MAKENOTDEP> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
<entry align="left" valign="top"><para>::=
<XMLSERIALIZE> <LPAREN> ( <link linkend="prod15">nonReserved</link> )? <link linkend="prod17">expression</link> ( <AS> ( <STRING> | <VARCHAR> | <CLOB> ) )? <RPAREN></para></entry></row>
<row>
@@ -621,35 +625,35 @@
<entry align="left" valign="top"><para>::=
<ID></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="textTable"/>textTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="textTable"/>textTable</para></entry>
<entry align="left" valign="top"><para>::=
-<ID> <LPAREN> <link linkend="prod17">expression</link> <link linkend="prod15">nonReserved</link> <link linkend="prod71">textColumn</link> ( <COMMA> <link linkend="prod71">textColumn</link> )* ( <ID> <link linkend="prod72">charVal</link> )? ( ( <ESCAPE> <link linkend="prod72">charVal</link> ) | ( <ID> <link linkend="prod72">charVal</link> ) )? ( <ID> ( <link linkend="prod73">intVal</link> )? )? ( <ID> <link linkend="prod73">intVal</link> )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<ID> <LPAREN> <link linkend="prod17">expression</link> <link linkend="prod15">nonReserved</link> <link linkend="prod73">textColumn</link> ( <COMMA> <link linkend="prod73">textColumn</link> )* ( <ID> <link linkend="prod61">charVal</link> )? ( ( <ESCAPE> <link linkend="prod61">charVal</link> ) | ( <ID> <link linkend="prod61">charVal</link> ) )? ( <ID> ( <link linkend="prod74">intVal</link> )? )? ( <ID> <link linkend="prod74">intVal</link> )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="textColumn"/>textColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="textColumn"/>textColumn</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> <link linkend="prod32">dataType</link> ( <ID> <link linkend="prod73">intVal</link> )?</para></entry></row>
+<link linkend="prod2">id</link> <link linkend="prod32">dataType</link> ( <ID> <link linkend="prod74">intVal</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="xmlQuery"/>xmlQuery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="xmlQuery"/>xmlQuery</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLQUERY> <LPAREN> ( <link linkend="prod75">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* )? ( ( <NULL> | <link linkend="prod15">nonReserved</link> ) <ON> <link linkend="prod15">nonReserved</link> )? <RPAREN></para></entry></row>
+<XMLQUERY> <LPAREN> ( <link linkend="prod76">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* )? ( ( <NULL> | <link linkend="prod15">nonReserved</link> ) <ON> <link linkend="prod15">nonReserved</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod67" xreflabel="xmlTable"/>xmlTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="xmlTable"/>xmlTable</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLTABLE> <LPAREN> ( <link linkend="prod75">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* )? ( <ID> <link linkend="prod76">xmlColumn</link> ( <COMMA> <link linkend="prod76">xmlColumn</link> )* )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<XMLTABLE> <LPAREN> ( <link linkend="prod76">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* )? ( <ID> <link linkend="prod77">xmlColumn</link> ( <COMMA> <link linkend="prod77">xmlColumn</link> )* )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="xmlColumn"/>xmlColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="xmlColumn"/>xmlColumn</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod2">id</link> ( ( <FOR> <link linkend="prod15">nonReserved</link> ) | ( <link linkend="prod32">dataType</link> ( <DEFAULT_KEYWORD> <link linkend="prod17">expression</link> )? ( <link linkend="prod15">nonReserved</link> <link linkend="prod1">stringVal</link> )? ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="intVal"/>intVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="intVal"/>intVal</para></entry>
<entry align="left" valign="top"><para>::=
<INTEGERVAL></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
<entry align="left" valign="top"><para>::=
( <TABLE> )? <LPAREN> ( <link linkend="prod7">queryExpression</link> | <link linkend="prod8">storedProcedure</link> ) <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
<entry align="left" valign="top"><para>::=
( <ID> ( ( <AS> )? <link linkend="prod2">id</link> )? )</para></entry></row>
<row>
@@ -659,69 +663,69 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod29" xreflabel="criteria"/>criteria</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod77">compoundCritOr</link></para></entry></row>
+<link linkend="prod78">compoundCritOr</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod78">compoundCritAnd</link> ( <OR> <link linkend="prod78">compoundCritAnd</link> )*</para></entry></row>
+<link linkend="prod79">compoundCritAnd</link> ( <OR> <link linkend="prod79">compoundCritAnd</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod79">notCrit</link> ( <AND> <link linkend="prod79">notCrit</link> )*</para></entry></row>
+<link linkend="prod80">notCrit</link> ( <AND> <link linkend="prod80">notCrit</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="notCrit"/>notCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="notCrit"/>notCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <link linkend="prod80">booleanPrimary</link></para></entry></row>
+( <NOT> )? <link linkend="prod81">booleanPrimary</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="booleanPrimary"/>booleanPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="booleanPrimary"/>booleanPrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod35">translateCriteria</link> | ( <link linkend="prod81">commonValueExpression</link> ( ( <link linkend="prod82">betweenCrit</link> | <link linkend="prod83">matchCrit</link> | <link linkend="prod84">setCrit</link> | <link linkend="prod85">isNullCrit</link> | <link linkend="prod86">subqueryCompareCriteria</link> | <link linkend="prod87">compareCrit</link> ) )? ) | <link linkend="prod88">existsCriteria</link> | <link linkend="prod31">hasCriteria</link> )</para></entry></row>
+( <link linkend="prod35">translateCriteria</link> | ( <link linkend="prod82">commonValueExpression</link> ( ( <link linkend="prod83">betweenCrit</link> | <link linkend="prod84">matchCrit</link> | <link linkend="prod85">setCrit</link> | <link linkend="prod86">isNullCrit</link> | <link linkend="prod87">subqueryCompareCriteria</link> | <link linkend="prod88">compareCrit</link> ) )? ) | <link linkend="prod89">existsCriteria</link> | <link linkend="prod31">hasCriteria</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="operator"/>operator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod90" 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="prod87" xreflabel="compareCrit"/>compareCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="compareCrit"/>compareCrit</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod89">operator</link> <link linkend="prod81">commonValueExpression</link></para></entry></row>
+<link linkend="prod90">operator</link> <link linkend="prod82">commonValueExpression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod90" xreflabel="subquery"/>subquery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="subquery"/>subquery</para></entry>
<entry align="left" valign="top"><para>::=
-<LPAREN> ( <link linkend="prod7">queryExpression</link> | <link linkend="prod8">storedProcedure</link> ) <RPAREN></para></entry></row>
+<LPAREN> ( <link linkend="prod7">queryExpression</link> | ( <link linkend="prod8">storedProcedure</link> ) ) <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod86" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod87" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod89">operator</link> ( <ANY> | <SOME> | <ALL> ) <link linkend="prod90">subquery</link></para></entry></row>
+<link linkend="prod90">operator</link> ( <ANY> | <SOME> | <ALL> ) <link linkend="prod91">subquery</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod83" xreflabel="matchCrit"/>matchCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod84" xreflabel="matchCrit"/>matchCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <LIKE> <link linkend="prod81">commonValueExpression</link> ( <ESCAPE> <link linkend="prod72">charVal</link> | ( <LBRACE> <ESCAPE> <link linkend="prod72">charVal</link> <RBRACE> ) )?</para></entry></row>
+( <NOT> )? <LIKE> <link linkend="prod82">commonValueExpression</link> ( <ESCAPE> <link linkend="prod61">charVal</link> | ( <LBRACE> <ESCAPE> <link linkend="prod61">charVal</link> <RBRACE> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="charVal"/>charVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod61" 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="prod82" xreflabel="betweenCrit"/>betweenCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod83" xreflabel="betweenCrit"/>betweenCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <BETWEEN> <link linkend="prod81">commonValueExpression</link> <AND> <link linkend="prod81">commonValueExpression</link></para></entry></row>
+( <NOT> )? <BETWEEN> <link linkend="prod82">commonValueExpression</link> <AND> <link linkend="prod82">commonValueExpression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="isNullCrit"/>isNullCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod86" 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="prod84" xreflabel="setCrit"/>setCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="setCrit"/>setCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <IN> ( ( <link linkend="prod90">subquery</link> ) | ( <LPAREN> <link linkend="prod81">commonValueExpression</link> ( <COMMA> <link linkend="prod81">commonValueExpression</link> )* <RPAREN> ) )</para></entry></row>
+( <NOT> )? <IN> ( ( <link linkend="prod91">subquery</link> ) | ( <LPAREN> <link linkend="prod82">commonValueExpression</link> ( <COMMA> <link linkend="prod82">commonValueExpression</link> )* <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="existsCriteria"/>existsCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="existsCriteria"/>existsCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<EXISTS> <link linkend="prod90">subquery</link></para></entry></row>
+<EXISTS> <link linkend="prod91">subquery</link></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod53" xreflabel="groupBy"/>groupBy</para></entry>
<entry align="left" valign="top"><para>::=
-<GROUP> <BY> ( <link linkend="prod91">groupByItem</link> ( <COMMA> <link linkend="prod91">groupByItem</link> )* )</para></entry></row>
+<GROUP> <BY> ( <link linkend="prod92">groupByItem</link> ( <COMMA> <link linkend="prod92">groupByItem</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="groupByItem"/>groupByItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod92" xreflabel="groupByItem"/>groupByItem</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod17">expression</link></para></entry></row>
<row>
@@ -731,13 +735,13 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod46" xreflabel="orderby"/>orderby</para></entry>
<entry align="left" valign="top"><para>::=
-<ORDER> <BY> <link linkend="prod92">sortSpecification</link> ( <COMMA> <link linkend="prod92">sortSpecification</link> )*</para></entry></row>
+<ORDER> <BY> <link linkend="prod93">sortSpecification</link> ( <COMMA> <link linkend="prod93">sortSpecification</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod92" xreflabel="sortSpecification"/>sortSpecification</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="sortSpecification"/>sortSpecification</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod93">sortKey</link> ( <ASC> | <DESC> )? ( <link linkend="prod15">nonReserved</link> <link linkend="prod15">nonReserved</link> )?</para></entry></row>
+<link linkend="prod94">sortKey</link> ( <ASC> | <DESC> )? ( <link linkend="prod15">nonReserved</link> <link linkend="prod15">nonReserved</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="sortKey"/>sortKey</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="sortKey"/>sortKey</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod17">expression</link></para></entry></row>
<row>
@@ -753,71 +757,71 @@
<entry align="left" valign="top"><para>::=
<link linkend="prod29">criteria</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="commonValueExpression"/>commonValueExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod82" xreflabel="commonValueExpression"/>commonValueExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod94">plusExpression</link> ( <CONCAT_OP> <link linkend="prod94">plusExpression</link> )* )</para></entry></row>
+( <link linkend="prod95">plusExpression</link> ( <CONCAT_OP> <link linkend="prod95">plusExpression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="plusExpression"/>plusExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod95" xreflabel="plusExpression"/>plusExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod95">timesExpression</link> ( <link linkend="prod96">plusOperator</link> <link linkend="prod95">timesExpression</link> )* )</para></entry></row>
+( <link linkend="prod96">timesExpression</link> ( <link linkend="prod97">plusOperator</link> <link linkend="prod96">timesExpression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="plusOperator"/>plusOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod97" 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="prod95" xreflabel="timesExpression"/>timesExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="timesExpression"/>timesExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod97">valueExpressionPrimary</link> ( <link linkend="prod98">timesOperator</link> <link linkend="prod97">valueExpressionPrimary</link> )* )</para></entry></row>
+( <link linkend="prod98">valueExpressionPrimary</link> ( <link linkend="prod99">timesOperator</link> <link linkend="prod98">valueExpressionPrimary</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="timesOperator"/>timesOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod99" 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="prod97" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <QMARK> | <link linkend="prod99">literal</link> | ( <LBRACE> <link linkend="prod15">nonReserved</link> <link linkend="prod100">function</link> <RBRACE> ) | ( <link linkend="prod60">aggregateSymbol</link> ) | ( <link linkend="prod60">aggregateSymbol</link> ) | ( <link linkend="prod60">aggregateSymbol</link> ) | ( <link linkend="prod59">xmlAgg</link> ) | ( <link linkend="prod100">function</link> ) | ( <ID> ) | <link linkend="prod90">subquery</link> | ( <LPAREN> <link linkend="prod17">expression</link> <RPAREN> ) | <link linkend="prod101">searchedCaseExpression</link> | <link linkend="prod102">caseExpression</link> )</para></entry></row>
+( <QMARK> | <link linkend="prod100">literal</link> | ( <LBRACE> <link linkend="prod15">nonReserved</link> <link linkend="prod101">function</link> <RBRACE> ) | ( <link linkend="prod60">textAgg</link> ) | ( <link linkend="prod62">aggregateSymbol</link> ) | ( <link linkend="prod62">aggregateSymbol</link> ) | ( <link linkend="prod62">aggregateSymbol</link> ) | ( <link linkend="prod59">xmlAgg</link> ) | ( <link linkend="prod101">function</link> ) | ( <ID> ) | <link linkend="prod91">subquery</link> | ( <LPAREN> <link linkend="prod17">expression</link> <RPAREN> ) | <link linkend="prod102">searchedCaseExpression</link> | <link linkend="prod103">caseExpression</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod102" xreflabel="caseExpression"/>caseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="caseExpression"/>caseExpression</para></entry>
<entry align="left" valign="top"><para>::=
<CASE> <link linkend="prod17">expression</link> ( <WHEN> <link linkend="prod17">expression</link> <THEN> <link linkend="prod17">expression</link> )+ ( <ELSE> <link linkend="prod17">expression</link> )? <END></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="searchedCaseExpression"/>searchedCaseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod102" xreflabel="searchedCaseExpression"/>searchedCaseExpression</para></entry>
<entry align="left" valign="top"><para>::=
<CASE> ( <WHEN> <link linkend="prod29">criteria</link> <THEN> <link linkend="prod17">expression</link> )+ ( <ELSE> <link linkend="prod17">expression</link> )? <END></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod100" xreflabel="function"/>function</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="function"/>function</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <CONVERT> <LPAREN> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod32">dataType</link> <RPAREN> ) | ( <CAST> <LPAREN> <link linkend="prod17">expression</link> <AS> <link linkend="prod32">dataType</link> <RPAREN> ) | ( <link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod103">stringConstant</link> <RPAREN> ) | ( <link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod104">intervalType</link> <COMMA> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod17">expression</link> <RPAREN> ) | <link linkend="prod105">queryString</link> | ( ( <LEFT> | <RIGHT> | <CHAR> | <USER> | <YEAR> | <MONTH> | <HOUR> | <MINUTE> | <SECOND> | <XMLCONCAT> | <XMLCOMMENT> ) <LPAREN> ( <link linkend="prod17">expression</link> !
( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | ( ( <INSERT> ) <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | ( ( <TRANSLATE> ) <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | <link linkend="prod106">xmlParse</link> | <link linkend="prod107">xmlElement</link> | ( <XMLPI> <LPAREN> ( <ID> <link linkend="prod108">idExpression</link> | <link linkend="prod108">idExpression</link> ) ( <COMMA> <link linkend="prod17">expression</link> )? <RPAREN> ) | <link linkend="prod109">xmlForest</link> | <link linkend="prod70">xmlSerialize</link> | <link linkend="prod74">xmlQuery</link> | ( <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )*!
)? <RPAREN> ) )</para></entry></row>
+( ( <CONVERT> <LPAREN> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod32">dataType</link> <RPAREN> ) | ( <CAST> <LPAREN> <link linkend="prod17">expression</link> <AS> <link linkend="prod32">dataType</link> <RPAREN> ) | ( <link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod104">stringConstant</link> <RPAREN> ) | ( <link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod105">intervalType</link> <COMMA> <link linkend="prod17">expression</link> <COMMA> <link linkend="prod17">expression</link> <RPAREN> ) | <link linkend="prod106">queryString</link> | ( ( <LEFT> | <RIGHT> | <CHAR> | <USER> | <YEAR> | <MONTH> | <HOUR> | <MINUTE> | <SECOND> | <XMLCONCAT> | <XMLCOMMENT> ) <LPAREN> ( <link linkend="prod17">expression</link> !
( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | ( ( <INSERT> ) <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | ( ( <TRANSLATE> ) <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )* )? <RPAREN> ) | <link linkend="prod107">xmlParse</link> | <link linkend="prod108">xmlElement</link> | ( <XMLPI> <LPAREN> ( <ID> <link linkend="prod109">idExpression</link> | <link linkend="prod109">idExpression</link> ) ( <COMMA> <link linkend="prod17">expression</link> )? <RPAREN> ) | <link linkend="prod110">xmlForest</link> | <link linkend="prod72">xmlSerialize</link> | <link linkend="prod75">xmlQuery</link> | ( <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod17">expression</link> )*!
)? <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="stringConstant"/>stringConstant</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod104" 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="prod106" xreflabel="xmlParse"/>xmlParse</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod107" xreflabel="xmlParse"/>xmlParse</para></entry>
<entry align="left" valign="top"><para>::=
<XMLPARSE> <LPAREN> <link linkend="prod15">nonReserved</link> <link linkend="prod17">expression</link> ( <link linkend="prod15">nonReserved</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod105" xreflabel="queryString"/>queryString</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod106" xreflabel="queryString"/>queryString</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod15">nonReserved</link> <LPAREN> <link linkend="prod17">expression</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod107" xreflabel="xmlElement"/>xmlElement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod108" 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="prod75">xmlNamespaces</link> )? ( <COMMA> <link linkend="prod110">xmlAttributes</link> )? ( <COMMA> <link linkend="prod17">expression</link> )* <RPAREN></para></entry></row>
+<XMLELEMENT> <LPAREN> ( <ID> <link linkend="prod2">id</link> | <link linkend="prod2">id</link> ) ( <COMMA> <link linkend="prod76">xmlNamespaces</link> )? ( <COMMA> <link linkend="prod111">xmlAttributes</link> )? ( <COMMA> <link linkend="prod17">expression</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod110" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod111" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
<entry align="left" valign="top"><para>::=
<XMLATTRIBUTES> <LPAREN> <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod109" xreflabel="xmlForest"/>xmlForest</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod110" xreflabel="xmlForest"/>xmlForest</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLFOREST> <LPAREN> ( <link linkend="prod75">xmlNamespaces</link> <COMMA> )? <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* <RPAREN></para></entry></row>
+<XMLFOREST> <LPAREN> ( <link linkend="prod76">xmlNamespaces</link> <COMMA> )? <link linkend="prod58">derivedColumn</link> ( <COMMA> <link linkend="prod58">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLNAMESPACES> <LPAREN> <link linkend="prod111">namespaceItem</link> ( <COMMA> <link linkend="prod111">namespaceItem</link> )* <RPAREN></para></entry></row>
+<XMLNAMESPACES> <LPAREN> <link linkend="prod112">namespaceItem</link> ( <COMMA> <link linkend="prod112">namespaceItem</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod111" xreflabel="namespaceItem"/>namespaceItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod112" 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>
@@ -829,7 +833,7 @@
<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="prod108" xreflabel="idExpression"/>idExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod109" xreflabel="idExpression"/>idExpression</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod2">id</link></para></entry></row>
<row>
@@ -837,11 +841,11 @@
<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="prod104" xreflabel="intervalType"/>intervalType</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod105" xreflabel="intervalType"/>intervalType</para></entry>
<entry align="left" valign="top"><para>::=
( <link linkend="prod15">nonReserved</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod99" xreflabel="literal"/>literal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod100" 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: tags/teiid-parent-7.2.0.Final/documentation/reference/src/main/docbook/en-US/content/procedures.xml
===================================================================
--- tags/teiid-parent-7.2.0.Final/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2010-11-05 14:43:05 UTC (rev 2712)
+++ tags/teiid-parent-7.2.0.Final/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2010-11-05 15:02:21 UTC (rev 2713)
@@ -552,11 +552,14 @@
</section>
<section>
<title>TRANSLATE CRITERIA</title>
- <para>You can use the TRANSLATE CRITERIA clause to convert the criteria from the user application’s SQL command into the form required to interact with the target source or view tables. The TRANSLATE CRITERIA statement uses the SELECT transformation to infer the column mapping. This clause evaluates to a translated criteria that is evaluated in the context of a command.</para>
+ <warning><para>TRANSLATE CRITERIA has been deprecated. An alternative approach to update procedures will be introduced in a subsequent version.</para></warning>
+ <para>You can use the TRANSLATE CRITERIA clause to convert the criteria from the user application’s SQL command into the form required to interact with the target source or view tables. The TRANSLATE CRITERIA statement uses the SELECT transformation to infer the column mapping. This clause evaluates to a translated criteria that is evaluated in the context of a command.
+ You can use these mappings either to replace the default mappings generated from the SELECT transformation or to specify a reverse expression when a virtual column is defined by an expression.</para>
<para>
Usage:
<synopsis>TRANSLATE [criteria operator] CRITERIA [ON (column list)] [WITH (mapping list)]</synopsis>
</para>
+ <para>If there is no user criteria, then the translated criteria is always treated as TRUE.</para>
<itemizedlist>
<para>Syntax Rules</para>
<listitem>
@@ -571,9 +574,16 @@
<para>The columns in a TRANSLATE CRITERIA ON clause always refer to view columns.
</para>
</listitem>
+ <listitem>
+ <para>The WITH clause always has items with form <elem> = <expression> where the left hand side must refer to a view column.
+ </para>
+ </listitem>
+ <listitem>
+ <para>If the WITH clause or a specific mapping is not specified, then a mapping is created based on the SELECT clause of the SELECT transformation (the view column gets mapped to expression in SELECT clause at same position).
+ </para>
+ </listitem>
</itemizedlist>
- <para>You can use these mappings either to replace the default mappings generated from the SELECT transformation or to specify a reverse expression when a virtual column is defined by an expression.</para>
- <para>Some samples of the HAS TRANSLATE clause:</para>
+ <para>Some samples of TRANSLATE CRITERIA:</para>
<informaltable>
<tgroup cols="2">
<colspec colwidth="1*"/>
@@ -600,18 +610,7 @@
</tbody>
</tgroup>
</informaltable>
- <para>
- The TRANSLATE CRITERIA, ON clause always refers to view columns.
- The WITH clause always has items with form <elem> = <expression>,
- where the <elem> is a view column and the <expression>
- specifies what that view column should be
- replaced with when TRANSLATE CRITERIA translates the view
- criteria (from UPDATE or DELETE) into a physical criteria in
- the command. By default, a mapping is created based on the
- SELECT clause of the SELECT transformation (view column
- gets mapped to expression in SELECT clause at same
- position).
- </para>
+ <note><para>If a specific predicate type or column set is specified by TRANSALATE CRITERIA, but the user criteria has predicates that do not match, then an exception will be thrown.</para></note>
</section>
</section>
<section>
14 years, 1 month
teiid SVN: r2712 - branches/7.1.x/documentation/reference/src/main/docbook/en-US/content.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-11-05 10:43:05 -0400 (Fri, 05 Nov 2010)
New Revision: 2712
Modified:
branches/7.1.x/documentation/reference/src/main/docbook/en-US/content/procedures.xml
Log:
TEIID-1346 refining translate criteria logic and adding logging to cache usage.
Modified: branches/7.1.x/documentation/reference/src/main/docbook/en-US/content/procedures.xml
===================================================================
--- branches/7.1.x/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2010-11-05 14:41:51 UTC (rev 2711)
+++ branches/7.1.x/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2010-11-05 14:43:05 UTC (rev 2712)
@@ -548,11 +548,14 @@
</section>
<section>
<title>TRANSLATE CRITERIA</title>
- <para>You can use the TRANSLATE CRITERIA clause to convert the criteria from the user application’s SQL command into the form required to interact with the target source or view tables. The TRANSLATE CRITERIA statement uses the SELECT transformation to infer the column mapping. This clause evaluates to a translated criteria that is evaluated in the context of a command.</para>
+ <warning><para>TRANSLATE CRITERIA has been deprecated. An alternative approach to update procedures will be introduced in a subsequent version.</para></warning>
+ <para>You can use the TRANSLATE CRITERIA clause to convert the criteria from the user application’s SQL command into the form required to interact with the target source or view tables. The TRANSLATE CRITERIA statement uses the SELECT transformation to infer the column mapping. This clause evaluates to a translated criteria that is evaluated in the context of a command.
+ You can use these mappings either to replace the default mappings generated from the SELECT transformation or to specify a reverse expression when a virtual column is defined by an expression.</para>
<para>
Usage:
<synopsis>TRANSLATE [criteria operator] CRITERIA [ON (column list)] [WITH (mapping list)]</synopsis>
</para>
+ <para>If there is no user criteria, then the translated criteria is always treated as TRUE.</para>
<itemizedlist>
<para>Syntax Rules</para>
<listitem>
@@ -567,9 +570,16 @@
<para>The columns in a TRANSLATE CRITERIA ON clause always refer to view columns.
</para>
</listitem>
+ <listitem>
+ <para>The WITH clause always has items with form <elem> = <expression> where the left hand side must refer to a view column.
+ </para>
+ </listitem>
+ <listitem>
+ <para>If the WITH clause or a specific mapping is not specified, then a mapping is created based on the SELECT clause of the SELECT transformation (the view column gets mapped to expression in SELECT clause at same position).
+ </para>
+ </listitem>
</itemizedlist>
- <para>You can use these mappings either to replace the default mappings generated from the SELECT transformation or to specify a reverse expression when a virtual column is defined by an expression.</para>
- <para>Some samples of the HAS TRANSLATE clause:</para>
+ <para>Some samples of TRANSLATE CRITERIA:</para>
<informaltable>
<tgroup cols="2">
<colspec colwidth="1*"/>
@@ -596,18 +606,7 @@
</tbody>
</tgroup>
</informaltable>
- <para>
- The TRANSLATE CRITERIA, ON clause always refers to view columns.
- The WITH clause always has items with form <elem> = <expression>,
- where the <elem> is a view column and the <expression>
- specifies what that view column should be
- replaced with when TRANSLATE CRITERIA translates the view
- criteria (from UPDATE or DELETE) into a physical criteria in
- the command. By default, a mapping is created based on the
- SELECT clause of the SELECT transformation (view column
- gets mapped to expression in SELECT clause at same
- position).
- </para>
+ <note><para>If a specific predicate type or column set is specified by TRANSALATE CRITERIA, but the user criteria has predicates that do not match, then an exception will be thrown.</para></note>
</section>
</section>
<section>
14 years, 1 month
teiid SVN: r2711 - branches/7.1.x/build/kits/jboss-container.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-11-05 10:41:51 -0400 (Fri, 05 Nov 2010)
New Revision: 2711
Modified:
branches/7.1.x/build/kits/jboss-container/teiid-releasenotes.html
Log:
TEIID-1346 refining translate criteria logic and adding logging to cache usage.
Modified: branches/7.1.x/build/kits/jboss-container/teiid-releasenotes.html
===================================================================
--- branches/7.1.x/build/kits/jboss-container/teiid-releasenotes.html 2010-11-05 03:21:13 UTC (rev 2710)
+++ branches/7.1.x/build/kits/jboss-container/teiid-releasenotes.html 2010-11-05 14:41:51 UTC (rev 2711)
@@ -40,6 +40,7 @@
<h2><a name="Compatibility">Compatibility Issues</a></h2>
<ul>
+ <li>TRANSLATE CRITERIA has been deprecated. An alternative approach to update procedures will be introduced in a subsequent version.
<li>Support for named parameter syntax using param=value has been deprecated, since it is ambiguous with a comparison predicate boolean value expression. param<b>=></b>value should be used instead.
</ul>
<h4>from 7.1</h4>
14 years, 1 month