teiid SVN: r2300 - trunk/connectors/salesforce-api/src/main/java/com/sforce/soap/partner.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2010-06-24 16:59:33 -0400 (Thu, 24 Jun 2010)
New Revision: 2300
Modified:
trunk/connectors/salesforce-api/src/main/java/com/sforce/soap/partner/SforceService.java
Log:
correcting the wrong name for the wsdl file
Modified: trunk/connectors/salesforce-api/src/main/java/com/sforce/soap/partner/SforceService.java
===================================================================
--- trunk/connectors/salesforce-api/src/main/java/com/sforce/soap/partner/SforceService.java 2010-06-24 20:58:59 UTC (rev 2299)
+++ trunk/connectors/salesforce-api/src/main/java/com/sforce/soap/partner/SforceService.java 2010-06-24 20:59:33 UTC (rev 2300)
@@ -24,7 +24,7 @@
@WebServiceClient(name = "SforceService", wsdlLocation = SforceService.PARTNER_WSDL,targetNamespace = "urn:partner.soap.sforce.com")
public class SforceService extends Service {
- public static final String PARTNER_WSDL = "partner_17.wsdl"; //$NON-NLS-1$
+ public static final String PARTNER_WSDL = "partner_v17.wsdl"; //$NON-NLS-1$
public final static URL WSDL_LOCATION;
public final static QName SERVICE = new QName("urn:partner.soap.sforce.com", "SforceService"); //$NON-NLS-1$ //$NON-NLS-2$
public final static QName Soap = new QName("urn:partner.soap.sforce.com", "Soap");//$NON-NLS-1$ //$NON-NLS-2$
14 years, 6 months
teiid SVN: r2299 - branches/7.0.x/connectors/salesforce-api/src/main/java/com/sforce/soap/partner.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2010-06-24 16:58:59 -0400 (Thu, 24 Jun 2010)
New Revision: 2299
Modified:
branches/7.0.x/connectors/salesforce-api/src/main/java/com/sforce/soap/partner/SforceService.java
Log:
Correcting the wrong name for the wsdl file
Modified: branches/7.0.x/connectors/salesforce-api/src/main/java/com/sforce/soap/partner/SforceService.java
===================================================================
--- branches/7.0.x/connectors/salesforce-api/src/main/java/com/sforce/soap/partner/SforceService.java 2010-06-24 20:08:33 UTC (rev 2298)
+++ branches/7.0.x/connectors/salesforce-api/src/main/java/com/sforce/soap/partner/SforceService.java 2010-06-24 20:58:59 UTC (rev 2299)
@@ -24,7 +24,7 @@
@WebServiceClient(name = "SforceService", wsdlLocation = SforceService.PARTNER_WSDL,targetNamespace = "urn:partner.soap.sforce.com")
public class SforceService extends Service {
- public static final String PARTNER_WSDL = "partner_17.wsdl"; //$NON-NLS-1$
+ public static final String PARTNER_WSDL = "partner_v17.wsdl"; //$NON-NLS-1$
public final static URL WSDL_LOCATION;
public final static QName SERVICE = new QName("urn:partner.soap.sforce.com", "SforceService"); //$NON-NLS-1$ //$NON-NLS-2$
public final static QName Soap = new QName("urn:partner.soap.sforce.com", "Soap");//$NON-NLS-1$ //$NON-NLS-2$
14 years, 6 months
teiid SVN: r2298 - in branches/7.0.x: build/kits/jboss-container and 8 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-06-24 16:08:33 -0400 (Thu, 24 Jun 2010)
New Revision: 2298
Added:
branches/7.0.x/build/kits/jboss-container/teiid-docs/
branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/
branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/JDOM-LICENSE.txt
branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/LICENSE-lgpl-2.1.txt
branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/MPL-1.1.html
branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/apache-2.0 - LICENSE-2.0.txt
branches/7.0.x/build/kits/jboss-container/teiid-releasenotes.html
branches/7.0.x/documentation/developer-guide/src/main/docbook/en-US/content/adminapi.xml
Modified:
branches/7.0.x/build/assembly/jboss-container/dist.xml
branches/7.0.x/documentation/admin-guide/src/main/docbook/en-US/content/appendix-c.xml
branches/7.0.x/documentation/admin-guide/src/main/docbook/en-US/content/vdb-deployment.xml
branches/7.0.x/documentation/developer-guide/pom.xml
branches/7.0.x/documentation/developer-guide/src/main/docbook/en-US/main.xml
branches/7.0.x/documentation/quick-start-example/pom.xml
branches/7.0.x/documentation/reference/src/main/docbook/en-US/content/sql_support.xml
Log:
Adding a relasenotes file (it will need to be updated with the final issue list prior to release), adding license in the teiid-docs for our third party jars, adding an adminapi section to the developer guide, adding the cache hint to the reference, and ensuring that all pdfs start with teiid_
Modified: branches/7.0.x/build/assembly/jboss-container/dist.xml
===================================================================
--- branches/7.0.x/build/assembly/jboss-container/dist.xml 2010-06-24 20:04:09 UTC (rev 2297)
+++ branches/7.0.x/build/assembly/jboss-container/dist.xml 2010-06-24 20:08:33 UTC (rev 2298)
@@ -57,11 +57,11 @@
<outputDirectory>teiid-docs</outputDirectory>
</file>
<file>
- <source>target/distribution/teiid-${version}-docs/quick-start-example/en-US/pdf/quick_start_example.pdf</source>
+ <source>target/distribution/teiid-${version}-docs/quick-start-example/en-US/pdf/teiid_quick_start_example.pdf</source>
<outputDirectory>teiid-docs</outputDirectory>
</file>
<file>
- <source>target/distribution/teiid-${version}-docs/developer-guide/en-US/pdf/developer_guide.pdf</source>
+ <source>target/distribution/teiid-${version}-docs/developer-guide/en-US/pdf/teiid_developer_guide.pdf</source>
<outputDirectory>teiid-docs</outputDirectory>
</file>
</files>
Added: branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/JDOM-LICENSE.txt
===================================================================
--- branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/JDOM-LICENSE.txt (rev 0)
+++ branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/JDOM-LICENSE.txt 2010-06-24 20:08:33 UTC (rev 2298)
@@ -0,0 +1,56 @@
+/*--
+
+ $Id: LICENSE.txt,v 1.11 2004/02/06 09:32:57 jhunter Exp $
+
+ Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions, and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions, and the disclaimer that follows
+ these conditions in the documentation and/or other materials
+ provided with the distribution.
+
+ 3. The name "JDOM" must not be used to endorse or promote products
+ derived from this software without prior written permission. For
+ written permission, please contact <request_AT_jdom_DOT_org>.
+
+ 4. Products derived from this software may not be called "JDOM", nor
+ may "JDOM" appear in their name, without prior written permission
+ from the JDOM Project Management <request_AT_jdom_DOT_org>.
+
+ In addition, we request (but do not require) that you include in the
+ end-user documentation provided with the redistribution and/or in the
+ software itself an acknowledgement equivalent to the following:
+ "This product includes software developed by the
+ JDOM Project (http://www.jdom.org/)."
+ Alternatively, the acknowledgment may be graphical using the logos
+ available at http://www.jdom.org/images/logos.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many
+ individuals on behalf of the JDOM Project and was originally
+ created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
+ Brett McLaughlin <brett_AT_jdom_DOT_org>. For more information
+ on the JDOM Project, please see <http://www.jdom.org/>.
+
+ */
+
Property changes on: branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/JDOM-LICENSE.txt
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/LICENSE-lgpl-2.1.txt
===================================================================
--- branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/LICENSE-lgpl-2.1.txt (rev 0)
+++ branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/LICENSE-lgpl-2.1.txt 2010-06-24 20:08:33 UTC (rev 2298)
@@ -0,0 +1,504 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
Property changes on: branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/LICENSE-lgpl-2.1.txt
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/MPL-1.1.html
===================================================================
--- branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/MPL-1.1.html (rev 0)
+++ branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/MPL-1.1.html 2010-06-24 20:08:33 UTC (rev 2298)
@@ -0,0 +1,389 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en"><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+
+
+ <title>Mozilla Public License version 1.1</title>
+ <style type="text/css">
+ .very-strong{
+ text-transform:uppercase;
+ }
+ dt{
+ font-weight:bold;
+ }
+ dd p{
+ margin:0;
+ }
+ </style>
+</head><body>
+ <p><small>(<a href="http://www.mozilla.org/MPL/MPL-1.1.txt">Plain text version</a>)</small></p>
+ <h1>Mozilla Public License Version 1.1</h1>
+ <h2 id="section-1">1. Definitions.</h2>
+ <dl>
+ <dt id="section-1.0.1">1.0.1. "Commercial Use"
+ </dt><dd>means distribution or otherwise making the Covered Code available to a third party.
+ </dd><dt id="section-1.1">1.1. "Contributor"
+ </dt><dd>means each entity that creates or contributes to the creation of Modifications.
+ </dd><dt id="section-1.2">1.2. "Contributor Version"
+ </dt><dd>means the combination of the Original Code, prior Modifications used by a Contributor,
+ and the Modifications made by that particular Contributor.
+ </dd><dt id="section-1.3">1.3. "Covered Code"
+ </dt><dd>means the Original Code or Modifications or the combination of the Original Code and
+ Modifications, in each case including portions thereof.
+ </dd><dt id="section-1.4">1.4. "Electronic Distribution Mechanism"
+ </dt><dd>means a mechanism generally accepted in the software development community for the
+ electronic transfer of data.
+ </dd><dt id="section-1.5">1.5. "Executable"
+ </dt><dd>means Covered Code in any form other than Source Code.
+ </dd><dt id="section-1.6">1.6. "Initial Developer"
+ </dt><dd>means the individual or entity identified as the Initial Developer in the Source Code
+ notice required by <a href="#exhibit-a">Exhibit A</a>.
+ </dd><dt id="section-1.7">1.7. "Larger Work"
+ </dt><dd>means a work which combines Covered Code or portions thereof with code not governed
+ by the terms of this License.
+ </dd><dt id="section-1.8">1.8. "License"
+ </dt><dd>means this document.
+ </dd><dt id="section-1.8.1">1.8.1. "Licensable"
+ </dt><dd>means having the right to grant, to the maximum extent possible, whether at the
+ time of the initial grant or subsequently acquired, any and all of the rights
+ conveyed herein.
+ </dd><dt id="section-1.9">1.9. "Modifications"
+ </dt><dd>
+ <p>means any addition to or deletion from the substance or structure of either the
+ Original Code or any previous Modifications. When Covered Code is released as a
+ series of files, a Modification is:
+ </p><ol type="a">
+ <li id="section-1.9-a">Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+ </li><li id="section-1.9-b">Any new file that contains any part of the Original Code or
+ previous Modifications.
+ </li></ol>
+ </dd><dt id="section-1.10">1.10. "Original Code"
+ </dt><dd>means Source Code of computer software code which is described in the Source Code
+ notice required by <a href="#exhibit-a">Exhibit A</a> as Original Code, and which,
+ at the time of its release under this License is not already Covered Code governed
+ by this License.
+ </dd><dt id="section-1.10.1">1.10.1. "Patent Claims"
+ </dt><dd>means any patent claim(s), now owned or hereafter acquired, including without
+ limitation, method, process, and apparatus claims, in any patent Licensable by
+ grantor.
+ </dd><dt id="section-1.11">1.11. "Source Code"
+ </dt><dd>means the preferred form of the Covered Code for making modifications to it,
+ including all modules it contains, plus any associated interface definition files,
+ scripts used to control compilation and installation of an Executable, or source
+ code differential comparisons against either the Original Code or another well known,
+ available Covered Code of the Contributor's choice. The Source Code can be in a
+ compressed or archival form, provided the appropriate decompression or de-archiving
+ software is widely available for no charge.
+ </dd><dt id="section-1.12">1.12. "You" (or "Your")
+ </dt><dd>means an individual or a legal entity exercising rights under, and complying with
+ all of the terms of, this License or a future version of this License issued under
+ <a href="#section-6.1">Section 6.1.</a> For legal entities, "You" includes any entity
+ which controls, is controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or otherwise, or (b)
+ ownership of more than fifty percent (50%) of the outstanding shares or beneficial
+ ownership of such entity.
+ </dd></dl>
+ <h2 id="section-2">2. Source Code License.</h2>
+ <h3 id="section-2.1">2.1. The Initial Developer Grant.</h3>
+ <p>The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive
+ license, subject to third party intellectual property claims:
+ </p><ol type="a">
+ <li id="section-2.1-a">under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform,
+ sublicense and distribute the Original Code (or portions thereof) with or without
+ Modifications, and/or as part of a Larger Work; and
+ </li><li id="section-2.1-b">under Patents Claims infringed by the making, using or selling
+ of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or
+ otherwise dispose of the Original Code (or portions thereof).
+ </li><li id="section-2.1-c">the licenses granted in this Section 2.1
+ (<a href="#section-2.1-a">a</a>) and (<a href="#section-2.1-b">b</a>) are effective on
+ the date Initial Developer first distributes Original Code under the terms of this
+ License.
+ </li><li id="section-2.1-d">Notwithstanding Section 2.1 (<a href="#section-2.1-b">b</a>)
+ above, no patent license is granted: 1) for code that You delete from the Original Code;
+ 2) separate from the Original Code; or 3) for infringements caused by: i) the
+ modification of the Original Code or ii) the combination of the Original Code with other
+ software or devices.
+ </li></ol>
+ <h3 id="section-2.2">2.2. Contributor Grant.</h3>
+ <p>Subject to third party intellectual property claims, each Contributor hereby grants You
+ a world-wide, royalty-free, non-exclusive license
+ </p><ol type="a">
+ <li id="section-2.2-a">under intellectual property rights (other than patent or trademark)
+ Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and
+ distribute the Modifications created by such Contributor (or portions thereof) either on
+ an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger
+ Work; and
+ </li><li id="section-2.2-b">under Patent Claims infringed by the making, using, or selling of
+ Modifications made by that Contributor either alone and/or in combination with its
+ Contributor Version (or portions of such combination), to make, use, sell, offer for
+ sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor
+ (or portions thereof); and 2) the combination of Modifications made by that Contributor
+ with its Contributor Version (or portions of such combination).
+ </li><li id="section-2.2-c">the licenses granted in Sections 2.2
+ (<a href="#section-2.2-a">a</a>) and 2.2 (<a href="#section-2.2-b">b</a>) are effective
+ on the date Contributor first makes Commercial Use of the Covered Code.
+ </li><li id="section-2.2-d">Notwithstanding Section 2.2 (<a href="#section-2.2-b">b</a>)
+ above, no patent license is granted: 1) for any code that Contributor has deleted from
+ the Contributor Version; 2) separate from the Contributor Version; 3) for infringements
+ caused by: i) third party modifications of Contributor Version or ii) the combination of
+ Modifications made by that Contributor with other software (except as part of the
+ Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code
+ in the absence of Modifications made by that Contributor.
+ </li></ol>
+ <h2 id="section-3">3. Distribution Obligations.</h2>
+ <h3 id="section-3.1">3.1. Application of License.</h3>
+ <p>The Modifications which You create or to which You contribute are governed by the terms
+ of this License, including without limitation Section <a href="#section-2.2">2.2</a>. The
+ Source Code version of Covered Code may be distributed only under the terms of this License
+ or a future version of this License released under Section <a href="#section-6.1">6.1</a>,
+ and You must include a copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code version that alters or
+ restricts the applicable version of this License or the recipients' rights hereunder.
+ However, You may include an additional document offering the additional rights described in
+ Section <a href="#section-3.5">3.5</a>.
+ </p><h3 id="section-3.2">3.2. Availability of Source Code.</h3>
+ <p>Any Modification which You create or to which You contribute must be made available in
+ Source Code form under the terms of this License either on the same media as an Executable
+ version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic Distribution Mechanism,
+ must remain available for at least twelve (12) months after the date it initially became
+ available, or at least six (6) months after a subsequent version of that particular
+ Modification has been made available to such recipients. You are responsible for ensuring
+ that the Source Code version remains available even if the Electronic Distribution
+ Mechanism is maintained by a third party.
+ </p><h3 id="section-3.3">3.3. Description of Modifications.</h3>
+ <p>You must cause all Covered Code to which You contribute to contain a file documenting the
+ changes You made to create that Covered Code and the date of any change. You must include a
+ prominent statement that the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the Initial Developer in
+ (a) the Source Code, and (b) in any notice in an Executable version or related documentation
+ in which You describe the origin or ownership of the Covered Code.
+ </p><h3 id="section-3.4">3.4. Intellectual Property Matters</h3>
+ <h4 id="section-3.4-a">(a) Third Party Claims</h4>
+ <p>If Contributor has knowledge that a license under a third party's intellectual property
+ rights is required to exercise the rights granted by such Contributor under Sections
+ <a href="#section-2.1">2.1</a> or <a href="#section-2.2">2.2</a>, Contributor must include a
+ text file with the Source Code distribution titled "LEGAL" which describes the claim and the
+ party making the claim in sufficient detail that a recipient will know whom to contact. If
+ Contributor obtains such knowledge after the Modification is made available as described in
+ Section <a href="#section-3.2">3.2</a>, Contributor shall promptly modify the LEGAL file in
+ all copies Contributor makes available thereafter and shall take other steps (such as
+ notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who
+ received the Covered Code that new knowledge has been obtained.
+ </p><h4 id="section-3.4-b">(b) Contributor APIs</h4>
+ <p>If Contributor's Modifications include an application programming interface and Contributor
+ has knowledge of patent licenses which are reasonably necessary to implement that
+ <abbr>API</abbr>, Contributor must also include this information in the
+ <strong class="very-strong">legal</strong> file.
+ </p><h4 id="section-3.4-c">(c) Representations.</h4>
+ <p>Contributor represents that, except as disclosed pursuant to Section 3.4
+ (<a href="#section-3.4-a">a</a>) above, Contributor believes that Contributor's Modifications
+ are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the
+ rights conveyed by this License.
+ </p><h3 id="section-3.5">3.5. Required Notices.</h3>
+ <p>You must duplicate the notice in <a href="#exhibit-a">Exhibit A</a> in each file of the
+ Source Code. If it is not possible to put such notice in a particular Source Code file due to
+ its structure, then You must include such notice in a location (such as a relevant directory)
+ where a user would be likely to look for such a notice. If You created one or more
+ Modification(s) You may add your name as a Contributor to the notice described in
+ <a href="#exhibit-a">Exhibit A</a>. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership rights relating to
+ Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity
+ or liability obligations to one or more recipients of Covered Code. However, You may do so
+ only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You
+ must make it absolutely clear than any such warranty, support, indemnity or liability
+ obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer
+ and every Contributor for any liability incurred by the Initial Developer or such Contributor
+ as a result of warranty, support, indemnity or liability terms You offer.
+ </p><h3 id="section-3.6">3.6. Distribution of Executable Versions.</h3>
+ <p>You may distribute Covered Code in Executable form only if the requirements of Sections
+ <a href="#section-3.1">3.1</a>, <a href="#section-3.2">3.2</a>,
+ <a href="#section-3.3">3.3</a>, <a href="#section-3.4">3.4</a> and
+ <a href="#section-3.5">3.5</a> have been met for that Covered Code, and if You include a
+ notice stating that the Source Code version of the Covered Code is available under the terms
+ of this License, including a description of how and where You have fulfilled the obligations
+ of Section <a href="#section-3.2">3.2</a>. The notice must be conspicuously included in any
+ notice in an Executable version, related documentation or collateral in which You describe
+ recipients' rights relating to the Covered Code. You may distribute the Executable version of
+ Covered Code or ownership rights under a license of Your choice, which may contain terms
+ different from this License, provided that You are in compliance with the terms of this
+ License and that the license for the Executable version does not attempt to limit or alter the
+ recipient's rights in the Source Code version from the rights set forth in this License. If
+ You distribute the Executable version under a different license You must make it absolutely
+ clear that any terms which differ from this License are offered by You alone, not by the
+ Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and
+ every Contributor for any liability incurred by the Initial Developer or such Contributor as
+ a result of any such terms You offer.
+ </p><h3 id="section-3.7">3.7. Larger Works.</h3>
+ <p>You may create a Larger Work by combining Covered Code with other code not governed by the
+ terms of this License and distribute the Larger Work as a single product. In such a case,
+ You must make sure the requirements of this License are fulfilled for the Covered Code.
+ </p><h2 id="section-4">4. Inability to Comply Due to Statute or Regulation.</h2>
+ <p>If it is impossible for You to comply with any of the terms of this License with respect to
+ some or all of the Covered Code due to statute, judicial order, or regulation then You must:
+ (a) comply with the terms of this License to the maximum extent possible; and (b) describe
+ the limitations and the code they affect. Such description must be included in the
+ <strong class="very-strong">legal</strong> file described in Section
+ <a href="#section-3.4">3.4</a> and must be included with all distributions of the Source Code.
+ Except to the extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to understand it.
+ </p><h2 id="section-5">5. Application of this License.</h2>
+ <p>This License applies to code to which the Initial Developer has attached the notice in
+ <a href="#exhibit-a">Exhibit A</a> and to related Covered Code.
+ </p><h2 id="section-6">6. Versions of the License.</h2>
+ <h3 id="section-6.1">6.1. New Versions</h3>
+ <p>Netscape Communications Corporation ("Netscape") may publish revised and/or new versions
+ of the License from time to time. Each version will be given a distinguishing version number.
+ </p><h3 id="section-6.2">6.2. Effect of New Versions</h3>
+ <p>Once Covered Code has been published under a particular version of the License, You may
+ always continue to use it under the terms of that version. You may also choose to use such
+ Covered Code under the terms of any subsequent version of the License published by Netscape.
+ No one other than Netscape has the right to modify the terms applicable to Covered Code
+ created under this License.
+ </p><h3 id="section-6.3">6.3. Derivative Works</h3>
+ <p>If You create or use a modified version of this License (which you may only do in order to
+ apply it to code which is not already Covered Code governed by this License), You must (a)
+ rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL",
+ "NPL" or any confusingly similar phrase do not appear in your license (except to note that
+ your license differs from this License) and (b) otherwise make it clear that Your version of
+ the license contains terms which differ from the Mozilla Public License and Netscape Public
+ License. (Filling in the name of the Initial Developer, Original Code or Contributor in the
+ notice described in <a href="#exhibit-a">Exhibit A</a> shall not of themselves be deemed to
+ be modifications of this License.)
+ </p><h2 id="section-7">7. <strong class="very-strong">Disclaimer of warranty</strong></h2>
+ <p><strong class="very-strong">Covered code is provided under this license on an "as is"
+ basis, without warranty of any kind, either expressed or implied, including, without
+ limitation, warranties that the covered code is free of defects, merchantable, fit for a
+ particular purpose or non-infringing. The entire risk as to the quality and performance of
+ the covered code is with you. Should any covered code prove defective in any respect, you
+ (not the initial developer or any other contributor) assume the cost of any necessary
+ servicing, repair or correction. This disclaimer of warranty constitutes an essential part
+ of this license. No use of any covered code is authorized hereunder except under this
+ disclaimer.</strong>
+ </p><h2 id="section-8">8. Termination</h2>
+ <p id="section-8.1">8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure such breach
+ within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which
+ are properly granted shall survive any termination of this License. Provisions which, by
+ their nature, must remain in effect beyond the termination of this License shall survive.
+ </p><p id="section-8.2">8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declatory judgment actions) against Initial Developer or a Contributor
+ (the Initial Developer or Contributor against whom You file such action is referred to
+ as "Participant") alleging that:
+ </p><ol type="a">
+ <li id="section-8.2-a">such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such Participant to You under
+ Sections <a href="#section-2.1">2.1</a> and/or <a href="#section-2.2">2.2</a> of this
+ License shall, upon 60 days notice from Participant terminate prospectively, unless if
+ within 60 days after receipt of notice You either: (i) agree in writing to pay
+ Participant a mutually agreeable reasonable royalty for Your past and future use of
+ Modifications made by such Participant, or (ii) withdraw Your litigation claim with
+ respect to the Contributor Version against such Participant. If within 60 days of
+ notice, a reasonable royalty and payment arrangement are not mutually agreed upon in
+ writing by the parties or the litigation claim is not withdrawn, the rights granted by
+ Participant to You under Sections <a href="#section-2.1">2.1</a> and/or
+ <a href="#section-2.2">2.2</a> automatically terminate at the expiration of the 60 day
+ notice period specified above.
+ </li><li id="section-8.2-b">any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then any rights
+ granted to You by such Participant under Sections 2.1(<a href="#section-2.1-b">b</a>)
+ and 2.2(<a href="#section-2.2-b">b</a>) are revoked effective as of the date You first
+ made, used, sold, distributed, or had made, Modifications made by that Participant.
+ </li></ol>
+ <p id="section-8.3">8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or indirectly infringes
+ any patent where such claim is resolved (such as by license or settlement) prior to the
+ initiation of patent infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections <a href="#section-2.1">2.1</a> or
+ <a href="#section-2.2">2.2</a> shall be taken into account in determining the amount or
+ value of any payment or license.
+ </p><p id="section-8.4">8.4. In the event of termination under Sections
+ <a href="#section-8.1">8.1</a> or <a href="#section-8.2">8.2</a> above, all end user
+ license agreements (excluding distributors and resellers) which have been validly
+ granted by You or any distributor hereunder prior to termination shall survive
+ termination.
+ </p><h2 id="section-9">9. <strong class="very-strong">Limitation of liability</strong></h2>
+ <p><strong class="very-strong">Under no circumstances and under no legal theory, whether
+ tort (including negligence), contract, or otherwise, shall you, the initial developer,
+ any other contributor, or any distributor of covered code, or any supplier of any of
+ such parties, be liable to any person for any indirect, special, incidental, or
+ consequential damages of any character including, without limitation, damages for loss
+ of goodwill, work stoppage, computer failure or malfunction, or any and all other
+ commercial damages or losses, even if such party shall have been informed of the
+ possibility of such damages. This limitation of liability shall not apply to liability
+ for death or personal injury resulting from such party's negligence to the extent
+ applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion
+ or limitation of incidental or consequential damages, so this exclusion and limitation
+ may not apply to you.</strong>
+ </p><h2 id="section-10">10. <abbr title="United States">U.S.</abbr> government end users</h2>
+ <p>The Covered Code is a "commercial item," as that term is defined in 48
+ <abbr>C.F.R.</abbr> 2.101 (<abbr title="October">Oct.</abbr> 1995), consisting of
+ "commercial computer software" and "commercial computer software documentation," as such
+ terms are used in 48 <abbr>C.F.R.</abbr> 12.212 (<abbr title="September">Sept.</abbr>
+ 1995). Consistent with 48 <abbr>C.F.R.</abbr> 12.212 and 48 <abbr>C.F.R.</abbr>
+ 227.7202-1 through 227.7202-4 (June 1995), all <abbr>U.S.</abbr> Government End Users
+ acquire Covered Code with only those rights set forth herein.
+ </p><h2 id="section-11">11. Miscellaneous</h2>
+ <p>This License represents the complete agreement concerning subject matter hereof. If
+ any provision of this License is held to be unenforceable, such provision shall be
+ reformed only to the extent necessary to make it enforceable. This License shall be
+ governed by California law provisions (except to the extent applicable law, if any,
+ provides otherwise), excluding its conflict-of-law provisions. With respect to
+ disputes in which at least one party is a citizen of, or an entity chartered or
+ registered to do business in the United States of America, any litigation relating to
+ this License shall be subject to the jurisdiction of the Federal Courts of the
+ Northern District of California, with venue lying in Santa Clara County, California,
+ with the losing party responsible for costs, including without limitation, court
+ costs and reasonable attorneys' fees and expenses. The application of the United
+ Nations Convention on Contracts for the International Sale of Goods is expressly
+ excluded. Any law or regulation which provides that the language of a contract
+ shall be construed against the drafter shall not apply to this License.
+ </p><h2 id="section-12">12. Responsibility for claims</h2>
+ <p>As between Initial Developer and the Contributors, each party is responsible for
+ claims and damages arising, directly or indirectly, out of its utilization of rights
+ under this License and You agree to work with Initial Developer and Contributors to
+ distribute such responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.
+ </p><h2 id="section-13">13. Multiple-licensed code</h2>
+ <p>Initial Developer may designate portions of the Covered Code as
+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits
+ you to utilize portions of the Covered Code under Your choice of the <abbr>MPL</abbr>
+ or the alternative licenses, if any, specified by the Initial Developer in the file
+ described in <a href="#exhibit-a">Exhibit A</a>.
+ </p><h2 id="exhibit-a">Exhibit A - Mozilla Public License.</h2>
+ <pre>"The contents of this file are subject to the Mozilla Public License
+Version 1.1 (the "License"); you may not use this file except in
+compliance with the License. You may obtain a copy of the License at
+http://www.mozilla.org/MPL/
+
+Software distributed under the License is distributed on an "AS IS"
+basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+License for the specific language governing rights and limitations
+under the License.
+
+The Original Code is ______________________________________.
+
+The Initial Developer of the Original Code is ________________________.
+Portions created by ______________________ are Copyright (C) ______
+_______________________. All Rights Reserved.
+
+Contributor(s): ______________________________________.
+
+Alternatively, the contents of this file may be used under the terms
+of the _____ license (the "[___] License"), in which case the
+provisions of [______] License are applicable instead of those
+above. If you wish to allow use of your version of this file only
+under the terms of the [____] License and not to allow others to use
+your version of this file under the MPL, indicate your decision by
+deleting the provisions above and replace them with the notice and
+other provisions required by the [___] License. If you do not delete
+the provisions above, a recipient may use your version of this file
+under either the MPL or the [___] License."</pre>
+ <p>NOTE: The text of this Exhibit A may differ slightly from the text of
+ the notices in the Source Code files of the Original Code. You should
+ use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.
+</p></body></html>
\ No newline at end of file
Property changes on: branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/MPL-1.1.html
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/apache-2.0 - LICENSE-2.0.txt
===================================================================
--- branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/apache-2.0 - LICENSE-2.0.txt (rev 0)
+++ branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/apache-2.0 - LICENSE-2.0.txt 2010-06-24 20:08:33 UTC (rev 2298)
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
Property changes on: branches/7.0.x/build/kits/jboss-container/teiid-docs/licenses/apache-2.0 - LICENSE-2.0.txt
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: branches/7.0.x/build/kits/jboss-container/teiid-releasenotes.html
===================================================================
--- branches/7.0.x/build/kits/jboss-container/teiid-releasenotes.html (rev 0)
+++ branches/7.0.x/build/kits/jboss-container/teiid-releasenotes.html 2010-06-24 20:08:33 UTC (rev 2298)
@@ -0,0 +1,699 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Teiid 7.0 Final Release Notes</TITLE>
+ <META NAME="CHANGEDBY" CONTENT="Steve Hawkins">
+ </STYLE>
+</HEAD>
+<BODY LANG="en-US" DIR="LTR">
+<P><A HREF="http://www.teiid.org/"><IMG SRC="https://www.jboss.org/dms/teiid/images/teiid_banner.png" NAME="graphics1" ALT="Teiid" ALIGN=BOTTOM WIDTH=800></A>
+
+<H1>Teiid 7.0 Final Release Notes</H1>
+<P>Teiid 7.0 is a major redesign of the project containing many new
+features.
+
+<H2>Overview</H2>
+<UL>
+ <LI><A HREF="#Highlights">Highlights</A>
+ <LI><A HREF="#Compatibility">Compatibility Issues</A>
+ <LI><A HREF="#Configuration">Configuration Issues</A>
+ <LI><A HREF="#Other">Other Issues</A>
+ <LI><A HREF="#LibraryUpdates">Thirdparty Library Updates</A>
+ <LI><A HREF="#Details">Detailed Release Notes</A>
+ <LI><A HREF="#Documentation">Additional Docs and Help</A>
+ <LI><A HREF="#Licenses">Licenses</A>
+ <LI><A HREF="#About">About JBoss</A>
+</UL>
+<H2><A NAME="Highlights"></A>Highlights</H2>
+<UL>
+ <LI><B>JBoss AS Integration</B> - Teiid now requires a <a href="http://www.jboss.org/jbossas/downloads.html">JBoss AS 5.1</a> instance.
+ This change allows Teiid to leverage many AS/MC features, including transaction management, JCA, hot file drop VDB deployment, and the profile service for configuration.
+ <LI><B>New Admin Console</B> - This
+ release includes a preview release of our new administration
+ console. See it's <A HREF="http://community.jboss.org/wiki/TeiidPluginforMonitoringandConfigurationu...">feature
+ overview</A>. Once Teiid is installed, the Teiid Admin Console is automatically contributed to the JBoss Admin Console.
+ <LI><B>Translators and JCA components</B>
+ - This release separates the old connector API into light-weight
+ Translators and JCA components. This greatly simplifies the process
+ of adding new integration sources to Teiid, since it cleanly separates container provided functionality (JCA) from the Teiid specific
+ classes knwon as a Translator. See the <a href="teiid-docs/teiid_developers_guide.pdf">Developer's Guide</a> for more information.
+ <LI><B>Text Integration</B> - Structured text file processing is
+ now handled by the TEXTTABLE table function and the .
+ <LI><B>SQL/XML</B> - Nearly all of SQL/XML 2003 support has been
+ added, as well as XMLTABLE and XMLQUERY from SQL/XML 2006.
+ <LI><B>Web Services Integration</B> - XML/Relational logic has
+ been replaced by the SQL/XML XMLTABLE and web services execution is
+ now done through the WS Translator/WS Resource Adapter.
+ <LI><B>Expanded Dynamic VDB Support</B> - Every source type
+ except for LDAP can now be integrated in a Dynamic VDB.
+ <LI><B>Other SQL Support</B> - Queries can now contain nested tables
+ that allow for correlated variables to preceding from clause items. Expressions are supported in the order by clause.
+ Double quoted identifiers are allowed by default. Added the functions to_bytes, to_chars, and querystring.
+ ResultSet caching can now be utilized with the /* cache */ query hint.
+ <LI><B>Improved Buffering</B> - Forward only cursors will typically not buffer results on the server. Algorithms for
+ storing and retrieving buffers have also been improved.
+</UL>
+
+<h2><a name="Compatibility">Compatibility Issues</a></h2>
+<h4>from 6.2</h4>
+<ul>
+ <li>The connector API has changed substantially. Custom connectors need to be retargeted to the new Translator API. See <a href="https://jira.jboss.org/browse/TEIID-1003">TEIID-1003</a> and the <a href="teiid-docs/teiid_developers_guide.pdf">Developer's Guide</a> for more information.
+ <li>Connector bindings are no longer valid. Use the Designer Tooling or see the AdminShell download for a migration utility.
+ <li>Calling out to web services and xml processing has been dramatically simplified and improved, but is a breaking change from prior releases.
+ XML/Relational processing has been replaced by XMLTABLE, retrieving XML from file has been replaced by the File Translator/Resource Adapter, and
+ web service calls have been replaced by the WS Translator/Resource Adapter. See <a href="https://jira.jboss.org/browse/TEIID-1118">TEIID-1118</a>, <a href="https://jira.jboss.org/browse/TEIID-1114">TEIID-1114</a>, and the <a href="teiid-docs/teiid_reference.pdf">Reference</a> guide for more information.
+ <li>The direct usage of XQuery has been replaced with the XMLQuery function.
+ <li>The text connector file processing has been replaced with the TEXTTABLE function. See <a href="https://jira.jboss.org/browse/TEIID-1102">TEIID-1102</a> and the <a href="teiid-docs/teiid_reference.pdf">Reference</a> guide for more information
+ <li>Double quoted values are now parsed as identifiers by default. See <a href="https://jira.jboss.org/browse/TEIID-145">TEIID-145</a> and the <a href="teiid-docs/teiid_reference.pdf">Reference</a> guide for more information.
+ <li>The system information schema has changed from System to SYS. The tables and table structures have also changed. See <a href="https://jira.jboss.org/browse/TEIID-871">TEIID-871</a> and the <a href="teiid-docs/teiid_reference.pdf">Reference</a> guide for more information.
+ <li>Client control over query plans has changed. OPTION PLANONLY, DEBUG, and SHOWPLAN are no longer allowed. This behavior should not be controlled by the SET statement, SET SHOWPLAN (ON|OFF|DEBUG) and SET NOEXEC (ON|OFF). Usage of the client PlanNode class will also need to be updated.
+ <li>Teiid specific JDBC client interfaces and methods have changed. In general these custom features have mostly been moved to other more standard locations or been removed. See <a href="https://jira.jboss.org/browse/TEIID-1020">TEIID-1020</a> and the <a href="teiid-docs/teiid_client_developers_guide.pdf">Client Developers</a> guide for more information.
+ <li>Teiid's reserved words have changed. Many of the Teiid specific reseverd words have become non-reserved words. All of SQL Foundation and SQL/MED 2003, and SQL/XML from SQL 2006 reserved words have been added as reserved words. It is generally required to double quote all reserved words. It is advisable to double quote all non-reserved words as well.
+ <li>The AdminApi has been redesigned for use with the new Translator/JCA split and for deployment in JBoss AS.
+ <li>The AdminShell is based on Groovy. Most BeanShell syntax is also valid in Groovy, but there are extensive changes in the AdminAPI that may necessitate rewriting scripts.
+ <li>OPTION NO CACHE <table list> will now only by-pass cache for the given tables at their immediate view layer. Previously all caches would have transitively been skipped. See <a href="https://jira.jboss.org/browse/TEIID-900">TEIID-900</a> for more information.
+ <li>Nan and +-Infinity are no longer allowed as numerical results by default. This may be changed via the system property org.teiid.allowNanInfinity.
+ <li>The scale of BigDecimal values is now adjusted to allow for more intuitive results. Conversion from floating numeric types will preserve the approximate scale and division results will allow for additional scale. See <a href="https://jira.jboss.org/browse/TEIID-159">TEIID-159</a> for more information.
+ <li>The 7.0 client is not compatible with 6.x or vice versa. It is expected that 7.0 clients will be compatible with 7.x releases for standard JDBC operations.
+</ul>
+
+<h2><a name="Configuration">Configuration Issues</a></h2>
+
+See the See the <a href="teiid-docs/teiid_admin_guide.pdf">Admin Guide</a> for more on configuration and installation.
+
+<h4>from 6.2</h4>
+<ul>
+ <li>A JBoss AS instance is now required. Embedded mode is also currently not supported.</li>
+ <li>Engine configuration is now handled through the admin console or deploy/teiid/teiid-jboss-beans.xml
+ <li>Logging is now done through the container's log4j instance. Any Teiid specific logging changes, see the conf/jboss-teiid-log4j.xml, need to be incorporated into the master jboss-log4j.xml.
+</ul>
+
+<h2><a name="Other">Other Issues</a></h2>
+
+<h4>From 6.2</h4>
+<ul>
+ <li>Start time is now significantly longer due to the container deployment. However many operations can be performed on configruation files that will trigger a redeployment without the need for a restart.
+ <li>Parallel execution of source queries within a query plan has been temporarily disabled.
+</ul>
+
+<h2><a name="LibraryUpdates">Thirdparty Library Updates</a></h2>
+
+The following components have been updated:
+<ul>
+ <li>Netty was upgraded to 3.1.5
+ <li>Saxon was upgraded to 9.1.0.8
+ <li>A 5.1 container's version of Arjuna is newer than what was previously included in Teiid 6.x.
+ <li>Various other dependencies have been removed as they are no longer needed or now provided by the container.
+</ul>
+
+<h2><a name="Details">Detailed Release Notes</a></h2>
+ Detailed Release Notes - Teiid - Version 7.0
+
+<h2> Bug
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-26'>TEIID-26</a>] - Need to add logic to determine if a command is deterministic
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-41'>TEIID-41</a>] - Non selectable columns should be omitted from metadata
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-46'>TEIID-46</a>] - Fully-qualified names should not be required when referencing virtual procedures that have unique unqualified names
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-93'>TEIID-93</a>] - when a fairly complex query is pushed down to the XML-HTTP Connector, it fails
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-409'>TEIID-409</a>] - server port number should be checked for availability when creating a second mmprocess
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-430'>TEIID-430</a>] - Root access needs enforced for subsystem admin api edits of security properties
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-465'>TEIID-465</a>] - Error message in server process log refers to binding by UUID, not name
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-563'>TEIID-563</a>] - Exporting the configuration, via console or utility, the configuration system properties now contains everything in the system, not just defined by the Configuration component type
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-608'>TEIID-608</a>] - Prevent duplicate hostcontroller launches
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-610'>TEIID-610</a>] - Deleted connector bindings remain in the system state
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-704'>TEIID-704</a>] - Missing message for key "MembershipServiceImpl.Logon_failed"
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-728'>TEIID-728</a>] - Pushing blank-padded literals to source may fail to return correct results
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-792'>TEIID-792</a>] - Index connector does not accept certian criteria forms
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-803'>TEIID-803</a>] - The AdminAPI connector binding name needs to be assigned the name assigned by the designer
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-830'>TEIID-830</a>] - AdminShell row count is not accurate
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-848'>TEIID-848</a>] - Insert with out of order variables and query expression is incorrect
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-849'>TEIID-849</a>] - subquery as input to procedure fails
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-850'>TEIID-850</a>] - Misspellings in Teiid Reference Guide
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-852'>TEIID-852</a>] - Oracle timestamp to time conversion null handling
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-858'>TEIID-858</a>] - DependentSetCriteria not being replaced
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-865'>TEIID-865</a>] - WS-Relational SOAP Connector is sending empty SOAP-ACTION header.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-866'>TEIID-866</a>] - AdminShell is not able to handle SELECT * INTO #TEMP FROM foo; (statement does not return a result set)
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-867'>TEIID-867</a>] - Possibly Teiid embedded clients (Designer) not pinging query engine, causing session timeouts
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-875'>TEIID-875</a>] - DatabaseMetadata issues
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-876'>TEIID-876</a>] - Server Times Out Session Despite Configuration
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-879'>TEIID-879</a>] - validate min/max non-comparable
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-889'>TEIID-889</a>] - 2 CommonTransactionTests Hang, commented out for now
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-890'>TEIID-890</a>] - AdminShell issues
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-893'>TEIID-893</a>] - XML Formatting error in Dynamic VDB (.def) file presents to user as file not found
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-894'>TEIID-894</a>] - Query inexplicably failing Query Testing only with MySQL
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-895'>TEIID-895</a>] - Update the SalesForce API to version 17 (winter 10).
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-896'>TEIID-896</a>] - INSERT failing with SF connector on types other than a string
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-898'>TEIID-898</a>] - Named procedure parameter error message too terse.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-899'>TEIID-899</a>] - Virtual Procedure queries with input variables failing with "No value was available."
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-901'>TEIID-901</a>] - NPE encountered when doing an INSERT into SFDC Account table
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-904'>TEIID-904</a>] - Error executing the Procedural releational query with out a where clause
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-905'>TEIID-905</a>] - block clone method is incorrect
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-909'>TEIID-909</a>] - PropertiesUtils.resolveNestedProperties(Properties) goes in a loop
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-911'>TEIID-911</a>] - Prepared Batch Update against a view table fails with "Unable to evaluate $param/pos0: No value was available"
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-917'>TEIID-917</a>] - xml stream handling is inconsistent
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-919'>TEIID-919</a>] - Planner created incomplete identifiers when GROUP BY of inline view with UNION ALL
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-920'>TEIID-920</a>] - Dup removal doesn't respect desc ordering if all projected columns are sorted on
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-922'>TEIID-922</a>] - Teiid Quick Start Example documentation errors
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-923'>TEIID-923</a>] - Oracle queries with a TimeStamp in the WHERE clause are failing if multiple TimeStamps are used in "AND", "OR', and "IN" situations
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-925'>TEIID-925</a>] - dup removal results include duplicat rows
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-932'>TEIID-932</a>] - Misleading error message when using quotation marks: Parse error... encountered (
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-934'>TEIID-934</a>] - MySql Queries - SQL syntax error on pushdown queries when using functions like LPAD, REPLACE, etc
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-936'>TEIID-936</a>] - Query never returns from processing
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-939'>TEIID-939</a>] - MySQL nested set query pushdown failure
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-941'>TEIID-941</a>] - MOD function in Postgres push down is producing connector error
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-945'>TEIID-945</a>] - WS security tokens are configured but not provided to the service.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-947'>TEIID-947</a>] - UNION query with different datatypes on each side of UNION is producing inconsistent results
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-948'>TEIID-948</a>] - Spurious wake-up error with connector work item
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-949'>TEIID-949</a>] - Criteria on constant column with aggregate function doesn't push criteria down correctly
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-969'>TEIID-969</a>] - Time, date, and timestamp literals are being sent to Oracle as to_timestamp() regardless of their data type
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-973'>TEIID-973</a>] - Quick Start Guide / Examples needs to add derbyclient.jar to UDFs for previewing
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-974'>TEIID-974</a>] - XML-Relational connectors have trouble with reponse XMLs that contain DTD reference
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-981'>TEIID-981</a>] - Ability to cache XML documents
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-988'>TEIID-988</a>] - 3 argument locate function on postgres reports the wrong value
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-989'>TEIID-989</a>] - Pushdown query ORDER BY is not always ordering results properly on Sql2000
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1009'>TEIID-1009</a>] - BQT Pushdown query "ORDER BY" is not always ordering results properly
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1025'>TEIID-1025</a>] - Help incomplete for showPlan
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1036'>TEIID-1036</a>] - AdminShell & Migrate shell scripts should be executable
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1038'>TEIID-1038</a>] - SF connector fails to connect.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1042'>TEIID-1042</a>] - AdminShell/AdminAPI - deployVDB assumes the -vdb.xml file is in the server's deploy folder
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1043'>TEIID-1043</a>] - Invalid serialized attachments should be ingored.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1044'>TEIID-1044</a>] - Export connection factory does not always correct properties
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1046'>TEIID-1046</a>] - Component Name of the VDB is null through Profile Service
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1047'>TEIID-1047</a>] - Teiid host resolution should match that of the JBoss AS
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1051'>TEIID-1051</a>] - Make the Connector (type) and RAR name be the same
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1053'>TEIID-1053</a>] - NPE in Teiid JOPR when running control at vdb level - View VDB requests
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1054'>TEIID-1054</a>] - When running the control: View VDB Session, at the vdb level, the actions indicate its disabled
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1056'>TEIID-1056</a>] - Required Connector Properties Should Have A Default Value If They Are Marked As An Expert Property
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1057'>TEIID-1057</a>] - Calling getRequests() on RuntimeEngineDeployer Results in MethodNotFound
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1063'>TEIID-1063</a>] - PropertyDefinition.getPropertyTypeClassName() Should Always Return A Java Class Name
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1065'>TEIID-1065</a>] - PropertyDefinition.getDisplayName() Should Agree With The Display Name Shown In JON
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1067'>TEIID-1067</a>] - Managed connector connection factory always closes the physical connection.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1072'>TEIID-1072</a>] - XML-Relational connector sometimes uses same ResponseOut/ResponseIn value for different web service queries
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1073'>TEIID-1073</a>] - Logging not working in Teiid Jopr Plugin
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1076'>TEIID-1076</a>] - When running BQT tests, an Assertion error is seen when batches are being processed
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1083'>TEIID-1083</a>] - When running either control at the vdb level while the vdb is being access produces an exception
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1084'>TEIID-1084</a>] - Exception in BatchIterator
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1085'>TEIID-1085</a>] - AdminShell (Groovy) shows connectionName even after that connection has been disconnected
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1086'>TEIID-1086</a>] - Possible missing I18N bundle for AdminShell
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1088'>TEIID-1088</a>] - AdminShell deployVDB method prepends the path to server's deploy directory to VDB location
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1094'>TEIID-1094</a>] - XML literal input to HTTP-SOAP connector is being URL encoded
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1100'>TEIID-1100</a>] - Teiid Examples run.sh should be executable when extracted from archive
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1101'>TEIID-1101</a>] - Teiid Example PortfolioDS specifies a username & password for Derby source where none is required
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1108'>TEIID-1108</a>] - Receiving NPE when querying DynamicPortfolio VDB with more complicated query
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1109'>TEIID-1109</a>] - NPE Connecting to a Teiid DataSource (XA) Without Setting Expected Properties
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1110'>TEIID-1110</a>] - NPE Connecting to a Teiid DataSource (XA) as Anonymous User
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1115'>TEIID-1115</a>] - java.lang.IllegalStateException: Failed to find template for: translator-file while attempting to call Admin.getTemplatePropertyDefinitions("file")
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1116'>TEIID-1116</a>] - AdminConsole for DataServices indicates, by default, that SSL Enabled is true, but the teiid-jboss-beans.xml indicates sslEnabled is false
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1117'>TEIID-1117</a>] - When VDBis deleted the cached medata files are not cleaned up
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1119'>TEIID-1119</a>] - Trying to add new functions to be supported by a new connector and the Connector developers guide refers to the JDBCCapabilities class, which doesn't exist anymore. Have the steps changed to add a new scalar function?
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1121'>TEIID-1121</a>] - Fix the migrate utility for the Translator changes
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1122'>TEIID-1122</a>] - attempting to getTemplatePropertyDefinitions() for the DefaultDS or JMSDS are throwing Admin AdminComponentException exceptions. They need to get filtered out on API calls for Data Source info.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1125'>TEIID-1125</a>] - Re-connecting proxy may lead to error in execution
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1126'>TEIID-1126</a>] - Web Service VDB Execution Error
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1127'>TEIID-1127</a>] - java.lang.ClassCastException Executing Virtual Procedure from Web Service Model
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1128'>TEIID-1128</a>] - Invalid Resolver Error
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1129'>TEIID-1129</a>] - Unable to execute SQL Queries through VDB's with more than one model in it from Designer/DTP
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1130'>TEIID-1130</a>] - NPE when using exportVDB from adminshell
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1132'>TEIID-1132</a>] - Teiid Kit missing SalesForce JAR
+</li>
+</ul>
+
+<h2> Feature Request
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-145'>TEIID-145</a>] - Parse double quoted literals as identifiers by default
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-150'>TEIID-150</a>] - Improve nested loop (in merge join) matching
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-153'>TEIID-153</a>] - Support IS NULL criteria in the xml connector
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-155'>TEIID-155</a>] - Revisit TransformationMetadataFacade cache sizes
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-159'>TEIID-159</a>] - Modify our handling of BigDecimal division to use MathContext.DECIMAL128 as our rounding mode to improve scale and precision of results
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-162'>TEIID-162</a>] - Delete and update support in temp table
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-165'>TEIID-165</a>] - Connector support for more converts
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-168'>TEIID-168</a>] - Refine caching behavior
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-171'>TEIID-171</a>] - Add SQL/XML support
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-173'>TEIID-173</a>] - ProductAdmin role can deploy a vdb but cannot create connector bindings
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-180'>TEIID-180</a>] - Consider using Salesforce retrieve() rather than generic query() call for queries with IN criteria
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-183'>TEIID-183</a>] - user "or" and "in" criteria should generate multiple queries in some situations
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-186'>TEIID-186</a>] - Expose catalog information and props in Connector API metadata [PEC]
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-207'>TEIID-207</a>] - Forward and Backward Compatibility of MetaMatrix JDBC Driver
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-208'>TEIID-208</a>] - LDAP Connector should implement Connection.isAlive(), in order to properly report connection status when monitored
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-216'>TEIID-216</a>] - Query timeout should be enforced by the server
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-222'>TEIID-222</a>] - Procedural relational execution should support disjunctive criteria
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-236'>TEIID-236</a>] - Procedural access pattern
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-249'>TEIID-249</a>] - Need well-known multi-payload container
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-251'>TEIID-251</a>] - Support SQL 2003 order by with expressions
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-367'>TEIID-367</a>] - Add a validation step to security provider definition.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-371'>TEIID-371</a>] - System state should reflect the state and allow start/stop/restart of Membership Domains
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-404'>TEIID-404</a>] - 1-way and 2-way SSL to MMx must support different keystore file names within a cluster
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-533'>TEIID-533</a>] - HostController Process is redundent and should be removed
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-750'>TEIID-750</a>] - Add more filtering in the internal processing of queries so that hidden items do not requires fully qualified names to be used
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-807'>TEIID-807</a>] - Develop the new Teiid Console using JOPR for its core framework
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-822'>TEIID-822</a>] - Add hsql translator
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-833'>TEIID-833</a>] - Support tighter integration with container deployments
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-844'>TEIID-844</a>] - Implement metadata creation in the SalesForce connector.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-845'>TEIID-845</a>] - AdminShell needs to be able to produce and display a Query Plan
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-851'>TEIID-851</a>] - API improvements for custom connector development
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-873'>TEIID-873</a>] - Add support for quoted identifier aliases
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-881'>TEIID-881</a>] - SOAP Connector should expose property to control HTTP Header Transfer-Encoding: chunked
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-891'>TEIID-891</a>] - Add JDBC import logic to correct unsigned types
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-897'>TEIID-897</a>] - Create a new autowrap mode to replace pessimistic/optimistic
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-900'>TEIID-900</a>] - Refine option no cache behavior
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-906'>TEIID-906</a>] - Add support for a set statement
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-943'>TEIID-943</a>] - Fully implement client streaming of lobs/readers/streams
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-963'>TEIID-963</a>] - Need to add XPath 2.0 support for services in and out of MM
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-966'>TEIID-966</a>] - User (principal) name in MetaMatrix should be consistently the same string
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-980'>TEIID-980</a>] - Add ability to apply XSLT stylesheets at the datasource level
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1003'>TEIID-1003</a>] - Connector api language changes
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1005'>TEIID-1005</a>] - Update reserved words
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1007'>TEIID-1007</a>] - Remove unnecessary inline views over group bys
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1019'>TEIID-1019</a>] - Request ability to turn on/off Auto Staging tables
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1021'>TEIID-1021</a>] - Enable better support for mixed database encoding
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1029'>TEIID-1029</a>] - Provide sample scripts that show the use of the AdminAPI in an alternative scripting manner
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1033'>TEIID-1033</a>] - Add state to request metadata
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1039'>TEIID-1039</a>] - Provide a solution to 'merge' two VDBs
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1040'>TEIID-1040</a>] - Refine client control of query plans
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1045'>TEIID-1045</a>] - Provide a admin method to "export" a Data Source.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1052'>TEIID-1052</a>] - Replace beanshell based adminshell with Groovy
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1062'>TEIID-1062</a>] - Expose the Teiid Runtime Version as a ManagedOperation/ManagedProperty
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1071'>TEIID-1071</a>] - Modify validation errors element in schema for VDB configuration file to include attribute for location of error
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1075'>TEIID-1075</a>] - Separate Connector Binding into Translation Layer and Connection Layer
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1097'>TEIID-1097</a>] - Add support for nested table references
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1102'>TEIID-1102</a>] - Create a replacement for the text translator
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1105'>TEIID-1105</a>] - Add Translator Instance Information from the VDB to the VDB Configuration Tab
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1112'>TEIID-1112</a>] - Add getRequestsForVDB() Method on RuntimeEngine
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1118'>TEIID-1118</a>] - Provide alternative webservices calling ability
+</li>
+</ul>
+
+<h2> Quality Risk
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-254'>TEIID-254</a>] - Metadata query for procedure columns needs work
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-853'>TEIID-853</a>] - Dynamic command projection should be positional
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-869'>TEIID-869</a>] - Clean up metadata
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-874'>TEIID-874</a>] - Wiki documentation on SSL Encryption is misleading
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-880'>TEIID-880</a>] - SQL Server uniqueidentifier handling
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-915'>TEIID-915</a>] - Error results in illegalstateexception
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-916'>TEIID-916</a>] - Initial client socket timeout is too low under load
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-918'>TEIID-918</a>] - Change all package names to org.teiid
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-926'>TEIID-926</a>] - Reduce use of map look ups for projection
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1001'>TEIID-1001</a>] - Source string format for float/double/bigdecimal/timestamp can vary
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1004'>TEIID-1004</a>] - Check for common math exceptions
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1012'>TEIID-1012</a>] - Update logging contexts
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1015'>TEIID-1015</a>] - Move threading concerns to the engine
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1016'>TEIID-1016</a>] - Include documentation about system properties in server configuration
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1018'>TEIID-1018</a>] - Review all translator properties
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1020'>TEIID-1020</a>] - Remove the use of Teiid specific JDBC extensions
+</li>
+</ul>
+
+<h2> Task
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-278'>TEIID-278</a>] - Upgrade Axis2 to Axis2 1.4
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-673'>TEIID-673</a>] - Need to Document Alternate Means of Achieving Web Services and XML Usage Scenarios for Teiid
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-790'>TEIID-790</a>] - Teiid Server uses Sun JDK specific JMX server, thus portability to other JDKs is not possible
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-854'>TEIID-854</a>] - Remove the legacy "server" project from the SCM
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-868'>TEIID-868</a>] - Simplify handling of parse format date/time functions
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-878'>TEIID-878</a>] - Fix capabilities caching
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-902'>TEIID-902</a>] - Restructure planning
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-912'>TEIID-912</a>] - Add unit test methods from JBEDSP-1137: StackOverflowError when top level query uses the same symbol name and group alias that is in a second level query or sub-query
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-913'>TEIID-913</a>] - Refine buffer management
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-927'>TEIID-927</a>] - Remove the legacy JDBC Datasource and Driver classes
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-990'>TEIID-990</a>] - Remove the Axis library dependency on the XML Connectors
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-995'>TEIID-995</a>] - The management console should support deploying VDB to EDS
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1002'>TEIID-1002</a>] - Remove unnecessary sandbox connectors
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1023'>TEIID-1023</a>] - Chanage "MaxResultRows" Connector Property to default to "unlimited"
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1026'>TEIID-1026</a>] - Refine plan/annotation logic
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1037'>TEIID-1037</a>] - Document execution properties in the client developers guide.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1041'>TEIID-1041</a>] - Create a CTC kit to be used to deploy Teiid/EDS query testing across all supported platforms in the Hudson QA Lab
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1050'>TEIID-1050</a>] - Update the build process to use new Nexus Maven repository
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1074'>TEIID-1074</a>] - Make VDB work with Model based index files
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1098'>TEIID-1098</a>] - Add Long Running Query Limit Property to Teiid Engine Managed Component
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1099'>TEIID-1099</a>] - Update Jopr Plugin to Use Long Running Query Property and Method on Teiid Engine
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1111'>TEIID-1111</a>] - Add Teiid Version to Summary Page of Engine Resource in Teiid Jopr Plugin
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1120'>TEIID-1120</a>] - Provide single HTML page for all the documents
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1124'>TEIID-1124</a>] - Confusion with "java:" prefix in the DataSource from tooling
+</li>
+</ul>
+
+<h2> Thirdparty Change
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-938'>TEIID-938</a>] - MySql queries pushed down to the source producing error: Invalid conversion from type class com.metamatrix.common.types.BlobType with value 'javax.sql.rowset.serial.SerialBlob@1b1395dc' to type class java.lang.Character
+</li>
+</ul>
+
+<h2> Sub-task
+</h2>
+<ul>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-137'>TEIID-137</a>] - Remove the HTTPClient Usage from the XML Connector and use the Common XML Connector
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-138'>TEIID-138</a>] - Convert Common XML Connector to Axis2
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-143'>TEIID-143</a>] - Query should 'find' connector types and jars rather than have them predefined in the config.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-199'>TEIID-199</a>] - Integration with JBoss Identity project
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-218'>TEIID-218</a>] - Security URL properties handling
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-315'>TEIID-315</a>] - Add JDBC Connector developers guide
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-396'>TEIID-396</a>] - Authorization Provider can not deleted using the Admin API
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-429'>TEIID-429</a>] - Use DataSources in creating the ConnectorBindings instead of creating one using the Driver
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-441'>TEIID-441</a>] - Expand the requires restart property
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-464'>TEIID-464</a>] - Shared Installation Option
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-502'>TEIID-502</a>] - Allow Multiple UDF Definition Models
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-674'>TEIID-674</a>] - Document/test a Means of Top-down WSDL Consumption
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-675'>TEIID-675</a>] - Document/test a Means of Bottom-up Web Services in Teiid
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-676'>TEIID-676</a>] - Document/test a means of creating service that executes ad-hoc SQL commands inTeiid
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-678'>TEIID-678</a>] - Document/test Alternative Means to Achieve Current XML Document Scenarios
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-781'>TEIID-781</a>] - Move the CTC testing framework to the teiid community
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-782'>TEIID-782</a>] - Add the ability to test transactions to CTC testing client
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-788'>TEIID-788</a>] - Change internal handling of insert with query expression
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-789'>TEIID-789</a>] - Provide JMX access from remote computers
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-808'>TEIID-808</a>] - Revisit the prior issues with extending the JOPR JMX plugin and verify if the problems have been fixed
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-838'>TEIID-838</a>] - Runtime discovery of VDBs
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-859'>TEIID-859</a>] - Connector API must extend the JCA 1.5 API
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-861'>TEIID-861</a>] - All Teiid Connectors must be modified and packaged as JCA Connectors.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-862'>TEIID-862</a>] - Teiid engine needs to be exposed as a JCA Connector
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-863'>TEIID-863</a>] - Remove Trusted payload, credential map for authenticating connector sources
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-864'>TEIID-864</a>] - Need new deployment packing that works with JBoss AS or JBoss Embedded
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-870'>TEIID-870</a>] - Standardize the JDBC metadata
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-871'>TEIID-871</a>] - Refactor system vdb
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-877'>TEIID-877</a>] - Membership Domain Documentation is Out of Date
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-883'>TEIID-883</a>] - Convert model/group/element to schema/table/column
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-884'>TEIID-884</a>] - Calling restart on adminapi throws an exception
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-907'>TEIID-907</a>] - Add a sample connector template for starting a new connector development
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-910'>TEIID-910</a>] - Convert the Admin API implemention based on Profile Service
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-924'>TEIID-924</a>] - Remove metadataobjects
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-944'>TEIID-944</a>] - Provide a separate Admin connection
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-997'>TEIID-997</a>] - Investigate adding new metrics that added value for the user to monitor their servers
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-998'>TEIID-998</a>] - Define a new schema based VDB deployer xml (previously defined by ConfigurationInfo.def)
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1013'>TEIID-1013</a>] - Load the UDF based on the information provided in the vdb.xml
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1017'>TEIID-1017</a>] - Move defining the Data Roles to VDB deployer XML file. Map the roles to container roles
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1024'>TEIID-1024</a>] - Support conversion between clob and sql/xml
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1032'>TEIID-1032</a>] - Change nomenclature of "Connector Binding" to "Connection Factory"
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1068'>TEIID-1068</a>] - Provide a single Connector, that represents the DS and Teiid Connector for JDBC sources.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1069'>TEIID-1069</a>] - Admin API Data Source method are not needed
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1077'>TEIID-1077</a>] - Split all Connector projects to define their "Translator" modules and "Connection" modules
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1078'>TEIID-1078</a>] - Build annotation based configuration for the Connector Translation layer
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1079'>TEIID-1079</a>] - Provide deployer for the Translation Layer components.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1080'>TEIID-1080</a>] - Change Admin API, to support the Translation Layer and Connection layer concepts.
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1081'>TEIID-1081</a>] - Provide pre built "Translator" for all the popular data sources
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1087'>TEIID-1087</a>] - Add Function to Extract fragments from XML
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1089'>TEIID-1089</a>] - Combine the ExecutionFactory and Capabilities class into single class
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1113'>TEIID-1113</a>] - Change Get Request for VDB Operation to Call getRequestsForVDB() on the RuntimeEngine
+</li>
+<li>[<a href='https://jira.jboss.org/browse/TEIID-1114'>TEIID-1114</a>] - Add support for xmltable
+</li>
+</ul>
+
+
+<h2><a name="Documentation">Documentation and Help</a></h2>
+
+The <a href="http://www.jboss.org/teiid/">Teiid community project</a> is hosted on jboss.org.
+Documentation and help may be obtained from the local distribution under <a href="teiid-docs">teiid-docs</a> or the following locations.
+<ul>
+
+<li><a href="http://www.jboss.org/teiid/docs">Online Documentation</a></li>
+<li><a href="https://community.jboss.org/wiki/TheTeiidProject">Wiki</a></li>
+<li><a href="http://jira.jboss.org/jira/browse/TEIID">JIRA</a></li>
+<li><a href="http://community.jboss.org/en/teiid?view=discussions">Forums</a></li>
+</ul>
+
+
+<h2><a name="Licenses">Licenses</a></h2>
+
+<p>Teiid is licensed under the <a href="LICENSE-lgpl-2.1.txt">LGPL</a>. The
+license texts for Teiid and the thirdparty components it uses may be found in the teiid-docs/licenses
+directory of the distribution. <a href="teiid-docs/licenses">Browse
+Licenses</a>
+
+</p>
+
+<h2><a name="About">About JBoss, a
+division of Red Hat</a></h2>
+
+<p>JBoss, a division of <a href="http://www.redhat.com/jboss/">Red
+Hat</a>, is in the business of
+providing
+superior technical support to our customers. Our goal is to make
+Professional Open Source™ the <b>SAFE
+CHOICE</b>
+for you. We accomplish this by backing up our open source Java products
+with technical support services that are delivered by the core
+developers themselves. We can help you to train your staff and provide
+you with support at every stage of the application lifecycle - from
+development and integration through deployment and maintenance. Visit
+the <a href="http://www.jboss.com/services/index">JBoss
+Services</a> page for more
+information.</p>
+
+</BODY>
+</HTML>
\ No newline at end of file
Property changes on: branches/7.0.x/build/kits/jboss-container/teiid-releasenotes.html
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: branches/7.0.x/documentation/admin-guide/src/main/docbook/en-US/content/appendix-c.xml
===================================================================
--- branches/7.0.x/documentation/admin-guide/src/main/docbook/en-US/content/appendix-c.xml 2010-06-24 20:04:09 UTC (rev 2297)
+++ branches/7.0.x/documentation/admin-guide/src/main/docbook/en-US/content/appendix-c.xml 2010-06-24 20:08:33 UTC (rev 2298)
@@ -17,5 +17,11 @@
Value caching is used dynamically when buffer memory is running low to reuse identical values, but at a computational cost.
If there is memory available, you should first increase the buffer memory rather than disabling value caching.</para>
</listitem>
+ <listitem>
+ <para><emphasis>org.teiid.ansiQuotedIdentifiers</emphasis> - defaults to true.
+ Set to false to emulate Teiid 6.x and prior behavior of treating double quoted values without leading identifier parts as string literals, which is not
+ expected by the SQL specification.
+ </para>
+ </listitem>
</itemizedlist>
</appendix>
\ No newline at end of file
Modified: branches/7.0.x/documentation/admin-guide/src/main/docbook/en-US/content/vdb-deployment.xml
===================================================================
--- branches/7.0.x/documentation/admin-guide/src/main/docbook/en-US/content/vdb-deployment.xml 2010-06-24 20:04:09 UTC (rev 2297)
+++ branches/7.0.x/documentation/admin-guide/src/main/docbook/en-US/content/vdb-deployment.xml 2010-06-24 20:08:33 UTC (rev 2298)
@@ -126,8 +126,7 @@
<para>VDBs from prior release contain an older configuration file version that is no longer supported.
You can use the migration utility (bin/migrate.sh or bin/migrate.bat) supplied with the
<link linkend="adminshell">AdminShell</link> download
- to update these VDBs for use with Teiid 7. Note - XML and File based sources from previous releases are changed, so do not work
- as is. The VDB models need to be updated for this as these are breaking changes.</para>
+ to update these VDBs for use with Teiid 7. Note - XML and File based sources from previous releases have changed, and require manual changes to the VDB.</para>
</sect1>
</chapter>
\ No newline at end of file
Modified: branches/7.0.x/documentation/developer-guide/pom.xml
===================================================================
--- branches/7.0.x/documentation/developer-guide/pom.xml 2010-06-24 20:04:09 UTC (rev 2297)
+++ branches/7.0.x/documentation/developer-guide/pom.xml 2010-06-24 20:08:33 UTC (rev 2298)
@@ -51,7 +51,7 @@
<format>
<formatName>pdf</formatName>
<stylesheetResource>classpath:/xslt/org/jboss/pdf.xsl</stylesheetResource>
- <finalName>developer_guide.pdf</finalName>
+ <finalName>teiid_developer_guide.pdf</finalName>
</format>
<format>
<formatName>html_single</formatName>
Added: branches/7.0.x/documentation/developer-guide/src/main/docbook/en-US/content/adminapi.xml
===================================================================
--- branches/7.0.x/documentation/developer-guide/src/main/docbook/en-US/content/adminapi.xml (rev 0)
+++ branches/7.0.x/documentation/developer-guide/src/main/docbook/en-US/content/adminapi.xml 2010-06-24 20:08:33 UTC (rev 2298)
@@ -0,0 +1,19 @@
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % CustomDTD SYSTEM "../../../../../../docbook/custom.dtd">
+%CustomDTD;
+]>
+<chapter id="adminapi">
+ <title>AdminAPI</title>
+ <para>In most circumstances the admin operations will be performed through the admin console or AdminShell tooling, but it is also possible to invoke admin functionality directly in Java through the AdminAPI.</para>
+ <para>All classes for the AdminAPI are in the client jar under the <code>org.teiid.adminapi</code> package.</para>
+ <sect1 id="connecting">
+ <title>Connecting</title>
+ <para>An AdminAPI connection, which is represented by the <code>org.teiid.adminapi.Admin</code> interface, is obtained through the <code>org.teiid.adminapi.AdminFactory.createAdmin</code> methods.
+ <code>AdminFactory</code> is a singleton, see <code>AdminFactory.getInstance()</code>, so there is no need to create instance. The <code>Admin</code> instance automatically tests its connection and reconnects to a server in the event of a failure. The <code>close</code> method should be called to terminate the connection.</para>
+ <para>See your Teiid installation for the appropriate admin port, which by default 31443.</para>
+ </sect1>
+ <sect1 id="admin_methods">
+ <title>Admin Methods</title>
+ <para>Admin methods exist for monitoring, server administration, and configuration purposes. Note that the objects returned by the monitoring methods, such as getRequests, are read-only and cannot be used to change server state. See the JavaDocs for all of the details.</para>
+ </sect1>
+</chapter>
Property changes on: branches/7.0.x/documentation/developer-guide/src/main/docbook/en-US/content/adminapi.xml
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: branches/7.0.x/documentation/developer-guide/src/main/docbook/en-US/main.xml
===================================================================
--- branches/7.0.x/documentation/developer-guide/src/main/docbook/en-US/main.xml 2010-06-24 20:04:09 UTC (rev 2297)
+++ branches/7.0.x/documentation/developer-guide/src/main/docbook/en-US/main.xml 2010-06-24 20:08:33 UTC (rev 2298)
@@ -50,6 +50,7 @@
<xi:include href="content/translator-api.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/extending-jdbc.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/udf.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
+ <xi:include href="content/adminapi.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/logging.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/security.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="content/appendix-a.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
Modified: branches/7.0.x/documentation/quick-start-example/pom.xml
===================================================================
--- branches/7.0.x/documentation/quick-start-example/pom.xml 2010-06-24 20:04:09 UTC (rev 2297)
+++ branches/7.0.x/documentation/quick-start-example/pom.xml 2010-06-24 20:08:33 UTC (rev 2298)
@@ -51,7 +51,7 @@
<format>
<formatName>pdf</formatName>
<stylesheetResource>classpath:/xslt/org/jboss/pdf.xsl</stylesheetResource>
- <finalName>quick_start_example.pdf</finalName>
+ <finalName>teiid_quick_start_example.pdf</finalName>
</format>
<format>
<formatName>html_single</formatName>
Modified: branches/7.0.x/documentation/reference/src/main/docbook/en-US/content/sql_support.xml
===================================================================
--- branches/7.0.x/documentation/reference/src/main/docbook/en-US/content/sql_support.xml 2010-06-24 20:04:09 UTC (rev 2297)
+++ branches/7.0.x/documentation/reference/src/main/docbook/en-US/content/sql_support.xml 2010-06-24 20:08:33 UTC (rev 2298)
@@ -496,7 +496,7 @@
</sect2>
<sect2 id="exec_command">
<title>EXECUTE Command</title>
- <para>The EXECUTE command is used to execute a procedure, such as a virtual procedure or a stored procedure. Procedures may have zero or more scalar input parameters. The return value from a procedure is a result set, the same as is returned from a SELECT. Note that EXEC can be used as a short form of this command.
+ <para>The EXECUTE command is used to execute a procedure, such as a virtual procedure or a stored procedure. Procedures may have zero or more scalar input parameters. The return value from a procedure is a result set, the same as is returned from a SELECT. Note that EXEC or CALL can be used as a short form of this command.
</para>
<itemizedlist>
<para>Example Syntax</para>
@@ -529,11 +529,16 @@
</para>
</listitem>
<listitem>
- <para>If the procedure does not return a result set, the values from the RETURN, OUT, and IN_OUT parameters will be returned as a single row.
+ <para>If the procedure does not return a result set, the values from the RETURN, OUT, and IN_OUT parameters will be returned as a single row when used as an inline view query.
</para>
</listitem>
</itemizedlist>
</sect2>
+ <sect2 id="cache_hint">
+ <title>Cache Hint</title>
+ <para>Non-update user commands may be preceded with a cache hint, e.g. /* cache */ select ..., to inform the engine that the results of command should be cached. The scope of the result, either session or global, will be deteremined automatically from the determinism level of the source queries and functions executed.</para>
+ <para>ResultSet caching must be enabled for this hint to have an effect.</para>
+ </sect2>
<sect2 id="procedural_relational">
<title>Procedural Relational Command</title>
<para> Procedural relational commands use the syntax of a SELECT to
14 years, 6 months
teiid SVN: r2297 - in branches/7.0.x/client/src: test/java/org/teiid/jdbc and 1 other directory.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-06-24 16:04:09 -0400 (Thu, 24 Jun 2010)
New Revision: 2297
Modified:
branches/7.0.x/client/src/main/java/org/teiid/jdbc/XAConnectionImpl.java
branches/7.0.x/client/src/main/java/org/teiid/jdbc/XAResourceImpl.java
branches/7.0.x/client/src/test/java/org/teiid/jdbc/TestXAConnection.java
Log:
TEIID-36 adding a better notification of connection errors in xaconnections.
Modified: branches/7.0.x/client/src/main/java/org/teiid/jdbc/XAConnectionImpl.java
===================================================================
--- branches/7.0.x/client/src/main/java/org/teiid/jdbc/XAConnectionImpl.java 2010-06-24 19:41:21 UTC (rev 2296)
+++ branches/7.0.x/client/src/main/java/org/teiid/jdbc/XAConnectionImpl.java 2010-06-24 20:04:09 UTC (rev 2297)
@@ -39,6 +39,12 @@
import javax.sql.XAConnection;
import javax.transaction.xa.XAResource;
+import org.teiid.client.security.InvalidSessionException;
+import org.teiid.client.util.ExceptionUtil;
+import org.teiid.net.CommunicationException;
+import org.teiid.net.ServerConnection;
+import org.teiid.net.socket.SingleInstanceCommunicationException;
+
/**
* Implementation of XAConnection.
*/
@@ -71,7 +77,25 @@
try {
return method.invoke(this.proxiedConnection, args);
} catch (InvocationTargetException e) {
- //TODO: notify listeners about critical errors
+ Exception ex = ExceptionUtil.getExceptionOfType(e, InvalidSessionException.class);
+ if (ex == null) {
+ ex = ExceptionUtil.getExceptionOfType(e, CommunicationException.class);
+ if (ex instanceof SingleInstanceCommunicationException) {
+ ServerConnection sc = proxiedConnection.getServerConnection();
+ if (sc.isOpen() != null) {
+ ex = null;
+ }
+ }
+ }
+ if (ex != null) {
+ SQLException se = null;
+ if (e.getCause() instanceof SQLException) {
+ se = (SQLException)e.getCause();
+ } else {
+ se = TeiidSQLException.create(e.getCause());
+ }
+ notifyListener(se);
+ }
throw e.getTargetException();
}
}
@@ -93,14 +117,14 @@
}
public Connection getConnection() throws SQLException{
- ConnectionImpl conn = getMMConnection();
+ ConnectionImpl conn = getConnectionImpl();
Connection result = (Connection)Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[] {Connection.class}, new CloseInterceptor(conn));
return result;
}
- ConnectionImpl getMMConnection() throws SQLException {
+ ConnectionImpl getConnectionImpl() throws SQLException {
if(isClosed){
throw new SQLException(JDBCPlugin.Util.getString("MMXAConnection.connection_is_closed")); //$NON-NLS-1$
}
Modified: branches/7.0.x/client/src/main/java/org/teiid/jdbc/XAResourceImpl.java
===================================================================
--- branches/7.0.x/client/src/main/java/org/teiid/jdbc/XAResourceImpl.java 2010-06-24 19:41:21 UTC (rev 2296)
+++ branches/7.0.x/client/src/main/java/org/teiid/jdbc/XAResourceImpl.java 2010-06-24 20:04:09 UTC (rev 2297)
@@ -192,7 +192,7 @@
private ConnectionImpl getMMConnection() throws XAException{
try{
- return this.mmConnection.getMMConnection();
+ return this.mmConnection.getConnectionImpl();
}catch(SQLException e){
throw new XAException(XAException.XAER_RMFAIL);
}
Modified: branches/7.0.x/client/src/test/java/org/teiid/jdbc/TestXAConnection.java
===================================================================
--- branches/7.0.x/client/src/test/java/org/teiid/jdbc/TestXAConnection.java 2010-06-24 19:41:21 UTC (rev 2296)
+++ branches/7.0.x/client/src/test/java/org/teiid/jdbc/TestXAConnection.java 2010-06-24 20:04:09 UTC (rev 2297)
@@ -22,23 +22,23 @@
package org.teiid.jdbc;
+import static org.junit.Assert.*;
+
import java.sql.Connection;
import java.sql.SQLException;
+import javax.sql.ConnectionEvent;
+import javax.sql.ConnectionEventListener;
import javax.transaction.xa.XAResource;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.teiid.client.security.InvalidSessionException;
import org.teiid.client.xa.XidImpl;
-import org.teiid.jdbc.ConnectionImpl;
-import org.teiid.jdbc.StatementImpl;
-import org.teiid.jdbc.XAConnectionImpl;
-import junit.framework.TestCase;
-
-
-
-public class TestXAConnection extends TestCase {
+public class TestXAConnection {
- public void testConnectionClose() throws Exception {
+ @Test public void testConnectionClose() throws Exception {
final ConnectionImpl mmConn = TestConnection.getMMConnection();
@@ -68,5 +68,27 @@
assertTrue(stmt.isClosed());
assertTrue(conn.getAutoCommit());
}
+
+ @Test public void testNotification() throws Exception {
+ XAConnectionImpl xaConn = new XAConnectionImpl(new XAConnectionImpl.ConnectionSource() {
+ //## JDBC4.0-begin ##
+ @Override
+ //## JDBC4.0-end ##
+ public ConnectionImpl createConnection() throws SQLException {
+ ConnectionImpl c = Mockito.mock(ConnectionImpl.class);
+ Mockito.doThrow(new SQLException(new InvalidSessionException())).when(c).commit();
+ return c;
+ }
+ });
+ ConnectionEventListener cel = Mockito.mock(ConnectionEventListener.class);
+ xaConn.addConnectionEventListener(cel);
+ Connection c = xaConn.getConnection();
+ try {
+ c.commit();
+ } catch (SQLException e) {
+
+ }
+ Mockito.verify(cel).connectionErrorOccurred((ConnectionEvent) Mockito.anyObject());
+ }
}
14 years, 6 months
teiid SVN: r2296 - in branches/7.0.x/engine/src: test/java/org/teiid/common/buffer/impl and 1 other directory.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-06-24 15:41:21 -0400 (Thu, 24 Jun 2010)
New Revision: 2296
Modified:
branches/7.0.x/engine/src/main/java/org/teiid/common/buffer/FileStore.java
branches/7.0.x/engine/src/test/java/org/teiid/common/buffer/impl/TestFileStorageManager.java
Log:
TEIID-913 fix to the filestoreoutputstream to implement flush, which is needed for proper processing of xmldocument models.
Modified: branches/7.0.x/engine/src/main/java/org/teiid/common/buffer/FileStore.java
===================================================================
--- branches/7.0.x/engine/src/main/java/org/teiid/common/buffer/FileStore.java 2010-06-24 17:36:11 UTC (rev 2295)
+++ branches/7.0.x/engine/src/main/java/org/teiid/common/buffer/FileStore.java 2010-06-24 19:41:21 UTC (rev 2296)
@@ -105,12 +105,17 @@
}
@Override
- public void close() throws IOException {
+ public void flush() throws IOException {
if (bytesWritten) {
flushBuffer();
}
}
+ @Override
+ public void close() throws IOException {
+ flush();
+ }
+
}
static class CleanupReference extends PhantomReference<Object> {
Modified: branches/7.0.x/engine/src/test/java/org/teiid/common/buffer/impl/TestFileStorageManager.java
===================================================================
--- branches/7.0.x/engine/src/test/java/org/teiid/common/buffer/impl/TestFileStorageManager.java 2010-06-24 17:36:11 UTC (rev 2295)
+++ branches/7.0.x/engine/src/test/java/org/teiid/common/buffer/impl/TestFileStorageManager.java 2010-06-24 19:41:21 UTC (rev 2296)
@@ -33,11 +33,12 @@
import org.junit.Test;
import org.teiid.common.buffer.FileStore;
import org.teiid.common.buffer.StorageManager;
+import org.teiid.common.buffer.FileStore.FileStoreOutputStream;
import org.teiid.common.buffer.impl.FileStorageManager;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.util.UnitTestUtil;
-
+@SuppressWarnings("nls")
public class TestFileStorageManager {
public FileStorageManager getStorageManager(Integer maxFileSize, Integer openFiles, String dir) throws TeiidComponentException {
@@ -81,6 +82,16 @@
assertEquals(0, cache.size());
}
+
+ @Test public void testFlush() throws Exception {
+ FileStorageManager sm = getStorageManager(null, null, null);
+ FileStore store = sm.createFileStore("0");
+ FileStoreOutputStream fsos = store.createOutputStream(2);
+ fsos.write(new byte[3]);
+ fsos.write(1);
+ fsos.flush();
+ assertEquals(0, fsos.getCount());
+ }
static Random r = new Random();
14 years, 6 months
teiid SVN: r2295 - trunk/build/assembly/jboss-container.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2010-06-24 13:36:11 -0400 (Thu, 24 Jun 2010)
New Revision: 2295
Modified:
trunk/build/assembly/jboss-container/dist.xml
Log:
TEIID-1132: including to add dependencies for translators along with jars for translator
Modified: trunk/build/assembly/jboss-container/dist.xml
===================================================================
--- trunk/build/assembly/jboss-container/dist.xml 2010-06-24 17:35:31 UTC (rev 2294)
+++ trunk/build/assembly/jboss-container/dist.xml 2010-06-24 17:36:11 UTC (rev 2295)
@@ -126,8 +126,16 @@
</includes>
<binaries>
- <includeDependencies>false</includeDependencies>
+ <includeDependencies>true</includeDependencies>
<unpack>false</unpack>
+ <dependencySets>
+ <dependencySet>
+ <useProjectArtifact>true</useProjectArtifact>
+ <unpack>false</unpack>
+ <useTransitiveDependencies>false</useTransitiveDependencies>
+ <useDefaultExcludes>true</useDefaultExcludes>
+ </dependencySet>
+ </dependencySets>
<outputDirectory>deploy/teiid/connectors</outputDirectory>
</binaries>
14 years, 6 months
teiid SVN: r2294 - branches/7.0.x/build/assembly/jboss-container.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2010-06-24 13:35:31 -0400 (Thu, 24 Jun 2010)
New Revision: 2294
Modified:
branches/7.0.x/build/assembly/jboss-container/dist.xml
Log:
TEIID-1132: including to add dependencies for translators along with jars for translator
Modified: branches/7.0.x/build/assembly/jboss-container/dist.xml
===================================================================
--- branches/7.0.x/build/assembly/jboss-container/dist.xml 2010-06-24 17:00:32 UTC (rev 2293)
+++ branches/7.0.x/build/assembly/jboss-container/dist.xml 2010-06-24 17:35:31 UTC (rev 2294)
@@ -121,8 +121,16 @@
</includes>
<binaries>
- <includeDependencies>false</includeDependencies>
+ <includeDependencies>true</includeDependencies>
<unpack>false</unpack>
+ <dependencySets>
+ <dependencySet>
+ <useProjectArtifact>true</useProjectArtifact>
+ <unpack>false</unpack>
+ <useTransitiveDependencies>false</useTransitiveDependencies>
+ <useDefaultExcludes>true</useDefaultExcludes>
+ </dependencySet>
+ </dependencySets>
<outputDirectory>deploy/teiid/connectors</outputDirectory>
</binaries>
14 years, 6 months
teiid SVN: r2293 - branches/7.0.x/documentation/reference/src/main/docbook/en-US/content.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-06-24 13:00:32 -0400 (Thu, 24 Jun 2010)
New Revision: 2293
Modified:
branches/7.0.x/documentation/reference/src/main/docbook/en-US/content/sql_support.xml
Log:
TEIID-251 order by allows expressions
Modified: branches/7.0.x/documentation/reference/src/main/docbook/en-US/content/sql_support.xml
===================================================================
--- branches/7.0.x/documentation/reference/src/main/docbook/en-US/content/sql_support.xml 2010-06-23 21:26:29 UTC (rev 2292)
+++ branches/7.0.x/documentation/reference/src/main/docbook/en-US/content/sql_support.xml 2010-06-24 17:00:32 UTC (rev 2293)
@@ -113,8 +113,7 @@
<title>Expressions</title>
<para> Identifiers, literals, and functions can be combined into
expressions. Expressions can be used almost anywhere in a query --
- SELECT, FROM (if specifying join criteria, WHERE, GROUP BY, HAVING.
- However you currently cannot use expressions in an ORDER BY clause.</para>
+ SELECT, FROM (if specifying join criteria), WHERE, GROUP BY, HAVING, or ORDER BY.</para>
<itemizedlist>
<para>Teiid supports the following types of expressions:
</para>
14 years, 6 months
teiid SVN: r2292 - trunk/api/src/main/java/org/teiid/translator.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-06-23 17:26:29 -0400 (Wed, 23 Jun 2010)
New Revision: 2292
Modified:
trunk/api/src/main/java/org/teiid/translator/ExecutionFactory.java
Log:
TEIID-715 adding support for null ordering.
Modified: trunk/api/src/main/java/org/teiid/translator/ExecutionFactory.java
===================================================================
--- trunk/api/src/main/java/org/teiid/translator/ExecutionFactory.java 2010-06-23 21:16:17 UTC (rev 2291)
+++ trunk/api/src/main/java/org/teiid/translator/ExecutionFactory.java 2010-06-23 21:26:29 UTC (rev 2292)
@@ -482,7 +482,7 @@
/**
* Returns whether the database supports explicit join ordering.
* @since 7.1
- * @return true if nulls high|low can be specified
+ * @return true if nulls first/last can be specified
*/
public boolean supportsOrderByNullOrdering() {
return false;
14 years, 6 months
teiid SVN: r2291 - in trunk: api/src/main/java/org/teiid/language/visitor and 25 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-06-23 17:16:17 -0400 (Wed, 23 Jun 2010)
New Revision: 2291
Added:
trunk/engine/src/test/java/org/teiid/query/processor/TestOrderByProcessing.java
Modified:
trunk/api/src/main/java/org/teiid/language/SQLConstants.java
trunk/api/src/main/java/org/teiid/language/SortSpecification.java
trunk/api/src/main/java/org/teiid/language/visitor/SQLStringVisitor.java
trunk/api/src/main/java/org/teiid/translator/ExecutionFactory.java
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/derby/DerbyExecutionFactory.java
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mm/MetaMatrixExecutionFactory.java
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/postgresql/PostgreSQLExecutionFactory.java
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/teiid/TeiidExecutionFactory.java
trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/oracle/TestOracleTranslator.java
trunk/documentation/developer-guide/src/main/docbook/en-US/content/translator-api.xml
trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml
trunk/documentation/reference/src/main/docbook/en-US/content/sql_support.xml
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/impl/CapabilitiesConverter.java
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/language/LanguageBridgeFactory.java
trunk/engine/src/main/java/org/teiid/query/optimizer/capabilities/SourceCapabilities.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PlanToProcessConverter.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CapabilitiesUtil.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.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/SortNode.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/SortUtility.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/SortingFilter.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderBy.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderByItem.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java
trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleMergeVirtual.java
trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java
trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java
trunk/engine/src/test/java/org/teiid/query/processor/relational/TestDuplicateFilter.java
trunk/engine/src/test/java/org/teiid/query/processor/relational/TestSortNode.java
trunk/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java
trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestTPCR.java
Log:
TEIID-715 adding support for null ordering.
Modified: trunk/api/src/main/java/org/teiid/language/SQLConstants.java
===================================================================
--- trunk/api/src/main/java/org/teiid/language/SQLConstants.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/api/src/main/java/org/teiid/language/SQLConstants.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -92,6 +92,10 @@
public static final String STDDEV_SAMP = "STDDEV_SAMP"; //$NON-NLS-1$
public static final String VAR_SAMP = "VAR_SAMP"; //$NON-NLS-1$
public static final String VAR_POP = "VAR_POP"; //$NON-NLS-1$
+
+ public static final String NULLS = "NULLS"; //$NON-NLS-1$
+ public static final String FIRST = "FIRST"; //$NON-NLS-1$
+ public static final String LAST = "LAST"; //$NON-NLS-1$
}
public interface Reserved {
Modified: trunk/api/src/main/java/org/teiid/language/SortSpecification.java
===================================================================
--- trunk/api/src/main/java/org/teiid/language/SortSpecification.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/api/src/main/java/org/teiid/language/SortSpecification.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -31,8 +31,14 @@
DESC
}
+ public enum NullOrdering {
+ FIRST,
+ LAST
+ }
+
private Ordering ordering;
- private Expression expression;
+ private Expression expression;
+ private NullOrdering nullOrdering;
public SortSpecification(Ordering direction, Expression expression) {
this.ordering = direction;
@@ -58,5 +64,13 @@
public void setExpression(Expression expression) {
this.expression = expression;
}
+
+ public void setNullOrdering(NullOrdering nullOrdering) {
+ this.nullOrdering = nullOrdering;
+ }
+
+ public NullOrdering getNullOrdering() {
+ return nullOrdering;
+ }
}
Modified: trunk/api/src/main/java/org/teiid/language/visitor/SQLStringVisitor.java
===================================================================
--- trunk/api/src/main/java/org/teiid/language/visitor/SQLStringVisitor.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/api/src/main/java/org/teiid/language/visitor/SQLStringVisitor.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -650,6 +650,12 @@
buffer.append(Tokens.SPACE)
.append(DESC);
} // Don't print default "ASC"
+ if (obj.getNullOrdering() != null) {
+ buffer.append(Tokens.SPACE)
+ .append(NonReserved.NULLS)
+ .append(Tokens.SPACE)
+ .append(obj.getNullOrdering().name());
+ }
}
public void visit(Argument obj) {
Modified: trunk/api/src/main/java/org/teiid/translator/ExecutionFactory.java
===================================================================
--- trunk/api/src/main/java/org/teiid/translator/ExecutionFactory.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/api/src/main/java/org/teiid/translator/ExecutionFactory.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -71,6 +71,14 @@
*/
KEY
}
+
+ public enum NullOrder {
+ HIGH,
+ LOW,
+ FIRST,
+ LAST,
+ UNKNOWN
+ }
public static final int DEFAULT_MAX_FROM_GROUPS = -1;
public static final int DEFAULT_MAX_IN_CRITERIA_SIZE = -1;
@@ -463,6 +471,24 @@
}
/**
+ * Returns the default null ordering
+ * @since 7.1
+ * @return the {@link NullOrder}
+ */
+ public NullOrder getDefaultNullOrder() {
+ return NullOrder.UNKNOWN;
+ }
+
+ /**
+ * Returns whether the database supports explicit join ordering.
+ * @since 7.1
+ * @return true if nulls high|low can be specified
+ */
+ public boolean supportsOrderByNullOrdering() {
+ return false;
+ }
+
+ /**
* Whether the source supports an explicit GROUP BY clause
* @since 6.1
*/
Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -81,13 +81,6 @@
public static final int DEFAULT_MAX_IN_CRITERIA = 1000;
- public enum NullOrder {
- HIGH,
- LOW,
- FIRST,
- LAST
- }
-
// Because the retrieveValue() method will be hit for every value of
// every JDBC result set returned, we do lots of weird special stuff here
// to improve the performance (most importantly to remove big if/else checks
@@ -1056,23 +1049,12 @@
return false;
}
- /**
- * Returns the default null ordering
- * @return the {@link NullOrder}
- */
+ @Override
public NullOrder getDefaultNullOrder() {
return NullOrder.LOW;
}
/**
- * Returns whether the database supports explicit join ordering.
- * @return true if nulls high|low can be specified
- */
- public boolean supportsExplicitNullOrdering() {
- return false;
- }
-
- /**
* Returns whether the limit clause is applied to the select clause.
* @return true if the limit clause is part of the select
*/
Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -47,16 +47,13 @@
import org.teiid.language.Literal;
import org.teiid.language.SearchedCase;
import org.teiid.language.SetClause;
-import org.teiid.language.SortSpecification;
import org.teiid.language.Argument.Direction;
import org.teiid.language.SQLConstants.Reserved;
import org.teiid.language.SQLConstants.Tokens;
import org.teiid.language.SetQuery.Operation;
-import org.teiid.language.SortSpecification.Ordering;
import org.teiid.language.visitor.SQLStringVisitor;
import org.teiid.translator.ExecutionContext;
import org.teiid.translator.TypeFacility;
-import org.teiid.translator.jdbc.JDBCExecutionFactory.NullOrder;
/**
@@ -131,22 +128,6 @@
this.replaceWithBinding = replacementMode;
}
- @Override
- public void visit(SortSpecification obj) {
- super.visit(obj);
- NullOrder nullOrder = this.executionFactory.getDefaultNullOrder();
- if (!this.executionFactory.supportsExplicitNullOrdering() || nullOrder == NullOrder.LOW) {
- return;
- }
- if (obj.getOrdering() == Ordering.ASC) {
- if (nullOrder != NullOrder.FIRST) {
- buffer.append(" NULLS FIRST"); //$NON-NLS-1$
- }
- } else if (nullOrder == NullOrder.FIRST) {
- buffer.append(" NULLS LAST"); //$NON-NLS-1$
- }
- }
-
/**
* @param type
* @param object
Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/derby/DerbyExecutionFactory.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/derby/DerbyExecutionFactory.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/derby/DerbyExecutionFactory.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -66,7 +66,7 @@
}
@Override
- public boolean supportsExplicitNullOrdering() {
+ public boolean supportsOrderByNullOrdering() {
return getDatabaseVersion().compareTo(TEN_4) >= 0;
}
Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mm/MetaMatrixExecutionFactory.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mm/MetaMatrixExecutionFactory.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mm/MetaMatrixExecutionFactory.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -129,4 +129,9 @@
public boolean supportsRowOffset() {
return true;
}
+
+ @Override
+ public NullOrder getDefaultNullOrder() {
+ return NullOrder.UNKNOWN;
+ }
}
\ No newline at end of file
Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -435,7 +435,7 @@
}
@Override
- public boolean supportsExplicitNullOrdering() {
+ public boolean supportsOrderByNullOrdering() {
return true;
}
Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/postgresql/PostgreSQLExecutionFactory.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/postgresql/PostgreSQLExecutionFactory.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/postgresql/PostgreSQLExecutionFactory.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -222,7 +222,7 @@
}
@Override
- public boolean supportsExplicitNullOrdering() {
+ public boolean supportsOrderByNullOrdering() {
return getDatabaseVersion().compareTo(EIGHT_4) >= 0;
}
Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/teiid/TeiidExecutionFactory.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/teiid/TeiidExecutionFactory.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/teiid/TeiidExecutionFactory.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -28,6 +28,7 @@
import java.util.List;
import org.teiid.translator.Translator;
+import org.teiid.translator.ExecutionFactory.NullOrder;
import org.teiid.translator.jdbc.JDBCExecutionFactory;
@@ -172,4 +173,9 @@
public boolean supportsAggregatesEnhancedNumeric() {
return getDatabaseVersion().compareTo(SEVEN_1) >= 0;
}
+
+ @Override
+ public NullOrder getDefaultNullOrder() {
+ return NullOrder.UNKNOWN;
+ }
}
Modified: trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/oracle/TestOracleTranslator.java
===================================================================
--- trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/oracle/TestOracleTranslator.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/oracle/TestOracleTranslator.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -301,7 +301,7 @@
}
@Test public void testUnionWithOrderBy() throws Exception {
String input = "SELECT IntKey FROM BQT1.SMALLA UNION SELECT IntKey FROM BQT1.SMALLB ORDER BY IntKey"; //$NON-NLS-1$
- String output = "SELECT SmallA.IntKey FROM SmallA UNION SELECT SmallB.IntKey FROM SmallB ORDER BY IntKey NULLS FIRST"; //$NON-NLS-1$
+ String output = "SELECT SmallA.IntKey FROM SmallA UNION SELECT SmallB.IntKey FROM SmallB ORDER BY IntKey"; //$NON-NLS-1$
TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
input, output,
@@ -580,7 +580,7 @@
helpTestVisitor(getTestVDB(),
"select part_id id FROM parts UNION ALL select part_name FROM parts UNION ALL select part_id FROM parts ORDER BY id", //$NON-NLS-1$
null,
- "SELECT g_2.PART_ID AS c_0 FROM PARTS g_2 UNION ALL SELECT g_1.PART_NAME AS c_0 FROM PARTS g_1 UNION ALL SELECT g_0.PART_ID AS c_0 FROM PARTS g_0 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
+ "SELECT g_2.PART_ID AS c_0 FROM PARTS g_2 UNION ALL SELECT g_1.PART_NAME AS c_0 FROM PARTS g_1 UNION ALL SELECT g_0.PART_ID AS c_0 FROM PARTS g_0 ORDER BY c_0", //$NON-NLS-1$
true);
}
@@ -588,7 +588,7 @@
helpTestVisitor(getTestVDB(),
"select part_id FROM parts UNION ALL select part_name FROM parts ORDER BY part_id", //$NON-NLS-1$
null,
- "SELECT g_1.PART_ID AS c_0 FROM PARTS g_1 UNION ALL SELECT g_0.PART_NAME AS c_0 FROM PARTS g_0 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
+ "SELECT g_1.PART_ID AS c_0 FROM PARTS g_1 UNION ALL SELECT g_0.PART_NAME AS c_0 FROM PARTS g_0 ORDER BY c_0", //$NON-NLS-1$
true);
}
@@ -596,7 +596,7 @@
helpTestVisitor(getTestVDB(),
"select part_id as p FROM parts UNION ALL select part_name FROM parts ORDER BY p", //$NON-NLS-1$
null,
- "SELECT PARTS.PART_ID AS p FROM PARTS UNION ALL SELECT PARTS.PART_NAME FROM PARTS ORDER BY p NULLS FIRST"); //$NON-NLS-1$
+ "SELECT PARTS.PART_ID AS p FROM PARTS UNION ALL SELECT PARTS.PART_NAME FROM PARTS ORDER BY p"); //$NON-NLS-1$
}
@Test public void testUpdateWithFunction() throws Exception {
@@ -731,7 +731,7 @@
@Test public void testLimitWithNestedInlineView() throws Exception {
String input = "select max(intkey), stringkey from (select intkey, stringkey from bqt1.smalla order by intkey limit 100) x group by stringkey"; //$NON-NLS-1$
- String output = "SELECT MAX(x.intkey), x.stringkey FROM (SELECT * FROM (SELECT SmallA.IntKey, SmallA.StringKey FROM SmallA ORDER BY intkey NULLS FIRST) WHERE ROWNUM <= 100) x GROUP BY x.stringkey"; //$NON-NLS-1$
+ String output = "SELECT MAX(x.intkey), x.stringkey FROM (SELECT * FROM (SELECT SmallA.IntKey, SmallA.StringKey FROM SmallA ORDER BY intkey) WHERE ROWNUM <= 100) x GROUP BY x.stringkey"; //$NON-NLS-1$
helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
input,
@@ -761,7 +761,7 @@
@Test public void testRowLimitWithUnionOrderBy() throws Exception {
String input = "(select intkey from bqt1.smalla limit 50, 100) union select intnum from bqt1.smalla order by intkey"; //$NON-NLS-1$
- String output = "SELECT c_0 FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (SELECT g_1.IntKey AS c_0 FROM SmallA g_1) VIEW_FOR_LIMIT WHERE ROWNUM <= 150) WHERE ROWNUM_ > 50 UNION SELECT g_0.IntNum AS c_0 FROM SmallA g_0 ORDER BY c_0 NULLS FIRST"; //$NON-NLS-1$
+ String output = "SELECT c_0 FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (SELECT g_1.IntKey AS c_0 FROM SmallA g_1) VIEW_FOR_LIMIT WHERE ROWNUM <= 150) WHERE ROWNUM_ > 50 UNION SELECT g_0.IntNum AS c_0 FROM SmallA g_0 ORDER BY c_0"; //$NON-NLS-1$
CommandBuilder commandBuilder = new CommandBuilder(FakeMetadataFactory.exampleBQTCached());
Command obj = commandBuilder.getCommand(input, true, true);
Modified: trunk/documentation/developer-guide/src/main/docbook/en-US/content/translator-api.xml
===================================================================
--- trunk/documentation/developer-guide/src/main/docbook/en-US/content/translator-api.xml 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/documentation/developer-guide/src/main/docbook/en-US/content/translator-api.xml 2010-06-23 21:16:17 UTC (rev 2291)
@@ -972,11 +972,22 @@
<para>OrderBy</para>
</entry>
<entry>
- <para>Translator can support the ORDER BY items that are not directly specified in the select clause.</para>
+ <para>Translator can support ORDER BY items that are not directly specified in the select clause.</para>
</entry>
</row>
<row>
<entry>
+ <para>OrderByNullOrdering</para>
+ </entry>
+ <entry>
+ <para>OrderBy</para>
+ </entry>
+ <entry>
+ <para>Translator can support ORDER BY items with NULLS FIRST/LAST.</para>
+ </entry>
+ </row>
+ <row>
+ <entry>
<para>GroupBy</para>
</entry>
<entry>
@@ -1301,6 +1312,11 @@
update modes, the query engine will compensate by issuing the updates individually.</para>
</sect3>
+ <sect3>
+ <title>Default Behavior</title>
+ <para>The method <code>ExecutionFactory.getDefaultNullOrder()</code> specifies the default null order. Can be one of UNKNOWN, LOW, HIGH, FIRST, LAST. This is only used if ORDER BY is supported, but null ordering is not.</para>
+ </sect3>
+
</sect2>
</sect1>
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/grammar.xml 2010-06-23 21:16:17 UTC (rev 2291)
@@ -347,7 +347,6 @@
| <TIMETYPE: "{" "t">
| <TIMESTAMPTYPE: "{" "ts">
| <BOOLEANTYPE: "{" "b">
-| <XMLTYPE: "{" "x">
| <INTEGERVAL: (<MINUS>)? (<DIGIT>)+>
| <FLOATVAL: (<MINUS>)? (<DIGIT>)* <PERIOD> (<DIGIT>)+ (["e","E"] (["+","-"])? (<DIGIT>)+)?>
| <STRINGVAL: ("N")? "\'" ("\'\'" | ~["\'"])* "\'">
@@ -580,7 +579,7 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod57" xreflabel="aggregateSymbol"/>aggregateSymbol</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <link linkend="prod58">nonReserved</link> <LPAREN> <STAR> <RPAREN> ) | ( <link linkend="prod58">nonReserved</link> <LPAREN> ( <DISTINCT> )? <link linkend="prod16">expression</link> <RPAREN> ) )</para></entry></row>
+( ( <link linkend="prod58">nonReserved</link> <LPAREN> <STAR> <RPAREN> ) | ( ( <link linkend="prod58">nonReserved</link> | <ANY> | <SOME> ) <LPAREN> ( <DISTINCT> | <ALL> )? <link linkend="prod16">expression</link> <RPAREN> ) )</para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod49" xreflabel="from"/>from</para></entry>
<entry align="left" valign="top"><para>::=
@@ -588,65 +587,61 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod59" xreflabel="tableReference"/>tableReference</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <LBRACE> <link linkend="prod58">nonReserved</link> <link linkend="prod60">tableReferenceUnescaped</link> <RBRACE> ) | <link linkend="prod60">tableReferenceUnescaped</link> )</para></entry></row>
+( ( <LBRACE> <link linkend="prod58">nonReserved</link> <link linkend="prod60">joinedTable</link> <RBRACE> ) | <link linkend="prod60">joinedTable</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod60" xreflabel="tableReferenceUnescaped"/>tableReferenceUnescaped</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod60" xreflabel="joinedTable"/>joinedTable</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod61">joinedTable</link> | <link linkend="prod62">tablePrimary</link> )</para></entry></row>
+<link linkend="prod61">tablePrimary</link> ( ( <link linkend="prod62">crossJoin</link> | <link linkend="prod63">qualifiedJoin</link> ) )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod61" xreflabel="joinedTable"/>joinedTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="crossJoin"/>crossJoin</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod62">tablePrimary</link> ( ( <link linkend="prod63">crossJoin</link> | <link linkend="prod64">qualifiedJoin</link> ) )+</para></entry></row>
+( ( <CROSS> | <UNION> ) <JOIN> <link linkend="prod61">tablePrimary</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="crossJoin"/>crossJoin</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod63" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <CROSS> | <UNION> ) <JOIN> <link linkend="prod62">tablePrimary</link> )</para></entry></row>
-<row>
-<entry align="right" valign="top"><para><anchor id="prod64" xreflabel="qualifiedJoin"/>qualifiedJoin</para></entry>
-<entry align="left" valign="top"><para>::=
( ( ( <RIGHT> ( <OUTER> )? ) | ( <LEFT> ( <OUTER> )? ) | ( <FULL> ( <OUTER> )? ) | <INNER> )? <JOIN> <link linkend="prod59">tableReference</link> <ON> <link linkend="prod28">criteria</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod62" xreflabel="tablePrimary"/>tablePrimary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod61" xreflabel="tablePrimary"/>tablePrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod65">textTable</link> | <link linkend="prod66">xmlTable</link> | <link linkend="prod67">unaryFromClause</link> | <link linkend="prod68">subqueryFromClause</link> | ( <LPAREN> <link linkend="prod61">joinedTable</link> <RPAREN> ) ) ( ( <MAKEDEP> ) | ( <MAKENOTDEP> ) )?</para></entry></row>
+( <link linkend="prod64">textTable</link> | <link linkend="prod65">xmlTable</link> | <link linkend="prod66">unaryFromClause</link> | <link linkend="prod67">subqueryFromClause</link> | ( <LPAREN> <link linkend="prod60">joinedTable</link> <RPAREN> ) ) ( ( <MAKEDEP> ) | ( <MAKENOTDEP> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="xmlSerialize"/>xmlSerialize</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLSERIALIZE> <LPAREN> <link linkend="prod58">nonReserved</link> <link linkend="prod16">expression</link> ( <AS> ( <STRING> | <VARCHAR> | <CLOB> ) )? <RPAREN></para></entry></row>
+<XMLSERIALIZE> <LPAREN> ( <link linkend="prod58">nonReserved</link> )? <link linkend="prod16">expression</link> ( <AS> ( <STRING> | <VARCHAR> | <CLOB> ) )? <RPAREN></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod58" xreflabel="nonReserved"/>nonReserved</para></entry>
<entry align="left" valign="top"><para>::=
<ID></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod65" xreflabel="textTable"/>textTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod64" xreflabel="textTable"/>textTable</para></entry>
<entry align="left" valign="top"><para>::=
-<ID> <LPAREN> <link linkend="prod16">expression</link> <link linkend="prod58">nonReserved</link> <link linkend="prod70">textColumn</link> ( <COMMA> <link linkend="prod70">textColumn</link> )* ( <ID> <link linkend="prod71">charVal</link> )? ( ( <ESCAPE> <link linkend="prod71">charVal</link> ) | ( <ID> <link linkend="prod71">charVal</link> ) )? ( <ID> ( <link linkend="prod72">intVal</link> )? )? ( <ID> <link linkend="prod72">intVal</link> )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<ID> <LPAREN> <link linkend="prod16">expression</link> <link linkend="prod58">nonReserved</link> <link linkend="prod69">textColumn</link> ( <COMMA> <link linkend="prod69">textColumn</link> )* ( <ID> <link linkend="prod70">charVal</link> )? ( ( <ESCAPE> <link linkend="prod70">charVal</link> ) | ( <ID> <link linkend="prod70">charVal</link> ) )? ( <ID> ( <link linkend="prod71">intVal</link> )? )? ( <ID> <link linkend="prod71">intVal</link> )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod70" xreflabel="textColumn"/>textColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod69" xreflabel="textColumn"/>textColumn</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod2">id</link> <link linkend="prod31">dataType</link> ( <ID> <link linkend="prod72">intVal</link> )?</para></entry></row>
+<link linkend="prod2">id</link> <link linkend="prod31">dataType</link> ( <ID> <link linkend="prod71">intVal</link> )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="xmlQuery"/>xmlQuery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="xmlQuery"/>xmlQuery</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLQUERY> <LPAREN> ( <link linkend="prod74">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod55">derivedColumn</link> ( <COMMA> <link linkend="prod55">derivedColumn</link> )* )? ( ( <NULL> | <link linkend="prod58">nonReserved</link> ) <ON> <link linkend="prod58">nonReserved</link> )? <RPAREN></para></entry></row>
+<XMLQUERY> <LPAREN> ( <link linkend="prod73">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod55">derivedColumn</link> ( <COMMA> <link linkend="prod55">derivedColumn</link> )* )? ( ( <NULL> | <link linkend="prod58">nonReserved</link> ) <ON> <link linkend="prod58">nonReserved</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="xmlTable"/>xmlTable</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod65" xreflabel="xmlTable"/>xmlTable</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLTABLE> <LPAREN> ( <link linkend="prod74">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod55">derivedColumn</link> ( <COMMA> <link linkend="prod55">derivedColumn</link> )* )? ( <ID> <link linkend="prod75">xmlColumn</link> ( <COMMA> <link linkend="prod75">xmlColumn</link> )* )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
+<XMLTABLE> <LPAREN> ( <link linkend="prod73">xmlNamespaces</link> <COMMA> )? <link linkend="prod1">stringVal</link> ( <ID> <link linkend="prod55">derivedColumn</link> ( <COMMA> <link linkend="prod55">derivedColumn</link> )* )? ( <ID> <link linkend="prod74">xmlColumn</link> ( <COMMA> <link linkend="prod74">xmlColumn</link> )* )? <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="xmlColumn"/>xmlColumn</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="xmlColumn"/>xmlColumn</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod2">id</link> ( ( <FOR> <link linkend="prod58">nonReserved</link> ) | ( <link linkend="prod31">dataType</link> ( <DEFAULT_KEYWORD> <link linkend="prod16">expression</link> )? ( <link linkend="prod58">nonReserved</link> <link linkend="prod1">stringVal</link> )? ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod72" xreflabel="intVal"/>intVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="intVal"/>intVal</para></entry>
<entry align="left" valign="top"><para>::=
<INTEGERVAL></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod68" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod67" xreflabel="subqueryFromClause"/>subqueryFromClause</para></entry>
<entry align="left" valign="top"><para>::=
( <TABLE> )? <LPAREN> ( <link linkend="prod7">queryExpression</link> | <link linkend="prod8">storedProcedure</link> ) <RPAREN> ( <AS> )? <link linkend="prod2">id</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod67" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod66" xreflabel="unaryFromClause"/>unaryFromClause</para></entry>
<entry align="left" valign="top"><para>::=
( <ID> ( ( <AS> )? <link linkend="prod2">id</link> )? )</para></entry></row>
<row>
@@ -656,69 +651,73 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod28" xreflabel="criteria"/>criteria</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod76">compoundCritOr</link></para></entry></row>
+<link linkend="prod75">compoundCritOr</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod75" xreflabel="compoundCritOr"/>compoundCritOr</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod77">compoundCritAnd</link> ( <OR> <link linkend="prod77">compoundCritAnd</link> )*</para></entry></row>
+<link linkend="prod76">compoundCritAnd</link> ( <OR> <link linkend="prod76">compoundCritAnd</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod76" xreflabel="compoundCritAnd"/>compoundCritAnd</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod78">notCrit</link> ( <AND> <link linkend="prod78">notCrit</link> )*</para></entry></row>
+<link linkend="prod77">notCrit</link> ( <AND> <link linkend="prod77">notCrit</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="notCrit"/>notCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod77" xreflabel="notCrit"/>notCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <NOT> )? <link linkend="prod79">primary</link></para></entry></row>
+( <NOT> )? <link linkend="prod78">booleanPrimary</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="primary"/>primary</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod78" xreflabel="booleanPrimary"/>booleanPrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod80">predicate</link> | ( <LPAREN> <link linkend="prod28">criteria</link> <RPAREN> ) )</para></entry></row>
+( <link linkend="prod79">predicate</link> | ( <LPAREN> <link linkend="prod28">criteria</link> <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="predicate"/>predicate</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod79" xreflabel="predicate"/>predicate</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod81">subqueryCompareCriteria</link> | <link linkend="prod82">compareCrit</link> | <link linkend="prod83">matchCrit</link> | <link linkend="prod84">betweenCrit</link> | <link linkend="prod85">setCrit</link> | <link linkend="prod86">existsCriteria</link> | <link linkend="prod30">hasCriteria</link> | <link linkend="prod34">translateCriteria</link> | <link linkend="prod87">isNullCrit</link> )</para></entry></row>
+( <link linkend="prod34">translateCriteria</link> | ( <link linkend="prod80">commonValueExpression</link> ( <link linkend="prod81">betweenCrit</link> | <link linkend="prod82">matchCrit</link> | <link linkend="prod83">setCrit</link> | <link linkend="prod84">isNullCrit</link> | <link linkend="prod85">compareCrit</link> | <link linkend="prod86">subqueryCompareCriteria</link> ) ) | <link linkend="prod87">existsCriteria</link> | <link linkend="prod30">hasCriteria</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod82" xreflabel="compareCrit"/>compareCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="operator"/>operator</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod16">expression</link> ( <EQ> | <NE> | <NE2> | <LT> | <LE> | <GT> | <GE> ) <link linkend="prod16">expression</link></para></entry></row>
+( <EQ> | <NE> | <NE2> | <LT> | <LE> | <GT> | <GE> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod88" xreflabel="subquery"/>subquery</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="compareCrit"/>compareCrit</para></entry>
<entry align="left" valign="top"><para>::=
+<link linkend="prod88">operator</link> <link linkend="prod80">commonValueExpression</link></para></entry></row>
+<row>
+<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="subquery"/>subquery</para></entry>
+<entry align="left" valign="top"><para>::=
<LPAREN> ( <link linkend="prod7">queryExpression</link> | <link linkend="prod8">storedProcedure</link> ) <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod86" xreflabel="subqueryCompareCriteria"/>subqueryCompareCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod16">expression</link> ( <EQ> | <NE> | <NE2> | <LT> | <LE> | <GT> | <GE> ) ( <ANY> | <SOME> | <ALL> ) <link linkend="prod88">subquery</link></para></entry></row>
+<link linkend="prod88">operator</link> ( <ANY> | <SOME> | <ALL> ) <link linkend="prod89">subquery</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod83" xreflabel="matchCrit"/>matchCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod82" xreflabel="matchCrit"/>matchCrit</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod16">expression</link> ( <NOT> )? <LIKE> <link linkend="prod16">expression</link> ( <ESCAPE> <link linkend="prod71">charVal</link> | ( <LBRACE> <ESCAPE> <link linkend="prod71">charVal</link> <RBRACE> ) )? )</para></entry></row>
+( <NOT> )? <LIKE> <link linkend="prod80">commonValueExpression</link> ( <ESCAPE> <link linkend="prod70">charVal</link> | ( <LBRACE> <ESCAPE> <link linkend="prod70">charVal</link> <RBRACE> ) )?</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod71" xreflabel="charVal"/>charVal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod70" 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="prod84" xreflabel="betweenCrit"/>betweenCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod81" xreflabel="betweenCrit"/>betweenCrit</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod16">expression</link> ( <NOT> )? <BETWEEN> <link linkend="prod16">expression</link> <AND> <link linkend="prod16">expression</link></para></entry></row>
+( <NOT> )? <BETWEEN> <link linkend="prod80">commonValueExpression</link> <AND> <link linkend="prod80">commonValueExpression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod87" xreflabel="isNullCrit"/>isNullCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod84" xreflabel="isNullCrit"/>isNullCrit</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod16">expression</link> <IS> ( <NOT> )? <NULL></para></entry></row>
+<IS> ( <NOT> )? <NULL></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod85" xreflabel="setCrit"/>setCrit</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod83" xreflabel="setCrit"/>setCrit</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod16">expression</link> ( <NOT> )? <IN> ( ( <link linkend="prod88">subquery</link> ) | ( <LPAREN> <link linkend="prod16">expression</link> ( <COMMA> <link linkend="prod16">expression</link> )* <RPAREN> ) )</para></entry></row>
+( <NOT> )? <IN> ( ( <link linkend="prod89">subquery</link> ) | ( <LPAREN> <link linkend="prod80">commonValueExpression</link> ( <COMMA> <link linkend="prod80">commonValueExpression</link> )* <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod86" xreflabel="existsCriteria"/>existsCriteria</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod87" xreflabel="existsCriteria"/>existsCriteria</para></entry>
<entry align="left" valign="top"><para>::=
-<EXISTS> <link linkend="prod88">subquery</link></para></entry></row>
+<EXISTS> <link linkend="prod89">subquery</link></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod50" xreflabel="groupBy"/>groupBy</para></entry>
<entry align="left" valign="top"><para>::=
-<GROUP> <BY> ( <link linkend="prod89">groupByItem</link> ( <COMMA> <link linkend="prod89">groupByItem</link> )* )</para></entry></row>
+<GROUP> <BY> ( <link linkend="prod90">groupByItem</link> ( <COMMA> <link linkend="prod90">groupByItem</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod89" xreflabel="groupByItem"/>groupByItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod90" xreflabel="groupByItem"/>groupByItem</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod16">expression</link></para></entry></row>
<row>
@@ -728,10 +727,14 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod43" xreflabel="orderby"/>orderby</para></entry>
<entry align="left" valign="top"><para>::=
-<ORDER> <BY> <link linkend="prod90">sortKey</link> ( <ASC> | <DESC> )? ( <COMMA> <link linkend="prod90">sortKey</link> ( <ASC> | <DESC> )? )*</para></entry></row>
+<ORDER> <BY> <link linkend="prod91">sortSpecification</link> ( <COMMA> <link linkend="prod91">sortSpecification</link> )*</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod90" xreflabel="sortKey"/>sortKey</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="sortSpecification"/>sortSpecification</para></entry>
<entry align="left" valign="top"><para>::=
+<link linkend="prod92">sortKey</link> ( <ASC> | <DESC> )? ( <link linkend="prod58">nonReserved</link> <link linkend="prod58">nonReserved</link> )?</para></entry></row>
+<row>
+<entry align="right" valign="top"><para><anchor id="prod92" xreflabel="sortKey"/>sortKey</para></entry>
+<entry align="left" valign="top"><para>::=
<link linkend="prod16">expression</link></para></entry></row>
<row>
<entry align="right" valign="top"><para><anchor id="prod44" xreflabel="limit"/>limit</para></entry>
@@ -744,33 +747,33 @@
<row>
<entry align="right" valign="top"><para><anchor id="prod16" xreflabel="expression"/>expression</para></entry>
<entry align="left" valign="top"><para>::=
-<link linkend="prod91">concatExpression</link></para></entry></row>
+<link linkend="prod80">commonValueExpression</link></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod91" xreflabel="concatExpression"/>concatExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod80" xreflabel="commonValueExpression"/>commonValueExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod92">plusExpression</link> ( <CONCAT_OP> <link linkend="prod92">plusExpression</link> )* )</para></entry></row>
+( <link linkend="prod93">plusExpression</link> ( <CONCAT_OP> <link linkend="prod93">plusExpression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod92" xreflabel="plusExpression"/>plusExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod93" xreflabel="plusExpression"/>plusExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod93">timesExpression</link> ( <link linkend="prod94">plusOperator</link> <link linkend="prod93">timesExpression</link> )* )</para></entry></row>
+( <link linkend="prod94">timesExpression</link> ( <link linkend="prod95">plusOperator</link> <link linkend="prod94">timesExpression</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="plusOperator"/>plusOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod95" 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="prod93" xreflabel="timesExpression"/>timesExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod94" xreflabel="timesExpression"/>timesExpression</para></entry>
<entry align="left" valign="top"><para>::=
-( <link linkend="prod95">basicExpression</link> ( <link linkend="prod96">timesOperator</link> <link linkend="prod95">basicExpression</link> )* )</para></entry></row>
+( <link linkend="prod96">valueExpressionPrimary</link> ( <link linkend="prod97">timesOperator</link> <link linkend="prod96">valueExpressionPrimary</link> )* )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="timesOperator"/>timesOperator</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod97" 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="prod95" xreflabel="basicExpression"/>basicExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod96" xreflabel="valueExpressionPrimary"/>valueExpressionPrimary</para></entry>
<entry align="left" valign="top"><para>::=
-( <QMARK> | <link linkend="prod97">literal</link> | ( <LBRACE> <link linkend="prod58">nonReserved</link> <link linkend="prod98">function</link> <RBRACE> ) | ( <link linkend="prod57">aggregateSymbol</link> ) | ( <link linkend="prod56">xmlAgg</link> ) | ( <link linkend="prod98">function</link> ) | ( <ID> ) | ( <LPAREN> <link linkend="prod16">expression</link> <RPAREN> ) | <link linkend="prod88">subquery</link> | <link linkend="prod99">caseExpression</link> | <link linkend="prod100">searchedCaseExpression</link> )</para></entry></row>
+( <QMARK> | <link linkend="prod98">literal</link> | ( <LBRACE> <link linkend="prod58">nonReserved</link> <link linkend="prod99">function</link> <RBRACE> ) | ( <link linkend="prod57">aggregateSymbol</link> ) | ( <link linkend="prod57">aggregateSymbol</link> ) | ( <link linkend="prod57">aggregateSymbol</link> ) | ( <link linkend="prod56">xmlAgg</link> ) | ( <link linkend="prod99">function</link> ) | ( <ID> ) | ( <LPAREN> <link linkend="prod16">expression</link> <RPAREN> ) | <link linkend="prod89">subquery</link> | <link linkend="prod100">searchedCaseExpression</link> | <link linkend="prod101">caseExpression</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod99" xreflabel="caseExpression"/>caseExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod101" xreflabel="caseExpression"/>caseExpression</para></entry>
<entry align="left" valign="top"><para>::=
<CASE> <link linkend="prod16">expression</link> ( <WHEN> <link linkend="prod16">expression</link> <THEN> <link linkend="prod16">expression</link> )+ ( <ELSE> <link linkend="prod16">expression</link> )? <END></para></entry></row>
<row>
@@ -778,35 +781,39 @@
<entry align="left" valign="top"><para>::=
<CASE> ( <WHEN> <link linkend="prod28">criteria</link> <THEN> <link linkend="prod16">expression</link> )+ ( <ELSE> <link linkend="prod16">expression</link> )? <END></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod98" xreflabel="function"/>function</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod99" xreflabel="function"/>function</para></entry>
<entry align="left" valign="top"><para>::=
-( ( <CONVERT> <LPAREN> <link linkend="prod16">expression</link> <COMMA> <link linkend="prod31">dataType</link> <RPAREN> ) | ( <CAST> <LPAREN> <link linkend="prod16">expression</link> <AS> <link linkend="prod31">dataType</link> <RPAREN> ) | ( <link linkend="prod58">nonReserved</link> <LPAREN> <link linkend="prod101">intervalType</link> <COMMA> <link linkend="prod16">expression</link> <COMMA> <link linkend="prod16">expression</link> <RPAREN> ) | <link linkend="prod102">queryString</link> | ( ( <LEFT> | <RIGHT> | <CHAR> | <USER> | <YEAR> | <MONTH> | <HOUR> | <MINUTE> | <SECOND> | <XMLCONCAT> | <XMLCOMMENT> ) <LPAREN> ( <link linkend="prod16">expression</link> ( <COMMA> <link linkend="prod16">expression</link> )* )? <RPAREN> ) | ( ( <INSERT> ) <LPAREN> ( <link linkend="prod16">expression</link> ( <COMMA> <l!
ink linkend="prod16">expression</link> )* )? <RPAREN> ) | ( ( <TRANSLATE> ) <LPAREN> ( <link linkend="prod16">expression</link> ( <COMMA> <link linkend="prod16">expression</link> )* )? <RPAREN> ) | <link linkend="prod103">xmlParse</link> | <link linkend="prod104">xmlElement</link> | ( <XMLPI> <LPAREN> ( <ID> <link linkend="prod105">idExpression</link> | <link linkend="prod105">idExpression</link> ) ( <COMMA> <link linkend="prod16">expression</link> )? <RPAREN> ) | <link linkend="prod106">xmlForest</link> | <link linkend="prod69">xmlSerialize</link> | <link linkend="prod73">xmlQuery</link> | ( <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod16">expression</link> ( <COMMA> <link linkend="prod16">expression</link> )* )? <RPAREN> ) )</para></entry></row>
+( ( <CONVERT> <LPAREN> <link linkend="prod16">expression</link> <COMMA> <link linkend="prod31">dataType</link> <RPAREN> ) | ( <CAST> <LPAREN> <link linkend="prod16">expression</link> <AS> <link linkend="prod31">dataType</link> <RPAREN> ) | ( <link linkend="prod58">nonReserved</link> <LPAREN> <link linkend="prod16">expression</link> <COMMA> <link linkend="prod102">stringConstant</link> <RPAREN> ) | ( <link linkend="prod58">nonReserved</link> <LPAREN> <link linkend="prod103">intervalType</link> <COMMA> <link linkend="prod16">expression</link> <COMMA> <link linkend="prod16">expression</link> <RPAREN> ) | <link linkend="prod104">queryString</link> | ( ( <LEFT> | <RIGHT> | <CHAR> | <USER> | <YEAR> | <MONTH> | <HOUR> | <MINUTE> | <SECOND> | <XMLCONCAT> | <XMLCOMMENT> ) <LPAREN> ( <link linkend="prod16">expression</link> !
( <COMMA> <link linkend="prod16">expression</link> )* )? <RPAREN> ) | ( ( <INSERT> ) <LPAREN> ( <link linkend="prod16">expression</link> ( <COMMA> <link linkend="prod16">expression</link> )* )? <RPAREN> ) | ( ( <TRANSLATE> ) <LPAREN> ( <link linkend="prod16">expression</link> ( <COMMA> <link linkend="prod16">expression</link> )* )? <RPAREN> ) | <link linkend="prod105">xmlParse</link> | <link linkend="prod106">xmlElement</link> | ( <XMLPI> <LPAREN> ( <ID> <link linkend="prod107">idExpression</link> | <link linkend="prod107">idExpression</link> ) ( <COMMA> <link linkend="prod16">expression</link> )? <RPAREN> ) | <link linkend="prod108">xmlForest</link> | <link linkend="prod68">xmlSerialize</link> | <link linkend="prod72">xmlQuery</link> | ( <link linkend="prod2">id</link> <LPAREN> ( <link linkend="prod16">expression</link> ( <COMMA> <link linkend="prod16">expression</link> )*!
)? <RPAREN> ) )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="xmlParse"/>xmlParse</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod102" 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="prod105" xreflabel="xmlParse"/>xmlParse</para></entry>
+<entry align="left" valign="top"><para>::=
<XMLPARSE> <LPAREN> <link linkend="prod58">nonReserved</link> <link linkend="prod16">expression</link> ( <link linkend="prod58">nonReserved</link> )? <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod102" xreflabel="queryString"/>queryString</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod104" xreflabel="queryString"/>queryString</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod58">nonReserved</link> <LPAREN> <link linkend="prod16">expression</link> ( <COMMA> <link linkend="prod55">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod104" xreflabel="xmlElement"/>xmlElement</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod106" 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="prod74">xmlNamespaces</link> )? ( <COMMA> <link linkend="prod107">xmlAttributes</link> )? ( <COMMA> <link linkend="prod16">expression</link> )* <RPAREN></para></entry></row>
+<XMLELEMENT> <LPAREN> ( <ID> <link linkend="prod2">id</link> | <link linkend="prod2">id</link> ) ( <COMMA> <link linkend="prod73">xmlNamespaces</link> )? ( <COMMA> <link linkend="prod109">xmlAttributes</link> )? ( <COMMA> <link linkend="prod16">expression</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod107" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod109" xreflabel="xmlAttributes"/>xmlAttributes</para></entry>
<entry align="left" valign="top"><para>::=
<XMLATTRIBUTES> <LPAREN> <link linkend="prod55">derivedColumn</link> ( <COMMA> <link linkend="prod55">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod106" xreflabel="xmlForest"/>xmlForest</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod108" xreflabel="xmlForest"/>xmlForest</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLFOREST> <LPAREN> ( <link linkend="prod74">xmlNamespaces</link> <COMMA> )? <link linkend="prod55">derivedColumn</link> ( <COMMA> <link linkend="prod55">derivedColumn</link> )* <RPAREN></para></entry></row>
+<XMLFOREST> <LPAREN> ( <link linkend="prod73">xmlNamespaces</link> <COMMA> )? <link linkend="prod55">derivedColumn</link> ( <COMMA> <link linkend="prod55">derivedColumn</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod74" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod73" xreflabel="xmlNamespaces"/>xmlNamespaces</para></entry>
<entry align="left" valign="top"><para>::=
-<XMLNAMESPACES> <LPAREN> <link linkend="prod108">namespaceItem</link> ( <COMMA> <link linkend="prod108">namespaceItem</link> )* <RPAREN></para></entry></row>
+<XMLNAMESPACES> <LPAREN> <link linkend="prod110">namespaceItem</link> ( <COMMA> <link linkend="prod110">namespaceItem</link> )* <RPAREN></para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod108" xreflabel="namespaceItem"/>namespaceItem</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod110" 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>
@@ -818,7 +825,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="prod105" xreflabel="idExpression"/>idExpression</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod107" xreflabel="idExpression"/>idExpression</para></entry>
<entry align="left" valign="top"><para>::=
<link linkend="prod2">id</link></para></entry></row>
<row>
@@ -826,13 +833,13 @@
<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="prod101" xreflabel="intervalType"/>intervalType</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod103" xreflabel="intervalType"/>intervalType</para></entry>
<entry align="left" valign="top"><para>::=
( <link linkend="prod58">nonReserved</link> )</para></entry></row>
<row>
-<entry align="right" valign="top"><para><anchor id="prod97" xreflabel="literal"/>literal</para></entry>
+<entry align="right" valign="top"><para><anchor id="prod98" 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> | <XMLTYPE> ) <link linkend="prod1">stringVal</link> <RBRACE> ) )</para></entry></row>
+( <link linkend="prod1">stringVal</link> | <INTEGERVAL> | <FLOATVAL> | <FALSE> | <TRUE> | <UNKNOWN> | <NULL> | ( ( <BOOLEANTYPE> | <TIMESTAMPTYPE> | <DATETYPE> | <TIMETYPE> ) <link linkend="prod1">stringVal</link> <RBRACE> ) )</para></entry></row>
</tbody>
</tgroup>
</informaltable>
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/sql_support.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/sql_support.xml 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/sql_support.xml 2010-06-23 21:16:17 UTC (rev 2291)
@@ -113,8 +113,7 @@
<title>Expressions</title>
<para> Identifiers, literals, and functions can be combined into
expressions. Expressions can be used almost anywhere in a query --
- SELECT, FROM (if specifying join criteria, WHERE, GROUP BY, HAVING.
- However you currently cannot use expressions in an ORDER BY clause.</para>
+ SELECT, FROM (if specifying join criteria), WHERE, GROUP BY, HAVING, or ORDER BY.</para>
<itemizedlist>
<para>Teiid supports the following types of expressions:
</para>
@@ -973,7 +972,7 @@
</para>
<para>
Usage:
- <synopsis label="Usage">ORDER BY expression [ASC|DESC], ...</synopsis>
+ <synopsis label="Usage">ORDER BY expression [ASC|DESC] [NULLS (FIRST|LAST)], ...</synopsis>
</para>
<itemizedlist>
<para>Syntax Rules:
@@ -1004,6 +1003,12 @@
definition without a limit clause, it will be removed by the Teiid
optimizer.</para>
</listitem>
+ <listitem>
+ <para>If NULLS FIRST/LAST is specified, then nulls are guaranteed to be sorted either first or last. If the null ordering is not specified, then results will
+ typically be sorted with nulls as low values, which is Teiid's internal default sorting behavior.
+ However not all sources return results with nulss sorted as low values by default, and Teiid may return results with different null orderings.
+ </para>
+ </listitem>
</itemizedlist>
<warning>
<para>The use of positional ordering is no longer supported by the
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/impl/CapabilitiesConverter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/impl/CapabilitiesConverter.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/impl/CapabilitiesConverter.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -95,6 +95,7 @@
tgtCaps.setCapabilitySupport(Capability.INSERT_WITH_QUERYEXPRESSION, srcCaps.supportsInsertWithQueryExpression());
tgtCaps.setCapabilitySupport(Capability.QUERY_ORDERBY_UNRELATED, srcCaps.supportsOrderByUnrelated());
tgtCaps.setCapabilitySupport(Capability.QUERY_AGGREGATES_ENHANCED_NUMERIC, srcCaps.supportsAggregatesEnhancedNumeric());
+ tgtCaps.setCapabilitySupport(Capability.QUERY_ORDERBY_NULL_ORDERING, srcCaps.supportsOrderByNullOrdering());
List functions = srcCaps.getSupportedFunctions();
if(functions != null && functions.size() > 0) {
@@ -109,6 +110,7 @@
tgtCaps.setSourceProperty(Capability.CONNECTOR_ID, connectorID);
tgtCaps.setSourceProperty(Capability.MAX_QUERY_FROM_GROUPS, new Integer(srcCaps.getMaxFromGroups()));
tgtCaps.setSourceProperty(Capability.JOIN_CRITERIA_ALLOWED, srcCaps.getSupportedJoinCriteria());
+ tgtCaps.setSourceProperty(Capability.QUERY_ORDERBY_DEFAULT_NULL_ORDER, srcCaps.getDefaultNullOrder());
return tgtCaps;
}
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/language/LanguageBridgeFactory.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/language/LanguageBridgeFactory.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/language/LanguageBridgeFactory.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -429,6 +429,7 @@
} else {
orderByItem = new SortSpecification(direction, translate(symbol));
}
+ orderByItem.setNullOrdering(items.get(i).getNullOrdering());
translatedItems.add(orderByItem);
}
return new org.teiid.language.OrderBy(translatedItems);
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/capabilities/SourceCapabilities.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/capabilities/SourceCapabilities.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/capabilities/SourceCapabilities.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -164,6 +164,8 @@
QUERY_ORDERBY,
QUERY_ORDERBY_UNRELATED,
+ QUERY_ORDERBY_NULL_ORDERING,
+ QUERY_ORDERBY_DEFAULT_NULL_ORDER,
/**
* Composite support for group by and having - not
* used by the connector layer
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PlanToProcessConverter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PlanToProcessConverter.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PlanToProcessConverter.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -28,8 +28,6 @@
import java.util.List;
import java.util.Map;
-import net.sf.saxon.expr.PathMap.PathMapRoot;
-
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryPlannerException;
import org.teiid.core.CoreConstants;
@@ -343,7 +341,7 @@
SortNode sortNode = new SortNode(getID());
OrderBy orderBy = (OrderBy) node.getProperty(NodeConstants.Info.SORT_ORDER);
if (orderBy != null) {
- sortNode.setSortElements(orderBy.getSortKeys(), orderBy.getTypes());
+ sortNode.setSortElements(orderBy.getOrderByItems());
}
if (node.getType() == NodeConstants.Types.DUP_REMOVE) {
sortNode.setMode(Mode.DUP_REMOVE);
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CapabilitiesUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CapabilitiesUtil.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CapabilitiesUtil.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -45,6 +45,7 @@
import org.teiid.query.sql.symbol.Function;
import org.teiid.query.sql.symbol.AggregateSymbol.Type;
import org.teiid.query.sql.visitor.ElementCollectorVisitor;
+import org.teiid.translator.ExecutionFactory.NullOrder;
import org.teiid.translator.ExecutionFactory.SupportedJoinCriteria;
@@ -340,6 +341,18 @@
return crits;
}
+ public static NullOrder getDefaultNullOrder(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException {
+ if (metadata.isVirtualModel(modelID)){
+ return NullOrder.UNKNOWN;
+ }
+ SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
+ NullOrder order = (NullOrder)caps.getSourceProperty(Capability.QUERY_ORDERBY_DEFAULT_NULL_ORDER);
+ if (order == null) {
+ return NullOrder.UNKNOWN;
+ }
+ return order;
+ }
+
public static boolean supportsRowLimit(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, TeiidComponentException {
return supports(Capability.ROW_LIMIT, modelID, metadata, capFinder);
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -31,6 +31,7 @@
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryPlannerException;
import org.teiid.core.TeiidComponentException;
+import org.teiid.language.SortSpecification.NullOrdering;
import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.SupportConstants;
@@ -46,6 +47,7 @@
import org.teiid.query.sql.lang.Criteria;
import org.teiid.query.sql.lang.JoinType;
import org.teiid.query.sql.lang.OrderBy;
+import org.teiid.query.sql.lang.OrderByItem;
import org.teiid.query.sql.lang.SetQuery.Operation;
import org.teiid.query.sql.symbol.AggregateSymbol;
import org.teiid.query.sql.symbol.ElementSymbol;
@@ -54,6 +56,7 @@
import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.util.CommandContext;
+import org.teiid.translator.ExecutionFactory.NullOrder;
import org.teiid.translator.ExecutionFactory.SupportedJoinCriteria;
@@ -317,12 +320,37 @@
return false;
}
- //TODO: this check shouldn't be necessary, since the order by is not introducing new expressions
- List<SingleElementSymbol> sortCols = ((OrderBy)parentNode.getProperty(NodeConstants.Info.SORT_ORDER)).getSortKeys();
- for (SingleElementSymbol symbol : sortCols) {
- if(! canPushSymbol(symbol, true, modelID, metadata, capFinder)) {
+ List<OrderByItem> sortCols = ((OrderBy)parentNode.getProperty(NodeConstants.Info.SORT_ORDER)).getOrderByItems();
+ for (OrderByItem symbol : sortCols) {
+ //TODO: this check shouldn't be necessary, since the order by is not introducing new expressions
+ if(! canPushSymbol(symbol.getSymbol(), true, modelID, metadata, capFinder)) {
return false;
}
+ boolean supportsNullOrdering = CapabilitiesUtil.supports(Capability.QUERY_ORDERBY_NULL_ORDERING, modelID, metadata, capFinder);
+ NullOrder defaultNullOrder = CapabilitiesUtil.getDefaultNullOrder(modelID, metadata, capFinder);
+ if (symbol.getNullOrdering() != null) {
+ if (!supportsNullOrdering) {
+ if (symbol.getNullOrdering() == NullOrdering.FIRST) {
+ if (defaultNullOrder != NullOrder.FIRST && !(symbol.isAscending() && defaultNullOrder == NullOrder.LOW)
+ && !(!symbol.isAscending() && defaultNullOrder == NullOrder.HIGH)) {
+ return false;
+ }
+ } else if (defaultNullOrder != NullOrder.LAST && !(symbol.isAscending() && defaultNullOrder == NullOrder.HIGH)
+ && !(!symbol.isAscending() && defaultNullOrder == NullOrder.LOW)) {
+ return false;
+ }
+ symbol.setNullOrdering(null);
+ }
+ } else if (supportsNullOrdering && defaultNullOrder != NullOrder.LOW) {
+ //try to match the expected default of low
+ if (symbol.isAscending()) {
+ if (defaultNullOrder != NullOrder.FIRST) {
+ symbol.setNullOrdering(NullOrdering.FIRST);
+ }
+ } else if (defaultNullOrder != NullOrder.LAST) {
+ symbol.setNullOrdering(NullOrdering.LAST);
+ }
+ }
}
if (accessNode.getLastChild() != null) {
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 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/GroupingNode.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -194,11 +194,10 @@
ElementSymbol element = new ElementSymbol("val"); //$NON-NLS-1$
element.setType(inputType);
filter.setElements(Arrays.asList(element));
- filter.setSortElements(filter.getElements());
functions[i] = filter;
} else if (aggSymbol.getOrderBy() != null) { //handle the xmlagg case
int[] orderIndecies = new int[aggSymbol.getOrderBy().getOrderByItems().size()];
- List<Boolean> aggSortTypes = new ArrayList<Boolean>(orderIndecies.length);
+ List<OrderByItem> orderByItems = new ArrayList<OrderByItem>(orderIndecies.length);
List<ElementSymbol> schema = new ArrayList<ElementSymbol>(orderIndecies.length + 1);
ElementSymbol element = new ElementSymbol("val"); //$NON-NLS-1$
element.setType(inputType);
@@ -206,16 +205,17 @@
for (ListIterator<OrderByItem> iterator = aggSymbol.getOrderBy().getOrderByItems().listIterator(); iterator.hasNext();) {
OrderByItem item = iterator.next();
orderIndecies[iterator.previousIndex()] = collectExpression(item.getSymbol());
- aggSortTypes.add(item.isAscending());
element = new ElementSymbol(String.valueOf(iterator.previousIndex()));
element.setType(inputType);
schema.add(element);
+ OrderByItem newItem = item.clone();
+ newItem.setSymbol(element);
+ orderByItems.add(newItem);
}
SortingFilter filter = new SortingFilter(functions[i], getBufferManager(), getConnectionID(), false);
- filter.setSortTypes(aggSortTypes);
filter.setIndecies(orderIndecies);
filter.setElements(schema);
- filter.setSortElements(schema.subList(1, schema.size()));
+ filter.setSortItems(orderByItems);
functions[i] = filter;
}
functions[i].setExpressionIndex(index);
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 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/ListNestedSortComparator.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -24,9 +24,8 @@
import java.util.List;
-import org.teiid.core.util.Assertion;
+import org.teiid.language.SortSpecification.NullOrdering;
-
/**
* This class can be used for comparing lists of elements, when the fields to
* be sorted on and the comparison mechanism are dynamically specified. <p>
@@ -56,7 +55,7 @@
* { "a2", "b2", "c2" }
* </pre>
*/
-public class ListNestedSortComparator implements java.util.Comparator, java.io.Serializable {
+public class ListNestedSortComparator<T extends Comparable<? super T>> implements java.util.Comparator<List<T>> {
/**
* Specifies which fields to sort on.
@@ -72,10 +71,12 @@
/**
* List of booleans indicating the order in which each column should be sorted
*/
- private List orderTypes = null;
+ private List<Boolean> orderTypes = null;
private boolean isDistinct = true;
private int distinctIndex;
+
+ private List<NullOrdering> nullOrdering;
/**
* Constructs an instance of this class given the indicies of the parameters
@@ -101,7 +102,7 @@
* to sort on, and orderList used to determine the order in which each column
* is sorted.
*/
- public ListNestedSortComparator( int[] sortParameters, List orderTypes ) {
+ public ListNestedSortComparator( int[] sortParameters, List<Boolean> orderTypes ) {
this.sortParameters = sortParameters;
this.orderTypes = orderTypes;
}
@@ -113,6 +114,10 @@
public void setDistinctIndex(int distinctIndex) {
this.distinctIndex = distinctIndex;
}
+
+ public void setNullOrdering(List<NullOrdering> nullOrdering) {
+ this.nullOrdering = nullOrdering;
+ }
/**
* Compares its two arguments for order. Returns a negative integer,
@@ -129,14 +134,12 @@
* @param o1 The first object being compared
* @param o2 The second object being compared
*/
- public int compare( Object o1, Object o2 ) {
- List list1 = (List)o1;
- List list2 = (List)o2;
-
+
+ public int compare(java.util.List<T> list1, java.util.List<T> list2) {
int compare = 0;
for (int k = 0; k < sortParameters.length; k++) {
- Object param1 = list1.get(sortParameters[k]);
- Object param2 = list2.get(sortParameters[k]);
+ T param1 = list1.get(sortParameters[k]);
+ T param2 = list2.get(sortParameters[k]);
if( param1 == null ) {
if(param2 == null ) {
@@ -145,17 +148,29 @@
} else {
// param1 = null, so is less than a non-null
compare = -1;
+ NullOrdering no = getNullOrdering(k);
+ if (no != null) {
+ if (nullOrdering.get(k) == NullOrdering.FIRST) {
+ return -1;
+ }
+ return 1;
+ }
}
- } else if( param2 == null ) {
+ } else if( param2 == null ) {
// param1 != null, param2 == null
compare = 1;
- } else if ( param1 instanceof Comparable ) {
- compare = ((Comparable)param1).compareTo(param2);
- } else {
- Assertion.failed("Expected comparable types"); //$NON-NLS-1$
- }
+ NullOrdering no = getNullOrdering(k);
+ if (no != null) {
+ if (nullOrdering.get(k) == NullOrdering.FIRST) {
+ return 1;
+ }
+ return -1;
+ }
+ } else {
+ compare = param1.compareTo(param2);
+ }
if (compare != 0) {
- boolean asc = orderTypes != null?((Boolean)orderTypes.get(k)).booleanValue():this.ascendingOrder;
+ boolean asc = orderTypes != null?orderTypes.get(k):this.ascendingOrder;
return asc ? compare : -compare;
} else if (k == distinctIndex) {
isDistinct = false;
@@ -164,5 +179,12 @@
return 0;
}
+ private NullOrdering getNullOrdering(int index) {
+ if (nullOrdering != null) {
+ return nullOrdering.get(index);
+ }
+ return null;
+ }
+
} // END CLASS
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/SortNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/SortNode.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/SortNode.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -24,7 +24,6 @@
import static org.teiid.query.analysis.AnalysisRecord.*;
-import java.util.ArrayList;
import java.util.List;
import org.teiid.client.plan.PlanNode;
@@ -36,13 +35,12 @@
import org.teiid.core.TeiidProcessingException;
import org.teiid.query.processor.BatchIterator;
import org.teiid.query.processor.relational.SortUtility.Mode;
-import org.teiid.query.sql.lang.OrderBy;
+import org.teiid.query.sql.lang.OrderByItem;
public class SortNode extends RelationalNode {
- private List sortElements;
- private List<Boolean> sortTypes;
+ private List<OrderByItem> items;
private Mode mode = Mode.SORT;
private SortUtility sortUtility;
@@ -65,13 +63,12 @@
outputTs = null;
}
- public void setSortElements(List sortElements, List<Boolean> sortTypes) {
- this.sortElements = sortElements;
- this.sortTypes = sortTypes;
+ public void setSortElements(List<OrderByItem> items) {
+ this.items = items;
}
- public List getSortElements() {
- return this.sortElements;
+ public List<OrderByItem> getSortElements() {
+ return this.items;
}
public Mode getMode() {
@@ -93,8 +90,7 @@
private void sortPhase() throws BlockedException, TeiidComponentException, TeiidProcessingException {
if (this.sortUtility == null) {
- this.sortUtility = new SortUtility(new BatchIterator(getChildren()[0]), sortElements,
- sortTypes, this.mode, getBufferManager(),
+ this.sortUtility = new SortUtility(new BatchIterator(getChildren()[0]), items, this.mode, getBufferManager(),
getConnectionID());
}
this.output = this.sortUtility.sort();
@@ -141,14 +137,13 @@
super.getNodeString(str);
str.append("[").append(mode).append("] "); //$NON-NLS-1$ //$NON-NLS-2$
if (this.mode != Mode.DUP_REMOVE) {
- str.append(sortElements);
+ str.append(this.items);
}
}
protected void copy(SortNode source, SortNode target){
super.copy(source, target);
- target.sortElements = source.sortElements;
- target.sortTypes = source.sortTypes;
+ target.items = source.items;
target.mode = source.mode;
}
@@ -162,18 +157,8 @@
public PlanNode getDescriptionProperties() {
PlanNode props = super.getDescriptionProperties();
- if(this.mode != Mode.DUP_REMOVE && this.sortElements != null) {
- Boolean ASC_B = Boolean.valueOf(OrderBy.ASC);
- List<String> cols = new ArrayList<String>(this.sortElements.size());
- for(int i=0; i<this.sortElements.size(); i++) {
- String elemName = this.sortElements.get(i).toString();
- if(this.sortTypes.get(i).equals(ASC_B)) {
- cols.add(elemName + " ASC"); //$NON-NLS-1$
- } else {
- cols.add(elemName + " DESC"); //$NON-NLS-1$
- }
- }
- props.addProperty(PROP_SORT_COLS, cols);
+ if(this.mode != Mode.DUP_REMOVE && this.items != null) {
+ props.addProperty(PROP_SORT_COLS, this.items.toString());
}
props.addProperty(PROP_SORT_MODE, this.mode.toString());
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/SortUtility.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/SortUtility.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/SortUtility.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -39,11 +39,12 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.core.util.Assertion;
+import org.teiid.language.SortSpecification.NullOrdering;
import org.teiid.logging.LogManager;
import org.teiid.logging.MessageLevel;
import org.teiid.query.sql.lang.OrderBy;
+import org.teiid.query.sql.lang.OrderByItem;
import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
/**
@@ -106,7 +107,7 @@
private static final int DONE = 3;
private Collection<List<?>> workingTuples;
- public SortUtility(TupleSource sourceID, List sortElements, List<Boolean> sortTypes, Mode mode, BufferManager bufferMgr,
+ public SortUtility(TupleSource sourceID, List<OrderByItem> items, Mode mode, BufferManager bufferMgr,
String groupName) {
this.source = sourceID;
this.mode = mode;
@@ -114,34 +115,49 @@
this.groupName = groupName;
this.schema = this.source.getSchema();
this.schemaSize = bufferManager.getSchemaSize(this.schema);
- int distinctIndex = sortElements != null? sortElements.size() - 1:0;
- if (mode != Mode.SORT) {
- if (sortElements == null) {
- sortElements = this.schema;
- sortTypes = Collections.nCopies(sortElements.size(), OrderBy.ASC);
- } else if (sortElements.size() < schema.size()) {
- sortElements = new ArrayList(sortElements);
+ int distinctIndex = items != null? items.size() - 1:0;
+ List<Expression> sortElements = null;
+ List<Boolean> sortTypes = null;
+ List<NullOrdering> nullOrderings = null;
+ if (items == null) {
+ sortElements = (List<Expression>) this.schema;
+ sortTypes = Collections.nCopies(sortElements.size(), OrderBy.ASC);
+ } else {
+ sortElements = new ArrayList(items.size());
+ sortTypes = new ArrayList<Boolean>(items.size());
+ nullOrderings = new ArrayList<NullOrdering>(items.size());
+ for (OrderByItem orderByItem : items) {
+ sortElements.add(orderByItem.getSymbol());
+ sortTypes.add(orderByItem.isAscending());
+ nullOrderings.add(orderByItem.getNullOrdering());
+ }
+ if (items.size() < schema.size() && mode != Mode.SORT) {
List<Expression> toAdd = new ArrayList<Expression>(schema);
toAdd.removeAll(sortElements);
sortElements.addAll(toAdd);
- sortTypes = new ArrayList<Boolean>(sortTypes);
sortTypes.addAll(Collections.nCopies(sortElements.size() - sortTypes.size(), OrderBy.ASC));
- }
+ nullOrderings.addAll(Collections.nCopies(sortElements.size() - nullOrderings.size(), (NullOrdering)null));
+ }
}
int[] cols = new int[sortElements.size()];
-
- for (ListIterator<SingleElementSymbol> iter = sortElements.listIterator(); iter.hasNext();) {
- SingleElementSymbol elem = iter.next();
+ for (ListIterator<Expression> iter = sortElements.listIterator(); iter.hasNext();) {
+ Expression elem = iter.next();
cols[iter.previousIndex()] = schema.indexOf(elem);
Assertion.assertTrue(cols[iter.previousIndex()] != -1);
}
this.comparator = new ListNestedSortComparator(cols, sortTypes);
this.comparator.setDistinctIndex(distinctIndex);
+ this.comparator.setNullOrdering(nullOrderings);
}
- public boolean isDone() {
+ public SortUtility(TupleSource ts, List expressions, List<Boolean> types,
+ Mode mode, BufferManager bufferManager, String connectionID) {
+ this(ts, new OrderBy(expressions, types).getOrderByItems(), mode, bufferManager, connectionID);
+ }
+
+ public boolean isDone() {
return this.doneReading && this.phase == DONE;
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/SortingFilter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/SortingFilter.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/SortingFilter.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -35,6 +35,7 @@
import org.teiid.core.TeiidProcessingException;
import org.teiid.query.function.aggregate.AggregateFunction;
import org.teiid.query.processor.relational.SortUtility.Mode;
+import org.teiid.query.sql.lang.OrderByItem;
/**
*/
@@ -49,8 +50,7 @@
// Derived and static - can be reused
private List elements;
- private List sortTypes;
- private List sortElements;
+ private List<OrderByItem> sortItems;
private int[] indecies = NO_INDECIES;
@@ -78,16 +78,12 @@
this.elements = elements;
}
- public void setSortTypes(List sortTypes) {
- this.sortTypes = sortTypes;
- }
-
public void setIndecies(int[] indecies) {
this.indecies = indecies;
}
- public void setSortElements(List sortElements) {
- this.sortElements = sortElements;
+ public void setSortItems(List<OrderByItem> sortItems) {
+ this.sortItems = sortItems;
}
/**
@@ -138,7 +134,7 @@
// Sort
if (sortUtility == null) {
- sortUtility = new SortUtility(collectionBuffer.createIndexedTupleSource(), sortElements, sortTypes, removeDuplicates?Mode.DUP_REMOVE_SORT:Mode.SORT, mgr, groupName);
+ sortUtility = new SortUtility(collectionBuffer.createIndexedTupleSource(), sortItems, removeDuplicates?Mode.DUP_REMOVE_SORT:Mode.SORT, mgr, groupName);
}
TupleBuffer sorted = sortUtility.sort();
sorted.setForwardOnly(true);
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderBy.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderBy.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderBy.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -136,10 +136,6 @@
visitor.visit(this);
}
- // =========================================================================
- // O V E R R I D D E N O B J E C T M E T H O D S
- // =========================================================================
-
/**
* Return deep copy of this ORDER BY clause.
*/
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderByItem.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderByItem.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/OrderByItem.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -22,6 +22,7 @@
package org.teiid.query.sql.lang;
+import org.teiid.language.SortSpecification.NullOrdering;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.symbol.SingleElementSymbol;
@@ -34,6 +35,7 @@
private Integer expressionPosition; //set during resolving to the select clause position
private boolean ascending = true;
private SingleElementSymbol symbol;
+ private NullOrdering nullOrdering;
public OrderByItem(SingleElementSymbol symbol, boolean ascending) {
this.symbol = symbol;
@@ -63,6 +65,14 @@
public void setSymbol(SingleElementSymbol symbol) {
this.symbol = symbol;
}
+
+ public NullOrdering getNullOrdering() {
+ return nullOrdering;
+ }
+
+ public void setNullOrdering(NullOrdering nullOrdering) {
+ this.nullOrdering = nullOrdering;
+ }
/**
*
@@ -81,6 +91,7 @@
public OrderByItem clone() {
OrderByItem clone = new OrderByItem((SingleElementSymbol)this.symbol.clone(), ascending);
clone.expressionPosition = this.expressionPosition;
+ clone.nullOrdering = this.nullOrdering;
return clone;
}
@@ -93,7 +104,7 @@
return false;
}
OrderByItem o = (OrderByItem)obj;
- return o.symbol.equals(symbol) && o.ascending == this.ascending;
+ return o.symbol.equals(symbol) && o.ascending == this.ascending && o.nullOrdering == this.nullOrdering;
}
@Override
Modified: trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -36,7 +36,6 @@
import org.teiid.language.SQLConstants;
import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.language.SQLConstants.Tokens;
-import org.teiid.query.function.FunctionLibrary;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.lang.AtomicCriteria;
@@ -127,7 +126,6 @@
import org.teiid.query.sql.symbol.XMLNamespaces.NamespaceItem;
import org.teiid.translator.SourceSystemFunctions;
-
/**
* <p>The SQLStringVisitor will visit a set of language objects and return the
* corresponding SQL string representation. </p>
@@ -726,6 +724,12 @@
parts.add(SPACE);
parts.add(DESC);
} // Don't print default "ASC"
+ if (obj.getNullOrdering() != null) {
+ parts.add(SPACE);
+ parts.add(NonReserved.NULLS);
+ parts.add(SPACE);
+ parts.add(obj.getNullOrdering().name());
+ }
}
public void visit(DynamicCommand obj) {
Modified: trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
===================================================================
--- trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2010-06-23 21:16:17 UTC (rev 2291)
@@ -2741,38 +2741,45 @@
*/
OrderBy orderby(ParseInfo info) :
{
- SingleElementSymbol ex = null;
- Token type = null;
OrderBy orderby = new OrderBy();
- boolean ascending = true;
+ OrderByItem item = null;
}
{
<ORDER> <BY>
- ex=sortKey(info) [<ASC> | type=<DESC>]
+ item = sortSpecification(info)
{
- ascending = true;
- if(type != null) {
- ascending = false;
- type=null;
- }
- orderby.addVariable(ex, ascending);
+ orderby.getOrderByItems().add(item);
}
(<COMMA>
- ex=sortKey(info) [<ASC> | type=<DESC>]
+ item = sortSpecification(info)
{
- ascending = true;
- if(type != null) {
- ascending = false;
- type=null;
- }
- orderby.addVariable(ex, ascending);
- }
+ orderby.getOrderByItems().add(item);
+ }
)*
{
return orderby;
}
}
+OrderByItem sortSpecification(ParseInfo info) :
+{
+ SingleElementSymbol ex = null;
+ boolean ascending = true;
+ String nullOrdering = null;
+}
+{
+ ex=sortKey(info)
+ [<ASC> | <DESC> {ascending=false;}]
+ [nonReserved("NULLS") nullOrdering = nonReserved("FIRST", "LAST")]
+ {
+ OrderByItem item = new OrderByItem(ex, ascending);
+ if (nullOrdering != null) {
+ item.setNullOrdering(org.teiid.language.SortSpecification.NullOrdering.valueOf(nullOrdering.toUpperCase()));
+ }
+ return item;
+ }
+}
+
SingleElementSymbol sortKey(ParseInfo info) :
{
Expression ex = null;
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleMergeVirtual.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleMergeVirtual.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleMergeVirtual.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -304,7 +304,7 @@
new String[] {"SELECT g_0.e1 FROM pm1.g1 AS g_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
SortNode node = (SortNode)plan.getRootNode();
- assertTrue("Alias was not accounted for in sort node", node.getElements().containsAll(node.getSortElements())); //$NON-NLS-1$
+ assertTrue("Alias was not accounted for in sort node", node.getElements().get(0).equals(node.getSortElements().get(0).getSymbol())); //$NON-NLS-1$
}
@Test public void testMergeImplicitGroupBy() throws Exception {
Modified: trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -39,6 +39,7 @@
import org.teiid.core.TeiidException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.language.SQLConstants.Reserved;
+import org.teiid.language.SortSpecification.NullOrdering;
import org.teiid.query.sql.lang.BetweenCriteria;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.CompareCriteria;
@@ -61,6 +62,7 @@
import org.teiid.query.sql.lang.MatchCriteria;
import org.teiid.query.sql.lang.NotCriteria;
import org.teiid.query.sql.lang.OrderBy;
+import org.teiid.query.sql.lang.OrderByItem;
import org.teiid.query.sql.lang.PredicateCriteria;
import org.teiid.query.sql.lang.Query;
import org.teiid.query.sql.lang.SPParameter;
@@ -2643,30 +2645,18 @@
/** SELECT a FROM db.g WHERE b = aString order by c desc*/
@Test public void testOrderByDesc(){
- GroupSymbol g = new GroupSymbol("db.g"); //$NON-NLS-1$
- From from = new From();
- from.addGroup(g);
-
- Select select = new Select();
- ElementSymbol a = new ElementSymbol("a"); //$NON-NLS-1$
- select.addSymbol(a);
-
- Criteria crit = new CompareCriteria(new ElementSymbol("b"), CompareCriteria.EQ, new ElementSymbol("aString")); //$NON-NLS-1$ //$NON-NLS-2$
-
ArrayList elements = new ArrayList();
elements.add(new ElementSymbol("c")); //$NON-NLS-1$
ArrayList orderTypes = new ArrayList();
orderTypes.add(Boolean.FALSE);
OrderBy orderBy = new OrderBy(elements, orderTypes);
-
- Query query = new Query(select, from, crit, orderBy, null);
+
+ Query query = getOrderByQuery(orderBy);
helpTest("SELECT a FROM db.g WHERE b = aString ORDER BY c desc", //$NON-NLS-1$
"SELECT a FROM db.g WHERE b = aString ORDER BY c DESC", //$NON-NLS-1$
query);
- }
-
- /** SELECT a FROM db.g WHERE b = aString order by c,d*/
- @Test public void testOrderBys(){
+ }
+ private Query getOrderByQuery(OrderBy orderBy) {
GroupSymbol g = new GroupSymbol("db.g"); //$NON-NLS-1$
From from = new From();
from.addGroup(g);
@@ -2677,12 +2667,18 @@
Criteria crit = new CompareCriteria(new ElementSymbol("b"), CompareCriteria.EQ, new ElementSymbol("aString")); //$NON-NLS-1$ //$NON-NLS-2$
+ Query query = new Query(select, from, crit, orderBy, null);
+ return query;
+ }
+
+ /** SELECT a FROM db.g WHERE b = aString order by c,d*/
+ @Test public void testOrderBys(){
ArrayList elements = new ArrayList();
elements.add(new ElementSymbol("c")); //$NON-NLS-1$
elements.add(new ElementSymbol("d")); //$NON-NLS-1$
OrderBy orderBy = new OrderBy(elements);
- Query query = new Query(select, from, crit, orderBy, null);
+ Query query = getOrderByQuery(orderBy);
helpTest("SELECT a FROM db.g WHERE b = aString ORDER BY c,d", //$NON-NLS-1$
"SELECT a FROM db.g WHERE b = aString ORDER BY c, d", //$NON-NLS-1$
query);
@@ -2690,16 +2686,6 @@
/** SELECT a FROM db.g WHERE b = aString order by c desc,d desc*/
@Test public void testOrderBysDesc(){
- GroupSymbol g = new GroupSymbol("db.g"); //$NON-NLS-1$
- From from = new From();
- from.addGroup(g);
-
- Select select = new Select();
- ElementSymbol a = new ElementSymbol("a"); //$NON-NLS-1$
- select.addSymbol(a);
-
- Criteria crit = new CompareCriteria(new ElementSymbol("b"), CompareCriteria.EQ, new ElementSymbol("aString")); //$NON-NLS-1$ //$NON-NLS-2$
-
ArrayList elements = new ArrayList();
elements.add(new ElementSymbol("c")); //$NON-NLS-1$
elements.add(new ElementSymbol("d")); //$NON-NLS-1$
@@ -2708,7 +2694,7 @@
orderTypes.add(Boolean.FALSE);
OrderBy orderBy = new OrderBy(elements, orderTypes);
- Query query = new Query(select, from, crit, orderBy, null);
+ Query query = getOrderByQuery(orderBy);
helpTest("SELECT a FROM db.g WHERE b = aString ORDER BY c desc,d desc", //$NON-NLS-1$
"SELECT a FROM db.g WHERE b = aString ORDER BY c DESC, d DESC", //$NON-NLS-1$
query);
@@ -2716,16 +2702,6 @@
/** SELECT a FROM db.g WHERE b = aString order by c desc,d*/
@Test public void testMixedOrderBys(){
- GroupSymbol g = new GroupSymbol("db.g"); //$NON-NLS-1$
- From from = new From();
- from.addGroup(g);
-
- Select select = new Select();
- ElementSymbol a = new ElementSymbol("a"); //$NON-NLS-1$
- select.addSymbol(a);
-
- Criteria crit = new CompareCriteria(new ElementSymbol("b"), CompareCriteria.EQ, new ElementSymbol("aString")); //$NON-NLS-1$ //$NON-NLS-2$
-
ArrayList elements = new ArrayList();
elements.add(new ElementSymbol("c")); //$NON-NLS-1$
elements.add(new ElementSymbol("d")); //$NON-NLS-1$
@@ -2734,12 +2710,27 @@
orderTypes.add(Boolean.TRUE);
OrderBy orderBy = new OrderBy(elements, orderTypes);
- Query query = new Query(select, from, crit, orderBy, null);
+ Query query = getOrderByQuery(orderBy);
helpTest("SELECT a FROM db.g WHERE b = aString ORDER BY c desc,d", //$NON-NLS-1$
"SELECT a FROM db.g WHERE b = aString ORDER BY c DESC, d", //$NON-NLS-1$
query);
}
+
+ @Test public void testOrderByNullOrdering(){
+ OrderBy orderBy = new OrderBy();
+ OrderByItem item = new OrderByItem(new ElementSymbol("c"), true);
+ item.setNullOrdering(NullOrdering.FIRST);
+ orderBy.getOrderByItems().add(item);
+ item = new OrderByItem(new ElementSymbol("d"), false);
+ item.setNullOrdering(NullOrdering.LAST);
+ orderBy.getOrderByItems().add(item);
+ Query query = getOrderByQuery(orderBy);
+ helpTest("SELECT a FROM db.g WHERE b = aString ORDER BY c NULLS FIRST,d desc nulls last", //$NON-NLS-1$
+ "SELECT a FROM db.g WHERE b = aString ORDER BY c NULLS FIRST, d DESC NULLS LAST", //$NON-NLS-1$
+ query);
+ }
+
// ================================== match ====================================
/** SELECT a FROM db.g WHERE b LIKE 'aString'*/
Added: trunk/engine/src/test/java/org/teiid/query/processor/TestOrderByProcessing.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestOrderByProcessing.java (rev 0)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestOrderByProcessing.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -0,0 +1,202 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.query.processor;
+
+import static org.teiid.query.processor.TestProcessor.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.Test;
+import org.teiid.query.optimizer.TestOptimizer;
+import org.teiid.query.optimizer.capabilities.BasicSourceCapabilities;
+import org.teiid.query.optimizer.capabilities.FakeCapabilitiesFinder;
+import org.teiid.query.optimizer.capabilities.SourceCapabilities.Capability;
+import org.teiid.query.unittest.FakeMetadataFacade;
+import org.teiid.query.unittest.FakeMetadataFactory;
+import org.teiid.translator.ExecutionFactory.NullOrder;
+
+@SuppressWarnings({"nls", "unchecked"})
+public class TestOrderByProcessing {
+
+ @Test public void testOrderByDescAll() {
+ String sql = "SELECT distinct e1 from pm1.g2 order by e1 desc limit 1"; //$NON-NLS-1$
+
+ List[] expected = new List[] {
+ Arrays.asList("c"),
+ };
+
+ FakeDataManager dataManager = new FakeDataManager();
+ sampleData1(dataManager);
+
+ ProcessorPlan plan = helpGetPlan(helpParse(sql), FakeMetadataFactory.example1Cached());
+
+ helpProcess(plan, dataManager, expected);
+ }
+
+ @Test public void testOrderByOutsideOfSelect() {
+ // Create query
+ String sql = "SELECT e1 FROM (select e1, e2 || e3 as e2 from pm1.g2) x order by e2"; //$NON-NLS-1$
+
+ //a, a, null, c, b, a
+ // Create expected results
+ List[] expected = new List[] {
+ Arrays.asList("a"),
+ Arrays.asList("a"),
+ Arrays.asList((String)null),
+ Arrays.asList("c"),
+ Arrays.asList("b"),
+ Arrays.asList("a"),
+ };
+
+ // Construct data manager with data
+ FakeDataManager dataManager = new FakeDataManager();
+ sampleData1(dataManager);
+
+ // Plan query
+ ProcessorPlan plan = helpGetPlan(helpParse(sql), FakeMetadataFactory.example1Cached(), TestOptimizer.getGenericFinder());
+
+ // Run query
+ helpProcess(plan, dataManager, expected);
+ }
+
+ @Test public void testOrderByUnrelatedExpression() {
+ String sql = "SELECT e1, e2 + 1 from pm1.g2 order by e3 || e2 limit 1"; //$NON-NLS-1$
+
+ List[] expected = new List[] {
+ Arrays.asList("a", 1),
+ };
+
+ FakeDataManager dataManager = new FakeDataManager();
+ sampleData1(dataManager);
+
+ ProcessorPlan plan = helpGetPlan(helpParse(sql), FakeMetadataFactory.example1Cached(), TestOptimizer.getGenericFinder());
+
+ helpProcess(plan, dataManager, expected);
+ }
+
+ /**
+ * A control test to ensure that y will still exist for sorting
+ */
+ @Test public void testOrderByWithDuplicateExpressions() throws Exception {
+ String sql = "select e1 as x, e1 as y from pm1.g1 order by y ASC"; //$NON-NLS-1$
+
+ FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
+
+ ProcessorPlan plan = helpGetPlan(helpParse(sql), metadata);
+
+ List[] expected = new List[] {
+ Arrays.asList(null, null),
+ Arrays.asList("a", "a"), //$NON-NLS-1$ //$NON-NLS-2$
+ Arrays.asList("a", "a"), //$NON-NLS-1$ //$NON-NLS-2$
+ Arrays.asList("a", "a"), //$NON-NLS-1$ //$NON-NLS-2$
+ Arrays.asList("b", "b"), //$NON-NLS-1$ //$NON-NLS-2$
+ Arrays.asList("c", "c"), //$NON-NLS-1$ //$NON-NLS-2$
+ };
+
+ FakeDataManager manager = new FakeDataManager();
+ sampleData1(manager);
+ helpProcess(plan, manager, expected);
+ }
+
+ @Test public void testExplicitNullOrdering() throws Exception {
+ String sql = "select e1, case when e4 = 2.0 then null else e4 end as x from pm1.g1 order by e1 ASC NULLS LAST, x DESC NULLS FIRST"; //$NON-NLS-1$
+
+ FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
+ ProcessorPlan plan = helpGetPlan(helpParse(sql), metadata);
+
+ List[] expected = new List[] { Arrays.asList("a", null),
+ Arrays.asList("a", null), //$NON-NLS-1$
+ Arrays.asList("a", 7.0), //$NON-NLS-1$
+ Arrays.asList("b", 0.0), //$NON-NLS-1$
+ Arrays.asList("c", null), //$NON-NLS-1$
+ Arrays.asList(null, 1.0),
+ };
+
+ FakeDataManager manager = new FakeDataManager();
+ sampleData1(manager);
+ helpProcess(plan, manager, expected);
+ }
+
+ @Test public void testNullOrdering() throws Exception {
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_ORDERBY_NULL_ORDERING, true);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ ProcessorPlan plan = TestOptimizer.helpPlan("select e1 from pm1.g1 order by e1 desc, e2 asc", //$NON-NLS-1$
+ FakeMetadataFactory.example1Cached(), null, capFinder,
+ new String[] { "SELECT g_0.e1 AS c_0 FROM pm1.g1 AS g_0 ORDER BY c_0 DESC NULLS LAST, g_0.e2 NULLS FIRST"}, //$NON-NLS-1$
+ TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING);
+
+ TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
+ }
+
+ @Test public void testNullOrdering1() throws Exception {
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_ORDERBY_NULL_ORDERING, true);
+ caps.setSourceProperty(Capability.QUERY_ORDERBY_DEFAULT_NULL_ORDER, NullOrder.LAST);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ ProcessorPlan plan = TestOptimizer.helpPlan("select e1 from pm1.g1 order by e1 desc, e2 asc", //$NON-NLS-1$
+ FakeMetadataFactory.example1Cached(), null, capFinder,
+ new String[] { "SELECT g_0.e1 AS c_0 FROM pm1.g1 AS g_0 ORDER BY c_0 DESC, g_0.e2 NULLS FIRST"}, //$NON-NLS-1$
+ TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING);
+
+ TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
+ }
+
+ @Test public void testNullOrdering2() throws Exception {
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_ORDERBY_NULL_ORDERING, true);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ ProcessorPlan plan = TestOptimizer.helpPlan("select e1 from pm1.g1 order by e1 desc NULLS FIRST, e2 asc NULLS LAST", //$NON-NLS-1$
+ FakeMetadataFactory.example1Cached(), null, capFinder,
+ new String[] { "SELECT g_0.e1 AS c_0 FROM pm1.g1 AS g_0 ORDER BY c_0 DESC NULLS FIRST, g_0.e2 NULLS LAST"}, //$NON-NLS-1$
+ TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING);
+
+ TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
+ }
+
+ /**
+ * The engine will remove the null ordering if it's not needed
+ * @throws Exception
+ */
+ @Test public void testNullOrdering3() throws Exception {
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setSourceProperty(Capability.QUERY_ORDERBY_DEFAULT_NULL_ORDER, NullOrder.HIGH);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ ProcessorPlan plan = TestOptimizer.helpPlan("select e1 from pm1.g1 order by e1 desc, e2 asc NULLS LAST", //$NON-NLS-1$
+ FakeMetadataFactory.example1Cached(), null, capFinder,
+ new String[] { "SELECT g_0.e1 AS c_0 FROM pm1.g1 AS g_0 ORDER BY c_0 DESC, g_0.e2"}, //$NON-NLS-1$
+ TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING);
+
+ TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
+ }
+
+}
Property changes on: trunk/engine/src/test/java/org/teiid/query/processor/TestOrderByProcessing.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -7254,30 +7254,6 @@
}
/**
- * A control test to ensure that y will still exist for sorting
- */
- @Test public void testOrderByWithDuplicateExpressions() throws Exception {
- String sql = "select e1 as x, e1 as y from pm1.g1 order by y ASC"; //$NON-NLS-1$
-
- FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
-
- ProcessorPlan plan = helpGetPlan(helpParse(sql), metadata);
-
- List[] expected = new List[] {
- Arrays.asList(null, null),
- Arrays.asList("a", "a"), //$NON-NLS-1$ //$NON-NLS-2$
- Arrays.asList("a", "a"), //$NON-NLS-1$ //$NON-NLS-2$
- Arrays.asList("a", "a"), //$NON-NLS-1$ //$NON-NLS-2$
- Arrays.asList("b", "b"), //$NON-NLS-1$ //$NON-NLS-2$
- Arrays.asList("c", "c"), //$NON-NLS-1$ //$NON-NLS-2$
- };
-
- FakeDataManager manager = new FakeDataManager();
- sampleData1(manager);
- helpProcess(plan, manager, expected);
- }
-
- /**
* This is a control test. It should work regardless of whether the reference is aliased
* since accessnodes are now fully positional
*/
@@ -7368,47 +7344,6 @@
assertEquals(2, dataManager.getCommandHistory().size());
}
- @Test public void testOrderByOutsideOfSelect() {
- // Create query
- String sql = "SELECT e1 FROM (select e1, e2 || e3 as e2 from pm1.g2) x order by e2"; //$NON-NLS-1$
-
- //a, a, null, c, b, a
- // Create expected results
- List[] expected = new List[] {
- Arrays.asList("a"),
- Arrays.asList("a"),
- Arrays.asList(new String[] {null}),
- Arrays.asList("c"),
- Arrays.asList("b"),
- Arrays.asList("a"),
- };
-
- // Construct data manager with data
- FakeDataManager dataManager = new FakeDataManager();
- sampleData1(dataManager);
-
- // Plan query
- ProcessorPlan plan = helpGetPlan(helpParse(sql), FakeMetadataFactory.example1Cached(), TestOptimizer.getGenericFinder());
-
- // Run query
- helpProcess(plan, dataManager, expected);
- }
-
- @Test public void testOrderByUnrelatedExpression() {
- String sql = "SELECT e1, e2 + 1 from pm1.g2 order by e3 || e2 limit 1"; //$NON-NLS-1$
-
- List[] expected = new List[] {
- Arrays.asList("a", 1),
- };
-
- FakeDataManager dataManager = new FakeDataManager();
- sampleData1(dataManager);
-
- ProcessorPlan plan = helpGetPlan(helpParse(sql), FakeMetadataFactory.example1Cached(), TestOptimizer.getGenericFinder());
-
- helpProcess(plan, dataManager, expected);
- }
-
/**
* Test a query that uses ambiguous alias names in the top level query and
* its sub-query and uses columns belonging to the alias as a parameter to a
@@ -7443,21 +7378,6 @@
helpProcess(plan, manager, expected);
}
- @Test public void testOrderByDescAll() {
- String sql = "SELECT distinct e1 from pm1.g2 order by e1 desc limit 1"; //$NON-NLS-1$
-
- List[] expected = new List[] {
- Arrays.asList("c"),
- };
-
- FakeDataManager dataManager = new FakeDataManager();
- sampleData1(dataManager);
-
- ProcessorPlan plan = helpGetPlan(helpParse(sql), FakeMetadataFactory.example1Cached());
-
- helpProcess(plan, dataManager, expected);
- }
-
@Test public void testImplicitAggregateWithInlineView() {
String sql = "SELECT * FROM (SELECT b.count, enterprise_id FROM (SELECT COUNT(*), 2 AS enterprise_id FROM (SELECT 'A Name' AS Name, 1 AS enterprise_id) c ) b ) a WHERE enterprise_id = 1"; //$NON-NLS-1$
Modified: trunk/engine/src/test/java/org/teiid/query/processor/relational/TestDuplicateFilter.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/relational/TestDuplicateFilter.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/test/java/org/teiid/query/processor/relational/TestDuplicateFilter.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -56,7 +56,6 @@
ElementSymbol element = new ElementSymbol("val"); //$NON-NLS-1$
element.setType(dataType);
filter.setElements(Arrays.asList(element));
- filter.setSortElements(filter.getElements());
filter.reset();
// Add inputs
Modified: trunk/engine/src/test/java/org/teiid/query/processor/relational/TestSortNode.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/relational/TestSortNode.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/engine/src/test/java/org/teiid/query/processor/relational/TestSortNode.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -40,9 +40,7 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.query.processor.relational.ListNestedSortComparator;
-import org.teiid.query.processor.relational.SortNode;
-import org.teiid.query.processor.relational.SortUtility;
+import org.teiid.language.SortSpecification.NullOrdering;
import org.teiid.query.processor.relational.SortUtility.Mode;
import org.teiid.query.sql.lang.OrderBy;
import org.teiid.query.sql.symbol.ElementSymbol;
@@ -63,7 +61,7 @@
dataNode.initialize(context, mgr, null);
SortNode sortNode = new SortNode(1);
- sortNode.setSortElements(sortElements, sortTypes);
+ sortNode.setSortElements(new OrderBy(sortElements, sortTypes).getOrderByItems());
sortNode.setMode(mode);
sortNode.setElements(elements);
sortNode.addChild(dataNode);
@@ -133,11 +131,11 @@
int rows = batches * BATCH_SIZE;
- ListNestedSortComparator comparator = new ListNestedSortComparator(new int[] {0}, OrderBy.DESC);
+ ListNestedSortComparator<Integer> comparator = new ListNestedSortComparator<Integer>(new int[] {0}, OrderBy.DESC);
- List[] expected = new List[rows];
- List[] data = new List[rows];
- TreeSet<List> distinct = new TreeSet<List>(comparator);
+ List<Integer>[] expected = new List[rows];
+ List<Integer>[] data = new List[rows];
+ TreeSet<List<Integer>> distinct = new TreeSet<List<Integer>>(comparator);
for(int i=0; i<rows; i++) {
Integer value = new Integer((i*51) % 11);
data[i] = Arrays.asList(value);
@@ -158,6 +156,26 @@
helpTestSort(elements, data, sortElements, sortTypes, mode==Mode.SORT?expected:expectedDistinct, mode);
}
}
+
+ @Test public void testComparatorNullOrdering() {
+ ListNestedSortComparator<Integer> comparator = new ListNestedSortComparator<Integer>(new int[] {0}, OrderBy.DESC);
+ comparator.setNullOrdering(Arrays.asList(NullOrdering.FIRST));
+ List<Integer>[] data = new List[3];
+ data[0] = Arrays.asList(1);
+ data[1] = Arrays.asList((Integer)null);
+ data[2] = Arrays.asList(2);
+ Arrays.sort(data, comparator);
+ assertNull(data[0].get(0));
+ comparator.setNullOrdering(Arrays.asList(NullOrdering.LAST));
+ Arrays.sort(data, comparator);
+ assertNull(data[2].get(0));
+ comparator = new ListNestedSortComparator<Integer>(new int[] {0}, OrderBy.ASC);
+ Arrays.sort(data, comparator);
+ assertNull(data[0].get(0));
+ comparator.setNullOrdering(Arrays.asList(NullOrdering.LAST));
+ Arrays.sort(data, comparator);
+ assertNull(data[2].get(0));
+ }
@Test public void testNoSort() throws Exception {
helpTestAllSorts(0);
Modified: trunk/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -418,5 +418,12 @@
Command command = FakeTranslationFactory.getInstance().getBQTTranslationUtility().parseCommand(sql, true, true);
assertEquals("SELECT g_0.IntKey AS c_0 FROM SmallA AS g_0 ORDER BY c_0", command.toString()); //$NON-NLS-1$
}
+
+ @Test public void testOrderByNullOrdering() throws Exception {
+ String sql = "select intkey as x from bqt1.smalla order by x nulls first"; //$NON-NLS-1$
+
+ Command command = FakeTranslationFactory.getInstance().getBQTTranslationUtility().parseCommand(sql, true, true);
+ assertEquals("SELECT g_0.IntKey AS c_0 FROM SmallA AS g_0 ORDER BY c_0 NULLS FIRST", command.toString()); //$NON-NLS-1$
+ }
}
Modified: trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestTPCR.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestTPCR.java 2010-06-23 20:58:24 UTC (rev 2290)
+++ trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestTPCR.java 2010-06-23 21:16:17 UTC (rev 2291)
@@ -63,7 +63,7 @@
Arrays.asList(new Object[] { new Double(3459808.0), new BigDecimal("405838.6989"), TimestampUtil.createDate(95, 2, 4), new Double(0.0) }), //$NON-NLS-1$
Arrays.asList(new Object[] { new Double(492164.0), new BigDecimal("390324.0610"), TimestampUtil.createDate(95, 1, 19), new Double(0.0) }) }; //$NON-NLS-1$
- dataMgr.addData("SELECT g_2.l_orderkey AS c_0, SUM((g_2.l_extendedprice * (1 - g_2.l_discount))) AS c_1, g_1.o_orderdate AS c_2, g_1.o_shippriority AS c_3 FROM TPCR_Oracle_9i.CUSTOMER AS g_0, TPCR_Oracle_9i.ORDERS AS g_1, TPCR_Oracle_9i.LINEITEM AS g_2 WHERE (g_0.c_custkey = g_1.o_custkey) AND (g_2.l_orderkey = g_1.o_orderkey) AND (g_0.c_mktsegment = 'BUILDING') AND (g_1.o_orderdate < {d'1995-03-15'}) AND (g_2.l_shipdate > {ts'1995-03-15 00:00:00.0'}) GROUP BY g_2.l_orderkey, g_1.o_orderdate, g_1.o_shippriority ORDER BY c_1 DESC, c_2", //$NON-NLS-1$
+ dataMgr.addData("SELECT g_2.l_orderkey AS c_0, SUM((g_2.l_extendedprice * (1 - g_2.l_discount))) AS c_1, g_1.o_orderdate AS c_2, g_1.o_shippriority AS c_3 FROM TPCR_Oracle_9i.CUSTOMER AS g_0, TPCR_Oracle_9i.ORDERS AS g_1, TPCR_Oracle_9i.LINEITEM AS g_2 WHERE (g_0.c_custkey = g_1.o_custkey) AND (g_2.l_orderkey = g_1.o_orderkey) AND (g_0.c_mktsegment = 'BUILDING') AND (g_1.o_orderdate < {d'1995-03-15'}) AND (g_2.l_shipdate > {ts'1995-03-15 00:00:00.0'}) GROUP BY g_2.l_orderkey, g_1.o_orderdate, g_1.o_shippriority ORDER BY c_1 DESC NULLS LAST, c_2 NULLS FIRST", //$NON-NLS-1$
expected);
doProcess(METADATA,
@@ -121,7 +121,7 @@
new List[] { Arrays.asList(new Object[] { new Long(5), "Bill", "101 Fake St.", "392839283", "21.12" } ), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
Arrays.asList(new Object[] { new Long(6), "Stu", "102 Fake St.", "385729385", "51.50" } )}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- dataMgr.addData("SELECT g_0.C_CUSTKEY AS c_0, g_0.C_NAME AS c_1, g_0.C_ADDRESS AS c_2, g_0.C_PHONE AS c_3, g_0.C_ACCTBAL AS c_4 FROM TPCR_Ora.CUSTOMER AS g_0 WHERE g_0.C_ACCTBAL > 50 ORDER BY c_0", //$NON-NLS-1$
+ dataMgr.addData("SELECT g_0.C_CUSTKEY AS c_0, g_0.C_NAME AS c_1, g_0.C_ADDRESS AS c_2, g_0.C_PHONE AS c_3, g_0.C_ACCTBAL AS c_4 FROM TPCR_Ora.CUSTOMER AS g_0 WHERE g_0.C_ACCTBAL > 50 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
oracleExpected);
List[] sqlServerExpected =
@@ -161,7 +161,7 @@
new List[] { Arrays.asList(new Object[] { new Long(5), "Bill", "101 Fake St.", "392839283", "51.12" } ), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
Arrays.asList(new Object[] { new Long(6), "Stu", "102 Fake St.", "385729385", "51.50" } )}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- dataMgr.addData("SELECT g_0.C_CUSTKEY AS c_0, g_0.C_NAME AS c_1, g_0.C_ADDRESS AS c_2, g_0.C_PHONE AS c_3, g_0.C_ACCTBAL AS c_4 FROM TPCR_Ora.CUSTOMER AS g_0 WHERE g_0.C_ACCTBAL > 50 ORDER BY c_0", //$NON-NLS-1$
+ dataMgr.addData("SELECT g_0.C_CUSTKEY AS c_0, g_0.C_NAME AS c_1, g_0.C_ADDRESS AS c_2, g_0.C_PHONE AS c_3, g_0.C_ACCTBAL AS c_4 FROM TPCR_Ora.CUSTOMER AS g_0 WHERE g_0.C_ACCTBAL > 50 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
oracleExpected);
List[] sqlServerExpected =
@@ -191,7 +191,7 @@
ProcessorPlan plan = TestOptimizer.helpPlan("SELECT custsale.cntrycode, COUNT(*) AS numcust, SUM(c_acctbal) AS totacctbal FROM (SELECT left(C_PHONE, 2) AS cntrycode, CUSTOMER.C_ACCTBAL FROM CUSTOMER WHERE (left(C_PHONE, 2) IN ('13','31','23','29','30','18','17')) AND (CUSTOMER.C_ACCTBAL > (SELECT AVG(CUSTOMER.C_ACCTBAL) FROM CUSTOMER WHERE (CUSTOMER.C_ACCTBAL > 0.0) AND (left(C_PHONE, 2) IN ('13','31','23','29','30','18','17')))) AND (NOT (EXISTS (SELECT * FROM ORDERS WHERE O_CUSTKEY = C_CUSTKEY)))) AS custsale GROUP BY custsale.cntrycode ORDER BY custsale.cntrycode", //$NON-NLS-1$
METADATA, null, finder,
- new String[] {"SELECT v_0.c_0, COUNT(*) AS c_1, SUM(v_0.c_1) AS c_2 FROM (SELECT left(g_0.C_PHONE, 2) AS c_0, g_0.C_ACCTBAL AS c_1 FROM TPCR_Oracle_9i.CUSTOMER AS g_0 WHERE (left(g_0.C_PHONE, 2) IN ('13', '31', '23', '29', '30', '18', '17')) AND (g_0.C_ACCTBAL > (SELECT AVG(g_1.C_ACCTBAL) FROM TPCR_Oracle_9i.CUSTOMER AS g_1 WHERE (g_1.C_ACCTBAL > 0.0) AND (left(g_1.C_PHONE, 2) IN ('13', '31', '23', '29', '30', '18', '17')))) AND (NOT (EXISTS (SELECT g_2.O_ORDERKEY, g_2.O_CUSTKEY, g_2.O_ORDERSTATUS, g_2.O_TOTALPRICE, g_2.O_ORDERDATE, g_2.O_ORDERPRIORITY, g_2.O_CLERK, g_2.O_SHIPPRIORITY, g_2.O_COMMENT FROM TPCR_Oracle_9i.ORDERS AS g_2 WHERE g_2.O_CUSTKEY = g_0.C_CUSTKEY)))) AS v_0 GROUP BY v_0.c_0 ORDER BY c_0"}, true); //$NON-NLS-1$
+ new String[] {"SELECT v_0.c_0, COUNT(*) AS c_1, SUM(v_0.c_1) AS c_2 FROM (SELECT left(g_0.C_PHONE, 2) AS c_0, g_0.C_ACCTBAL AS c_1 FROM TPCR_Oracle_9i.CUSTOMER AS g_0 WHERE (left(g_0.C_PHONE, 2) IN ('13', '31', '23', '29', '30', '18', '17')) AND (g_0.C_ACCTBAL > (SELECT AVG(g_1.C_ACCTBAL) FROM TPCR_Oracle_9i.CUSTOMER AS g_1 WHERE (g_1.C_ACCTBAL > 0.0) AND (left(g_1.C_PHONE, 2) IN ('13', '31', '23', '29', '30', '18', '17')))) AND (NOT (EXISTS (SELECT g_2.O_ORDERKEY, g_2.O_CUSTKEY, g_2.O_ORDERSTATUS, g_2.O_TOTALPRICE, g_2.O_ORDERDATE, g_2.O_ORDERPRIORITY, g_2.O_CLERK, g_2.O_SHIPPRIORITY, g_2.O_COMMENT FROM TPCR_Oracle_9i.ORDERS AS g_2 WHERE g_2.O_CUSTKEY = g_0.C_CUSTKEY)))) AS v_0 GROUP BY v_0.c_0 ORDER BY c_0 NULLS FIRST"}, true); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
14 years, 6 months