teiid SVN: r3797 - in branches/7.6.x: connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc and 3 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2012-01-17 14:31:40 -0500 (Tue, 17 Jan 2012)
New Revision: 3797
Added:
branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/excel/
branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/excel/ExcelExecutionFactory.java
Modified:
branches/7.6.x/build/kits/jboss-container/teiid-releasenotes.html
branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java
branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCMetdataProcessor.java
branches/7.6.x/connectors/translator-jdbc/src/main/resources/META-INF/jboss-beans.xml
branches/7.6.x/documentation/reference/src/main/docbook/en-US/content/translators.xml
Log:
TEIID-1895 providing more override hooks and adding an excel override for import that will enclose names in square brackets
Modified: branches/7.6.x/build/kits/jboss-container/teiid-releasenotes.html
===================================================================
--- branches/7.6.x/build/kits/jboss-container/teiid-releasenotes.html 2012-01-17 16:31:33 UTC (rev 3796)
+++ branches/7.6.x/build/kits/jboss-container/teiid-releasenotes.html 2012-01-17 19:31:40 UTC (rev 3797)
@@ -45,7 +45,8 @@
<LI><B>Non-blocking statement execution</B> - Teiid JDBC extensions TeiidStatement and TeiidPreparedStatement can be used to submit queries against embedded connections with a callback to process results in a non-blocking manner.
<LI><B>NON_STRICT limit hint</B> - the NON_STRICT hint can be used with unordered limits to tell the optimizer to not inhibit push operations even if the results will not be consistent with the logical application of the limit.
<LI><B>Source Hints</B> - user and transformation queries can specify a meta source hint, e.g. SELECT /*+ sh my-oracle:'leading' */ * FROM TBL. The hint information will be passed to the translator. The Oracle translator will by default treat the source hint as an Oracle hint. See the Reference and Developers Guide for more.
- <LI><B>Hive Translator</B> - Hive translator has been added as a technology preview.
+ <LI><B>Hive Translator</B> - Hive translator has been added as a technology preview.
+ <LI><B>Excel JDBC Translator</B> - for use with Excel using the JDBC-ODBC bridge.
</UL>
<h2><a name="Compatibility">Compatibility Issues</a></h2>
Modified: branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java
===================================================================
--- branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java 2012-01-17 16:31:33 UTC (rev 3796)
+++ branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java 2012-01-17 19:31:40 UTC (rev 3797)
@@ -273,12 +273,17 @@
@Override
public void getMetadata(MetadataFactory metadataFactory, Connection conn) throws TranslatorException {
try {
- JDBCMetdataProcessor metadataProcessor = new JDBCMetdataProcessor();
+ JDBCMetdataProcessor metadataProcessor = createMetadataProcessor();
PropertiesUtils.setBeanProperties(metadataProcessor, metadataFactory.getImportProperties(), "importer"); //$NON-NLS-1$
metadataProcessor.getConnectorMetadata(conn, metadataFactory);
} catch (SQLException e) {
throw new TranslatorException(e);
}
+ }
+
+ protected JDBCMetdataProcessor createMetadataProcessor() {
+ JDBCMetdataProcessor metadataProcessor = new JDBCMetdataProcessor();
+ return metadataProcessor;
}
@Override
Modified: branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCMetdataProcessor.java
===================================================================
--- branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCMetdataProcessor.java 2012-01-17 16:31:33 UTC (rev 3796)
+++ branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCMetdataProcessor.java 2012-01-17 19:31:40 UTC (rev 3797)
@@ -293,7 +293,7 @@
return TypeFacility.getDataTypeNameFromSQLType(type);
}
- private String quoteName(String name) {
+ protected String quoteName(String name) {
if (quoteNameInSource) {
return quoteString + StringUtil.replaceAll(name, quoteString, quoteString + quoteString) + quoteString;
}
Added: branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/excel/ExcelExecutionFactory.java
===================================================================
--- branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/excel/ExcelExecutionFactory.java (rev 0)
+++ branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/excel/ExcelExecutionFactory.java 2012-01-17 19:31:40 UTC (rev 3797)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.translator.jdbc.excel;
+
+import org.teiid.translator.Translator;
+import org.teiid.translator.jdbc.JDBCExecutionFactory;
+import org.teiid.translator.jdbc.JDBCMetdataProcessor;
+
+@Translator(name="excel-odbc", description="A translator for Excel using the JDBC-ODBC bridge")
+public class ExcelExecutionFactory extends JDBCExecutionFactory {
+
+ @Override
+ protected JDBCMetdataProcessor createMetadataProcessor() {
+ return new JDBCMetdataProcessor() {
+ @Override
+ protected String quoteName(String name) {
+ return '[' + name + ']';
+ }
+ };
+ }
+
+}
Property changes on: branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/excel/ExcelExecutionFactory.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: branches/7.6.x/connectors/translator-jdbc/src/main/resources/META-INF/jboss-beans.xml
===================================================================
--- branches/7.6.x/connectors/translator-jdbc/src/main/resources/META-INF/jboss-beans.xml 2012-01-17 16:31:33 UTC (rev 3796)
+++ branches/7.6.x/connectors/translator-jdbc/src/main/resources/META-INF/jboss-beans.xml 2012-01-17 19:31:40 UTC (rev 3797)
@@ -351,5 +351,21 @@
<parameter class="java.lang.String">translator-netezza</parameter>
<parameter class="java.lang.String">Netezza</parameter>
</constructor>
+ </bean>
+
+ <!-- Excel -->
+ <bean name="translator-excel-template" class="org.teiid.templates.TranslatorDeploymentTemplate">
+ <property name="info"><inject bean="translator-excel" /> </property>
+ <property name="managedObjectFactory"> <inject bean="ManagedObjectFactory" /> </property>
+ </bean>
+
+ <bean name="translator-excel" class="org.teiid.templates.TranslatorTemplateInfo">
+ <constructor factoryMethod="createTemplateInfo">
+ <factory bean="TranslatorDeploymentTemplateInfoFactory" />
+ <parameter class="java.lang.Class">org.teiid.templates.TranslatorTemplateInfo</parameter>
+ <parameter class="java.lang.Class">org.teiid.translator.jdbc.excel.ExcelExecutionFactory</parameter>
+ <parameter class="java.lang.String">translator-excel</parameter>
+ <parameter class="java.lang.String">Excel</parameter>
+ </constructor>
</bean>
</deployment>
\ No newline at end of file
Modified: branches/7.6.x/documentation/reference/src/main/docbook/en-US/content/translators.xml
===================================================================
--- branches/7.6.x/documentation/reference/src/main/docbook/en-US/content/translators.xml 2012-01-17 16:31:33 UTC (rev 3796)
+++ branches/7.6.x/documentation/reference/src/main/docbook/en-US/content/translators.xml 2012-01-17 19:31:40 UTC (rev 3797)
@@ -254,6 +254,11 @@
</listitem>
<listitem>
<para>
+ <emphasis>excel-odbc</emphasis> - for use with Excel 2003 or later via a JDBC-ODBC bridge.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
<emphasis>h2</emphasis> - for use with H2 version 1.1 or later.
</para>
</listitem>
@@ -294,7 +299,7 @@
</listitem>
<listitem>
<para>
- <emphasis>informix</emphasis> - for use with any version.
+ <emphasis>informix</emphasis> - for use with any Informix version.
</para>
</listitem>
<listitem>
@@ -326,6 +331,11 @@
</listitem>
<listitem>
<para>
+ <emphasis>netezza</emphasis> - for use with any Netezza version.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
<emphasis>oracle</emphasis> - for use with Oracle 9i or later.
Sequences may be used with the Oracle translator. A sequence may be
modeled as a table with a name in source of DUAL and columns with the
12 years, 11 months
teiid SVN: r3796 - branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2012-01-17 11:31:33 -0500 (Tue, 17 Jan 2012)
New Revision: 3796
Modified:
branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java
Log:
TEIID-1871 adding byte[] type check
Modified: branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java
===================================================================
--- branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java 2012-01-17 02:12:12 UTC (rev 3795)
+++ branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java 2012-01-17 16:31:33 UTC (rev 3796)
@@ -85,7 +85,7 @@
public Object retrieveValue(ResultSet results, int columnIndex,
Class<?> expectedType) throws SQLException {
Object result = super.retrieveValue(results, columnIndex, expectedType);
- if (expectedType == TypeFacility.RUNTIME_TYPES.STRING && result instanceof Blob) {
+ if (expectedType == TypeFacility.RUNTIME_TYPES.STRING && (result instanceof Blob || result instanceof byte[])) {
return results.getString(columnIndex);
}
return result;
@@ -95,10 +95,10 @@
public Object retrieveValue(CallableStatement results, int parameterIndex,
Class<?> expectedType) throws SQLException {
Object result = super.retrieveValue(results, parameterIndex, expectedType);
- if (expectedType == TypeFacility.RUNTIME_TYPES.STRING && result instanceof Blob) {
+ if (expectedType == TypeFacility.RUNTIME_TYPES.STRING && (result instanceof Blob || result instanceof byte[])) {
return results.getString(parameterIndex);
}
return result;
}
-}
+}
12 years, 11 months
teiid SVN: r3795 - in trunk: common-core/src/main/java/org/teiid/core/types and 7 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2012-01-16 21:12:12 -0500 (Mon, 16 Jan 2012)
New Revision: 3795
Modified:
trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html
trunk/common-core/src/main/java/org/teiid/core/types/BlobType.java
trunk/common-core/src/main/java/org/teiid/core/types/ClobType.java
trunk/common-core/src/main/java/org/teiid/core/types/DataTypeManager.java
trunk/common-core/src/test/java/org/teiid/core/types/TestBlobValue.java
trunk/common-core/src/test/java/org/teiid/core/types/TestClobValue.java
trunk/documentation/admin-guide/src/main/docbook/en-US/content/appendix-c.xml
trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/DependentValueSource.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/GroupingNode.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/ListNestedSortComparator.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/MergeJoinStrategy.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/Constant.java
trunk/engine/src/test/java/org/teiid/common/buffer/TestLobManager.java
trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestConstant.java
Log:
TEIID-1465 TEIID-1834 adding the ability to perform a padded comparison and an option to use comparable lobs
Modified: trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html 2012-01-17 02:12:12 UTC (rev 3795)
@@ -35,7 +35,9 @@
<LI>translators may indicate support for dependent join handling
</UL>
<LI><B>Continuous Asynch Queries</B> to process plans in a streamed window fashion the TeiidStatement/TeiidPreparedStatement methods now take a RequestOptions object to specify continuous mode. See the Client and Developers Guides for more.
- <LI><B>Texttable selectors</B> - can be used to selectively parse only record lines matching a given selector string. Selectors may also be used for column values to join data from other records positionally.
+ <LI><B>Texttable selectors</B> - can be used to selectively parse only record lines matching a given selector string. Selectors may also be used for column values to join data from other records positionally.
+ <LI><B>Comparable LOBs</B> - the system property org.teiid.comparableLobs can be set to use CLOB and BLOB values in comparison/sorting/grouping operations.
+ <LI><B>Padded String Comparison</B> - the system property org.teiid.padSpace can be set to effectively right pad strings to the same length for comparison.
</UL>
<h2><a name="Compatibility">Compatibility Issues</a></h2>
Modified: trunk/common-core/src/main/java/org/teiid/core/types/BlobType.java
===================================================================
--- trunk/common-core/src/main/java/org/teiid/core/types/BlobType.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/common-core/src/main/java/org/teiid/core/types/BlobType.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -26,7 +26,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInput;
-import java.io.ObjectOutput;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.SQLException;
@@ -40,7 +39,7 @@
/**
* Represent a value of type "blob", which can be streamable from client
*/
-public final class BlobType extends Streamable<Blob> implements Blob {
+public final class BlobType extends Streamable<Blob> implements Blob, Comparable<BlobType> {
private static final long serialVersionUID = 1294191629070433450L;
@@ -61,8 +60,8 @@
/**
* @see java.sql.Blob#getBytes(long, int)
*/
- public byte[] getBytes(long pos, int length) throws SQLException {
- return this.reference.getBytes(pos, length);
+ public byte[] getBytes(long pos, int len) throws SQLException {
+ return this.reference.getBytes(pos, len);
}
@Override
@@ -120,9 +119,9 @@
this.reference.free();
}
- public InputStream getBinaryStream(long pos, long length)
+ public InputStream getBinaryStream(long pos, long len)
throws SQLException {
- return this.reference.getBinaryStream(pos, length);
+ return this.reference.getBinaryStream(pos, len);
}
public static SerialBlob createBlob(byte[] bytes) {
@@ -171,4 +170,27 @@
}
}
+ @Override
+ public int compareTo(BlobType o) {
+ try {
+ InputStream is1 = this.getBinaryStream();
+ InputStream is2 = o.getBinaryStream();
+ long len1 = this.length();
+ long len2 = o.length();
+ long n = Math.min(len1, len2);
+ for (long i = 0; i < n; i++) {
+ int b1 = is1.read();
+ int b2 = is2.read();
+ if (b1 != b2) {
+ return b1 - b2;
+ }
+ }
+ return Long.signum(len1 - len2);
+ } catch (SQLException e) {
+ throw new TeiidRuntimeException(e);
+ } catch (IOException e) {
+ throw new TeiidRuntimeException(e);
+ }
+ }
+
}
Modified: trunk/common-core/src/main/java/org/teiid/core/types/ClobType.java
===================================================================
--- trunk/common-core/src/main/java/org/teiid/core/types/ClobType.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/common-core/src/main/java/org/teiid/core/types/ClobType.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -43,7 +43,7 @@
* This is wrapper on top of a "clob" object, which implements the "java.sql.Clob"
* interface. This class also implements the Streamable interface
*/
-public final class ClobType extends Streamable<Clob> implements Clob, Sequencable {
+public final class ClobType extends Streamable<Clob> implements Clob, Sequencable, Comparable<ClobType> {
private static final long serialVersionUID = 2753412502127824104L;
@@ -71,8 +71,8 @@
/**
* @see java.sql.Clob#getSubString(long, int)
*/
- public String getSubString(long pos, int length) throws SQLException {
- return this.reference.getSubString(pos, length);
+ public String getSubString(long pos, int len) throws SQLException {
+ return this.reference.getSubString(pos, len);
}
@Override
@@ -200,8 +200,8 @@
this.reference.free();
}
- public Reader getCharacterStream(long pos, long length) throws SQLException {
- return this.reference.getCharacterStream(pos, length);
+ public Reader getCharacterStream(long pos, long len) throws SQLException {
+ return this.reference.getCharacterStream(pos, len);
}
public static SerialClob createClob(char[] chars) {
@@ -260,5 +260,28 @@
r.close();
}
}
+
+ @Override
+ public int compareTo(ClobType o) {
+ try {
+ Reader cs1 = this.getCharacterStream();
+ Reader cs2 = o.getCharacterStream();
+ long len1 = this.length();
+ long len2 = o.length();
+ long n = Math.min(len1, len2);
+ for (long i = 0; i < n; i++) {
+ int c1 = cs1.read();
+ int c2 = cs2.read();
+ if (c1 != c2) {
+ return c1 - c2;
+ }
+ }
+ return Long.signum(len1 - len2);
+ } catch (SQLException e) {
+ throw new TeiidRuntimeException(e);
+ } catch (IOException e) {
+ throw new TeiidRuntimeException(e);
+ }
+ }
}
Modified: trunk/common-core/src/main/java/org/teiid/core/types/DataTypeManager.java
===================================================================
--- trunk/common-core/src/main/java/org/teiid/core/types/DataTypeManager.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/common-core/src/main/java/org/teiid/core/types/DataTypeManager.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -66,6 +66,8 @@
public class DataTypeManager {
private static final boolean USE_VALUE_CACHE = PropertiesUtils.getBooleanProperty(System.getProperties(), "org.teiid.useValueCache", false); //$NON-NLS-1$
+ private static final boolean COMPARABLE_LOBS = PropertiesUtils.getBooleanProperty(System.getProperties(), "org.teiid.comparableLobs", false); //$NON-NLS-1$
+ public static final boolean PAD_SPACE = PropertiesUtils.getBooleanProperty(System.getProperties(), "org.teiid.padSpace", false); //$NON-NLS-1$
private static boolean valueCacheEnabled;
@@ -835,8 +837,8 @@
public static boolean isNonComparable(String type) {
return DataTypeManager.DefaultDataTypes.OBJECT.equals(type)
- || DataTypeManager.DefaultDataTypes.BLOB.equals(type)
- || DataTypeManager.DefaultDataTypes.CLOB.equals(type)
+ || (!COMPARABLE_LOBS && DataTypeManager.DefaultDataTypes.BLOB.equals(type))
+ || (!COMPARABLE_LOBS && DataTypeManager.DefaultDataTypes.CLOB.equals(type))
|| DataTypeManager.DefaultDataTypes.XML.equals(type);
}
@@ -873,4 +875,14 @@
}
return stringCache.getValue(value);
}
+
+ public static boolean isHashable(Class<?> type) {
+ if (type == DataTypeManager.DefaultDataClasses.STRING) {
+ return !PAD_SPACE;
+ }
+ return !(type == DataTypeManager.DefaultDataClasses.BIG_DECIMAL
+ || type == DataTypeManager.DefaultDataClasses.BLOB
+ || type == DataTypeManager.DefaultDataClasses.CLOB);
+ }
+
}
Modified: trunk/common-core/src/test/java/org/teiid/core/types/TestBlobValue.java
===================================================================
--- trunk/common-core/src/test/java/org/teiid/core/types/TestBlobValue.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/common-core/src/test/java/org/teiid/core/types/TestBlobValue.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -71,4 +71,14 @@
assertEquals(testString, new String(read.getBytes(1, (int)blob.length())));
}
+ public void testBlobCompare() throws Exception {
+ String testString = "this is test clob"; //$NON-NLS-1$
+ SerialBlob blob = new SerialBlob(testString.getBytes());
+ BlobType bv = new BlobType(blob);
+
+ SerialBlob blob1 = new SerialBlob(testString.getBytes());
+ BlobType bv1 = new BlobType(blob1);
+ assertEquals(0, bv1.compareTo(bv));
+ }
+
}
Modified: trunk/common-core/src/test/java/org/teiid/core/types/TestClobValue.java
===================================================================
--- trunk/common-core/src/test/java/org/teiid/core/types/TestClobValue.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/common-core/src/test/java/org/teiid/core/types/TestClobValue.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -127,4 +127,14 @@
assertEquals("aa", clob.getSubString(1, 3));
}
+ public void testClobCompare() throws Exception {
+ String testString = "this is test clob"; //$NON-NLS-1$
+ SerialClob clob = new SerialClob(testString.toCharArray());
+ ClobType ct = new ClobType(clob);
+
+ SerialClob clob1 = new SerialClob(testString.toCharArray());
+ ClobType ct1 = new ClobType(clob1);
+ assertEquals(0, ct1.compareTo(ct));
+ }
+
}
Modified: trunk/documentation/admin-guide/src/main/docbook/en-US/content/appendix-c.xml
===================================================================
--- trunk/documentation/admin-guide/src/main/docbook/en-US/content/appendix-c.xml 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/documentation/admin-guide/src/main/docbook/en-US/content/appendix-c.xml 2012-01-17 02:12:12 UTC (rev 3795)
@@ -45,5 +45,15 @@
Set to true to parse exact fixed point literals, e.g. 1.0, as double values rather than as decimal/BigDecimal values and to return a double value from the AVG function for integral values in the same way as releases earlier than 8.0.
</para>
</listitem>
+ <listitem>
+ <para><emphasis>org.teiid.comparableLobs</emphasis> - defaults to false.
+ Set to true to allow blob and clob values to be comparable in Teiid. Source type metadata will determine if the comparison can be pushed down.
+ </para>
+ </listitem>
+ <listitem>
+ <para><emphasis>org.teiid.padSpace</emphasis> - defaults to false.
+ Set to true to compare strings as if PAD SPACE collation is being used, that is strings are effectively right padded to the same length for comparison. If this property is set, it is not necessary to use the trimStrings translator option.
+ </para>
+ </listitem>
</itemizedlist>
</appendix>
\ No newline at end of file
Modified: trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -324,7 +324,7 @@
if (leftValue == rightValue) {
return 0;
}
- return ((Comparable<Object>)leftValue).compareTo(rightValue);
+ return Constant.compare((Comparable<?>)leftValue, (Comparable<?>)rightValue);
}
public Boolean evaluate(MatchCriteria criteria, List<?> tuple)
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/DependentValueSource.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/DependentValueSource.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/DependentValueSource.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -87,7 +87,8 @@
index = buffer.getSchema().indexOf(valueExpression);
}
Assertion.assertTrue(index != -1);
- if (((Expression)buffer.getSchema().get(index)).getType() == DataTypeManager.DefaultDataClasses.BIG_DECIMAL) {
+ Class<?> type = ((Expression)buffer.getSchema().get(index)).getType();
+ if (!DataTypeManager.isHashable(type)) {
result = new TreeSet<Object>();
} else {
result = new HashSet<Object>();
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/GroupingNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/GroupingNode.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/GroupingNode.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -403,25 +403,7 @@
if (indexes == null) {
return true;
}
- for(int i=indexes.length-1; i>=0; i--) {
- Object oldValue = oldTuple.get(indexes[i]);
- Object newValue = newTuple.get(indexes[i]);
-
- if(oldValue == null) {
- if(newValue != null) {
- return false;
- }
- } else {
- if(newValue == null) {
- return false;
- }
- if(! oldValue.equals(newValue)) {
- return false;
- }
- }
- }
-
- return true;
+ return MergeJoinStrategy.compareTuples(newTuple, oldTuple, indexes, indexes, true) == 0;
}
private void updateAggregates(List<?> tuple)
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/ListNestedSortComparator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/ListNestedSortComparator.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/ListNestedSortComparator.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -25,6 +25,7 @@
import java.util.List;
import org.teiid.language.SortSpecification.NullOrdering;
+import org.teiid.query.sql.symbol.Constant;
/**
* This class can be used for comparing lists of elements, when the fields to
@@ -173,7 +174,7 @@
return -1;
}
} else {
- compare = param1.compareTo(param2);
+ compare = Constant.compare(param1, param2);
}
if (compare != 0) {
boolean asc = orderTypes != null?orderTypes.get(k):this.ascendingOrder;
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/MergeJoinStrategy.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/MergeJoinStrategy.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/MergeJoinStrategy.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -28,6 +28,7 @@
import org.teiid.core.TeiidProcessingException;
import org.teiid.query.processor.relational.SourceState.ImplicitBuffer;
import org.teiid.query.sql.lang.JoinType;
+import org.teiid.query.sql.symbol.Constant;
/**
@@ -302,11 +303,17 @@
List rightProbe,
int[] leftExpressionIndecies,
int[] rightExpressionIndecies) {
- for (int i = 0; i < leftExpressionIndecies.length; i++) {
+ return compareTuples(leftProbe, rightProbe, leftExpressionIndecies,
+ rightExpressionIndecies, grouping);
+ }
+
+ public static int compareTuples(List<?> leftProbe, List<?> rightProbe,
+ int[] leftExpressionIndecies, int[] rightExpressionIndecies, boolean nullEquals) {
+ for (int i = 0; i < leftExpressionIndecies.length; i++) {
Object leftValue = leftProbe.get(leftExpressionIndecies[i]);
Object rightValue = rightProbe.get(rightExpressionIndecies[i]);
if (rightValue == null) {
- if (grouping && leftValue == null) {
+ if (nullEquals && leftValue == null) {
continue;
}
return -1;
@@ -316,7 +323,7 @@
return 1;
}
- int c = ((Comparable)rightValue).compareTo(leftValue);
+ int c = Constant.compare((Comparable)rightValue, (Comparable)leftValue);
if (c != 0) {
return c;
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/Constant.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/Constant.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/Constant.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -25,6 +25,7 @@
import java.math.BigDecimal;
import java.util.List;
+import org.teiid.core.types.ClobType;
import org.teiid.core.types.DataTypeManager;
import org.teiid.query.QueryPlugin;
import org.teiid.query.sql.LanguageVisitor;
@@ -223,9 +224,60 @@
if (o.isNull()) {
return 1;
}
- return ((Comparable)this.value).compareTo(o.getValue());
+ return compare((Comparable<?>)this.value, (Comparable<?>)o.getValue());
}
+ /**
+ * Compare the given non-null values
+ * @param o1
+ * @param o2
+ * @return
+ */
+ public final static int compare(Comparable o1, Comparable o2) {
+ if (DataTypeManager.PAD_SPACE) {
+ if (o1 instanceof String) {
+ CharSequence s1 = (CharSequence)o1;
+ CharSequence s2 = (CharSequence)o2;
+ return comparePadded(s1, s2);
+ } else if (o1 instanceof ClobType) {
+ CharSequence s1 = ((ClobType)o1).getCharSequence();
+ CharSequence s2 = ((ClobType)o2).getCharSequence();
+ return comparePadded(s1, s2);
+ }
+ }
+ return o1.compareTo(o2);
+ }
+
+ final static int comparePadded(CharSequence s1, CharSequence s2) {
+ int len1 = s1.length();
+ int len2 = s2.length();
+ int n = Math.min(len1, len2);
+ int i = 0;
+ int result = 0;
+ for (; i < n; i++) {
+ char c1 = s1.charAt(i);
+ char c2 = s2.charAt(i);
+ if (c1 != c2) {
+ result = c1 - c2;
+ break;
+ }
+ }
+ if (result == 0 && len1 != len2) {
+ result = len1 - len2;
+ }
+ for (int j = i; j < len1; j++) {
+ if (s1.charAt(j) != ' ') {
+ return result;
+ }
+ }
+ for (int j = i; j < len2; j++) {
+ if (s2.charAt(j) != ' ') {
+ return result;
+ }
+ }
+ return 0;
+ }
+
public boolean isBindEligible() {
return bindEligible;
}
Modified: trunk/engine/src/test/java/org/teiid/common/buffer/TestLobManager.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/common/buffer/TestLobManager.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/engine/src/test/java/org/teiid/common/buffer/TestLobManager.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -69,7 +69,7 @@
LobManager lobManager = new LobManager(new int[] {0, 1}, fs);
lobManager.setMaxMemoryBytes(4);
- List<Streamable<? extends Object>> tuple = Arrays.asList(clob, blob);
+ List<?> tuple = Arrays.asList(clob, blob);
lobManager.updateReferences(tuple, ReferenceMode.CREATE);
lobManager.persist();
Modified: trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestConstant.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestConstant.java 2012-01-16 17:31:15 UTC (rev 3794)
+++ trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestConstant.java 2012-01-17 02:12:12 UTC (rev 3795)
@@ -22,20 +22,15 @@
package org.teiid.query.sql.symbol;
-import junit.framework.TestCase;
+import static org.junit.Assert.*;
+import org.junit.Test;
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.UnitTestUtil;
-public class TestConstant extends TestCase {
+public class TestConstant {
- // ################################## FRAMEWORK ################################
-
- public TestConstant(String name) {
- super(name);
- }
-
// ################################## TEST HELPERS ################################
public static final Constant sample1() {
@@ -50,7 +45,7 @@
// ################################## ACTUAL TESTS ################################
- public void testString() {
+ @Test public void testString() {
String s = "the string"; //$NON-NLS-1$
Constant c = new Constant(s);
assertEquals("Value is incorrect: ", s, c.getValue()); //$NON-NLS-1$
@@ -65,7 +60,7 @@
assertEquals("Cloned object not equal to original: ", c, cc); //$NON-NLS-1$
}
- public void testInteger() {
+ @Test public void testInteger() {
Integer i = new Integer(5);
Constant c = new Constant(i);
assertEquals("Value is incorrect: ", i, c.getValue()); //$NON-NLS-1$
@@ -80,7 +75,7 @@
assertEquals("Cloned object not equal to original: ", c, cc); //$NON-NLS-1$
}
- public void testNoTypeNull() {
+ @Test public void testNoTypeNull() {
Constant c = new Constant(null);
assertEquals("Value is incorrect: ", null, c.getValue()); //$NON-NLS-1$
assertEquals("Type is incorrect: ", DataTypeManager.DefaultDataClasses.NULL, c.getType()); //$NON-NLS-1$
@@ -94,7 +89,7 @@
assertEquals("Cloned object not equal to original: ", c, cc); //$NON-NLS-1$
}
- public void testTypedNull() {
+ @Test public void testTypedNull() {
Constant c = new Constant(null, DataTypeManager.DefaultDataClasses.STRING);
assertEquals("Value is incorrect: ", null, c.getValue()); //$NON-NLS-1$
assertEquals("Type is incorrect: ", DataTypeManager.DefaultDataClasses.STRING, c.getType()); //$NON-NLS-1$
@@ -111,7 +106,7 @@
assertEquals("Typed null not equal to non-typed null: ", c, c3); //$NON-NLS-1$
}
- public void testClone() {
+ @Test public void testClone() {
// Use this object as the "object"-type value for c1
StringBuffer value = new StringBuffer("x"); //$NON-NLS-1$
@@ -129,20 +124,20 @@
assertTrue("Cloned object has not changed, but should have", ((StringBuffer)copy.getValue()).toString().equals("xy")); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testSelfEquivalence(){
+ @Test public void testSelfEquivalence(){
Object s1 = sample1();
int equals = 0;
UnitTestUtil.helpTestEquivalence(equals, s1, s1);
}
- public void testEquivalence(){
+ @Test public void testEquivalence(){
Object s1 = sample1();
Object s1a = sample1();
int equals = 0;
UnitTestUtil.helpTestEquivalence(equals, s1, s1a);
}
- public void testNonEquivalence(){
+ @Test public void testNonEquivalence(){
Object s1 = sample1();
Object s2 = sample2();
int equals = -1;
@@ -153,5 +148,14 @@
// this exception should be thrown
}
}
+
+ @Test public void testPaddedStringComparison(){
+ assertEquals(1, Constant.comparePadded("a", ""));
+ assertEquals(0, Constant.comparePadded("a", "a "));
+ assertEquals(-24, Constant.comparePadded("ab ", "az "));
+ assertEquals(66, Constant.comparePadded("ab ", "a "));
+ assertEquals(0, Constant.comparePadded("a1 ", "a1"));
+
+ }
}
12 years, 11 months
teiid SVN: r3794 - in branches/7.6.x/connectors/translator-jdbc/src: test/java/org/teiid/translator/jdbc/sybase and 1 other directory.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2012-01-16 12:31:15 -0500 (Mon, 16 Jan 2012)
New Revision: 3794
Modified:
branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java
branches/7.6.x/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/sybase/TestSybaseSQLConversionVisitor.java
Log:
TEIID-1864 correcting frac_second handling for sybase
Modified: branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java
===================================================================
--- branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java 2012-01-13 19:26:57 UTC (rev 3793)
+++ branches/7.6.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java 2012-01-16 17:31:15 UTC (rev 3794)
@@ -36,10 +36,13 @@
import java.util.List;
import org.teiid.language.Command;
+import org.teiid.language.Expression;
import org.teiid.language.Function;
import org.teiid.language.LanguageObject;
import org.teiid.language.Limit;
+import org.teiid.language.Literal;
import org.teiid.language.OrderBy;
+import org.teiid.language.SQLConstants;
import org.teiid.language.SetQuery;
import org.teiid.translator.ExecutionContext;
import org.teiid.translator.SourceSystemFunctions;
@@ -100,10 +103,30 @@
registerFunctionModifier(SourceSystemFunctions.QUARTER, new EscapeSyntaxModifier());
registerFunctionModifier(SourceSystemFunctions.SECOND, new EscapeSyntaxModifier());
registerFunctionModifier(SourceSystemFunctions.WEEK, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.TIMESTAMPADD, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.TIMESTAMPDIFF, new EscapeSyntaxModifier());
registerFunctionModifier(SourceSystemFunctions.LENGTH, new EscapeSyntaxModifier());
registerFunctionModifier(SourceSystemFunctions.ATAN2, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.TIMESTAMPADD, new EscapeSyntaxModifier() {
+
+ @Override
+ public List<?> translate(Function function) {
+ if (!isFracSeconds(function)) {
+ return super.translate(function);
+ }
+ //convert from billionths to thousandths
+ return Arrays.asList("dateadd(millisecond, ", function.getParameters().get(1), "/1000000, ", function.getParameters().get(2), ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ });
+ registerFunctionModifier(SourceSystemFunctions.TIMESTAMPDIFF, new EscapeSyntaxModifier() {
+
+ @Override
+ public List<?> translate(Function function) {
+ if (!isFracSeconds(function)) {
+ return super.translate(function);
+ }
+ //convert from billionths to thousandths
+ return Arrays.asList("datediff(millisecond, ", function.getParameters().get(1), ",", function.getParameters().get(2), ")*1000000"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ });
//add in type conversion
ConvertModifier convertModifier = new ConvertModifier();
@@ -390,5 +413,10 @@
protected boolean supportsCrossJoin() {
return false;
}
+
+ private boolean isFracSeconds(Function function) {
+ Expression e = function.getParameters().get(0);
+ return (e instanceof Literal && SQLConstants.NonReserved.SQL_TSI_FRAC_SECOND.equalsIgnoreCase((String)((Literal)e).getValue()));
+ }
}
Modified: branches/7.6.x/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/sybase/TestSybaseSQLConversionVisitor.java
===================================================================
--- branches/7.6.x/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/sybase/TestSybaseSQLConversionVisitor.java 2012-01-13 19:26:57 UTC (rev 3793)
+++ branches/7.6.x/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/sybase/TestSybaseSQLConversionVisitor.java 2012-01-16 17:31:15 UTC (rev 3794)
@@ -250,5 +250,10 @@
helpTestVisitor(getBQTVDB(), input, output);
}
-
+ @Test public void testTimestampFunctions() {
+ helpTestVisitor(getBQTVDB(),
+ "SELECT timestampadd(sql_tsi_second, 1, timestampvalue), timestampadd(sql_tsi_frac_second, 1000, timestampvalue), timestampdiff(sql_tsi_frac_second, timestampvalue, timestampvalue) from bqt1.smalla", //$NON-NLS-1$
+ "SELECT {fn timestampadd(sql_tsi_second, 1, SmallA.TimestampValue)}, dateadd(millisecond, 1000/1000000, SmallA.TimestampValue), datediff(millisecond, SmallA.TimestampValue,SmallA.TimestampValue)*1000000 FROM SmallA"); //$NON-NLS-1$
+ }
+
}
12 years, 11 months
teiid SVN: r3793 - in trunk: documentation/reference/src/main/docbook/en-US/content and 8 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2012-01-13 14:26:57 -0500 (Fri, 13 Jan 2012)
New Revision: 3793
Modified:
trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html
trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml
trunk/documentation/reference/src/main/docbook/en-US/content/sql_clauses.xml
trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalNode.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/TextTableNode.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/TextTable.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java
trunk/engine/src/main/java/org/teiid/query/tempdata/TempTable.java
trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.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/query/processor/TestTextTable.java
Log:
TEIID-1819 adding the ability to select parent values
Modified: trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html 2012-01-12 18:43:23 UTC (rev 3792)
+++ trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html 2012-01-13 19:26:57 UTC (rev 3793)
@@ -34,7 +34,8 @@
<LI>return ReusableExecution instances for processing nodes that issue multiple queries.
<LI>translators may indicate support for dependent join handling
</UL>
- <LI><B>Continuous Asynch Queries</B> to process plans in a streamed window fashion the TeiidStatement/TeiidPreparedStatement methods now take a RequestOptions object to specify continuous mode. See the Client and Developers Guides for more.
+ <LI><B>Continuous Asynch Queries</B> to process plans in a streamed window fashion the TeiidStatement/TeiidPreparedStatement methods now take a RequestOptions object to specify continuous mode. See the Client and Developers Guides for more.
+ <LI><B>Texttable selectors</B> - can be used to selectively parse only record lines matching a given selector string. Selectors may also be used for column values to join data from other records positionally.
</UL>
<h2><a name="Compatibility">Compatibility Issues</a></h2>
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml 2012-01-12 18:43:23 UTC (rev 3792)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml 2012-01-13 19:26:57 UTC (rev 3793)
@@ -24,8 +24,14 @@
</para></entry></row>
<row><entry><para>
+<IN_MULTI_LINE_COMMENT> MORE : {
+"/*" : {
+}
+
+</para></entry></row>
+<row><entry><para>
<IN_MULTI_LINE_COMMENT> SPECIAL : {
-<MULTI_LINE_COMMENT: "*/"> : DEFAULT
+"*/" : {
}
</para></entry></row>
@@ -354,7 +360,8 @@
| <BOOLEANTYPE: "{" "b">
| <POS_REF: ["$"] (<DIGIT>)+>
| <INTEGERVAL: (<MINUS>)? (<DIGIT>)+>
-| <FLOATVAL: (<MINUS>)? (<DIGIT>)* <PERIOD> (<DIGIT>)+ (["e","E"] (["+","-"])? (<DIGIT>)+)?>
+| <DECIMALVAL: (<MINUS>)? (<DIGIT>)* <PERIOD> (<DIGIT>)+>
+| <FLOATVAL: (<MINUS>)? <DIGIT> <PERIOD> (<DIGIT>)+ ["e","E"] (["+","-"])? (<DIGIT>)+>
| <STRINGVAL: ("N" | "E")? "\'" ("\'\'" | ~["\'"])* "\'">
| <#LETTER: ["a"-"z","A"-"Z"] | ["\u0153"-"\ufffd"]>
| <#DIGIT: ["0"-"9"]>
@@ -412,7 +419,7 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod3" xreflabel="command"/>command</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod4">createUpdateProcedure</link> | <link linkend="prod5">userCommand</link> | <link linkend="prod6">callableStatement</link> ) ( <SEMICOLON> )? <EOF></para></entry></row>
+( <link linkend="prod4">createProcedure</link> | <link linkend="prod5">userCommand</link> | <link linkend="prod6">callableStatement</link> ) ( <SEMICOLON> )? <EOF></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod7" xreflabel="designerCommand"/>designerCommand</para></entry>
<entry align="left" valign="top"><para>::=
@@ -420,7 +427,7 @@
<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">forEachRowTriggerAction</link> ) <EOF></para></entry></row>
+( <link linkend="prod4">createProcedure</link> | <link linkend="prod9">forEachRowTriggerAction</link> ) <EOF></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod10" xreflabel="createTrigger"/>createTrigger</para></entry>
<entry align="left" valign="top"><para>::=
@@ -482,175 +489,163 @@
<entry align="left" valign="top"><para>::=
<IF> <LPAREN> <link linkend="prod34">criteria</link> <RPAREN> <link linkend="prod14">statement</link> ( <ELSE> <link linkend="prod14">statement</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod35" 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="left" valign="top"><para>::=
-<HAS> <link linkend="prod35">criteriaSelector</link></para></entry></row>
-<row>
<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="prod35">dataType</link> <link linkend="prod2">id</link> ( ( <link linkend="prod11">nonReserved</link> | <EQ> ) <link linkend="prod36">assignStatementOperand</link> )?</para></entry></row>
<row>
<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="prod36">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="prod36" xreflabel="assignStatementOperand"/>assignStatementOperand</para></entry>
<entry align="left" valign="top"><para>::=
( ( <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="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="prod15">storedProcedure</link> ) )</para></entry></row>
+( ( <link linkend="prod5">userCommand</link> ) | <link linkend="prod37">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="prod4" xreflabel="createProcedure"/>createProcedure</para></entry>
<entry align="left" valign="top"><para>::=
-<TRANSLATE> <link linkend="prod35">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>
+<CREATE> ( <VIRTUAL> )? <PROCEDURE> <link linkend="prod14">statement</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod4" xreflabel="createUpdateProcedure"/>createUpdateProcedure</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod37" xreflabel="dynamicCommand"/>dynamicCommand</para></entry>
<entry align="left" valign="top"><para>::=
-<CREATE> ( <VIRTUAL> )? ( <UPDATE> )? <PROCEDURE> <link linkend="prod14">statement</link></para></entry></row>
+( <EXECUTE> | <EXEC> ) ( ( <STRING> | <IMMEDIATE> ) )? <link linkend="prod24">expression</link> ( <AS> <link linkend="prod38">createElementsWithTypes</link> ( <INTO> <link linkend="prod2">id</link> )? )? ( <USING> <link linkend="prod39">setClauseList</link> )? ( <UPDATE> ( ( <INTEGERVAL> ) | ( <STAR> ) ) )?</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="prod39" xreflabel="setClauseList"/>setClauseList</para></entry>
<entry align="left" valign="top"><para>::=
-( <EXECUTE> | <EXEC> ) ( ( <STRING> | <IMMEDIATE> ) )? <link linkend="prod24">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>
-<row>
-<entry align="right" valign="top"><para><anchor id="prod42" 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="prod38" xreflabel="createElementsWithTypes"/>createElementsWithTypes</para></entry>
<entry align="left" valign="top"><para>::=
<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="prod40">executeUnnamedParams</link> ) <RPAREN> )? <RBRACE> ( <link linkend="prod41">option</link> )?</para></entry></row>
<row>
<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="prod42">executeNamedParams</link> | <link linkend="prod40">executeUnnamedParams</link> ) <RPAREN> ) ( <link linkend="prod41">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="prod40" xreflabel="executeUnnamedParams"/>executeUnnamedParams</para></entry>
<entry align="left" valign="top"><para>::=
( <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="prod42" xreflabel="executeNamedParams"/>executeNamedParams</para></entry>
<entry align="left" valign="top"><para>::=
( <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="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> <LPAREN> <link linkend="prod47">expressionList</link> <RPAREN> ) | ( <link linkend="prod13">queryExpression</link> ) ) ( <link linkend="prod44">option</link> )?</para></entry></row>
+<INSERT> <INTO> <link linkend="prod2">id</link> ( <link linkend="prod43">columnList</link> )? ( ( <VALUES> <LPAREN> <link linkend="prod44">expressionList</link> <RPAREN> ) | ( <link linkend="prod13">queryExpression</link> ) ) ( <link linkend="prod41">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="prod43" 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="expressionList"/>expressionList</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod44" xreflabel="expressionList"/>expressionList</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod24">expression</link> ( <COMMA> <link linkend="prod24">expression</link> )*</para></entry></row>
<row>
<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="prod39">setClauseList</link> ( <link linkend="prod45">where</link> )? ( <link linkend="prod41">option</link> )?</para></entry></row>
<row>
<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="prod45">where</link> )? ( <link linkend="prod41">option</link> )?</para></entry></row>
<row>
<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="prod46">withListElement</link> ( <COMMA> <link linkend="prod46">withListElement</link> )* )? <link linkend="prod47">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="prod46" 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="prod13">queryExpression</link> <RPAREN></para></entry></row>
+<link linkend="prod2">id</link> ( <link linkend="prod43">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="prod47" 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="prod48">queryTerm</link> ( ( <UNION> | <EXCEPT> ) ( <ALL> | <DISTINCT> )? <link linkend="prod48">queryTerm</link> )* ( <link linkend="prod49">orderby</link> )? ( <link linkend="prod50">limit</link> )? ( <link linkend="prod41">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="prod48" 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="prod51">queryPrimary</link> ( <INTERSECT> ( <ALL> | <DISTINCT> )? <link linkend="prod51">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="prod51" 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="prod52">query</link> | ( <TABLE> <link linkend="prod2">id</link> ) | ( <LPAREN> <link linkend="prod47">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="prod52" 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="prod53">select</link> ( <link linkend="prod54">into</link> )? ( <link linkend="prod55">from</link> ( <link linkend="prod45">where</link> )? ( <link linkend="prod56">groupBy</link> )? ( <link linkend="prod57">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="prod54" 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="prod53" 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="prod58">selectSymbol</link> ( <COMMA> <link linkend="prod58">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="prod58" 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="prod59">selectExpression</link> | <link linkend="prod60">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="prod59" xreflabel="selectExpression"/>selectExpression</para></entry>
<entry align="left" valign="top"><para>::=
( <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="prod61" xreflabel="derivedColumn"/>derivedColumn</para></entry>
<entry align="left" valign="top"><para>::=
( <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="prod60" 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="orderedAgg"/>orderedAgg</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="orderedAgg"/>orderedAgg</para></entry>
<entry align="left" valign="top"><para>::=
-( <XMLAGG> | <ARRAY_AGG> ) <LPAREN> <link linkend="prod24">expression</link> ( <link linkend="prod52">orderby</link> )? <RPAREN> <link linkend="prod66">filterClause</link></para></entry></row>
+( <XMLAGG> | <ARRAY_AGG> ) <LPAREN> <link linkend="prod24">expression</link> ( <link linkend="prod49">orderby</link> )? <RPAREN> <link linkend="prod63">filterClause</link></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="prod64" 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> <link linkend="prod66">filterClause</link></para></entry></row>
+<link linkend="prod11">nonReserved</link> <LPAREN> <FOR> <link linkend="prod61">derivedColumn</link> ( <COMMA> <link linkend="prod61">derivedColumn</link> )* ( <ID> <link linkend="prod65">charVal</link> )? ( ( <ID> <link linkend="prod65">charVal</link> ) )? ( <ID> )? ( ( <ID> <link linkend="prod2">id</link> ) )? ( <link linkend="prod49">orderby</link> )? <RPAREN> <link linkend="prod63">filterClause</link></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="prod66" xreflabel="aggregateSymbol"/>aggregateSymbol</para></entry>
<entry align="left" valign="top"><para>::=
-( ( ( <link linkend="prod11">nonReserved</link> <LPAREN> <STAR> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> <RPAREN> ) | ( ( <link linkend="prod11">nonReserved</link> | <ANY> | <SOME> ) <LPAREN> ( <DISTINCT> | <ALL> )? <link linkend="prod24">expression</link> <RPAREN> ) ) <link linkend="prod66">filterClause</link> )</para></entry></row>
+( ( ( <link linkend="prod11">nonReserved</link> <LPAREN> <STAR> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> <RPAREN> ) | ( ( <link linkend="prod11">nonReserved</link> | <ANY> | <SOME> ) <LPAREN> ( <DISTINCT> | <ALL> )? <link linkend="prod24">expression</link> <RPAREN> ) ) <link linkend="prod63">filterClause</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="filterClause"/>filterClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="filterClause"/>filterClause</para></entry>
<entry align="left" valign="top"><para>::=
-( <FILTER> <LPAREN> <WHERE> <link linkend="prod70">booleanPrimary</link> <RPAREN> )?</para></entry></row>
+( <FILTER> <LPAREN> <WHERE> <link linkend="prod67">booleanPrimary</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="prod55" xreflabel="from"/>from</para></entry>
<entry align="left" valign="top"><para>::=
-<FROM> ( <link linkend="prod71">tableReference</link> ( <COMMA> <link linkend="prod71">tableReference</link> )* )</para></entry></row>
+<FROM> ( <link linkend="prod68">tableReference</link> ( <COMMA> <link linkend="prod68">tableReference</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="tableReference"/>tableReference</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="tableReference"/>tableReference</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <LBRACE> <link linkend="prod11">nonReserved</link> <link linkend="prod72">joinedTable</link> <RBRACE> ) | <link linkend="prod72">joinedTable</link> )</para></entry></row>
+( ( <LBRACE> <link linkend="prod11">nonReserved</link> <link linkend="prod69">joinedTable</link> <RBRACE> ) | <link linkend="prod69">joinedTable</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="joinedTable"/>joinedTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="joinedTable"/>joinedTable</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod73">tablePrimary</link> ( ( <link linkend="prod74">crossJoin</link> | <link linkend="prod75">qualifiedJoin</link> ) )*</para></entry></row>
+<link linkend="prod70">tablePrimary</link> ( ( <link linkend="prod71">crossJoin</link> | <link linkend="prod72">qualifiedJoin</link> ) )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="crossJoin"/>crossJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="crossJoin"/>crossJoin</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <CROSS> | <UNION> ) <JOIN> <link linkend="prod73">tablePrimary</link> )</para></entry></row>
+( ( <CROSS> | <UNION> ) <JOIN> <link linkend="prod70">tablePrimary</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
<entry align="left" valign="top"><para>::=
-( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> ( <OUTER> )? ) | ( <FULL> ( <OUTER> )? ) | <INNER> )? <JOIN> <link linkend="prod71">tableReference</link> <ON> <link linkend="prod34">criteria</link> )</para></entry></row>
+( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> ( <OUTER> )? ) | ( <FULL> ( <OUTER> )? ) | <INNER> )? <JOIN> <link linkend="prod68">tableReference</link> <ON> <link linkend="prod34">criteria</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="tablePrimary"/>tablePrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="tablePrimary"/>tablePrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <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>
+( <link linkend="prod73">textTable</link> | <link linkend="prod74">arrayTable</link> | <link linkend="prod75">xmlTable</link> | <link linkend="prod76">unaryFromClause</link> | <link linkend="prod77">subqueryFromClause</link> | ( <LPAREN> <link linkend="prod69">joinedTable</link> <RPAREN> ) ) ( ( <MAKEDEP> ) | ( <MAKENOTDEP> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
<entry align="left" valign="top"><para>::=
<XMLSERIALIZE> <LPAREN> ( <link linkend="prod11">nonReserved</link> )? <link linkend="prod24">expression</link> ( <AS> ( <STRING> | <VARCHAR> | <CLOB> ) )? <RPAREN></para></entry></row>
<row>
@@ -658,147 +653,147 @@
<entry align="left" valign="top"><para>::=
<ID></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="arrayTable"/>arrayTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="arrayTable"/>arrayTable</para></entry>
<entry align="left" valign="top"><para>::=
-<ID> <LPAREN> <link linkend="prod24">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="prod38">createElementsWithTypes</link> <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="textTable"/>textTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="textTable"/>textTable</para></entry>
<entry align="left" valign="top"><para>::=
-<ID> <LPAREN> <link linkend="prod24">expression</link> <link linkend="prod11">nonReserved</link> <link linkend="prod82">textColumn</link> ( <COMMA> <link linkend="prod82">textColumn</link> )* ( <NO> <ROW> <link linkend="prod11">nonReserved</link> )? ( <ID> <link linkend="prod68">charVal</link> )? ( ( <ESCAPE> <link linkend="prod68">charVal</link> ) | ( <ID> <link linkend="prod68">charVal</link> ) )? ( <ID> ( <link linkend="prod83">intVal</link> )? )? ( <ID> <link linkend="prod83">intVal</link> )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<ID> <LPAREN> <link linkend="prod24">expression</link> ( <ID> <link linkend="prod1">stringVal</link> )? <link linkend="prod11">nonReserved</link> <link linkend="prod79">textColumn</link> ( <COMMA> <link linkend="prod79">textColumn</link> )* ( <NO> <ROW> <link linkend="prod11">nonReserved</link> )? ( <ID> <link linkend="prod65">charVal</link> )? ( ( <ESCAPE> <link linkend="prod65">charVal</link> ) | ( <ID> <link linkend="prod65">charVal</link> ) )? ( <ID> ( <link linkend="prod80">intVal</link> )? )? ( <ID> <link linkend="prod80">intVal</link> )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod82" xreflabel="textColumn"/>textColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="textColumn"/>textColumn</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> <link linkend="prod37">dataType</link> ( <ID> <link linkend="prod83">intVal</link> ( <NO> <link linkend="prod11">nonReserved</link> )? )?</para></entry></row>
+<link linkend="prod2">id</link> <link linkend="prod35">dataType</link> ( <ID> <link linkend="prod80">intVal</link> ( <NO> <link linkend="prod11">nonReserved</link> )? )? ( <ID> <link linkend="prod1">stringVal</link> <link linkend="prod80">intVal</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod84" xreflabel="xmlQuery"/>xmlQuery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="xmlQuery"/>xmlQuery</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLQUERY> <LPAREN> ( <link linkend="prod85">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="prod82">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod61">derivedColumn</link> ( <COMMA> <link linkend="prod61">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="prod78" xreflabel="xmlTable"/>xmlTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="xmlTable"/>xmlTable</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLTABLE> <LPAREN> ( <link linkend="prod85">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod64">derivedColumn</link> ( <COMMA> <link linkend="prod64">derivedColumn</link> )* )? ( <ID> <link linkend="prod86">xmlColumn</link> ( <COMMA> <link linkend="prod86">xmlColumn</link> )* )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<XMLTABLE> <LPAREN> ( <link linkend="prod82">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod61">derivedColumn</link> ( <COMMA> <link linkend="prod61">derivedColumn</link> )* )? ( <ID> <link linkend="prod83">xmlColumn</link> ( <COMMA> <link linkend="prod83">xmlColumn</link> )* )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod86" xreflabel="xmlColumn"/>xmlColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod83" 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="prod24">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="prod35">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="prod83" xreflabel="intVal"/>intVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="intVal"/>intVal</para></entry>
<entry align="left" valign="top"><para>::=
<INTEGERVAL></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
<entry align="left" valign="top"><para>::=
( <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="prod79" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod76" 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="prod45" xreflabel="where"/>where</para></entry>
<entry align="left" valign="top"><para>::=
<WHERE> <link linkend="prod34">criteria</link></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod34" xreflabel="criteria"/>criteria</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod87">compoundCritOr</link></para></entry></row>
+<link linkend="prod84">compoundCritOr</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod87" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod84" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod88">compoundCritAnd</link> ( <OR> <link linkend="prod88">compoundCritAnd</link> )*</para></entry></row>
+<link linkend="prod85">compoundCritAnd</link> ( <OR> <link linkend="prod85">compoundCritAnd</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod89">notCrit</link> ( <AND> <link linkend="prod89">notCrit</link> )*</para></entry></row>
+<link linkend="prod86">notCrit</link> ( <AND> <link linkend="prod86">notCrit</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="notCrit"/>notCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod86" xreflabel="notCrit"/>notCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <link linkend="prod70">booleanPrimary</link></para></entry></row>
+( <NOT> )? <link linkend="prod67">booleanPrimary</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="booleanPrimary"/>booleanPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod67" 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">regexMatchCrit</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="prod36">hasCriteria</link> )</para></entry></row>
+( ( <link linkend="prod87">commonValueExpression</link> ( ( <link linkend="prod88">betweenCrit</link> | <link linkend="prod89">matchCrit</link> | <link linkend="prod90">regexMatchCrit</link> | <link linkend="prod91">setCrit</link> | <link linkend="prod92">isNullCrit</link> | <link linkend="prod93">subqueryCompareCriteria</link> | <link linkend="prod94">compareCrit</link> ) )? ) | <link linkend="prod95">existsCriteria</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod99" xreflabel="operator"/>operator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod96" 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="prod97" xreflabel="compareCrit"/>compareCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="compareCrit"/>compareCrit</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod99">operator</link> <link linkend="prod90">commonValueExpression</link></para></entry></row>
+<link linkend="prod96">operator</link> <link linkend="prod87">commonValueExpression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod100" xreflabel="subquery"/>subquery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod97" xreflabel="subquery"/>subquery</para></entry>
<entry align="left" valign="top"><para>::=
<LPAREN> ( <link linkend="prod13">queryExpression</link> | ( <link linkend="prod15">storedProcedure</link> ) ) <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="subqueryAndHint"/>subqueryAndHint</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="subqueryAndHint"/>subqueryAndHint</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod100">subquery</link></para></entry></row>
+<link linkend="prod97">subquery</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod99">operator</link> ( <ANY> | <SOME> | <ALL> ) <link linkend="prod100">subquery</link></para></entry></row>
+<link linkend="prod96">operator</link> ( <ANY> | <SOME> | <ALL> ) <link linkend="prod97">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="prod89" xreflabel="matchCrit"/>matchCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? ( <LIKE> | ( <SIMILAR> <TO> ) ) <link linkend="prod90">commonValueExpression</link> ( <ESCAPE> <link linkend="prod68">charVal</link> | ( <LBRACE> <ESCAPE> <link linkend="prod68">charVal</link> <RBRACE> ) )?</para></entry></row>
+( <NOT> )? ( <LIKE> | ( <SIMILAR> <TO> ) ) <link linkend="prod87">commonValueExpression</link> ( <ESCAPE> <link linkend="prod65">charVal</link> | ( <LBRACE> <ESCAPE> <link linkend="prod65">charVal</link> <RBRACE> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="regexMatchCrit"/>regexMatchCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod90" xreflabel="regexMatchCrit"/>regexMatchCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <LIKE_REGEX> <link linkend="prod90">commonValueExpression</link></para></entry></row>
+( <NOT> )? <LIKE_REGEX> <link linkend="prod87">commonValueExpression</link></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="prod65" 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="prod88" 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="prod87">commonValueExpression</link> <AND> <link linkend="prod87">commonValueExpression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod95" xreflabel="isNullCrit"/>isNullCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod92" 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="prod94" xreflabel="setCrit"/>setCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="setCrit"/>setCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <IN> ( ( <link linkend="prod101">subqueryAndHint</link> ) | ( <LPAREN> <link linkend="prod90">commonValueExpression</link> ( <COMMA> <link linkend="prod90">commonValueExpression</link> )* <RPAREN> ) )</para></entry></row>
+( <NOT> )? <IN> ( ( <link linkend="prod98">subqueryAndHint</link> ) | ( <LPAREN> <link linkend="prod87">commonValueExpression</link> ( <COMMA> <link linkend="prod87">commonValueExpression</link> )* <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="existsCriteria"/>existsCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod95" xreflabel="existsCriteria"/>existsCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<EXISTS> <link linkend="prod101">subqueryAndHint</link></para></entry></row>
+<EXISTS> <link linkend="prod98">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="prod56" xreflabel="groupBy"/>groupBy</para></entry>
<entry align="left" valign="top"><para>::=
-<GROUP> <BY> <link linkend="prod47">expressionList</link></para></entry></row>
+<GROUP> <BY> <link linkend="prod44">expressionList</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="prod57" xreflabel="having"/>having</para></entry>
<entry align="left" valign="top"><para>::=
<HAVING> <link linkend="prod34">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="prod49" 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="prod99">sortSpecification</link> ( <COMMA> <link linkend="prod99">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="prod99" 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="prod100">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="prod100" xreflabel="sortKey"/>sortKey</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod24">expression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod104" xreflabel="intParam"/>intParam</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="intParam"/>intParam</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod83">intVal</link> | <QMARK> )</para></entry></row>
+( <link linkend="prod80">intVal</link> | <QMARK> )</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="prod50" xreflabel="limit"/>limit</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <LIMIT> <link linkend="prod104">intParam</link> ( <COMMA> <link linkend="prod104">intParam</link> )? ) | ( <OFFSET> <link linkend="prod104">intParam</link> ( <ROW> | <ROWS> ) ( <link linkend="prod105">fetchLimit</link> )? ) | ( <link linkend="prod105">fetchLimit</link> ) )</para></entry></row>
+( ( <LIMIT> <link linkend="prod101">intParam</link> ( <COMMA> <link linkend="prod101">intParam</link> )? ) | ( <OFFSET> <link linkend="prod101">intParam</link> ( <ROW> | <ROWS> ) ( <link linkend="prod102">fetchLimit</link> )? ) | ( <link linkend="prod102">fetchLimit</link> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod105" xreflabel="fetchLimit"/>fetchLimit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod102" xreflabel="fetchLimit"/>fetchLimit</para></entry>
<entry align="left" valign="top"><para>::=
-<FETCH> <link linkend="prod11">nonReserved</link> ( <link linkend="prod104">intParam</link> )? ( <ROW> | <ROWS> ) <ONLY></para></entry></row>
+<FETCH> <link linkend="prod11">nonReserved</link> ( <link linkend="prod101">intParam</link> )? ( <ROW> | <ROWS> ) <ONLY></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="prod41" 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>
@@ -806,75 +801,75 @@
<entry align="left" valign="top"><para>::=
<link linkend="prod34">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="prod87" xreflabel="commonValueExpression"/>commonValueExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod106">plusExpression</link> ( <CONCAT_OP> <link linkend="prod106">plusExpression</link> )* )</para></entry></row>
+( <link linkend="prod103">plusExpression</link> ( <CONCAT_OP> <link linkend="prod103">plusExpression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod106" xreflabel="plusExpression"/>plusExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="plusExpression"/>plusExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod107">timesExpression</link> ( <link linkend="prod108">plusOperator</link> <link linkend="prod107">timesExpression</link> )* )</para></entry></row>
+( <link linkend="prod104">timesExpression</link> ( <link linkend="prod105">plusOperator</link> <link linkend="prod104">timesExpression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod108" xreflabel="plusOperator"/>plusOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod105" 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="prod107" xreflabel="timesExpression"/>timesExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod104" xreflabel="timesExpression"/>timesExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod109">valueExpressionPrimary</link> ( <link linkend="prod110">timesOperator</link> <link linkend="prod109">valueExpressionPrimary</link> )* )</para></entry></row>
+( <link linkend="prod106">valueExpressionPrimary</link> ( <link linkend="prod107">timesOperator</link> <link linkend="prod106">valueExpressionPrimary</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod110" xreflabel="timesOperator"/>timesOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod107" 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="prod109" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod106" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <QMARK> | <POS_REF> | <link linkend="prod111">literal</link> | ( <LBRACE> <link linkend="prod11">nonReserved</link> <link linkend="prod112">function</link> <RBRACE> ) | ( <link linkend="prod67">textAgg</link> ( <link linkend="prod113">windowSpecification</link> )? ) | ( <link linkend="prod69">aggregateSymbol</link> ( <link linkend="prod113">windowSpecification</link> )? ) | ( <link linkend="prod69">aggregateSymbol</link> ( <link linkend="prod113">windowSpecification</link> )? ) | <link linkend="prod65">orderedAgg</link> ( <link linkend="prod113">windowSpecification</link> )? | ( <link linkend="prod69">aggregateSymbol</link> <link linkend="prod113">windowSpecification</link> ) | ( <link linkend="prod112">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="prod114">searchedCaseExpression</link> | <link linkend="prod115">caseExpression</link> )</para></entry></row>
+( <QMARK> | <POS_REF> | <link linkend="prod108">literal</link> | ( <LBRACE> <link linkend="prod11">nonReserved</link> <link linkend="prod109">function</link> <RBRACE> ) | ( <link linkend="prod64">textAgg</link> ( <link linkend="prod110">windowSpecification</link> )? ) | ( <link linkend="prod66">aggregateSymbol</link> ( <link linkend="prod110">windowSpecification</link> )? ) | ( <link linkend="prod66">aggregateSymbol</link> ( <link linkend="prod110">windowSpecification</link> )? ) | <link linkend="prod62">orderedAgg</link> ( <link linkend="prod110">windowSpecification</link> )? | ( <link linkend="prod66">aggregateSymbol</link> <link linkend="prod110">windowSpecification</link> ) | ( <link linkend="prod109">function</link> ) | ( <ID> ( <LSBRACE> <link linkend="prod80">intVal</link> <RSBRACE> )? ) | <link linkend="prod97">subquery</link> | ( <LPAREN> <link linkend="prod24">expression</link> <RPAREN> ( <LSBRACE> <link !
linkend="prod80">intVal</link> <RSBRACE> )? ) | <link linkend="prod111">searchedCaseExpression</link> | <link linkend="prod112">caseExpression</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod113" xreflabel="windowSpecification"/>windowSpecification</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod110" xreflabel="windowSpecification"/>windowSpecification</para></entry>
<entry align="left" valign="top"><para>::=
-<OVER> <LPAREN> ( <PARTITION> <BY> <link linkend="prod47">expressionList</link> )? ( <link linkend="prod52">orderby</link> )? <RPAREN></para></entry></row>
+<OVER> <LPAREN> ( <PARTITION> <BY> <link linkend="prod44">expressionList</link> )? ( <link linkend="prod49">orderby</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod115" xreflabel="caseExpression"/>caseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod112" xreflabel="caseExpression"/>caseExpression</para></entry>
<entry align="left" valign="top"><para>::=
<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="prod114" xreflabel="searchedCaseExpression"/>searchedCaseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod111" xreflabel="searchedCaseExpression"/>searchedCaseExpression</para></entry>
<entry align="left" valign="top"><para>::=
<CASE> ( <WHEN> <link linkend="prod34">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="prod112" xreflabel="function"/>function</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod109" xreflabel="function"/>function</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <CONVERT> <LPAREN> <link linkend="prod24">expression</link> <COMMA> <link linkend="prod37">dataType</link> <RPAREN> ) | ( <CAST> <LPAREN> <link linkend="prod24">expression</link> <AS> <link linkend="prod37">dataType</link> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod24">expression</link> <FROM> <link linkend="prod24">expression</link> ( <FOR> <link linkend="prod24">expression</link> )? <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> ( <YEAR> | <MONTH> | <DAY> | <HOUR> | <MINUTE> | <SECOND> ) <FROM> <link linkend="prod24">expression</link> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> ( ( ( ( <LEADING> | <TRAILING> | <BOTH> ) ( <link linkend="prod24">expression</link> )? ) | <link linkend="prod24">expression</link> ) <FROM> )? <link linkend!
="prod24">expression</link> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod24">expression</link> <COMMA> <link linkend="prod116">stringConstant</link> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod117">intervalType</link> <COMMA> <link linkend="prod24">expression</link> <COMMA> <link linkend="prod24">expression</link> <RPAREN> ) | <link linkend="prod118">queryString</link> | ( ( <LEFT> | <RIGHT> | <CHAR> | <USER> | <YEAR> | <MONTH> | <HOUR> | <MINUTE> | <SECOND> | <XMLCONCAT> | <XMLCOMMENT> ) <LPAREN> ( <link linkend="prod47">expressionList</link> )? <RPAREN> ) | ( ( <TRANSLATE> | <INSERT> ) <LPAREN> ( <link linkend="prod47">expressionList</link> )? <RPAREN> ) | <link linkend="prod119">xmlParse</link> | <link linkend="prod120">xmlElement</link> | ( &l!
t;XMLPI> <LPAREN> ( <ID> <link linkend="prod121!
">idExpr
ession</link> | <link linkend="prod121">idExpression</link> ) ( <COMMA> <link linkend="prod24">expression</link> )? <RPAREN> ) | <link linkend="prod122">xmlForest</link> | <link linkend="prod81">xmlSerialize</link> | <link linkend="prod84">xmlQuery</link> | ( <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod47">expressionList</link> )? <RPAREN> ) )</para></entry></row>
+( ( <CONVERT> <LPAREN> <link linkend="prod24">expression</link> <COMMA> <link linkend="prod35">dataType</link> <RPAREN> ) | ( <CAST> <LPAREN> <link linkend="prod24">expression</link> <AS> <link linkend="prod35">dataType</link> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod24">expression</link> ( ( <FROM> <link linkend="prod24">expression</link> ( <FOR> <link linkend="prod24">expression</link> )? ) | ( <COMMA> <link linkend="prod44">expressionList</link> ) ) <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> ( <YEAR> | <MONTH> | <DAY> | <HOUR> | <MINUTE> | <SECOND> ) <FROM> <link linkend="prod24">expression</link> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> ( ( ( ( <LEADING> | <TRAILING> | <BOTH> ) ( <link linkend="prod24">expression</link> )? ) |!
<link linkend="prod24">expression</link> ) <FROM> )? <link linkend="prod24">expression</link> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod24">expression</link> <COMMA> <link linkend="prod113">stringConstant</link> <RPAREN> ) | ( <link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod114">intervalType</link> <COMMA> <link linkend="prod24">expression</link> <COMMA> <link linkend="prod24">expression</link> <RPAREN> ) | <link linkend="prod115">queryString</link> | ( ( <LEFT> | <RIGHT> | <CHAR> | <USER> | <YEAR> | <MONTH> | <HOUR> | <MINUTE> | <SECOND> | <XMLCONCAT> | <XMLCOMMENT> ) <LPAREN> ( <link linkend="prod44">expressionList</link> )? <RPAREN> ) | ( ( <TRANSLATE> | <INSERT> ) <LPAREN> ( <link linkend="prod44">expressionList</link> )? <RPAREN> ) | <link linkend="pr!
od116">xmlParse</link> | <link linkend="prod117">xmlElement</l!
ink> | (
<XMLPI> <LPAREN> ( <ID> <link linkend="prod118">idExpression</link> | <link linkend="prod118">idExpression</link> ) ( <COMMA> <link linkend="prod24">expression</link> )? <RPAREN> ) | <link linkend="prod119">xmlForest</link> | <link linkend="prod78">xmlSerialize</link> | <link linkend="prod81">xmlQuery</link> | ( <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod44">expressionList</link> )? <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod116" xreflabel="stringConstant"/>stringConstant</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod113" 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="prod119" xreflabel="xmlParse"/>xmlParse</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod116" xreflabel="xmlParse"/>xmlParse</para></entry>
<entry align="left" valign="top"><para>::=
<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="prod118" xreflabel="queryString"/>queryString</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod115" xreflabel="queryString"/>queryString</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod11">nonReserved</link> <LPAREN> <link linkend="prod24">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="prod61">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod120" xreflabel="xmlElement"/>xmlElement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod117" 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="prod85">xmlNamespaces</link> )? ( <COMMA> <link linkend="prod123">xmlAttributes</link> )? ( <COMMA> <link linkend="prod24">expression</link> )* <RPAREN></para></entry></row>
+<XMLELEMENT> <LPAREN> ( <ID> <link linkend="prod2">id</link> | <link linkend="prod2">id</link> ) ( <COMMA> <link linkend="prod82">xmlNamespaces</link> )? ( <COMMA> <link linkend="prod120">xmlAttributes</link> )? ( <COMMA> <link linkend="prod24">expression</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod123" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod120" 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="prod61">derivedColumn</link> ( <COMMA> <link linkend="prod61">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod122" xreflabel="xmlForest"/>xmlForest</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod119" xreflabel="xmlForest"/>xmlForest</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLFOREST> <LPAREN> ( <link linkend="prod85">xmlNamespaces</link> <COMMA> )? <link linkend="prod64">derivedColumn</link> ( <COMMA> <link linkend="prod64">derivedColumn</link> )* <RPAREN></para></entry></row>
+<XMLFOREST> <LPAREN> ( <link linkend="prod82">xmlNamespaces</link> <COMMA> )? <link linkend="prod61">derivedColumn</link> ( <COMMA> <link linkend="prod61">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod82" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLNAMESPACES> <LPAREN> <link linkend="prod124">namespaceItem</link> ( <COMMA> <link linkend="prod124">namespaceItem</link> )* <RPAREN></para></entry></row>
+<XMLNAMESPACES> <LPAREN> <link linkend="prod121">namespaceItem</link> ( <COMMA> <link linkend="prod121">namespaceItem</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod124" xreflabel="namespaceItem"/>namespaceItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod121" 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>
@@ -886,7 +881,7 @@
<entry align="left" valign="top"><para>::=
( <DEFAULT_KEYWORD> <link linkend="prod1">stringVal</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod121" xreflabel="idExpression"/>idExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod118" xreflabel="idExpression"/>idExpression</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod2">id</link></para></entry></row>
<row>
@@ -894,17 +889,17 @@
<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="prod35" xreflabel="dataType"/>dataType</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod22">dataTypeString</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod117" xreflabel="intervalType"/>intervalType</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod114" 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="prod111" xreflabel="literal"/>literal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod108" 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>
+( <link linkend="prod1">stringVal</link> | <INTEGERVAL> | <FLOATVAL> | <DECIMALVAL> | <FALSE> | <TRUE> | <UNKNOWN> | <NULL> | ( ( <BOOLEANTYPE> | <TIMESTAMPTYPE> | <DATETYPE> | <TIMETYPE> ) <link linkend="prod1">stringVal</link> <RBRACE> ) )</para></entry></row>
</tbody>
</tgroup>
</informaltable>
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/sql_clauses.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/sql_clauses.xml 2012-01-12 18:43:23 UTC (rev 3792)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/sql_clauses.xml 2012-01-13 19:26:57 UTC (rev 3793)
@@ -104,9 +104,9 @@
</para>
<para>
Usage:
- <synopsis label="Usage">TEXTTABLE(expression COLUMNS <COLUMN>, ... [NO ROW DELIMITER] [DELIMITER char] [(QUOTE|ESCAPE) char]
- [HEADER [integer]] [SKIP integer] [SELECTOR string]) AS name</synopsis>
- <synopsis label="Usage">COLUMN := name datatype [WIDTH integer [NO TRIM]]</synopsis>
+ <synopsis label="Usage">TEXTTABLE(expression [SELECTOR string] COLUMNS <COLUMN>, ... [NO ROW DELIMITER] [DELIMITER char] [(QUOTE|ESCAPE) char]
+ [HEADER [integer]] [SKIP integer]) AS name</synopsis>
+ <synopsis label="Usage">COLUMN := name datatype [WIDTH integer [NO TRIM]] [SELECTOR string integer]</synopsis>
</para>
<itemizedlist>
<para>Parameters</para>
@@ -115,6 +115,13 @@
</para>
</listitem>
<listitem>
+ <para>SELECTOR specifies that delemited lines should only match if the line begins with the selector string followed by a delimiter.
+ The selector value is a valid column value. If a TEXTTABLE SELECTOR is specified, a SELECTOR may also be specified for column values. A column SELECTOR argument will
+ select the nearest preceeding text line with the given SELECTOR prefix and select the value at the given 1-based integer position (which includes the selector itself).
+ If no such text line or position with a given line exists, a null value will be produced.
+ </para>
+ </listitem>
+ <listitem>
<para>NO ROW DELIMITER indicates that fixed parsing should not assume the presense of newline row delimiters.
</para>
</listitem>
@@ -143,10 +150,6 @@
</para>
</listitem>
<listitem>
- <para>SELECTOR specifies that delemited lines should only match if the line begins with the selector string followed by a delimiter. The selector value is a valid column value.
- </para>
- </listitem>
- <listitem>
<para>WIDTH indicates the fixed-width length of a column in characters - not bytes. The CR NL newline value counts as a single character.
</para>
</listitem>
@@ -163,7 +166,7 @@
</para>
</listitem>
<listitem>
- <para>If width is specified, then fixed width parsing is used and ESCAPE, QUOTE, and HEADER should not be specified.
+ <para>If width is specified, then fixed width parsing is used and ESCAPE, QUOTE, SELECTOR, and HEADER should not be specified.
</para>
</listitem>
<listitem>
@@ -197,6 +200,10 @@
<para>As a nested table: <programlisting>SELECT x.* FROM t, TEXTTABLE(t.clobcolumn COLUMNS first string, second date SKIP 1) x</programlisting>
</para>
</listitem>
+ <listitem>
+ <para>Use of SELECTORs, returns 2 rows ['c', 'd', 'b'], ['c', 'f', 'b']: <programlisting>SELECT * FROM TEXTTABLE('a,b\nc,d\nc,f' SELECTOR 'c' COLUMNS col1 string, col2 string col3 string SELECTOR 'a' 2) x</programlisting>
+ </para>
+ </listitem>
</itemizedlist>
</section>
<section id="xmltable">
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalNode.java 2012-01-12 18:43:23 UTC (rev 3792)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalNode.java 2012-01-13 19:26:57 UTC (rev 3793)
@@ -208,7 +208,7 @@
this.children = newChildren;
}
- protected void addBatchRow(List row) {
+ protected void addBatchRow(List<?> row) {
if(this.getProcessingState().batchRows == null) {
this.getProcessingState().batchRows = new ArrayList(this.getProcessingState().batchSize / 4);
}
@@ -398,10 +398,10 @@
* @param elements List of elements
* @return Map of element to Integer, which is the index
*/
- public static Map createLookupMap(List elements) {
- Map lookupMap = new HashMap();
+ public static Map<Expression, Integer> createLookupMap(List<? extends Expression> elements) {
+ Map<Expression, Integer> lookupMap = new HashMap<Expression, Integer>();
for(int i=0; i<elements.size(); i++) {
- Object element = elements.get(i);
+ Expression element = elements.get(i);
lookupMap.put(element, i);
if (element instanceof AliasSymbol) {
lookupMap.put(((AliasSymbol)element).getSymbol(), i);
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/TextTableNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/TextTableNode.java 2012-01-12 18:43:23 UTC (rev 3792)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/TextTableNode.java 2012-01-13 19:26:57 UTC (rev 3793)
@@ -46,6 +46,7 @@
import org.teiid.query.processor.ProcessorDataManager;
import org.teiid.query.sql.lang.TextTable;
import org.teiid.query.sql.lang.TextTable.TextColumn;
+import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.util.CommandContext;
/**
@@ -65,6 +66,7 @@
private char delimiter;
private int lineWidth;
private int[] projectionIndexes;
+ private Map<String, List<String>> parentLines;
//per file state
private BufferedReader reader;
@@ -109,9 +111,17 @@
noQuote = table.isEscape();
quote = table.getQuote();
}
+ for (TextColumn column : table.getColumns()) {
+ if (column.getSelector() != null) {
+ if (parentLines == null) {
+ parentLines = new HashMap<String, List<String>>();
+ }
+ parentLines.put(column.getSelector(), null);
+ }
+ }
lineWidth = table.getColumns().size() * DataTypeManager.MAX_STRING_LENGTH;
}
- Map elementMap = createLookupMap(table.getProjectedSymbols());
+ Map<Expression, Integer> elementMap = createLookupMap(table.getProjectedSymbols());
this.projectionIndexes = getProjectionIndexes(elementMap, getElements());
}
@@ -135,6 +145,11 @@
this.textLine = 0;
this.cr = false;
this.eof = false;
+ if (this.parentLines != null) {
+ for (Map.Entry<String, List<String>> entry : this.parentLines.entrySet()) {
+ entry.setValue(null);
+ }
+ }
}
public void setTable(TextTable table) {
@@ -170,30 +185,49 @@
break;
}
- if (table.getSelector() != null && !line.startsWith(table.getSelector())) {
- continue;
+ String parentSelector = null;
+ if (table.getSelector() != null && !line.regionMatches(0, table.getSelector(), 0, table.getSelector().length())) {
+ if (parentLines == null) {
+ continue; //doesn't match any selector
+ }
+ parentSelector = line.substring(0, table.getSelector().length());
+
+ if (!parentLines.containsKey(parentSelector)) {
+ continue; //doesn't match any selector
+ }
}
List<String> vals = parseLine(line);
+ if (parentSelector != null) {
+ this.parentLines.put(parentSelector, vals);
+ continue;
+ } else if (table.getSelector() != null && !table.getSelector().equals(vals.get(0))) {
+ continue;
+ }
+
List<Object> tuple = new ArrayList<Object>(projectionIndexes.length);
for (int output : projectionIndexes) {
TextColumn col = table.getColumns().get(output);
String val = null;
int index = output;
- if (nameIndexes != null) {
+
+ if (col.getSelector() != null) {
+ vals = this.parentLines.get(col.getSelector());
+ index = col.getPosition() - 1;
+ } else if (nameIndexes != null) {
index = nameIndexes.get(col.getName());
}
- if (index >= vals.size()) {
+ if (vals == null || index >= vals.size()) {
//throw new TeiidProcessingException(QueryPlugin.Util.getString("TextTableNode.no_value", col.getName(), textLine, systemId)); //$NON-NLS-1$
tuple.add(null);
- } else {
- val = vals.get(index);
- try {
- tuple.add(DataTypeManager.transformValue(val, table.getColumns().get(output).getSymbol().getType()));
- } catch (TransformationException e) {
- throw new TeiidProcessingException(e, QueryPlugin.Util.getString("TextTableNode.conversion_error", col.getName(), textLine, systemId)); //$NON-NLS-1$
- }
+ continue;
+ }
+ val = vals.get(index);
+ try {
+ tuple.add(DataTypeManager.transformValue(val, table.getColumns().get(output).getSymbol().getType()));
+ } catch (TransformationException e) {
+ throw new TeiidProcessingException(e, QueryPlugin.Util.getString("TextTableNode.conversion_error", col.getName(), textLine, systemId)); //$NON-NLS-1$
}
}
addBatchRow(tuple);
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/TextTable.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/TextTable.java 2012-01-12 18:43:23 UTC (rev 3792)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/TextTable.java 2012-01-13 19:26:57 UTC (rev 3793)
@@ -37,6 +37,8 @@
public static class TextColumn extends ProjectedColumn {
private Integer width;
private boolean noTrim;
+ private String selector;
+ private Integer position;
public TextColumn(String name, String type, Integer width, boolean noTrim) {
super(name, type);
@@ -74,6 +76,8 @@
}
TextColumn other = (TextColumn)obj;
return EquivalenceUtil.areEqual(width, other.width)
+ && EquivalenceUtil.areEqual(selector, other.selector)
+ && EquivalenceUtil.areEqual(position, other.position)
&& noTrim == other.noTrim;
}
@@ -82,9 +86,28 @@
TextColumn clone = new TextColumn();
clone.width = this.width;
clone.noTrim = this.noTrim;
+ clone.selector = this.selector;
+ clone.position = this.position;
this.copyTo(clone);
return clone;
}
+
+ public String getSelector() {
+ return selector;
+ }
+
+ public void setSelector(String selector) {
+ this.selector = selector;
+ }
+
+ public Integer getPosition() {
+ return position;
+ }
+
+ public void setPosition(Integer position) {
+ this.position = position;
+ }
+
}
private Expression file;
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 2012-01-12 18:43:23 UTC (rev 3792)
+++ trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java 2012-01-13 19:26:57 UTC (rev 3793)
@@ -1667,6 +1667,12 @@
addHintComment(obj);
append("TEXTTABLE("); //$NON-NLS-1$
visitNode(obj.getFile());
+ if (obj.getSelector() != null) {
+ append(SPACE);
+ append(NonReserved.SELECTOR);
+ append(SPACE);
+ append(escapeSinglePart(obj.getSelector()));
+ }
append(SPACE);
append(NonReserved.COLUMNS);
@@ -1688,6 +1694,14 @@
append(SPACE);
append(NonReserved.TRIM);
}
+ if (col.getSelector() != null) {
+ append(SPACE);
+ append(NonReserved.SELECTOR);
+ append(SPACE);
+ append(escapeSinglePart(col.getSelector()));
+ append(SPACE);
+ append(col.getPosition());
+ }
if (cols.hasNext()) {
append(","); //$NON-NLS-1$
}
@@ -1730,12 +1744,6 @@
append(SPACE);
append(obj.getSkip());
}
- if (obj.getSelector() != null) {
- append(SPACE);
- append(NonReserved.SELECTOR);
- append(SPACE);
- append(escapeSinglePart(obj.getSelector()));
- }
append(")");//$NON-NLS-1$
append(SPACE);
append(AS);
Modified: trunk/engine/src/main/java/org/teiid/query/tempdata/TempTable.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/tempdata/TempTable.java 2012-01-12 18:43:23 UTC (rev 3792)
+++ trunk/engine/src/main/java/org/teiid/query/tempdata/TempTable.java 2012-01-13 19:26:57 UTC (rev 3793)
@@ -301,7 +301,7 @@
private int keyBatchSize;
private int leafBatchSize;
- private Map<ElementSymbol, Integer> columnMap;
+ private Map<Expression, Integer> columnMap;
private List<Integer> notNull = new LinkedList<Integer>();
private Map<Integer, AtomicInteger> sequences;
@@ -803,7 +803,7 @@
return tid.getID() + " (" + columns + ")\n"; //$NON-NLS-1$ //$NON-NLS-2$
}
- Map<ElementSymbol, Integer> getColumnMap() {
+ Map<Expression, Integer> getColumnMap() {
return this.columnMap;
}
Modified: trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2012-01-12 18:43:23 UTC (rev 3792)
+++ trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2012-01-13 19:26:57 UTC (rev 3793)
@@ -1193,6 +1193,7 @@
boolean widthSet = false;
Character delimiter = null;
Character quote = null;
+ boolean usingSelector = false;
for (TextTable.TextColumn column : obj.getColumns()) {
if (column.getWidth() != null) {
widthSet = true;
@@ -1202,9 +1203,18 @@
} else if (widthSet) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.text_table_invalid_width"), obj); //$NON-NLS-1$
}
+ if (column.getSelector() != null) {
+ usingSelector = true;
+ if (obj.getSelector() != null && obj.getSelector().equals(column.getSelector())) {
+ handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.text_table_selector_required"), obj); //$NON-NLS-1$
+ }
+ }
+ if (column.getPosition() != null && column.getPosition() < 0) {
+ handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.text_table_negative"), obj); //$NON-NLS-1$
+ }
}
if (widthSet) {
- if (obj.getDelimiter() != null || obj.getHeader() != null || obj.getQuote() != null || obj.getSelector() != null) {
+ if (obj.getDelimiter() != null || obj.getHeader() != null || obj.getQuote() != null || obj.getSelector() != null || usingSelector) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.text_table_width"), obj); //$NON-NLS-1$
}
} else {
@@ -1221,6 +1231,9 @@
if (obj.getSkip() != null && obj.getSkip() < 0) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.text_table_negative"), obj); //$NON-NLS-1$
}
+ if (usingSelector && obj.getSelector() == null) {
+ handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.text_table_selector_required"), obj); //$NON-NLS-1$
+ }
}
private void validateTextOptions(LanguageObject obj, Character delimiter,
Modified: trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
===================================================================
--- trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2012-01-12 18:43:23 UTC (rev 3792)
+++ trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2012-01-13 19:26:57 UTC (rev 3793)
@@ -2170,6 +2170,10 @@
}
{
<ID> <LPAREN> file = expression(info)
+ [
+ LOOKAHEAD(<ID>, { "selector".equalsIgnoreCase(getToken(1).image) }) <ID>
+ selector = stringVal()
+ ]
nonReserved("COLUMNS")
column = textColumn(info)
{
@@ -2212,10 +2216,6 @@
LOOKAHEAD(<ID>, { "skip".equalsIgnoreCase(getToken(1).image) }) <ID>
skip = intVal()
]
- [
- LOOKAHEAD(<ID>, { "selector".equalsIgnoreCase(getToken(1).image) }) <ID>
- selector = stringVal()
- ]
<RPAREN>
[<AS>] aliasID=id()
{
@@ -2240,6 +2240,8 @@
Constant datatype = null;
Integer width = null;
boolean noTrim = false;
+ String selector = null;
+ Integer position = null;
}
{
name = id()
@@ -2254,8 +2256,16 @@
}
]
]
+ [
+ LOOKAHEAD(<ID>, { "selector".equalsIgnoreCase(getToken(1).image) }) <ID>
+ selector = stringVal()
+ position = intVal()
+ ]
{
- return new TextTable.TextColumn(validateElementName(name), (String)datatype.getValue(), width, noTrim);
+ TextTable.TextColumn result = new TextTable.TextColumn(validateElementName(name), (String)datatype.getValue(), width, noTrim);
+ result.setSelector(selector);
+ result.setPosition(position);
+ return result;
}
}
Modified: trunk/engine/src/main/resources/org/teiid/query/i18n.properties
===================================================================
--- trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2012-01-12 18:43:23 UTC (rev 3792)
+++ trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2012-01-13 19:26:57 UTC (rev 3793)
@@ -710,7 +710,8 @@
ValidationVisitor.orderby_expression_xml=XML queries cannot order by an expression.
ValidationVisitor.text_table_invalid_width=For a fixed width text table, all columns must have width set.
ValidationVisitor.text_table_width=Fixed width text tables should not have DELIMITER, QUOTE, ESCAPE, SELECTOR or HEADER specified.
-ValidationVisitor.text_table_negative=Text table WIDTH, HEADER, or SKIP values must not be negative.
+ValidationVisitor.text_table_selector_required=The use of a column SELECTOR requires the use of a TEXTTABLE SELECTOR of a different value.
+ValidationVisitor.text_table_negative=Text table WIDTH, HEADER, SELECTOR position, or SKIP values must not be negative.
ValidationVisitor.text_table_delimiter=Text DELIMITER cannot be the same as the QUOTE or ESCAPE characters.
ValidationVisitor.text_table_newline=Text DELIMITER, QUOTE, and ESCAPE characters cannot be the new line character.
ValidationVisitor.xml_namespaces=At most only one NO DEFAULT or DEFAULT namespace may be specified.
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestTextTable.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestTextTable.java 2012-01-12 18:43:23 UTC (rev 3792)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestTextTable.java 2012-01-13 19:26:57 UTC (rev 3793)
@@ -317,7 +317,7 @@
}
@Test public void testTextTableSelector() throws Exception {
- String sql = "select x.* from (select * from pm1.g1) y, texttable(e1 || '\n' || e2 || '\n' || e3 COLUMNS x string SELECTOR 'c') x";
+ String sql = "select x.* from (select * from pm1.g1) y, texttable(e1 || '\n' || e2 || '\n' || e3 SELECTOR 'c' COLUMNS x string) x";
List[] expected = new List[] {
Arrays.asList("c"),
@@ -326,6 +326,26 @@
process(sql, expected);
}
+ @Test public void testTextTableSelector1() throws Exception {
+ String sql = "select x.* from texttable('cc,bb' SELECTOR 'c' COLUMNS x string) x";
+
+ List[] expected = new List[] {
+ };
+
+ process(sql, expected);
+ }
+
+ @Test public void testTextTableSelector2() throws Exception {
+ String sql = "select x.* from texttable('A,10-dec-2011,12345,3322,3000,222\nB,1,123,Sprockets Black,30,50,1500\nB,2,333,Sprockets Blue,300,5,1500' SELECTOR 'B' COLUMNS x string, y integer, z string SELECTOR 'A' 2) x";
+
+ List[] expected = new List[] {
+ Arrays.asList("B", 1, "10-dec-2011"),
+ Arrays.asList("B", 2, "10-dec-2011"),
+ };
+
+ process(sql, expected);
+ }
+
public static void process(String sql, List[] expectedResults) throws Exception {
FakeDataManager dataManager = new FakeDataManager();
sampleData1(dataManager);
12 years, 11 months
teiid SVN: r3792 - in trunk/build/kits/jboss-as7/docs/teiid/datasources: derby and 11 other directories.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2012-01-12 13:43:23 -0500 (Thu, 12 Jan 2012)
New Revision: 3792
Added:
trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/create-db2-ds.cli
trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/create-derby-ds.cli
trunk/build/kits/jboss-as7/docs/teiid/datasources/file/create-ds.cli
trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/create-ingres-ds.cli
trunk/build/kits/jboss-as7/docs/teiid/datasources/intersystems-cache/create-intersys-ds.cli
trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/create-mysql-ds.cli
trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/create-oracle-ds.cli
trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/create-postgresql-ds.cli
trunk/build/kits/jboss-as7/docs/teiid/datasources/salesforce/create-salesforce-ds.cli
trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/create-jtds-ds.cli
trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/create-native-ds.cli
trunk/build/kits/jboss-as7/docs/teiid/datasources/teiid/create-teiid-ds.cli
trunk/build/kits/jboss-as7/docs/teiid/datasources/web-service/create-ws-ds.cli
Modified:
trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/db2-xa.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/db2.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/readme.txt
trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/derby-xa.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/derby.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/readme.txt
trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/ingres-xa.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/ingres.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/readme.txt
trunk/build/kits/jboss-as7/docs/teiid/datasources/intersystems-cache/intersystems-cache.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/mysql-xa.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/mysql.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/readme.txt
trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/oracle-xa.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/oracle.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/readme.txt
trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/postgresql-xa.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/postgresql.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/readme.txt
trunk/build/kits/jboss-as7/docs/teiid/datasources/salesforce/readme.txt
trunk/build/kits/jboss-as7/docs/teiid/datasources/salesforce/salesforce.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/readme.txt
trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/sqlserver-xa.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/sqlserver.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/readme.txt
trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/sqlserver-xa.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/sqlserver.xml
trunk/build/kits/jboss-as7/docs/teiid/datasources/teiid/readme.txt
trunk/build/kits/jboss-as7/docs/teiid/datasources/web-service/ws.xml
Log:
TEIID-1720: adding the CLI scripts to add data sources
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/create-db2-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/create-db2-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/create-db2-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,14 @@
+# note that driver-name could be driver's module name if you went module approach.
+/subsystem=datasources/data-source=db2DS:add(jndi-name=java:/db2DS, driver-name=db2jcc4.jar, driver-class=com.ibm.db2.jcc.DB2Driver, connection-url=jdbc:db2://{host}:{port}/{database_name},user-name={user}, password={password})
+
+# XA Data source
+#batch
+#/subsystem=datasources/xa-data-source=db2DS:add(jndi-name=java:/db2DS, driver-name=db2jcc4.jar, xa-datasource-class=com.ibm.db2.jcc.DB2XADataSource, user-name={user}, password={password})
+#/subsystem=datasources/xa-data-source=db2DS/xa-datasource-properties=DatabaseName:add(value={database_name})
+#/subsystem=datasources/xa-data-source=db2DS/xa-datasource-properties=PortNumber:add(value=50000)
+#/subsystem=datasources/xa-data-source=db2DS/xa-datasource-properties=ServerName:add(value={host})
+#/subsystem=datasources/xa-data-source=db2DS:enable
+#run-batch
+
+
+## If you are working in a clustered environment, prepend "/profile=ha" to all the above commands that start with "/subsystem=.."
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/db2-xa.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/db2-xa.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/db2-xa.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -3,11 +3,11 @@
<datasources>
<xa-datasource jndi-name="java:/db2DS" pool-name="db2DS" enabled="true" use-java-context="true" use-ccm="true">
- <xa-datasource-property name="PortNumber">3306</xa-datasource-property>
+ <xa-datasource-property name="PortNumber">50000</xa-datasource-property>
<xa-datasource-property name="DatabaseName">{db-name}</xa-datasource-property>
<xa-datasource-property name="ServerName">{host}</xa-datasource-property>
- <driver>db2</driver>
+ <driver>db2jcc4.jar</driver>
<!--
<new-connection-sql>select 1/new-connection-sql>
@@ -39,7 +39,7 @@
-->
</xa-datasource>
<drivers>
- <driver name="db2" module="com.ibm.db2">
+ <driver name="db2jcc4.jar" module="com.ibm.db2">
<driver-class>com.ibm.db2.jcc.DB2Driver</driver-class>
<xa-datasource-class>com.ibm.db2.jcc.DB2XADataSource</xa-datasource-class>
</driver>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/db2.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/db2.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/db2.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -2,8 +2,8 @@
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
<datasources>
<datasource jndi-name="java:/db2DS" pool-name="db2DS">
- <connection-url>jdbc:db2://{host}:{port}/{database_name}</connection-url>
- <driver>db2</driver>
+ <connection-url>jdbc:db2://{host}:50000/{database_name}</connection-url>
+ <driver>db2jcc4.jar</driver>
<pool>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
@@ -15,7 +15,7 @@
</security>
</datasource>
<drivers>
- <driver name="db2" module="com.ibm.db2">
+ <driver name="db2jcc4.jar" module="com.ibm.db2">
<driver-class>com.ibm.db2.jcc.DB2Driver</driver-class>
<xa-datasource-class>com.ibm.db2.jcc.DB2XADataSource</xa-datasource-class>
</driver>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/readme.txt
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/readme.txt 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/db2/readme.txt 2012-01-12 18:43:23 UTC (rev 3792)
@@ -6,11 +6,7 @@
Option 1: use the JBoss CLI tool, and deploy the "db2jcc4.jar" or later jar by issuing the command
deploy db2jcc4.jar
- Note: when you use CLI based deployment, the <driver> element in the <datasources> xml fragment, must
- be the name of the jar file deployed, and no need for adding <drivers> element in standalone-teiid.xml
- or domain-teiid.xml file
-
- Option 2:
+ Option 2:(recommended)
1) Stop the server if it is running.
2) Overlay the "modules" directory on the "<jboss-as>/modules" directory
@@ -25,7 +21,7 @@
or "db2-xa.xml" file under the "datasources" subsystem. You may have to edit contents according
to where your db2 server is located and credentials you need to use to access it.
- Option 2: Take a look at create-ds.cli script, and modify and execute using JBoss CLI tool as below
+ Option 2: Take a look at create-db2-ds.cli script, and *modify* and execute using JBoss CLI tool as below
- ./Jboss-admin.sh --file create-ds.cli
+ ./Jboss-admin.sh --file create-db2-ds.cli
\ No newline at end of file
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/create-derby-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/create-derby-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/create-derby-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,14 @@
+# note that driver-name could be driver's module name if you went module approach.
+/subsystem=datasources/data-source=derbyDS:add(jndi-name=java:/derbyDS, driver-name=derbyclient.jar, driver-class=org.apache.derby.jdbc.ClientDriver, connection-url=jdbc:derby://{host}:1527/{db-name},user-name={user}, password={password})
+
+# XA Data source
+#batch
+#/subsystem=datasources/xa-data-source=derbyDS:add(jndi-name=java:/derbyDS, driver-name=derbyclient.jar, xa-datasource-class=org.apache.derby.jdbc.ClientXADataSource, user-name={user}, password={password})
+#/subsystem=datasources/xa-data-source=derbyDS/xa-datasource-properties=DatabaseName:add(value={database_name})
+#/subsystem=datasources/xa-data-source=derbyDS/xa-datasource-properties=PortNumber:add(value=1527)
+#/subsystem=datasources/xa-data-source=derbyDS/xa-datasource-properties=ServerName:add(value={host})
+#/subsystem=datasources/xa-data-source=derbyDS:enable
+#run-batch
+
+
+## If you are working in a clustered environment, prepend "/profile=ha" to all the above commands that start with "/subsystem=.."
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/derby-xa.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/derby-xa.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/derby-xa.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -7,7 +7,7 @@
<xa-datasource-property name="DatabaseName">{db-name}</xa-datasource-property>
<xa-datasource-property name="ServerName">{host}</xa-datasource-property>
- <driver>derby</driver>
+ <driver>derbyclient.jar</driver>
<!--
<new-connection-sql>select 1/new-connection-sql>
@@ -39,7 +39,7 @@
-->
</xa-datasource>
<drivers>
- <driver name="derby" module="org.apache.derby">
+ <driver name="derbyclient.jar" module="org.apache.derby">
<driver-class>org.apache.derby.jdbc.ClientDriver</driver-class>
<xa-datasource-class>org.apache.derby.jdbc.ClientXADataSource</xa-datasource-class>
</driver>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/derby.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/derby.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/derby.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -3,7 +3,7 @@
<datasources>
<datasource jndi-name="java:/derbyDS" pool-name="derbyDS">
<connection-url>jdbc:derby://{host}:1527/{db-name}</connection-url>
- <driver>derby</driver>
+ <driver>derbyclient.jar</driver>
<pool>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
@@ -15,7 +15,7 @@
</security>
</datasource>
<drivers>
- <driver name="derby" module="org.apache.derby">
+ <driver name="derbyclient.jar" module="org.apache.derby">
<driver-class>org.apache.derby.jdbc.ClientDriver</driver-class>
<xa-datasource-class>org.apache.derby.jdbc.ClientXADataSource</xa-datasource-class>
</driver>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/readme.txt
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/readme.txt 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/derby/readme.txt 2012-01-12 18:43:23 UTC (rev 3792)
@@ -6,11 +6,7 @@
Option 1: use the JBoss CLI tool, and deploy the "derbyclient.jar" or later jar by issuing the command
deploy derbyclient.jar
- Note: when you use CLI based deployment, the <driver> element in the <datasources> xml fragment, must
- be the name of the jar file deployed, and no need for adding <drivers> element in standalone-teiid.xml
- or domain-teiid.xml file
-
- Option 2:
+ Option 2: (recommended)
1) Stop the server if it is running.
2) Overlay the "modules" directory on the "<jboss-as>/modules" directory
@@ -25,7 +21,7 @@
or "derby-xa.xml" file under the "datasources" subsystem. You may have to edit contents according
to where your derby server is located and credentials you need to use to access it.
- Option 2: Take a look at create-ds.cli script, and modify and execute using JBoss CLI tool as below
+ Option 2: Take a look at create-derby-ds.cli script, and modify and execute using JBoss CLI tool as below
- ./Jboss-admin.sh --file create-ds.cli
+ ./Jboss-admin.sh --file create-derby-ds.cli
\ No newline at end of file
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/file/create-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/file/create-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/file/create-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,5 @@
+/subsystem=resource-adapters/resource-adapter=fileDS:add(archive=teiid-connector-file.rar, transaction-support=NoTransaction)
+/subsystem=resource-adapters/resource-adapter=fileDS/connection-definitions=fileDS:add(jndi-name=java:/fileDS, class-name=org.teiid.resource.adapter.file.FileManagedConnectionFactory, enabled=true, use-java-context=true)
+/subsystem=resource-adapters/resource-adapter=fileDS/connection-definitions=fileDS/config-properties=Parentdirectory:add(value=/home/rareddy/testing/)
+/subsystem=resource-adapters/resource-adapter=fileDS/connection-definitions=fileDS/config-properties=AllowParentPaths:add(value=true)
+/subsystem=resource-adapters/resource-adapter=fileDS/connection-definitions=fileDS:enable
\ No newline at end of file
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/create-ingres-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/create-ingres-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/create-ingres-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,14 @@
+# note that driver-name could be driver's module name if you went module approach.
+/subsystem=datasources/data-source=ingresDS:add(jndi-name=java:/ingresDS, driver-name=iijdbc.jar, driver-class=com.ingres.jdbc.IngresDriver, connection-url=jdbc:ingres://{host}:{port:21071}/{database_name}, user-name={user}, password={password})
+
+# XA Data source
+#batch
+#/subsystem=datasources/xa-data-source=ingresDS:add(jndi-name=java:/ingresDS, driver-name=iijdbc.jar, xa-datasource-class=com.ingres.jdbc.IngresXADataSource, user-name={user}, password={password})
+#/subsystem=datasources/xa-data-source=ingresDS/xa-datasource-properties=DatabaseName:add(value={database_name})
+#/subsystem=datasources/xa-data-source=ingresDS/xa-datasource-properties=PortNumber:add(value=21071)
+#/subsystem=datasources/xa-data-source=ingresDS/xa-datasource-properties=ServerName:add(value={host})
+#/subsystem=datasources/xa-data-source=ingresDS:enable
+#run-batch
+
+
+## If you are working in a clustered environment, prepend "/profile=ha" to all the above commands that start with "/subsystem=.."
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/ingres-xa.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/ingres-xa.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/ingres-xa.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -9,7 +9,7 @@
<xa-datasource-property name="timeZone">GMT</xa-datasource-property>
- <driver>ingres</driver>
+ <driver>iijdbc.jar</driver>
<!--
<new-connection-sql>select 1/new-connection-sql>
@@ -41,7 +41,7 @@
-->
</xa-datasource>
<drivers>
- <driver name="ingres" module="com.ingres">
+ <driver name="iijdbc.jar" module="com.ingres">
<driver-class>com.ingres.jdbc.IngresDriver</driver-class>
<xa-datasource-class>com.ingres.jdbc.IngresXADataSource</xa-datasource-class>
</driver>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/ingres.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/ingres.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/ingres.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -3,7 +3,7 @@
<datasources>
<datasource jndi-name="java:/ingresDS" pool-name="ingresDS">
<connection-url>jdbc:ingres://{host}:{port:21071}/{database_name}</connection-url>
- <driver>ingres</driver>
+ <driver>iijdbc.jar</driver>
<pool>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
@@ -15,7 +15,7 @@
</security>
</datasource>
<drivers>
- <driver name="ingres" module="com.ingres">
+ <driver name="iijdbc.jar" module="com.ingres">
<driver-class>com.ingres.jdbc.IngresDriver</driver-class>
<xa-datasource-class>com.ingres.jdbc.IngresXADataSource</xa-datasource-class>
</driver>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/readme.txt
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/readme.txt 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/ingres/readme.txt 2012-01-12 18:43:23 UTC (rev 3792)
@@ -3,14 +3,11 @@
Step 1: Deploying the JDBC Driver
- Option 1: use the JBoss CLI tool, and deploy the "iijdbc.jar " or later jar by issuing the command
+ Option 1: use the JBoss CLI tool, and deploy the "iijdbc.jar" or later jar by issuing the command
deploy iijdbc.jar
-
- Note: when you use CLI based deployment, the <driver> element in the <datasources> xml fragment, must
- be the name of the jar file deployed, and no need for adding <drivers> element in standalone-teiid.xml
- or domain-teiid.xml file
+
- Option 2:
+ Option 2: (Recommended)
1) Stop the server if it is running.
2) Overlay the "modules" directory on the "<jboss-as>/modules" directory
@@ -25,7 +22,7 @@
or "ingres-xa.xml" file under the "datasources" subsystem. You may have to edit contents according
to where your ingres server is located and credentials you need to use to access it.
- Option 2: Take a look at create-ds.cli script, and modify and execute using JBoss CLI tool as below
+ Option 2: Take a look at create-ingres-ds.cli script, and modify and execute using JBoss CLI tool as below
- ./Jboss-admin.sh --file create-ds.cli
+ ./Jboss-admin.sh --file create-ingres-ds.cli
\ No newline at end of file
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/intersystems-cache/create-intersys-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/intersystems-cache/create-intersys-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/intersystems-cache/create-intersys-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,6 @@
+# note that driver-name could be driver's module name if you went module approach.
+/subsystem=datasources/data-source=cacheDS:add(jndi-name=java:/cacheDS, driver-name=CacheDB.jar, driver-class=com.intersys.jdbc.CacheDriver, connection-url=jdbc:Cache://{host}:1972/{database}, user-name={user}, password={password})
+
+# No XA Data source Available
+
+# If you are working in a clustered environment, prepend "/profile=ha" to all the above commands that start with "/subsystem=.."
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/intersystems-cache/intersystems-cache.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/intersystems-cache/intersystems-cache.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/intersystems-cache/intersystems-cache.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -3,7 +3,7 @@
<datasources>
<datasource jndi-name="java:/cacheDS" pool-name="cacheDS">
<connection-url>jdbc:Cache://{host}:1972/{database}</connection-url>
- <driver>mysql</driver>
+ <driver>CacheDB.jar</driver>
<pool>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
@@ -15,7 +15,7 @@
</security>
</datasource>
<drivers>
- <driver name="intersys" module="com.intersys">
+ <driver name="CacheDB.jar" module="com.intersys">
<driver-class>com.intersys.jdbc.CacheDriver</driver-class>
</driver>
</drivers>
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/create-mysql-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/create-mysql-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/create-mysql-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,14 @@
+# note that driver-name could be driver's module name if you went module approach.
+/subsystem=datasources/data-source=mysqlDS:add(jndi-name=java:/mysqlDS, driver-name=mysql-connector-java-5.1.5.jar, driver-class=com.mysql.jdbc.Driver, connection-url=jdbc:mysql://{host}:3306/{database}, user-name={user}, password={password})
+
+# XA Data source
+#batch
+#/subsystem=datasources/xa-data-source=mysqlDS:add(jndi-name=java:/mysqlDS, driver-name=mysql-connector-java-5.1.5.jar, xa-datasource-class=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource, user-name={user}, password={password})
+#/subsystem=datasources/xa-data-source=mysqlDS/xa-datasource-properties=DatabaseName:add(value={database_name})
+#/subsystem=datasources/xa-data-source=mysqlDS/xa-datasource-properties=PortNumber:add(value=3306)
+#/subsystem=datasources/xa-data-source=mysqlDS/xa-datasource-properties=ServerName:add(value={host})
+#/subsystem=datasources/xa-data-source=mysqlDS:enable
+#run-batch
+
+
+## If you are working in a clustered environment, prepend "/profile=ha" to all the above commands that start with "/subsystem=.."
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/mysql-xa.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/mysql-xa.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/mysql-xa.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -7,7 +7,7 @@
<xa-datasource-property name="DatabaseName">{db-name}</xa-datasource-property>
<xa-datasource-property name="ServerName">{host}</xa-datasource-property>
- <driver>mysql</driver>
+ <driver>mysql-connector-java-5.1.5.jar</driver>
<!--
<new-connection-sql>select 1/new-connection-sql>
@@ -39,7 +39,7 @@
-->
</xa-datasource>
<drivers>
- <driver name="mysql" module="com.mysql">
+ <driver name="mysql-connector-java-5.1.5.jar" module="com.mysql">
<driver-class>com.mysql.jdbc.Driver</driver-class>
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/mysql.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/mysql.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/mysql.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -3,7 +3,7 @@
<datasources>
<datasource jndi-name="java:/mysql-ds" pool-name="mysqlDS">
<connection-url>jdbc:mysql://{host}:3306/{database}</connection-url>
- <driver>mysql</driver>
+ <driver>mysql-connector-java-5.1.5.jar</driver>
<pool>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
@@ -15,7 +15,7 @@
</security>
</datasource>
<drivers>
- <driver name="mysql" module="com.mysql">
+ <driver name="mysql-connector-java-5.1.5.jar" module="com.mysql">
<driver-class>com.mysql.jdbc.Driver</driver-class>
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/readme.txt
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/readme.txt 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/mysql/readme.txt 2012-01-12 18:43:23 UTC (rev 3792)
@@ -6,11 +6,7 @@
Option 1: use the JBoss CLI tool, and deploy the "mysql-connector-java-5.1.5.jar" or later jar by issuing the command
deploy mysql-connector-java-5.1.5.jar
- Note: when you use CLI based deployment, the <driver> element in the <datasources> xml fragment, must
- be the name of the jar file deployed, and no need for adding <drivers> element in standalone-teiid.xml
- or domain-teiid.xml file
-
- Option 2:
+ Option 2:(recommended)
1) Stop the server if it is running.
2) Overlay the "modules" directory on the "<jboss-as>/modules" directory
@@ -27,7 +23,7 @@
Option 2: Take a look at create-ds.cli script, and modify and execute using JBoss CLI tool as below
- ./Jboss-admin.sh --file create-ds.cli
+ ./Jboss-admin.sh --file create-mysql-ds.cli
**************************************************************************************************************
NOTE: MySQL JDBC driver does not include the Driver file name as the service loader mechanism as of
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/create-oracle-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/create-oracle-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/create-oracle-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,12 @@
+# note that driver-name could be driver's module name if you went module approach.
+/subsystem=datasources/data-source=OracleDS:add(jndi-name=java:/OracleDS, driver-name=ojdbc6.jar, driver-class=oracle.jdbc.OracleDriver, connection-url=jdbc:oracle:thin:{host}:1521:{db-name},user-name={user}, password={password})
+
+# XA Data source
+#batch
+#/subsystem=datasources/xa-data-source=OracleDS:add(jndi-name=java:/OracleDS, driver-name=ojdbc6.jar, xa-datasource-class=oracle.jdbc.xa.client.OracleXADataSource, user-name={user}, password={password})
+#/subsystem=datasources/xa-data-source=OracleDS/xa-datasource-properties=URL:add(value=jdbc:oracle:thin:{host}:1521:{database_name})
+#/subsystem=datasources/xa-data-source=OracleDS:enable
+#run-batch
+
+
+## If you are working in a clustered environment, prepend "/profile=ha" to all the above commands that start with "/subsystem=.."
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/oracle-xa.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/oracle-xa.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/oracle-xa.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -3,12 +3,9 @@
<datasources>
<xa-datasource jndi-name="java:/OracleDS" pool-name="OracleDS" enabled="true" use-java-context="true" use-ccm="true">
- <xa-datasource-property name="PortNumber">1557</xa-datasource-property>
- <xa-datasource-property name="DatabaseName">{db-name}</xa-datasource-property>
- <xa-datasource-property name="ServerName">{host}</xa-datasource-property>
+ <xa-datasource-property name="URL">jdbc:oracle:thin:{host}:1521:orcl</xa-datasource-property>
+ <driver>ojdbc6.jar</driver>
- <driver>oracle</driver>
-
<!--
<new-connection-sql>select * from dual</new-connection-sql>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
@@ -39,7 +36,7 @@
-->
</xa-datasource>
<drivers>
- <driver name="oracle" module="com.oracle">
+ <driver name="ojdbc6.jar" module="com.oracle">
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
</driver>
</drivers>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/oracle.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/oracle.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/oracle.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -3,7 +3,7 @@
<datasources>
<datasource jndi-name="java:/OracleDS" pool-name="OracleDS" enabled="true" jta="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:oracle:thin:{host}:1521:orcl</connection-url>
- <driver>oracle</driver>
+ <driver>ojdbc6.jar</driver>
<pool>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
@@ -15,7 +15,7 @@
</security>
</datasource>
<drivers>
- <driver name="oracle" module="com.oracle">
+ <driver name="ojdbc6.jar" module="com.oracle">
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
</driver>
</drivers>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/readme.txt
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/readme.txt 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/oracle/readme.txt 2012-01-12 18:43:23 UTC (rev 3792)
@@ -6,11 +6,7 @@
Option 1: use the JBoss CLI tool, and deploy the "ojdbc6.jar" or later jar by issuing the command
deploy ojdbc6.jar
- Note: when you use CLI based deployment, the <driver> element in the <datasources> xml fragment, must
- be the name of the jar file deployed, and no need for adding <drivers> element in standalone-teiid.xml
- or domain-teiid.xml file
-
- Option 2:
+ Option 2:(recommended)
1) Stop the server if it is running.
@@ -26,6 +22,6 @@
or "oracle-xa.xml" file under the "datasources" subsystem. You may have to edit contents according
to where your oracle server is located and credentials you need to use to access it.
- Option 2: Take a look at create-ds.cli script, and modify and execute using JBoss CLI tool as below
+ Option 2: Take a look at create-oracle-ds.cli script, and modify and execute using JBoss CLI tool as below
- ./Jboss-admin.sh --file create-ds.cli
\ No newline at end of file
+ ./Jboss-admin.sh --file create-oracle-ds.cli
\ No newline at end of file
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/create-postgresql-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/create-postgresql-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/create-postgresql-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,14 @@
+# note that driver-name could be driver's module name if you went module approach.
+/subsystem=datasources/data-source=postgresDS:add(jndi-name=java:/postgresDS, driver-name=postgresql-8.3-603.jdbc3.jar, driver-class=org.postgresql.Driver, connection-url=jdbc:postgresql://{host}:5432/{database}, user-name={user}, password={password})
+
+# XA Data source
+#batch
+#/subsystem=datasources/xa-data-source=postgresDS:add(jndi-name=java:/postgresDS, driver-name=postgresql-8.3-603.jdbc3.jar, xa-datasource-class=org.postgresql.xa.PGXADataSource, user-name={user}, password={password})
+#/subsystem=datasources/xa-data-source=postgresDS/xa-datasource-properties=DatabaseName:add(value={database_name})
+#/subsystem=datasources/xa-data-source=postgresDS/xa-datasource-properties=PortNumber:add(value=5432)
+#/subsystem=datasources/xa-data-source=postgresDS/xa-datasource-properties=ServerName:add(value={host})
+#/subsystem=datasources/xa-data-source=postgresDS:enable
+#run-batch
+
+
+## If you are working in a clustered environment, prepend "/profile=ha" to all the above commands that start with "/subsystem=.."
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/postgresql-xa.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/postgresql-xa.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/postgresql-xa.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -7,7 +7,7 @@
<xa-datasource-property name="DatabaseName">{db-name}</xa-datasource-property>
<xa-datasource-property name="ServerName">{host}</xa-datasource-property>
- <driver>postgresql</driver>
+ <driver>postgresql-8.3-603.jdbc3.jar</driver>
<!--
<new-connection-sql>select 1</new-connection-sql>
@@ -39,7 +39,7 @@
-->
</xa-datasource>
<drivers>
- <driver name="postgresql" module="org.postgresql">
+ <driver name="postgresql-8.3-603.jdbc3.jar" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
</drivers>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/postgresql.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/postgresql.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/postgresql.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -3,7 +3,7 @@
<datasources>
<datasource jndi-name="java:/postgres-ds" pool-name="PostgreDS">
<connection-url>jdbc:postgresql://{host}:5432/{database}</connection-url>
- <driver>postgresql</driver>
+ <driver>postgresql-8.3-603.jdbc3.jar</driver>
<pool>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
@@ -15,7 +15,7 @@
</security>
</datasource>
<drivers>
- <driver name="postgresql" module="org.postgresql">
+ <driver name="postgresql-8.3-603.jdbc3.jar" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
</drivers>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/readme.txt
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/readme.txt 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/postgresql/readme.txt 2012-01-12 18:43:23 UTC (rev 3792)
@@ -6,11 +6,7 @@
Option 1: use the JBoss CLI tool, and deploy the "postgresql-8.3-603.jdbc3.jar" or later jar by issuing the command
deploy postgresql-8.3-603.jdbc3.jar
- Note: when you use CLI based deployment, the <driver> element in the <datasources> xml fragment, must
- be the name of the jar file deployed, and no need for adding <drivers> element in standalone-teiid.xml
- or domain-teiid.xml file
-
- Option 2:
+ Option 2: (recommended)
1) Stop the server if it is running.
@@ -26,6 +22,6 @@
or "postgresql-xa.xml" file under the "datasources" subsystem. You may have to edit contents according
to where your postgresql server is located and credentials you need to use to access it.
- Option 2: Take a look at create-ds.cli script, and modify and execute using JBoss CLI tool.
+ Option 2: Take a look at create-postgresql-ds.cli script, and modify and execute using JBoss CLI tool.
-
\ No newline at end of file
+ ./Jboss-admin.sh --file create-postgresql-ds.cli
\ No newline at end of file
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/salesforce/create-salesforce-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/salesforce/create-salesforce-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/salesforce/create-salesforce-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,6 @@
+/subsystem=resource-adapters/resource-adapter=sfDS:add(archive=teiid-connector-salesforce.rar, transaction-support=NoTransaction)
+/subsystem=resource-adapters/resource-adapter=sfDS/connection-definitions=sfDS:add(jndi-name=java:/sfDS, class-name=org.teiid.resource.adapter.salesforce.SalesForceManagedConnectionFactory, enabled=true, use-java-context=true)
+/subsystem=resource-adapters/resource-adapter=sfDS/connection-definitions=sfDS/config-properties=URL:add(value=https://www.salesforce.com/services/Soap/u/22.0)
+/subsystem=resource-adapters/resource-adapter=sfDS/connection-definitions=sfDS/config-properties=username:add(value={user})
+/subsystem=resource-adapters/resource-adapter=sfDS/connection-definitions=sfDS/config-properties=password:add(value={password})
+/subsystem=resource-adapters/resource-adapter=sfDS/connection-definitions=sfDS:enable
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/salesforce/readme.txt
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/salesforce/readme.txt 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/salesforce/readme.txt 2012-01-12 18:43:23 UTC (rev 3792)
@@ -1,3 +1,10 @@
+Option 1:
+
In Teiid, for Salesforce datasource a JCA connector is provided and deployed at the install time. To create
salesforce datasource connection edit the "standalone-teiid.xml" file or "doamin-teiid.xml" file and add
-the contents of the salesforce.xml under "resource-adapters" subsystem section.
\ No newline at end of file
+the contents of the salesforce.xml under "resource-adapters" subsystem section.
+
+Option 2:
+
+Take a look at create-salesforce-ds.cli script, and modify and execute using JBoss CLI tool as below
+./Jboss-admin.sh --file create-salesforce-ds.cli
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/salesforce/salesforce.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/salesforce/salesforce.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/salesforce/salesforce.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -12,7 +12,7 @@
pool-name="teiid-sf-ds">
<!-- URL; the below is test; replace with actual URL you need to connect to -->
- <config-property name="URL">https://test.salesforce.com/services/Soap/u/10.0</config-property>
+ <config-property name="URL">https://www.salesforce.com/services/Soap/u/22.0</config-property>
<config-property name="username">user</config-property>
<config-property name="password">pass</config-property>
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/create-jtds-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/create-jtds-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/create-jtds-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,14 @@
+# note that driver-name could be driver's module name if you went module approach.
+/subsystem=datasources/data-source=sqlserverDS:add(jndi-name=java:/sqlserverDS, driver-name=jtds-1.2.5.jar, driver-class=net.sourceforge.jtds.jdbc.Driver, connection-url=jdbc:jtds:sqlserver://{host}:1433/{database}, user-name={user}, password={password})
+
+# XA Data source
+#batch
+#/subsystem=datasources/xa-data-source=sqlserverDS:add(jndi-name=java:/sqlserverDS, driver-name=jtds-1.2.5.jar, xa-datasource-class=net.sourceforge.jtds.jdbcx.JtdsDataSource, user-name={user}, password={password})
+#/subsystem=datasources/xa-data-source=sqlserverDS/xa-datasource-properties=DatabaseName:add(value={database_name})
+#/subsystem=datasources/xa-data-source=sqlserverDS/xa-datasource-properties=PortNumber:add(value=1433)
+#/subsystem=datasources/xa-data-source=sqlserverDS/xa-datasource-properties=ServerName:add(value={host})
+#/subsystem=datasources/xa-data-source=sqlserverDS:enable
+#run-batch
+
+
+## If you are working in a clustered environment, prepend "/profile=ha" to all the above commands that start with "/subsystem=.."
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/readme.txt
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/readme.txt 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/readme.txt 2012-01-12 18:43:23 UTC (rev 3792)
@@ -6,11 +6,7 @@
Option 1: use the JBoss CLI tool, and deploy the "jtds-1.2.5.jar" or later jar by issuing the command
deploy jtds-1.2.5.jar
- Note: when you use CLI based deployment, the <driver> element in the <datasources> xml fragment, must
- be the name of the jar file deployed, and no need for adding <drivers> element in standalone-teiid.xml
- or domain-teiid.xml file
-
- Option 2:
+ Option 2:(recommended)
1) Stop the server if it is running.
2) Overlay the "modules" directory on the "<jboss-as>/modules" directory
@@ -25,6 +21,6 @@
or "sqlserver-xa.xml" file under the "datasources" subsystem. You may have to edit contents according
to where your sqlserver server is located and credentials you need to use to access it.
- Option 2: Take a look at create-ds.cli script, and modify and execute using JBoss CLI tool as below
+ Option 2: Take a look at create-jtds-ds.cli script, and modify and execute using JBoss CLI tool as below
- ./Jboss-admin.sh --file create-ds.cli
\ No newline at end of file
+ ./Jboss-admin.sh --file create-jtds-ds.cli
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/sqlserver-xa.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/sqlserver-xa.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/sqlserver-xa.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -7,7 +7,7 @@
<xa-datasource-property name="DatabaseName">{db-name}</xa-datasource-property>
<xa-datasource-property name="ServerName">{host}</xa-datasource-property>
- <driver>jtds</driver>
+ <driver>jtds-1.2.5.jar</driver>
<!--
<new-connection-sql>select 1/new-connection-sql>
@@ -39,7 +39,7 @@
-->
</xa-datasource>
<drivers>
- <driver name="jtds" module="net.sourceforge.jtds">
+ <driver name="jtds-1.2.5.jar" module="net.sourceforge.jtds">
<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
<xa-datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</xa-datasource-class>
</driver>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/sqlserver.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/sqlserver.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/jtds/sqlserver.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -3,7 +3,7 @@
<datasources>
<datasource jndi-name="java:/sqlserverDS" pool-name="sqlserverDS">
<connection-url>jdbc:jtds:sqlserver://{host}:1433/{database}</connection-url>
- <driver>jtds</driver>
+ <driver>jtds-1.2.5.jar</driver>
<pool>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
@@ -15,7 +15,7 @@
</security>
</datasource>
<drivers>
- <driver name="jtds" module="net.sourceforge.jtds">
+ <driver name="jtds-1.2.5.jar" module="net.sourceforge.jtds">
<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
<xa-datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</xa-datasource-class>
</driver>
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/create-native-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/create-native-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/create-native-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,14 @@
+# note that driver-name could be driver's module name if you went module approach.
+/subsystem=datasources/data-source=sqlserverDS:add(jndi-name=java:/sqlserverDS, driver-name=sqljdbc4.jar, driver-class=com.microsoft.jdbc.sqlserver.SQLServerDriver, connection-url=jdbc:microsoft:sqlserver://{host}:1433, user-name={user}, password={password})
+
+# XA Data source
+#batch
+#/subsystem=datasources/xa-data-source=sqlserverDS:add(jndi-name=java:/sqlserverDS, driver-name=sqljdbc4.jar, xa-datasource-class=com.microsoft.sqlserver.jdbc.SQLServerXADataSource, user-name={user}, password={password})
+#/subsystem=datasources/xa-data-source=sqlserverDS/xa-datasource-properties=DatabaseName:add(value={database_name})
+#/subsystem=datasources/xa-data-source=sqlserverDS/xa-datasource-properties=PortNumber:add(value=1433)
+#/subsystem=datasources/xa-data-source=sqlserverDS/xa-datasource-properties=ServerName:add(value={host})
+#/subsystem=datasources/xa-data-source=sqlserverDS:enable
+#run-batch
+
+
+## If you are working in a clustered environment, prepend "/profile=ha" to all the above commands that start with "/subsystem=.."
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/readme.txt
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/readme.txt 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/readme.txt 2012-01-12 18:43:23 UTC (rev 3792)
@@ -6,11 +6,7 @@
Option 1: use the JBoss CLI tool, and deploy the "sqljdbc4.jar" or later jar by issuing the command
deploy sqljdbc4.jar
- Note: when you use CLI based deployment, the <driver> element in the <datasources> xml fragment, must
- be the name of the jar file deployed, and no need for adding <drivers> element in standalone-teiid.xml
- or domain-teiid.xml file
-
- Option 2:
+ Option 2: (recommended)
1) Stop the server if it is running.
2) Overlay the "modules" directory on the "<jboss-as>/modules" directory
@@ -25,6 +21,6 @@
or "sqlserver-xa.xml" file under the "datasources" subsystem. You may have to edit contents according
to where your sqlserver server is located and credentials you need to use to access it.
- Option 2: Take a look at create-ds.cli script, and modify and execute using JBoss CLI tool as below
+ Option 2: Take a look at create-native-ds.cli script, and modify and execute using JBoss CLI tool as below
- ./Jboss-admin.sh --file create-ds.cli
\ No newline at end of file
+ ./Jboss-admin.sh --file create-native-ds.cli
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/sqlserver-xa.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/sqlserver-xa.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/sqlserver-xa.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -7,7 +7,7 @@
<xa-datasource-property name="DatabaseName">{db-name}</xa-datasource-property>
<xa-datasource-property name="ServerName">{host}</xa-datasource-property>
- <driver>sqlserver</driver>
+ <driver>sqljdbc4.jar</driver>
<!--
<new-connection-sql>select 1/new-connection-sql>
@@ -39,7 +39,7 @@
-->
</xa-datasource>
<drivers>
- <driver name="sqlserver" module="com.microsoft.sqlserver">
+ <driver name="sqljdbc4.jar" module="com.microsoft.sqlserver">
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
</driver>
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/sqlserver.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/sqlserver.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/sqlserver/native/sqlserver.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -3,7 +3,7 @@
<datasources>
<datasource jndi-name="java:/sqlserverDS" pool-name="sqlserverDS">
<connection-url>jdbc:microsoft:sqlserver://{host}:1433</connection-url>
- <driver>sqlserver</driver>
+ <driver>sqljdbc4.jar</driver>
<pool>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
@@ -15,7 +15,7 @@
</security>
</datasource>
<drivers>
- <driver name="sqlserver" module="com.microsoft.sqlserver">
+ <driver name="sqljdbc4.jar" module="com.microsoft.sqlserver">
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
</driver>
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/teiid/create-teiid-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/teiid/create-teiid-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/teiid/create-teiid-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,16 @@
+/subsystem=datasources/jdbc-driver=teiid:add(driver-name=teiid, driver-module-name=org.jboss.teiid.client, driver-xa-datasource-class-name=org.teiid.jdbc.TeiidDataSource, driver-class-name=org.teiid.jdbc.TeiidDriver)
+
+# note that driver-name could be driver's module name if you went module approach.
+/subsystem=datasources/data-source=teiidDS:add(jndi-name=java:/teiidDS, driver-name=teiid, driver-class=org.teiid.jdbc.TeiidDriver, connection-url=jdbc:teiid:{vdb}@mm://{host}:31000, user-name={user}, password={password})
+
+# XA Data source
+#batch
+#/subsystem=datasources/xa-data-source=teiidDS:add(jndi-name=java:/teiidDS, driver-name=teiid, xa-datasource-class=org.teiid.jdbc.TeiidDataSource, user-name={user}, password={password})
+#/subsystem=datasources/xa-data-source=teiidDS/xa-datasource-properties=DatabaseName:add(value={database_name})
+#/subsystem=datasources/xa-data-source=teiidDS/xa-datasource-properties=PortNumber:add(value=31000)
+#/subsystem=datasources/xa-data-source=teiidDS/xa-datasource-properties=ServerName:add(value={host})
+#/subsystem=datasources/xa-data-source=teiidDS:enable
+#run-batch
+
+
+## If you are working in a clustered environment, prepend "/profile=ha" to all the above commands that start with "/subsystem=.."
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/teiid/readme.txt
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/teiid/readme.txt 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/teiid/readme.txt 2012-01-12 18:43:23 UTC (rev 3792)
@@ -2,11 +2,15 @@
Creating the datasource
- Option 1: Edit the standalone-teiid.xml or domain-teiid.xml file and add contents of the "teiid.xml"
+ Option 1:
+
+ Edit the standalone-teiid.xml or domain-teiid.xml file and add contents of the "teiid.xml"
or "teiid-xa.xml" or "teiid-local.xml" file under the "datasources" subsystem. You may have to edit contents according
to where your Teiid server is located and credentials you need to use to access it.
- Option 2: Take a look at create-ds.cli script, and modify and execute using JBoss CLI tool as below
+ Option 2:
- ./Jboss-admin.sh --file create-ds.cli
+ Take a look at create-teiid-ds.cli script, and modify and execute using JBoss CLI tool as below
+ ./Jboss-admin.sh --file create-teiid-ds.cli
+
Added: trunk/build/kits/jboss-as7/docs/teiid/datasources/web-service/create-ws-ds.cli
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/web-service/create-ws-ds.cli (rev 0)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/web-service/create-ws-ds.cli 2012-01-12 18:43:23 UTC (rev 3792)
@@ -0,0 +1,4 @@
+/subsystem=resource-adapters/resource-adapter=wsDS:add(archive=teiid-connector-ws.rar, transaction-support=NoTransaction)
+/subsystem=resource-adapters/resource-adapter=wsDS/connection-definitions=wsDS:add(jndi-name=java:/wsDS, class-name=org.teiid.resource.adapter.ws.WSManagedConnectionFactory, enabled=true, use-java-context=true)
+/subsystem=resource-adapters/resource-adapter=wsDS/connection-definitions=wsDS/config-properties=EndPoint:add(value={end_point})
+/subsystem=resource-adapters/resource-adapter=wsDS/connection-definitions=wsDS:enable
\ No newline at end of file
Modified: trunk/build/kits/jboss-as7/docs/teiid/datasources/web-service/ws.xml
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/datasources/web-service/ws.xml 2012-01-12 16:13:09 UTC (rev 3791)
+++ trunk/build/kits/jboss-as7/docs/teiid/datasources/web-service/ws.xml 2012-01-12 18:43:23 UTC (rev 3792)
@@ -12,7 +12,7 @@
pool-name="teiid-ws-ds">
<!-- End point for the web service -->
- <config-property name="EndPoint">endpoint url</config-property>
+ <config-property name="EndPoint">{endpoint_url}</config-property>
<!--
Uncomment these properties to supply specific CXF configuration for this service. This file
12 years, 11 months
teiid SVN: r3791 - in trunk: documentation/reference/src/main/docbook/en-US/content and 8 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2012-01-12 11:13:09 -0500 (Thu, 12 Jan 2012)
New Revision: 3791
Modified:
trunk/api/src/main/java/org/teiid/language/SQLConstants.java
trunk/documentation/reference/src/main/docbook/en-US/content/sql_clauses.xml
trunk/engine/src/main/java/org/teiid/query/processor/relational/TextTableNode.java
trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/TextTable.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java
trunk/engine/src/main/java/org/teiid/query/validator/UpdateValidator.java
trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.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/query/processor/TestTextTable.java
Log:
TEIID-1819 adding selector logic to texttable
Modified: trunk/api/src/main/java/org/teiid/language/SQLConstants.java
===================================================================
--- trunk/api/src/main/java/org/teiid/language/SQLConstants.java 2012-01-11 21:37:46 UTC (rev 3790)
+++ trunk/api/src/main/java/org/teiid/language/SQLConstants.java 2012-01-12 16:13:09 UTC (rev 3791)
@@ -73,6 +73,8 @@
public static final String HEADER = "HEADER"; //$NON-NLS-1$
public static final String QUOTE = "QUOTE"; //$NON-NLS-1$
public static final String COLUMNS = "COLUMNS"; //$NON-NLS-1$
+ public static final String SELECTOR = "SELECTOR"; //$NON-NLS-1$
+ public static final String SKIP = "SKIP"; //$NON-NLS-1$
//xmltable
public static final String ORDINALITY = "ORDINALITY"; //$NON-NLS-1$
public static final String PASSING = "PASSING"; //$NON-NLS-1$
@@ -113,7 +115,7 @@
public static final String ENABLED = "ENABLED"; //$NON-NLS-1$
public static final String DISABLED = "DISABLED"; //$NON-NLS-1$
- public static final String TRIM = "TRIM";
+ public static final String TRIM = "TRIM"; //$NON-NLS-1$
}
public interface Reserved {
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/sql_clauses.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/sql_clauses.xml 2012-01-11 21:37:46 UTC (rev 3790)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/sql_clauses.xml 2012-01-12 16:13:09 UTC (rev 3791)
@@ -104,7 +104,8 @@
</para>
<para>
Usage:
- <synopsis label="Usage">TEXTTABLE(expression COLUMNS <COLUMN>, ... [NO ROW DELIMITER] [DELIMITER char] [(QUOTE|ESCAPE) char] [HEADER [integer]] [SKIP integer]) AS name</synopsis>
+ <synopsis label="Usage">TEXTTABLE(expression COLUMNS <COLUMN>, ... [NO ROW DELIMITER] [DELIMITER char] [(QUOTE|ESCAPE) char]
+ [HEADER [integer]] [SKIP integer] [SELECTOR string]) AS name</synopsis>
<synopsis label="Usage">COLUMN := name datatype [WIDTH integer [NO TRIM]]</synopsis>
</para>
<itemizedlist>
@@ -142,6 +143,10 @@
</para>
</listitem>
<listitem>
+ <para>SELECTOR specifies that delemited lines should only match if the line begins with the selector string followed by a delimiter. The selector value is a valid column value.
+ </para>
+ </listitem>
+ <listitem>
<para>WIDTH indicates the fixed-width length of a column in characters - not bytes. The CR NL newline value counts as a single character.
</para>
</listitem>
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/TextTableNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/TextTableNode.java 2012-01-11 21:37:46 UTC (rev 3790)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/TextTableNode.java 2012-01-12 16:13:09 UTC (rev 3791)
@@ -170,6 +170,10 @@
break;
}
+ if (table.getSelector() != null && !line.startsWith(table.getSelector())) {
+ continue;
+ }
+
List<String> vals = parseLine(line);
List<Object> tuple = new ArrayList<Object>(projectionIndexes.length);
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java 2012-01-11 21:37:46 UTC (rev 3790)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java 2012-01-12 16:13:09 UTC (rev 3791)
@@ -36,9 +36,7 @@
import org.teiid.api.exception.query.QueryValidatorException;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.core.util.StringUtil;
import org.teiid.dqp.internal.process.Request;
-import org.teiid.language.SQLConstants;
import org.teiid.logging.LogManager;
import org.teiid.query.QueryPlugin;
import org.teiid.query.analysis.AnalysisRecord;
@@ -500,11 +498,7 @@
private static UpdateType determineType(String plan) {
UpdateType type = UpdateType.INHERENT;
if (plan != null) {
- if (StringUtil.startsWithIgnoreCase(plan, SQLConstants.Reserved.CREATE)) {
- type = UpdateType.UPDATE_PROCEDURE;
- } else {
- type = UpdateType.INSTEAD_OF;
- }
+ type = UpdateType.INSTEAD_OF;
}
return type;
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/TextTable.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/TextTable.java 2012-01-11 21:37:46 UTC (rev 3790)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/TextTable.java 2012-01-12 16:13:09 UTC (rev 3791)
@@ -95,9 +95,18 @@
private Integer header;
private Integer skip;
private boolean usingRowDelimiter = true;
+ private String selector;
private boolean fixedWidth;
+ public String getSelector() {
+ return selector;
+ }
+
+ public void setSelector(String selector) {
+ this.selector = selector;
+ }
+
public Character getQuote() {
return quote;
}
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 2012-01-11 21:37:46 UTC (rev 3790)
+++ trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java 2012-01-12 16:13:09 UTC (rev 3791)
@@ -1726,10 +1726,16 @@
}
if (obj.getSkip() != null) {
append(SPACE);
- append("SKIP"); //$NON-NLS-1$
+ append(NonReserved.SKIP);
append(SPACE);
append(obj.getSkip());
}
+ if (obj.getSelector() != null) {
+ append(SPACE);
+ append(NonReserved.SELECTOR);
+ append(SPACE);
+ append(escapeSinglePart(obj.getSelector()));
+ }
append(")");//$NON-NLS-1$
append(SPACE);
append(AS);
Modified: trunk/engine/src/main/java/org/teiid/query/validator/UpdateValidator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/UpdateValidator.java 2012-01-11 21:37:46 UTC (rev 3790)
+++ trunk/engine/src/main/java/org/teiid/query/validator/UpdateValidator.java 2012-01-12 16:13:09 UTC (rev 3791)
@@ -64,10 +64,6 @@
*/
INHERENT,
/**
- * A procedure handler has been defined
- */
- UPDATE_PROCEDURE,
- /**
* An instead of trigger (TriggerAction) has been defined
*/
INSTEAD_OF
Modified: trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2012-01-11 21:37:46 UTC (rev 3790)
+++ trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2012-01-12 16:13:09 UTC (rev 3791)
@@ -75,7 +75,6 @@
import org.teiid.query.sql.visitor.SQLStringVisitor;
import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
import org.teiid.query.validator.UpdateValidator.UpdateInfo;
-import org.teiid.query.validator.UpdateValidator.UpdateType;
import org.teiid.query.xquery.saxon.SaxonXQueryExpression;
import org.teiid.translator.SourceSystemFunctions;
@@ -679,14 +678,6 @@
if(((Constant)value).isNull() && ! getMetadata().elementSupports(elementID.getMetadataID(), SupportConstants.Element.NULL)) {
handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0060", SQLStringVisitor.getSQLString(elementID)), elementID); //$NON-NLS-1$
}// end of if
- } else if (info != null && info.getUpdateType() == UpdateType.UPDATE_PROCEDURE && getMetadata().isVirtualGroup(update.getGroup().getMetadataID()) && !EvaluatableVisitor.willBecomeConstant(value)) {
- // If this is an update on a virtual group, verify that no elements are in the right side
- Collection<ElementSymbol> elements = ElementCollectorVisitor.getElements(value, false);
- for (ElementSymbol element : elements) {
- if(! element.isExternalReference()) {
- handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0061", SQLStringVisitor.getSQLString(value)), value); //$NON-NLS-1$
- }
- }
}
}
if (info != null && info.isInherentUpdate()) {
@@ -1213,7 +1204,7 @@
}
}
if (widthSet) {
- if (obj.getDelimiter() != null || obj.getHeader() != null || obj.getQuote() != null) {
+ if (obj.getDelimiter() != null || obj.getHeader() != null || obj.getQuote() != null || obj.getSelector() != null) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.text_table_width"), obj); //$NON-NLS-1$
}
} else {
Modified: trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
===================================================================
--- trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2012-01-11 21:37:46 UTC (rev 3790)
+++ trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2012-01-12 16:13:09 UTC (rev 3791)
@@ -2165,6 +2165,7 @@
Character quote = null;
Integer header = null;
Integer skip = null;
+ String selector = null;
String aliasID = null;
}
{
@@ -2211,6 +2212,10 @@
LOOKAHEAD(<ID>, { "skip".equalsIgnoreCase(getToken(1).image) }) <ID>
skip = intVal()
]
+ [
+ LOOKAHEAD(<ID>, { "selector".equalsIgnoreCase(getToken(1).image) }) <ID>
+ selector = stringVal()
+ ]
<RPAREN>
[<AS>] aliasID=id()
{
@@ -2224,6 +2229,7 @@
result.setName(validateAlias(aliasID));
result.setQuote(quote);
result.setUsingRowDelimiter(useRowDelimiter);
+ result.setSelector(selector);
return result;
}
}
Modified: trunk/engine/src/main/resources/org/teiid/query/i18n.properties
===================================================================
--- trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2012-01-11 21:37:46 UTC (rev 3790)
+++ trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2012-01-12 16:13:09 UTC (rev 3791)
@@ -216,7 +216,6 @@
ERR.015.012.0055 = Element {0} does not allow nulls.
ERR.015.012.0059 = Left side of update expression must be an element that supports update: {0}
ERR.015.012.0060 = Element {0} does not allow nulls.
-ERR.015.012.0061 = Views using update procedures must have update values that are constant expressions. The expression ''{0}'' cannot be evaluated to a constant.
ERR.015.012.0062 = Elements cannot appear more than once in a SET or USING clause. The following elements are duplicated: {0}
ERR.015.012.0063 = Multiple failures occurred during validation:
ERR.015.012.0064 = Validation succeeded
@@ -710,7 +709,7 @@
ValidationVisitor.drop_of_nontemptable=Cannot drop a non temporary table "{0}".
ValidationVisitor.orderby_expression_xml=XML queries cannot order by an expression.
ValidationVisitor.text_table_invalid_width=For a fixed width text table, all columns must have width set.
-ValidationVisitor.text_table_width=Fixed width text tables should not have DELIMITER, QUOTE, ESCAPE, or HEADER specified.
+ValidationVisitor.text_table_width=Fixed width text tables should not have DELIMITER, QUOTE, ESCAPE, SELECTOR or HEADER specified.
ValidationVisitor.text_table_negative=Text table WIDTH, HEADER, or SKIP values must not be negative.
ValidationVisitor.text_table_delimiter=Text DELIMITER cannot be the same as the QUOTE or ESCAPE characters.
ValidationVisitor.text_table_newline=Text DELIMITER, QUOTE, and ESCAPE characters cannot be the new line character.
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestTextTable.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestTextTable.java 2012-01-11 21:37:46 UTC (rev 3790)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestTextTable.java 2012-01-12 16:13:09 UTC (rev 3791)
@@ -314,8 +314,18 @@
sampleData1(dataManager);
RelationalPlan plan = (RelationalPlan)helpGetPlan(helpParse(sql), RealMetadataFactory.example1Cached());
helpProcess(plan, createCommandContext(), dataManager, expected);
- }
+ }
+ @Test public void testTextTableSelector() throws Exception {
+ String sql = "select x.* from (select * from pm1.g1) y, texttable(e1 || '\n' || e2 || '\n' || e3 COLUMNS x string SELECTOR 'c') x";
+
+ List[] expected = new List[] {
+ Arrays.asList("c"),
+ };
+
+ process(sql, expected);
+ }
+
public static void process(String sql, List[] expectedResults) throws Exception {
FakeDataManager dataManager = new FakeDataManager();
sampleData1(dataManager);
12 years, 11 months
teiid SVN: r3790 - in trunk: build/kits/jboss-as7/modules/org/jboss/teiid/main and 12 other directories.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2012-01-11 16:37:46 -0500 (Wed, 11 Jan 2012)
New Revision: 3790
Modified:
trunk/build/kits/jboss-as7/modules/org/jboss/teiid/main/module.xml
trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/file/main/module.xml
trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/hive/main/module.xml
trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/jdbc/main/module.xml
trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/ldap/main/module.xml
trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/loopback/main/module.xml
trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/olap/main/module.xml
trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/salesforce/main/module.xml
trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/ws/main/module.xml
trunk/connectors/translator-ws/pom.xml
trunk/jboss-integration/pom.xml
trunk/jboss-integration/src/main/java/org/teiid/jboss/VDBService.java
trunk/pom.xml
trunk/runtime/src/main/resources/org/teiid/runtime/i18n.properties
Log:
TEIID-1889: Removing the Log4J dependency
Modified: trunk/build/kits/jboss-as7/modules/org/jboss/teiid/main/module.xml
===================================================================
--- trunk/build/kits/jboss-as7/modules/org/jboss/teiid/main/module.xml 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/build/kits/jboss-as7/modules/org/jboss/teiid/main/module.xml 2012-01-11 21:37:46 UTC (rev 3790)
@@ -10,7 +10,6 @@
<resource-root path="teiid-runtime-${project.version}.jar" />
<resource-root path="teiid-engine-${project.version}.jar" />
<resource-root path="teiid-admin-${project.version}.jar" />
- <resource-root path="teiid-cache-jbosscache-${project.version}.jar" />
<resource-root path="saxonhe-9.2.1.5.jar" />
<resource-root path="json-simple-1.1.jar" />
<resource-root path="conf" />
@@ -31,8 +30,6 @@
<module name="org.jboss.staxmapper" />
<module name="org.jboss.vfs" />
<module name="org.picketbox"/>
- <!-- REMOVE DIRECT DEPENDENCY ON LOG4J, and use jboss logging -->
- <module name="org.apache.log4j"/>
<module name="org.jboss.as.network"/>
<module name="org.jboss.as.security"/>
<module name="org.jboss.as.server"/>
Modified: trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/file/main/module.xml
===================================================================
--- trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/file/main/module.xml 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/file/main/module.xml 2012-01-11 21:37:46 UTC (rev 3790)
@@ -9,8 +9,6 @@
<dependencies>
<module name="javax.api"/>
<module name="javax.resource.api"/>
- <module name="org.apache.commons.logging" />
- <module name="org.apache.log4j"/>
<module name="org.jboss.teiid.common-core" />
<module name="org.jboss.teiid.api" />
</dependencies>
Modified: trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/hive/main/module.xml
===================================================================
--- trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/hive/main/module.xml 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/hive/main/module.xml 2012-01-11 21:37:46 UTC (rev 3790)
@@ -9,8 +9,6 @@
<dependencies>
<module name="javax.resource.api"/>
<module name="javax.api"/>
- <module name="org.apache.commons.logging" />
- <module name="org.apache.log4j"/>
<module name="org.jboss.teiid.common-core" />
<module name="org.jboss.teiid.api" />
<module name="org.jboss.teiid.translator.jdbc" />
Modified: trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/jdbc/main/module.xml
===================================================================
--- trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/jdbc/main/module.xml 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/jdbc/main/module.xml 2012-01-11 21:37:46 UTC (rev 3790)
@@ -9,8 +9,6 @@
<dependencies>
<module name="javax.resource.api"/>
<module name="javax.api"/>
- <module name="org.apache.commons.logging" />
- <module name="org.apache.log4j"/>
<module name="org.jboss.teiid.common-core" />
<module name="org.jboss.teiid.api" />
</dependencies>
Modified: trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/ldap/main/module.xml
===================================================================
--- trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/ldap/main/module.xml 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/ldap/main/module.xml 2012-01-11 21:37:46 UTC (rev 3790)
@@ -9,8 +9,6 @@
<dependencies>
<module name="javax.api"/>
<module name="javax.resource.api"/>
- <module name="org.apache.commons.logging" />
- <module name="org.apache.log4j"/>
<module name="org.jboss.teiid.common-core" />
<module name="org.jboss.teiid.api" />
</dependencies>
Modified: trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/loopback/main/module.xml
===================================================================
--- trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/loopback/main/module.xml 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/loopback/main/module.xml 2012-01-11 21:37:46 UTC (rev 3790)
@@ -9,8 +9,6 @@
<dependencies>
<module name="javax.api"/>
<module name="javax.resource.api"/>
- <module name="org.apache.commons.logging" />
- <module name="org.apache.log4j"/>
<module name="org.jboss.teiid.common-core" />
<module name="org.jboss.teiid.api" />
</dependencies>
Modified: trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/olap/main/module.xml
===================================================================
--- trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/olap/main/module.xml 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/olap/main/module.xml 2012-01-11 21:37:46 UTC (rev 3790)
@@ -8,8 +8,6 @@
<dependencies>
<module name="javax.api"/>
<module name="javax.resource.api"/>
- <module name="org.apache.commons.logging" />
- <module name="org.apache.log4j"/>
<module name="org.jboss.teiid.common-core" />
<module name="org.jboss.teiid.api" />
</dependencies>
Modified: trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/salesforce/main/module.xml
===================================================================
--- trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/salesforce/main/module.xml 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/salesforce/main/module.xml 2012-01-11 21:37:46 UTC (rev 3790)
@@ -8,8 +8,6 @@
<dependencies>
<module name="javax.api"/>
<module name="javax.resource.api"/>
- <module name="org.apache.commons.logging" />
- <module name="org.apache.log4j"/>
<module name="org.jboss.teiid.common-core" />
<module name="org.jboss.teiid.api" />
<module name="org.jboss.teiid.translator.salesforce.api"/>
Modified: trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/ws/main/module.xml
===================================================================
--- trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/ws/main/module.xml 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/build/kits/jboss-as7/modules/org/jboss/teiid/translator/ws/main/module.xml 2012-01-11 21:37:46 UTC (rev 3790)
@@ -9,8 +9,6 @@
<module name="javax.xml.ws.api"/>
<module name="javax.api"/>
<module name="javax.resource.api"/>
- <module name="org.apache.commons.logging" />
- <module name="org.apache.log4j"/>
<module name="org.jboss.teiid.common-core" />
<module name="org.jboss.teiid.api" />
</dependencies>
Modified: trunk/connectors/translator-ws/pom.xml
===================================================================
--- trunk/connectors/translator-ws/pom.xml 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/connectors/translator-ws/pom.xml 2012-01-11 21:37:46 UTC (rev 3790)
@@ -22,11 +22,6 @@
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<scope>provided</scope>
Modified: trunk/jboss-integration/pom.xml
===================================================================
--- trunk/jboss-integration/pom.xml 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/jboss-integration/pom.xml 2012-01-11 21:37:46 UTC (rev 3790)
@@ -91,12 +91,6 @@
</dependency>
<dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
<groupId>org.jboss.teiid</groupId>
<artifactId>teiid-common-core</artifactId>
<type>test-jar</type>
Modified: trunk/jboss-integration/src/main/java/org/teiid/jboss/VDBService.java
===================================================================
--- trunk/jboss-integration/src/main/java/org/teiid/jboss/VDBService.java 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/jboss-integration/src/main/java/org/teiid/jboss/VDBService.java 2012-01-11 21:37:46 UTC (rev 3790)
@@ -235,7 +235,7 @@
this.vdb.removeAttachment(MetadataStoreGroup.class);
this.vdb.removeAttachment(IndexMetadataFactory.class);
- LogManager.logInfo(LogConstants.CTX_RUNTIME, IntegrationPlugin.Util.gs(IntegrationPlugin.Event.TEIID50025, vdb, valid?"active":"inactive")); //$NON-NLS-1$ //$NON-NLS-2$
+ LogManager.logInfo(LogConstants.CTX_RUNTIME, valid?RuntimePlugin.Util.gs(RuntimePlugin.Event.TEIID40003,vdb.getName(), vdb.getVersion()):RuntimePlugin.Util.gs(RuntimePlugin.Event.TEIID40006,vdb.getName(), vdb.getVersion()));
}
@Override
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/pom.xml 2012-01-11 21:37:46 UTC (rev 3790)
@@ -356,11 +356,6 @@
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.14</version>
- </dependency>
- <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
Modified: trunk/runtime/src/main/resources/org/teiid/runtime/i18n.properties
===================================================================
--- trunk/runtime/src/main/resources/org/teiid/runtime/i18n.properties 2012-01-11 21:20:41 UTC (rev 3789)
+++ trunk/runtime/src/main/resources/org/teiid/runtime/i18n.properties 2012-01-11 21:37:46 UTC (rev 3790)
@@ -72,7 +72,7 @@
recursive_delegation=For {0}.{1} VDB, recursive delegation {2} found.
TEIID40012=For {0}.{1} VDB, Data Source "{2}" not found.
datasource_replaced=For {0}.{1} VDB, Data Source "{2}" replaced with "{3}"
-TEIID40003={0}.{1} status has been changed to active
+TEIID40003={0}.{1} status has been set to "active"
vdb_inactivated={0}.{1} status has been changed to inactive. Check the required translators and data sources!
translator_added=Teiid translator "{0}" has been added.
invalid_class={0} invalid type of class specified. Must be of type org.teiid.connector.api.Connector
12 years, 11 months
teiid SVN: r3789 - trunk/runtime/src/main/java/org/teiid/deployers.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2012-01-11 16:20:41 -0500 (Wed, 11 Jan 2012)
New Revision: 3789
Modified:
trunk/runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java
Log:
TEIID-1878
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java 2012-01-11 20:33:42 UTC (rev 3788)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java 2012-01-11 21:20:41 UTC (rev 3789)
@@ -177,6 +177,7 @@
getExecutor().execute(runnable);
}
} else if (valid) {
+ this.vdbRepository.finishDeployment(vdb.getName(), vdb.getVersion());
vdb.setStatus(VDB.Status.ACTIVE);
LogManager.logInfo(LogConstants.CTX_RUNTIME, RuntimePlugin.Util.gs(RuntimePlugin.Event.TEIID40003,vdb.getName(), vdb.getVersion()));
}
12 years, 11 months
teiid SVN: r3788 - in trunk/engine/src: test/java/org/teiid/query/function/source and 1 other directory.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2012-01-11 15:33:42 -0500 (Wed, 11 Jan 2012)
New Revision: 3788
Modified:
trunk/engine/src/main/java/org/teiid/query/function/source/XMLSystemFunctions.java
trunk/engine/src/test/java/org/teiid/query/function/source/TestXMLSystemFunctions.java
Log:
TEIID-1896 fix for nested json array xml conversion
Modified: trunk/engine/src/main/java/org/teiid/query/function/source/XMLSystemFunctions.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/function/source/XMLSystemFunctions.java 2012-01-11 20:21:29 UTC (rev 3787)
+++ trunk/engine/src/main/java/org/teiid/query/function/source/XMLSystemFunctions.java 2012-01-11 20:33:42 UTC (rev 3788)
@@ -113,37 +113,33 @@
private static final class JsonToXmlContentHandler implements
ContentHandler {
private final XMLStreamWriter streamWriter;
- private String currentName;
- private LinkedList<Boolean> inArray = new LinkedList<Boolean>();
+ private boolean rootArray;
+ private LinkedList<String> nameStack = new LinkedList<String>();
private JsonToXmlContentHandler(String rootName,
XMLStreamWriter streamWriter) {
this.streamWriter = streamWriter;
- this.currentName = rootName;
+ this.nameStack.push(rootName);
}
@Override
public boolean startObjectEntry(String key)
throws org.json.simple.parser.ParseException, IOException {
- currentName = key;
- start();
+ this.nameStack.push(key);
return true;
}
@Override
public boolean startObject() throws org.json.simple.parser.ParseException,
IOException {
- if (inArray.peek()) {
- start();
- }
- inArray.push(false);
+ start();
return true;
}
private void start()
throws IOException {
try {
- streamWriter.writeStartElement(escapeName(currentName, true));
+ streamWriter.writeStartElement(escapeName(this.nameStack.peek(), true));
} catch (XMLStreamException e) {
throw new IOException(e);
}
@@ -157,23 +153,22 @@
} catch (XMLStreamException e) {
throw new IOException(e);
}
- inArray.push(false);
- start();
}
@Override
public boolean startArray() throws org.json.simple.parser.ParseException,
IOException {
- inArray.push(true);
+ if (this.nameStack.size() == 1) {
+ this.rootArray = true;
+ start();
+ }
return true;
}
@Override
public boolean primitive(Object value)
throws org.json.simple.parser.ParseException, IOException {
- if (inArray.peek()) {
- start();
- }
+ start();
try {
if (value != null) {
streamWriter.writeCharacters(value.toString());
@@ -184,9 +179,7 @@
} catch (XMLStreamException e) {
throw new IOException(e);
}
- if (inArray.peek()) {
- end();
- }
+ end();
return true;
}
@@ -202,24 +195,20 @@
@Override
public boolean endObjectEntry()
throws org.json.simple.parser.ParseException, IOException {
- end();
+ this.nameStack.pop();
return true;
}
@Override
public boolean endObject() throws org.json.simple.parser.ParseException,
IOException {
- inArray.pop();
- if (inArray.peek()) {
- end();
- }
+ end();
return true;
}
@Override
public void endJSON() throws org.json.simple.parser.ParseException,
IOException {
- end();
try {
streamWriter.writeEndDocument();
} catch (XMLStreamException e) {
@@ -230,7 +219,9 @@
@Override
public boolean endArray() throws org.json.simple.parser.ParseException,
IOException {
- inArray.pop();
+ if (this.nameStack.size() == 1 && rootArray) {
+ end();
+ }
return true;
}
}
Modified: trunk/engine/src/test/java/org/teiid/query/function/source/TestXMLSystemFunctions.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/function/source/TestXMLSystemFunctions.java 2012-01-11 20:21:29 UTC (rev 3787)
+++ trunk/engine/src/test/java/org/teiid/query/function/source/TestXMLSystemFunctions.java 2012-01-11 20:33:42 UTC (rev 3788)
@@ -194,7 +194,7 @@
@Test public void testJsonToXml() throws Exception {
String json = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
- String expected = "<?xml version=\"1.0\" ?><Array><Array>0</Array><Array><_u0031_><_u0032_><_u0033_><_u0034_><_u0034_>5</_u0034_><_u0034_><_u0036_>7</_u0036_></_u0034_></_u0034_></_u0033_></_u0032_></_u0031_></Array></Array>";
+ String expected = "<?xml version=\"1.0\" ?><Array><Array>0</Array><Array><_u0031_><_u0032_><_u0033_><_u0034_>5</_u0034_><_u0034_><_u0036_>7</_u0036_></_u0034_></_u0033_></_u0032_></_u0031_></Array></Array>";
helpTestJson(json, "Array", expected);
}
@@ -214,7 +214,7 @@
@Test public void testJsonToXml1() throws Exception {
String json = "{ \"firstName\": \"John\", \"lastName\": \"Smith\", \"age\": 25, \"address\": { \"streetAddress\": \"21 2nd Street\", \"city\": \"New York\", \"state\": \"NY\", "+
"\"postalCode\": \"10021\" }, \"phoneNumber\": [ { \"type\": \"home\", \"number\": \"212 555-1234\" }, { \"type\": \"fax\", \"number\": \"646 555-4567\" } ] }";
- String expected = "<?xml version=\"1.0\" ?><Person><firstName>John</firstName><lastName>Smith</lastName><age>25</age><address><streetAddress>21 2nd Street</streetAddress><city>New York</city><state>NY</state><postalCode>10021</postalCode></address><phoneNumber><phoneNumber><type>home</type><number>212 555-1234</number></phoneNumber><number><type>fax</type><number>646 555-4567</number></number></phoneNumber></Person>";
+ String expected = "<?xml version=\"1.0\" ?><Person><firstName>John</firstName><lastName>Smith</lastName><age>25</age><address><streetAddress>21 2nd Street</streetAddress><city>New York</city><state>NY</state><postalCode>10021</postalCode></address><phoneNumber><type>home</type><number>212 555-1234</number></phoneNumber><phoneNumber><type>fax</type><number>646 555-4567</number></phoneNumber></Person>";
helpTestJson(json, "Person", expected);
}
@@ -224,6 +224,28 @@
helpTestJson(json, "Person", expected);
}
+ @Test public void testJsonToXml3() throws Exception {
+ String json = "{ \"kids\":[{ \"firstName\" : \"George\" }, { \"firstName\" : \"Jerry\" }]}";
+ String expected = "<?xml version=\"1.0\" ?><Person><kids><firstName>George</firstName></kids><kids><firstName>Jerry</firstName></kids></Person>";
+ helpTestJson(json, "Person", expected);
+ }
+
+ @Test public void testJsonToXml4() throws Exception {
+ String json = "{ \"kids\":[{ \"firstName\" : \"George\" }, { \"firstName\" : \"Jerry\" }]}";
+ String expected = "<?xml version=\"1.0\" ?><Person><kids><firstName>George</firstName></kids><kids><firstName>Jerry</firstName></kids></Person>";
+ helpTestJson(json, "Person", expected);
+ }
+
+ /**
+ * This shows an ambiguity with the approach in that array/object children of an array cannot be distinguished
+ * @throws Exception
+ */
+ @Test public void testJsonToXml5() throws Exception {
+ String json = "[[],{\"x\": 1},[]]";
+ String expected = "<?xml version=\"1.0\" ?><Person><Person></Person><Person><x>1</x></Person><Person></Person></Person>";
+ helpTestJson(json, "Person", expected);
+ }
+
@BeforeClass static public void setUpOnce() {
TimeZone.setDefault(TimeZone.getTimeZone("GMT-6:00"));
}
12 years, 11 months