teiid SVN: r3140 - in trunk: adminshell and 37 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-05-03 12:43:26 -0400 (Tue, 03 May 2011)
New Revision: 3140
Modified:
trunk/adminshell/pom.xml
trunk/api/pom.xml
trunk/build/pom.xml
trunk/cache-jbosscache/pom.xml
trunk/client-jdk15/pom.xml
trunk/client/pom.xml
trunk/common-core/pom.xml
trunk/connectors/connector-file/pom.xml
trunk/connectors/connector-ldap/pom.xml
trunk/connectors/connector-salesforce/pom.xml
trunk/connectors/connector-ws/pom.xml
trunk/connectors/pom.xml
trunk/connectors/salesforce-api/pom.xml
trunk/connectors/sandbox/pom.xml
trunk/connectors/sandbox/translator-yahoo/pom.xml
trunk/connectors/translator-file/pom.xml
trunk/connectors/translator-jdbc/pom.xml
trunk/connectors/translator-ldap/pom.xml
trunk/connectors/translator-loopback/pom.xml
trunk/connectors/translator-olap/pom.xml
trunk/connectors/translator-salesforce/pom.xml
trunk/connectors/translator-ws/pom.xml
trunk/console/pom.xml
trunk/documentation/admin-guide/pom.xml
trunk/documentation/caching-guide/pom.xml
trunk/documentation/client-developers-guide/pom.xml
trunk/documentation/developer-guide/pom.xml
trunk/documentation/pom.xml
trunk/documentation/quick-start-example/pom.xml
trunk/documentation/reference/pom.xml
trunk/engine/pom.xml
trunk/hibernate-dialect/pom.xml
trunk/jboss-integration/pom.xml
trunk/metadata/pom.xml
trunk/pom.xml
trunk/runtime/pom.xml
trunk/test-integration/common/pom.xml
trunk/test-integration/db/pom.xml
trunk/test-integration/pom.xml
Log:
[maven-release-plugin] prepare release teiid-parent-7.4.0.CR1
Modified: trunk/adminshell/pom.xml
===================================================================
--- trunk/adminshell/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/adminshell/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>teiid-adminshell</artifactId>
Modified: trunk/api/pom.xml
===================================================================
--- trunk/api/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/api/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>teiid-api</artifactId>
Modified: trunk/build/pom.xml
===================================================================
--- trunk/build/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/build/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>teiid</artifactId>
Modified: trunk/cache-jbosscache/pom.xml
===================================================================
--- trunk/cache-jbosscache/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/cache-jbosscache/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>teiid-cache-jbosscache</artifactId>
Modified: trunk/client/pom.xml
===================================================================
--- trunk/client/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/client/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>teiid-client</artifactId>
Modified: trunk/client-jdk15/pom.xml
===================================================================
--- trunk/client-jdk15/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/client-jdk15/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>teiid-client-jdk15</artifactId>
Modified: trunk/common-core/pom.xml
===================================================================
--- trunk/common-core/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/common-core/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>teiid-common-core</artifactId>
Modified: trunk/connectors/connector-file/pom.xml
===================================================================
--- trunk/connectors/connector-file/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/connector-file/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>connector-file</artifactId>
Modified: trunk/connectors/connector-ldap/pom.xml
===================================================================
--- trunk/connectors/connector-ldap/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/connector-ldap/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>connector-ldap</artifactId>
Modified: trunk/connectors/connector-salesforce/pom.xml
===================================================================
--- trunk/connectors/connector-salesforce/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/connector-salesforce/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>connector-salesforce</artifactId>
Modified: trunk/connectors/connector-ws/pom.xml
===================================================================
--- trunk/connectors/connector-ws/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/connector-ws/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>connector-ws</artifactId>
Modified: trunk/connectors/pom.xml
===================================================================
--- trunk/connectors/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.jboss.teiid</groupId>
Modified: trunk/connectors/salesforce-api/pom.xml
===================================================================
--- trunk/connectors/salesforce-api/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/salesforce-api/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>salesforce-api</artifactId>
Modified: trunk/connectors/sandbox/pom.xml
===================================================================
--- trunk/connectors/sandbox/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/sandbox/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.jboss.teiid.connectors</groupId>
Modified: trunk/connectors/sandbox/translator-yahoo/pom.xml
===================================================================
--- trunk/connectors/sandbox/translator-yahoo/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/sandbox/translator-yahoo/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>sandbox</artifactId>
<groupId>org.jboss.teiid.connectors</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>translator-yahoo</artifactId>
Modified: trunk/connectors/translator-file/pom.xml
===================================================================
--- trunk/connectors/translator-file/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/translator-file/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>translator-file</artifactId>
Modified: trunk/connectors/translator-jdbc/pom.xml
===================================================================
--- trunk/connectors/translator-jdbc/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/translator-jdbc/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>translator-jdbc</artifactId>
Modified: trunk/connectors/translator-ldap/pom.xml
===================================================================
--- trunk/connectors/translator-ldap/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/translator-ldap/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>translator-ldap</artifactId>
Modified: trunk/connectors/translator-loopback/pom.xml
===================================================================
--- trunk/connectors/translator-loopback/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/translator-loopback/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>translator-loopback</artifactId>
Modified: trunk/connectors/translator-olap/pom.xml
===================================================================
--- trunk/connectors/translator-olap/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/translator-olap/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>translator-olap</artifactId>
Modified: trunk/connectors/translator-salesforce/pom.xml
===================================================================
--- trunk/connectors/translator-salesforce/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/translator-salesforce/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>translator-salesforce</artifactId>
Modified: trunk/connectors/translator-ws/pom.xml
===================================================================
--- trunk/connectors/translator-ws/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/connectors/translator-ws/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>connectors</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>translator-ws</artifactId>
Modified: trunk/console/pom.xml
===================================================================
--- trunk/console/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/console/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
Modified: trunk/documentation/admin-guide/pom.xml
===================================================================
--- trunk/documentation/admin-guide/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/documentation/admin-guide/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<groupId>org.jboss.teiid</groupId>
<artifactId>documentation</artifactId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>admin-guide</artifactId>
Modified: trunk/documentation/caching-guide/pom.xml
===================================================================
--- trunk/documentation/caching-guide/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/documentation/caching-guide/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<groupId>org.jboss.teiid</groupId>
<artifactId>documentation</artifactId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>caching-guide</artifactId>
Modified: trunk/documentation/client-developers-guide/pom.xml
===================================================================
--- trunk/documentation/client-developers-guide/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/documentation/client-developers-guide/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<groupId>org.jboss.teiid</groupId>
<artifactId>documentation</artifactId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>client-developers-guide</artifactId>
Modified: trunk/documentation/developer-guide/pom.xml
===================================================================
--- trunk/documentation/developer-guide/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/documentation/developer-guide/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<groupId>org.jboss.teiid</groupId>
<artifactId>documentation</artifactId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>developer-guide</artifactId>
Modified: trunk/documentation/pom.xml
===================================================================
--- trunk/documentation/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/documentation/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.jboss.teiid</groupId>
Modified: trunk/documentation/quick-start-example/pom.xml
===================================================================
--- trunk/documentation/quick-start-example/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/documentation/quick-start-example/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<groupId>org.jboss.teiid</groupId>
<artifactId>documentation</artifactId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>quick-start-example</artifactId>
Modified: trunk/documentation/reference/pom.xml
===================================================================
--- trunk/documentation/reference/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/documentation/reference/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<groupId>org.jboss.teiid</groupId>
<artifactId>documentation</artifactId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>reference</artifactId>
Modified: trunk/engine/pom.xml
===================================================================
--- trunk/engine/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/engine/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>teiid-engine</artifactId>
Modified: trunk/hibernate-dialect/pom.xml
===================================================================
--- trunk/hibernate-dialect/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/hibernate-dialect/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>teiid-hibernate-dialect</artifactId>
Modified: trunk/jboss-integration/pom.xml
===================================================================
--- trunk/jboss-integration/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/jboss-integration/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -2,7 +2,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.jboss.teiid</groupId>
Modified: trunk/metadata/pom.xml
===================================================================
--- trunk/metadata/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/metadata/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>teiid-metadata</artifactId>
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -5,15 +5,15 @@
<artifactId>teiid-parent</artifactId>
<packaging>pom</packaging>
<name>Teiid</name>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
<description>Federated SQL and XML query engine.</description>
<properties>
<ant.version>1.7.0</ant.version>
<site.url>http://www.jboss.org/teiid</site.url>
</properties>
<scm>
- <connection>scm:svn:https://anonsvn.jboss.org/repos/teiid/trunk</connection>
- <developerConnection>scm:svn:https://svn.jboss.org/repos/teiid/trunk</developerConnection>
+ <connection>scm:svn:https://anonsvn.jboss.org/repos/teiid/tags/teiid-parent-7.4.0.CR1</connection>
+ <developerConnection>scm:svn:https://svn.jboss.org/repos/teiid/tags/teiid-parent-7.4.0.CR1</developerConnection>
</scm>
<licenses>
<license>
Modified: trunk/runtime/pom.xml
===================================================================
--- trunk/runtime/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/runtime/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.jboss.teiid</groupId>
Modified: trunk/test-integration/common/pom.xml
===================================================================
--- trunk/test-integration/common/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/test-integration/common/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-test-integration</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>test-integration-common</artifactId>
Modified: trunk/test-integration/db/pom.xml
===================================================================
--- trunk/test-integration/db/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/test-integration/db/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -9,7 +9,7 @@
<parent>
<artifactId>teiid-test-integration</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
Modified: trunk/test-integration/pom.xml
===================================================================
--- trunk/test-integration/pom.xml 2011-05-03 16:35:33 UTC (rev 3139)
+++ trunk/test-integration/pom.xml 2011-05-03 16:43:26 UTC (rev 3140)
@@ -3,7 +3,7 @@
<parent>
<artifactId>teiid-parent</artifactId>
<groupId>org.jboss.teiid</groupId>
- <version>7.4.0.CR1-SNAPSHOT</version>
+ <version>7.4.0.CR1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>teiid-test-integration</artifactId>
13 years, 7 months
teiid SVN: r3139 - trunk/documentation/developer-guide/src/main/docbook/en-US/content.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-05-03 12:35:33 -0400 (Tue, 03 May 2011)
New Revision: 3139
Modified:
trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml
Log:
TEIID-1507 adding a note about turning off internal capture
Modified: trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml
===================================================================
--- trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml 2011-05-03 16:21:08 UTC (rev 3138)
+++ trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml 2011-05-03 16:35:33 UTC (rev 3139)
@@ -22,6 +22,7 @@
ed.dataModification(vdbName, vdbVersion, schema, tableName);</programlisting>
<para>This will distribute a change event for schema.tableName in vdb vdbName.vdbVersion.</para>
</example>
+ <para>When externally capturing all update events, &jboss-beans; RuntimeEngineDeployer.detectingChangeEvents can be set to false, to not duplicate change events.</para>
<para>The use of the other <code>EventDistributor</code> methods to manual distribute other events is not recommended.</para>
</section>
<section>
13 years, 7 months
teiid SVN: r3138 - in trunk: build/kits/jboss-container/deployers/teiid.deployer and 9 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-05-03 12:21:08 -0400 (Tue, 03 May 2011)
New Revision: 3138
Added:
trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml
Modified:
trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java
trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml
trunk/documentation/caching-guide/src/main/docbook/en-US/content/results.xml
trunk/documentation/client-developers-guide/src/main/docbook/en-US/content/prepared-statements.xml
trunk/documentation/developer-guide/src/main/docbook/en-US/Developer_Guide.xml
trunk/documentation/docbook/custom.dtd
trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml
trunk/documentation/reference/src/main/docbook/en-US/content/system_schema.xml
trunk/documentation/reference/src/main/docbook/en-US/content/translators.xml
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java
trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
Log:
TEIID-1326 refining runtime update logic and rounding out the docs
Modified: trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java 2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java 2011-05-03 16:21:08 UTC (rev 3138)
@@ -29,6 +29,20 @@
public interface MetadataRepository {
/**
+ * Marks the start of vdb metadata loading
+ * @param vdbName
+ * @param vdbVersion
+ */
+ void startLoadVdb(String vdbName, int vdbVersion);
+
+ /**
+ * Marks the end of vdb metadata loading
+ * @param vdbName
+ * @param vdbVersion
+ */
+ void endLoadVdb(String vdbName, int vdbVersion);
+
+ /**
* Returns an updated view definition (AS SQL only) or null if the current view definition should be used
* should be used.
*/
@@ -67,7 +81,7 @@
* @param triggerOperation
* @return
*/
- boolean isInsteadOfTriggerEnabled(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation);
+ Boolean isInsteadOfTriggerEnabled(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation);
/**
* Set the given trigger enabled.
Modified: trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml
===================================================================
--- trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml 2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml 2011-05-03 16:21:08 UTC (rev 3138)
@@ -11,6 +11,10 @@
<bean name="VDBRepository" class="org.teiid.deployers.VDBRepository">
<property name="systemFunctionManager"><inject bean="SystemFunctionManager"/></property>
+ <!--
+ Optionally set a org.teiid.metadata.MetadataRepository for persistent metadata updates
+ -->
+ <!-- <property name="metadataRepository"><inject bean="MetadataRepository"/></property> -->
</bean>
<bean name="SecurityHelper" class="org.teiid.jboss.JBossSecurityHelper"/>
Modified: trunk/documentation/caching-guide/src/main/docbook/en-US/content/results.xml
===================================================================
--- trunk/documentation/caching-guide/src/main/docbook/en-US/content/results.xml 2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/caching-guide/src/main/docbook/en-US/content/results.xml 2011-05-03 16:21:08 UTC (rev 3138)
@@ -99,6 +99,8 @@
</para>
<note><para>While the result data is not held in memory, cache keys - including parameter values - may be held in memory.
Thus the cache should not be given an unlimited maximum size.</para></note>
+ <para>Result set cache entries can be invalidated by data change events. The maxStaleness setting determines how long an entry will remain
+ in the case after one of the tables that contributed to the results has been changed. See the Developers Guide for further customization.</para>
</section>
<section>
<title>Cache Administration</title>
Modified: trunk/documentation/client-developers-guide/src/main/docbook/en-US/content/prepared-statements.xml
===================================================================
--- trunk/documentation/client-developers-guide/src/main/docbook/en-US/content/prepared-statements.xml 2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/client-developers-guide/src/main/docbook/en-US/content/prepared-statements.xml 2011-05-03 16:21:08 UTC (rev 3138)
@@ -25,9 +25,6 @@
<para>Plans are cached for the entire VDB or for just a particular session. The scope of a plan is detected automatically based upon the functions evaluated during it's planning process.</para>
</listitem>
<listitem>
- <para>Runtime updates of costing information do not yet cause replanning. At this time only session scoped temporary table or internally materialized tables update their costing information.</para>
- </listitem>
- <listitem>
<para>Stored procedures executed through a <code>CallableStatement</code> have their plans cached just as a <code>PreparedStatement</code>.</para>
</listitem>
<listitem>
Modified: trunk/documentation/developer-guide/src/main/docbook/en-US/Developer_Guide.xml
===================================================================
--- trunk/documentation/developer-guide/src/main/docbook/en-US/Developer_Guide.xml 2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/developer-guide/src/main/docbook/en-US/Developer_Guide.xml 2011-05-03 16:21:08 UTC (rev 3138)
@@ -15,9 +15,8 @@
<xi:include href="content/adminapi.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/logging.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/security.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/runtime-updates.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/appendix-a.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/appendix-b.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
-
-
</book>
Added: trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml
===================================================================
--- trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml (rev 0)
+++ trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml 2011-05-03 16:21:08 UTC (rev 3138)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % CustomDTD SYSTEM "../../../../../../docbook/custom.dtd">
+%CustomDTD;
+]>
+<chapter id="runtime-updates">
+ <title>Runtime Updates</title>
+ <para>Teiid supports several mechanisms for updating the runtime system.</para>
+ <section>
+ <title>Data Updates</title>
+ <para>Data change events are used by Teiid to invalidate result set cache entries. Result set cache entires are tracked by the tables that contributed to their results.
+ By default Teiid will capture internal data events against physical sources and distribute them across the cluster.
+ This approach has several limitations. First updates are scoped only to their originating VDB/version. Second updates made out side of Teiid are not captured.
+ To increase data consistency external change data capture tools can be used to send events to Teiid. From within a Teiid cluster the <code>org.teiid.events.EventDistributorFactory</code>
+ and <code>org.teiid.events.EventDistributor</code> can be used to distribute change events. The <code>EventDistributorFactory</code> is implemented by the
+ <code>RuntimeEngineDeployer</code> bean and should be looked up by its name "teiid/engine-deployer". See the example below.</para>
+ <example>
+ <title>Usage of the <code>EventDistributor</code></title>
+ <programlisting language="java">InitialContext ctx = new InitialContext();
+EventDistributorFactory edf = (EventDistributorFactory)ctx.lookup("teiid/engine-deployer");
+EventDistributor ed = edf.getEventDistributor();
+ed.dataModification(vdbName, vdbVersion, schema, tableName);</programlisting>
+ <para>This will distribute a change event for schema.tableName in vdb vdbName.vdbVersion.</para>
+ </example>
+ <para>The use of the other <code>EventDistributor</code> methods to manual distribute other events is not recommended.</para>
+ </section>
+ <section>
+ <title>Runtime Metadata Updates</title>
+ <para>Runtime updates via system procedures and DDL statements are by default ephemeral. They are effective across the cluster only for the currently running vdbs.
+ With the next vdb start the values will revert to whatever is stored in the vdb. Updates may be made persistent though by configuring a <code>org.teiid.metadata.MetadataRepository</code>.
+ An instance of a <code>MetadataRepository</code> can be installed via the &teiid-deployer-beans; file in the <code>VDBRepository</code> bean.
+ The <code>MetadataRepository</code> repository instance may fully implement as many of the methods as needed and return null from any unneeded getter.</para>
+ <note><para>It is not recommended to directly manipulate <code>org.teiid.metadata.AbstractMetadataRecord</code> instances.
+ System procedures and DDL statements should be used instead since the effects will be distributed through the cluster and will not introduce inconsistencies.</para></note>
+ <para><code>org.teiid.metadata.AbstractMetadataRecord</code> objects passed to the <code>MetadataRepository</code> have not yet been modified.
+ If the <code>MetadataRepository</code> cannot persist the update, then a <code>RuntimeException</code> should be thrown to prevent the update from being applied by the runtime engine.</para>
+ <section>
+ <title>Costing Updates</title>
+ <para>See the Reference for the system procedures <code>SYSADMIN.setColumnStats</code> and <code>SYSADMIN.setTableStats</code>.
+ To make costing updates persistent <code>MetadataRepository</code> implementations should be provided for:
+ <programlisting language="java">TableStats getTableStats(String vdbName, int vdbVersion, Table table);
+void setTableStats(String vdbName, int vdbVersion, Table table, TableStats tableStats);
+ColumnStats getColumnStats(String vdbName, int vdbVersion, Column column);
+void setColumnStats(String vdbName, int vdbVersion, Column column, ColumnStats columnStats);</programlisting>
+ </para>
+ </section>
+ <section>
+ <title>Schema Updates</title>
+ <para>See the Reference for supported DDL statements. To make schema updates persistent implementations should be provided for:</para>
+ <programlisting>String getViewDefinition(String vdbName, int vdbVersion, Table table);
+void setViewDefinition(String vdbName, int vdbVersion, Table table, String viewDefinition);
+String getInsteadOfTriggerDefinition(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation);
+void setInsteadOfTriggerDefinition(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation, String triggerDefinition);
+boolean isInsteadOfTriggerEnabled(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation);
+void setInsteadOfTriggerEnabled(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation, boolean enabled);
+String getProcedureDefinition(String vdbName, int vdbVersion, Procedure procedure);
+void setProcedureDefinition(String vdbName, int vdbVersion, Procedure procedure, String procedureDefinition);
+LinkedHashMap<String, String> getProperties(String vdbName, int vdbVersion, AbstractMetadataRecord record);
+void setProperty(String vdbName, int vdbVersion, AbstractMetadataRecord record, String name, String value);</programlisting>
+ </section>
+ </section>
+</chapter>
\ No newline at end of file
Property changes on: trunk/documentation/developer-guide/src/main/docbook/en-US/content/runtime-updates.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/documentation/docbook/custom.dtd
===================================================================
--- trunk/documentation/docbook/custom.dtd 2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/docbook/custom.dtd 2011-05-03 16:21:08 UTC (rev 3138)
@@ -6,4 +6,5 @@
<!ENTITY javaDocUrl "http://docs.jboss.org/teiid/&versionNumber;/apidocs">
<!ENTITY desDocUrl "http://www.jboss.org/teiiddesigner/docs.html">
<!ENTITY jboss-beans "<code><jboss-install>/server/<profile>/deploy/teiid/teiid-jboss-beans.xml</code>">
-<!ENTITY metadata-update-note "<note><para>A <code>MetadataRepository</code> must be configured to make a non-temporary metadata update persistent. See the Developers Guide Runtime Updates section for more.</para></note>">
+<!ENTITY teiid-deployer-beans "<code><jboss-install>/server/<profile>/deploy/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml</code>">
+<!ENTITY metadata-update-note "<note><para>A <code>MetadataRepository</code> must be configured to make a non-temporary metadata update persistent. See the Developers Guide Runtime Metadata Updates section for more.</para></note>">
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml 2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml 2011-05-03 16:21:08 UTC (rev 3138)
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<appendix id="grammar">
- <title>BNF for SQL Grammar</title>
-<section>
+ <title>BNF for SQL Grammar</title><section>
<title>TOKENS</title>
<informaltable frame="none">
<tgroup cols="1">
@@ -416,449 +415,453 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod8" xreflabel="updateProcedure"/>updateProcedure</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod4">createUpdateProcedure</link> | <link linkend="prod9">triggerAction</link> ) <EOF></para></entry></row>
+( <link linkend="prod4">createUpdateProcedure</link> | <link linkend="prod9">forEachRowTriggerAction</link> ) <EOF></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod10" xreflabel="alter"/>alter</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod10" xreflabel="createTrigger"/>createTrigger</para></entry>
<entry align="left" valign="top"><para>::=
-<ALTER> ( ( <link linkend="prod11">nonReserved</link> <link linkend="prod2">id</link> <AS> <link linkend="prod12">queryExpression</link> ) | ( <PROCEDURE> <link linkend="prod2">id</link> <AS> <link linkend="prod13">block</link> ) | ( <TRIGGER> <ON> <link linkend="prod2">id</link> <link linkend="prod11">nonReserved</link> <OF> ( <INSERT> | <UPDATE> | <DELETE> ) <AS> <link linkend="prod9">triggerAction</link> ) )</para></entry></row>
+<CREATE> <TRIGGER> <ON> <link linkend="prod2">id</link> <link linkend="prod11">nonReserved</link> <OF> ( <INSERT> | <UPDATE> | <DELETE> ) <AS> <link linkend="prod9">forEachRowTriggerAction</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod9" xreflabel="triggerAction"/>triggerAction</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod12" xreflabel="alter"/>alter</para></entry>
<entry align="left" valign="top"><para>::=
-<FOR> <EACH> <ROW> <link linkend="prod13">block</link></para></entry></row>
+<ALTER> ( ( <link linkend="prod11">nonReserved</link> <link linkend="prod2">id</link> <AS> <link linkend="prod13">queryExpression</link> ) | ( <PROCEDURE> <link linkend="prod2">id</link> <AS> <link linkend="prod14">block</link> ) | ( <TRIGGER> <ON> <link linkend="prod2">id</link> <link linkend="prod11">nonReserved</link> <OF> ( <INSERT> | <UPDATE> | <DELETE> ) ( ( <AS> <link linkend="prod9">forEachRowTriggerAction</link> ) | <link linkend="prod11">nonReserved</link> ) ) )</para></entry></row>
<row>
+<entry align="right" valign="top"><para><anchor id="prod9" xreflabel="forEachRowTriggerAction"/>forEachRowTriggerAction</para></entry>
+<entry align="left" valign="top"><para>::=
+<FOR> <EACH> <ROW> <link linkend="prod14">block</link></para></entry></row>
+<row>
<entry align="right" valign="top"><para><anchor id="prod5" xreflabel="userCommand"/>userCommand</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod12">queryExpression</link> | <link linkend="prod14">storedProcedure</link> | <link linkend="prod15">insert</link> | <link linkend="prod16">update</link> | <link linkend="prod17">delete</link> | <link linkend="prod18">dropTable</link> | <link linkend="prod19">createTempTable</link> | <link linkend="prod10">alter</link> )</para></entry></row>
+( <link linkend="prod13">queryExpression</link> | <link linkend="prod15">storedProcedure</link> | <link linkend="prod16">insert</link> | <link linkend="prod17">update</link> | <link linkend="prod18">delete</link> | <link linkend="prod19">dropTable</link> | <link linkend="prod20">createTempTable</link> | <link linkend="prod12">alter</link> | <link linkend="prod10">createTrigger</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod18" xreflabel="dropTable"/>dropTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod19" xreflabel="dropTable"/>dropTable</para></entry>
<entry align="left" valign="top"><para>::=
<DROP> <TABLE> <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod19" xreflabel="createTempTable"/>createTempTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod20" xreflabel="createTempTable"/>createTempTable</para></entry>
<entry align="left" valign="top"><para>::=
-<CREATE> <LOCAL> <TEMPORARY> <TABLE> <link linkend="prod2">id</link> <LPAREN> <link linkend="prod20">tableElement</link> ( <COMMA> <link linkend="prod20">tableElement</link> )* ( <COMMA> <PRIMARY> <link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod2">id</link> ( <COMMA> <link linkend="prod2">id</link> )* <RPAREN> )? <RPAREN></para></entry></row>
+<CREATE> <LOCAL> <TEMPORARY> <TABLE> <link linkend="prod2">id</link> <LPAREN> <link linkend="prod21">tableElement</link> ( <COMMA> <link linkend="prod21">tableElement</link> )* ( <COMMA> <PRIMARY> <link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod2">id</link> ( <COMMA> <link linkend="prod2">id</link> )* <RPAREN> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod20" xreflabel="tableElement"/>tableElement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod21" xreflabel="tableElement"/>tableElement</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> ( <link linkend="prod21">dataTypeString</link> | <link linkend="prod11">nonReserved</link> ) ( <NOT> <NULL> )?</para></entry></row>
+<link linkend="prod2">id</link> ( <link linkend="prod22">dataTypeString</link> | <link linkend="prod11">nonReserved</link> ) ( <NOT> <NULL> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod22" xreflabel="errorStatement"/>errorStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod23" xreflabel="errorStatement"/>errorStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<ERROR> <link linkend="prod23">expression</link></para></entry></row>
+<ERROR> <link linkend="prod24">expression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod24" xreflabel="statement"/>statement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod25" xreflabel="statement"/>statement</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod25">ifStatement</link> | <link linkend="prod26">loopStatement</link> | <link linkend="prod27">whileStatement</link> | <link linkend="prod28">delimitedStatement</link> )</para></entry></row>
+( <link linkend="prod26">ifStatement</link> | <link linkend="prod27">loopStatement</link> | <link linkend="prod28">whileStatement</link> | <link linkend="prod29">delimitedStatement</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod28" xreflabel="delimitedStatement"/>delimitedStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod29" xreflabel="delimitedStatement"/>delimitedStatement</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod29">assignStatement</link> | <link linkend="prod30">sqlStatement</link> | <link linkend="prod22">errorStatement</link> | <link linkend="prod31">declareStatement</link> | <link linkend="prod32">continueStatement</link> | <link linkend="prod33">breakStatement</link> ) <SEMICOLON></para></entry></row>
+( <link linkend="prod30">assignStatement</link> | <link linkend="prod31">sqlStatement</link> | <link linkend="prod23">errorStatement</link> | <link linkend="prod32">declareStatement</link> | <link linkend="prod33">continueStatement</link> | <link linkend="prod34">breakStatement</link> ) <SEMICOLON></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod13" xreflabel="block"/>block</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod14" xreflabel="block"/>block</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod24">statement</link> | ( <BEGIN> ( <link linkend="prod24">statement</link> )* <END> ) )</para></entry></row>
+( <link linkend="prod25">statement</link> | ( <BEGIN> ( <link linkend="prod25">statement</link> )* <END> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod33" xreflabel="breakStatement"/>breakStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod34" xreflabel="breakStatement"/>breakStatement</para></entry>
<entry align="left" valign="top"><para>::=
<BREAK></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod32" xreflabel="continueStatement"/>continueStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod33" xreflabel="continueStatement"/>continueStatement</para></entry>
<entry align="left" valign="top"><para>::=
<CONTINUE></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod27" xreflabel="whileStatement"/>whileStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod28" xreflabel="whileStatement"/>whileStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<WHILE> <LPAREN> <link linkend="prod34">criteria</link> <RPAREN> <link linkend="prod13">block</link></para></entry></row>
+<WHILE> <LPAREN> <link linkend="prod35">criteria</link> <RPAREN> <link linkend="prod14">block</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod26" xreflabel="loopStatement"/>loopStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod27" xreflabel="loopStatement"/>loopStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<LOOP> <ON> <LPAREN> <link linkend="prod12">queryExpression</link> <RPAREN> <AS> <link linkend="prod2">id</link> <link linkend="prod13">block</link></para></entry></row>
+<LOOP> <ON> <LPAREN> <link linkend="prod13">queryExpression</link> <RPAREN> <AS> <link linkend="prod2">id</link> <link linkend="prod14">block</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod25" xreflabel="ifStatement"/>ifStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod26" xreflabel="ifStatement"/>ifStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<IF> <LPAREN> <link linkend="prod34">criteria</link> <RPAREN> <link linkend="prod13">block</link> ( <ELSE> <link linkend="prod13">block</link> )?</para></entry></row>
+<IF> <LPAREN> <link linkend="prod35">criteria</link> <RPAREN> <link linkend="prod14">block</link> ( <ELSE> <link linkend="prod14">block</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod35" xreflabel="criteriaSelector"/>criteriaSelector</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod36" xreflabel="criteriaSelector"/>criteriaSelector</para></entry>
<entry align="left" valign="top"><para>::=
( ( <EQ> | <NE> | <NE2> | <LE> | <GE> | <LT> | <GT> | <IN> | <LIKE> | ( <IS> <NULL> ) | <BETWEEN> ) )? <CRITERIA> ( <ON> <LPAREN> <link linkend="prod2">id</link> ( <COMMA> <link linkend="prod2">id</link> )* <RPAREN> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod36" xreflabel="hasCriteria"/>hasCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod37" xreflabel="hasCriteria"/>hasCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<HAS> <link linkend="prod35">criteriaSelector</link></para></entry></row>
+<HAS> <link linkend="prod36">criteriaSelector</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod31" xreflabel="declareStatement"/>declareStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod32" xreflabel="declareStatement"/>declareStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<DECLARE> <link linkend="prod37">dataType</link> <link linkend="prod2">id</link> ( ( <link linkend="prod11">nonReserved</link> | <EQ> ) <link linkend="prod38">assignStatementOperand</link> )?</para></entry></row>
+<DECLARE> <link linkend="prod38">dataType</link> <link linkend="prod2">id</link> ( ( <link linkend="prod11">nonReserved</link> | <EQ> ) <link linkend="prod39">assignStatementOperand</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod29" xreflabel="assignStatement"/>assignStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod30" xreflabel="assignStatement"/>assignStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> ( <link linkend="prod11">nonReserved</link> | <EQ> ) <link linkend="prod38">assignStatementOperand</link></para></entry></row>
+<link linkend="prod2">id</link> ( <link linkend="prod11">nonReserved</link> | <EQ> ) <link linkend="prod39">assignStatementOperand</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod38" xreflabel="assignStatementOperand"/>assignStatementOperand</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod39" xreflabel="assignStatementOperand"/>assignStatementOperand</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <link linkend="prod15">insert</link> ) | <link linkend="prod16">update</link> | <link linkend="prod17">delete</link> | ( <link linkend="prod23">expression</link> ) | <link linkend="prod12">queryExpression</link> )</para></entry></row>
+( ( <link linkend="prod16">insert</link> ) | <link linkend="prod17">update</link> | <link linkend="prod18">delete</link> | ( <link linkend="prod24">expression</link> ) | <link linkend="prod13">queryExpression</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod30" xreflabel="sqlStatement"/>sqlStatement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod31" xreflabel="sqlStatement"/>sqlStatement</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <link linkend="prod5">userCommand</link> ) | <link linkend="prod39">dynamicCommand</link> | ( <link linkend="prod2">id</link> ( <link linkend="prod11">nonReserved</link> | <EQ> ) <link linkend="prod14">storedProcedure</link> ) )</para></entry></row>
+( ( <link linkend="prod5">userCommand</link> ) | <link linkend="prod40">dynamicCommand</link> | ( <link linkend="prod2">id</link> ( <link linkend="prod11">nonReserved</link> | <EQ> ) <link linkend="prod15">storedProcedure</link> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod40" xreflabel="translateCriteria"/>translateCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod41" xreflabel="translateCriteria"/>translateCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<TRANSLATE> <link linkend="prod35">criteriaSelector</link> ( <WITH> <LPAREN> <link linkend="prod2">id</link> <EQ> <link linkend="prod23">expression</link> ( <COMMA> <link linkend="prod2">id</link> <EQ> <link linkend="prod23">expression</link> )* <RPAREN> )?</para></entry></row>
+<TRANSLATE> <link linkend="prod36">criteriaSelector</link> ( <WITH> <LPAREN> <link linkend="prod2">id</link> <EQ> <link linkend="prod24">expression</link> ( <COMMA> <link linkend="prod2">id</link> <EQ> <link linkend="prod24">expression</link> )* <RPAREN> )?</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod4" xreflabel="createUpdateProcedure"/>createUpdateProcedure</para></entry>
<entry align="left" valign="top"><para>::=
-<CREATE> ( <VIRTUAL> )? ( <UPDATE> )? <PROCEDURE> <link linkend="prod13">block</link></para></entry></row>
+<CREATE> ( <VIRTUAL> )? ( <UPDATE> )? <PROCEDURE> <link linkend="prod14">block</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod39" xreflabel="dynamicCommand"/>dynamicCommand</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod40" xreflabel="dynamicCommand"/>dynamicCommand</para></entry>
<entry align="left" valign="top"><para>::=
-( <EXECUTE> | <EXEC> ) ( ( <STRING> | <IMMEDIATE> ) )? <link linkend="prod23">expression</link> ( <AS> <link linkend="prod41">createElementsWithTypes</link> ( <INTO> <link linkend="prod2">id</link> )? )? ( <USING> <link linkend="prod42">setClauseList</link> )? ( <UPDATE> ( ( <INTEGERVAL> ) | ( <STAR> ) ) )?</para></entry></row>
+( <EXECUTE> | <EXEC> ) ( ( <STRING> | <IMMEDIATE> ) )? <link linkend="prod24">expression</link> ( <AS> <link linkend="prod42">createElementsWithTypes</link> ( <INTO> <link linkend="prod2">id</link> )? )? ( <USING> <link linkend="prod43">setClauseList</link> )? ( <UPDATE> ( ( <INTEGERVAL> ) | ( <STAR> ) ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod42" xreflabel="setClauseList"/>setClauseList</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod43" xreflabel="setClauseList"/>setClauseList</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod2">id</link> <EQ> ( <COMMA> <link linkend="prod2">id</link> <EQ> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod41" xreflabel="createElementsWithTypes"/>createElementsWithTypes</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod42" xreflabel="createElementsWithTypes"/>createElementsWithTypes</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> <link linkend="prod21">dataTypeString</link> ( <COMMA> <link linkend="prod2">id</link> <link linkend="prod21">dataTypeString</link> )*</para></entry></row>
+<link linkend="prod2">id</link> <link linkend="prod22">dataTypeString</link> ( <COMMA> <link linkend="prod2">id</link> <link linkend="prod22">dataTypeString</link> )*</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod6" xreflabel="callableStatement"/>callableStatement</para></entry>
<entry align="left" valign="top"><para>::=
-<LBRACE> ( <QMARK> <EQ> )? <CALL> <link linkend="prod2">id</link> ( <LPAREN> ( <link linkend="prod43">executeUnnamedParams</link> ) <RPAREN> )? <RBRACE> ( <link linkend="prod44">option</link> )?</para></entry></row>
+<LBRACE> ( <QMARK> <EQ> )? <CALL> <link linkend="prod2">id</link> ( <LPAREN> ( <link linkend="prod44">executeUnnamedParams</link> ) <RPAREN> )? <RBRACE> ( <link linkend="prod45">option</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod14" xreflabel="storedProcedure"/>storedProcedure</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod15" xreflabel="storedProcedure"/>storedProcedure</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <EXEC> | <EXECUTE> | <CALL> ) <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod45">executeNamedParams</link> | <link linkend="prod43">executeUnnamedParams</link> ) <RPAREN> ) ( <link linkend="prod44">option</link> )?</para></entry></row>
+( ( <EXEC> | <EXECUTE> | <CALL> ) <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod46">executeNamedParams</link> | <link linkend="prod44">executeUnnamedParams</link> ) <RPAREN> ) ( <link linkend="prod45">option</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod43" xreflabel="executeUnnamedParams"/>executeUnnamedParams</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod44" xreflabel="executeUnnamedParams"/>executeUnnamedParams</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod23">expression</link> ( <COMMA> <link linkend="prod23">expression</link> )* )?</para></entry></row>
+( <link linkend="prod24">expression</link> ( <COMMA> <link linkend="prod24">expression</link> )* )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod45" xreflabel="executeNamedParams"/>executeNamedParams</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod46" xreflabel="executeNamedParams"/>executeNamedParams</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod2">id</link> <EQ> ( <GT> )? <link linkend="prod23">expression</link> ( <COMMA> <link linkend="prod2">id</link> <EQ> ( <GT> )? <link linkend="prod23">expression</link> )* )</para></entry></row>
+( <link linkend="prod2">id</link> <EQ> ( <GT> )? <link linkend="prod24">expression</link> ( <COMMA> <link linkend="prod2">id</link> <EQ> ( <GT> )? <link linkend="prod24">expression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod15" xreflabel="insert"/>insert</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod16" xreflabel="insert"/>insert</para></entry>
<entry align="left" valign="top"><para>::=
-<INSERT> <INTO> <link linkend="prod2">id</link> ( <link linkend="prod46">columnList</link> )? ( ( <VALUES> <link linkend="prod47">rowValues</link> ) | ( <link linkend="prod12">queryExpression</link> ) ) ( <link linkend="prod44">option</link> )?</para></entry></row>
+<INSERT> <INTO> <link linkend="prod2">id</link> ( <link linkend="prod47">columnList</link> )? ( ( <VALUES> <link linkend="prod48">rowValues</link> ) | ( <link linkend="prod13">queryExpression</link> ) ) ( <link linkend="prod45">option</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod46" xreflabel="columnList"/>columnList</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod47" xreflabel="columnList"/>columnList</para></entry>
<entry align="left" valign="top"><para>::=
<LPAREN> <link linkend="prod2">id</link> ( <COMMA> <link linkend="prod2">id</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod47" xreflabel="rowValues"/>rowValues</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod48" xreflabel="rowValues"/>rowValues</para></entry>
<entry align="left" valign="top"><para>::=
-<LPAREN> <link linkend="prod23">expression</link> ( <COMMA> <link linkend="prod23">expression</link> )* <RPAREN></para></entry></row>
+<LPAREN> <link linkend="prod24">expression</link> ( <COMMA> <link linkend="prod24">expression</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod16" xreflabel="update"/>update</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod17" xreflabel="update"/>update</para></entry>
<entry align="left" valign="top"><para>::=
-<UPDATE> <link linkend="prod2">id</link> <SET> <link linkend="prod42">setClauseList</link> ( <link linkend="prod48">where</link> )? ( <link linkend="prod44">option</link> )?</para></entry></row>
+<UPDATE> <link linkend="prod2">id</link> <SET> <link linkend="prod43">setClauseList</link> ( <link linkend="prod49">where</link> )? ( <link linkend="prod45">option</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod17" xreflabel="delete"/>delete</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod18" xreflabel="delete"/>delete</para></entry>
<entry align="left" valign="top"><para>::=
-<DELETE> <FROM> <link linkend="prod2">id</link> ( <link linkend="prod48">where</link> )? ( <link linkend="prod44">option</link> )?</para></entry></row>
+<DELETE> <FROM> <link linkend="prod2">id</link> ( <link linkend="prod49">where</link> )? ( <link linkend="prod45">option</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod12" xreflabel="queryExpression"/>queryExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod13" xreflabel="queryExpression"/>queryExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <WITH> <link linkend="prod49">withListElement</link> ( <COMMA> <link linkend="prod49">withListElement</link> )* )? <link linkend="prod50">queryExpressionBody</link></para></entry></row>
+( <WITH> <link linkend="prod50">withListElement</link> ( <COMMA> <link linkend="prod50">withListElement</link> )* )? <link linkend="prod51">queryExpressionBody</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod49" xreflabel="withListElement"/>withListElement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod50" xreflabel="withListElement"/>withListElement</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> ( <link linkend="prod46">columnList</link> )? <AS> <LPAREN> <link linkend="prod12">queryExpression</link> <RPAREN></para></entry></row>
+<link linkend="prod2">id</link> ( <link linkend="prod47">columnList</link> )? <AS> <LPAREN> <link linkend="prod13">queryExpression</link> <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod50" xreflabel="queryExpressionBody"/>queryExpressionBody</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod51" xreflabel="queryExpressionBody"/>queryExpressionBody</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod51">queryTerm</link> ( ( <UNION> | <EXCEPT> ) ( <ALL> | <DISTINCT> )? <link linkend="prod51">queryTerm</link> )* ( <link linkend="prod52">orderby</link> )? ( <link linkend="prod53">limit</link> )? ( <link linkend="prod44">option</link> )?</para></entry></row>
+<link linkend="prod52">queryTerm</link> ( ( <UNION> | <EXCEPT> ) ( <ALL> | <DISTINCT> )? <link linkend="prod52">queryTerm</link> )* ( <link linkend="prod53">orderby</link> )? ( <link linkend="prod54">limit</link> )? ( <link linkend="prod45">option</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod51" xreflabel="queryTerm"/>queryTerm</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod52" xreflabel="queryTerm"/>queryTerm</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod54">queryPrimary</link> ( <INTERSECT> ( <ALL> | <DISTINCT> )? <link linkend="prod54">queryPrimary</link> )*</para></entry></row>
+<link linkend="prod55">queryPrimary</link> ( <INTERSECT> ( <ALL> | <DISTINCT> )? <link linkend="prod55">queryPrimary</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod54" xreflabel="queryPrimary"/>queryPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod55" xreflabel="queryPrimary"/>queryPrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod55">query</link> | ( <TABLE> <link linkend="prod2">id</link> ) | ( <LPAREN> <link linkend="prod50">queryExpressionBody</link> <RPAREN> ) )</para></entry></row>
+( <link linkend="prod56">query</link> | ( <TABLE> <link linkend="prod2">id</link> ) | ( <LPAREN> <link linkend="prod51">queryExpressionBody</link> <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod55" xreflabel="query"/>query</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod56" xreflabel="query"/>query</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod56">select</link> ( <link linkend="prod57">into</link> )? ( <link linkend="prod58">from</link> ( <link linkend="prod48">where</link> )? ( <link linkend="prod59">groupBy</link> )? ( <link linkend="prod60">having</link> )? )?</para></entry></row>
+<link linkend="prod57">select</link> ( <link linkend="prod58">into</link> )? ( <link linkend="prod59">from</link> ( <link linkend="prod49">where</link> )? ( <link linkend="prod60">groupBy</link> )? ( <link linkend="prod61">having</link> )? )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod57" xreflabel="into"/>into</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod58" xreflabel="into"/>into</para></entry>
<entry align="left" valign="top"><para>::=
<INTO> ( <link linkend="prod2">id</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod56" xreflabel="select"/>select</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod57" xreflabel="select"/>select</para></entry>
<entry align="left" valign="top"><para>::=
-<SELECT> ( <ALL> | ( <DISTINCT> ) )? ( <STAR> | ( <link linkend="prod61">selectSymbol</link> ( <COMMA> <link linkend="prod61">selectSymbol</link> )* ) )</para></entry></row>
+<SELECT> ( <ALL> | ( <DISTINCT> ) )? ( <STAR> | ( <link linkend="prod62">selectSymbol</link> ( <COMMA> <link linkend="prod62">selectSymbol</link> )* ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod61" xreflabel="selectSymbol"/>selectSymbol</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="selectSymbol"/>selectSymbol</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod62">selectExpression</link> | <link linkend="prod63">allInGroupSymbol</link> )</para></entry></row>
+( <link linkend="prod63">selectExpression</link> | <link linkend="prod64">allInGroupSymbol</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="selectExpression"/>selectExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="selectExpression"/>selectExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod23">expression</link> ( ( <AS> )? <link linkend="prod2">id</link> )? )</para></entry></row>
+( <link linkend="prod24">expression</link> ( ( <AS> )? <link linkend="prod2">id</link> )? )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod64" xreflabel="derivedColumn"/>derivedColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod65" xreflabel="derivedColumn"/>derivedColumn</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod23">expression</link> ( <AS> <link linkend="prod2">id</link> )? )</para></entry></row>
+( <link linkend="prod24">expression</link> ( <AS> <link linkend="prod2">id</link> )? )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="allInGroupSymbol"/>allInGroupSymbol</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod64" xreflabel="allInGroupSymbol"/>allInGroupSymbol</para></entry>
<entry align="left" valign="top"><para>::=
<ALL_IN_GROUP></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod65" xreflabel="xmlAgg"/>xmlAgg</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="xmlAgg"/>xmlAgg</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLAGG> <LPAREN> <link linkend="prod23">expression</link> ( <link linkend="prod52">orderby</link> )? <RPAREN></para></entry></row>
+<XMLAGG> <LPAREN> <link linkend="prod24">expression</link> ( <link linkend="prod53">orderby</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="arrayAgg"/>arrayAgg</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod67" xreflabel="arrayAgg"/>arrayAgg</para></entry>
<entry align="left" valign="top"><para>::=
-<ARRAY_AGG> <LPAREN> <link linkend="prod23">expression</link> ( <link linkend="prod52">orderby</link> )? <RPAREN></para></entry></row>
+<ARRAY_AGG> <LPAREN> <link linkend="prod24">expression</link> ( <link linkend="prod53">orderby</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod67" xreflabel="textAgg"/>textAgg</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="textAgg"/>textAgg</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod11">nonReserved</link> <LPAREN> <FOR> <link linkend="prod64">derivedColumn</link> ( <COMMA> <link linkend="prod64">derivedColumn</link> )* ( <ID> <link linkend="prod68">charVal</link> )? ( ( <ID> <link linkend="prod68">charVal</link> ) )? ( <ID> )? ( ( <ID> <link linkend="prod2">id</link> ) )? ( <link linkend="prod52">orderby</link> )? <RPAREN></para></entry></row>
+<link linkend="prod11">nonReserved</link> <LPAREN> <FOR> <link linkend="prod65">derivedColumn</link> ( <COMMA> <link linkend="prod65">derivedColumn</link> )* ( <ID> <link linkend="prod69">charVal</link> )? ( ( <ID> <link linkend="prod69">charVal</link> ) )? ( <ID> )? ( ( <ID> <link linkend="prod2">id</link> ) )? ( <link linkend="prod53">orderby</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="aggregateSymbol"/>aggregateSymbol</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="aggregateSymbol"/>aggregateSymbol</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <link linkend="prod11">nonReserved</link> <LPAREN> <STAR> <RPAREN> ) | ( ( <link linkend="prod11">nonReserved</link> | <ANY> | <SOME> ) <LPAREN> ( <DISTINCT> | <ALL> )? <link linkend="prod23">expression</link> <RPAREN> ) )</para></entry></row>
+( ( <link linkend="prod11">nonReserved</link> <LPAREN> <STAR> <RPAREN> ) | ( ( <link linkend="prod11">nonReserved</link> | <ANY> | <SOME> ) <LPAREN> ( <DISTINCT> | <ALL> )? <link linkend="prod24">expression</link> <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod58" xreflabel="from"/>from</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod59" xreflabel="from"/>from</para></entry>
<entry align="left" valign="top"><para>::=
-<FROM> ( <link linkend="prod70">tableReference</link> ( <COMMA> <link linkend="prod70">tableReference</link> )* )</para></entry></row>
+<FROM> ( <link linkend="prod71">tableReference</link> ( <COMMA> <link linkend="prod71">tableReference</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="tableReference"/>tableReference</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="tableReference"/>tableReference</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <LBRACE> <link linkend="prod11">nonReserved</link> <link linkend="prod71">joinedTable</link> <RBRACE> ) | <link linkend="prod71">joinedTable</link> )</para></entry></row>
+( ( <LBRACE> <link linkend="prod11">nonReserved</link> <link linkend="prod72">joinedTable</link> <RBRACE> ) | <link linkend="prod72">joinedTable</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="joinedTable"/>joinedTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="joinedTable"/>joinedTable</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod72">tablePrimary</link> ( ( <link linkend="prod73">crossJoin</link> | <link linkend="prod74">qualifiedJoin</link> ) )*</para></entry></row>
+<link linkend="prod73">tablePrimary</link> ( ( <link linkend="prod74">crossJoin</link> | <link linkend="prod75">qualifiedJoin</link> ) )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="crossJoin"/>crossJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="crossJoin"/>crossJoin</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <CROSS> | <UNION> ) <JOIN> <link linkend="prod72">tablePrimary</link> )</para></entry></row>
+( ( <CROSS> | <UNION> ) <JOIN> <link linkend="prod73">tablePrimary</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
<entry align="left" valign="top"><para>::=
-( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> ( <OUTER> )? ) | ( <FULL> ( <OUTER> )? ) | <INNER> )? <JOIN> <link linkend="prod70">tableReference</link> <ON> <link linkend="prod34">criteria</link> )</para></entry></row>
+( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> ( <OUTER> )? ) | ( <FULL> ( <OUTER> )? ) | <INNER> )? <JOIN> <link linkend="prod71">tableReference</link> <ON> <link linkend="prod35">criteria</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="tablePrimary"/>tablePrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="tablePrimary"/>tablePrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod75">textTable</link> | <link linkend="prod76">arrayTable</link> | <link linkend="prod77">xmlTable</link> | <link linkend="prod78">unaryFromClause</link> | <link linkend="prod79">subqueryFromClause</link> | ( <LPAREN> <link linkend="prod71">joinedTable</link> <RPAREN> ) ) ( ( <MAKEDEP> ) | ( <MAKENOTDEP> ) )?</para></entry></row>
+( <link linkend="prod76">textTable</link> | <link linkend="prod77">arrayTable</link> | <link linkend="prod78">xmlTable</link> | <link linkend="prod79">unaryFromClause</link> | <link linkend="prod80">subqueryFromClause</link> | ( <LPAREN> <link linkend="prod72">joinedTable</link> <RPAREN> ) ) ( ( <MAKEDEP> ) | ( <MAKENOTDEP> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLSERIALIZE> <LPAREN> ( <link linkend="prod11">nonReserved</link> )? <link linkend="prod23">expression</link> ( <AS> ( <STRING> | <VARCHAR> | <CLOB> ) )? <RPAREN></para></entry></row>
+<XMLSERIALIZE> <LPAREN> ( <link linkend="prod11">nonReserved</link> )? <link linkend="prod24">expression</link> ( <AS> ( <STRING> | <VARCHAR> | <CLOB> ) )? <RPAREN></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod11" xreflabel="nonReserved"/>nonReserved</para></entry>
<entry align="left" valign="top"><para>::=
<ID></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="arrayTable"/>arrayTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="arrayTable"/>arrayTable</para></entry>
<entry align="left" valign="top"><para>::=
-<ID> <LPAREN> <link linkend="prod23">expression</link> <link linkend="prod11">nonReserved</link> <link linkend="prod41">createElementsWithTypes</link> <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<ID> <LPAREN> <link linkend="prod24">expression</link> <link linkend="prod11">nonReserved</link> <link linkend="prod42">createElementsWithTypes</link> <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="textTable"/>textTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="textTable"/>textTable</para></entry>
<entry align="left" valign="top"><para>::=
-<ID> <LPAREN> <link linkend="prod23">expression</link> <link linkend="prod11">nonReserved</link> <link linkend="prod81">textColumn</link> ( <COMMA> <link linkend="prod81">textColumn</link> )* ( <ID> <link linkend="prod68">charVal</link> )? ( ( <ESCAPE> <link linkend="prod68">charVal</link> ) | ( <ID> <link linkend="prod68">charVal</link> ) )? ( <ID> ( <link linkend="prod82">intVal</link> )? )? ( <ID> <link linkend="prod82">intVal</link> )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<ID> <LPAREN> <link linkend="prod24">expression</link> <link linkend="prod11">nonReserved</link> <link linkend="prod82">textColumn</link> ( <COMMA> <link linkend="prod82">textColumn</link> )* ( <ID> <link linkend="prod69">charVal</link> )? ( ( <ESCAPE> <link linkend="prod69">charVal</link> ) | ( <ID> <link linkend="prod69">charVal</link> ) )? ( <ID> ( <link linkend="prod83">intVal</link> )? )? ( <ID> <link linkend="prod83">intVal</link> )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="textColumn"/>textColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod82" xreflabel="textColumn"/>textColumn</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> <link linkend="prod37">dataType</link> ( <ID> <link linkend="prod82">intVal</link> )?</para></entry></row>
+<link linkend="prod2">id</link> <link linkend="prod38">dataType</link> ( <ID> <link linkend="prod83">intVal</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod83" xreflabel="xmlQuery"/>xmlQuery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod84" xreflabel="xmlQuery"/>xmlQuery</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLQUERY> <LPAREN> ( <link linkend="prod84">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod64">derivedColumn</link> ( <COMMA> <link linkend="prod64">derivedColumn</link> )* )? ( ( <NULL> | <link linkend="prod11">nonReserved</link> ) <ON> <link linkend="prod11">nonReserved</link> )? <RPAREN></para></entry></row>
+<XMLQUERY> <LPAREN> ( <link linkend="prod85">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod65">derivedColumn</link> ( <COMMA> <link linkend="prod65">derivedColumn</link> )* )? ( ( <NULL> | <link linkend="prod11">nonReserved</link> ) <ON> <link linkend="prod11">nonReserved</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="xmlTable"/>xmlTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="xmlTable"/>xmlTable</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLTABLE> <LPAREN> ( <link linkend="prod84">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod64">derivedColumn</link> ( <COMMA> <link linkend="prod64">derivedColumn</link> )* )? ( <ID> <link linkend="prod85">xmlColumn</link> ( <COMMA> <link linkend="prod85">xmlColumn</link> )* )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<XMLTABLE> <LPAREN> ( <link linkend="prod85">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod65">derivedColumn</link> ( <COMMA> <link linkend="prod65">derivedColumn</link> )* )? ( <ID> <link linkend="prod86">xmlColumn</link> ( <COMMA> <link linkend="prod86">xmlColumn</link> )* )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="xmlColumn"/>xmlColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod86" xreflabel="xmlColumn"/>xmlColumn</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> ( ( <FOR> <link linkend="prod11">nonReserved</link> ) | ( <link linkend="prod37">dataType</link> ( <DEFAULT_KEYWORD> <link linkend="prod23">expression</link> )? ( <link linkend="prod11">nonReserved</link> <link linkend="prod1">stringVal</link> )? ) )</para></entry></row>
+<link linkend="prod2">id</link> ( ( <FOR> <link linkend="prod11">nonReserved</link> ) | ( <link linkend="prod38">dataType</link> ( <DEFAULT_KEYWORD> <link linkend="prod24">expression</link> )? ( <link linkend="prod11">nonReserved</link> <link linkend="prod1">stringVal</link> )? ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod82" xreflabel="intVal"/>intVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod83" xreflabel="intVal"/>intVal</para></entry>
<entry align="left" valign="top"><para>::=
<INTEGERVAL></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
<entry align="left" valign="top"><para>::=
-( <TABLE> )? <LPAREN> ( <link linkend="prod12">queryExpression</link> | <link linkend="prod14">storedProcedure</link> ) <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+( <TABLE> )? <LPAREN> ( <link linkend="prod13">queryExpression</link> | <link linkend="prod15">storedProcedure</link> ) <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
<entry align="left" valign="top"><para>::=
( <ID> ( ( <AS> )? <link linkend="prod2">id</link> )? )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod48" xreflabel="where"/>where</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod49" xreflabel="where"/>where</para></entry>
<entry align="left" valign="top"><para>::=
-<WHERE> <link linkend="prod34">criteria</link></para></entry></row>
+<WHERE> <link linkend="prod35">criteria</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod34" xreflabel="criteria"/>criteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod35" xreflabel="criteria"/>criteria</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod86">compoundCritOr</link></para></entry></row>
+<link linkend="prod87">compoundCritOr</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod86" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod87" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod87">compoundCritAnd</link> ( <OR> <link linkend="prod87">compoundCritAnd</link> )*</para></entry></row>
+<link linkend="prod88">compoundCritAnd</link> ( <OR> <link linkend="prod88">compoundCritAnd</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod87" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod88">notCrit</link> ( <AND> <link linkend="prod88">notCrit</link> )*</para></entry></row>
+<link linkend="prod89">notCrit</link> ( <AND> <link linkend="prod89">notCrit</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="notCrit"/>notCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="notCrit"/>notCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <link linkend="prod89">booleanPrimary</link></para></entry></row>
+( <NOT> )? <link linkend="prod90">booleanPrimary</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="booleanPrimary"/>booleanPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod90" xreflabel="booleanPrimary"/>booleanPrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod40">translateCriteria</link> | ( <link linkend="prod90">commonValueExpression</link> ( ( <link linkend="prod91">betweenCrit</link> | <link linkend="prod92">matchCrit</link> | <link linkend="prod93">setCrit</link> | <link linkend="prod94">isNullCrit</link> | <link linkend="prod95">subqueryCompareCriteria</link> | <link linkend="prod96">compareCrit</link> ) )? ) | <link linkend="prod97">existsCriteria</link> | <link linkend="prod36">hasCriteria</link> )</para></entry></row>
+( <link linkend="prod41">translateCriteria</link> | ( <link linkend="prod91">commonValueExpression</link> ( ( <link linkend="prod92">betweenCrit</link> | <link linkend="prod93">matchCrit</link> | <link linkend="prod94">setCrit</link> | <link linkend="prod95">isNullCrit</link> | <link linkend="prod96">subqueryCompareCriteria</link> | <link linkend="prod97">compareCrit</link> ) )? ) | <link linkend="prod98">existsCriteria</link> | <link linkend="prod37">hasCriteria</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="operator"/>operator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod99" xreflabel="operator"/>operator</para></entry>
<entry align="left" valign="top"><para>::=
( <EQ> | <NE> | <NE2> | <LT> | <LE> | <GT> | <GE> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="compareCrit"/>compareCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod97" xreflabel="compareCrit"/>compareCrit</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod98">operator</link> <link linkend="prod90">commonValueExpression</link></para></entry></row>
+<link linkend="prod99">operator</link> <link linkend="prod91">commonValueExpression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod99" xreflabel="subquery"/>subquery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod100" xreflabel="subquery"/>subquery</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod100">subqueryAndHint</link></para></entry></row>
+<LPAREN> ( <link linkend="prod13">queryExpression</link> | ( <link linkend="prod15">storedProcedure</link> ) ) <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod100" xreflabel="subqueryAndHint"/>subqueryAndHint</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="subqueryAndHint"/>subqueryAndHint</para></entry>
<entry align="left" valign="top"><para>::=
-<LPAREN> ( <link linkend="prod12">queryExpression</link> | ( <link linkend="prod14">storedProcedure</link> ) ) <RPAREN></para></entry></row>
+<link linkend="prod100">subquery</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod95" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod98">operator</link> ( <ANY> | <SOME> | <ALL> ) <link linkend="prod99">subquery</link></para></entry></row>
+<link linkend="prod99">operator</link> ( <ANY> | <SOME> | <ALL> ) <link linkend="prod100">subquery</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod92" xreflabel="matchCrit"/>matchCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="matchCrit"/>matchCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <LIKE> <link linkend="prod90">commonValueExpression</link> ( <ESCAPE> <link linkend="prod68">charVal</link> | ( <LBRACE> <ESCAPE> <link linkend="prod68">charVal</link> <RBRACE> ) )?</para></entry></row>
+( <NOT> )? <LIKE> <link linkend="prod91">commonValueExpression</link> ( <ESCAPE> <link linkend="prod69">charVal</link> | ( <LBRACE> <ESCAPE> <link linkend="prod69">charVal</link> <RBRACE> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="charVal"/>charVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="charVal"/>charVal</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod1">stringVal</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="betweenCrit"/>betweenCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod92" xreflabel="betweenCrit"/>betweenCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <BETWEEN> <link linkend="prod90">commonValueExpression</link> <AND> <link linkend="prod90">commonValueExpression</link></para></entry></row>
+( <NOT> )? <BETWEEN> <link linkend="prod91">commonValueExpression</link> <AND> <link linkend="prod91">commonValueExpression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="isNullCrit"/>isNullCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod95" xreflabel="isNullCrit"/>isNullCrit</para></entry>
<entry align="left" valign="top"><para>::=
<IS> ( <NOT> )? <NULL></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="setCrit"/>setCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="setCrit"/>setCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <IN> ( ( <link linkend="prod100">subqueryAndHint</link> ) | ( <LPAREN> <link linkend="prod90">commonValueExpression</link> ( <COMMA> <link linkend="prod90">commonValueExpression</link> )* <RPAREN> ) )</para></entry></row>
+( <NOT> )? <IN> ( ( <link linkend="prod101">subqueryAndHint</link> ) | ( <LPAREN> <link linkend="prod91">commonValueExpression</link> ( <COMMA> <link linkend="prod91">commonValueExpression</link> )* <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod97" xreflabel="existsCriteria"/>existsCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="existsCriteria"/>existsCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<EXISTS> <link linkend="prod100">subqueryAndHint</link></para></entry></row>
+<EXISTS> <link linkend="prod101">subqueryAndHint</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod59" xreflabel="groupBy"/>groupBy</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod60" xreflabel="groupBy"/>groupBy</para></entry>
<entry align="left" valign="top"><para>::=
-<GROUP> <BY> ( <link linkend="prod101">groupByItem</link> ( <COMMA> <link linkend="prod101">groupByItem</link> )* )</para></entry></row>
+<GROUP> <BY> ( <link linkend="prod102">groupByItem</link> ( <COMMA> <link linkend="prod102">groupByItem</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="groupByItem"/>groupByItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod102" xreflabel="groupByItem"/>groupByItem</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod23">expression</link></para></entry></row>
+<link linkend="prod24">expression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod60" xreflabel="having"/>having</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod61" xreflabel="having"/>having</para></entry>
<entry align="left" valign="top"><para>::=
-<HAVING> <link linkend="prod34">criteria</link></para></entry></row>
+<HAVING> <link linkend="prod35">criteria</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod52" xreflabel="orderby"/>orderby</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod53" xreflabel="orderby"/>orderby</para></entry>
<entry align="left" valign="top"><para>::=
-<ORDER> <BY> <link linkend="prod102">sortSpecification</link> ( <COMMA> <link linkend="prod102">sortSpecification</link> )*</para></entry></row>
+<ORDER> <BY> <link linkend="prod103">sortSpecification</link> ( <COMMA> <link linkend="prod103">sortSpecification</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod102" xreflabel="sortSpecification"/>sortSpecification</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="sortSpecification"/>sortSpecification</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod103">sortKey</link> ( <ASC> | <DESC> )? ( <link linkend="prod11">nonReserved</link> <link linkend="prod11">nonReserved</link> )?</para></entry></row>
+<link linkend="prod104">sortKey</link> ( <ASC> | <DESC> )? ( <link linkend="prod11">nonReserved</link> <link linkend="prod11">nonReserved</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="sortKey"/>sortKey</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod104" xreflabel="sortKey"/>sortKey</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod23">expression</link></para></entry></row>
+<link linkend="prod24">expression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod53" xreflabel="limit"/>limit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod54" xreflabel="limit"/>limit</para></entry>
<entry align="left" valign="top"><para>::=
<LIMIT> ( <INTEGERVAL> | <QMARK> ) ( <COMMA> ( <INTEGERVAL> | <QMARK> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod44" xreflabel="option"/>option</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod45" xreflabel="option"/>option</para></entry>
<entry align="left" valign="top"><para>::=
<OPTION> ( <MAKEDEP> <link linkend="prod2">id</link> ( <COMMA> <link linkend="prod2">id</link> )* | <MAKENOTDEP> <link linkend="prod2">id</link> ( <COMMA> <link linkend="prod2">id</link> )* | <NOCACHE> ( <link linkend="prod2">id</link> ( <COMMA> <link linkend="prod2">id</link> )* )? )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod23" xreflabel="expression"/>expression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod24" xreflabel="expression"/>expression</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod34">criteria</link></para></entry></row>
+<link linkend="prod35">criteria</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod90" xreflabel="commonValueExpression"/>commonValueExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="commonValueExpression"/>commonValueExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod104">plusExpression</link> ( <CONCAT_OP> <link linkend="prod104">plusExpression</link> )* )</para></entry></row>
+( <link linkend="prod105">plusExpression</link> ( <CONCAT_OP> <link linkend="prod105">plusExpression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod104" xreflabel="plusExpression"/>plusExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod105" xreflabel="plusExpression"/>plusExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod105">timesExpression</link> ( <link linkend="prod106">plusOperator</link> <link linkend="prod105">timesExpression</link> )* )</para></entry></row>
+( <link linkend="prod106">timesExpression</link> ( <link linkend="prod107">plusOperator</link> <link linkend="prod106">timesExpression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod106" xreflabel="plusOperator"/>plusOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod107" xreflabel="plusOperator"/>plusOperator</para></entry>
<entry align="left" valign="top"><para>::=
( <PLUS> | <MINUS> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod105" xreflabel="timesExpression"/>timesExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod106" xreflabel="timesExpression"/>timesExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod107">valueExpressionPrimary</link> ( <link linkend="prod108">timesOperator</link> <link linkend="prod107">valueExpressionPrimary</link> )* )</para></entry></row>
+( <link linkend="prod108">valueExpressionPrimary</link> ( <link linkend="prod109">timesOperator</link> <link linkend="prod108">valueExpressionPrimary</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod108" xreflabel="timesOperator"/>timesOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod109" xreflabel="timesOperator"/>timesOperator</para></entry>
<entry align="left" valign="top"><para>::=
( <STAR> | <SLASH> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod107" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod108" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <QMARK> | <POS_REF> | <link linkend="prod109">literal</link> | ( <LBRACE> <link linkend="prod11">nonReserved</link> <link linkend="prod110">function</link> <RBRACE> ) | ( <link linkend="prod67">textAgg</link> ) | ( <link linkend="prod69">aggregateSymbol</link> ) | ( <link linkend="prod69">aggregateSymbol</link> ) | ( <link linkend="prod69">aggregateSymbol</link> ) | ( <link linkend="prod65">xmlAgg</link> ) | ( <link linkend="prod66">arrayAgg</link> ) | ( <link linkend="prod110">function</link> ) | ( <ID> ( <LSBRACE> <link linkend="prod82">intVal</link> <RSBRACE> )? ) | <link linkend="prod99">subquery</link> | ( <LPAREN> <link linkend="prod23">expression</link> <RPAREN> ( <LSBRACE> <link linkend="prod82">intVal</link> <RSBRACE> )? ) | <link linkend="prod111">searchedCaseExpression</link> | <link linkend="prod112">caseExpression</link> )</para></entry></row>
+( <QMARK> | <POS_REF> | <link linkend="prod110">literal</link> | ( <LBRACE> <link linkend="prod11">nonReserved</link> <link linkend="prod111">function</link> <RBRACE> ) | ( <link linkend="prod68">textAgg</link> ) | ( <link linkend="prod70">aggregateSymbol</link> ) | ( <link linkend="prod70">aggregateSymbol</link> ) | ( <link linkend="prod70">aggregateSymbol</link> ) | ( <link linkend="prod66">xmlAgg</link> ) | ( <link linkend="prod67">arrayAgg</link> ) | ( <link linkend="prod111">function</link> ) | ( <ID> ( <LSBRACE> <link linkend="prod83">intVal</link> <RSBRACE> )? ) | <link linkend="prod100">subquery</link> | ( <LPAREN> <link linkend="prod24">expression</link> <RPAREN> ( <LSBRACE> <link linkend="prod83">intVal</link> <RSBRACE> )? ) | <link linkend="prod112">searchedCaseExpression</link> | <link linkend="prod113">caseExpression</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod112" xreflabel="caseExpression"/>caseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod113" xreflabel="caseExpression"/>caseExpression</para></entry>
<entry align="left" valign="top"><para>::=
-<CASE> <link linkend="prod23">expression</link> ( <WHEN> <link linkend="prod23">expression</link> <THEN> <link linkend="prod23">expression</link> )+ ( <ELSE> <link linkend="prod23">expression</link> )? <END></para></entry></row>
+<CASE> <link linkend="prod24">expression</link> ( <WHEN> <link linkend="prod24">expression</link> <THEN> <link linkend="prod24">expression</link> )+ ( <ELSE> <link linkend="prod24">expression</link> )? <END></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod111" xreflabel="searchedCaseExpression"/>searchedCaseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod112" xreflabel="searchedCaseExpression"/>searchedCaseExpression</para></entry>
<entry align="left" valign="top"><para>::=
-<CASE> ( <WHEN> <link linkend="prod34">criteria</link> <THEN> <link linkend="prod23">expression</link> )+ ( <ELSE> <link linkend="prod23">expression</link> )? <END></para></entry></row>
+<CASE> ( <WHEN> <link linkend="prod35">criteria</link> <THEN> <link linkend="prod24">expression</link> )+ ( <ELSE> <link linkend="prod24">expression</link> )? <END></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod110" xreflabel="function"/>function</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod111" xreflabel="function"/>function</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <CONVERT> <LPAREN> <link linkend="prod23">expression</link> <COMMA> <link linkend="prod37">dataType</link> <RPAREN> ) | ( <CAST> <LPAREN> <link linkend="prod23">expression</link> <AS> <link linkend="prod37">dataType</link> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod23">expression</link> <COMMA> <link linkend="prod113">stringConstant</link> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod114">intervalType</link> <COMMA> <link linkend="prod23">expression</link> <COMMA> <link linkend="prod23">expression</link> <RPAREN> ) | <link linkend="prod115">queryString</link> | ( ( <LEFT> | <RIGHT> | <CHAR> | <USER> | <YEAR> | <MONTH> | <HOUR> | <MINUTE> | <SECOND> | <XMLCONCAT> | <XMLCOMMENT> ) <LPAREN> ( <link linkend="prod23">expression</link> !
( <COMMA> <link linkend="prod23">expression</link> )* )? <RPAREN> ) | ( ( <INSERT> ) <LPAREN> ( <link linkend="prod23">expression</link> ( <COMMA> <link linkend="prod23">expression</link> )* )? <RPAREN> ) | ( ( <TRANSLATE> ) <LPAREN> ( <link linkend="prod23">expression</link> ( <COMMA> <link linkend="prod23">expression</link> )* )? <RPAREN> ) | <link linkend="prod116">xmlParse</link> | <link linkend="prod117">xmlElement</link> | ( <XMLPI> <LPAREN> ( <ID> <link linkend="prod118">idExpression</link> | <link linkend="prod118">idExpression</link> ) ( <COMMA> <link linkend="prod23">expression</link> )? <RPAREN> ) | <link linkend="prod119">xmlForest</link> | <link linkend="prod80">xmlSerialize</link> | <link linkend="prod83">xmlQuery</link> | ( <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod23">expression</link> ( <COMMA> <link linkend="prod23">expression</link> )*!
)? <RPAREN> ) )</para></entry></row>
+( ( <CONVERT> <LPAREN> <link linkend="prod24">expression</link> <COMMA> <link linkend="prod38">dataType</link> <RPAREN> ) | ( <CAST> <LPAREN> <link linkend="prod24">expression</link> <AS> <link linkend="prod38">dataType</link> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod24">expression</link> <COMMA> <link linkend="prod114">stringConstant</link> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod115">intervalType</link> <COMMA> <link linkend="prod24">expression</link> <COMMA> <link linkend="prod24">expression</link> <RPAREN> ) | <link linkend="prod116">queryString</link> | ( ( <LEFT> | <RIGHT> | <CHAR> | <USER> | <YEAR> | <MONTH> | <HOUR> | <MINUTE> | <SECOND> | <XMLCONCAT> | <XMLCOMMENT> ) <LPAREN> ( <link linkend="prod24">expression</link> !
( <COMMA> <link linkend="prod24">expression</link> )* )? <RPAREN> ) | ( ( <INSERT> ) <LPAREN> ( <link linkend="prod24">expression</link> ( <COMMA> <link linkend="prod24">expression</link> )* )? <RPAREN> ) | ( ( <TRANSLATE> ) <LPAREN> ( <link linkend="prod24">expression</link> ( <COMMA> <link linkend="prod24">expression</link> )* )? <RPAREN> ) | <link linkend="prod117">xmlParse</link> | <link linkend="prod118">xmlElement</link> | ( <XMLPI> <LPAREN> ( <ID> <link linkend="prod119">idExpression</link> | <link linkend="prod119">idExpression</link> ) ( <COMMA> <link linkend="prod24">expression</link> )? <RPAREN> ) | <link linkend="prod120">xmlForest</link> | <link linkend="prod81">xmlSerialize</link> | <link linkend="prod84">xmlQuery</link> | ( <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod24">expression</link> ( <COMMA> <link linkend="prod24">expression</link> )*!
)? <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod113" xreflabel="stringConstant"/>stringConstant</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod114" xreflabel="stringConstant"/>stringConstant</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod1">stringVal</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod116" xreflabel="xmlParse"/>xmlParse</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod117" xreflabel="xmlParse"/>xmlParse</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLPARSE> <LPAREN> <link linkend="prod11">nonReserved</link> <link linkend="prod23">expression</link> ( <link linkend="prod11">nonReserved</link> )? <RPAREN></para></entry></row>
+<XMLPARSE> <LPAREN> <link linkend="prod11">nonReserved</link> <link linkend="prod24">expression</link> ( <link linkend="prod11">nonReserved</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod115" xreflabel="queryString"/>queryString</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod116" xreflabel="queryString"/>queryString</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod23">expression</link> ( <COMMA> <link linkend="prod64">derivedColumn</link> )* <RPAREN></para></entry></row>
+<link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod24">expression</link> ( <COMMA> <link linkend="prod65">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod117" xreflabel="xmlElement"/>xmlElement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod118" xreflabel="xmlElement"/>xmlElement</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLELEMENT> <LPAREN> ( <ID> <link linkend="prod2">id</link> | <link linkend="prod2">id</link> ) ( <COMMA> <link linkend="prod84">xmlNamespaces</link> )? ( <COMMA> <link linkend="prod120">xmlAttributes</link> )? ( <COMMA> <link linkend="prod23">expression</link> )* <RPAREN></para></entry></row>
+<XMLELEMENT> <LPAREN> ( <ID> <link linkend="prod2">id</link> | <link linkend="prod2">id</link> ) ( <COMMA> <link linkend="prod85">xmlNamespaces</link> )? ( <COMMA> <link linkend="prod121">xmlAttributes</link> )? ( <COMMA> <link linkend="prod24">expression</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod120" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod121" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLATTRIBUTES> <LPAREN> <link linkend="prod64">derivedColumn</link> ( <COMMA> <link linkend="prod64">derivedColumn</link> )* <RPAREN></para></entry></row>
+<XMLATTRIBUTES> <LPAREN> <link linkend="prod65">derivedColumn</link> ( <COMMA> <link linkend="prod65">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod119" xreflabel="xmlForest"/>xmlForest</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod120" xreflabel="xmlForest"/>xmlForest</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLFOREST> <LPAREN> ( <link linkend="prod84">xmlNamespaces</link> <COMMA> )? <link linkend="prod64">derivedColumn</link> ( <COMMA> <link linkend="prod64">derivedColumn</link> )* <RPAREN></para></entry></row>
+<XMLFOREST> <LPAREN> ( <link linkend="prod85">xmlNamespaces</link> <COMMA> )? <link linkend="prod65">derivedColumn</link> ( <COMMA> <link linkend="prod65">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod84" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLNAMESPACES> <LPAREN> <link linkend="prod121">namespaceItem</link> ( <COMMA> <link linkend="prod121">namespaceItem</link> )* <RPAREN></para></entry></row>
+<XMLNAMESPACES> <LPAREN> <link linkend="prod122">namespaceItem</link> ( <COMMA> <link linkend="prod122">namespaceItem</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod121" xreflabel="namespaceItem"/>namespaceItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod122" xreflabel="namespaceItem"/>namespaceItem</para></entry>
<entry align="left" valign="top"><para>::=
( <link linkend="prod1">stringVal</link> <AS> <link linkend="prod2">id</link> )</para></entry></row>
<row>
@@ -870,23 +873,23 @@
<entry align="left" valign="top"><para>::=
( <DEFAULT_KEYWORD> <link linkend="prod1">stringVal</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod118" xreflabel="idExpression"/>idExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod119" xreflabel="idExpression"/>idExpression</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod21" xreflabel="dataTypeString"/>dataTypeString</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod22" xreflabel="dataTypeString"/>dataTypeString</para></entry>
<entry align="left" valign="top"><para>::=
( <STRING> | <VARCHAR> | <BOOLEAN> | <BYTE> | <TINYINT> | <SHORT> | <SMALLINT> | <CHAR> | <INTEGER> | <LONG> | <BIGINT> | <BIGINTEGER> | <FLOAT> | <REAL> | <DOUBLE> | <BIGDECIMAL> | <DECIMAL> | <DATE> | <TIME> | <TIMESTAMP> | <OBJECT> | <BLOB> | <CLOB> | <XML> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod37" xreflabel="dataType"/>dataType</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod38" xreflabel="dataType"/>dataType</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod21">dataTypeString</link></para></entry></row>
+<link linkend="prod22">dataTypeString</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod114" xreflabel="intervalType"/>intervalType</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod115" xreflabel="intervalType"/>intervalType</para></entry>
<entry align="left" valign="top"><para>::=
( <link linkend="prod11">nonReserved</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod109" xreflabel="literal"/>literal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod110" xreflabel="literal"/>literal</para></entry>
<entry align="left" valign="top"><para>::=
( <link linkend="prod1">stringVal</link> | <INTEGERVAL> | <FLOATVAL> | <FALSE> | <TRUE> | <UNKNOWN> | <NULL> | ( ( <BOOLEANTYPE> | <TIMESTAMPTYPE> | <DATETYPE> | <TIMETYPE> ) <link linkend="prod1">stringVal</link> <RBRACE> ) )</para></entry></row>
</tbody>
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/system_schema.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/system_schema.xml 2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/system_schema.xml 2011-05-03 16:21:08 UTC (rev 3138)
@@ -1795,7 +1795,7 @@
</section>
</section>
<warning>
- <para>The OID column is is guranteed to be unique/consistent only for given version running instance of a VDB. If a different version of
+ <para>The OID column is guranteed to be unique/consistent only for given version running instance of a VDB. If a different version of
the VDB is deployed, these IDs are not guranteed to be the same or unique across both versions of the VDB. Dynamic VDB OIDs are not cluster safe.</para>
</warning>
</section>
@@ -1804,17 +1804,17 @@
<section>
<title>SYS.getXMLSchemas</title>
<para>Returns a resultset with a single column, schema, containing the schemas as clobs.</para>
- <para><synopsis>SYS.getXMLSchemas(in string document)</synopsis></para>
+ <para><synopsis>SYS.getXMLSchemas(document in string) returns schema string</synopsis></para>
</section>
<section>
<title>SYSADMIN.refreshMatView</title>
<para>Returns integer RowsUpdated. -1 indicates a load is in progress, otherwise the cardinality of the table is returned. See the Caching Guide for more.</para>
- <para><synopsis>SYSADMIN.refreshMatView(return integer RowsUpdated, in string ViewName, in boolean Invalidate)</synopsis></para>
+ <para><synopsis>SYSADMIN.refreshMatView(RowsUpdated return integer, ViewName in string, Invalidate in boolean)</synopsis></para>
</section>
<section>
<title>SYSADMIN.refreshMatViewRow</title>
<para>Returns integer RowsUpdated. -1 indicates the materialized table is currently invalid. 0 indicates that the specified row did not exist in the live data query or in the materialized table. See the Caching Guide for more.</para>
- <para><synopsis>SYSADMIN.refreshMatViewRow(return integer RowsUpdated, in string ViewName, in object Key)</synopsis></para>
+ <para><synopsis>SYSADMIN.refreshMatViewRow(RowsUpdated return integer, ViewName in string, Key in object)</synopsis></para>
</section>
<section>
<title>Metadata Procedures</title>
@@ -1822,24 +1822,25 @@
<section>
<title>SYSADMIN.setTableStats</title>
<para>Set statistics for the given table.</para>
- <para><synopsis>SYSADMIN.setTableStats(in string TableName, in integer Cardinality)</synopsis></para>
+ <para><synopsis>SYSADMIN.setTableStats(TableName in string, Cardinality in integer)</synopsis></para>
</section>
<section>
<title>SYSADMIN.setColumnStats</title>
<para>Set statistics for the given column.</para>
- <para><synopsis>SYSADMIN.setColumnStats(in string TableName, in string ColumnName, in integer DistinctCount, in integer NullCount, in string Max, in string Min)</synopsis></para>
- <para>Passing a null stat value will leave corresponding metadata value unchanged.</para>
+ <para><synopsis>SYSADMIN.setColumnStats(TableName in string, ColumnName in string, DistinctCount in integer, NullCount in integer, Max in string, Min in string)</synopsis></para>
+ <para>All stat values are nullable. Passing a null stat value will leave corresponding metadata value unchanged.</para>
</section>
<section>
<title>SYSADMIN.setProperty</title>
<para>Set an extension metadata property for the given record. Extension metadata is typically used by <xref linkend="translators"/>.</para>
- <para><synopsis>SYSADMIN.setProperty(return clob OldValue, in string Uid, in string Name, in clob Value)</synopsis></para>
+ <para><synopsis>SYSADMIN.setProperty(OldValue return clob, Uid in string, Name in string, Value in clob)</synopsis></para>
<para>Setting a value to null will remove the property.</para>
<example lang="sql">
<title>Example Property Set</title>
<programlisting>CALL SYSADMIN.setProperty(uid=>(SELECT uid FROM TABLES WHERE name='tab'), name=>'some name', value=>'some value')</programlisting>
<para>This will set the property 'some name'='some value' on table tab.</para>
</example>
+ <para>The use of this procedure will not trigger replanning of associated prepared plans.</para>
</section>
</section>
</section>
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/translators.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/translators.xml 2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/translators.xml 2011-05-03 16:21:08 UTC (rev 3138)
@@ -63,7 +63,7 @@
<table>
<title>Base Execution Properties - shared by all translators</title>
<tgroup cols="3">
- <colspec colwidth="3*" />
+ <colspec colwidth="4*" />
<colspec colwidth="6*" />
<colspec colwidth="2*" />
<thead>
@@ -343,7 +343,7 @@
<table>
<title>Execution Properties - shared by all JDBC Translators</title>
<tgroup cols="3">
- <colspec colwidth="3*" />
+ <colspec colwidth="4*" />
<colspec colwidth="6*" />
<colspec colwidth="2*" />
<thead>
@@ -391,7 +391,7 @@
<table>
<title>Importer Properties - shared by all JDBC Translators</title>
<tgroup cols="3">
- <colspec colwidth="3*" />
+ <colspec colwidth="4*" />
<colspec colwidth="6*" />
<colspec colwidth="2*" />
<thead>
@@ -818,7 +818,7 @@
in the query, and the value is 'true' the connector will call queryAll.
</para>
- <programlisting language="SQL"><![CDATA[select * from Contact where isDeleted = true;</programlisting>
+ <programlisting language="SQL"><![CDATA[select * from Contact where isDeleted = true;]]></programlisting>
<para>
If the isDeleted column is used as a parameter in the query,
@@ -985,7 +985,7 @@
<link linkend="xmltable">XMLTABLE</link> table functions to use CSV or XML
formated data.
</para>
-
+ <note><para>Setting the proper binding value on the translator is recommended as it removes the need for callers to pass an explict value. If your service is actually uses SOAP11, but the binding used SOAP12 you will receive execution failures.</para></note>
<table>
<title>Execution Properties</title>
<tgroup cols="3">
@@ -1003,7 +1003,6 @@
<row>
<entry>DefaultBinding</entry>
<entry>The binding that should be used if one is not specified. Can be one of HTTP, SOAP11, or SOAP12
- <note><para>Setting the proper binding value on the translator is recommended as it removes the need for callers to pass an explict value. If your service is actually uses SOAP11, but the binding used SOAP12 you will receive execution failures.</para></note>
</entry>
<entry>SOAP12</entry>
</row>
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2011-05-03 16:21:08 UTC (rev 3138)
@@ -378,18 +378,13 @@
if (target == null) {
throw new TeiidProcessingException(QueryPlugin.Util.getString("DataTierManagerImpl.unknown_uuid", uuid)); //$NON-NLS-1$
}
- if (value == null) {
- result = target.setProperty(key, null);
- } else {
- strVal = ObjectConverterUtil.convertToString(value.getCharacterStream());
- result = target.setProperty(key, strVal);
+ if (this.metadataRepository != null) {
+ this.metadataRepository.setProperty(vdbName, vdbVersion, target, key, strVal);
}
+ result = target.setProperty(key, strVal);
if (eventDistributor != null) {
eventDistributor.setProperty(vdbName, vdbVersion, uuid, key, strVal);
}
- if (this.metadataRepository != null) {
- this.metadataRepository.setProperty(vdbName, vdbVersion, target, key, strVal);
- }
if (result == null) {
rows.add(Arrays.asList((Clob)null));
} else {
@@ -420,42 +415,31 @@
Integer nullVals = (Integer)((Constant)proc.getParameter(4).getExpression()).getValue();
String max = (String) ((Constant)proc.getParameter(5).getExpression()).getValue();
String min = (String) ((Constant)proc.getParameter(6).getExpression()).getValue();
- if (distinctVals != null) {
- c.setDistinctValues(distinctVals);
- }
- if (nullVals != null) {
- c.setNullValues(nullVals);
- }
- if (max != null) {
- c.setMaximumValue(max);
- }
- if (min != null) {
- c.setMinimumValue(min);
- }
ColumnStats columnStats = new ColumnStats();
columnStats.setDistinctValues(distinctVals);
columnStats.setNullValues(nullVals);
columnStats.setMaximumValue(max);
columnStats.setMinimumValue(min);
- if (eventDistributor != null) {
- eventDistributor.setColumnStats(vdbName, vdbVersion, table.getParent().getName(), table.getName(), columnName, columnStats);
- }
if (this.metadataRepository != null) {
this.metadataRepository.setColumnStats(vdbName, vdbVersion, c, columnStats);
}
+ c.setColumnStats(columnStats);
+ if (eventDistributor != null) {
+ eventDistributor.setColumnStats(vdbName, vdbVersion, table.getParent().getName(), table.getName(), columnName, columnStats);
+ }
break;
case SETTABLESTATS:
Constant val = (Constant)proc.getParameter(2).getExpression();
int cardinality = (Integer)val.getValue();
- table.setCardinality(cardinality);
TableStats tableStats = new TableStats();
tableStats.setCardinality(cardinality);
- if (eventDistributor != null) {
- eventDistributor.setTableStats(vdbName, vdbVersion, table.getParent().getName(), table.getName(), tableStats);
- }
if (this.metadataRepository != null) {
this.metadataRepository.setTableStats(vdbName, vdbVersion, table, tableStats);
}
+ table.setCardinality(cardinality);
+ if (eventDistributor != null) {
+ eventDistributor.setTableStats(vdbName, vdbVersion, table.getParent().getName(), table.getName(), tableStats);
+ }
break;
}
table.setLastModified(System.currentTimeMillis());
Modified: trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java 2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java 2011-05-03 16:21:08 UTC (rev 3138)
@@ -60,13 +60,13 @@
VDBMetaData vdb = workContext.getVDB();
Table t = (Table)obj.getTarget().getMetadataID();
String sql = obj.getDefinition().toString();
+ if (pdm.getMetadataRepository() != null) {
+ pdm.getMetadataRepository().setViewDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t, sql);
+ }
alterView(vdb, t, sql);
if (pdm.getEventDistributor() != null) {
pdm.getEventDistributor().setViewDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t.getParent().getName(), t.getName(), sql);
}
- if (pdm.getMetadataRepository() != null) {
- pdm.getMetadataRepository().setViewDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t, sql);
- }
}
@Override
@@ -74,13 +74,13 @@
VDBMetaData vdb = workContext.getVDB();
Procedure p = (Procedure)obj.getTarget().getMetadataID();
String sql = obj.getDefinition().toString();
+ if (pdm.getMetadataRepository() != null) {
+ pdm.getMetadataRepository().setProcedureDefinition(workContext.getVdbName(), workContext.getVdbVersion(), p, sql);
+ }
alterProcedureDefinition(vdb, p, sql);
if (pdm.getEventDistributor() != null) {
pdm.getEventDistributor().setProcedureDefinition(workContext.getVdbName(), workContext.getVdbVersion(), p.getParent().getName(), p.getName(), sql);
}
- if (pdm.getMetadataRepository() != null) {
- pdm.getMetadataRepository().setProcedureDefinition(workContext.getVdbName(), workContext.getVdbVersion(), p, sql);
- }
}
@Override
@@ -101,10 +101,6 @@
} else if (getPlanForEvent(t, event) == null) {
throw new TeiidRuntimeException(new TeiidProcessingException(QueryPlugin.Util.getString("DdlPlan.event_not_exists", t.getName(), obj.getEvent()))); //$NON-NLS-1$
}
- alterInsteadOfTrigger(vdb, t, sql, obj.getEnabled(), event);
- if (pdm.getEventDistributor() != null) {
- pdm.getEventDistributor().setInsteadOfTriggerDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t.getParent().getName(), t.getName(), obj.getEvent(), sql, obj.getEnabled());
- }
if (pdm.getMetadataRepository() != null) {
if (sql != null) {
pdm.getMetadataRepository().setInsteadOfTriggerDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t, obj.getEvent(), sql);
@@ -112,6 +108,10 @@
pdm.getMetadataRepository().setInsteadOfTriggerEnabled(workContext.getVdbName(), workContext.getVdbVersion(), t, obj.getEvent(), obj.getEnabled());
}
}
+ alterInsteadOfTrigger(vdb, t, sql, obj.getEnabled(), event);
+ if (pdm.getEventDistributor() != null) {
+ pdm.getEventDistributor().setInsteadOfTriggerDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t.getParent().getName(), t.getName(), obj.getEvent(), sql, obj.getEnabled());
+ }
}
}
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2011-05-03 09:43:58 UTC (rev 3137)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2011-05-03 16:21:08 UTC (rev 3138)
@@ -114,6 +114,7 @@
int vdbVersion = cvdb.getVDB().getVersion();
LinkedList<MetadataStore> allStores = new LinkedList<MetadataStore>(stores.getStores());
allStores.addAll(Arrays.asList(cvdb.getAdditionalStores()));
+ metadataRepository.startLoadVdb(vdbName, vdbVersion);
for (MetadataStore metadataStore : allStores) {
Collection<AbstractMetadataRecord> records = new LinkedHashSet<AbstractMetadataRecord>();
for (Schema schema : metadataStore.getSchemas().values()) {
@@ -187,6 +188,7 @@
}
}
}
+ metadataRepository.endLoadVdb(vdbName, vdbVersion);
}
public VDBMetaData getVDB(String name, int version) {
13 years, 7 months
teiid SVN: r3137 - in trunk: client/src/main/java/org/teiid/jdbc and 1 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-05-03 05:43:58 -0400 (Tue, 03 May 2011)
New Revision: 3137
Modified:
trunk/build/kits/jboss-container/teiid-releasenotes.html
trunk/client/src/main/java/org/teiid/jdbc/BaseDataSource.java
trunk/client/src/main/java/org/teiid/jdbc/ExecutionProperties.java
trunk/client/src/main/java/org/teiid/jdbc/StatementImpl.java
trunk/documentation/client-developers-guide/src/main/docbook/en-US/content/jdbc-connection.xml
Log:
TEIID-1573 adding a client property for settting the query timeout.
Modified: trunk/build/kits/jboss-container/teiid-releasenotes.html
===================================================================
--- trunk/build/kits/jboss-container/teiid-releasenotes.html 2011-05-03 02:38:00 UTC (rev 3136)
+++ trunk/build/kits/jboss-container/teiid-releasenotes.html 2011-05-03 09:43:58 UTC (rev 3137)
@@ -47,7 +47,7 @@
<UL>
<LI><B>Improved Planning</B> - the decision to create a dependent join is now considered earlier in planning and is much more effective for dependent joins involving multiple unrelated independent tables.
<LI><B>IN predicate splitting</B> - the planner can now split large dependent IN predicates into multiple IN predicates, which is controlled by the translator property MaxDepdendentInPredicates. This allows for much larger dependent joins to be performed as a single query.
- <LI><B>Dependent query parallization</B> - when multiple dependent queries are still required, then they will be run in parallel (up to MaxUserSourceRequestConcurrency), rather than sequentially.
+ <LI><B>Dependent query parallelization</B> - when multiple dependent queries are still required, then they will be run in parallel (up to MaxUserSourceRequestConcurrency), rather than sequentially.
<LI><B>Cost based back-off</B> - for cost based dependent joins if the number of independent values is too large, then the join will be performed as normal.
</UL>
<LI><B>Enhanced Sort Join</B> - the partitioned merge join was replaced with an enhanced sort join. The enhanced sort join will use the actual row counts from each side of the relation to perform a index based join if one side is small enough, a partial sort of the larger side and a repeated merge join if the tuples are unbalanced but one side is not small enough to form an index, or a standard sort merge join if the tuples are balanced.
@@ -55,7 +55,7 @@
<LI><B>Security Improvements</B> - UDF and pushdown functions can now be protected with data roles. Also the CommandContext can provide the Subject for custom security checks in UDFs.
<LI><B>Cache Invalidation</B> - Prepared plan and result set caches can have a maxStaleness value, which will invalidate entries based upon metadata and data changes respectively. See the Admin Guide for more.
<LI><B>Runtime-updates of Metadata</B> - Alter statements have been added to change view/procedure/INSTEAD OF trigger (update procedure) definitions have been added. A create statement was also added to add INSTEAD OF trigger (update procedures) to views.
- System procedures were added to set extension metadata and stat values. By default all effects of metadata updates happen only on running vdbs across the cluster. To make the changes persistent see the Developers Guide Runtime Updates section.
+ System procedures were added to set extension metadata and stat values. By default all effects of metadata updates happen only on running vdbs across the cluster. To make the changes persistent see the Developers Guide Runtime Updates section.
</UL>
<h2><a name="Compatibility">Compatibility Issues</a></h2>
Modified: trunk/client/src/main/java/org/teiid/jdbc/BaseDataSource.java
===================================================================
--- trunk/client/src/main/java/org/teiid/jdbc/BaseDataSource.java 2011-05-03 02:38:00 UTC (rev 3136)
+++ trunk/client/src/main/java/org/teiid/jdbc/BaseDataSource.java 2011-05-03 09:43:58 UTC (rev 3137)
@@ -145,6 +145,8 @@
private boolean ansiQuotedIdentifiers = true;
+ private int queryTimeout;
+
/**
* Reference to the logWriter, which is transient and is therefore not serialized with the DataSource.
*/
@@ -220,6 +222,10 @@
if(this.getFetchSize() > 0) {
props.setProperty(ExecutionProperties.PROP_FETCH_SIZE, String.valueOf(this.getFetchSize()));
}
+
+ if (this.getQueryTimeout() > 0) {
+ props.setProperty(ExecutionProperties.QUERYTIMEOUT, String.valueOf(this.getQueryTimeout()));
+ }
if (this.getResultSetCacheMode() != null && this.getResultSetCacheMode().trim().length() != 0) {
props.setProperty(ExecutionProperties.RESULT_SET_CACHE_MODE, this.getResultSetCacheMode());
@@ -300,6 +306,10 @@
if ( reason != null ) {
throw new SQLException(reason);
}
+
+ if (this.queryTimeout < 0) {
+ throw new TeiidSQLException(JDBCPlugin.Util.getString("MMStatement.Bad_timeout_value")); //$NON-NLS-1$
+ }
}
@@ -801,6 +811,14 @@
public boolean isAnsiQuotedIdentifiers() {
return ansiQuotedIdentifiers;
}
+
+ public int getQueryTimeout() {
+ return queryTimeout;
+ }
+
+ public void setQueryTimeout(int queryTimeout) {
+ this.queryTimeout = queryTimeout;
+ }
}
Modified: trunk/client/src/main/java/org/teiid/jdbc/ExecutionProperties.java
===================================================================
--- trunk/client/src/main/java/org/teiid/jdbc/ExecutionProperties.java 2011-05-03 02:38:00 UTC (rev 3136)
+++ trunk/client/src/main/java/org/teiid/jdbc/ExecutionProperties.java 2011-05-03 09:43:58 UTC (rev 3137)
@@ -102,5 +102,7 @@
public static final String NEWINSTANCE = "NEWINSTANCE"; //$NON-NLS-1$
+ public static final String QUERYTIMEOUT = "QUERYTIMEOUT"; //$NON-NLS-1$
+
}
\ No newline at end of file
Modified: trunk/client/src/main/java/org/teiid/jdbc/StatementImpl.java
===================================================================
--- trunk/client/src/main/java/org/teiid/jdbc/StatementImpl.java 2011-05-03 02:38:00 UTC (rev 3136)
+++ trunk/client/src/main/java/org/teiid/jdbc/StatementImpl.java 2011-05-03 09:43:58 UTC (rev 3137)
@@ -195,7 +195,15 @@
} catch(Exception e) {
// silently failover to default
}
- }
+ }
+ String queryTimeoutStr = this.execProps.getProperty(ExecutionProperties.QUERYTIMEOUT);
+ if(queryTimeoutStr != null) {
+ try {
+ this.queryTimeoutMS = Integer.parseInt(fetchSizeStr)*1000;
+ } catch(Exception e) {
+ // silently failover to default
+ }
+ }
}
protected DQP getDQP() {
Modified: trunk/documentation/client-developers-guide/src/main/docbook/en-US/content/jdbc-connection.xml
===================================================================
--- trunk/documentation/client-developers-guide/src/main/docbook/en-US/content/jdbc-connection.xml 2011-05-03 02:38:00 UTC (rev 3136)
+++ trunk/documentation/client-developers-guide/src/main/docbook/en-US/content/jdbc-connection.xml 2011-05-03 09:43:58 UTC (rev 3137)
@@ -224,7 +224,15 @@
if it finds a different security context on the calling thread, it switches the identity on the connection,
if the new user is also eligible to log in to Teiid otherwise connection fails to execute.</entry>
</row>
-
+ <row>
+ <entry>
+ <code>QueryTimeout</code>
+ </entry>
+ <entry>
+ <code>integer</code>
+ </entry>
+ <entry>Default query timeout in seconds. Must be >= 0. 0 indicates no timeout. Can be overriden by <code>Statement.setQueryTimeout</code>. Default 0.</entry>
+ </row>
</tbody>
</tgroup>
</table>
13 years, 7 months
teiid SVN: r3136 - in trunk: engine/src/main/java/org/teiid/dqp/internal/process and 13 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-05-02 22:38:00 -0400 (Mon, 02 May 2011)
New Revision: 3136
Added:
trunk/engine/src/main/java/org/teiid/query/sql/lang/TargetedCommand.java
Modified:
trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java
trunk/api/src/main/java/org/teiid/metadata/Procedure.java
trunk/api/src/main/java/org/teiid/metadata/Table.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/AccessInfo.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/CachedResults.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/PreparedPlan.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadata.java
trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadataWrapper.java
trunk/engine/src/main/java/org/teiid/query/metadata/QueryMetadataInterface.java
trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java
trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java
trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
trunk/engine/src/main/java/org/teiid/query/processor/BatchedUpdatePlan.java
trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java
trunk/engine/src/main/java/org/teiid/query/processor/ProcessorPlan.java
trunk/engine/src/main/java/org/teiid/query/processor/proc/ForEachRowPlan.java
trunk/engine/src/main/java/org/teiid/query/processor/proc/ProcedurePlan.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalPlan.java
trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLPlan.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Create.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Drop.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/ProcedureContainer.java
trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java
trunk/engine/src/main/java/org/teiid/query/util/CommandContext.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestCachedResults.java
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRuleAccessPatternValidation.java
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRulePushSelectCriteria.java
trunk/engine/src/test/java/org/teiid/query/processor/FakeProcessorPlan.java
Log:
TEIID-1507 more general collection of groups/procedures used during planning and execution.
Modified: trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -37,6 +37,14 @@
*/
public abstract class AbstractMetadataRecord implements Serializable {
+ public interface Modifiable {
+ long getLastModified();
+ }
+
+ public interface DataModifiable {
+ long getLastDataModification();
+ }
+
private static final long serialVersionUID = 564092984812414058L;
public final static char NAME_DELIM_CHAR = '.';
Modified: trunk/api/src/main/java/org/teiid/metadata/Procedure.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/Procedure.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/api/src/main/java/org/teiid/metadata/Procedure.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -25,11 +25,13 @@
import java.util.LinkedList;
import java.util.List;
+import org.teiid.metadata.AbstractMetadataRecord.Modifiable;
+
/**
* ProcedureRecordImpl
*/
-public class Procedure extends AbstractMetadataRecord {
+public class Procedure extends AbstractMetadataRecord implements Modifiable {
private static final long serialVersionUID = 7714869437683360834L;
Modified: trunk/api/src/main/java/org/teiid/metadata/Table.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/Table.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/api/src/main/java/org/teiid/metadata/Table.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -27,8 +27,10 @@
import java.util.List;
import org.teiid.core.types.DataTypeManager;
+import org.teiid.metadata.AbstractMetadataRecord.DataModifiable;
+import org.teiid.metadata.AbstractMetadataRecord.Modifiable;
-public class Table extends ColumnSet<Schema> {
+public class Table extends ColumnSet<Schema> implements Modifiable, DataModifiable {
private static final long serialVersionUID = 4891356771125218672L;
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/AccessInfo.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/AccessInfo.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/AccessInfo.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -35,13 +35,12 @@
import org.teiid.api.exception.query.QueryValidatorException;
import org.teiid.core.TeiidComponentException;
import org.teiid.metadata.AbstractMetadataRecord;
-import org.teiid.metadata.Procedure;
-import org.teiid.metadata.Table;
+import org.teiid.metadata.Schema;
+import org.teiid.metadata.AbstractMetadataRecord.DataModifiable;
+import org.teiid.metadata.AbstractMetadataRecord.Modifiable;
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.metadata.TransformationMetadata;
import org.teiid.query.optimizer.relational.RelationalPlanner;
-import org.teiid.query.processor.ProcessorPlan;
-import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.tempdata.TempTableStore;
import org.teiid.query.util.CommandContext;
@@ -52,20 +51,14 @@
private static final long serialVersionUID = -2608267960584191359L;
- private transient Set<Table> viewsAccessed;
- private transient Set<Procedure> proceduresAccessed;
- private transient Set<Object> tablesAccessed;
+ private transient Set<Object> objectsAccessed;
- private List<List<String>> externalTableNames;
- private List<List<String>> externalViewNames;
- private List<List<String>> externalProcedureNames;
+ private List<List<String>> externalNames;
private transient long creationTime = System.currentTimeMillis();
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
- externalTableNames = initExternalList(externalTableNames, tablesAccessed);
- externalViewNames = initExternalList(externalViewNames, viewsAccessed);
- externalProcedureNames = initExternalList(externalProcedureNames, proceduresAccessed);
+ externalNames = initExternalList(externalNames, objectsAccessed);
out.defaultWriteObject();
}
@@ -74,7 +67,7 @@
this.creationTime = System.currentTimeMillis();
}
- private List<List<String>> initExternalList(List<List<String>> externalNames, Set<? extends Object> accessed) {
+ private static List<List<String>> initExternalList(List<List<String>> externalNames, Set<? extends Object> accessed) {
if (externalNames == null) {
externalNames = new ArrayList<List<String>>(accessed.size());
for (Object object : accessed) {
@@ -90,63 +83,44 @@
return externalNames;
}
- public Set<Procedure> getProceduresAccessed() {
- return proceduresAccessed;
+ public Set<Object> getObjectsAccessed() {
+ return objectsAccessed;
}
-
- public Set<Table> getViewsAccessed() {
- return viewsAccessed;
- }
- public Set<Object> getTablesAccessed() {
- return tablesAccessed;
- }
-
public long getCreationTime() {
return creationTime;
}
- void populate(ProcessorPlan plan, CommandContext context) {
- List<GroupSymbol> groups = new ArrayList<GroupSymbol>();
- plan.getAccessedGroups(groups);
- if (!groups.isEmpty()) {
- tablesAccessed = new HashSet<Object>();
- for (GroupSymbol groupSymbol : groups) {
- tablesAccessed.add(groupSymbol.getMetadataID());
- }
+ void populate(CommandContext context, boolean data) {
+ Set<Object> objects = null;
+ if (data) {
+ objects = context.getDataObjects();
} else {
- tablesAccessed = Collections.emptySet();
+ objects = context.getPlanningObjects();
}
- if (!context.getViewsAccessed().isEmpty()) {
- this.viewsAccessed = new HashSet<Table>(context.getViewsAccessed());
+ if (objects == null || objects.isEmpty()) {
+ this.objectsAccessed = Collections.emptySet();
} else {
- this.viewsAccessed = Collections.emptySet();
+ this.objectsAccessed = objects;
}
- if (!context.getProceduresAccessed().isEmpty()) {
- this.proceduresAccessed = new HashSet<Procedure>(context.getProceduresAccessed());
- } else {
- this.proceduresAccessed = Collections.emptySet();
- }
}
+ /**
+ * Restore reconnects to the live metadata objects
+ * @throws QueryResolverException
+ * @throws QueryValidatorException
+ * @throws TeiidComponentException
+ */
void restore() throws QueryResolverException, QueryValidatorException, TeiidComponentException {
- if (this.viewsAccessed != null) {
+ if (this.objectsAccessed != null) {
return;
}
VDBMetaData vdb = DQPWorkContext.getWorkContext().getVDB();
TransformationMetadata tm = vdb.getAttachment(TransformationMetadata.class);
TempTableStore globalStore = vdb.getAttachment(TempTableStore.class);
- if (!externalViewNames.isEmpty()) {
- this.viewsAccessed = new HashSet<Table>();
- for (List<String> key : this.externalViewNames) {
- this.viewsAccessed.add(tm.getMetadataStore().getSchema(key.get(0).toUpperCase()).getTables().get(key.get(1).toUpperCase()));
- }
- } else {
- this.viewsAccessed = Collections.emptySet();
- }
- this.externalViewNames = null;
- if (!externalTableNames.isEmpty()) {
- for (List<String> key : this.externalTableNames) {
+ if (!externalNames.isEmpty()) {
+ this.objectsAccessed = new HashSet<Object>(externalNames.size());
+ for (List<String> key : this.externalNames) {
if (key.size() == 1) {
String matTableName = key.get(0);
TempMetadataID id = globalStore.getMetadataStore().getTempGroupID(matTableName);
@@ -155,54 +129,37 @@
String viewFullName = matTableName.substring(RelationalPlanner.MAT_PREFIX.length());
id = globalStore.getGlobalTempTableMetadataId(tm.getGroupID(viewFullName), tm);
}
- this.tablesAccessed.add(id);
+ this.objectsAccessed.add(id);
} else {
- this.tablesAccessed.add(tm.getMetadataStore().getSchema(key.get(0).toUpperCase()).getTables().get(key.get(1).toUpperCase()));
+ Schema s = tm.getMetadataStore().getSchema(key.get(0).toUpperCase());
+ Modifiable m = s.getTables().get(key.get(1).toUpperCase());
+ if (m == null) {
+ m = s.getProcedures().get(key.get(1).toUpperCase());
+ }
+ if (m != null) {
+ this.objectsAccessed.add(m);
+ }
}
}
} else {
- this.tablesAccessed = Collections.emptySet();
+ this.objectsAccessed = Collections.emptySet();
}
- this.externalTableNames = null;
- if (!externalProcedureNames.isEmpty()) {
- for (List<String> key : this.externalProcedureNames) {
- this.proceduresAccessed.add(tm.getMetadataStore().getSchema(key.get(0).toUpperCase()).getProcedures().get(key.get(1).toUpperCase()));
- }
- } else {
- this.proceduresAccessed = Collections.emptySet();
- }
- this.externalProcedureNames = null;
+ this.externalNames = null;
}
boolean validate(boolean data, long modTime) {
- if (this.tablesAccessed == null || modTime < 0) {
+ if (this.objectsAccessed == null || modTime < 0) {
return true;
}
- if (!data) {
- for (Table t : getViewsAccessed()) {
- if (t.getLastModified() - modTime > this.creationTime) {
+ for (Object o : this.objectsAccessed) {
+ if (!data) {
+ if (o instanceof Modifiable && ((Modifiable)o).getLastModified() - modTime > this.creationTime) {
return false;
}
+ } else if (o instanceof DataModifiable && ((DataModifiable)o).getLastDataModification() - modTime > this.creationTime) {
+ return false;
}
- for (Procedure p : getProceduresAccessed()) {
- if (p.getLastModified() - modTime > this.creationTime) {
- return false;
- }
- }
}
- for (Object o : getTablesAccessed()) {
- if (o instanceof Table) {
- Table t = (Table)o;
- if ((data?t.getLastDataModification():t.getLastModified()) - modTime > this.creationTime) {
- return false;
- }
- } else if (o instanceof TempMetadataID) {
- TempMetadataID tid = (TempMetadataID)o;
- if ((data?tid.getTableData().getLastDataModification():tid.getTableData().getLastModified()) - modTime > this.creationTime) {
- return false;
- }
- }
- }
return true;
}
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/CachedResults.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/CachedResults.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/CachedResults.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -92,7 +92,7 @@
this.rowCount = results.getRowCount();
this.uuid = results.getId();
this.hasLobs = results.isLobs();
- this.accessInfo.populate(plan, plan.getContext());
+ this.accessInfo.populate(plan.getContext(), true);
}
public void setCommand(Command command) {
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -85,6 +85,7 @@
import org.teiid.query.sql.lang.UnaryFromClause;
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.sql.visitor.GroupCollectorVisitor;
import org.teiid.query.tempdata.TempTableStore;
import org.teiid.query.tempdata.TempTableStore.MatTableInfo;
import org.teiid.query.util.CommandContext;
@@ -170,6 +171,11 @@
if (limit > 0) {
aqr.setFetchSize(Math.min(limit, aqr.getFetchSize()));
}
+ if (context.getDataObjects() != null) {
+ for (GroupSymbol gs : GroupCollectorVisitor.getGroupsIgnoreInlineViews(command, false)) {
+ context.accessedDataObject(gs.getMetadataID());
+ }
+ }
ConnectorManagerRepository cmr = workItem.getDqpWorkContext().getVDB().getAttachment(ConnectorManagerRepository.class);
ConnectorWork work = cmr.getConnectorManager(aqr.getConnectorName()).registerRequest(aqr);
return new DataTierTupleSource(aqr, workItem, work, this, limit);
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/PreparedPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/PreparedPlan.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/PreparedPlan.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -76,7 +76,7 @@
*/
public void setPlan(ProcessorPlan planValue, CommandContext context){
plan = planValue;
- this.accessInfo.populate(planValue, context);
+ this.accessInfo.populate(context, false);
}
/**
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 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -25,6 +25,7 @@
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -425,6 +426,8 @@
originalCommand = request.userCommand;
if (cachable && (requestMsg.useResultSetCache() || originalCommand.getCacheHint() != null) && rsCache != null && originalCommand.areResultsCachable()) {
this.cid = cacheId;
+ //turn on the collection of data objects used
+ request.processor.getContext().setDataObjects(new HashSet<Object>(4));
}
processor = request.processor;
collector = new BatchCollector(processor, processor.getBufferManager(), this.request.context, isForwardOnly()) {
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadata.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadata.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadata.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -508,5 +508,10 @@
QueryMetadataException {
return null;
}
+
+ @Override
+ public QueryMetadataInterface getSessionMetadata() {
+ return null;
+ }
}
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadataWrapper.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadataWrapper.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadataWrapper.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -382,5 +382,10 @@
QueryMetadataException {
return actualMetadata.getName(metadataID);
}
+
+ @Override
+ public QueryMetadataInterface getSessionMetadata() {
+ return actualMetadata.getSessionMetadata();
+ }
}
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/QueryMetadataInterface.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/QueryMetadataInterface.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/QueryMetadataInterface.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -677,4 +677,6 @@
* @throws TeiidComponentException
*/
boolean hasProcedure(String name) throws TeiidComponentException;
+
+ QueryMetadataInterface getSessionMetadata();
}
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -80,6 +80,15 @@
this.session = session;
}
+ public QueryMetadataInterface getSessionMetadata() {
+ if (isSession()) {
+ TempMetadataAdapter tma = new TempMetadataAdapter(new BasicQueryMetadata(), this.tempStore);
+ tma.session = true;
+ return tma;
+ }
+ return this.actualMetadata.getSessionMetadata();
+ }
+
public QueryMetadataInterface getDesignTimeMetadata() {
if (isSession()) {
return this.actualMetadata.getDesignTimeMetadata();
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -29,6 +29,8 @@
import java.util.List;
import org.teiid.core.util.LRUCache;
+import org.teiid.metadata.AbstractMetadataRecord.DataModifiable;
+import org.teiid.metadata.AbstractMetadataRecord.Modifiable;
import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.sql.lang.CacheHint;
import org.teiid.query.sql.symbol.SingleElementSymbol;
@@ -42,7 +44,7 @@
* TODO: we should be using the real metadata objects, but internal and
* designer legacy keep us on the temp framework
*/
-public class TempMetadataID implements Serializable {
+public class TempMetadataID implements Serializable, Modifiable, DataModifiable {
private static final long serialVersionUID = -1879211827339120135L;
private static final int LOCAL_CACHE_SIZE = 8;
@@ -156,6 +158,16 @@
this.type = type;
this.originalMetadataID = metadataID;
}
+
+ @Override
+ public long getLastDataModification() {
+ return getTableData().getLastDataModification();
+ }
+
+ @Override
+ public long getLastModified() {
+ return getTableData().getLastModified();
+ }
/**
* Get ID value
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -37,7 +37,6 @@
import org.teiid.core.id.IntegerIDFactory;
import org.teiid.dqp.internal.process.PreparedPlan;
import org.teiid.metadata.Procedure;
-import org.teiid.metadata.Table;
import org.teiid.metadata.FunctionMethod.Determinism;
import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
@@ -130,7 +129,7 @@
ProcessorPlan plan = planProcedure(command, metadata, idGenerator, capFinder, analysisRecord, clone);
//note that this is not a full prepared plan. It is not usable by user queries.
if (pid instanceof Procedure) {
- clone.accessedProcedure((Procedure)pid);
+ clone.accessedPlanningObject(pid);
}
pp = new PreparedPlan();
pp.setPlan(plan, clone);
@@ -138,12 +137,9 @@
context.setDeterminismLevel(determinismLevel);
}
result = pp.getPlan().clone();
- for (Table t : pp.getAccessInfo().getViewsAccessed()) {
- context.accessedView(t);
+ for (Object id : pp.getAccessInfo().getObjectsAccessed()) {
+ context.accessedPlanningObject(id);
}
- for (Procedure p : pp.getAccessInfo().getProceduresAccessed()) {
- context.accessedProcedure(p);
- }
}
// propagate procedure parameters to the plan to allow runtime type checking
ProcedureContainer container = (ProcedureContainer)cupc.getUserCommand();
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -42,7 +42,6 @@
import org.teiid.dqp.internal.process.Request;
import org.teiid.language.SQLConstants;
import org.teiid.metadata.Procedure;
-import org.teiid.metadata.Table;
import org.teiid.query.QueryPlugin;
import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.mapping.relational.QueryNode;
@@ -96,6 +95,7 @@
import org.teiid.query.sql.lang.SubqueryContainer;
import org.teiid.query.sql.lang.SubqueryFromClause;
import org.teiid.query.sql.lang.TableFunctionReference;
+import org.teiid.query.sql.lang.TargetedCommand;
import org.teiid.query.sql.lang.TranslatableProcedureContainer;
import org.teiid.query.sql.lang.UnaryFromClause;
import org.teiid.query.sql.lang.Update;
@@ -114,7 +114,6 @@
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.sql.visitor.AggregateSymbolCollectorVisitor;
import org.teiid.query.sql.visitor.CorrelatedReferenceCollectorVisitor;
-import org.teiid.query.sql.visitor.GroupCollectorVisitor;
import org.teiid.query.sql.visitor.GroupsUsedByElementsVisitor;
import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
import org.teiid.query.util.CommandContext;
@@ -522,9 +521,6 @@
// Create top project node - define output columns for stored query / procedure
PlanNode projectNode = NodeFactory.getNewNode(NodeConstants.Types.PROJECT);
- Collection<GroupSymbol> groups = GroupCollectorVisitor.getGroups(command, false);
- projectNode.addGroups(groups);
-
// Set output columns
List<SingleElementSymbol> cols = command.getProjectedSymbols();
projectNode.setProperty(NodeConstants.Info.PROJECT_COLS, cols);
@@ -538,8 +534,12 @@
ProcedureContainer container = (ProcedureContainer)command;
usingTriggerAction = addNestedProcedure(sourceNode, container, container.getGroup().getMetadataID());
}
- sourceNode.addGroups(groups);
-
+ GroupSymbol target = ((TargetedCommand)command).getGroup();
+ sourceNode.addGroup(target);
+ Object id = getTrackableGroup(target, metadata);
+ if (id != null) {
+ context.accessedPlanningObject(id);
+ }
attachLast(projectNode, sourceNode);
//for INTO query, attach source and project nodes
@@ -559,6 +559,12 @@
private boolean addNestedProcedure(PlanNode sourceNode,
ProcedureContainer container, Object metadataId) throws TeiidComponentException,
QueryMetadataException, TeiidProcessingException {
+ if (container instanceof StoredProcedure) {
+ StoredProcedure sp = (StoredProcedure)container;
+ if (sp.getProcedureID() instanceof Procedure) {
+ context.accessedPlanningObject(sp.getProcedureID());
+ }
+ }
String cacheString = "transformation/" + container.getClass().getSimpleName().toUpperCase(); //$NON-NLS-1$
Command c = (Command)metadata.getFromMetadataCache(metadataId, cacheString);
if (c == null) {
@@ -599,12 +605,6 @@
//skip the rewrite here, we'll do that in the optimizer
//so that we know what the determinism level is.
addNestedCommand(sourceNode, container.getGroup(), container, c, false);
- if (container instanceof StoredProcedure) {
- StoredProcedure sp = (StoredProcedure)container;
- if (sp.getProcedureID() instanceof Procedure) {
- context.accessedProcedure((Procedure)sp.getProcedureID());
- }
- }
} else if (!container.getGroup().isTempTable() && //we hope for the best, and do a specific validation for subqueries below
container instanceof TranslatableProcedureContainer //we force the evaluation of procedure params - TODO: inserts are fine except for nonpushdown functions on columns
&& !CriteriaCapabilityValidatorVisitor.canPushLanguageObject(container, metadata.getModelID(container.getGroup().getMetadataID()), metadata, capFinder, analysisRecord)) {
@@ -790,11 +790,14 @@
hints.hasVirtualGroups = true;
}
Command nestedCommand = ufc.getExpandedCommand();
- if (nestedCommand == null && !group.isTempGroupSymbol() && !group.isProcedure()
- && (!(group.getMetadataID() instanceof TempMetadataID) || metadata.getVirtualPlan(group.getMetadataID()) != null)
- && (metadata.isVirtualGroup(group.getMetadataID()))) {
- //must be a view layer
- nestedCommand = resolveVirtualGroup(group);
+ if (nestedCommand == null && !group.isProcedure()) {
+ Object id = getTrackableGroup(group, metadata);
+ if (id != null) {
+ context.accessedPlanningObject(id);
+ }
+ if (!group.isTempGroupSymbol() && metadata.isVirtualGroup(group.getMetadataID())) {
+ nestedCommand = resolveVirtualGroup(group);
+ }
}
node = NodeFactory.getNewNode(NodeConstants.Types.SOURCE);
if (group.getModelMetadataId() != null) {
@@ -875,6 +878,24 @@
}
}
+ public static Object getTrackableGroup(GroupSymbol group, QueryMetadataInterface metadata)
+ throws TeiidComponentException, QueryMetadataException {
+ if (group.isTempGroupSymbol()) {
+ QueryMetadataInterface qmi = metadata.getSessionMetadata();
+ try {
+ //exclude proc scoped temp tables
+ if (group.isGlobalTable() || (qmi != null && qmi.getGroupID(group.getNonCorrelationName()) == group.getMetadataID())) {
+ return group.getMetadataID();
+ }
+ } catch (QueryMetadataException e) {
+ //not a session table
+ }
+ } else {
+ return group.getMetadataID();
+ }
+ return null;
+ }
+
private SymbolMap getCorrelatedReferences(PlanNode parent, PlanNode node,
LanguageObject lo) {
PlanNode rootJoin = parent;
@@ -1111,6 +1132,7 @@
//TODO: update the table for defaultMat
recordAnnotation(analysisRecord, Annotation.MATERIALIZED_VIEW, Priority.LOW, "SimpleQueryResolver.materialized_table_not_used", virtualGroup, matTableName); //$NON-NLS-1$
}else{
+ this.context.accessedPlanningObject(matMetadataId);
qnode = new QueryNode(null);
Query query = createMatViewQuery(matMetadataId, matTableName, Arrays.asList(new AllSymbol()), isImplicitGlobal);
query.setCacheHint(hint);
@@ -1121,9 +1143,6 @@
} else {
// Not a materialized view - query the primary transformation
qnode = metadata.getVirtualPlan(metadataID);
- if (metadataID instanceof Table) {
- this.context.accessedView((Table)metadataID);
- }
}
Command result = (Command)QueryResolver.resolveView(virtualGroup, qnode, cacheString, metadata).getCommand().clone();
Modified: trunk/engine/src/main/java/org/teiid/query/processor/BatchedUpdatePlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/BatchedUpdatePlan.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/BatchedUpdatePlan.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -33,7 +33,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.query.sql.lang.Command;
-import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.util.VariableContext;
import org.teiid.query.util.CommandContext;
@@ -239,11 +238,4 @@
return true;
}
- @Override
- public void getAccessedGroups(List<GroupSymbol> groups) {
- for (int i = 0; i < getPlanCount(); i++) {
- updatePlans[i].getAccessedGroups(groups);
- }
- }
-
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -48,7 +48,6 @@
import org.teiid.query.sql.lang.AlterView;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.StoredProcedure;
-import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.util.CommandContext;
public class DdlPlan extends ProcessorPlan {
@@ -226,9 +225,4 @@
return props;
}
- @Override
- public void getAccessedGroups(List<GroupSymbol> groups) {
-
- }
-
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/ProcessorPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/ProcessorPlan.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/ProcessorPlan.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -37,7 +37,6 @@
import org.teiid.core.TeiidProcessingException;
import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.processor.BatchCollector.BatchProducer;
-import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.util.CommandContext;
@@ -177,6 +176,4 @@
return false;
}
- public abstract void getAccessedGroups(List<GroupSymbol> groups);
-
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/proc/ForEachRowPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/proc/ForEachRowPlan.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/proc/ForEachRowPlan.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -39,7 +39,6 @@
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.util.CommandContext;
@@ -163,10 +162,4 @@
return true;
}
- @Override
- public void getAccessedGroups(List<GroupSymbol> groups) {
- this.queryPlan.getAccessedGroups(groups);
- this.rowProcedure.getAccessedGroups(groups);
- }
-
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/proc/ProcedurePlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/proc/ProcedurePlan.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/proc/ProcedurePlan.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -65,7 +65,6 @@
import org.teiid.query.sql.lang.Criteria;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.Reference;
import org.teiid.query.sql.util.VariableContext;
import org.teiid.query.tempdata.TempTableStore;
@@ -714,20 +713,4 @@
return requiresTransaction || transactionalReads;
}
- @Override
- public void getAccessedGroups(List<GroupSymbol> groups) {
- ArrayList<ProcessorPlan> plans = new ArrayList<ProcessorPlan>();
- this.originalProgram.getChildPlans(plans);
- LinkedList<GroupSymbol> tempGroups = new LinkedList<GroupSymbol>();
- for (ProcessorPlan processorPlan : plans) {
- processorPlan.getAccessedGroups(tempGroups);
- }
- for (GroupSymbol groupSymbol : tempGroups) {
- if (groupSymbol.isTempTable() && !groupSymbol.isGlobalTable()) {
- continue;
- }
- groups.add(groupSymbol);
- }
- }
-
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalPlan.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalPlan.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -41,13 +41,10 @@
import org.teiid.query.processor.QueryProcessor;
import org.teiid.query.processor.relational.ProjectIntoNode.Mode;
import org.teiid.query.sql.LanguageObject;
-import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.Create;
import org.teiid.query.sql.lang.Insert;
import org.teiid.query.sql.lang.QueryCommand;
import org.teiid.query.sql.lang.WithQueryCommand;
-import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.visitor.GroupCollectorVisitor;
import org.teiid.query.tempdata.TempTableStore;
import org.teiid.query.util.CommandContext;
@@ -291,29 +288,6 @@
}
@Override
- public void getAccessedGroups(List<GroupSymbol> groups) {
- getAccessedGroups(groups, this.root);
- }
-
- void getAccessedGroups(List<GroupSymbol> groups, RelationalNode node) {
- if (node instanceof AccessNode) {
- Command c = ((AccessNode)node).getCommand();
- if (c instanceof QueryCommand) {
- QueryCommand qc = (QueryCommand)c;
- groups.addAll(GroupCollectorVisitor.getGroupsIgnoreInlineViews(qc, true));
- }
- } else if (node instanceof PlanExecutionNode) {
- PlanExecutionNode pen = (PlanExecutionNode)node;
- pen.getProcessorPlan().getAccessedGroups(groups);
- }
- for (RelationalNode child : node.getChildren()) {
- if (child != null) {
- getAccessedGroups(groups, child);
- }
- }
- }
-
- @Override
public TupleBuffer getFinalBuffer() throws BlockedException, TeiidComponentException, TeiidProcessingException {
return root.getFinalBuffer();
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLPlan.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLPlan.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -479,8 +479,4 @@
return this.originalProgram;
}
- @Override
- public void getAccessedGroups(List<GroupSymbol> groups) {
- //TODO: add support
- }
}
\ No newline at end of file
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Create.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Create.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Create.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -39,7 +39,7 @@
/**
* @since 5.5
*/
-public class Create extends Command {
+public class Create extends Command implements TargetedCommand {
/** Identifies the table to be created. */
private GroupSymbol table;
private List<ElementSymbol> primaryKey = new ArrayList<ElementSymbol>();
@@ -49,6 +49,11 @@
public GroupSymbol getTable() {
return table;
}
+
+ @Override
+ public GroupSymbol getGroup() {
+ return table;
+ }
public void setTable(GroupSymbol table) {
this.table = table;
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Drop.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Drop.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Drop.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -24,10 +24,8 @@
import java.util.List;
-import org.teiid.core.TeiidComponentException;
import org.teiid.core.util.EquivalenceUtil;
import org.teiid.core.util.HashCodeUtil;
-import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.visitor.SQLStringVisitor;
@@ -37,13 +35,18 @@
/**
* @since 5.5
*/
-public class Drop extends Command {
+public class Drop extends Command implements TargetedCommand {
/** Identifies the table to be dropped. */
private GroupSymbol table;
public GroupSymbol getTable() {
return table;
}
+
+ @Override
+ public GroupSymbol getGroup() {
+ return table;
+ }
public void setTable(GroupSymbol table) {
this.table = table;
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/ProcedureContainer.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/ProcedureContainer.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/ProcedureContainer.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -26,17 +26,14 @@
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.validator.UpdateValidator.UpdateInfo;
-public abstract class ProcedureContainer extends Command {
+public abstract class ProcedureContainer extends Command implements TargetedCommand {
private int updateCount = -1;
private UpdateInfo updateInfo;
- public abstract GroupSymbol getGroup();
-
protected void copyMetadataState(ProcedureContainer copy) {
super.copyMetadataState(copy);
copy.setUpdateInfo(this.getUpdateInfo());
Added: trunk/engine/src/main/java/org/teiid/query/sql/lang/TargetedCommand.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/TargetedCommand.java (rev 0)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/TargetedCommand.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -0,0 +1,30 @@
+/*
+ * 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.query.sql.lang;
+
+import org.teiid.query.sql.symbol.GroupSymbol;
+
+public interface TargetedCommand {
+
+ GroupSymbol getGroup();
+}
Property changes on: trunk/engine/src/main/java/org/teiid/query/sql/lang/TargetedCommand.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -286,6 +286,7 @@
Determinism determinismLevel = context.resetDeterminismLevel();
QueryProcessor qp = context.getQueryProcessorFactory().createQueryProcessor(proc.toString(), fullName.toUpperCase(), context);
qp.setNonBlocking(true);
+ qp.getContext().setDataObjects(null);
BatchCollector bc = qp.createBatchCollector();
TupleBuffer tb = bc.collectTuples();
CachedResults cr = new CachedResults();
@@ -352,6 +353,7 @@
metadata.getFullName(ids.iterator().next()) + " = ?" + ' ' + Reserved.OPTION + ' ' + Reserved.NOCACHE; //$NON-NLS-1$
QueryProcessor qp = context.getQueryProcessorFactory().createQueryProcessor(queryString, matViewName.toUpperCase(), context, key.getValue());
qp.setNonBlocking(true);
+ qp.getContext().setDataObjects(null);
TupleSource ts = new BatchCollector.BatchProducerTupleSource(qp);
List<?> tuple = ts.nextTuple();
boolean delete = false;
@@ -430,8 +432,15 @@
}
}
table = globalStore.getOrCreateTempTable(tableName, query, bufferManager, false);
+ context.accessedDataObject(group.getMetadataID());
} else {
table = contextStore.getOrCreateTempTable(tableName, query, bufferManager, true);
+ if (context.getDataObjects() != null) {
+ Object id = RelationalPlanner.getTrackableGroup(group, context.getMetadata());
+ if (id != null) {
+ context.accessedDataObject(group.getMetadataID());
+ }
+ }
}
if (remapColumns) {
//convert to the actual table symbols (this is typically handled by the languagebridgefactory
@@ -516,7 +525,7 @@
String transformation = metadata.getVirtualPlan(group.getMetadataID()).getQuery();
QueryProcessor qp = context.getQueryProcessorFactory().createQueryProcessor(transformation, fullName, context);
qp.setNonBlocking(true);
-
+ qp.getContext().setDataObjects(null);
if (distributedCache != null) {
CachedResults cr = new CachedResults();
BatchCollector bc = qp.createBatchCollector();
Modified: trunk/engine/src/main/java/org/teiid/query/util/CommandContext.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/util/CommandContext.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/util/CommandContext.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -40,8 +40,6 @@
import org.teiid.dqp.internal.process.PreparedPlan;
import org.teiid.dqp.internal.process.SessionAwareCache;
import org.teiid.dqp.internal.process.SessionAwareCache.CacheID;
-import org.teiid.metadata.Procedure;
-import org.teiid.metadata.Table;
import org.teiid.metadata.FunctionMethod.Determinism;
import org.teiid.query.QueryPlugin;
import org.teiid.query.eval.SecurityFunctionEvaluator;
@@ -118,6 +116,7 @@
private int userRequestSourceConcurrency;
private Subject subject;
+ private HashSet<Object> dataObjects;
}
private GlobalState globalState = new GlobalState();
@@ -126,8 +125,8 @@
private TempTableStore tempTableStore;
private LinkedList<String> recursionStack;
private boolean nonBlocking;
- private HashSet<Table> viewsAccessed;
- private HashSet<Procedure> proceduresAccessed;
+ private HashSet<Object> planningObjects;
+ private HashSet<Object> dataObjects = this.globalState.dataObjects;
/**
* Construct a new context.
@@ -160,6 +159,7 @@
private CommandContext(GlobalState state) {
this.globalState = state;
+ this.dataObjects = this.globalState.dataObjects;
}
public Determinism getDeterminismLevel() {
@@ -539,32 +539,32 @@
this.globalState.subject = subject;
}
- public void accessedView(Table id) {
- if (this.viewsAccessed == null) {
- this.viewsAccessed = new HashSet<Table>();
+ public void accessedPlanningObject(Object id) {
+ if (this.planningObjects == null) {
+ this.planningObjects = new HashSet<Object>();
}
- this.viewsAccessed.add(id);
+ this.planningObjects.add(id);
}
- public Set<Table> getViewsAccessed() {
- if (this.viewsAccessed == null) {
+ public Set<Object> getPlanningObjects() {
+ if (this.planningObjects == null) {
return Collections.emptySet();
}
- return viewsAccessed;
+ return planningObjects;
}
- public void accessedProcedure(Procedure id) {
- if (this.proceduresAccessed == null) {
- this.proceduresAccessed = new HashSet<Procedure>();
+ public void accessedDataObject(Object id) {
+ if (this.dataObjects != null) {
+ this.dataObjects.add(id);
}
- this.proceduresAccessed.add(id);
}
- public Set<Procedure> getProceduresAccessed() {
- if (this.proceduresAccessed == null) {
- return Collections.emptySet();
- }
- return proceduresAccessed;
+ public Set<Object> getDataObjects() {
+ return dataObjects;
}
+ public void setDataObjects(HashSet<Object> dataObjectsAccessed) {
+ this.dataObjects = dataObjectsAccessed;
+ }
+
}
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestCachedResults.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestCachedResults.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestCachedResults.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -75,7 +75,7 @@
ProcessorPlan plan = new FakeProcessorPlan(0);
CommandContext cc = new CommandContext();
Table t = RealMetadataFactory.exampleBQT().getGroupID("bqt1.smalla");
- cc.accessedView(t);
+ cc.accessedDataObject(t);
plan.setContext(cc);
results.setResults(tb, plan);
results.setCommand(new Query());
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRuleAccessPatternValidation.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRuleAccessPatternValidation.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRuleAccessPatternValidation.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -85,7 +85,7 @@
//Generate canonical plan
RelationalPlanner p = new RelationalPlanner();
- p.initialize(query, null, METADATA, FINDER, null, null);
+ p.initialize(query, null, METADATA, FINDER, null, new CommandContext());
PlanNode planNode = p.generatePlan(query);
RelationalPlanner planner = new RelationalPlanner();
final RuleStack rules = planner.buildRules();
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRulePushSelectCriteria.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRulePushSelectCriteria.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRulePushSelectCriteria.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -43,7 +43,6 @@
import org.teiid.query.optimizer.relational.plantree.NodeFactory;
import org.teiid.query.optimizer.relational.plantree.PlanNode;
import org.teiid.query.optimizer.relational.plantree.NodeConstants.Info;
-import org.teiid.query.optimizer.relational.rules.RulePushSelectCriteria;
import org.teiid.query.parser.QueryParser;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.symbol.ElementSymbol;
@@ -72,7 +71,8 @@
Command command = TestOptimizer.helpGetCommand("select * from (select * from pm1.g1 union select * from pm1.g2) x where e1 = 1", metadata, null); //$NON-NLS-1$
Command subCommand = TestOptimizer.helpGetCommand("select * from pm1.g1 union select * from pm1.g2", metadata, null); //$NON-NLS-1$
RelationalPlanner p = new RelationalPlanner();
- p.initialize(command, null, metadata, null, null, null);
+ CommandContext cc = new CommandContext();
+ p.initialize(command, null, metadata, null, null, cc);
PlanNode root = p.generatePlan(command);
PlanNode child = p.generatePlan(subCommand);
PlanNode sourceNode = NodeEditor.findNodePreOrder(root, NodeConstants.Types.SOURCE);
@@ -83,7 +83,7 @@
accessNode.addGroups(child.getFirstChild().getGroups());
child.getFirstChild().addAsParent(accessNode);
- new RulePushSelectCriteria().execute(root, metadata, new DefaultCapabilitiesFinder(), new RuleStack(), AnalysisRecord.createNonRecordingRecord(), new CommandContext());
+ new RulePushSelectCriteria().execute(root, metadata, new DefaultCapabilitiesFinder(), new RuleStack(), AnalysisRecord.createNonRecordingRecord(), cc);
// the select node should still be above the access node
accessNode = NodeEditor.findNodePreOrder(root, NodeConstants.Types.ACCESS);
assertEquals(NodeConstants.Types.SELECT, accessNode.getParent().getType());
Modified: trunk/engine/src/test/java/org/teiid/query/processor/FakeProcessorPlan.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/FakeProcessorPlan.java 2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/test/java/org/teiid/query/processor/FakeProcessorPlan.java 2011-05-03 02:38:00 UTC (rev 3136)
@@ -33,7 +33,6 @@
import org.teiid.common.buffer.TupleBatch;
import org.teiid.core.TeiidComponentException;
import org.teiid.query.sql.lang.Command;
-import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.util.CommandContext;
@@ -141,8 +140,4 @@
return this.outputElements;
}
- @Override
- public void getAccessedGroups(List<GroupSymbol> groups) {
- }
-
}
13 years, 7 months
teiid SVN: r3135 - in trunk: client/src/main/java/org/teiid/adminapi/impl and 8 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-05-02 14:34:41 -0400 (Mon, 02 May 2011)
New Revision: 3135
Modified:
trunk/client/src/main/java/org/teiid/adminapi/DataPolicy.java
trunk/client/src/main/java/org/teiid/adminapi/impl/DataPolicyMetadata.java
trunk/client/src/main/resources/vdb-deployer.xsd
trunk/documentation/reference/src/main/docbook/en-US/content/dataroles.xml
trunk/engine/src/main/java/org/teiid/dqp/internal/process/AuthorizationValidationVisitor.java
trunk/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/CommandCollectorVisitor.java
trunk/engine/src/main/java/org/teiid/query/validator/AbstractValidationVisitor.java
trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
trunk/engine/src/main/java/org/teiid/query/validator/Validator.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestAuthorizationValidationVisitor.java
trunk/engine/src/test/java/org/teiid/query/validator/TestAlterValidation.java
Log:
TEIID-1574 adding permissions for alter/execute
Modified: trunk/client/src/main/java/org/teiid/adminapi/DataPolicy.java
===================================================================
--- trunk/client/src/main/java/org/teiid/adminapi/DataPolicy.java 2011-05-02 17:02:28 UTC (rev 3134)
+++ trunk/client/src/main/java/org/teiid/adminapi/DataPolicy.java 2011-05-02 18:34:41 UTC (rev 3135)
@@ -25,7 +25,7 @@
public interface DataPolicy {
- public enum PermissionType {CREATE, READ, UPDATE, DELETE};
+ public enum PermissionType {CREATE, READ, UPDATE, DELETE, ALTER, EXECUTE};
/**
* Get the Name of the Data Policy
@@ -92,6 +92,18 @@
* Is "DELETE" allowed?
* @return
*/
- Boolean getAllowDelete();
+ Boolean getAllowDelete();
+
+ /**
+ * Is "ALTER" allowed?
+ * @return
+ */
+ Boolean getAllowAlter();
+
+ /**
+ * Is "EXECUTE" allowed?
+ * @return
+ */
+ Boolean getAllowExecute();
}
}
Modified: trunk/client/src/main/java/org/teiid/adminapi/impl/DataPolicyMetadata.java
===================================================================
--- trunk/client/src/main/java/org/teiid/adminapi/impl/DataPolicyMetadata.java 2011-05-02 17:02:28 UTC (rev 3134)
+++ trunk/client/src/main/java/org/teiid/adminapi/impl/DataPolicyMetadata.java 2011-05-02 18:34:41 UTC (rev 3135)
@@ -146,7 +146,9 @@
"allowCreate",
"allowRead",
"allowUpdate",
- "allowDelete"
+ "allowDelete",
+ "allowExecute",
+ "allowAlter"
})
@ManagementObject(properties=ManagementProperties.EXPLICIT)
public static class PermissionMetaData implements DataPermission, Serializable {
@@ -162,6 +164,10 @@
protected Boolean allowUpdate;
@XmlElement(name = "allow-delete")
protected Boolean allowDelete;
+ @XmlElement(name = "allow-execute")
+ protected Boolean allowExecute;
+ @XmlElement(name = "allow-alter")
+ protected Boolean allowAlter;
@Override
@ManagementProperty(description="Resource Name, for which permission defined")
@@ -229,13 +235,25 @@
if (Boolean.TRUE.equals(getAllowDelete())) {
sb.append("D");//$NON-NLS-1$
}
+ if (Boolean.TRUE.equals(getAllowExecute())) {
+ sb.append("E");//$NON-NLS-1$
+ }
+ if (Boolean.TRUE.equals(getAllowAlter())) {
+ sb.append("A");//$NON-NLS-1$
+ }
return sb.toString();
}
public Boolean allows(PermissionType type) {
switch (type) {
+ case ALTER:
+ return getAllowAlter();
case CREATE:
return getAllowCreate();
+ case EXECUTE:
+ if (getAllowExecute() != null) {
+ return getAllowExecute();
+ }
case READ:
return getAllowRead();
case UPDATE:
@@ -246,7 +264,27 @@
throw new AssertionError();
}
- public String toString() {
+ @Override
+ @ManagementProperty(description="Allows Alter")
+ public Boolean getAllowAlter() {
+ return allowAlter;
+ }
+
+ @Override
+ @ManagementProperty(description="Allows Execute")
+ public Boolean getAllowExecute() {
+ return allowExecute;
+ }
+
+ public void setAllowAlter(Boolean allowAlter) {
+ this.allowAlter = allowAlter;
+ }
+
+ public void setAllowExecute(Boolean allowExecute) {
+ this.allowExecute = allowExecute;
+ }
+
+ public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getResourceName());
sb.append("["); //$NON-NLS-1$
Modified: trunk/client/src/main/resources/vdb-deployer.xsd
===================================================================
--- trunk/client/src/main/resources/vdb-deployer.xsd 2011-05-02 17:02:28 UTC (rev 3134)
+++ trunk/client/src/main/resources/vdb-deployer.xsd 2011-05-02 18:34:41 UTC (rev 3135)
@@ -93,6 +93,8 @@
<xs:element name="allow-read" type="xs:boolean" minOccurs="0"/>
<xs:element name="allow-update" type="xs:boolean" minOccurs="0"/>
<xs:element name="allow-delete" type="xs:boolean" minOccurs="0"/>
+ <xs:element name="allow-execute" type="xs:boolean" minOccurs="0"/>
+ <xs:element name="allow-alter" type="xs:boolean" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/dataroles.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/dataroles.xml 2011-05-02 17:02:28 UTC (rev 3134)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/dataroles.xml 2011-05-02 18:34:41 UTC (rev 3135)
@@ -73,16 +73,20 @@
</orderedlist>
<orderedlist>
- <para>To process a <emphasis>EXEC</emphasis> statement, the user account requires the following access rights:</para>
- <listitem> <para><emphasis>READ</emphasis> - on the Procedure being executed.</para></listitem>
+ <para>To process a <emphasis>EXEC/CALL</emphasis> statement, the user account requires the following access rights:</para>
+ <listitem> <para><emphasis>EXECUTE (or READ)</emphasis> - on the Procedure being executed.</para></listitem>
</orderedlist>
<orderedlist>
<para>To process any function, the user account requires the following access rights:</para>
- <listitem> <para><emphasis>READ</emphasis> - on the Function being called.</para> </listitem>
- <note><para>For backwards compatibility RuntimeEngineDeployer.allowFunctionCallsByDefault located in the &jboss-beans; file in the <code>RuntimeEngineDeployer</code> section defaults to true.
- This means that to actually require permissions for functions, you need to set this property to false.</para></note>
+ <listitem> <para><emphasis>EXECUTE (or READ)</emphasis> - on the Function being called.</para> <note><para>For backwards compatibility RuntimeEngineDeployer.allowFunctionCallsByDefault located in the &jboss-beans; file in the <code>RuntimeEngineDeployer</code> section defaults to true.
+ This means that to actually require permissions for functions, you need to set this property to false.</para></note></listitem>
</orderedlist>
+
+ <orderedlist>
+ <para>To process any ALTER or CREATE TRIGGER statement, the user account requires the following access rights:</para>
+ <listitem> <para><emphasis>ALTER</emphasis> - on the view or procedure that is effected. INSTEAD OF Triggers (update procedures) are not yet treated as full schema objects and are instead treated as attributes of the view.</para></listitem>
+ </orderedlist>
</section>
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/AuthorizationValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/AuthorizationValidationVisitor.java 2011-05-02 17:02:28 UTC (rev 3134)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/AuthorizationValidationVisitor.java 2011-05-02 18:34:41 UTC (rev 3135)
@@ -51,6 +51,9 @@
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.resolver.util.ResolverUtil;
import org.teiid.query.sql.LanguageObject;
+import org.teiid.query.sql.lang.AlterProcedure;
+import org.teiid.query.sql.lang.AlterTrigger;
+import org.teiid.query.sql.lang.AlterView;
import org.teiid.query.sql.lang.Create;
import org.teiid.query.sql.lang.Delete;
import org.teiid.query.sql.lang.Drop;
@@ -78,6 +81,7 @@
UPDATE,
DELETE,
FUNCTION,
+ ALTER,
STORED_PROCEDURE;
}
@@ -108,6 +112,21 @@
Collection<GroupSymbol> symbols = Arrays.asList(obj.getTable());
validateTemp(resources, symbols, Context.CREATE);
}
+
+ @Override
+ public void visit(AlterProcedure obj) {
+ validateEntitlements(Arrays.asList(obj.getTarget()), DataPolicy.PermissionType.ALTER, Context.ALTER);
+ }
+
+ @Override
+ public void visit(AlterTrigger obj) {
+ validateEntitlements(Arrays.asList(obj.getTarget()), DataPolicy.PermissionType.ALTER, obj.isCreate()?Context.CREATE:Context.ALTER);
+ }
+
+ @Override
+ public void visit(AlterView obj) {
+ validateEntitlements(Arrays.asList(obj.getTarget()), DataPolicy.PermissionType.ALTER, Context.ALTER);
+ }
private void validateTemp(Set<String> resources,
Collection<GroupSymbol> symbols, Context context) {
@@ -190,7 +209,7 @@
if (schema != null && !isSystemSchema(schema)) {
Map<String, Function> map = new HashMap<String, Function>();
map.put(schema + '.' + obj.getFunctionDescriptor().getName(), obj);
- validateEntitlements(PermissionType.READ, Context.FUNCTION, map);
+ validateEntitlements(PermissionType.EXECUTE, Context.FUNCTION, map);
}
}
}
@@ -212,12 +231,15 @@
*/
protected void validateEntitlements(Update obj) {
// Check that all elements used in criteria have read permission
+ HashSet<ElementSymbol> elements = new HashSet<ElementSymbol>();
+ ElementCollectorVisitor.getElements(obj.getChangeList().getClauseMap().values(), elements);
if (obj.getCriteria() != null) {
- validateEntitlements(
- ElementCollectorVisitor.getElements(obj.getCriteria(), true),
+ ElementCollectorVisitor.getElements(obj.getCriteria(), elements);
+ }
+ validateEntitlements(
+ elements,
DataPolicy.PermissionType.READ,
Context.UPDATE);
- }
// The variables from the changes must be checked for UPDATE entitlement
// validateEntitlements on all the variables used in the update.
@@ -278,7 +300,7 @@
* Validate query entitlements
*/
protected void validateEntitlements(StoredProcedure obj) {
- validateEntitlements(Arrays.asList(obj.getGroup()), DataPolicy.PermissionType.READ, Context.STORED_PROCEDURE);
+ validateEntitlements(Arrays.asList(obj.getGroup()), DataPolicy.PermissionType.EXECUTE, Context.STORED_PROCEDURE);
}
/**
Modified: trunk/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java 2011-05-02 17:02:28 UTC (rev 3134)
+++ trunk/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java 2011-05-02 18:34:41 UTC (rev 3135)
@@ -674,7 +674,9 @@
public void visit(AlterProcedure obj) {
preVisitVisitor(obj);
visitNode(obj.getTarget());
- visitNode(obj.getDefinition());
+ if (deep) {
+ visitNode(obj.getDefinition());
+ }
postVisitVisitor(obj);
}
@@ -682,7 +684,9 @@
public void visit(AlterTrigger obj) {
preVisitVisitor(obj);
visitNode(obj.getTarget());
- visitNode(obj.getDefinition());
+ if (deep) {
+ visitNode(obj.getDefinition());
+ }
postVisitVisitor(obj);
}
@@ -690,7 +694,9 @@
public void visit(AlterView obj) {
preVisitVisitor(obj);
visitNode(obj.getTarget());
- visitNode(obj.getDefinition());
+ if (deep) {
+ visitNode(obj.getDefinition());
+ }
postVisitVisitor(obj);
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/visitor/CommandCollectorVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/visitor/CommandCollectorVisitor.java 2011-05-02 17:02:28 UTC (rev 3134)
+++ trunk/engine/src/main/java/org/teiid/query/sql/visitor/CommandCollectorVisitor.java 2011-05-02 18:34:41 UTC (rev 3135)
@@ -27,9 +27,6 @@
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
-import org.teiid.query.sql.lang.AlterProcedure;
-import org.teiid.query.sql.lang.AlterTrigger;
-import org.teiid.query.sql.lang.AlterView;
import org.teiid.query.sql.lang.BatchedUpdateCommand;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.ExistsCriteria;
@@ -119,23 +116,6 @@
this.commands.addAll(obj.getUpdateCommands());
}
- @Override
- public void visit(AlterProcedure alterProcedure) {
- this.commands.add(alterProcedure.getDefinition());
- }
-
- @Override
- public void visit(AlterTrigger alterTrigger) {
- if (alterTrigger.getDefinition() != null) {
- this.commands.add(alterTrigger.getDefinition());
- }
- }
-
- @Override
- public void visit(AlterView alterView) {
- this.commands.add(alterView.getDefinition());
- }
-
/**
* Helper to quickly get the commands from obj
* @param obj Language object
Modified: trunk/engine/src/main/java/org/teiid/query/validator/AbstractValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/AbstractValidationVisitor.java 2011-05-02 17:02:28 UTC (rev 3134)
+++ trunk/engine/src/main/java/org/teiid/query/validator/AbstractValidationVisitor.java 2011-05-02 18:34:41 UTC (rev 3135)
@@ -45,7 +45,7 @@
private LanguageObject exceptionObject;
// Validation error handling
- private ValidatorReport report;
+ protected ValidatorReport report;
private QueryMetadataInterface metadata;
Modified: trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2011-05-02 17:02:28 UTC (rev 3134)
+++ trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2011-05-02 18:34:41 UTC (rev 3135)
@@ -1434,6 +1434,7 @@
public void visit(AlterView obj) {
try {
QueryResolver.validateProjectedSymbols(obj.getTarget(), getMetadata(), obj.getDefinition());
+ Validator.validate(obj.getDefinition(), getMetadata(), this);
} catch (QueryValidatorException e) {
handleValidationError(e.getMessage(), obj.getDefinition());
} catch (TeiidComponentException e) {
@@ -1449,6 +1450,7 @@
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.not_a_procedure", gs), gs); //$NON-NLS-1$
return;
}
+ Validator.validate(obj.getDefinition(), getMetadata(), this);
StoredProcedureInfo info = getMetadata().getStoredProcedureInfoForProcedure(gs.getName());
for (SPParameter param : info.getParameters()) {
if (param.getParameterType() == SPParameter.RESULT_SET) {
@@ -1466,6 +1468,13 @@
@Override
public void visit(AlterTrigger obj) {
validateGroupSupportsUpdate(obj.getTarget());
+ try {
+ if (obj.getDefinition() != null) {
+ Validator.validate(obj.getDefinition(), getMetadata(), this);
+ }
+ } catch (TeiidComponentException e) {
+ handleException(e);
+ }
}
//TODO: it may be simpler to catch this in the parser
Modified: trunk/engine/src/main/java/org/teiid/query/validator/Validator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/Validator.java 2011-05-02 17:02:28 UTC (rev 3134)
+++ trunk/engine/src/main/java/org/teiid/query/validator/Validator.java 2011-05-02 18:34:41 UTC (rev 3135)
@@ -51,9 +51,9 @@
// Construct combined runtime / query metadata if necessary
if(object instanceof Command) {
// Recursively validate subcommands
- Iterator iter = CommandCollectorVisitor.getCommands((Command)object).iterator();
+ Iterator<Command> iter = CommandCollectorVisitor.getCommands((Command)object).iterator();
while(iter.hasNext()) {
- Command subCommand = (Command) iter.next();
+ Command subCommand = iter.next();
validate(subCommand, metadata, visitor);
}
}
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestAuthorizationValidationVisitor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestAuthorizationValidationVisitor.java 2011-05-02 17:02:28 UTC (rev 3134)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestAuthorizationValidationVisitor.java 2011-05-02 18:34:41 UTC (rev 3135)
@@ -51,6 +51,7 @@
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.unittest.FakeMetadataFacade;
import org.teiid.query.unittest.FakeMetadataFactory;
+import org.teiid.query.unittest.RealMetadataFactory;
import org.teiid.query.validator.Validator;
import org.teiid.query.validator.ValidatorFailure;
import org.teiid.query.validator.ValidatorReport;
@@ -76,6 +77,12 @@
case UPDATE:
p.setAllowUpdate(flag);
break;
+ case ALTER:
+ p.setAllowAlter(flag);
+ break;
+ case EXECUTE:
+ p.setAllowExecute(flag);
+ break;
}
return p;
}
@@ -149,6 +156,13 @@
svc.setAllowCreateTemporaryTables(false);
return svc;
}
+
+ private DataPolicyMetadata examplePolicyBQT() {
+ DataPolicyMetadata svc = new DataPolicyMetadata();
+ svc.setName("test"); //$NON-NLS-1$
+ svc.addPermission(addResource(DataPolicy.PermissionType.ALTER, "VQT.SmallA_2589")); //$NON-NLS-1$
+ return svc;
+ }
private void helpTest(DataPolicyMetadata policy, String sql, QueryMetadataInterface metadata, String[] expectedInaccesible, VDBMetaData vdb) throws QueryParserException, QueryResolverException, TeiidComponentException {
QueryParser parser = QueryParser.getQueryParser();
@@ -236,6 +250,10 @@
@Test public void testUpdateCriteriaInaccessibleForRead() throws Exception {
helpTest(exampleAuthSvc1(), "UPDATE pm1.g2 SET e2 = 5 WHERE e1 = 'x'", FakeMetadataFactory.example1Cached(), new String[] {"pm1.g2.e1"}, FakeMetadataFactory.example1VDB()); //$NON-NLS-1$ //$NON-NLS-2$
}
+
+ @Test public void testUpdateCriteriaInaccessibleForRead1() throws Exception {
+ helpTest(exampleAuthSvc1(), "UPDATE pm1.g2 SET e2 = cast(e1 as integer)", FakeMetadataFactory.example1Cached(), new String[] {"pm1.g2.e1"}, FakeMetadataFactory.example1VDB()); //$NON-NLS-1$ //$NON-NLS-2$
+ }
@Test public void testUpdateElementInaccessibleForUpdate() throws Exception {
helpTest(exampleAuthSvc1(), "UPDATE pm1.g1 SET e1 = 5 WHERE e1 = 'x'", FakeMetadataFactory.example1Cached(), new String[] {"pm1.g1.e1"}, FakeMetadataFactory.example1VDB()); //$NON-NLS-1$ //$NON-NLS-2$
@@ -293,6 +311,14 @@
helpTest(exampleAuthSvc1(), "select * from xmltest.doc1", FakeMetadataFactory.example1Cached(), new String[] {"xmltest.doc1"}, FakeMetadataFactory.example1VDB()); //$NON-NLS-1$ //$NON-NLS-2$
}
+ @Test public void testAlter() throws Exception {
+ helpTest(exampleAuthSvc1(), "alter view SmallA_2589 as select * from bqt1.smalla", RealMetadataFactory.exampleBQTCached(), new String[] {"SmallA_2589"}, FakeMetadataFactory.exampleBQTVDB()); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(examplePolicyBQT(), "alter view SmallA_2589 as select * from bqt1.smalla", RealMetadataFactory.exampleBQTCached(), new String[] {}, FakeMetadataFactory.exampleBQTVDB()); //$NON-NLS-1$ //$NON-NLS-2$
+
+ helpTest(exampleAuthSvc1(), "alter trigger on SmallA_2589 INSTEAD OF UPDATE enabled", RealMetadataFactory.exampleBQTCached(), new String[] {"SmallA_2589"}, FakeMetadataFactory.exampleBQTVDB()); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(examplePolicyBQT(), "alter trigger on SmallA_2589 INSTEAD OF UPDATE enabled", RealMetadataFactory.exampleBQTCached(), new String[] {}, FakeMetadataFactory.exampleBQTVDB()); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
private void helpTestLookupVisibility(boolean visible) throws QueryParserException, QueryValidatorException, TeiidComponentException {
VDBMetaData vdb = FakeMetadataFactory.example1VDB();
vdb.getModel("pm1").setVisible(visible); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/org/teiid/query/validator/TestAlterValidation.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/validator/TestAlterValidation.java 2011-05-02 17:02:28 UTC (rev 3134)
+++ trunk/engine/src/test/java/org/teiid/query/validator/TestAlterValidation.java 2011-05-02 18:34:41 UTC (rev 3135)
@@ -31,10 +31,15 @@
@Test public void testValidateAlterView() {
TestValidator.helpValidate("alter view SmallA_2589 as select 2", new String[] {"SELECT 2"}, RealMetadataFactory.exampleBQTCached());
TestValidator.helpValidate("alter view Defect15355 as select 'a', 1", new String[] {"SELECT 'a', 1"}, RealMetadataFactory.exampleBQTCached());
+ TestValidator.helpValidate("alter view Defect15355 as select 'a', cast(1 as biginteger)", new String[] {}, RealMetadataFactory.exampleBQTCached());
TestValidator.helpValidate("alter view SmallA_2589 as select * from bqt1.smalla", new String[] {}, RealMetadataFactory.exampleBQTCached());
}
+ @Test public void testValidateAlterViewDeep() {
+ TestValidator.helpValidate("alter view Defect15355 as select xpathvalue('a', ':'), cast(1 as biginteger)", new String[] {"xpathvalue('a', ':')"}, RealMetadataFactory.exampleBQTCached());
+ }
+
@Test public void testValidateAlterTrigger() {
TestValidator.helpValidate("alter trigger on SmallA_2589 instead of insert as for each row select 1;", new String[] {"SmallA_2589"}, RealMetadataFactory.exampleBQTCached());
}
13 years, 7 months
teiid SVN: r3134 - in trunk: api/src/main/java/org/teiid/events and 36 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-05-02 13:02:28 -0400 (Mon, 02 May 2011)
New Revision: 3134
Added:
trunk/documentation/reference/src/main/docbook/en-US/content/ddl_support.xml
trunk/engine/src/main/java/org/teiid/query/optimizer/DdlPlanner.java
trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java
Modified:
trunk/adminshell/src/main/java/org/teiid/script/io/ResultSetReader.java
trunk/api/src/main/java/org/teiid/events/EventDistributor.java
trunk/api/src/main/java/org/teiid/language/SQLConstants.java
trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java
trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java
trunk/api/src/main/java/org/teiid/metadata/Table.java
trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml
trunk/build/kits/jboss-container/teiid-releasenotes.html
trunk/client/src/test/java/org/teiid/jdbc/util/ResultSetUtil.java
trunk/console/src/main/resources/META-INF/rhq-plugin.xml
trunk/documentation/admin-guide/src/main/docbook/en-US/content/performance.xml
trunk/documentation/docbook/custom.dtd
trunk/documentation/reference/src/main/docbook/en-US/Reference.xml
trunk/documentation/reference/src/main/docbook/en-US/content/procedures.xml
trunk/documentation/reference/src/main/docbook/en-US/content/sql_support.xml
trunk/documentation/reference/src/main/docbook/en-US/content/system_schema.xml
trunk/engine/src/main/java/org/teiid/cache/CacheConfiguration.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
trunk/engine/src/main/java/org/teiid/query/metadata/TransformationMetadata.java
trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
trunk/engine/src/main/java/org/teiid/query/processor/ProcessorDataManager.java
trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/AlterResolver.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterTrigger.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/CommandCollectorVisitor.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java
trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java
trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableStore.java
trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
trunk/engine/src/main/resources/org/teiid/query/i18n.properties
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java
trunk/engine/src/test/java/org/teiid/query/optimizer/proc/TestProcedurePlanner.java
trunk/engine/src/test/java/org/teiid/query/parser/TestParseAlter.java
trunk/engine/src/test/java/org/teiid/query/processor/FakeDataManager.java
trunk/engine/src/test/java/org/teiid/query/processor/HardcodedDataManager.java
trunk/engine/src/test/java/org/teiid/query/processor/relational/TestBatchedUpdateNode.java
trunk/engine/src/test/java/org/teiid/query/processor/relational/TestProjectIntoNode.java
trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java
trunk/metadata/src/main/resources/System.vdb
trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestMetadataUpdates.java
trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestSystemVirtualModel.java
trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetColumns.expected
trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetProcedureColumns.expected
trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetProcedures.expected
trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetProceduresWithEscape.expected
trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_ATTRIBUTE.expected
trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testColumns.expected
trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testProcedureColumns.expected
trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testProcedures.expected
trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testColumns.expected
trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedureParams.expected
trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedures.expected
Log:
TEIID-1326 adding alter commands for runtime update of metadata
Modified: trunk/adminshell/src/main/java/org/teiid/script/io/ResultSetReader.java
===================================================================
--- trunk/adminshell/src/main/java/org/teiid/script/io/ResultSetReader.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/adminshell/src/main/java/org/teiid/script/io/ResultSetReader.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -111,7 +111,7 @@
for (int col = 1; col <= columnCount; col++) {
Object anObj = source.getObject(col);
if (columnTypes[col-1] == Types.CLOB) {
- sb.append(anObj != null ? anObj : "null"); //$NON-NLS-1$
+ sb.append(anObj != null ? source.getString(col) : "null"); //$NON-NLS-1$
}
else if (columnTypes[col-1] == Types.BLOB) {
sb.append(anObj != null ? "BLOB" : "null"); //$NON-NLS-1$ //$NON-NLS-2$
Modified: trunk/api/src/main/java/org/teiid/events/EventDistributor.java
===================================================================
--- trunk/api/src/main/java/org/teiid/events/EventDistributor.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/api/src/main/java/org/teiid/events/EventDistributor.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -25,6 +25,7 @@
import java.util.List;
import org.teiid.metadata.ColumnStats;
+import org.teiid.metadata.Table;
import org.teiid.metadata.TableStats;
/**
@@ -47,15 +48,6 @@
void updateMatViewRow(String vdbName, int vdbVersion, String schema, String viewName, List<?> tuple, boolean delete);
/**
- * Notify that the metadata has been changed for the given table or view.
- * @param vdbName
- * @param vdbVersion
- * @param schema
- * @param objectNames
- */
- void schemaModification(String vdbName, int vdbVersion, String schema, String... objectNames);
-
- /**
* Notify that the table data has changed.
* @param vdbName
* @param vdbVersion
@@ -64,10 +56,69 @@
*/
void dataModification(String vdbName, int vdbVersion, String schema, String... tableNames);
+ /**
+ * Set the column stats
+ * @param vdbName
+ * @param vdbVersion
+ * @param schemaName
+ * @param tableName
+ * @param columnName
+ * @param stats
+ */
void setColumnStats(String vdbName, int vdbVersion, String schemaName,
String tableName, String columnName, ColumnStats stats);
+ /**
+ * Set the table stats
+ * @param vdbName
+ * @param vdbVersion
+ * @param schemaName
+ * @param tableName
+ * @param stats
+ */
void setTableStats(String vdbName, int vdbVersion, String schemaName,
String tableName, TableStats stats);
+ /**
+ * Set the given property value
+ * @param vdbName
+ * @param vdbVersion
+ * @param uuid
+ * @param name
+ * @param value
+ */
+ void setProperty(String vdbName, int vdbVersion, String uuid, String name, String value);
+
+ /**
+ * Set the instead of trigger definition. Only one of either the triggerDefinition or enabled should be specified.
+ * @param vdbName
+ * @param vdbVersion
+ * @param schema
+ * @param viewName
+ * @param triggerEvent
+ * @param triggerDefinition
+ * @param enabled
+ */
+ void setInsteadOfTriggerDefinition(String vdbName, int vdbVersion, String schema, String viewName, Table.TriggerEvent triggerEvent, String triggerDefinition, Boolean enabled);
+
+ /**
+ * Set the procedure definition
+ * @param vdbName
+ * @param vdbVersion
+ * @param schema
+ * @param procName
+ * @param definition
+ */
+ void setProcedureDefinition(String vdbName, int vdbVersion, String schema, String procName, String definition);
+
+ /**
+ * Set the view definition
+ * @param vdbName
+ * @param vdbVersion
+ * @param schema
+ * @param viewName
+ * @param definition
+ */
+ void setViewDefinition(String vdbName, int vdbVersion, String schema, String viewName, String definition);
+
}
Modified: trunk/api/src/main/java/org/teiid/language/SQLConstants.java
===================================================================
--- trunk/api/src/main/java/org/teiid/language/SQLConstants.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/api/src/main/java/org/teiid/language/SQLConstants.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -109,6 +109,8 @@
public static final String VIEW = "VIEW"; //$NON-NLS-1$
public static final String INSTEAD = "INSTEAD"; //$NON-NLS-1$
+ public static final String ENABLED = "ENABLED"; //$NON-NLS-1$
+ public static final String DISABLED = "DISABLED"; //$NON-NLS-1$
}
public interface Reserved {
Modified: trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -129,13 +129,19 @@
/**
* The preferred setter for extension properties.
* @param key
- * @param value
+ * @param value, if null the property will be removed
*/
- public void setProperty(String key, String value) {
+ public String setProperty(String key, String value) {
+ if (value == null) {
+ if (this.properties == null) {
+ return null;
+ }
+ return this.properties.remove(key);
+ }
if (this.properties == null) {
this.properties = new LinkedHashMap<String, String>();
}
- this.properties.put(DataTypeManager.getCanonicalString(key), DataTypeManager.getCanonicalString(value));
+ return this.properties.put(DataTypeManager.getCanonicalString(key), DataTypeManager.getCanonicalString(value));
}
public void setProperties(LinkedHashMap<String, String> properties) {
Modified: trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/api/src/main/java/org/teiid/metadata/MetadataRepository.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -21,6 +21,7 @@
*/
package org.teiid.metadata;
+import java.util.LinkedHashMap;
/**
* A hook for externalizing view, procedure, and other metadata.
@@ -46,7 +47,7 @@
* Returns an updated trigger definition (FOR EACH ROW ...) or null if the current view definition should be used
* should be used.
*/
- String getInsteadOfTriggerDefinition(String vdbName, int vdbVersion, Table table, Table.TriggerOperation triggerOperation);
+ String getInsteadOfTriggerDefinition(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation);
/**
*
@@ -56,9 +57,29 @@
* @param triggerOperation
* @param triggerDefinition
*/
- void setInsteadOfTriggerDefinition(String vdbName, int vdbVersion, Table table, Table.TriggerOperation triggerOperation, String triggerDefinition);
+ void setInsteadOfTriggerDefinition(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation, String triggerDefinition);
+
+ /**
+ * Returns whether the trigger is enabled
+ * @param vdbName
+ * @param vdbVersion
+ * @param table
+ * @param triggerOperation
+ * @return
+ */
+ boolean isInsteadOfTriggerEnabled(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation);
/**
+ * Set the given trigger enabled.
+ * @param vdbName
+ * @param vdbVersion
+ * @param table
+ * @param triggerOperation
+ * @param enabled
+ */
+ void setInsteadOfTriggerEnabled(String vdbName, int vdbVersion, Table table, Table.TriggerEvent triggerOperation, boolean enabled);
+
+ /**
* Returns an updated procedure definition (CREATE PROCEDURE ...) or null if the current procedure definition should be used
* should be used.
*/
@@ -71,7 +92,7 @@
* @param table
* @param procedureDefinition
*/
- void setProcedureDefinition(String vdbName, int vdbVersion, Procedure table, String procedureDefinition);
+ void setProcedureDefinition(String vdbName, int vdbVersion, Procedure procedure, String procedureDefinition);
/**
* Get updated {@link TableStats} for the given table
@@ -108,4 +129,23 @@
* @param columnStats
*/
void setColumnStats(String vdbName, int vdbVersion, Column column, ColumnStats columnStats);
+
+ /**
+ * Get the extension metadata for a given record.
+ * @param vdbName
+ * @param vdbVersion
+ * @param record
+ * @return
+ */
+ LinkedHashMap<String, String> getProperties(String vdbName, int vdbVersion, AbstractMetadataRecord record);
+
+ /**
+ * Set an extension metadata property for a given record.
+ * @param vdbName
+ * @param vdbVersion
+ * @param record
+ * @param name
+ * @param value
+ */
+ void setProperty(String vdbName, int vdbVersion, AbstractMetadataRecord record, String name, String value);
}
Modified: trunk/api/src/main/java/org/teiid/metadata/Table.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/Table.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/api/src/main/java/org/teiid/metadata/Table.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -41,7 +41,7 @@
MaterializedTable
}
- public static enum TriggerOperation {
+ public static enum TriggerEvent {
INSERT,
UPDATE,
DELETE
@@ -64,6 +64,9 @@
private String insertPlan;
private String updatePlan;
private String deletePlan;
+ private boolean insertPlanEnabled;
+ private boolean updatePlanEnabled;
+ private boolean deletePlanEnabled;
private Table materializedStageTable;
private Table materializedTable;
@@ -179,14 +182,17 @@
public void setInsertPlan(String insertPlan) {
this.insertPlan = DataTypeManager.getCanonicalString(insertPlan);
+ this.insertPlanEnabled = true;
}
public void setUpdatePlan(String updatePlan) {
this.updatePlan = DataTypeManager.getCanonicalString(updatePlan);
+ this.updatePlanEnabled = true;
}
public void setDeletePlan(String deletePlan) {
this.deletePlan = DataTypeManager.getCanonicalString(deletePlan);
+ this.deletePlanEnabled = true;
}
public List<ForeignKey> getForeignKeys() {
@@ -301,4 +307,28 @@
}
}
+ public boolean isDeletePlanEnabled() {
+ return deletePlanEnabled;
+ }
+
+ public boolean isInsertPlanEnabled() {
+ return insertPlanEnabled;
+ }
+
+ public boolean isUpdatePlanEnabled() {
+ return updatePlanEnabled;
+ }
+
+ public void setInsertPlanEnabled(boolean insertPlanEnabled) {
+ this.insertPlanEnabled = insertPlanEnabled;
+ }
+
+ public void setDeletePlanEnabled(boolean deletePlanEnabled) {
+ this.deletePlanEnabled = deletePlanEnabled;
+ }
+
+ public void setUpdatePlanEnabled(boolean updatePlanEnabled) {
+ this.updatePlanEnabled = updatePlanEnabled;
+ }
+
}
\ No newline at end of file
Modified: trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml
===================================================================
--- trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml 2011-05-02 17:02:28 UTC (rev 3134)
@@ -79,9 +79,9 @@
<property name="maxEntries">512</property>
<!-- Max age in seconds (default 28800 - 8 hours) -->
<property name="maxAgeInSeconds">28800</property>
- <!-- Max staleness in seconds. Modifications are based upon costing updates
- -1 indicates no max. (default 300 - 5 minutes) -->
- <property name="maxStaleness">300</property>
+ <!-- Max staleness in seconds. Modifications are based upon costing/metadata updates
+ -1 indicates no max. (default 0) -->
+ <property name="maxStaleness">0</property>
</bean>
<bean name="RuntimeEngineDeployer" class="org.teiid.jboss.deployers.RuntimeEngineDeployer">
@@ -127,12 +127,14 @@
<property name="queryThresholdInSecs">600</property>
<!-- Maximum rows allowed from a source query. -1 indicates no limit. (default -1)-->
<property name="maxSourceRows">-1</property>
- <!-- Indicates if an exception should be thrown if the specified value for Maximum Source Rows is exceeded; only up to the maximum rows will be consumed. -->
+ <!-- Indicates if an exception should be thrown if the specified value for Maximum Source Rows is exceeded; only up to the maximum rows will be consumed. (default true) -->
<property name="exceptionOnMaxSourceRows">true</property>
<!-- Maximum size of lob allowed through ODBC connection in bytes (default 5MB) -->
<property name="maxODBCLobSizeAllowed">5242880</property>
<!-- The JNDI name of the Teiid Event Distributor -->
<property name="eventDistributorName">teiid/event-distributor</property>
+ <!-- Set to true for the engine to detect local change events. Should be disabled if using external change data capture tools. (default true) -->
+ <property name="detectingChangeEvents">true</property>
</bean>
<!-- JDBC Socket connection properties (SSL see below) -->
Modified: trunk/build/kits/jboss-container/teiid-releasenotes.html
===================================================================
--- trunk/build/kits/jboss-container/teiid-releasenotes.html 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/build/kits/jboss-container/teiid-releasenotes.html 2011-05-02 17:02:28 UTC (rev 3134)
@@ -53,6 +53,9 @@
<LI><B>Enhanced Sort Join</B> - the partitioned merge join was replaced with an enhanced sort join. The enhanced sort join will use the actual row counts from each side of the relation to perform a index based join if one side is small enough, a partial sort of the larger side and a repeated merge join if the tuples are unbalanced but one side is not small enough to form an index, or a standard sort merge join if the tuples are balanced.
<LI><B>JDK1.5 JDBC Client JAR</B> - A retro-translated Teiid client JDBC jar now available to use with JDK 1.5 VM. Note only the JDBC API is supported, not the Admin API, or retrieving query plans as XML.
<LI><B>Security Improvements</B> - UDF and pushdown functions can now be protected with data roles. Also the CommandContext can provide the Subject for custom security checks in UDFs.
+ <LI><B>Cache Invalidation</B> - Prepared plan and result set caches can have a maxStaleness value, which will invalidate entries based upon metadata and data changes respectively. See the Admin Guide for more.
+ <LI><B>Runtime-updates of Metadata</B> - Alter statements have been added to change view/procedure/INSTEAD OF trigger (update procedure) definitions have been added. A create statement was also added to add INSTEAD OF trigger (update procedures) to views.
+ System procedures were added to set extension metadata and stat values. By default all effects of metadata updates happen only on running vdbs across the cluster. To make the changes persistent see the Developers Guide Runtime Updates section.
</UL>
<h2><a name="Compatibility">Compatibility Issues</a></h2>
@@ -63,6 +66,7 @@
<h4>from 7.3</h4>
<ul>
+ <li>SYS.PROPERTIES has a new column, ClobValue, to get values exceeding the max string length
<li>SYS.COLUMNS has two new columns to get statistical information: DistinctCount and NullCount
<li>ARRAY_AGG is now a reserved word</li>
<li>The use of an IN procedure parameter with the name "source_name" in a multi-source model, will now be treated the parameter that controls which source
@@ -123,6 +127,7 @@
<h4>from 7.3</h4>
<ul>
+ <LI>The prepared plan cache is now configured via the PreparedPlanCacheConfig bean, rather than through properties on the RuntimeEngineDeployer
<LI>SocketConfiguration.maxSocketThreads will interpret a setting of 0 to mean use the system default of max available processors. Both the ODBC and JDBC transports now default to the 0 setting.
<LI>maxReserveBatchColumns and maxProcessingBatchesColumns will interpret a setting of -1 to mean auto-calculate acceptable values given the max heap and other information. See the admin guide for more.
<LI>The default for org.teiid.useValueCache has changed to false, since typical installations will not greatly benefit from the additional lookup cost.
Modified: trunk/client/src/test/java/org/teiid/jdbc/util/ResultSetUtil.java
===================================================================
--- trunk/client/src/test/java/org/teiid/jdbc/util/ResultSetUtil.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/client/src/test/java/org/teiid/jdbc/util/ResultSetUtil.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -46,6 +46,7 @@
/**
* @since 4.2
*/
+@SuppressWarnings("nls")
public class ResultSetUtil {
public static final int DEFAULT_MAX_COL_WIDTH = 29;
Modified: trunk/console/src/main/resources/META-INF/rhq-plugin.xml
===================================================================
--- trunk/console/src/main/resources/META-INF/rhq-plugin.xml 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/console/src/main/resources/META-INF/rhq-plugin.xml 2011-05-02 17:02:28 UTC (rev 3134)
@@ -369,7 +369,7 @@
required="false" readOnly="false" />
<c:simple-property name="PreparedPlanCacheConfig.maxStaleness"
displayName="Max Entry Staleness"
- description="The maximum staleness of a prepared plan cache entry in seconds based upon costing modifications. -1 indicates no max. (default 300)"
+ description="The maximum staleness of a prepared plan cache entry in seconds based upon metadata modifications. -1 indicates no max. (default 0)"
required="false" readOnly="false" />
</c:group>
Modified: trunk/documentation/admin-guide/src/main/docbook/en-US/content/performance.xml
===================================================================
--- trunk/documentation/admin-guide/src/main/docbook/en-US/content/performance.xml 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/documentation/admin-guide/src/main/docbook/en-US/content/performance.xml 2011-05-02 17:02:28 UTC (rev 3134)
@@ -96,10 +96,15 @@
Even though it is possible to disable or otherwise severely constrain these caches, this would probably never be done in practice as it would lead to poor performance.
</para><para>Cache statistics can be obtained through the Admin Console or Adminshell. The statistics can be used to help tune cache parameters and ensure a hit ratio.</para>
<para>Plans are currently fully held in memory and may have a significant memory footprint. When making extensive use of prepared statements and/or virtual procedures,
- the size of the plan cache may be increased proportionally to number of GB intended for use by Teiid.
+ the size of the plan cache may be increased proportionally to number of gigabytes intended for use by Teiid.
</para><para>While the result cache parameters control the cache result entries (max number, eviction, etc.), the result batches themselves are accessed through the <link linkend="memory_management">BufferManager</link>.
If the size of the result cache is increased, you may need to tune the BufferManager configuration to ensure there is enough buffer space.
</para>
+ <para>Result set and prepared plan caches have their entries invalidated by data and metadata events.
+ By default these events are captured by running commands through Teiid. See the Developers Guide for further customization.
+ Teiid stores compiled forms of update plans or trigger actions with the prepared plan, so it is recommended to leave the maxStaleness of the prepared plan cache set to 0 so that metadata changes, for example disabling a trigger, may take effect immediately.
+ The default staleness for result set caching is 60 seconds to improve efficiency with rapidly changing sources. Consider decreasing this value to make the result set cache more consistent with the underlying data. Even with a setting of 0 full transactional consistency is not guaranteed.
+ </para>
</section>
<section id="socket_transport">
<title>Socket Transports</title>
Modified: trunk/documentation/docbook/custom.dtd
===================================================================
--- trunk/documentation/docbook/custom.dtd 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/documentation/docbook/custom.dtd 2011-05-02 17:02:28 UTC (rev 3134)
@@ -6,3 +6,4 @@
<!ENTITY javaDocUrl "http://docs.jboss.org/teiid/&versionNumber;/apidocs">
<!ENTITY desDocUrl "http://www.jboss.org/teiiddesigner/docs.html">
<!ENTITY jboss-beans "<code><jboss-install>/server/<profile>/deploy/teiid/teiid-jboss-beans.xml</code>">
+<!ENTITY metadata-update-note "<note><para>A <code>MetadataRepository</code> must be configured to make a non-temporary metadata update persistent. See the Developers Guide Runtime Updates section for more.</para></note>">
Modified: trunk/documentation/reference/src/main/docbook/en-US/Reference.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/Reference.xml 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/documentation/reference/src/main/docbook/en-US/Reference.xml 2011-05-02 17:02:28 UTC (rev 3134)
@@ -48,6 +48,7 @@
<toc />
<xi:include href="content/preface.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/sql_support.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/ddl_support.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/xml_queries.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/datatypes.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/scalar_functions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
Added: trunk/documentation/reference/src/main/docbook/en-US/content/ddl_support.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/ddl_support.xml (rev 0)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/ddl_support.xml 2011-05-02 17:02:28 UTC (rev 3134)
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % CustomDTD SYSTEM "../../../../../../docbook/custom.dtd">
+%CustomDTD;
+]>
+<chapter id="ddl_support">
+ <title>DDL Support</title>
+ <para>Teiid supports a subset of DDL to, create/drop temporary tables and to manipulate procedure and view definitions at runtime.
+ It is not currently possible to arbitrarily drop/create non-temporary metadata entries.</para>
+ &metadata-update-note;
+ <section id="temp_tables">
+ <title>Temp Tables</title>
+ <para>Teiid supports creating temporary,or "temp", tables. Temp tables are dynamically created, but are treated as any other physical table.
+ </para>
+ <para>
+ Temp tables can be defined implicitly by referencing them in a
+ INSERT statement or explicitly with a CREATE TABLE
+ statement. Implicitly created temp tables must have a name that
+ starts with '#'.
+ </para>
+ <itemizedlist>
+ <para>Creation syntax:
+ </para>
+ <listitem>
+ <para>Explicit: CREATE LOCAL TEMPORARY TABLE x (column type [NOT NULL], ... [PRIMARY KEY (column, ...)])
+ </para>
+ </listitem>
+ <listitem>
+ <para>Implicit: INSERT INTO #x (column, ...) VALUES (value, ...)
+ </para>
+ <para>If #x doen't exist, it will be defined using the given column names and types from the value expressions.
+ </para>
+ </listitem>
+ <listitem>
+ <para>Implicit: INSERT INTO #x [(column, ...)] select c1, c2 from t
+ </para>
+ <para>If #x doesn't exist, it will be defined using the target column names (in not supplied, the column names will match the derived column names from the query), and the types from the query derived columns.
+ </para>
+ </listitem>
+ <listitem>
+ <para>Use the SERIAL data type to specify a NOT NULL and auto-incrementing INTEGER column. The starting value of a SERIAL column is 1.</para>
+ </listitem>
+ </itemizedlist>
+ <itemizedlist>
+ <para>Drop syntax:
+ </para>
+ <listitem>
+ <para>DROP TABLE x
+ </para>
+ </listitem>
+ </itemizedlist>
+ <itemizedlist>
+ <para>Primary Key Support</para>
+ <listitem>
+ <para>All key columns must be comparable.</para>
+ </listitem>
+ <listitem>
+ <para>Use of a primary key creates a clustered index that supports search improvements for comparison, in, like, and order by.</para>
+ </listitem>
+ <listitem>
+ <para>Null is an allowable primary key value, but there must be only 1 row that has an all null key.</para>
+ </listitem>
+ </itemizedlist>
+ <itemizedlist>
+ <para>Limitations:
+ </para>
+ <listitem>
+ <para>With the CREATE TABLE syntax only basic table definition (column name and type information) and an optional primary key are supported.
+ </para>
+ </listitem>
+ <listitem>
+ <para>The "ON COMMIT" clause is not supported in the CREATE TABLE statement.
+ </para>
+ </listitem>
+ <listitem>
+ <para>"drop behavior" option is not supported in the drop statement.
+ </para>
+ </listitem>
+ <listitem>
+ <para>Only local temporary tables are supported. This implies that the scope of temp table will be either to the sesssion or the block of a virtual procedure that creates it.
+ </para>
+ </listitem>
+ <listitem>
+ <para>Session level temp tables are not fail-over safe.
+ </para>
+ </listitem>
+ <listitem>
+ <para>Temp tables are non-transactional.
+ </para>
+ </listitem>
+ <listitem>
+ <para>Lob values (xml, clob, blob) are tracked by reference rather than by value in a temporary table.
+ Lob values from external sources that are inserted in a temporary table may become unreadable when the associated statement or connection is closed.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>The following example is a series of statements that loads a temporary table with data from 2 sources, and with a manually inserted record, and then uses that temp table in a subsequent query.</para>
+ <programlisting>...
+CREATE LOCAL TEMPORARY TABLE TEMP (a integer, b integer, c integer);
+SELECT * INTO temp FROM Src1; SELECT * INTO temp FROM Src2;
+INSERT INTO temp VALUES (1,2,3);
+SELECT a,b,c FROM Src3, temp WHERE Src3.a = temp.b;
+...</programlisting>
+ <para>
+ See <link linkend="virtual_procedures">virtual procedures</link> for more on temp table usage.
+ </para>
+ </section>
+ <section>
+ <title>Alter View</title>
+ <para>
+ Usage:
+ <synopsis label="Usage">ALTER VIEW name AS queryExpression</synopsis>
+ </para>
+ <itemizedlist>
+ <para>Syntax Rules:</para>
+ <listitem><para>The alter query expression may be prefixed with a cache hint for materialized view definitions. The hint will take effect the next time the materialized view table is loaded.</para></listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Alter Procedure</title>
+ <para>
+ Usage:
+ <synopsis label="Usage">ALTER PROCEDURE name AS block</synopsis>
+ </para>
+ <itemizedlist>
+ <para>Syntax Rules:</para>
+ <listitem><para>The alter block should not include 'CREATE VIRTUAL PROCEDURE'</para></listitem>
+ <listitem><para>The alter block may be prefixed with a cache hint for cached procedures.</para></listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Create Trigger</title>
+ <para>
+ Usage:
+ <synopsis label="Usage">CREATE TRIGGER ON name INSTEAD OF INSERT|UPDATE|DELETE AS FOR EACH ROW block</synopsis>
+ </para>
+ <itemizedlist>
+ <para>Syntax Rules:</para>
+ <listitem><para>The target, name, must be an updatable view.</para></listitem>
+ <listitem><para>An INSTEAD OF TRIGGER must not yet exist for the given event.</para></listitem>
+ <listitem><para>Triggers are not yet true schema objects. They are scoped only to their view and have no name.</para></listitem>
+ </itemizedlist>
+ <itemizedlist>
+ <para>Limitations:</para>
+ <listitem><para>There is no corresponding drop operation. See <xref linkend="alter_trigger"/> for enabling/disabling an existing trigger.</para></listitem>
+ </itemizedlist>
+ </section>
+ <section id="alter_trigger">
+ <title>Alter Trigger</title>
+ <para>
+ Usage:
+ <synopsis label="Usage">ALTER TRIGGER ON name INSTEAD OF INSERT|UPDATE|DELETE (AS FOR EACH ROW block) | (ENABLED|DISABLED)</synopsis>
+ </para>
+ <itemizedlist>
+ <para>Syntax Rules:</para>
+ <listitem><para>The target, name, must be an updatable view.</para></listitem>
+ <listitem><para>Triggers are not yet true schema objects. They are scoped only to their view and have no name.</para></listitem>
+ <listitem><para>An <xref linkend="update_procedures"/> must already exist for the given trigger event.</para></listitem>
+ </itemizedlist>
+ <note><para>If the default inherent update is choosen in Teiid Designer, any SQL associated with update (shown in a greyed out text box) is not part of the VDB and cannot be enabled with an alter trigger statement.</para></note>
+ </section>
+</chapter>
\ No newline at end of file
Property changes on: trunk/documentation/reference/src/main/docbook/en-US/content/ddl_support.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/procedures.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2011-05-02 17:02:28 UTC (rev 3134)
@@ -458,6 +458,19 @@
<para>A FOR EACH ROW procedure will evaluate its block for each row of the view affected by the update statement.
For UPDATE and DELETE statements this will be every row that passes the WHERE condition. For INSERT statements there will be 1 new row for each set of values from the VALUES or query expression.
The rows updated is reported as this number regardless of the affect of the underlying procedure logic.</para>
+ <para>Teiid FOR EACH ROW update procedures function like INSTEAD OF triggers in traditional databases.
+ There may only be 1 FOR EACH ROW procedure for each INSERT, UPDATE, or DELETE operation against a view. FOR EACH ROW update procedures can also be used to emulate BEFORE/AFTER each row triggers while still retaining the ability to perform an inherent update.
+ This BEFORE/AFTER trigger behavior with an inherent update can be achieved by creating an additional updatable view over the target view with update proceudres of the form:
+ <programlisting lang="sql">FOR EACH ROW
+ BEGIN
+ --before row logic
+
+ --default insert/update/delete against the target view
+ INSERT INTO VW (c1, c2, c3) VALUES (NEW.c1, NEW.c2, NEW.c3);
+
+ --after row logic
+ END</programlisting>
+ </para>
<section>
<title>Definition</title>
<para>
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/sql_support.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/sql_support.xml 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/sql_support.xml 2011-05-02 17:02:28 UTC (rev 3134)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="sql_support">
- <title>SQL Support</title>
+ <title>DML Support</title>
<para>
Teiid supports SQL for issuing queries and for defining view
transformations; see also <link linkend="procedure_language">Procedure Language</link>
@@ -651,103 +651,6 @@
</note>
</section>
</section>
- <section id="temp_tables">
- <title>Temp Tables</title>
- <para>Teiid supports creating temporary,or "temp", tables. Temp tables are dynamically created, but are treated as any other physical table.
- </para>
- <para>
- Temp tables can be defined implicitly by referencing them in a
- INSERT statement or explicitly with a CREATE TABLE
- statement. Implicitly created temp tables must have a name that
- starts with '#'.
- </para>
- <itemizedlist>
- <para>Creation syntax:
- </para>
- <listitem>
- <para>Explicit: CREATE LOCAL TEMPORARY TABLE x (column type [NOT NULL], ... [PRIMARY KEY (column, ...)])
- </para>
- </listitem>
- <listitem>
- <para>Implicit: INSERT INTO #x (column, ...) VALUES (value, ...)
- </para>
- <para>If #x doen't exist, it will be defined using the given column names and types from the value expressions.
- </para>
- </listitem>
- <listitem>
- <para>Implicit: INSERT INTO #x [(column, ...)] select c1, c2 from t
- </para>
- <para>If #x doesn't exist, it will be defined using the target column names (in not supplied, the column names will match the derived column names from the query), and the types from the query derived columns.
- </para>
- </listitem>
- <listitem>
- <para>Use the SERIAL data type to specify a NOT NULL and auto-incrementing INTEGER column. The starting value of a SERIAL column is 1.</para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <para>Drop syntax:
- </para>
- <listitem>
- <para>DROP TABLE x
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <para>Primary Key Support</para>
- <listitem>
- <para>All key columns must be comparable.</para>
- </listitem>
- <listitem>
- <para>Use of a primary key creates a clustered index that supports search improvements for comparison, in, like, and order by.</para>
- </listitem>
- <listitem>
- <para>Null is an allowable primary key value, but there must be only 1 row that has an all null key.</para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <para>Limitations:
- </para>
- <listitem>
- <para>With the CREATE TABLE syntax only basic table definition (column name and type information) and an optional primary key are supported.
- </para>
- </listitem>
- <listitem>
- <para>The "ON COMMIT" clause is not supported in the CREATE TABLE statement.
- </para>
- </listitem>
- <listitem>
- <para>"drop behavior" option is not supported in the drop statement.
- </para>
- </listitem>
- <listitem>
- <para>Only local temporary tables are supported. This implies that the scope of temp table will be either to the sesssion or the block of a virtual procedure that creates it.
- </para>
- </listitem>
- <listitem>
- <para>Session level temp tables are not fail-over safe.
- </para>
- </listitem>
- <listitem>
- <para>Temp tables are non-transactional.
- </para>
- </listitem>
- <listitem>
- <para>Lob values (xml, clob, blob) are tracked by reference rather than by value in a temporary table.
- Lob values from external sources that are inserted in a temporary table may become unreadable when the associated statement or connection is closed.
- </para>
- </listitem>
- </itemizedlist>
- <para>The following example is a series of statements that loads a temporary table with data from 2 sources, and with a manually inserted record, and then uses that temp table in a subsequent query.</para>
- <programlisting>...
-CREATE LOCAL TEMPORARY TABLE TEMP (a integer, b integer, c integer);
-SELECT * INTO temp FROM Src1; SELECT * INTO temp FROM Src2;
-INSERT INTO temp VALUES (1,2,3);
-SELECT a,b,c FROM Src3, temp WHERE Src3.a = temp.b;
-...</programlisting>
- <para>
- See <link linkend="virtual_procedures">virtual procedures</link> for more on temp table usage.
- </para>
- </section>
<section>
<title>SQL Clauses</title>
<para>This section describes the clauses that are used in the various <link linkend="sql_commands">SQL commands</link> described in the previous section. Nearly all these features follow standard SQL syntax and functionality, so any SQL reference can be used for more information.</para>
@@ -1213,10 +1116,10 @@
</section>
<section id="set_operations">
<title>Set Operations</title>
- <para>Teiid supports the UNION, UNION ALL, INTERSECT, EXCEPT set operation as a way of combining the results of commands.</para>
+ <para>Teiid supports the UNION, UNION ALL, INTERSECT, EXCEPT set operation as a way of combining the results of query expressions.</para>
<para>
Usage:
- <synopsis label="Usage">command (UNION|INTERSECT|EXCEPT) [ALL] command [ORDER BY...]</synopsis>
+ <synopsis label="Usage">queryExpression (UNION|INTERSECT|EXCEPT) [ALL] queryExpression [ORDER BY...]</synopsis>
</para>
<itemizedlist>
<para>Syntax Rules:
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/system_schema.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/system_schema.xml 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/system_schema.xml 2011-05-02 17:02:28 UTC (rev 3134)
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % CustomDTD SYSTEM "../../../../../../docbook/custom.dtd">
+%CustomDTD;
+]>
<chapter id="system_schema">
<title>System Schema</title>
<para>The built-in SYS and SYSADMIN schemas provide metadata tables and procedures against the current VDB.</para>
@@ -12,6 +15,8 @@
<para>This table provides the current VDB contents.</para>
<informaltable frame="all">
<tgroup cols="3">
+ <colspec colwidth=".6*" />
+ <colspec colwidth=".4*" />
<thead>
<row>
<entry>
@@ -61,6 +66,8 @@
context of a connection).</para>
<informaltable frame="all">
<tgroup cols="3">
+ <colspec colwidth=".6*" />
+ <colspec colwidth=".4*" />
<thead>
<row>
<entry>
@@ -110,6 +117,8 @@
</para>
<informaltable frame="all">
<tgroup cols="3">
+ <colspec colwidth=".6*" />
+ <colspec colwidth=".4*" />
<thead>
<row>
<entry>
@@ -214,7 +223,9 @@
metamodel extensions are being used.</para>
<informaltable frame="all">
<tgroup cols="3">
- <thead>
+ <colspec colwidth=".6*" />
+ <colspec colwidth=".4*" />
+ <thead>
<row>
<entry>
<para>Column Name</para>
@@ -286,6 +297,8 @@
views, documents, etc) in the virtual database.</para>
<informaltable frame="all">
<tgroup cols="3">
+ <colspec colwidth=".6*" />
+ <colspec colwidth=".4*" />
<thead>
<row>
<entry>
@@ -443,6 +456,8 @@
<para>This table supplies information about all the materailized views in the virtual database.</para>
<informaltable frame="all">
<tgroup cols="3">
+ <colspec colwidth=".6*" />
+ <colspec colwidth=".4*" />
<thead>
<row>
<entry>
@@ -566,6 +581,8 @@
(columns, tags, attributes, etc) in the virtual database.</para>
<informaltable frame="all">
<tgroup cols="3">
+ <colspec colwidth=".6*" />
+ <colspec colwidth=".4*" />
<thead>
<row>
<entry>
@@ -958,10 +975,11 @@
<section>
<title>SYS.Keys</title>
<para>This table supplies information about primary, foreign,
- and
- unique keys.</para>
+ and unique keys.</para>
<informaltable frame="all">
<tgroup cols="3">
+ <colspec colwidth=".6*" />
+ <colspec colwidth=".4*" />
<thead>
<row>
<entry>
@@ -1106,10 +1124,11 @@
<section>
<title>SYS.KeyColumns</title>
<para>This table supplies information about the columns
- referenced by
- a key.</para>
+ referenced by a key.</para>
<informaltable frame="all">
<tgroup cols="3">
+ <colspec colwidth=".6*" />
+ <colspec colwidth=".4*" />
<thead>
<row>
<entry>
@@ -1241,16 +1260,15 @@
</section>
</section>
<section>
- <title>
- Procedure Metadata
- </title>
+ <title>Procedure Metadata</title>
<section>
<title>SYS.Procedures</title>
<para>This table supplies information about the procedures in
- the
- virtual database.</para>
+ the virtual database.</para>
<informaltable frame="all">
<tgroup cols="3">
+ <colspec colwidth=".6*" />
+ <colspec colwidth=".4*" />
<thead>
<row>
<entry>
@@ -1363,6 +1381,8 @@
</para>
<informaltable frame="all">
<tgroup cols="3">
+ <colspec colwidth=".6*" />
+ <colspec colwidth=".4*" />
<thead>
<row>
<entry>
@@ -1536,11 +1556,12 @@
<title>SYS.DataTypes</title>
<para>
This table supplies information on
- <link linkend="datatypes">datatypes</link>
- .
+ <link linkend="datatypes">datatypes</link>.
</para>
<informaltable frame="all">
<tgroup cols="3">
+ <colspec colwidth=".6*" />
+ <colspec colwidth=".4*" />
<thead>
<row>
<entry>
@@ -1774,87 +1795,52 @@
</section>
</section>
<warning>
- <para>OID column is is guranteed to be unique only for given version of the VDB. If the VDB is updated and a different version of
- the VDB is deployed, these IDs are not guranteed to be unique across both versions of VDB. UID is unique across different versions
- only if the VDB is generated from Designer and metadata from old models are used(i.e. no re-importing from sources).
- UID column in a Dynamic VDB behaves same as OID column.</para>
+ <para>The OID column is is guranteed to be unique/consistent only for given version running instance of a VDB. If a different version of
+ the VDB is deployed, these IDs are not guranteed to be the same or unique across both versions of the VDB. Dynamic VDB OIDs are not cluster safe.</para>
</warning>
</section>
<section id="system_procedures">
<title>System Procedures</title>
- <informaltable frame="all">
- <tgroup cols="3">
- <thead>
- <row>
- <entry>
- <para>Procedure</para>
- </entry>
- <entry>
- <para>Parameters</para>
- </entry>
- <entry>
- <para>Description</para>
- </entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <para>SYS.getXMLSchemas</para>
- </entry>
- <entry>
- <para>(in string document)</para>
- </entry>
- <entry>
- <para>Returns a resultset with a single column, schema, containing the schemas as clobs.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>SYSADMIN.refreshMatView</para>
- </entry>
- <entry>
- <para>(in string ViewName, in boolean Invalidate)</para>
- </entry>
- <entry>
- <para>Returns integer RowsUpdated. -1 indicates a load is in progress, otherwise the cardinality of the table is returned. See the Caching Guide for more.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>SYSADMIN.refreshMatViewRow</para>
- </entry>
- <entry>
- <para>(in string ViewName, in object Key)</para>
- </entry>
- <entry>
- <para>Returns integer RowsUpdated. -1 indicates the materialized table is currently invalid. 0 indicates that the specified row did not exist in the live data query or in the materialized table. See the Caching Guide for more.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>SYSADMIN.setTableStats</para>
- </entry>
- <entry>
- <para>(in string TableName, in integer Cardinality)</para>
- </entry>
- <entry>
- <para>Set statistics for the given table. A <code>MetadataRepository</code> must be configured to make the update persistent.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>SYSADMIN.setColumnStats</para>
- </entry>
- <entry>
- <para>(in string TableName, in string ColumnName, in integer DistinctCount, in integer NullCount, in string Max, in string Min)</para>
- </entry>
- <entry>
- <para>Set statistics for the given column. A <code>MetadataRepository</code> must be configured to make the update persistent.</para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
+ <section>
+ <title>SYS.getXMLSchemas</title>
+ <para>Returns a resultset with a single column, schema, containing the schemas as clobs.</para>
+ <para><synopsis>SYS.getXMLSchemas(in string document)</synopsis></para>
+ </section>
+ <section>
+ <title>SYSADMIN.refreshMatView</title>
+ <para>Returns integer RowsUpdated. -1 indicates a load is in progress, otherwise the cardinality of the table is returned. See the Caching Guide for more.</para>
+ <para><synopsis>SYSADMIN.refreshMatView(return integer RowsUpdated, in string ViewName, in boolean Invalidate)</synopsis></para>
+ </section>
+ <section>
+ <title>SYSADMIN.refreshMatViewRow</title>
+ <para>Returns integer RowsUpdated. -1 indicates the materialized table is currently invalid. 0 indicates that the specified row did not exist in the live data query or in the materialized table. See the Caching Guide for more.</para>
+ <para><synopsis>SYSADMIN.refreshMatViewRow(return integer RowsUpdated, in string ViewName, in object Key)</synopsis></para>
+ </section>
+ <section>
+ <title>Metadata Procedures</title>
+ &metadata-update-note;
+ <section>
+ <title>SYSADMIN.setTableStats</title>
+ <para>Set statistics for the given table.</para>
+ <para><synopsis>SYSADMIN.setTableStats(in string TableName, in integer Cardinality)</synopsis></para>
+ </section>
+ <section>
+ <title>SYSADMIN.setColumnStats</title>
+ <para>Set statistics for the given column.</para>
+ <para><synopsis>SYSADMIN.setColumnStats(in string TableName, in string ColumnName, in integer DistinctCount, in integer NullCount, in string Max, in string Min)</synopsis></para>
+ <para>Passing a null stat value will leave corresponding metadata value unchanged.</para>
+ </section>
+ <section>
+ <title>SYSADMIN.setProperty</title>
+ <para>Set an extension metadata property for the given record. Extension metadata is typically used by <xref linkend="translators"/>.</para>
+ <para><synopsis>SYSADMIN.setProperty(return clob OldValue, in string Uid, in string Name, in clob Value)</synopsis></para>
+ <para>Setting a value to null will remove the property.</para>
+ <example lang="sql">
+ <title>Example Property Set</title>
+ <programlisting>CALL SYSADMIN.setProperty(uid=>(SELECT uid FROM TABLES WHERE name='tab'), name=>'some name', value=>'some value')</programlisting>
+ <para>This will set the property 'some name'='some value' on table tab.</para>
+ </example>
+ </section>
+ </section>
</section>
</chapter>
\ No newline at end of file
Modified: trunk/engine/src/main/java/org/teiid/cache/CacheConfiguration.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/cache/CacheConfiguration.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/cache/CacheConfiguration.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -44,7 +44,7 @@
private String name;
private String location;
- private int maxStaleness = -1;
+ private int maxStaleness = 0;
public CacheConfiguration() {
}
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -22,7 +22,10 @@
package org.teiid.dqp.internal.process;
+import java.io.IOException;
+import java.sql.Clob;
import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
@@ -31,6 +34,8 @@
import java.util.List;
import java.util.Map;
+import javax.sql.rowset.serial.SerialClob;
+
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.api.exception.query.QueryMetadataException;
@@ -42,9 +47,11 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.core.types.BlobType;
+import org.teiid.core.types.ClobType;
import org.teiid.core.types.SQLXMLImpl;
import org.teiid.core.types.XMLType;
import org.teiid.core.util.Assertion;
+import org.teiid.core.util.ObjectConverterUtil;
import org.teiid.core.util.StringUtil;
import org.teiid.dqp.internal.datamgr.ConnectorManager;
import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
@@ -88,6 +95,8 @@
*/
public class DataTierManagerImpl implements ProcessorDataManager {
+ private static final int MAX_VALUE_LENGTH = 1 << 21;
+
private enum SystemTables {
VIRTUALDATABASES,
SCHEMAS,
@@ -109,7 +118,8 @@
private enum SystemAdminProcs {
SETTABLESTATS,
- SETCOLUMNSTATS
+ SETCOLUMNSTATS,
+ SETPROPERTY
}
private enum SystemProcs {
@@ -141,6 +151,10 @@
return eventDistributor;
}
+ public MetadataRepository getMetadataRepository() {
+ return metadataRepository;
+ }
+
public void setMetadataRepository(MetadataRepository metadataRepository) {
this.metadataRepository = metadataRepository;
}
@@ -271,27 +285,19 @@
}
break;
case PROPERTIES: //TODO: consider storing separately in the metadatastore
- Collection<AbstractMetadataRecord> records = new LinkedHashSet<AbstractMetadataRecord>();
- records.addAll(metadata.getDatatypes());
- for (Schema schema : getVisibleSchemas(vdb, metadata)) {
- records.add(schema);
- records.addAll(schema.getTables().values());
- for (Table table : schema.getTables().values()) {
- records.add(table);
- records.addAll(table.getColumns());
- records.addAll(table.getAllKeys());
- }
- for (Procedure proc : schema.getProcedures().values()) {
- records.add(proc);
- records.addAll(proc.getParameters());
- if (proc.getResultSet() != null) {
- records.addAll(proc.getResultSet().getColumns());
- }
- }
- }
+ Collection<AbstractMetadataRecord> records = getAllPropertiedObjects(metadata, getVisibleSchemas(vdb, metadata));
for (AbstractMetadataRecord record : records) {
for (Map.Entry<String, String> entry : record.getProperties().entrySet()) {
- rows.add(Arrays.asList(entry.getKey(), entry.getValue(), record.getUUID(), oid++));
+ String value = entry.getValue();
+ Clob clobValue = null;
+ if (value != null) {
+ try {
+ clobValue = new ClobType(new SerialClob(value.toCharArray()));
+ } catch (SQLException e) {
+ throw new TeiidProcessingException(e);
+ }
+ }
+ rows.add(Arrays.asList(entry.getKey(), entry.getValue(), record.getUUID(), oid++, clobValue));
}
}
break;
@@ -348,6 +354,48 @@
StoredProcedure proc = (StoredProcedure)command;
if (StringUtil.startsWithIgnoreCase(proc.getProcedureCallableName(), CoreConstants.SYSTEM_ADMIN_MODEL)) {
final SystemAdminProcs sysProc = SystemAdminProcs.valueOf(proc.getProcedureCallableName().substring(CoreConstants.SYSTEM_ADMIN_MODEL.length() + 1).toUpperCase());
+ switch (sysProc) {
+ case SETPROPERTY:
+ try {
+ String uuid = (String)((Constant)proc.getParameter(2).getExpression()).getValue();
+ String key = (String)((Constant)proc.getParameter(3).getExpression()).getValue();
+ Clob value = (Clob)((Constant)proc.getParameter(4).getExpression()).getValue();
+ String strVal = null;
+ String result = null;
+ if (value != null) {
+ if (value.length() > MAX_VALUE_LENGTH) {
+ throw new TeiidProcessingException(QueryPlugin.Util.getString("DataTierManagerImpl.max_value_length", MAX_VALUE_LENGTH)); //$NON-NLS-1$
+ }
+ strVal = ObjectConverterUtil.convertToString(value.getCharacterStream());
+ }
+ AbstractMetadataRecord target = getByUuid(metadata, uuid);
+ if (target == null) {
+ throw new TeiidProcessingException(QueryPlugin.Util.getString("DataTierManagerImpl.unknown_uuid", uuid)); //$NON-NLS-1$
+ }
+ if (value == null) {
+ result = target.setProperty(key, null);
+ } else {
+ strVal = ObjectConverterUtil.convertToString(value.getCharacterStream());
+ result = target.setProperty(key, strVal);
+ }
+ if (eventDistributor != null) {
+ eventDistributor.setProperty(vdbName, vdbVersion, uuid, key, strVal);
+ }
+ if (this.metadataRepository != null) {
+ this.metadataRepository.setProperty(vdbName, vdbVersion, target, key, strVal);
+ }
+ if (result == null) {
+ rows.add(Arrays.asList((Clob)null));
+ } else {
+ rows.add(Arrays.asList(new ClobType(new SerialClob(result.toCharArray()))));
+ }
+ return new CollectionTupleSource(rows.iterator());
+ } catch (SQLException e) {
+ throw new TeiidProcessingException(e);
+ } catch (IOException e) {
+ throw new TeiidProcessingException(e);
+ }
+ }
Table table = indexMetadata.getGroupID((String)((Constant)proc.getParameter(1).getExpression()).getValue());
switch (sysProc) {
case SETCOLUMNSTATS:
@@ -424,6 +472,38 @@
}
return new CollectionTupleSource(rows.iterator());
}
+
+ //TODO: do better than a linear search
+ public static AbstractMetadataRecord getByUuid(CompositeMetadataStore metadata,
+ String uuid) {
+ for (AbstractMetadataRecord object : getAllPropertiedObjects(metadata, metadata.getSchemas().values())) {
+ if (object.getUUID().equals(uuid)) {
+ return object;
+ }
+ }
+ return null;
+ }
+
+ public static Collection<AbstractMetadataRecord> getAllPropertiedObjects(CompositeMetadataStore metadata, Collection<Schema> schemas) {
+ Collection<AbstractMetadataRecord> records = new LinkedHashSet<AbstractMetadataRecord>();
+ records.addAll(metadata.getDatatypes());
+ for (Schema schema : schemas) {
+ records.add(schema);
+ for (Table table : schema.getTables().values()) {
+ records.add(table);
+ records.addAll(table.getColumns());
+ records.addAll(table.getAllKeys());
+ }
+ for (Procedure proc : schema.getProcedures().values()) {
+ records.add(proc);
+ records.addAll(proc.getParameters());
+ if (proc.getResultSet() != null) {
+ records.addAll(proc.getResultSet().getColumns());
+ }
+ }
+ }
+ return records;
+ }
private List<Schema> getVisibleSchemas(VDBMetaData vdb, CompositeMetadataStore metadata) {
ArrayList<Schema> result = new ArrayList<Schema>();
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -64,7 +64,6 @@
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempCapabilitiesFinder;
import org.teiid.query.metadata.TempMetadataAdapter;
-import org.teiid.query.metadata.TempMetadataStore;
import org.teiid.query.optimizer.QueryOptimizer;
import org.teiid.query.optimizer.capabilities.CapabilitiesFinder;
import org.teiid.query.parser.ParseInfo;
@@ -201,7 +200,7 @@
this.metadata = new MultiSourceMetadataWrapper(this.metadata, this.multiSourceModels);
}
- TempMetadataAdapter tma = new TempMetadataAdapter(metadata, new TempMetadataStore());
+ TempMetadataAdapter tma = new TempMetadataAdapter(metadata, this.tempTableStore.getMetadataStore());
tma.setSession(true);
this.metadata = tma;
}
@@ -279,9 +278,6 @@
}
protected void resolveCommand(Command command) throws QueryResolverException, TeiidComponentException {
- if (this.tempTableStore != null) {
- QueryResolver.setChildMetadata(command, tempTableStore.getMetadataStore().getData(), null);
- }
//ensure that the user command is distinct from the processing command
//rewrite and planning may alter options, symbols, etc.
QueryResolver.resolveCommand(command, metadata);
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/TransformationMetadata.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/TransformationMetadata.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/TransformationMetadata.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -78,6 +78,18 @@
*/
public class TransformationMetadata extends BasicQueryMetadata implements Serializable {
+ private final class LiveQueryNode extends QueryNode {
+ Procedure p;
+ private LiveQueryNode(Procedure p) {
+ super(null);
+ this.p = p;
+ }
+
+ public String getQuery() {
+ return p.getQueryPlan();
+ }
+ }
+
private final class VirtualFileInputStreamFactory extends
InputStreamFactory {
private final VirtualFile f;
@@ -330,7 +342,7 @@
// if this is a virtual procedure get the procedure plan
if(procRecord.isVirtual()) {
- QueryNode queryNode = new QueryNode(procRecord.getQueryPlan());
+ QueryNode queryNode = new LiveQueryNode(procRecord);
procInfo.setQueryPlan(queryNode);
}
@@ -464,7 +476,7 @@
if (!tableRecordImpl.isVirtual()) {
throw new QueryMetadataException(QueryPlugin.Util.getString("TransformationMetadata.InsertPlan_could_not_be_found_for_physical_group__8")+tableRecordImpl.getFullName()); //$NON-NLS-1$
}
- return ((Table)groupID).getInsertPlan();
+ return tableRecordImpl.isInsertPlanEnabled()?tableRecordImpl.getInsertPlan():null;
}
public String getUpdatePlan(final Object groupID) throws TeiidComponentException, QueryMetadataException {
@@ -473,7 +485,7 @@
if (!tableRecordImpl.isVirtual()) {
throw new QueryMetadataException(QueryPlugin.Util.getString("TransformationMetadata.InsertPlan_could_not_be_found_for_physical_group__10")+tableRecordImpl.getFullName()); //$NON-NLS-1$
}
- return ((Table)groupID).getUpdatePlan();
+ return tableRecordImpl.isUpdatePlanEnabled()?tableRecordImpl.getUpdatePlan():null;
}
public String getDeletePlan(final Object groupID) throws TeiidComponentException, QueryMetadataException {
@@ -482,7 +494,7 @@
if (!tableRecordImpl.isVirtual()) {
throw new QueryMetadataException(QueryPlugin.Util.getString("TransformationMetadata.DeletePlan_could_not_be_found_for_physical_group__12")+tableRecordImpl.getFullName()); //$NON-NLS-1$
}
- return ((Table)groupID).getDeletePlan();
+ return tableRecordImpl.isDeletePlanEnabled()?tableRecordImpl.getDeletePlan():null;
}
public boolean modelSupports(final Object modelID, final int modelConstant)
@@ -1035,8 +1047,7 @@
}
@Override
- public Object addToMetadataCache(Object metadataID, String key, Object value)
- throws TeiidComponentException, QueryMetadataException {
+ public Object addToMetadataCache(Object metadataID, String key, Object value) {
ArgCheck.isInstanceOf(AbstractMetadataRecord.class, metadataID);
boolean groupInfo = key.startsWith(GroupInfo.CACHE_PREFIX);
key = getCacheKey(key, (AbstractMetadataRecord)metadataID);
Added: trunk/engine/src/main/java/org/teiid/query/optimizer/DdlPlanner.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/DdlPlanner.java (rev 0)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/DdlPlanner.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -0,0 +1,48 @@
+/*
+ * 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.query.optimizer;
+
+import org.teiid.api.exception.query.QueryMetadataException;
+import org.teiid.api.exception.query.QueryPlannerException;
+import org.teiid.core.TeiidComponentException;
+import org.teiid.core.id.IDGenerator;
+import org.teiid.query.analysis.AnalysisRecord;
+import org.teiid.query.metadata.QueryMetadataInterface;
+import org.teiid.query.optimizer.capabilities.CapabilitiesFinder;
+import org.teiid.query.processor.DdlPlan;
+import org.teiid.query.processor.ProcessorPlan;
+import org.teiid.query.sql.lang.Command;
+import org.teiid.query.util.CommandContext;
+
+public class DdlPlanner implements CommandPlanner {
+
+ @Override
+ public ProcessorPlan optimize(Command command, IDGenerator idGenerator,
+ QueryMetadataInterface metadata, CapabilitiesFinder capFinder,
+ AnalysisRecord analysisRecord, CommandContext context)
+ throws QueryPlannerException, QueryMetadataException,
+ TeiidComponentException {
+ return new DdlPlan(command);
+ }
+
+}
Property changes on: trunk/engine/src/main/java/org/teiid/query/optimizer/DdlPlanner.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -72,6 +72,7 @@
private static final CommandPlanner XML_PLANNER = new XMLPlanner();
private static final CommandPlanner PROCEDURE_PLANNER = new ProcedurePlanner();
private static final CommandPlanner BATCHED_UPDATE_PLANNER = new BatchedUpdatePlanner();
+ private static final CommandPlanner DDL_PLANNER = new DdlPlanner();
// Can't construct
private QueryOptimizer() {}
@@ -109,18 +110,28 @@
ProcessorPlan result = null;
- if (command.getType() == Command.TYPE_UPDATE_PROCEDURE){
+ switch (command.getType()) {
+ case Command.TYPE_UPDATE_PROCEDURE:
CreateUpdateProcedureCommand cupc = (CreateUpdateProcedureCommand)command;
if (cupc.isUpdateProcedure()) {
result = planProcedure(command, metadata, idGenerator, capFinder, analysisRecord, context);
} else {
- String fullName = metadata.getFullName(cupc.getVirtualGroup().getMetadataID());
+ StoredProcedure c = (StoredProcedure)cupc.getUserCommand();
+ Object pid = cupc.getVirtualGroup().getMetadataID();
+ if (c != null) {
+ pid = c.getProcedureID();
+ }
+ String fullName = metadata.getFullName(pid);
+ fullName = "procedure cache:" + fullName; //$NON-NLS-1$
PreparedPlan pp = context.getPlan(fullName);
if (pp == null) {
Determinism determinismLevel = context.resetDeterminismLevel();
CommandContext clone = context.clone();
ProcessorPlan plan = planProcedure(command, metadata, idGenerator, capFinder, analysisRecord, clone);
//note that this is not a full prepared plan. It is not usable by user queries.
+ if (pid instanceof Procedure) {
+ clone.accessedProcedure((Procedure)pid);
+ }
pp = new PreparedPlan();
pp.setPlan(plan, clone);
context.putPlan(fullName, pp, context.getDeterminismLevel());
@@ -166,9 +177,16 @@
plan.setImplicitParams(((TranslatableProcedureContainer)container).getImplicitParams());
}
}
- } else if (command.getType() == Command.TYPE_BATCHED_UPDATE){
- result = BATCHED_UPDATE_PLANNER.optimize(command, idGenerator, metadata, capFinder, analysisRecord, context);
- } else {
+ break;
+ case Command.TYPE_BATCHED_UPDATE:
+ result = BATCHED_UPDATE_PLANNER.optimize(command, idGenerator, metadata, capFinder, analysisRecord, context);
+ break;
+ case Command.TYPE_ALTER_PROC:
+ case Command.TYPE_ALTER_TRIGGER:
+ case Command.TYPE_ALTER_VIEW:
+ result = DDL_PLANNER.optimize(command, idGenerator, metadata, capFinder, analysisRecord, context);
+ break;
+ default:
try {
if (command.getType() == Command.TYPE_QUERY && command instanceof Query && QueryResolver.isXMLQuery((Query)command, metadata)) {
result = XML_PLANNER.optimize(command, idGenerator, metadata, capFinder, analysisRecord, context);
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -41,6 +41,7 @@
import org.teiid.core.id.IDGenerator;
import org.teiid.dqp.internal.process.Request;
import org.teiid.language.SQLConstants;
+import org.teiid.metadata.Procedure;
import org.teiid.metadata.Table;
import org.teiid.query.QueryPlugin;
import org.teiid.query.analysis.AnalysisRecord;
@@ -535,7 +536,7 @@
boolean usingTriggerAction = false;
if (command instanceof ProcedureContainer) {
ProcedureContainer container = (ProcedureContainer)command;
- usingTriggerAction = addNestedProcedure(sourceNode, container);
+ usingTriggerAction = addNestedProcedure(sourceNode, container, container.getGroup().getMetadataID());
}
sourceNode.addGroups(groups);
@@ -556,15 +557,15 @@
}
private boolean addNestedProcedure(PlanNode sourceNode,
- ProcedureContainer container) throws TeiidComponentException,
+ ProcedureContainer container, Object metadataId) throws TeiidComponentException,
QueryMetadataException, TeiidProcessingException {
- String cacheString = "transformation/" + container.getClass().getSimpleName(); //$NON-NLS-1$
- Command c = (Command)metadata.getFromMetadataCache(container.getGroup().getMetadataID(), cacheString);
+ String cacheString = "transformation/" + container.getClass().getSimpleName().toUpperCase(); //$NON-NLS-1$
+ Command c = (Command)metadata.getFromMetadataCache(metadataId, cacheString);
if (c == null) {
c = QueryResolver.expandCommand(container, metadata, analysisRecord);
if (c != null) {
Request.validateWithVisitor(new ValidationVisitor(), metadata, c);
- metadata.addToMetadataCache(container.getGroup().getMetadataID(), cacheString, c.clone());
+ metadata.addToMetadataCache(metadataId, cacheString, c.clone());
}
} else {
c = (Command)c.clone();
@@ -598,6 +599,12 @@
//skip the rewrite here, we'll do that in the optimizer
//so that we know what the determinism level is.
addNestedCommand(sourceNode, container.getGroup(), container, c, false);
+ if (container instanceof StoredProcedure) {
+ StoredProcedure sp = (StoredProcedure)container;
+ if (sp.getProcedureID() instanceof Procedure) {
+ context.accessedProcedure((Procedure)sp.getProcedureID());
+ }
+ }
} else if (!container.getGroup().isTempTable() && //we hope for the best, and do a specific validation for subqueries below
container instanceof TranslatableProcedureContainer //we force the evaluation of procedure params - TODO: inserts are fine except for nonpushdown functions on columns
&& !CriteriaCapabilityValidatorVisitor.canPushLanguageObject(container, metadata.getModelID(container.getGroup().getMetadataID()), metadata, capFinder, analysisRecord)) {
@@ -653,7 +660,7 @@
// Define source of data for stored query / procedure
PlanNode sourceNode = NodeFactory.getNewNode(NodeConstants.Types.SOURCE);
sourceNode.setProperty(NodeConstants.Info.VIRTUAL_COMMAND, storedProc);
- addNestedProcedure(sourceNode, storedProc);
+ addNestedProcedure(sourceNode, storedProc, storedProc.getProcedureID());
hints.hasRelationalProc |= storedProc.isProcedureRelational();
Added: trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java (rev 0)
+++ trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -0,0 +1,234 @@
+/*
+ * 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.query.processor;
+
+import static org.teiid.query.analysis.AnalysisRecord.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.teiid.adminapi.impl.VDBMetaData;
+import org.teiid.client.plan.PlanNode;
+import org.teiid.common.buffer.BlockedException;
+import org.teiid.common.buffer.BufferManager;
+import org.teiid.common.buffer.TupleBatch;
+import org.teiid.core.TeiidComponentException;
+import org.teiid.core.TeiidProcessingException;
+import org.teiid.core.TeiidRuntimeException;
+import org.teiid.dqp.internal.process.DQPWorkContext;
+import org.teiid.language.SQLConstants;
+import org.teiid.metadata.Procedure;
+import org.teiid.metadata.Table;
+import org.teiid.metadata.Table.TriggerEvent;
+import org.teiid.query.QueryPlugin;
+import org.teiid.query.metadata.TransformationMetadata;
+import org.teiid.query.sql.LanguageVisitor;
+import org.teiid.query.sql.lang.AlterProcedure;
+import org.teiid.query.sql.lang.AlterTrigger;
+import org.teiid.query.sql.lang.AlterView;
+import org.teiid.query.sql.lang.Command;
+import org.teiid.query.sql.lang.StoredProcedure;
+import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.util.CommandContext;
+
+public class DdlPlan extends ProcessorPlan {
+
+ class AlterProcessor extends LanguageVisitor {
+ DQPWorkContext workContext = DQPWorkContext.getWorkContext();
+
+ @Override
+ public void visit(AlterView obj) {
+ VDBMetaData vdb = workContext.getVDB();
+ Table t = (Table)obj.getTarget().getMetadataID();
+ String sql = obj.getDefinition().toString();
+ alterView(vdb, t, sql);
+ if (pdm.getEventDistributor() != null) {
+ pdm.getEventDistributor().setViewDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t.getParent().getName(), t.getName(), sql);
+ }
+ if (pdm.getMetadataRepository() != null) {
+ pdm.getMetadataRepository().setViewDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t, sql);
+ }
+ }
+
+ @Override
+ public void visit(AlterProcedure obj) {
+ VDBMetaData vdb = workContext.getVDB();
+ Procedure p = (Procedure)obj.getTarget().getMetadataID();
+ String sql = obj.getDefinition().toString();
+ alterProcedureDefinition(vdb, p, sql);
+ if (pdm.getEventDistributor() != null) {
+ pdm.getEventDistributor().setProcedureDefinition(workContext.getVdbName(), workContext.getVdbVersion(), p.getParent().getName(), p.getName(), sql);
+ }
+ if (pdm.getMetadataRepository() != null) {
+ pdm.getMetadataRepository().setProcedureDefinition(workContext.getVdbName(), workContext.getVdbVersion(), p, sql);
+ }
+ }
+
+ @Override
+ public void visit(AlterTrigger obj) {
+ VDBMetaData vdb = workContext.getVDB();
+ Table t = (Table)obj.getTarget().getMetadataID();
+ String sql = null;
+ TriggerEvent event = obj.getEvent();
+ if (obj.getEnabled() == null) {
+ if (obj.isCreate()) {
+ if (getPlanForEvent(t, event) != null) {
+ throw new TeiidRuntimeException(new TeiidProcessingException(QueryPlugin.Util.getString("DdlPlan.event_already_exists", t.getName(), obj.getEvent()))); //$NON-NLS-1$
+ }
+ } else if (getPlanForEvent(t, event) == null) {
+ throw new TeiidRuntimeException(new TeiidProcessingException(QueryPlugin.Util.getString("DdlPlan.event_not_exists", t.getName(), obj.getEvent()))); //$NON-NLS-1$
+ }
+ sql = obj.getDefinition().toString();
+ } else if (getPlanForEvent(t, event) == null) {
+ throw new TeiidRuntimeException(new TeiidProcessingException(QueryPlugin.Util.getString("DdlPlan.event_not_exists", t.getName(), obj.getEvent()))); //$NON-NLS-1$
+ }
+ alterInsteadOfTrigger(vdb, t, sql, obj.getEnabled(), event);
+ if (pdm.getEventDistributor() != null) {
+ pdm.getEventDistributor().setInsteadOfTriggerDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t.getParent().getName(), t.getName(), obj.getEvent(), sql, obj.getEnabled());
+ }
+ if (pdm.getMetadataRepository() != null) {
+ if (sql != null) {
+ pdm.getMetadataRepository().setInsteadOfTriggerDefinition(workContext.getVdbName(), workContext.getVdbVersion(), t, obj.getEvent(), sql);
+ } else {
+ pdm.getMetadataRepository().setInsteadOfTriggerEnabled(workContext.getVdbName(), workContext.getVdbVersion(), t, obj.getEvent(), obj.getEnabled());
+ }
+ }
+ }
+ }
+
+ public static void alterView(VDBMetaData vdb, Table t, String sql) {
+ t.setSelectTransformation(sql);
+ t.setLastModified(System.currentTimeMillis());
+ TransformationMetadata indexMetadata = vdb.getAttachment(TransformationMetadata.class);
+ indexMetadata.addToMetadataCache(t, "transformation/"+SQLConstants.Reserved.SELECT, null); //$NON-NLS-1$
+ }
+
+ public static void alterProcedureDefinition(VDBMetaData vdb, Procedure p, String sql) {
+ p.setQueryPlan(sql);
+ p.setLastModified(System.currentTimeMillis());
+ TransformationMetadata indexMetadata = vdb.getAttachment(TransformationMetadata.class);
+ indexMetadata.addToMetadataCache(p, "transformation/"+StoredProcedure.class.getSimpleName().toUpperCase(), null); //$NON-NLS-1$
+ }
+
+ public static void alterInsteadOfTrigger(VDBMetaData vdb, Table t,
+ String sql, Boolean enabled, TriggerEvent event) {
+ switch (event) {
+ case DELETE:
+ if (sql != null) {
+ t.setDeletePlan(sql);
+ } else {
+ t.setDeletePlanEnabled(enabled);
+ }
+ break;
+ case INSERT:
+ if (sql != null) {
+ t.setInsertPlan(sql);
+ } else {
+ t.setInsertPlanEnabled(enabled);
+ }
+ break;
+ case UPDATE:
+ if (sql != null) {
+ t.setUpdatePlan(sql);
+ } else {
+ t.setUpdatePlanEnabled(enabled);
+ }
+ break;
+ }
+ TransformationMetadata indexMetadata = vdb.getAttachment(TransformationMetadata.class);
+ indexMetadata.addToMetadataCache(t, "transformation/"+event, null); //$NON-NLS-1$
+ t.setLastModified(System.currentTimeMillis());
+ }
+
+ private static String getPlanForEvent(Table t, TriggerEvent event) {
+ switch (event) {
+ case DELETE:
+ return t.getDeletePlan();
+ case INSERT:
+ return t.getInsertPlan();
+ case UPDATE:
+ return t.getUpdatePlan();
+ }
+ throw new AssertionError();
+ }
+
+ private Command command;
+ private ProcessorDataManager pdm;
+
+ public DdlPlan(Command command) {
+ this.command = command;
+ }
+
+ @Override
+ public ProcessorPlan clone() {
+ return new DdlPlan(command);
+ }
+
+ @Override
+ public void close() throws TeiidComponentException {
+ }
+
+ @Override
+ public List getOutputElements() {
+ return command.getProjectedSymbols();
+ }
+
+ @Override
+ public void initialize(CommandContext context,
+ ProcessorDataManager dataMgr, BufferManager bufferMgr) {
+ this.setContext(context);
+ this.pdm = dataMgr;
+ }
+
+ @Override
+ public TupleBatch nextBatch() throws BlockedException,
+ TeiidComponentException, TeiidProcessingException {
+ TupleBatch tupleBatch = new TupleBatch(1, new List[] {Arrays.asList(0)});
+ tupleBatch.setTerminationFlag(true);
+ return tupleBatch;
+ }
+
+ @Override
+ public void open() throws TeiidComponentException, TeiidProcessingException {
+ AlterProcessor ap = new AlterProcessor();
+ ap.workContext = DQPWorkContext.getWorkContext();
+ try {
+ command.acceptVisitor(ap);
+ } catch (TeiidRuntimeException e) {
+ throw (TeiidProcessingException)e.getCause();
+ }
+ }
+
+ @Override
+ public PlanNode getDescriptionProperties() {
+ PlanNode props = super.getDescriptionProperties();
+ props.addProperty(PROP_SQL, this.command.toString());
+ return props;
+ }
+
+ @Override
+ public void getAccessedGroups(List<GroupSymbol> groups) {
+
+ }
+
+}
Property changes on: trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/engine/src/main/java/org/teiid/query/processor/ProcessorDataManager.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/ProcessorDataManager.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/query/processor/ProcessorDataManager.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -26,6 +26,8 @@
import org.teiid.common.buffer.TupleSource;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
+import org.teiid.events.EventDistributor;
+import org.teiid.metadata.MetadataRepository;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.util.CommandContext;
@@ -47,5 +49,9 @@
String keyElementName,
Object keyValue) throws BlockedException,
TeiidComponentException, TeiidProcessingException;
+
+ EventDistributor getEventDistributor();
+
+ MetadataRepository getMetadataRepository();
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -439,9 +439,7 @@
qmi = qmi.getDesignTimeMetadata();
cacheString = "transformation/" + cacheString; //$NON-NLS-1$
QueryNode cachedNode = (QueryNode)qmi.getFromMetadataCache(virtualGroup.getMetadataID(), cacheString);
- if (cachedNode == null
- || (qnode.getQuery() != null && !cachedNode.getQuery().equals(qnode.getQuery()))
- || (qnode.getCommand() != null && !cachedNode.getCommand().equals(qnode.getCommand()))) {
+ if (cachedNode == null) {
Command result = qnode.getCommand();
List bindings = null;
if (result == null) {
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/AlterResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/AlterResolver.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/AlterResolver.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -25,7 +25,7 @@
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.metadata.Table.TriggerOperation;
+import org.teiid.metadata.Table.TriggerEvent;
import org.teiid.query.QueryPlugin;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.resolver.CommandResolver;
@@ -47,8 +47,8 @@
int type = Command.TYPE_QUERY;
boolean viewTarget = true;
if (alter instanceof AlterTrigger) {
- TriggerOperation op = ((AlterTrigger)alter).getOperation();
- switch (op) {
+ TriggerEvent event = ((AlterTrigger)alter).getEvent();
+ switch (event) {
case DELETE:
type = Command.TYPE_DELETE;
break;
@@ -66,7 +66,9 @@
if (viewTarget && !QueryResolver.isView(alter.getTarget(), metadata)) {
throw new QueryResolverException(QueryPlugin.Util.getString("AlterResolver.not_a_view", alter.getTarget())); //$NON-NLS-1$
}
- QueryResolver.resolveCommand(alter.getDefinition(), alter.getTarget(), type, metadata.getDesignTimeMetadata());
+ if (alter.getDefinition() != null) {
+ QueryResolver.resolveCommand(alter.getDefinition(), alter.getTarget(), type, metadata.getDesignTimeMetadata());
+ }
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Alter.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -62,7 +62,9 @@
public void cloneOnTo(Alter<T> clone) {
copyMetadataState(clone);
- clone.setDefinition((T)getDefinition().clone());
+ if (this.definition != null) {
+ clone.setDefinition((T)this.definition.clone());
+ }
clone.setTarget(getTarget().clone());
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterTrigger.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterTrigger.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/AlterTrigger.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -22,20 +22,23 @@
package org.teiid.query.sql.lang;
+import org.teiid.core.util.EquivalenceUtil;
import org.teiid.metadata.Table;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.proc.TriggerAction;
public class AlterTrigger extends Alter<TriggerAction> {
- private Table.TriggerOperation operation;
+ private Table.TriggerEvent event;
+ private Boolean enabled;
+ private boolean create;
- public Table.TriggerOperation getOperation() {
- return operation;
+ public Table.TriggerEvent getEvent() {
+ return event;
}
- public void setOperation(Table.TriggerOperation operation) {
- this.operation = operation;
+ public void setEvent(Table.TriggerEvent operation) {
+ this.event = operation;
}
@Override
@@ -47,7 +50,9 @@
public AlterTrigger clone() {
AlterTrigger clone = new AlterTrigger();
cloneOnTo(clone);
- clone.operation = operation;
+ clone.event = event;
+ clone.enabled = this.enabled;
+ clone.create = this.create;
return clone;
}
@@ -65,6 +70,24 @@
return true;
}
AlterTrigger other = (AlterTrigger)obj;
- return other.operation == this.operation;
+ return EquivalenceUtil.areEqual(this.enabled, other.enabled)
+ && this.create == other.create
+ && other.event == this.event;
}
+
+ public void setEnabled(Boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ public Boolean getEnabled() {
+ return enabled;
+ }
+
+ public boolean isCreate() {
+ return create;
+ }
+
+ public void setCreate(boolean create) {
+ this.create = create;
+ }
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/visitor/CommandCollectorVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/visitor/CommandCollectorVisitor.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/query/sql/visitor/CommandCollectorVisitor.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -126,7 +126,9 @@
@Override
public void visit(AlterTrigger alterTrigger) {
- this.commands.add(alterTrigger.getDefinition());
+ if (alterTrigger.getDefinition() != null) {
+ this.commands.add(alterTrigger.getDefinition());
+ }
}
@Override
Modified: trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -1974,7 +1974,11 @@
@Override
public void visit(AlterTrigger alterTrigger) {
- append(ALTER);
+ if (alterTrigger.isCreate()) {
+ append(CREATE);
+ } else {
+ append(ALTER);
+ }
append(SPACE);
append(TRIGGER);
append(SPACE);
@@ -1986,12 +1990,17 @@
append(SPACE);
append(OF);
append(SPACE);
- append(alterTrigger.getOperation());
- beginClause(0);
- append(AS);
- append("\n"); //$NON-NLS-1$
- addTabs(0);
- append(alterTrigger.getDefinition());
+ append(alterTrigger.getEvent());
+ if (alterTrigger.getDefinition() != null) {
+ beginClause(0);
+ append(AS);
+ append("\n"); //$NON-NLS-1$
+ addTabs(0);
+ append(alterTrigger.getDefinition());
+ } else {
+ append(SPACE);
+ append(alterTrigger.getEnabled()?NonReserved.ENABLED:NonReserved.DISABLED);
+ }
}
@Override
Modified: trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -58,6 +58,7 @@
import org.teiid.language.SQLConstants.Reserved;
import org.teiid.logging.LogConstants;
import org.teiid.logging.LogManager;
+import org.teiid.metadata.MetadataRepository;
import org.teiid.metadata.FunctionMethod.Determinism;
import org.teiid.query.QueryPlugin;
import org.teiid.query.eval.Evaluator;
@@ -486,7 +487,7 @@
if (hint != null) {
table.setPreferMemory(hint.getPrefersMemory());
if (hint.getTtl() != null) {
- info.setTtl(table.getCacheHint().getTtl());
+ info.setTtl(hint.getTtl());
}
if (pk != null) {
updatable = hint.isUpdatable();
@@ -620,4 +621,14 @@
return result;
}
+ @Override
+ public EventDistributor getEventDistributor() {
+ return this.eventDistributor;
+ }
+
+ @Override
+ public MetadataRepository getMetadataRepository() {
+ return this.processorDataManager.getMetadataRepository();
+ }
+
}
Modified: trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableStore.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableStore.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableStore.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -275,14 +275,22 @@
for (Object index : indexes) {
id.addIndex(resolveIndex(metadata, id, index));
}
- Command c = (Command)QueryResolver.resolveView(group, metadata.getVirtualPlan(viewId), SQLConstants.Reserved.SELECT, metadata).getCommand().clone();
- CacheHint hint = c.getCacheHint();
- id.setCacheHint(hint);
}
}
}
+ updateCacheHint(viewId, metadata, group, id);
return id;
}
+
+ private void updateCacheHint(Object viewId,
+ QueryMetadataInterface metadata, GroupSymbol group,
+ TempMetadataID id) throws TeiidComponentException,
+ QueryMetadataException, QueryResolverException,
+ QueryValidatorException {
+ Command c = QueryResolver.resolveView(group, metadata.getVirtualPlan(viewId), SQLConstants.Reserved.SELECT, metadata).getCommand();
+ CacheHint hint = c.getCacheHint();
+ id.setCacheHint(hint);
+ }
static ArrayList<TempMetadataID> resolveIndex(
QueryMetadataInterface metadata, TempMetadataID id, Object pk)
Modified: trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
===================================================================
--- trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2011-05-02 17:02:28 UTC (rev 3134)
@@ -478,13 +478,34 @@
}
{
(command = createUpdateProcedure(info) |
- command = triggerAction(info))
+ command = forEachRowTriggerAction(info))
<EOF>
{
return command;
}
}
+Command createTrigger(ParseInfo info) :
+{
+ String target = null;
+ TriggerAction triggerAction = null;
+ Token event = null;
+
+}
+{
+ <CREATE> <TRIGGER> <ON> target = id() nonReserved("INSTEAD") <OF>
+ (event = <INSERT> | event = <UPDATE> | event = <DELETE>)
+ <AS> triggerAction = forEachRowTriggerAction(info)
+ {
+ AlterTrigger alterTrigger = new AlterTrigger();
+ alterTrigger.setTarget(new GroupSymbol(target));
+ alterTrigger.setDefinition(triggerAction);
+ alterTrigger.setEvent(Table.TriggerEvent.valueOf(event.image.toUpperCase()));
+ alterTrigger.setCreate(true);
+ return alterTrigger;
+ }
+}
+
Command alter(ParseInfo info) :
{
String target = null;
@@ -492,7 +513,8 @@
Block block = null;
TriggerAction triggerAction = null;
Token comment = null;
- Table.TriggerOperation op = null;
+ Token event = null;
+ String enabled = null;
}
{
<ALTER>
@@ -520,19 +542,23 @@
return alterProc;
}
| (<TRIGGER> <ON> target = id() nonReserved("INSTEAD") <OF>
- (<INSERT> {op = Table.TriggerOperation.INSERT;} |<UPDATE> {op = Table.TriggerOperation.UPDATE;}|<DELETE> {op = Table.TriggerOperation.DELETE;})
- <AS> triggerAction = triggerAction(info))
+ (event = <INSERT> | event = <UPDATE> | event = <DELETE>)
+ ((<AS> triggerAction = forEachRowTriggerAction(info))
+ |enabled = nonReserved("ENABLED","DISABLED")))
{
AlterTrigger alterTrigger = new AlterTrigger();
alterTrigger.setTarget(new GroupSymbol(target));
alterTrigger.setDefinition(triggerAction);
- alterTrigger.setOperation(op);
+ alterTrigger.setEvent(Table.TriggerEvent.valueOf(event.image.toUpperCase()));
+ if (enabled != null) {
+ alterTrigger.setEnabled(enabled.equalsIgnoreCase("ENABLED"));
+ }
return alterTrigger;
}
)
}
-TriggerAction triggerAction(ParseInfo info) :
+TriggerAction forEachRowTriggerAction(ParseInfo info) :
{
Block b = null;
}
@@ -555,8 +581,9 @@
command = update(info) |
command = delete(info) |
command = dropTable(info) |
- command = createTempTable(info) |
- command = alter(info)
+ LOOKAHEAD(2) command = createTempTable(info) |
+ command = alter(info) |
+ command = createTrigger(info)
)
{
return command;
Modified: trunk/engine/src/main/resources/org/teiid/query/i18n.properties
===================================================================
--- trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2011-05-02 17:02:28 UTC (rev 3134)
@@ -831,8 +831,9 @@
DataTierManager.could_not_obtain_connector_binding=Could not obtain connection factory for model {0} in VDB name= {1}, version {2}
+DataTierManagerImpl.max_value_length=Property value length exceeds max of {0}.
+DataTierManagerImpl.unknown_uuid=Could not find a metadata record with uuid {0}.
-
DQPCore.Unable_to_load_metadata_for_VDB_name__{0},_version__{1}=Unable to load metadata for VDB name= {0}, version= {1}
DQPCore.Unknown_query_metadata_exception_while_registering_query__{0}.=Unknown query metadata exception while registering query: {0}.
DQPCore.Clearing_prepared_plan_cache=Clearing prepared plan cache
@@ -912,4 +913,7 @@
ArrayTableNode.conversion_error=Could not convert value for column: {0}
AlterResolver.not_a_view={0} is not a valid view.
-ValidationVisitor.not_a_procedure={0} is not a valid virtual procedure.
\ No newline at end of file
+ValidationVisitor.not_a_procedure={0} is not a valid virtual procedure.
+
+DdlPlan.event_not_exists={0} does not have an INSTEAD OF trigger defined for {1}.
+DdlPlan.event_already_exists={0} already has an INSTEAD OF trigger defined for {1}.
\ No newline at end of file
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -364,7 +364,7 @@
assertEquals(2, this.core.getPrepPlanCache().getCacheHitCount());
- //perform a minor update, we will purge the plan
+ //perform a major update, we will purge the plan
sql = "delete from #temp"; //$NON-NLS-1$
reqMsg = exampleRequestMessage(sql);
rm = execute(userName, sessionid, reqMsg);
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -40,6 +40,7 @@
import org.teiid.query.processor.FakeDataManager;
import org.teiid.query.resolver.QueryResolver;
import org.teiid.query.sql.lang.Command;
+import org.teiid.query.tempdata.TempTableStore;
import org.teiid.query.unittest.FakeMetadataFactory;
import org.teiid.query.util.ContextProperties;
@@ -50,7 +51,8 @@
*/
public class TestRequest extends TestCase {
- private final static String QUERY = "SELECT * FROM pm1.g1"; //$NON-NLS-1$
+ private static final TempTableStore TEMP_TABLE_STORE = new TempTableStore("1"); //$NON-NLS-1$
+ private final static String QUERY = "SELECT * FROM pm1.g1"; //$NON-NLS-1$
/**
* Constructor for TestRequest.
@@ -77,7 +79,7 @@
RequestMessage message = new RequestMessage();
DQPWorkContext workContext = FakeMetadataFactory.buildWorkContext(metadata, FakeMetadataFactory.example1VDB());
- request.initialize(message, null, null,new FakeTransactionService(),null, workContext, null);
+ request.initialize(message, null, null,new FakeTransactionService(), TEMP_TABLE_STORE, workContext, null);
request.initMetadata();
request.setAuthorizationValidator(new DataRoleAuthorizationValidator(true, true, true));
request.validateAccess(command);
@@ -132,15 +134,12 @@
Mockito.stub(repo.getConnectorManager(Mockito.anyString())).toReturn(new AutoGenDataService());
request.initialize(message, Mockito.mock(BufferManager.class),
- new FakeDataManager(), new FakeTransactionService(), null, workContext, null);
+ new FakeDataManager(), new FakeTransactionService(), TEMP_TABLE_STORE, workContext, null);
request.setAuthorizationValidator(new DataRoleAuthorizationValidator(false, true, true));
request.processRequest();
return request;
}
-
-
-
/**
* Test PreparedStatementRequest.processRequest().
* Test processing the same query twice, and make sure that doesn't cause problems.
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/proc/TestProcedurePlanner.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/proc/TestProcedurePlanner.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/proc/TestProcedurePlanner.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -71,7 +71,7 @@
ValidatorReport report = Validator.validate(userCommand, metadata);
if (report.hasItems()) {
- ValidatorFailure firstFailure = (ValidatorFailure) report.getItems().iterator().next();
+ ValidatorFailure firstFailure = report.getItems().iterator().next();
throw new QueryValidatorException(firstFailure.getMessage());
}
userCommand = QueryRewriter.rewrite(userCommand, metadata, null);
Modified: trunk/engine/src/test/java/org/teiid/query/parser/TestParseAlter.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/parser/TestParseAlter.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/test/java/org/teiid/query/parser/TestParseAlter.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -25,7 +25,7 @@
import static org.teiid.query.parser.TestParser.*;
import org.junit.Test;
-import org.teiid.metadata.Table.TriggerOperation;
+import org.teiid.metadata.Table.TriggerEvent;
import org.teiid.query.sql.lang.AlterTrigger;
import org.teiid.query.sql.lang.AlterView;
import org.teiid.query.sql.lang.QueryCommand;
@@ -52,9 +52,26 @@
@Test public void testAlterTrigger() throws Exception {
AlterTrigger alterTrigger = new AlterTrigger();
alterTrigger.setTarget(new GroupSymbol("x"));
- alterTrigger.setOperation(TriggerOperation.UPDATE);
+ alterTrigger.setEvent(TriggerEvent.UPDATE);
alterTrigger.setDefinition((TriggerAction) QueryParser.getQueryParser().parseUpdateProcedure("for each row begin end"));
helpTest("alter trigger on x instead of update as for each row begin end", "ALTER TRIGGER ON x INSTEAD OF UPDATE AS\nFOR EACH ROW\nBEGIN\nEND", alterTrigger);
}
+ @Test public void testAlterDisabled() throws Exception {
+ AlterTrigger alterTrigger = new AlterTrigger();
+ alterTrigger.setTarget(new GroupSymbol("x"));
+ alterTrigger.setEvent(TriggerEvent.UPDATE);
+ alterTrigger.setEnabled(false);
+ helpTest("alter trigger on x instead of update disabled", "ALTER TRIGGER ON x INSTEAD OF UPDATE DISABLED", alterTrigger);
+ }
+
+ @Test public void testCreateTrigger() throws Exception {
+ AlterTrigger alterTrigger = new AlterTrigger();
+ alterTrigger.setCreate(true);
+ alterTrigger.setTarget(new GroupSymbol("x"));
+ alterTrigger.setEvent(TriggerEvent.UPDATE);
+ alterTrigger.setDefinition((TriggerAction) QueryParser.getQueryParser().parseUpdateProcedure("for each row begin end"));
+ helpTest("create trigger on x instead of update as for each row begin end", "CREATE TRIGGER ON x INSTEAD OF UPDATE AS\nFOR EACH ROW\nBEGIN\nEND", alterTrigger);
+ }
+
}
Modified: trunk/engine/src/test/java/org/teiid/query/processor/FakeDataManager.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/FakeDataManager.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/test/java/org/teiid/query/processor/FakeDataManager.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -34,7 +34,9 @@
import org.teiid.common.buffer.BlockedException;
import org.teiid.common.buffer.TupleSource;
import org.teiid.core.TeiidComponentException;
+import org.teiid.events.EventDistributor;
import org.teiid.logging.LogManager;
+import org.teiid.metadata.MetadataRepository;
import org.teiid.query.eval.Evaluator;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataID;
@@ -389,4 +391,16 @@
this.registerTuples(group.getMetadataID(), elementSymbols, tuples);
}
+ @Override
+ public EventDistributor getEventDistributor() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public MetadataRepository getMetadataRepository() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}
\ No newline at end of file
Modified: trunk/engine/src/test/java/org/teiid/query/processor/HardcodedDataManager.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/HardcodedDataManager.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/test/java/org/teiid/query/processor/HardcodedDataManager.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -32,6 +32,8 @@
import org.teiid.common.buffer.TupleSource;
import org.teiid.core.TeiidComponentException;
import org.teiid.dqp.internal.datamgr.LanguageBridgeFactory;
+import org.teiid.events.EventDistributor;
+import org.teiid.metadata.MetadataRepository;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.util.CommandContext;
@@ -168,4 +170,16 @@
}
+ @Override
+ public EventDistributor getEventDistributor() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public MetadataRepository getMetadataRepository() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}
Modified: trunk/engine/src/test/java/org/teiid/query/processor/relational/TestBatchedUpdateNode.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/relational/TestBatchedUpdateNode.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/test/java/org/teiid/query/processor/relational/TestBatchedUpdateNode.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -36,6 +36,8 @@
import org.teiid.common.buffer.TupleBatch;
import org.teiid.common.buffer.TupleSource;
import org.teiid.core.TeiidComponentException;
+import org.teiid.events.EventDistributor;
+import org.teiid.metadata.MetadataRepository;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.optimizer.TestBatchedUpdatePlanner;
import org.teiid.query.processor.ProcessorDataManager;
@@ -219,6 +221,16 @@
actualCommands.add(command);
return new FakeTupleSource(numExecutedCommands);
}
+ @Override
+ public EventDistributor getEventDistributor() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ @Override
+ public MetadataRepository getMetadataRepository() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
private static final class FakeTupleSource implements TupleSource {
private int currentTuple = 0;
Modified: trunk/engine/src/test/java/org/teiid/query/processor/relational/TestProjectIntoNode.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/relational/TestProjectIntoNode.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/engine/src/test/java/org/teiid/query/processor/relational/TestProjectIntoNode.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -36,6 +36,8 @@
import org.teiid.common.buffer.TupleSource;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
+import org.teiid.events.EventDistributor;
+import org.teiid.metadata.MetadataRepository;
import org.teiid.query.eval.Evaluator;
import org.teiid.query.processor.FakeTupleSource;
import org.teiid.query.processor.ProcessorDataManager;
@@ -184,6 +186,16 @@
Object val = row.get(0);
assertEquals(new Integer(value), val);
}
+ @Override
+ public EventDistributor getEventDistributor() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ @Override
+ public MetadataRepository getMetadataRepository() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
private static final class FakeDataTupleSource implements TupleSource {
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 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -70,7 +70,6 @@
import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.adminapi.impl.WorkerPoolStatisticsMetadata;
import org.teiid.adminapi.jboss.AdminProvider;
-import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.cache.CacheFactory;
import org.teiid.client.DQP;
import org.teiid.client.RequestMessage;
@@ -90,6 +89,7 @@
import org.teiid.dqp.internal.process.DQPConfiguration;
import org.teiid.dqp.internal.process.DQPCore;
import org.teiid.dqp.internal.process.DQPWorkContext;
+import org.teiid.dqp.internal.process.DataTierManagerImpl;
import org.teiid.dqp.internal.process.TransactionServerImpl;
import org.teiid.dqp.service.BufferService;
import org.teiid.dqp.service.SessionService;
@@ -102,16 +102,20 @@
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.ColumnStats;
import org.teiid.metadata.MetadataRepository;
+import org.teiid.metadata.Procedure;
import org.teiid.metadata.Schema;
import org.teiid.metadata.Table;
import org.teiid.metadata.TableStats;
+import org.teiid.metadata.Table.TriggerEvent;
import org.teiid.net.TeiidURL;
import org.teiid.query.QueryPlugin;
import org.teiid.query.metadata.TransformationMetadata;
import org.teiid.query.optimizer.relational.RelationalPlanner;
+import org.teiid.query.processor.DdlPlan;
import org.teiid.query.tempdata.TempTableStore;
import org.teiid.security.SecurityHelper;
import org.teiid.transport.ClientServiceRegistry;
@@ -672,38 +676,23 @@
updateModified(true, vdbName, vdbVersion, schema, tableNames);
}
- @Override
- public void schemaModification(String vdbName, int vdbVersion,
- String schema, String... objectNames) {
- updateModified(false, vdbName, vdbVersion, schema, objectNames);
- }
-
private void updateModified(boolean data, String vdbName, int vdbVersion, String schema,
String... objectNames) {
- VDBMetaData vdb = this.vdbRepository.getVDB(vdbName, vdbVersion);
- if (vdb == null) {
+ Schema s = getSchema(vdbName, vdbVersion, schema);
+ if (s == null) {
return;
}
- TransformationMetadata tm = vdb.getAttachment(TransformationMetadata.class);
- if (tm == null) {
- return;
- }
- try {
- Schema s = tm.getMetadataStore().getSchema(schema.toUpperCase());
- long ts = System.currentTimeMillis();
- for (String name:objectNames) {
- Table table = s.getTables().get(name);
- if (table == null) {
- continue;
- }
- if (data) {
- table.setLastDataModification(ts);
- } else {
- table.setLastModified(ts);
- }
+ long ts = System.currentTimeMillis();
+ for (String name:objectNames) {
+ Table table = s.getTables().get(name);
+ if (table == null) {
+ continue;
}
- } catch (TeiidException e) {
- LogManager.logError(LogConstants.CTX_DQP, e, QueryPlugin.Util.getString("DQPCore.unable_to_process_event")); //$NON-NLS-1$
+ if (data) {
+ table.setLastDataModification(ts);
+ } else {
+ table.setLastModified(ts);
+ }
}
}
@@ -737,6 +726,14 @@
private Table getTable(String vdbName, int vdbVersion, String schemaName,
String tableName) {
+ Schema s = getSchema(vdbName, vdbVersion, schemaName);
+ if (s == null) {
+ return null;
+ }
+ return s.getTables().get(tableName.toUpperCase());
+ }
+
+ private Schema getSchema(String vdbName, int vdbVersion, String schemaName) {
VDBMetaData vdb = this.vdbRepository.getVDB(vdbName, vdbVersion);
if (vdb == null) {
return null;
@@ -745,17 +742,62 @@
if (tm == null) {
return null;
}
- Schema s;
- try {
- s = tm.getMetadataStore().getSchema(schemaName.toUpperCase());
- } catch (QueryMetadataException e) {
- LogManager.logError(LogConstants.CTX_DQP, e, QueryPlugin.Util.getString("DQPCore.unable_to_process_event")); //$NON-NLS-1$
- return null;
+ return tm.getMetadataStore().getSchemas().get(schemaName.toUpperCase());
+ }
+
+ @Override
+ public void setInsteadOfTriggerDefinition(String vdbName, int vdbVersion,
+ String schema, String viewName, TriggerEvent triggerEvent,
+ String triggerDefinition, Boolean enabled) {
+ Table t = getTable(vdbName, vdbVersion, schema, viewName);
+ if (t == null) {
+ return;
}
- return s.getTables().get(tableName.toUpperCase());
+ DdlPlan.alterInsteadOfTrigger(this.vdbRepository.getVDB(vdbName, vdbVersion), t, triggerDefinition, enabled, triggerEvent);
}
@Override
+ public void setProcedureDefinition(String vdbName, int vdbVersion,
+ String schema, String procName, String definition) {
+ Schema s = getSchema(vdbName, vdbVersion, schema);
+ if (s == null) {
+ return;
+ }
+ Procedure p = s.getProcedures().get(procName.toUpperCase());
+ if (p == null) {
+ return;
+ }
+ DdlPlan.alterProcedureDefinition(this.vdbRepository.getVDB(vdbName, vdbVersion), p, definition);
+ }
+
+ @Override
+ public void setViewDefinition(String vdbName, int vdbVersion,
+ String schema, String viewName, String definition) {
+ Table t = getTable(vdbName, vdbVersion, schema, viewName);
+ if (t == null) {
+ return;
+ }
+ DdlPlan.alterView(this.vdbRepository.getVDB(vdbName, vdbVersion), t, definition);
+ }
+
+ @Override
+ public void setProperty(String vdbName, int vdbVersion, String uuid,
+ String name, String value) {
+ VDBMetaData vdb = this.vdbRepository.getVDB(vdbName, vdbVersion);
+ if (vdb == null) {
+ return;
+ }
+ TransformationMetadata tm = vdb.getAttachment(TransformationMetadata.class);
+ if (tm == null) {
+ return;
+ }
+ AbstractMetadataRecord record = DataTierManagerImpl.getByUuid(tm.getMetadataStore(), uuid);
+ if (record != null) {
+ record.setProperty(name, value);
+ }
+ }
+
+ @Override
public EventDistributor getEventDistributor() {
if (this.eventDistributor != null) {
return eventDistributor;
Modified: trunk/metadata/src/main/resources/System.vdb
===================================================================
(Binary files differ)
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -27,6 +27,7 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -44,6 +45,7 @@
import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
import org.teiid.logging.LogConstants;
import org.teiid.logging.LogManager;
+import org.teiid.metadata.AbstractMetadataRecord;
import org.teiid.metadata.Column;
import org.teiid.metadata.ColumnStats;
import org.teiid.metadata.Datatype;
@@ -113,8 +115,13 @@
LinkedList<MetadataStore> allStores = new LinkedList<MetadataStore>(stores.getStores());
allStores.addAll(Arrays.asList(cvdb.getAdditionalStores()));
for (MetadataStore metadataStore : allStores) {
+ Collection<AbstractMetadataRecord> records = new LinkedHashSet<AbstractMetadataRecord>();
for (Schema schema : metadataStore.getSchemas().values()) {
+ records.add(schema);
for (Table t : schema.getTables().values()) {
+ records.add(t);
+ records.addAll(t.getColumns());
+ records.addAll(t.getAllKeys());
if (t.isPhysical()) {
TableStats stats = metadataRepository.getTableStats(vdbName, vdbVersion, t);
if (stats != null) {
@@ -132,22 +139,39 @@
t.setSelectTransformation(def);
}
if (t.supportsUpdate()) {
- def = metadataRepository.getInsteadOfTriggerDefinition(vdbName, vdbVersion, t, Table.TriggerOperation.INSERT);
+ def = metadataRepository.getInsteadOfTriggerDefinition(vdbName, vdbVersion, t, Table.TriggerEvent.INSERT);
if (def != null) {
t.setInsertPlan(def);
}
- def = metadataRepository.getInsteadOfTriggerDefinition(vdbName, vdbVersion, t, Table.TriggerOperation.UPDATE);
+ Boolean enabled = metadataRepository.isInsteadOfTriggerEnabled(vdbName, vdbVersion, t, Table.TriggerEvent.INSERT);
+ if (enabled != null) {
+ t.setInsertPlanEnabled(enabled);
+ }
+ def = metadataRepository.getInsteadOfTriggerDefinition(vdbName, vdbVersion, t, Table.TriggerEvent.UPDATE);
if (def != null) {
t.setUpdatePlan(def);
}
- def = metadataRepository.getInsteadOfTriggerDefinition(vdbName, vdbVersion, t, Table.TriggerOperation.DELETE);
+ enabled = metadataRepository.isInsteadOfTriggerEnabled(vdbName, vdbVersion, t, Table.TriggerEvent.UPDATE);
+ if (enabled != null) {
+ t.setUpdatePlanEnabled(enabled);
+ }
+ def = metadataRepository.getInsteadOfTriggerDefinition(vdbName, vdbVersion, t, Table.TriggerEvent.DELETE);
if (def != null) {
t.setDeletePlan(def);
}
+ enabled = metadataRepository.isInsteadOfTriggerEnabled(vdbName, vdbVersion, t, Table.TriggerEvent.DELETE);
+ if (enabled != null) {
+ t.setDeletePlanEnabled(enabled);
+ }
}
}
}
for (Procedure p : schema.getProcedures().values()) {
+ records.add(p);
+ records.addAll(p.getParameters());
+ if (p.getResultSet() != null) {
+ records.addAll(p.getResultSet().getColumns());
+ }
if (p.isVirtual() && !p.isFunction()) {
String proc = metadataRepository.getProcedureDefinition(vdbName, vdbVersion, p);
if (proc != null) {
@@ -156,6 +180,12 @@
}
}
}
+ for (AbstractMetadataRecord abstractMetadataRecord : records) {
+ LinkedHashMap<String, String> p = metadataRepository.getProperties(vdbName, vdbVersion, abstractMetadataRecord);
+ if (p != null) {
+ abstractMetadataRecord.setProperties(p);
+ }
+ }
}
}
Modified: trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestMetadataUpdates.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestMetadataUpdates.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestMetadataUpdates.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -23,6 +23,7 @@
import static org.junit.Assert.*;
+import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -39,7 +40,6 @@
import org.teiid.metadata.MetadataRepository;
import org.teiid.metadata.Procedure;
import org.teiid.metadata.Table;
-import org.teiid.metadata.Table.TriggerOperation;
@SuppressWarnings("nls")
public class TestMetadataUpdates {
@@ -72,12 +72,18 @@
return null;
}
});
- Mockito.stub(repo.getInsteadOfTriggerDefinition(Mockito.anyString(), Mockito.anyInt(), (Table)Mockito.anyObject(), (Table.TriggerOperation) Mockito.anyObject())).toAnswer(new Answer<String>() {
+ Mockito.stub(repo.getInsteadOfTriggerDefinition(Mockito.anyString(), Mockito.anyInt(), (Table)Mockito.anyObject(), (Table.TriggerEvent) Mockito.anyObject())).toAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
- return "for each row select 1/0; begin end";
+ return "for each row select 1/0;";
}
});
+ Mockito.stub(repo.isInsteadOfTriggerEnabled(Mockito.anyString(), Mockito.anyInt(), (Table)Mockito.anyObject(), (Table.TriggerEvent) Mockito.anyObject())).toAnswer(new Answer<Boolean>() {
+ @Override
+ public Boolean answer(InvocationOnMock invocation) throws Throwable {
+ return Boolean.TRUE;
+ }
+ });
server.deployVDB(VDB, UnitTestUtil.getTestDataPath() + "/metadata.vdb");
connection = server.createConnection("jdbc:teiid:" + VDB); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -105,4 +111,110 @@
assertEquals(2011, rs.getInt(1));
}
+ @Test public void testSetProperty() throws Exception {
+ CallableStatement s = connection.prepareCall("{? = call sysadmin.setProperty((select uid from tables where name='vw'), 'foo', 'bar')}");
+ assertFalse(s.execute());
+ assertNull(s.getClob(1));
+
+ Statement stmt = connection.createStatement();
+ ResultSet rs = stmt.executeQuery("select name, \"value\" from properties where uid = (select uid from tables where name='vw')");
+ rs.next();
+ assertEquals("foo", rs.getString(1));
+ assertEquals("bar", rs.getString(2));
+ }
+
+ @Test(expected=SQLException.class) public void testSetProperty_Invalid() throws Exception {
+ CallableStatement s = connection.prepareCall("{? = call sysadmin.setProperty('ah', 'foo', 'bar')}");
+ s.execute();
+ }
+
+ @Test public void testAlterView() throws Exception {
+ Statement s = connection.createStatement();
+ ResultSet rs = s.executeQuery("select * from vw");
+ rs.next();
+ assertEquals(2011, rs.getInt(1));
+
+ assertFalse(s.execute("alter view vw as select '2012'"));
+
+ rs = s.executeQuery("select * from vw");
+ rs.next();
+ assertEquals(2012, rs.getInt(1));
+ }
+
+ @Test public void testAlterProcedure() throws Exception {
+ Statement s = connection.createStatement();
+ ResultSet rs = s.executeQuery("call proc(1)");
+ rs.next();
+ assertEquals(2011, rs.getInt(1));
+
+ assertFalse(s.execute("alter procedure proc as begin select '2012'; end"));
+
+ //the sleep is needed to ensure that the plan is invalidated
+ Thread.sleep(100);
+
+ rs = s.executeQuery("call proc(1)");
+ rs.next();
+ assertEquals(2012, rs.getInt(1));
+ }
+
+ @Test public void testAlterTriggerActionUpdate() throws Exception {
+ Statement s = connection.createStatement();
+ try {
+ s.execute("update vw set x = 1");
+ fail();
+ } catch (SQLException e) {
+ }
+
+ assertFalse(s.execute("alter trigger on vw instead of update as for each row select 1;"));
+
+ s.execute("update vw set x = 1");
+ assertEquals(1, s.getUpdateCount());
+ }
+
+ @Test public void testAlterTriggerActionInsert() throws Exception {
+ Statement s = connection.createStatement();
+ try {
+ s.execute("insert into vw (x) values ('a')");
+ fail();
+ } catch (SQLException e) {
+ }
+
+ assertFalse(s.execute("alter trigger on vw instead of insert as for each row select 1;"));
+
+ s.execute("insert into vw (x) values ('a')");
+ assertEquals(1, s.getUpdateCount());
+ }
+
+ @Test public void testAlterTriggerActionDelete() throws Exception {
+ Statement s = connection.createStatement();
+ try {
+ s.execute("delete from vw");
+ fail();
+ } catch (SQLException e) {
+ }
+
+ assertFalse(s.execute("alter trigger on vw instead of delete as for each row select 1;"));
+
+ s.execute("delete from vw");
+ assertEquals(1, s.getUpdateCount());
+
+ assertFalse(s.execute("alter trigger on vw instead of delete disabled"));
+
+ try {
+ s.execute("delete from vw");
+ fail();
+ } catch (SQLException e) {
+ }
+
+ assertFalse(s.execute("alter trigger on vw instead of delete enabled"));
+
+ s.execute("delete from vw");
+ assertEquals(1, s.getUpdateCount());
+ }
+
+ @Test(expected=SQLException.class) public void testCreateTriggerActionUpdate() throws Exception {
+ Statement s = connection.createStatement();
+ s.execute("create trigger on vw instead of update as for each row select 1;");
+ }
+
}
Modified: trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestSystemVirtualModel.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestSystemVirtualModel.java 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/java/org/teiid/systemmodel/TestSystemVirtualModel.java 2011-05-02 17:02:28 UTC (rev 3134)
@@ -84,11 +84,11 @@
}
@Test public void testProperties() {
- String[] expected = { "Name[string] Value[string] UID[string] OID[integer]",
- "pg_type:oid 30 mmuid:ffa4ac73-b549-470e-931f-dc36330cb8c4 1",
- "pg_type:oid 1009 mmuid:d9f36bdc-7b25-4af0-b9f5-a96aac6d3094 2",
- "pg_type:oid 1002 mmuid:bcbed548-176c-4116-a5d6-7638cb0206e1 3",
- "pg_type:oid 1028 mmuid:a385751f-a31a-4d5d-9197-3fbd390b0251 4"
+ String[] expected = { "Name[string] Value[string] UID[string] OID[integer] ClobValue[clob]",
+ "pg_type:oid 30 mmuid:ffa4ac73-b549-470e-931f-dc36330cb8c4 1 30",
+ "pg_type:oid 1009 mmuid:d9f36bdc-7b25-4af0-b9f5-a96aac6d3094 2 1009",
+ "pg_type:oid 1002 mmuid:bcbed548-176c-4116-a5d6-7638cb0206e1 3 1002",
+ "pg_type:oid 1028 mmuid:a385751f-a31a-4d5d-9197-3fbd390b0251 4 1028"
}; //$NON-NLS-1$
executeAndAssertResults("select* from SYS.Properties", expected); //$NON-NLS-1$
Modified: trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetColumns.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetColumns.expected 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetColumns.expected 2011-05-02 17:02:28 UTC (rev 3134)
@@ -470,6 +470,7 @@
QT_Ora9DS SYS Properties Value 12 string 255 <null> 0 10 0 <null> <null> <null> <null> 255 2 NO <null> <null> <null> !
<null> NO
QT_Ora9DS SYS Properties UID 12 string 50 <null> 0 10 0 <null> <null> <null> <null> 50 3 NO <null> <null> <null> !
<null> NO
QT_Ora9DS SYS Properties OID 4 integer 10 <null> 0 10 0 <null> <null> <null> <null> 10 4 NO <null> <null> <null> !
<null> NO
+QT_Ora9DS SYS Properties ClobValue 2005 clob 2097152 <null> 0 10 1 <null> <null> <null> <null> 2097152 5 YES <null> <null> <null> !
<null> NO
QT_Ora9DS SYS ReferenceKeyColumns PKTABLE_CAT 12 string 255 <null> 0 10 1 <null> <null> <null> <null> 255 1 YES <null> <null> <null> !
<null> NO
QT_Ora9DS SYS ReferenceKeyColumns PKTABLE_SCHEM 12 string 255 <null> 0 10 1 <null> <null> <null> <null> 255 2 YES <null> <null> <null> !
<null> NO
QT_Ora9DS SYS ReferenceKeyColumns PKTABLE_NAME 12 string 255 <null> 0 10 1 <null> <null> <null> <null> 255 3 YES <null> <null> <null> !
<null> NO
@@ -1083,7 +1084,7 @@
QT_Ora9DS XQT xqtFullData BigIntegerValue 2 biginteger 19 <null> 0 10 1 <null> <null> <null> <null> 28 15 YES <null> <null> <null> !
<null> NO
QT_Ora9DS XQT xqtFullData BigDecimalValue 2 bigdecimal 20 <null> 0 10 1 <null> <null> <null> <null> 126 16 YES <null> <null> <null> !
<null> NO
QT_Ora9DS XQT xqtFullData ObjectValue 2000 object 2048 <null> 0 10 1 <null> <null> <null> <null> 2048 17 YES <null> <null> <null> !
<null> NO
-Row Count : 1083
+Row Count : 1084
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 QT_Ora9DS java.lang.String TABLE_CAT string SYS Columns 255 255 0 false false false false 0 true true false false
SchemaName 12 QT_Ora9DS java.lang.String TABLE_SCHEM string SYS Columns 255 255 0 false true false true 1 false true true true
Modified: trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetProcedureColumns.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetProcedureColumns.expected 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetProcedureColumns.expected 2011-05-02 17:02:28 UTC (rev 3134)
@@ -55,9 +55,13 @@
QT_Ora9DS SYSADMIN setColumnStats nullCount 1 4 integer 10 10 0 10 1 <null> <null> <null> <null> <null> 4 YES setColumnStats
QT_Ora9DS SYSADMIN setColumnStats max 1 12 string 4000 4000 0 10 1 <null> <null> <null> <null> <null> 5 YES setColumnStats
QT_Ora9DS SYSADMIN setColumnStats min 1 12 string 4000 4000 0 10 1 <null> <null> <null> <null> <null> 6 YES setColumnStats
+QT_Ora9DS SYSADMIN setProperty UID 1 12 string 4000 50 0 10 0 <null> <null> <null> <null> <null> 2 NO setProperty
+QT_Ora9DS SYSADMIN setProperty Name 1 12 string 4000 4000 0 10 0 <null> <null> <null> <null> <null> 3 NO setProperty
+QT_Ora9DS SYSADMIN setProperty Value 1 2005 clob 2147483647 2097152 0 10 1 <null> <null> <null> <null> <null> 4 YES setProperty
+QT_Ora9DS SYSADMIN setProperty OldValue 5 2005 clob 2147483647 2097152 0 10 0 <null> <null> <null> <null> <null> 1 NO setProperty
QT_Ora9DS SYSADMIN setTableStats tableName 1 12 string 4000 4000 0 10 0 <null> <null> <null> <null> <null> 1 NO setTableStats
QT_Ora9DS SYSADMIN setTableStats cardinality 1 4 integer 10 10 0 10 0 <null> <null> <null> <null> <null> 2 NO setTableStats
-Row Count : 57
+Row Count : 61
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 QT_Ora9DS java.lang.String PROCEDURE_CAT string SYS ProcedureParams 255 255 0 false false false false 0 true true false false
SchemaName 12 QT_Ora9DS java.lang.String PROCEDURE_SCHEM string SYS ProcedureParams 255 255 0 false true false true 1 false true true true
Modified: trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetProcedures.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetProcedures.expected 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetProcedures.expected 2011-05-02 17:02:28 UTC (rev 3134)
@@ -8,8 +8,9 @@
QT_Ora9DS SYSADMIN refreshMatView <null> <null> <null> <null> 1 refreshMatView
QT_Ora9DS SYSADMIN refreshMatViewRow <null> <null> <null> <null> 1 refreshMatViewRow
QT_Ora9DS SYSADMIN setColumnStats <null> <null> <null> <null> 1 setColumnStats
+QT_Ora9DS SYSADMIN setProperty <null> <null> <null> <null> 1 setProperty
QT_Ora9DS SYSADMIN setTableStats <null> <null> <null> <null> 1 setTableStats
-Row Count : 9
+Row Count : 10
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 QT_Ora9DS java.lang.String PROCEDURE_CAT string SYS Procedures 255 255 0 false false false false 0 true true false false
SchemaName 12 QT_Ora9DS java.lang.String PROCEDURE_SCHEM string SYS Procedures 255 255 0 false true false true 1 false true true true
Modified: trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetProceduresWithEscape.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetProceduresWithEscape.expected 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/resources/TestMMDatabaseMetaData/testGetProceduresWithEscape.expected 2011-05-02 17:02:28 UTC (rev 3134)
@@ -8,8 +8,9 @@
QT_Ora9DS SYSADMIN refreshMatView <null> <null> <null> <null> 1 refreshMatView
QT_Ora9DS SYSADMIN refreshMatViewRow <null> <null> <null> <null> 1 refreshMatViewRow
QT_Ora9DS SYSADMIN setColumnStats <null> <null> <null> <null> 1 setColumnStats
+QT_Ora9DS SYSADMIN setProperty <null> <null> <null> <null> 1 setProperty
QT_Ora9DS SYSADMIN setTableStats <null> <null> <null> <null> 1 setTableStats
-Row Count : 9
+Row Count : 10
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 QT_Ora9DS java.lang.String PROCEDURE_CAT string SYS Procedures 255 255 0 false false false false 0 true true false false
SchemaName 12 QT_Ora9DS java.lang.String PROCEDURE_SCHEM string SYS Procedures 255 255 0 false true false true 1 false true true true
Modified: trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_ATTRIBUTE.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_ATTRIBUTE.expected 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/resources/TestODBCSchema/test_PG_ATTRIBUTE.expected 2011-05-02 17:02:28 UTC (rev 3134)
@@ -127,131 +127,132 @@
125 14 Value 1043 -1 2 255 true false false
126 14 UID 1043 -1 3 50 true false false
127 14 OID 23 4 4 10 true false false
-128 15 PKTABLE_CAT 1043 -1 1 255 false false false
-129 15 PKTABLE_SCHEM 1043 -1 2 255 false false false
-130 15 PKTABLE_NAME 1043 -1 3 255 false false false
-131 15 PKCOLUMN_NAME 1043 -1 4 255 false false false
-132 15 FKTABLE_CAT 1043 -1 5 255 false false false
-133 15 FKTABLE_SCHEM 1043 -1 6 255 false false false
-134 15 FKTABLE_NAME 1043 -1 7 255 false false false
-135 15 FKCOLUMN_NAME 1043 -1 8 255 false false false
-136 15 KEY_SEQ 21 2 9 5 false false false
-137 15 UPDATE_RULE 23 4 10 10 false false false
-138 15 DELETE_RULE 23 4 11 10 false false false
-139 15 FK_NAME 1043 -1 12 255 false false false
-140 15 PK_NAME 1043 -1 13 255 false false false
-141 15 DEFERRABILITY 23 4 14 10 false false false
-142 16 VDBName 1043 -1 1 255 false false false
-143 16 Name 1043 -1 2 255 false false false
-144 16 IsPhysical 16 1 3 1 true false false
-145 16 UID 1043 -1 4 50 true false false
-146 16 Description 1043 -1 5 255 false false false
-147 16 PrimaryMetamodelURI 1043 -1 6 255 true false false
-148 16 OID 23 4 7 10 true false false
-149 17 VDBName 1043 -1 1 255 false false false
-150 17 SchemaName 1043 -1 2 255 false false false
-151 17 Name 1043 -1 3 255 true false false
-152 17 Type 1043 -1 4 20 true false false
-153 17 NameInSource 1043 -1 5 255 false false false
-154 17 IsPhysical 16 1 6 1 true false false
-155 17 SupportsUpdates 16 1 7 1 true false false
-156 17 UID 1043 -1 8 50 true false false
-157 17 Cardinality 23 4 9 10 true false false
-158 17 Description 1043 -1 10 255 false false false
-159 17 IsSystem 16 1 11 1 false false false
-160 17 IsMaterialized 16 1 12 0 true false false
-161 17 OID 23 4 13 10 true false false
-162 18 Name 1043 -1 1 255 true false false
-163 18 Version 1043 -1 2 50 true false false
-164 19 oid 23 4 1 0 false false false
-165 19 nspname 1043 -1 2 0 false false false
-166 20 oid 23 4 1 0 false false false
-167 20 relname 1043 -1 2 0 false false false
-168 20 relnamespace 23 4 3 0 false false false
-169 20 relkind 1042 1 4 0 false false false
-170 20 relam 23 4 5 0 false false false
-171 20 reltuples 700 4 6 0 false false false
-172 20 relpages 23 4 7 0 false false false
-173 20 relhasrules 16 1 8 0 false false false
-174 20 relhasoids 16 1 9 0 false false false
-175 21 oid 23 4 1 0 false false false
-176 21 attrelid 23 4 2 0 false false false
-177 21 attname 1043 -1 3 0 false false false
-178 21 atttypid 23 4 4 0 false false false
-179 21 attlen 21 2 5 0 false false false
-180 21 attnum 21 2 6 0 false false false
-181 21 atttypmod 23 4 7 0 false false false
-182 21 attnotnull 16 1 8 0 false false false
-183 21 attisdropped 16 1 9 0 false false false
-184 21 atthasdef 16 1 10 0 false false false
-185 22 oid 23 4 1 0 false false false
-186 22 typname 1043 -1 2 0 false false false
-187 22 typnamespace 23 4 3 0 false false false
-188 22 typlen 21 2 4 0 false false false
-189 22 typtype 1042 1 5 0 false false false
-190 22 typbasetype 23 4 6 0 false false false
-191 22 typtypmod 23 4 7 0 false false false
-192 22 typrelid 23 4 8 0 false false false
-193 22 typelem 23 4 9 0 false false false
-194 23 oid 23 4 1 0 false false false
-195 23 indexrelid 23 4 2 0 false false false
-196 23 indrelid 23 4 3 0 false false false
-197 23 indisclustered 16 1 4 0 false false false
-198 23 indisunique 16 1 5 0 false false false
-199 23 indisprimary 16 1 6 0 false false false
-200 23 indexprs 1043 -1 7 0 false false false
-201 23 indkey 1043 -1 8 0 false false false
-202 24 oid 23 4 1 0 false false false
-203 24 amname 1043 -1 2 0 false false false
-204 25 oid 23 4 1 0 false false false
-205 25 proname 1043 -1 2 0 false false false
-206 25 proretset 16 1 3 0 false false false
-207 25 prorettype 23 4 4 0 false false false
-208 25 pronargs 21 2 5 0 false false false
-209 25 proargtypes <null> <null> 6 0 false false false
-210 25 proargnames <null> <null> 7 0 false false false
-211 25 proargmodes <null> <null> 8 0 false false false
-212 25 proallargtypes <null> <null> 9 0 false false false
-213 25 pronamespace 23 4 10 0 false false false
-214 26 oid 23 4 1 0 false false false
-215 26 tgconstrrelid 23 4 2 0 false false false
-216 26 tgfoid 23 4 3 0 false false false
-217 26 tgargs 23 4 4 0 false false false
-218 26 tgnargs 23 4 5 0 false false false
-219 26 tgdeferrable 16 1 6 0 false false false
-220 26 tginitdeferred 16 1 7 0 false false false
-221 26 tgconstrname 1043 -1 8 0 false false false
-222 26 tgrelid 23 4 9 0 false false false
-223 27 adrelid 23 4 1 0 false false false
-224 27 adnum 23 4 2 0 false false false
-225 27 adbin 1043 -1 3 0 false false false
-226 27 adsrc 1043 -1 4 0 false false false
-227 28 oid 23 4 1 0 false false false
-228 28 datname 1043 -1 2 0 false false false
-229 28 encoding 23 4 3 0 false false false
-230 28 datlastsysoid 23 4 4 0 false false false
-231 28 datallowconn 1042 1 5 0 false false false
-232 28 datconfig <null> <null> 6 0 false false false
-233 28 datacl <null> <null> 7 0 false false false
-234 28 datdba 23 4 8 0 false false false
-235 28 dattablespace 23 4 9 0 false false false
-236 29 oid 23 4 1 0 false false false
-237 29 usename 1043 -1 2 0 false false false
-238 29 usecreatedb 16 1 3 0 false false false
-239 29 usesuper 16 1 4 0 false false false
-240 30 attrelid 23 4 1 0 false false false
-241 30 attnum 21 2 2 0 false false false
-242 30 attname 1043 -1 3 0 false false false
-243 30 relname 1043 -1 4 0 false false false
-244 30 nspname 1043 -1 5 0 false false false
-245 30 autoinc 16 1 6 0 false false false
-246 30 typoid 23 4 7 0 false false false
-247 31 oid 23 4 1 0 false false false
-248 31 typname 1043 -1 2 0 false false false
-249 31 name 1043 -1 3 0 false false false
-250 31 uid 1043 -1 4 0 false false false
-251 31 typlen 21 2 5 0 false false false
-Row Count : 251
+128 14 ClobValue 14939 -1 5 2097152 false false false
+129 15 PKTABLE_CAT 1043 -1 1 255 false false false
+130 15 PKTABLE_SCHEM 1043 -1 2 255 false false false
+131 15 PKTABLE_NAME 1043 -1 3 255 false false false
+132 15 PKCOLUMN_NAME 1043 -1 4 255 false false false
+133 15 FKTABLE_CAT 1043 -1 5 255 false false false
+134 15 FKTABLE_SCHEM 1043 -1 6 255 false false false
+135 15 FKTABLE_NAME 1043 -1 7 255 false false false
+136 15 FKCOLUMN_NAME 1043 -1 8 255 false false false
+137 15 KEY_SEQ 21 2 9 5 false false false
+138 15 UPDATE_RULE 23 4 10 10 false false false
+139 15 DELETE_RULE 23 4 11 10 false false false
+140 15 FK_NAME 1043 -1 12 255 false false false
+141 15 PK_NAME 1043 -1 13 255 false false false
+142 15 DEFERRABILITY 23 4 14 10 false false false
+143 16 VDBName 1043 -1 1 255 false false false
+144 16 Name 1043 -1 2 255 false false false
+145 16 IsPhysical 16 1 3 1 true false false
+146 16 UID 1043 -1 4 50 true false false
+147 16 Description 1043 -1 5 255 false false false
+148 16 PrimaryMetamodelURI 1043 -1 6 255 true false false
+149 16 OID 23 4 7 10 true false false
+150 17 VDBName 1043 -1 1 255 false false false
+151 17 SchemaName 1043 -1 2 255 false false false
+152 17 Name 1043 -1 3 255 true false false
+153 17 Type 1043 -1 4 20 true false false
+154 17 NameInSource 1043 -1 5 255 false false false
+155 17 IsPhysical 16 1 6 1 true false false
+156 17 SupportsUpdates 16 1 7 1 true false false
+157 17 UID 1043 -1 8 50 true false false
+158 17 Cardinality 23 4 9 10 true false false
+159 17 Description 1043 -1 10 255 false false false
+160 17 IsSystem 16 1 11 1 false false false
+161 17 IsMaterialized 16 1 12 0 true false false
+162 17 OID 23 4 13 10 true false false
+163 18 Name 1043 -1 1 255 true false false
+164 18 Version 1043 -1 2 50 true false false
+165 19 oid 23 4 1 0 false false false
+166 19 nspname 1043 -1 2 0 false false false
+167 20 oid 23 4 1 0 false false false
+168 20 relname 1043 -1 2 0 false false false
+169 20 relnamespace 23 4 3 0 false false false
+170 20 relkind 1042 1 4 0 false false false
+171 20 relam 23 4 5 0 false false false
+172 20 reltuples 700 4 6 0 false false false
+173 20 relpages 23 4 7 0 false false false
+174 20 relhasrules 16 1 8 0 false false false
+175 20 relhasoids 16 1 9 0 false false false
+176 21 oid 23 4 1 0 false false false
+177 21 attrelid 23 4 2 0 false false false
+178 21 attname 1043 -1 3 0 false false false
+179 21 atttypid 23 4 4 0 false false false
+180 21 attlen 21 2 5 0 false false false
+181 21 attnum 21 2 6 0 false false false
+182 21 atttypmod 23 4 7 0 false false false
+183 21 attnotnull 16 1 8 0 false false false
+184 21 attisdropped 16 1 9 0 false false false
+185 21 atthasdef 16 1 10 0 false false false
+186 22 oid 23 4 1 0 false false false
+187 22 typname 1043 -1 2 0 false false false
+188 22 typnamespace 23 4 3 0 false false false
+189 22 typlen 21 2 4 0 false false false
+190 22 typtype 1042 1 5 0 false false false
+191 22 typbasetype 23 4 6 0 false false false
+192 22 typtypmod 23 4 7 0 false false false
+193 22 typrelid 23 4 8 0 false false false
+194 22 typelem 23 4 9 0 false false false
+195 23 oid 23 4 1 0 false false false
+196 23 indexrelid 23 4 2 0 false false false
+197 23 indrelid 23 4 3 0 false false false
+198 23 indisclustered 16 1 4 0 false false false
+199 23 indisunique 16 1 5 0 false false false
+200 23 indisprimary 16 1 6 0 false false false
+201 23 indexprs 1043 -1 7 0 false false false
+202 23 indkey 1043 -1 8 0 false false false
+203 24 oid 23 4 1 0 false false false
+204 24 amname 1043 -1 2 0 false false false
+205 25 oid 23 4 1 0 false false false
+206 25 proname 1043 -1 2 0 false false false
+207 25 proretset 16 1 3 0 false false false
+208 25 prorettype 23 4 4 0 false false false
+209 25 pronargs 21 2 5 0 false false false
+210 25 proargtypes <null> <null> 6 0 false false false
+211 25 proargnames <null> <null> 7 0 false false false
+212 25 proargmodes <null> <null> 8 0 false false false
+213 25 proallargtypes <null> <null> 9 0 false false false
+214 25 pronamespace 23 4 10 0 false false false
+215 26 oid 23 4 1 0 false false false
+216 26 tgconstrrelid 23 4 2 0 false false false
+217 26 tgfoid 23 4 3 0 false false false
+218 26 tgargs 23 4 4 0 false false false
+219 26 tgnargs 23 4 5 0 false false false
+220 26 tgdeferrable 16 1 6 0 false false false
+221 26 tginitdeferred 16 1 7 0 false false false
+222 26 tgconstrname 1043 -1 8 0 false false false
+223 26 tgrelid 23 4 9 0 false false false
+224 27 adrelid 23 4 1 0 false false false
+225 27 adnum 23 4 2 0 false false false
+226 27 adbin 1043 -1 3 0 false false false
+227 27 adsrc 1043 -1 4 0 false false false
+228 28 oid 23 4 1 0 false false false
+229 28 datname 1043 -1 2 0 false false false
+230 28 encoding 23 4 3 0 false false false
+231 28 datlastsysoid 23 4 4 0 false false false
+232 28 datallowconn 1042 1 5 0 false false false
+233 28 datconfig <null> <null> 6 0 false false false
+234 28 datacl <null> <null> 7 0 false false false
+235 28 datdba 23 4 8 0 false false false
+236 28 dattablespace 23 4 9 0 false false false
+237 29 oid 23 4 1 0 false false false
+238 29 usename 1043 -1 2 0 false false false
+239 29 usecreatedb 16 1 3 0 false false false
+240 29 usesuper 16 1 4 0 false false false
+241 30 attrelid 23 4 1 0 false false false
+242 30 attnum 21 2 2 0 false false false
+243 30 attname 1043 -1 3 0 false false false
+244 30 relname 1043 -1 4 0 false false false
+245 30 nspname 1043 -1 5 0 false false false
+246 30 autoinc 16 1 6 0 false false false
+247 30 typoid 23 4 7 0 false false false
+248 31 oid 23 4 1 0 false false false
+249 31 typname 1043 -1 2 0 false false false
+250 31 name 1043 -1 3 0 false false false
+251 31 uid 1043 -1 4 0 false false false
+252 31 typlen 21 2 5 0 false false false
+Row Count : 252
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
oid 4 PartsSupplier java.lang.Integer oid integer pg_catalog pg_attribute 11 10 0 false false false false 2 true true false false
attrelid 4 PartsSupplier java.lang.Integer attrelid integer pg_catalog pg_attribute 11 10 0 false false false false 2 true true false false
Modified: trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testColumns.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testColumns.expected 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testColumns.expected 2011-05-02 17:02:28 UTC (rev 3134)
@@ -125,6 +125,7 @@
PartsSupplier SYS Properties Value 12 string 255 <null> 0 10 0 <null> <null> <null> <null> 255 2 NO <null> <null> <null> !
<null> NO
PartsSupplier SYS Properties UID 12 string 50 <null> 0 10 0 <null> <null> <null> <null> 50 3 NO <null> <null> <null> !
<null> NO
PartsSupplier SYS Properties OID 4 integer 10 <null> 0 10 0 <null> <null> <null> <null> 10 4 NO <null> <null> <null> !
<null> NO
+PartsSupplier SYS Properties ClobValue 2005 clob 2097152 <null> 0 10 1 <null> <null> <null> <null> 2097152 5 YES <null> <null> <null> !
<null> NO
PartsSupplier SYS ReferenceKeyColumns PKTABLE_CAT 12 string 255 <null> 0 10 1 <null> <null> <null> <null> 255 1 YES <null> <null> <null> !
<null> NO
PartsSupplier SYS ReferenceKeyColumns PKTABLE_SCHEM 12 string 255 <null> 0 10 1 <null> <null> <null> <null> 255 2 YES <null> <null> <null> !
<null> NO
PartsSupplier SYS ReferenceKeyColumns PKTABLE_NAME 12 string 255 <null> 0 10 1 <null> <null> <null> <null> 255 3 YES <null> <null> <null> !
<null> NO
@@ -251,7 +252,7 @@
PartsSupplier pg_catalog pg_user usename 12 string 4000 <null> 0 0 2 <null> <null> <null> <null> 0 2 <null> <null> <null> !
<null> NO
PartsSupplier pg_catalog pg_user usecreatedb -7 boolean 1 <null> 0 0 2 <null> <null> <null> <null> 0 3 <null> <null> <null> !
<null> NO
PartsSupplier pg_catalog pg_user usesuper -7 boolean 1 <null> 0 0 2 <null> <null> <null> <null> 0 4 <null> <null> <null> !
<null> NO
-Row Count : 251
+Row Count : 252
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 PartsSupplier java.lang.String TABLE_CAT string SYS Columns 255 255 0 false false false false 0 true true false false
SchemaName 12 PartsSupplier java.lang.String TABLE_SCHEM string SYS Columns 255 255 0 false true false true 1 false true true true
Modified: trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testProcedureColumns.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testProcedureColumns.expected 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testProcedureColumns.expected 2011-05-02 17:02:28 UTC (rev 3134)
@@ -14,9 +14,13 @@
PartsSupplier SYSADMIN setColumnStats nullCount 1 4 integer 10 10 0 10 1 <null> <null> <null> <null> <null> 4 YES setColumnStats
PartsSupplier SYSADMIN setColumnStats max 1 12 string 4000 4000 0 10 1 <null> <null> <null> <null> <null> 5 YES setColumnStats
PartsSupplier SYSADMIN setColumnStats min 1 12 string 4000 4000 0 10 1 <null> <null> <null> <null> <null> 6 YES setColumnStats
+PartsSupplier SYSADMIN setProperty UID 1 12 string 4000 50 0 10 0 <null> <null> <null> <null> <null> 2 NO setProperty
+PartsSupplier SYSADMIN setProperty Name 1 12 string 4000 4000 0 10 0 <null> <null> <null> <null> <null> 3 NO setProperty
+PartsSupplier SYSADMIN setProperty Value 1 2005 clob 2147483647 2097152 0 10 1 <null> <null> <null> <null> <null> 4 YES setProperty
+PartsSupplier SYSADMIN setProperty OldValue 5 2005 clob 2147483647 2097152 0 10 0 <null> <null> <null> <null> <null> 1 NO setProperty
PartsSupplier SYSADMIN setTableStats tableName 1 12 string 4000 4000 0 10 0 <null> <null> <null> <null> <null> 1 NO setTableStats
PartsSupplier SYSADMIN setTableStats cardinality 1 4 integer 10 10 0 10 0 <null> <null> <null> <null> <null> 2 NO setTableStats
-Row Count : 16
+Row Count : 20
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 PartsSupplier java.lang.String PROCEDURE_CAT string SYS ProcedureParams 255 255 0 false false false false 0 true true false false
SchemaName 12 PartsSupplier java.lang.String PROCEDURE_SCHEM string SYS ProcedureParams 255 255 0 false true false true 1 false true true true
Modified: trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testProcedures.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testProcedures.expected 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/resources/TestPartsDatabaseMetadata/testProcedures.expected 2011-05-02 17:02:28 UTC (rev 3134)
@@ -4,8 +4,9 @@
PartsSupplier SYSADMIN refreshMatView <null> <null> <null> <null> 1 refreshMatView
PartsSupplier SYSADMIN refreshMatViewRow <null> <null> <null> <null> 1 refreshMatViewRow
PartsSupplier SYSADMIN setColumnStats <null> <null> <null> <null> 1 setColumnStats
+PartsSupplier SYSADMIN setProperty <null> <null> <null> <null> 1 setProperty
PartsSupplier SYSADMIN setTableStats <null> <null> <null> <null> 1 setTableStats
-Row Count : 5
+Row Count : 6
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 PartsSupplier java.lang.String PROCEDURE_CAT string SYS Procedures 255 255 0 false false false false 0 true true false false
SchemaName 12 PartsSupplier java.lang.String PROCEDURE_SCHEM string SYS Procedures 255 255 0 false true false true 1 false true true true
Modified: trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testColumns.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testColumns.expected 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testColumns.expected 2011-05-02 17:02:28 UTC (rev 3134)
@@ -2,10 +2,11 @@
VDBName SchemaName TableName Name Position NameInSource DataType Scale Length IsLengthFixed SupportsSelect SupportsUpdates IsCaseSensitive IsSigned IsCurrency IsAutoIncremented NullType MinRange MaxRange DistinctCount NullCount SearchType Format DefaultValue JavaClass Precision CharOctetLength Radix UID !
Description OID
PartsSupplier SYS DataTypes BaseType 17 <null> string 0 64 true true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 64 64 10 mmuuid:03beb57c-968b-!
4821-a6ae-cb1154cfadee <null> 76
PartsSupplier SYSADMIN MatViews Cardinality 9 <null> integer 0 10 false true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:abe699b0-b6bc-!
4413-9172-0a21ca9664d2 <null> 26
-PartsSupplier SYS Tables Cardinality 9 <null> integer 0 10 false true false true true false false No Nulls <null> <null> -1 -1 All Except Like <null> <null> java.lang.Integer 10 10 10 mmuuid:24cdad3a-e8f7-!
4376-bb32-79f8bc8eeed2 <null> 157
+PartsSupplier SYS Tables Cardinality 9 <null> integer 0 10 false true false true true false false No Nulls <null> <null> -1 -1 All Except Like <null> <null> java.lang.Integer 10 10 10 mmuuid:24cdad3a-e8f7-!
4376-bb32-79f8bc8eeed2 <null> 158
PartsSupplier SYS Columns CharOctetLength 27 <null> integer 0 10 true true false false false false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:de5def94-2804-!
4c91-91ed-26d630ce8afe <null> 55
-PartsSupplier SYS ReferenceKeyColumns DEFERRABILITY 14 <null> integer 0 10 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:88380f55-2cbd-!
4325-b9a3-9dcaa88a690e <null> 141
-PartsSupplier SYS ReferenceKeyColumns DELETE_RULE 11 <null> integer 0 10 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:9207f4df-a5ce-!
43bd-b3b2-fee57e459849 <null> 138
+PartsSupplier SYS Properties ClobValue 5 <null> clob 0 2097152 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> org.teiid.core.types.ClobType 0 2097152 10 mmuuid:c0b630b2-5f71-!
4bee-8359-07c2629e355b <null> 128
+PartsSupplier SYS ReferenceKeyColumns DEFERRABILITY 14 <null> integer 0 10 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:88380f55-2cbd-!
4325-b9a3-9dcaa88a690e <null> 142
+PartsSupplier SYS ReferenceKeyColumns DELETE_RULE 11 <null> integer 0 10 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:9207f4df-a5ce-!
43bd-b3b2-fee57e459849 <null> 139
PartsSupplier SYS Columns DataType 7 <null> string 0 100 true true false true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 100 100 10 mmuuid:9a8dc0d5-e65c-!
4032-a066-187f8d2e73ea <null> 35
PartsSupplier SYS ProcedureParams DataType 5 <null> string 0 25 true true false true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 25 25 10 mmuuid:207a09af-65b8-!
405f-b1cb-537bc8632fa4 <null> 104
PartsSupplier SYS Columns DefaultValue 24 <null> string 0 255 true true false false false false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:7e853988-356b-!
4c7c-83d4-a9f015bff279 <null> 52
@@ -14,14 +15,14 @@
PartsSupplier SYS Keys Description 5 <null> string 0 255 true true false false false false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:175e21b2-24c3-!
4677-a253-6d7cdb513a9a <null> 93
PartsSupplier SYS ProcedureParams Description 15 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:05ac4703-5c2c-!
4410-93b7-19b39d90c803 <null> 114
PartsSupplier SYS Procedures Description 7 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 225 255 10 mmuuid:fa0b5db7-acb1-!
4975-8410-d5d27df46040 <null> 122
-PartsSupplier SYS Schemas Description 5 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:1cb99300-a527-!
4a26-b4e6-08ebd92a781d <null> 146
-PartsSupplier SYS Tables Description 10 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:51605e41-5cb0-!
40ca-8c4a-4eca52780afc <null> 158
-PartsSupplier SYS Columns DistinctCount 20 <null> integer 0 10 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 10 10 mmuuid:0017cd41-d873-!
4fcb-a2e7-15cdac7df3a5 <null> 48
-PartsSupplier SYS ReferenceKeyColumns FKCOLUMN_NAME 8 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:f4b2b32c-e411-!
45e6-a236-fec4718f0874 <null> 135
-PartsSupplier SYS ReferenceKeyColumns FKTABLE_CAT 5 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 1 255 10 mmuuid:a0095da3-1258-!
44dc-bab9-33eacf886a28 <null> 132
-PartsSupplier SYS ReferenceKeyColumns FKTABLE_NAME 7 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:53284aaa-4c07-!
4930-8a0e-5e2aaa2da5cb <null> 134
-PartsSupplier SYS ReferenceKeyColumns FKTABLE_SCHEM 6 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:93a35adf-b6b1-!
4d9c-bdef-d336a84f478e <null> 133
-PartsSupplier SYS ReferenceKeyColumns FK_NAME 12 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:a9ca7516-6898-!
419d-b1ad-7d174d946d07 <null> 139
+PartsSupplier SYS Schemas Description 5 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:1cb99300-a527-!
4a26-b4e6-08ebd92a781d <null> 147
+PartsSupplier SYS Tables Description 10 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:51605e41-5cb0-!
40ca-8c4a-4eca52780afc <null> 159
+PartsSupplier SYS Columns DistinctCount 20 <null> integer 0 10 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:0017cd41-d873-!
4fcb-a2e7-15cdac7df3a5 <null> 48
+PartsSupplier SYS ReferenceKeyColumns FKCOLUMN_NAME 8 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:f4b2b32c-e411-!
45e6-a236-fec4718f0874 <null> 136
+PartsSupplier SYS ReferenceKeyColumns FKTABLE_CAT 5 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 1 255 10 mmuuid:a0095da3-1258-!
44dc-bab9-33eacf886a28 <null> 133
+PartsSupplier SYS ReferenceKeyColumns FKTABLE_NAME 7 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:53284aaa-4c07-!
4930-8a0e-5e2aaa2da5cb <null> 135
+PartsSupplier SYS ReferenceKeyColumns FKTABLE_SCHEM 6 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:93a35adf-b6b1-!
4d9c-bdef-d336a84f478e <null> 134
+PartsSupplier SYS ReferenceKeyColumns FK_NAME 12 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:a9ca7516-6898-!
419d-b1ad-7d174d946d07 <null> 140
PartsSupplier SYS Columns Format 23 <null> string 0 255 true true false false false false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:172b133e-5bf1-!
4020-953c-de4446b1e64a <null> 51
PartsSupplier SYS Columns IsAutoIncremented 16 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:0d41e284-f274-!
4fd1-8576-7696f4b758d0 <null> 44
PartsSupplier SYS DataTypes IsAutoIncremented 10 <null> boolean 0 1 true true false true true false false No Nulls <null> <null> -1 -1 Searchable <null> ('0') java.lang.Boolean 1 1 10 mmuuid:2a1568e2-776a-!
474b-981f-040a6ad63361 <null> 69
@@ -30,17 +31,17 @@
PartsSupplier SYS Columns IsCurrency 15 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:b28a2963-36e0-!
4b4a-a8f8-a2c06f2b440a <null> 43
PartsSupplier SYS Keys IsIndexed 8 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:ea96cb7c-2dcf-!
453c-b83a-1aaa921d8f92 <null> 96
PartsSupplier SYS Columns IsLengthFixed 10 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:571aa4ce-3254-!
4a2b-aa48-1cb23a0c47ed <null> 38
-PartsSupplier SYS Tables IsMaterialized 12 <null> boolean 0 0 false true true false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 10 mmuuid:89265cba-ab85-!
48c2-960a-a5a9594ba6d0 <null> 160
+PartsSupplier SYS Tables IsMaterialized 12 <null> boolean 0 0 false true true false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 10 mmuuid:89265cba-ab85-!
48c2-960a-a5a9594ba6d0 <null> 161
PartsSupplier SYS DataTypes IsPhysical 3 <null> boolean 0 1 true true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:983714a2-bd0b-!
4fad-b4e8-dfb7832e9c4b <null> 62
-PartsSupplier SYS Schemas IsPhysical 3 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:bab257d7-cced-!
4605-9b40-8ca6c078aca7 <null> 144
-PartsSupplier SYS Tables IsPhysical 6 <null> boolean 0 1 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:e27712f6-a0a6-!
452e-848d-9de77691e939 <null> 154
+PartsSupplier SYS Schemas IsPhysical 3 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:bab257d7-cced-!
4605-9b40-8ca6c078aca7 <null> 145
+PartsSupplier SYS Tables IsPhysical 6 <null> boolean 0 1 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:e27712f6-a0a6-!
452e-848d-9de77691e939 <null> 155
PartsSupplier SYS Columns IsSigned 14 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:36be2afa-8ebc-!
4af8-acc5-a887cf2b5a86 <null> 42
PartsSupplier SYS DataTypes IsSigned 9 <null> boolean 0 1 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> ('0') java.lang.Boolean 1 1 10 mmuuid:235cea48-b2b9-!
41d5-b296-8ab9c649b6e7 <null> 68
PartsSupplier SYS DataTypes IsStandard 2 <null> boolean 0 1 true true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:02f27c5d-af55-!
4677-b91b-8690793671b2 <null> 61
-PartsSupplier SYS Tables IsSystem 11 <null> boolean 0 1 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:9fa7987c-7dc8-!
4102-9cc0-5658d5b46382 <null> 159
+PartsSupplier SYS Tables IsSystem 11 <null> boolean 0 1 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:9fa7987c-7dc8-!
4102-9cc0-5658d5b46382 <null> 160
PartsSupplier SYS Columns JavaClass 25 <null> string 0 500 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 500 500 10 mmuuid:6b8d5df5-7bd2-!
425c-8b2b-e427e026ef66 <null> 53
PartsSupplier SYS DataTypes JavaClass 5 <null> string 0 500 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 500 500 10 mmuuid:4c68ef90-8042-!
44ab-896a-bb3890a8fe04 <null> 64
-PartsSupplier SYS ReferenceKeyColumns KEY_SEQ 9 <null> short 0 5 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 5 5 10 mmuuid:4884ac83-84ed-!
4b67-9f1a-bd79c0199269 <null> 136
+PartsSupplier SYS ReferenceKeyColumns KEY_SEQ 9 <null> short 0 5 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 5 5 10 mmuuid:4884ac83-84ed-!
4b67-9f1a-bd79c0199269 <null> 137
PartsSupplier SYS KeyColumns KeyName 5 <null> string 0 255 true true false false false false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:da4bef58-83f4-!
4b88-8bb0-2dc8990be539 <null> 83
PartsSupplier SYS KeyColumns KeyType 6 <null> string 0 20 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 20 20 10 mmuuid:df9e15e6-ab77-!
486d-bfe0-0adc378aa99d <null> 84
PartsSupplier SYS Columns Length 9 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:b36ea0f6-cbff-!
4049-bc9c-8ec9928be048 <null> 37
@@ -55,14 +56,14 @@
PartsSupplier SYS ProcedureParams Name 4 <null> string 0 255 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:2bf20c6f-5a95-!
436d-8f30-a24d164e77a4 <null> 103
PartsSupplier SYS Procedures Name 3 <null> string 0 255 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:bd17e98a-c40a-!
43b1-93ac-88d62937c051 <null> 118
PartsSupplier SYS Properties Name 1 <null> string 0 255 true true false true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:ba007c56-04b6-!
4981-ab89-3fdd33ff0de8 <null> 124
-PartsSupplier SYS Schemas Name 2 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:654112f8-bb4c-!
4453-9e4d-f3a96fba61ec <null> 143
-PartsSupplier SYS Tables Name 3 <null> string 0 255 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:ef487cc2-1214-!
439c-af6e-da431df00d2c <null> 151
-PartsSupplier SYS VirtualDatabases Name 1 <null> string 0 255 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:42fa1249-8b24-!
4aae-a252-0a347db6ec30 <null> 162
+PartsSupplier SYS Schemas Name 2 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:654112f8-bb4c-!
4453-9e4d-f3a96fba61ec <null> 144
+PartsSupplier SYS Tables Name 3 <null> string 0 255 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:ef487cc2-1214-!
439c-af6e-da431df00d2c <null> 152
+PartsSupplier SYS VirtualDatabases Name 1 <null> string 0 255 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:42fa1249-8b24-!
4aae-a252-0a347db6ec30 <null> 163
PartsSupplier SYS Columns NameInSource 6 <null> string 0 255 true true false false false false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:fac72c6e-41dc-!
4a1b-8af3-f0796690d9cc <null> 34
PartsSupplier SYS Keys NameInSource 6 <null> string 0 255 true true false false false false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:a52a6169-99e0-!
4b7e-9dc6-3a93ffa6094a <null> 94
PartsSupplier SYS Procedures NameInSource 4 <null> string 0 255 true true false false false false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:a4e7a0fd-c340-!
49a9-9ac0-8328caaffda8 <null> 119
-PartsSupplier SYS Tables NameInSource 5 <null> string 0 255 true true false true false false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:1f036fb0-b841-!
450c-8462-986cdd57e921 <null> 153
-PartsSupplier SYS Columns NullCount 21 <null> integer 0 10 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 10 10 mmuuid:d00d1104-40ba-!
40be-b684-4c0c803615f8 <null> 49
+PartsSupplier SYS Tables NameInSource 5 <null> string 0 255 true true false true false false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:1f036fb0-b841-!
450c-8462-986cdd57e921 <null> 154
+PartsSupplier SYS Columns NullCount 21 <null> integer 0 10 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:d00d1104-40ba-!
40be-b684-4c0c803615f8 <null> 49
PartsSupplier SYS Columns NullType 17 <null> string 0 20 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 20 20 10 mmuuid:4d83bdbb-a7ce-!
44cc-a201-021a517d3c1a <null> 45
PartsSupplier SYS DataTypes NullType 8 <null> string 0 20 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 20 20 10 mmuuid:278b0534-1164-!
495e-a8c6-de45e0ff53a4 <null> 67
PartsSupplier SYS ProcedureParams NullType 13 <null> string 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 10 10 10 mmuuid:d887c203-6bf5-!
462b-b2f0-f5302e2f4bcd <null> 112
@@ -73,26 +74,26 @@
PartsSupplier SYS ProcedureParams OID 16 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:72125f93-846f-!
413c-82e1-fa3227fb043f <null> 115
PartsSupplier SYS Procedures OID 8 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:c80c02d2-7174-!
4cc4-b347-e921a80f568c <null> 123
PartsSupplier SYS Properties OID 4 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:54c1a7dc-5ca8-!
4d34-8672-e76d63fe3b95 <null> 127
-PartsSupplier SYS Schemas OID 7 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:31746839-e019-!
4321-90cb-a557e1d4754e <null> 148
-PartsSupplier SYS Tables OID 13 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:dae79c58-b381-!
4275-8c1c-b299d732d355 <null> 161
+PartsSupplier SYS Schemas OID 7 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:31746839-e019-!
4321-90cb-a557e1d4754e <null> 149
+PartsSupplier SYS Tables OID 13 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:dae79c58-b381-!
4275-8c1c-b299d732d355 <null> 162
PartsSupplier SYS ProcedureParams Optional 8 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:4033f891-5ef5-!
4a75-8a50-bd1d021e43ad <null> 107
PartsSupplier PartsSupplier PARTSSUPPLIER.PARTS PART_COLOR 3 PART_COLOR string 0 30 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 30 10 mmuuid:015c0d00-73ff-!
1edc-a81c-ecf397b10590 <null> 3
PartsSupplier PartsSupplier PARTSSUPPLIER.PARTS PART_ID 1 PART_ID string 0 4 true true true true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 4 10 mmuuid:fadcd7c0-73fe-!
1edc-a81c-ecf397b10590 <null> 1
PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS PART_ID 2 PART_ID string 0 4 true true true true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 4 10 mmuuid:3fc400c0-73ff-!
1edc-a81c-ecf397b10590 <null> 10
PartsSupplier PartsSupplier PARTSSUPPLIER.PARTS PART_NAME 2 PART_NAME string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:0067e900-73ff-!
1edc-a81c-ecf397b10590 <null> 2
PartsSupplier PartsSupplier PARTSSUPPLIER.PARTS PART_WEIGHT 4 PART_WEIGHT string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:015c0d01-73ff-!
1edc-a81c-ecf397b10590 <null> 4
-PartsSupplier SYS ReferenceKeyColumns PKCOLUMN_NAME 4 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:0125a80a-95f9-!
486f-aa90-debb21cb5f1b <null> 131
-PartsSupplier SYS ReferenceKeyColumns PKTABLE_CAT 1 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 1 255 10 mmuuid:f615a661-2c36-!
4ab1-b72b-5e13e99e052c <null> 128
-PartsSupplier SYS ReferenceKeyColumns PKTABLE_NAME 3 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:6d420bc2-0f85-!
4da9-833d-d71b428b0743 <null> 130
-PartsSupplier SYS ReferenceKeyColumns PKTABLE_SCHEM 2 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:ef7b3b79-fb51-!
42ef-a723-080ed0a6e3bc <null> 129
-PartsSupplier SYS ReferenceKeyColumns PK_NAME 13 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:ac210a6d-4de6-!
4d71-aa9b-e3d34baca81a <null> 140
+PartsSupplier SYS ReferenceKeyColumns PKCOLUMN_NAME 4 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:0125a80a-95f9-!
486f-aa90-debb21cb5f1b <null> 132
+PartsSupplier SYS ReferenceKeyColumns PKTABLE_CAT 1 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 1 255 10 mmuuid:f615a661-2c36-!
4ab1-b72b-5e13e99e052c <null> 129
+PartsSupplier SYS ReferenceKeyColumns PKTABLE_NAME 3 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:6d420bc2-0f85-!
4da9-833d-d71b428b0743 <null> 131
+PartsSupplier SYS ReferenceKeyColumns PKTABLE_SCHEM 2 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:ef7b3b79-fb51-!
42ef-a723-080ed0a6e3bc <null> 130
+PartsSupplier SYS ReferenceKeyColumns PK_NAME 13 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:ac210a6d-4de6-!
4d71-aa9b-e3d34baca81a <null> 141
PartsSupplier SYS Columns Position 5 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:dbc8cd09-1b47-!
43c5-82ec-aba525b85cc4 <null> 33
PartsSupplier SYS KeyColumns Position 9 <null> integer 0 10 true true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:92a4849c-ed0e-!
4f5f-a108-d7d71a5aba25 <null> 87
PartsSupplier SYS ProcedureParams Position 6 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:5fdefd17-65f4-!
4350-9ee0-0ed3c34d10ae <null> 105
PartsSupplier SYS Columns Precision 26 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:db3d49e2-fe1d-!
438b-8d07-847bf58506ab <null> 54
PartsSupplier SYS DataTypes Precision 12 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:8673c810-7162-!
4331-ba0b-6fc3530d2d1c <null> 71
PartsSupplier SYS ProcedureParams Precision 9 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:00fe7cad-0a83-!
42f0-90f2-d6a9584916b2 <null> 108
-PartsSupplier SYS Schemas PrimaryMetamodelURI 6 <null> string 0 255 false true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:eadfaba5-ce44-!
4529-816f-6af94666baec <null> 147
+PartsSupplier SYS Schemas PrimaryMetamodelURI 6 <null> string 0 255 false true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:eadfaba5-ce44-!
4529-816f-6af94666baec <null> 148
PartsSupplier SYS ProcedureParams ProcedureName 3 <null> string 0 255 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:8081b3a6-fc79-!
42fd-b7c9-a19d682a1658 <null> 102
PartsSupplier PartsSupplier PARTSSUPPLIER.SUPPLIER_PARTS QUANTITY 3 QUANTITY short 0 0 true true true false true false false Nullable <null> <null> -1 -1 All Except Like <null> <null> java.lang.Short 3 0 10 mmuuid:3fc400c1-73ff-!
1edc-a81c-ecf397b10590 <null> 11
PartsSupplier SYS Columns Radix 28 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:43a6124c-972f-!
4c4c-af05-24080c2a8ad7 <null> 56
@@ -122,12 +123,12 @@
PartsSupplier SYS Keys SchemaName 2 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:4a7fc059-208e-!
4f98-b6ef-cb7c6102a327 <null> 90
PartsSupplier SYS ProcedureParams SchemaName 2 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:88497911-619c-!
4ca8-b482-8885d940706a <null> 101
PartsSupplier SYS Procedures SchemaName 2 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:53a84865-334e-!
4750-b343-de2411d56e3e <null> 117
-PartsSupplier SYS Tables SchemaName 2 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:95bd960c-fd84-!
44c9-9831-692376f69b46 <null> 150
+PartsSupplier SYS Tables SchemaName 2 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:95bd960c-fd84-!
44c9-9831-692376f69b46 <null> 151
PartsSupplier SYS Columns SearchType 22 <null> string 0 20 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 20 20 10 mmuuid:3037138a-bb20-!
4485-ba01-75bc20b1a532 <null> 50
PartsSupplier SYS DataTypes SearchType 14 <null> string 0 20 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 20 20 10 mmuuid:d8494fa3-40e4-!
44cd-b0d8-da5c83685a75 <null> 73
PartsSupplier SYS Columns SupportsSelect 11 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:c2a50f93-0040-!
41ec-ad7b-e8511296555f <null> 39
PartsSupplier SYS Columns SupportsUpdates 12 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:fab660d1-36bf-!
4a5b-bbe6-9a543e0ebd76 <null> 40
-PartsSupplier SYS Tables SupportsUpdates 7 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:5144d230-2b0e-!
4255-b321-65b9f6f6f76c <null> 155
+PartsSupplier SYS Tables SupportsUpdates 7 <null> boolean 0 1 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 1 1 10 mmuuid:5144d230-2b0e-!
4255-b321-65b9f6f6f76c <null> 156
PartsSupplier SYS Columns TableName 3 <null> string 0 255 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:2c09c9d1-2f25-!
45de-81cf-eeb2a5157d34 <null> 31
PartsSupplier SYS KeyColumns TableName 3 <null> string 0 2048 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 2048 2048 10 mmuuid:c24fad72-0c0d-!
4260-96ae-f188ad77b137 <null> 81
PartsSupplier SYS Keys TableName 3 <null> string 0 2048 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 2048 2048 10 mmuuid:7d9540bd-b51f-!
4206-8c33-b39c5ba8bb8b <null> 91
@@ -135,7 +136,7 @@
PartsSupplier SYSADMIN MatViews TargetSchemaName 4 <null> string 0 255 false true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:a95dba1c-283e-!
4f48-9671-34cecdb7d0e3 <null> 21
PartsSupplier SYS Keys Type 7 <null> string 0 20 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 20 20 10 mmuuid:29e73c18-afec-!
43a9-81ab-7378d6daf20b <null> 95
PartsSupplier SYS ProcedureParams Type 7 <null> string 0 100 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 100 100 10 mmuuid:76a1981b-1226-!
4a55-9acf-82a061cc8642 <null> 106
-PartsSupplier SYS Tables Type 4 <null> string 0 20 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 20 20 10 mmuuid:4814a0af-4e8f-!
4f55-9b25-3148d90d3d9b <null> 152
+PartsSupplier SYS Tables Type 4 <null> string 0 20 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 20 20 10 mmuuid:4814a0af-4e8f-!
4f55-9b25-3148d90d3d9b <null> 153
PartsSupplier SYS DataTypes TypeLength 7 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> (0) java.lang.Integer 10 10 10 mmuuid:0668382a-f9c3-!
4507-8b0f-df65a2ebbf2f <null> 66
PartsSupplier SYS ProcedureParams TypeLength 10 <null> integer 0 10 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> (0) java.lang.Integer 10 10 10 mmuuid:791d7a29-8fc5-!
4735-9144-1accc114b58e <null> 109
PartsSupplier SYS DataTypes TypeName 4 <null> string 0 100 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 100 100 10 mmuuid:48081cdd-9e90-!
4440-a956-4a32af96d7f4 <null> 63
@@ -146,9 +147,9 @@
PartsSupplier SYS ProcedureParams UID 14 <null> string 0 50 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 50 10 mmuuid:a278de2e-89f1-!
4281-9e63-54aebb6062ce <null> 113
PartsSupplier SYS Procedures UID 6 <null> string 0 50 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 50 50 10 mmuuid:de9df25a-c886-!
46e0-ae3a-8eb6792e43f4 <null> 121
PartsSupplier SYS Properties UID 3 <null> string 0 50 true true false false true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 50 50 10 mmuuid:b333969a-83e0-!
4010-9463-9a0088da6c83 <null> 126
-PartsSupplier SYS Schemas UID 4 <null> string 0 50 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 50 50 10 mmuuid:ad232e4d-9c01-!
4d0c-bc57-0459d9db918a <null> 145
-PartsSupplier SYS Tables UID 8 <null> string 0 50 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 50 50 10 mmuuid:6afe3737-26f9-!
43a8-88db-86531b5dc66c <null> 156
-PartsSupplier SYS ReferenceKeyColumns UPDATE_RULE 10 <null> integer 0 10 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:30d5ae74-b19e-!
4186-97e1-aeff5801e44f <null> 137
+PartsSupplier SYS Schemas UID 4 <null> string 0 50 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 50 50 10 mmuuid:ad232e4d-9c01-!
4d0c-bc57-0459d9db918a <null> 146
+PartsSupplier SYS Tables UID 8 <null> string 0 50 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 50 50 10 mmuuid:6afe3737-26f9-!
43a8-88db-86531b5dc66c <null> 157
+PartsSupplier SYS ReferenceKeyColumns UPDATE_RULE 10 <null> integer 0 10 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 10 10 10 mmuuid:30d5ae74-b19e-!
4186-97e1-aeff5801e44f <null> 138
PartsSupplier SYSADMIN MatViews Updated 8 <null> timestamp 0 0 false true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.sql.Timestamp 0 0 10 mmuuid:33970a66-7ad4-!
411f-a6c4-545746747fe6 <null> 25
PartsSupplier SYSADMIN MatViews VDBName 1 <null> string 0 255 false true false true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:c1ce9841-e272-!
4839-8c78-777a5f68d241 <null> 18
PartsSupplier SYS Columns VDBName 1 <null> string 0 255 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:83f19a81-1243-!
4751-8c99-daddbf37b1d7 <null> 29
@@ -156,102 +157,102 @@
PartsSupplier SYS Keys VDBName 1 <null> string 0 255 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:5785b523-7da3-!
42c1-8920-66daa1f7fa1d <null> 89
PartsSupplier SYS ProcedureParams VDBName 1 <null> string 0 255 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:f832f316-2403-!
43fa-9ccc-c3ab9d38acca <null> 100
PartsSupplier SYS Procedures VDBName 1 <null> string 0 255 true true false false false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:1d664747-4a95-!
4605-8b28-381bed3121f1 <null> 116
-PartsSupplier SYS Schemas VDBName 1 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:73dbf95b-a283-!
4f0a-81b9-9b98e09c2906 <null> 142
-PartsSupplier SYS Tables VDBName 1 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:58de905f-9d64-!
4831-a985-da6d082ff709 <null> 149
+PartsSupplier SYS Schemas VDBName 1 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:73dbf95b-a283-!
4f0a-81b9-9b98e09c2906 <null> 143
+PartsSupplier SYS Tables VDBName 1 <null> string 0 255 false true true true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:58de905f-9d64-!
4831-a985-da6d082ff709 <null> 150
PartsSupplier SYSADMIN MatViews Valid 6 <null> boolean 0 0 false true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 10 mmuuid:13098912-bce2-!
4842-9ea9-b162fcd7383e <null> 23
PartsSupplier SYS Properties Value 2 <null> string 0 255 true true false true true false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 255 255 10 mmuuid:c917257d-06b7-!
41dd-a6cb-44c0ff0f897e <null> 125
-PartsSupplier SYS VirtualDatabases Version 2 <null> string 0 50 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 50 50 10 mmuuid:c876d749-a512-!
4810-9910-3034ca524c45 <null> 163
-PartsSupplier pg_catalog pg_attrdef adbin 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:e22c521a-e208-4!
181-9dbd-89f5de7014b9 <null> 225
-PartsSupplier pg_catalog pg_attrdef adnum 2 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:e9b278d4-49af-4!
42f-9a5a-b699fe3b102b <null> 224
-PartsSupplier pg_catalog pg_attrdef adrelid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:4589389f-4abd-4!
2a6-818f-ff1f2a085dfb <null> 223
-PartsSupplier pg_catalog pg_attrdef adsrc 4 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:492dd834-907f-4!
29b-aa6e-958ad65204c6 <null> 226
-PartsSupplier pg_catalog pg_am amname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:da4b747e-7d87-4!
03a-8309-2cdf1399031b <null> 203
-PartsSupplier pg_catalog pg_attribute atthasdef 10 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:5868e549-4bbe-4!
79e-bc7e-632c05cc2329 <null> 184
-PartsSupplier pg_catalog pg_attribute attisdropped 9 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:7beb42a9-dfe6-4!
3de-98b6-7e8948b1a666 <null> 183
-PartsSupplier pg_catalog pg_attribute attlen 5 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:d1214249-95cd-4!
26f-b8f6-4bf68c0504c7 <null> 179
-PartsSupplier pg_catalog pg_attribute attname 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:6064d149-4102-4!
c2d-9132-582342f25e90 <null> 177
-PartsSupplier pg_catalog matpg_relatt attname 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:5cfb2b62-a912-4!
bfb-bf4f-51e107fe210c <null> 242
-PartsSupplier pg_catalog pg_attribute attnotnull 8 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:91ce8bde-8570-4!
867-be17-80acfa9275a6 <null> 182
-PartsSupplier pg_catalog pg_attribute attnum 6 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:141fd911-f2dd-4!
edd-8f08-ad8a67ffd0fb <null> 180
-PartsSupplier pg_catalog matpg_relatt attnum 2 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:0b0894ba-e1ea-4!
eaf-bcd2-ea9ebd05e47d <null> 241
-PartsSupplier pg_catalog pg_attribute attrelid 2 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:3be6b5de-2287-4!
279-93f3-4f5064799118 <null> 176
-PartsSupplier pg_catalog matpg_relatt attrelid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:5c7bf056-ecc5-4!
1ea-a122-7a4b1de9908a <null> 240
-PartsSupplier pg_catalog pg_attribute atttypid 4 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:99782493-1cce-4!
e14-9c1b-4de7ce50e2c8 <null> 178
-PartsSupplier pg_catalog pg_attribute atttypmod 7 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:2e2bae3c-ab93-4!
9f5-b96c-7a7b9d66782d <null> 181
-PartsSupplier pg_catalog matpg_relatt autoinc 6 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:23454408-0347-4!
0d2-a3f9-3faa664fb5e9 <null> 245
+PartsSupplier SYS VirtualDatabases Version 2 <null> string 0 50 true true false true false false false No Nulls <null> <null> -1 -1 Searchable <null> <null> java.lang.String 50 50 10 mmuuid:c876d749-a512-!
4810-9910-3034ca524c45 <null> 164
+PartsSupplier pg_catalog pg_attrdef adbin 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:e22c521a-e208-4!
181-9dbd-89f5de7014b9 <null> 226
+PartsSupplier pg_catalog pg_attrdef adnum 2 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:e9b278d4-49af-4!
42f-9a5a-b699fe3b102b <null> 225
+PartsSupplier pg_catalog pg_attrdef adrelid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:4589389f-4abd-4!
2a6-818f-ff1f2a085dfb <null> 224
+PartsSupplier pg_catalog pg_attrdef adsrc 4 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:492dd834-907f-4!
29b-aa6e-958ad65204c6 <null> 227
+PartsSupplier pg_catalog pg_am amname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:da4b747e-7d87-4!
03a-8309-2cdf1399031b <null> 204
+PartsSupplier pg_catalog pg_attribute atthasdef 10 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:5868e549-4bbe-4!
79e-bc7e-632c05cc2329 <null> 185
+PartsSupplier pg_catalog pg_attribute attisdropped 9 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:7beb42a9-dfe6-4!
3de-98b6-7e8948b1a666 <null> 184
+PartsSupplier pg_catalog pg_attribute attlen 5 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:d1214249-95cd-4!
26f-b8f6-4bf68c0504c7 <null> 180
+PartsSupplier pg_catalog pg_attribute attname 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:6064d149-4102-4!
c2d-9132-582342f25e90 <null> 178
+PartsSupplier pg_catalog matpg_relatt attname 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:5cfb2b62-a912-4!
bfb-bf4f-51e107fe210c <null> 243
+PartsSupplier pg_catalog pg_attribute attnotnull 8 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:91ce8bde-8570-4!
867-be17-80acfa9275a6 <null> 183
+PartsSupplier pg_catalog pg_attribute attnum 6 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:141fd911-f2dd-4!
edd-8f08-ad8a67ffd0fb <null> 181
+PartsSupplier pg_catalog matpg_relatt attnum 2 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:0b0894ba-e1ea-4!
eaf-bcd2-ea9ebd05e47d <null> 242
+PartsSupplier pg_catalog pg_attribute attrelid 2 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:3be6b5de-2287-4!
279-93f3-4f5064799118 <null> 177
+PartsSupplier pg_catalog matpg_relatt attrelid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:5c7bf056-ecc5-4!
1ea-a122-7a4b1de9908a <null> 241
+PartsSupplier pg_catalog pg_attribute atttypid 4 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:99782493-1cce-4!
e14-9c1b-4de7ce50e2c8 <null> 179
+PartsSupplier pg_catalog pg_attribute atttypmod 7 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:2e2bae3c-ab93-4!
9f5-b96c-7a7b9d66782d <null> 182
+PartsSupplier pg_catalog matpg_relatt autoinc 6 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:23454408-0347-4!
0d2-a3f9-3faa664fb5e9 <null> 246
PartsSupplier SYSADMIN VDBResources contents 2 <null> blob 0 0 false true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> org.teiid.core.types.BlobType 0 0 10 mmuuid:f9421669-3564-!
451d-9293-96c1e5e72c4f <null> 28
-PartsSupplier pg_catalog pg_database datacl 7 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:8b993c11-de2b-4!
8bc-beb1-3e44c46811b4 <null> 233
-PartsSupplier pg_catalog pg_database datallowconn 5 <null> char 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Character 0 0 0 mmuid:5c9d54b2-433f-4!
43a-85ce-821f42ed109e <null> 231
-PartsSupplier pg_catalog pg_database datconfig 6 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:4b5beb14-03a0-4!
652-9d6f-5f8cc74d470c <null> 232
-PartsSupplier pg_catalog pg_database datdba 8 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:36db343d-e99a-4!
27c-a4e2-763a720ce4a4 <null> 234
-PartsSupplier pg_catalog pg_database datlastsysoid 4 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:c2bdf40c-ec58-4!
39c-a403-7adf604ceadd <null> 230
-PartsSupplier pg_catalog pg_database datname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:1aedd02c-5801-4!
1e7-accd-da1f257c26e8 <null> 228
-PartsSupplier pg_catalog pg_database dattablespace 9 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:28d034eb-6f39-4!
02f-b642-9c9560e57247 <null> 235
-PartsSupplier pg_catalog pg_database encoding 3 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:3b621b25-171c-4!
05b-8bf9-635cf93f2273 <null> 229
-PartsSupplier pg_catalog pg_index indexprs 7 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:1e6dbecd-9a2d-4!
aef-afbe-665de7acb9d6 <null> 200
-PartsSupplier pg_catalog pg_index indexrelid 2 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:8709e084-48df-4!
17d-b3f8-f4e9b7d8802b <null> 195
-PartsSupplier pg_catalog pg_index indisclustered 4 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:9f873e0f-903d-4!
c9d-8c37-1073b5ec4c67 <null> 197
-PartsSupplier pg_catalog pg_index indisprimary 6 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:9ea3b6d2-b27b-4!
bb1-a99d-b703c3308384 <null> 199
-PartsSupplier pg_catalog pg_index indisunique 5 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:a52c714d-dfe9-4!
06c-906b-fadd53ac4e98 <null> 198
-PartsSupplier pg_catalog pg_index indkey 8 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:347ec08c-6b41-4!
1d0-8475-031ce7d99ac0 <null> 201
-PartsSupplier pg_catalog pg_index indrelid 3 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:16998907-e1dd-4!
47e-898d-780994d30619 <null> 196
-PartsSupplier pg_catalog matpg_datatype name 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:b4e04928-9a59-4!
718-a7f1-3a60bcae7449 <null> 249
-PartsSupplier pg_catalog pg_namespace nspname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:0e513513-b35a-4!
8be-975d-5dbed6ace7e9 <null> 165
-PartsSupplier pg_catalog matpg_relatt nspname 5 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:f1998229-2c1a-4!
7b7-8f46-9dda81446db6 <null> 244
-PartsSupplier pg_catalog pg_namespace oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:688e5112-4083-4!
b67-b42c-62d9a614c59a <null> 164
-PartsSupplier pg_catalog pg_class oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:c1e736ac-c9d4-4!
026-8904-23c90e6eb1c0 <null> 166
-PartsSupplier pg_catalog pg_attribute oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:f735e545-a81c-4!
ee2-84d0-3ea35d4083a2 <null> 175
-PartsSupplier pg_catalog pg_type oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:b6f64d16-b147-4!
59d-8e84-1bd3048fb900 <null> 185
-PartsSupplier pg_catalog pg_index oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:83ae2247-7eec-4!
59f-b037-ffd3cdca0627 <null> 194
-PartsSupplier pg_catalog pg_am oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:3c67619c-7d8f-4!
378-b7e9-84a0451ea5e5 <null> 202
-PartsSupplier pg_catalog pg_proc oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:bdf3ee1e-b5b7-4!
8ab-b43c-4bbb2c8ae1e2 <null> 204
-PartsSupplier pg_catalog pg_trigger oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:635b6634-632c-4!
3c9-8cc7-bcaa016133e8 <null> 214
-PartsSupplier pg_catalog pg_database oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:689cde3b-a631-4!
f25-94b4-ff2ffe022b0f <null> 227
-PartsSupplier pg_catalog pg_user oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:bb78401d-d10c-4!
3b1-af84-e4fa6b95db42 <null> 236
-PartsSupplier pg_catalog matpg_datatype oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:053375a4-3971-4!
705-9146-9ecc640022c2 <null> 247
-PartsSupplier pg_catalog pg_proc proallargtypes 9 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:a385751f-a31a-4!
d5d-9197-3fbd390b0251 <null> 212
-PartsSupplier pg_catalog pg_proc proargmodes 8 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:bcbed548-176c-4!
116-a5d6-7638cb0206e1 <null> 211
-PartsSupplier pg_catalog pg_proc proargnames 7 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:d9f36bdc-7b25-4!
af0-b9f5-a96aac6d3094 <null> 210
-PartsSupplier pg_catalog pg_proc proargtypes 6 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:ffa4ac73-b549-4!
70e-931f-dc36330cb8c4 <null> 209
-PartsSupplier pg_catalog pg_proc proname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:b288b3aa-37f2-4!
a8e-8b1b-e932a2ce3e25 <null> 205
-PartsSupplier pg_catalog pg_proc pronamespace 10 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:e5715456-245f-4!
846-b90b-01d06d1c3672 <null> 213
-PartsSupplier pg_catalog pg_proc pronargs 5 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:6796c2e7-48a4-4!
f9f-bc98-d47913e2491c <null> 208
-PartsSupplier pg_catalog pg_proc proretset 3 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:e0244e1d-431c-4!
1fa-8194-1e357e2b688b <null> 206
-PartsSupplier pg_catalog pg_proc prorettype 4 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:9fb5a34a-3a7e-4!
d38-b7cd-239f28a3504e <null> 207
-PartsSupplier pg_catalog pg_class relam 5 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:c2f92b1a-6ba0-4!
486-8936-f5185d926178 <null> 170
-PartsSupplier pg_catalog pg_class relhasoids 9 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:3ac5a14a-1f9e-4!
55b-8ea1-cf0878774fd7 <null> 174
-PartsSupplier pg_catalog pg_class relhasrules 8 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:6c26fd66-2a4a-4!
ccf-949a-a06a858db7f6 <null> 173
-PartsSupplier pg_catalog pg_class relkind 4 <null> char 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Character 0 0 0 mmuid:ef4359eb-6d51-4!
249-bfea-40bc0f407d10 <null> 169
-PartsSupplier pg_catalog pg_class relname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:5f9b50fa-8188-4!
048-93c2-3ad1587915df <null> 167
-PartsSupplier pg_catalog matpg_relatt relname 4 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:ffbf69c1-2e34-4!
764-a9b3-9a1b61bfd4af <null> 243
-PartsSupplier pg_catalog pg_class relnamespace 3 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:4591ef08-bff8-4!
f3b-9de7-420f9c7f9d2b <null> 168
-PartsSupplier pg_catalog pg_class relpages 7 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:44dee7d6-b6ae-4!
4c7-85f2-e87364d8d059 <null> 172
-PartsSupplier pg_catalog pg_class reltuples 6 <null> float 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Float 0 0 0 mmuid:b9ed4b49-5a7b-4!
ba4-863a-37fd95b2a34c <null> 171
+PartsSupplier pg_catalog pg_database datacl 7 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:8b993c11-de2b-4!
8bc-beb1-3e44c46811b4 <null> 234
+PartsSupplier pg_catalog pg_database datallowconn 5 <null> char 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Character 0 0 0 mmuid:5c9d54b2-433f-4!
43a-85ce-821f42ed109e <null> 232
+PartsSupplier pg_catalog pg_database datconfig 6 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:4b5beb14-03a0-4!
652-9d6f-5f8cc74d470c <null> 233
+PartsSupplier pg_catalog pg_database datdba 8 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:36db343d-e99a-4!
27c-a4e2-763a720ce4a4 <null> 235
+PartsSupplier pg_catalog pg_database datlastsysoid 4 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:c2bdf40c-ec58-4!
39c-a403-7adf604ceadd <null> 231
+PartsSupplier pg_catalog pg_database datname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:1aedd02c-5801-4!
1e7-accd-da1f257c26e8 <null> 229
+PartsSupplier pg_catalog pg_database dattablespace 9 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:28d034eb-6f39-4!
02f-b642-9c9560e57247 <null> 236
+PartsSupplier pg_catalog pg_database encoding 3 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:3b621b25-171c-4!
05b-8bf9-635cf93f2273 <null> 230
+PartsSupplier pg_catalog pg_index indexprs 7 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:1e6dbecd-9a2d-4!
aef-afbe-665de7acb9d6 <null> 201
+PartsSupplier pg_catalog pg_index indexrelid 2 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:8709e084-48df-4!
17d-b3f8-f4e9b7d8802b <null> 196
+PartsSupplier pg_catalog pg_index indisclustered 4 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:9f873e0f-903d-4!
c9d-8c37-1073b5ec4c67 <null> 198
+PartsSupplier pg_catalog pg_index indisprimary 6 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:9ea3b6d2-b27b-4!
bb1-a99d-b703c3308384 <null> 200
+PartsSupplier pg_catalog pg_index indisunique 5 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:a52c714d-dfe9-4!
06c-906b-fadd53ac4e98 <null> 199
+PartsSupplier pg_catalog pg_index indkey 8 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:347ec08c-6b41-4!
1d0-8475-031ce7d99ac0 <null> 202
+PartsSupplier pg_catalog pg_index indrelid 3 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:16998907-e1dd-4!
47e-898d-780994d30619 <null> 197
+PartsSupplier pg_catalog matpg_datatype name 3 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:b4e04928-9a59-4!
718-a7f1-3a60bcae7449 <null> 250
+PartsSupplier pg_catalog pg_namespace nspname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:0e513513-b35a-4!
8be-975d-5dbed6ace7e9 <null> 166
+PartsSupplier pg_catalog matpg_relatt nspname 5 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:f1998229-2c1a-4!
7b7-8f46-9dda81446db6 <null> 245
+PartsSupplier pg_catalog pg_namespace oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:688e5112-4083-4!
b67-b42c-62d9a614c59a <null> 165
+PartsSupplier pg_catalog pg_class oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:c1e736ac-c9d4-4!
026-8904-23c90e6eb1c0 <null> 167
+PartsSupplier pg_catalog pg_attribute oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:f735e545-a81c-4!
ee2-84d0-3ea35d4083a2 <null> 176
+PartsSupplier pg_catalog pg_type oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:b6f64d16-b147-4!
59d-8e84-1bd3048fb900 <null> 186
+PartsSupplier pg_catalog pg_index oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:83ae2247-7eec-4!
59f-b037-ffd3cdca0627 <null> 195
+PartsSupplier pg_catalog pg_am oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:3c67619c-7d8f-4!
378-b7e9-84a0451ea5e5 <null> 203
+PartsSupplier pg_catalog pg_proc oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:bdf3ee1e-b5b7-4!
8ab-b43c-4bbb2c8ae1e2 <null> 205
+PartsSupplier pg_catalog pg_trigger oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:635b6634-632c-4!
3c9-8cc7-bcaa016133e8 <null> 215
+PartsSupplier pg_catalog pg_database oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:689cde3b-a631-4!
f25-94b4-ff2ffe022b0f <null> 228
+PartsSupplier pg_catalog pg_user oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:bb78401d-d10c-4!
3b1-af84-e4fa6b95db42 <null> 237
+PartsSupplier pg_catalog matpg_datatype oid 1 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:053375a4-3971-4!
705-9146-9ecc640022c2 <null> 248
+PartsSupplier pg_catalog pg_proc proallargtypes 9 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:a385751f-a31a-4!
d5d-9197-3fbd390b0251 <null> 213
+PartsSupplier pg_catalog pg_proc proargmodes 8 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:bcbed548-176c-4!
116-a5d6-7638cb0206e1 <null> 212
+PartsSupplier pg_catalog pg_proc proargnames 7 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:d9f36bdc-7b25-4!
af0-b9f5-a96aac6d3094 <null> 211
+PartsSupplier pg_catalog pg_proc proargtypes 6 <null> object 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Object 0 0 0 mmuid:ffa4ac73-b549-4!
70e-931f-dc36330cb8c4 <null> 210
+PartsSupplier pg_catalog pg_proc proname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:b288b3aa-37f2-4!
a8e-8b1b-e932a2ce3e25 <null> 206
+PartsSupplier pg_catalog pg_proc pronamespace 10 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:e5715456-245f-4!
846-b90b-01d06d1c3672 <null> 214
+PartsSupplier pg_catalog pg_proc pronargs 5 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:6796c2e7-48a4-4!
f9f-bc98-d47913e2491c <null> 209
+PartsSupplier pg_catalog pg_proc proretset 3 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:e0244e1d-431c-4!
1fa-8194-1e357e2b688b <null> 207
+PartsSupplier pg_catalog pg_proc prorettype 4 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:9fb5a34a-3a7e-4!
d38-b7cd-239f28a3504e <null> 208
+PartsSupplier pg_catalog pg_class relam 5 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:c2f92b1a-6ba0-4!
486-8936-f5185d926178 <null> 171
+PartsSupplier pg_catalog pg_class relhasoids 9 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:3ac5a14a-1f9e-4!
55b-8ea1-cf0878774fd7 <null> 175
+PartsSupplier pg_catalog pg_class relhasrules 8 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:6c26fd66-2a4a-4!
ccf-949a-a06a858db7f6 <null> 174
+PartsSupplier pg_catalog pg_class relkind 4 <null> char 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Character 0 0 0 mmuid:ef4359eb-6d51-4!
249-bfea-40bc0f407d10 <null> 170
+PartsSupplier pg_catalog pg_class relname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:5f9b50fa-8188-4!
048-93c2-3ad1587915df <null> 168
+PartsSupplier pg_catalog matpg_relatt relname 4 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:ffbf69c1-2e34-4!
764-a9b3-9a1b61bfd4af <null> 244
+PartsSupplier pg_catalog pg_class relnamespace 3 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:4591ef08-bff8-4!
f3b-9de7-420f9c7f9d2b <null> 169
+PartsSupplier pg_catalog pg_class relpages 7 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:44dee7d6-b6ae-4!
4c7-85f2-e87364d8d059 <null> 173
+PartsSupplier pg_catalog pg_class reltuples 6 <null> float 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Float 0 0 0 mmuid:b9ed4b49-5a7b-4!
ba4-863a-37fd95b2a34c <null> 172
PartsSupplier SYSADMIN VDBResources resourcePath 1 <null> string 0 255 false true false true true false false Nullable <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 255 10 mmuuid:b1bc5150-3dcc-!
452e-9e75-4a506997f612 <null> 27
-PartsSupplier pg_catalog pg_trigger tgargs 4 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:0c20dbe7-5d89-4!
11f-a8ab-3d77b999595b <null> 217
-PartsSupplier pg_catalog pg_trigger tgconstrname 8 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:c010d12f-2074-4!
5db-8e18-979cee2c45da <null> 221
-PartsSupplier pg_catalog pg_trigger tgconstrrelid 2 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:64977f3e-f2a0-4!
66e-a5d1-80bb058cbe08 <null> 215
-PartsSupplier pg_catalog pg_trigger tgdeferrable 6 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:bfbff036-caf2-4!
652-80cf-398af17ed7d1 <null> 219
-PartsSupplier pg_catalog pg_trigger tgfoid 3 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:250d7c06-728a-4!
b2a-b557-91f2a69bb184 <null> 216
-PartsSupplier pg_catalog pg_trigger tginitdeferred 7 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:da4b59ca-ebff-4!
5a8-ad68-9777bc587813 <null> 220
-PartsSupplier pg_catalog pg_trigger tgnargs 5 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:d70f020b-658c-4!
f58-86dc-0fbb12e2d8af <null> 218
-PartsSupplier pg_catalog pg_trigger tgrelid 9 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:71091853-c65e-4!
6a9-9947-aa024f806e2d <null> 222
-PartsSupplier pg_catalog pg_type typbasetype 6 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:a17d2f61-cd68-4!
c0d-8d25-132f68eb3b67 <null> 190
-PartsSupplier pg_catalog pg_type typelem 9 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:22ac431d-e6e6-4!
eef-9d74-b31795424e97 <null> 193
-PartsSupplier pg_catalog pg_type typlen 4 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:931c09e1-937a-4!
37e-aab2-2360f8d90e2b <null> 188
-PartsSupplier pg_catalog matpg_datatype typlen 5 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:0e9c4439-48d0-4!
115-a343-5baab7a236b6 <null> 251
-PartsSupplier pg_catalog pg_type typname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:d600d818-2aad-4!
c92-9343-267d044dd97d <null> 186
-PartsSupplier pg_catalog matpg_datatype typname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:0f312b3c-98ca-4!
a09-81fa-f1ff83f0a6c1 <null> 248
-PartsSupplier pg_catalog pg_type typnamespace 3 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:e47217d2-2b07-4!
353-bfbd-d7c883a5e7e0 <null> 187
-PartsSupplier pg_catalog matpg_relatt typoid 7 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:595a823f-cec1-4!
2dc-b8b2-c95c8b4e4e66 <null> 246
-PartsSupplier pg_catalog pg_type typrelid 8 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:bec25882-b292-4!
ed1-a610-cad5d504837d <null> 192
-PartsSupplier pg_catalog pg_type typtype 5 <null> char 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Character 0 0 0 mmuid:83199eba-7af4-4!
4a9-822f-006677b1b895 <null> 189
-PartsSupplier pg_catalog pg_type typtypmod 7 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:cee3559d-1ce6-4!
b17-ad57-2ecb79a9e1d2 <null> 191
-PartsSupplier pg_catalog matpg_datatype uid 4 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:87826ebc-98a5-4!
f19-a6d8-6b7b96cbed48 <null> 250
-PartsSupplier pg_catalog pg_user usecreatedb 3 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:6da98878-b46e-4!
ed1-b032-1bc72da595f4 <null> 238
-PartsSupplier pg_catalog pg_user usename 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:236445e1-408c-4!
0a1-a61c-40e96fb5dc9f <null> 237
-PartsSupplier pg_catalog pg_user usesuper 4 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:9bfddc66-af75-4!
366-8eac-b9fef3421219 <null> 239
-Row Count : 251
+PartsSupplier pg_catalog pg_trigger tgargs 4 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:0c20dbe7-5d89-4!
11f-a8ab-3d77b999595b <null> 218
+PartsSupplier pg_catalog pg_trigger tgconstrname 8 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:c010d12f-2074-4!
5db-8e18-979cee2c45da <null> 222
+PartsSupplier pg_catalog pg_trigger tgconstrrelid 2 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:64977f3e-f2a0-4!
66e-a5d1-80bb058cbe08 <null> 216
+PartsSupplier pg_catalog pg_trigger tgdeferrable 6 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:bfbff036-caf2-4!
652-80cf-398af17ed7d1 <null> 220
+PartsSupplier pg_catalog pg_trigger tgfoid 3 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:250d7c06-728a-4!
b2a-b557-91f2a69bb184 <null> 217
+PartsSupplier pg_catalog pg_trigger tginitdeferred 7 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:da4b59ca-ebff-4!
5a8-ad68-9777bc587813 <null> 221
+PartsSupplier pg_catalog pg_trigger tgnargs 5 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:d70f020b-658c-4!
f58-86dc-0fbb12e2d8af <null> 219
+PartsSupplier pg_catalog pg_trigger tgrelid 9 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:71091853-c65e-4!
6a9-9947-aa024f806e2d <null> 223
+PartsSupplier pg_catalog pg_type typbasetype 6 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:a17d2f61-cd68-4!
c0d-8d25-132f68eb3b67 <null> 191
+PartsSupplier pg_catalog pg_type typelem 9 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:22ac431d-e6e6-4!
eef-9d74-b31795424e97 <null> 194
+PartsSupplier pg_catalog pg_type typlen 4 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:931c09e1-937a-4!
37e-aab2-2360f8d90e2b <null> 189
+PartsSupplier pg_catalog matpg_datatype typlen 5 <null> short 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Short 0 0 0 mmuid:0e9c4439-48d0-4!
115-a343-5baab7a236b6 <null> 252
+PartsSupplier pg_catalog pg_type typname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:d600d818-2aad-4!
c92-9343-267d044dd97d <null> 187
+PartsSupplier pg_catalog matpg_datatype typname 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:0f312b3c-98ca-4!
a09-81fa-f1ff83f0a6c1 <null> 249
+PartsSupplier pg_catalog pg_type typnamespace 3 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:e47217d2-2b07-4!
353-bfbd-d7c883a5e7e0 <null> 188
+PartsSupplier pg_catalog matpg_relatt typoid 7 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:595a823f-cec1-4!
2dc-b8b2-c95c8b4e4e66 <null> 247
+PartsSupplier pg_catalog pg_type typrelid 8 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:bec25882-b292-4!
ed1-a610-cad5d504837d <null> 193
+PartsSupplier pg_catalog pg_type typtype 5 <null> char 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Character 0 0 0 mmuid:83199eba-7af4-4!
4a9-822f-006677b1b895 <null> 190
+PartsSupplier pg_catalog pg_type typtypmod 7 <null> integer 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Integer 0 0 0 mmuid:cee3559d-1ce6-4!
b17-ad57-2ecb79a9e1d2 <null> 192
+PartsSupplier pg_catalog matpg_datatype uid 4 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:87826ebc-98a5-4!
f19-a6d8-6b7b96cbed48 <null> 251
+PartsSupplier pg_catalog pg_user usecreatedb 3 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:6da98878-b46e-4!
ed1-b032-1bc72da595f4 <null> 239
+PartsSupplier pg_catalog pg_user usename 2 <null> string 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.String 0 0 0 mmuid:236445e1-408c-4!
0a1-a61c-40e96fb5dc9f <null> 238
+PartsSupplier pg_catalog pg_user usesuper 4 <null> boolean 0 0 false true false false false false false Unknown <null> <null> -1 -1 Searchable <null> <null> java.lang.Boolean 0 0 0 mmuid:9bfddc66-af75-4!
366-8eac-b9fef3421219 <null> 240
+Row Count : 252
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 PartsSupplier java.lang.String VDBName string SYS Columns 255 255 0 false false false false 0 true true false false
SchemaName 12 PartsSupplier java.lang.String SchemaName string SYS Columns 255 255 0 false true false true 1 false true true true
Modified: trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedureParams.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedureParams.expected 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedureParams.expected 2011-05-02 17:02:28 UTC (rev 3134)
@@ -2,21 +2,25 @@
VDBName SchemaName ProcedureName Name DataType Position Type Optional Precision TypeLength Scale Radix NullType UID Description OID
PartsSupplier SYSADMIN refreshMatView Invalidate boolean 2 In false 0 0 0 10 No Nulls mmuuid:5736cfd3-750f-42d8-b083-102061e11c60 <null> 5
PartsSupplier SYSADMIN refreshMatViewRow Key object 2 In false 0 0 0 10 No Nulls mmuuid:7af5a63b-1b91-4d1e-912e-846a7e84c579 <null> 2
+PartsSupplier SYSADMIN setProperty Name string 3 In false 0 0 0 10 No Nulls mmuuid:ea92812c-1516-4c75-b5d3-c531fdbd8475 <null> 15
+PartsSupplier SYSADMIN setProperty OldValue clob 1 ReturnValue false 0 2097152 0 10 No Nulls mmuuid:48034d50-dd11-4653-aeae-b0d8d3d55656 <null> 13
PartsSupplier SYSADMIN refreshMatViewRow RowsUpdated integer 3 ReturnValue false 0 0 0 10 No Nulls mmuuid:05a6a9be-c014-4d06-bcac-746cee4f118b <null> 3
PartsSupplier SYSADMIN refreshMatView RowsUpdated integer 3 ReturnValue false 0 0 0 10 No Nulls mmuuid:d07a6a75-aa12-4dac-8eab-b2acdbaaffd8 <null> 6
+PartsSupplier SYSADMIN setProperty UID string 2 In false 0 50 0 10 No Nulls mmuuid:d377510e-2ec5-445e-bdf0-59c7c0380962 <null> 14
+PartsSupplier SYSADMIN setProperty Value clob 4 In false 0 2097152 0 10 Nullable mmuuid:ac5beeb8-2d0d-48ff-a533-4237d53b67e8 <null> 16
PartsSupplier SYSADMIN refreshMatViewRow ViewName string 1 In false 0 0 0 10 No Nulls mmuuid:ba635c44-a052-496d-9c35-ca010c0ebebe <null> 1
PartsSupplier SYSADMIN refreshMatView ViewName string 1 In false 0 0 0 10 No Nulls mmuuid:e0c28e00-d987-48e4-8c60-5f637f10bf33 <null> 4
-PartsSupplier SYSADMIN setTableStats cardinality integer 2 In false 0 0 0 10 No Nulls mmuuid:0aba7849-7fd3-4bc6-a3d3-dfe433bc67a4 <null> 14
+PartsSupplier SYSADMIN setTableStats cardinality integer 2 In false 0 0 0 10 No Nulls mmuuid:0aba7849-7fd3-4bc6-a3d3-dfe433bc67a4 <null> 18
PartsSupplier SYSADMIN setColumnStats columnName string 2 In false 0 0 0 10 No Nulls mmuuid:76553706-632f-4e60-8489-9d0361f58541 <null> 8
PartsSupplier SYSADMIN setColumnStats distinctCount integer 3 In false 0 0 0 10 Nullable mmuuid:2c61976e-abb5-4c74-bdae-278681b82aa3 <null> 9
-PartsSupplier SYS getXMLSchemas document string 1 In false 0 0 0 10 No Nulls mmuuid:85b88af5-f0b8-401f-b35a-ccee56155492 <null> 15
+PartsSupplier SYS getXMLSchemas document string 1 In false 0 0 0 10 No Nulls mmuuid:85b88af5-f0b8-401f-b35a-ccee56155492 <null> 19
PartsSupplier SYSADMIN setColumnStats max string 5 In false 0 0 0 10 Nullable mmuuid:8f42e701-3609-413d-8c10-77e32cd816f2 <null> 11
PartsSupplier SYSADMIN setColumnStats min string 6 In false 0 0 0 10 Nullable mmuuid:4511ea3f-f2d2-4abf-b363-afb5186bc2d2 <null> 12
PartsSupplier SYSADMIN setColumnStats nullCount integer 4 In false 0 0 0 10 Nullable mmuuid:44b8c83c-9fcd-4bd2-a730-76e401205536 <null> 10
-PartsSupplier SYS getXMLSchemas schema xml 1 ResultSet false 0 0 0 10 Nullable mmuuid:003980bb-38bb-41ad-b8c2-c87ca47aa554 <null> 16
+PartsSupplier SYS getXMLSchemas schema xml 1 ResultSet false 0 0 0 10 Nullable mmuuid:003980bb-38bb-41ad-b8c2-c87ca47aa554 <null> 20
PartsSupplier SYSADMIN setColumnStats tableName string 1 In false 0 0 0 10 No Nulls mmuuid:4dcab018-ca4a-467b-96cc-7f28734c840e <null> 7
-PartsSupplier SYSADMIN setTableStats tableName string 1 In false 0 0 0 10 No Nulls mmuuid:28d8ad4a-e091-4934-afd9-7d27310bd370 <null> 13
-Row Count : 16
+PartsSupplier SYSADMIN setTableStats tableName string 1 In false 0 0 0 10 No Nulls mmuuid:28d8ad4a-e091-4934-afd9-7d27310bd370 <null> 17
+Row Count : 20
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 PartsSupplier java.lang.String VDBName string SYS ProcedureParams 255 255 0 false false false false 0 true true false false
SchemaName 12 PartsSupplier java.lang.String SchemaName string SYS ProcedureParams 255 255 0 false true false true 1 false true true true
Modified: trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedures.expected
===================================================================
--- trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedures.expected 2011-04-29 18:34:21 UTC (rev 3133)
+++ trunk/test-integration/common/src/test/resources/TestSystemVirtualModel/testProcedures.expected 2011-05-02 17:02:28 UTC (rev 3134)
@@ -1,11 +1,12 @@
string string string string boolean string string integer
VDBName SchemaName Name NameInSource ReturnsResults UID Description OID
-PartsSupplier SYS getXMLSchemas <null> true mmuuid:68497bd9-30f5-461b-bf13-6b26aeb2fc4f <null> 5
+PartsSupplier SYS getXMLSchemas <null> true mmuuid:68497bd9-30f5-461b-bf13-6b26aeb2fc4f <null> 6
PartsSupplier SYSADMIN refreshMatView <null> false mmuuid:52178344-dca8-4c76-8549-00a4515c7044 <null> 2
PartsSupplier SYSADMIN refreshMatViewRow <null> false mmuuid:1674912b-af56-465a-a1b9-d1de8b761f10 <null> 1
PartsSupplier SYSADMIN setColumnStats <null> false mmuuid:49c367be-918f-43be-8b9e-99e275179859 <null> 3
-PartsSupplier SYSADMIN setTableStats <null> false mmuuid:6d167c35-04d1-41f6-83ff-888c39423823 <null> 4
-Row Count : 5
+PartsSupplier SYSADMIN setProperty <null> false mmuuid:8db9b08e-3d6e-415a-9ceb-3fef726f424c <null> 4
+PartsSupplier SYSADMIN setTableStats <null> false mmuuid:6d167c35-04d1-41f6-83ff-888c39423823 <null> 5
+Row Count : 6
getColumnName getColumnType getCatalogName getColumnClassName getColumnLabel getColumnTypeName getSchemaName getTableName getColumnDisplaySize getPrecision getScale isAutoIncrement isCaseSensitive isCurrency isDefinitelyWritable isNullable isReadOnly isSearchable isSigned isWritable
VDBName 12 PartsSupplier java.lang.String VDBName string SYS Procedures 255 255 0 false false false false 0 true true false false
SchemaName 12 PartsSupplier java.lang.String SchemaName string SYS Procedures 255 255 0 false true false true 1 false true true true
13 years, 7 months