Author: shawkins
Date: 2010-06-07 12:27:14 -0400 (Mon, 07 Jun 2010)
New Revision: 2186
Added:
trunk/api/src/main/java/org/teiid/language/SQLConstants.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLQuery.java
Removed:
trunk/api/src/main/java/org/teiid/language/SQLReservedWords.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/XQueryResolver.java
trunk/engine/src/test/java/org/teiid/query/xquery/saxon/
Modified:
trunk/api/src/main/java/org/teiid/language/Comparison.java
trunk/api/src/main/java/org/teiid/language/visitor/SQLStringVisitor.java
trunk/common-core/src/main/java/org/teiid/core/types/XMLType.java
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/ExtractFunctionModifier.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/hsql/AddDiffModifier.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/test/java/org/teiid/translator/jdbc/TestEscapeSyntaxModifier.java
trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/NameUtil.java
trunk/engine/src/main/java/org/teiid/common/buffer/impl/BufferManagerImpl.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java
trunk/engine/src/main/java/org/teiid/query/function/FunctionForm.java
trunk/engine/src/main/java/org/teiid/query/function/FunctionMethods.java
trunk/engine/src/main/java/org/teiid/query/function/source/XMLSystemFunctions.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/RulePushAggregates.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java
trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java
trunk/engine/src/main/java/org/teiid/query/processor/proc/ExecDynamicSqlInstruction.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/GroupingNode.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/XMLTableNode.java
trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLUtil.java
trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverVisitor.java
trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
trunk/engine/src/main/java/org/teiid/query/sql/LanguageVisitor.java
trunk/engine/src/main/java/org/teiid/query/sql/ProcedureReservedWords.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Option.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/XMLTable.java
trunk/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java
trunk/engine/src/main/java/org/teiid/query/sql/proc/RaiseErrorStatement.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/AggregateSymbol.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java
trunk/engine/src/main/java/org/teiid/query/validator/AggregateValidationVisitor.java
trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
trunk/engine/src/main/java/org/teiid/query/xquery/saxon/SaxonXQueryExpression.java
trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
trunk/engine/src/main/resources/org/teiid/query/execution/i18n.properties
trunk/engine/src/main/resources/org/teiid/query/i18n.properties
trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestAggregateImpl.java
trunk/engine/src/test/java/org/teiid/query/function/TestFunction.java
trunk/engine/src/test/java/org/teiid/query/function/TestFunctionLibrary.java
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestCapabilitiesUtil.java
trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java
trunk/engine/src/test/java/org/teiid/query/processor/TestSQLXMLProcessing.java
trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestAggregateSymbol.java
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestExpressionMappingVisitor.java
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestSQLStringVisitor.java
trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java
trunk/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java
Log:
TEIID-1087 TEIID-171 TEIID-1005 adding xmlquery, refining xmltable, and changing
sqlreservedwords into sqlcontants.
Modified: trunk/api/src/main/java/org/teiid/language/Comparison.java
===================================================================
--- trunk/api/src/main/java/org/teiid/language/Comparison.java 2010-06-06 15:12:19 UTC
(rev 2185)
+++ trunk/api/src/main/java/org/teiid/language/Comparison.java 2010-06-07 16:27:14 UTC
(rev 2186)
@@ -22,7 +22,7 @@
package org.teiid.language;
-import org.teiid.language.SQLReservedWords.Tokens;
+import org.teiid.language.SQLConstants.Tokens;
import org.teiid.language.visitor.LanguageObjectVisitor;
/**
Copied: trunk/api/src/main/java/org/teiid/language/SQLConstants.java (from rev 2181,
trunk/api/src/main/java/org/teiid/language/SQLReservedWords.java)
===================================================================
--- trunk/api/src/main/java/org/teiid/language/SQLConstants.java
(rev 0)
+++ trunk/api/src/main/java/org/teiid/language/SQLConstants.java 2010-06-07 16:27:14 UTC
(rev 2186)
@@ -0,0 +1,404 @@
+/*
+ * 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.language;
+
+import java.lang.reflect.Field;
+import java.util.Set;
+import java.util.HashSet;
+
+/**
+ * SQL Constants for Teiid.
+ */
+public class SQLConstants {
+
+ public interface Tokens {
+ public static final String ALL_COLS = "*"; //$NON-NLS-1$
+ public static final String SPACE = " "; //$NON-NLS-1$
+ public static final String COMMA = ","; //$NON-NLS-1$
+ public static final String DOT = "."; //$NON-NLS-1$
+ public static final String QUOTE = "'"; //$NON-NLS-1$
+ public static final String EQ = "="; //$NON-NLS-1$
+ public static final String NE = "<>"; //$NON-NLS-1$
+ public static final String LT = "<"; //$NON-NLS-1$
+ public static final String GT = ">"; //$NON-NLS-1$
+ public static final String LE = "<="; //$NON-NLS-1$
+ public static final String GE = ">="; //$NON-NLS-1$
+ public static final String LPAREN = "("; //$NON-NLS-1$
+ public static final String RPAREN = ")"; //$NON-NLS-1$
+ }
+
+ public interface NonReserved {
+ public static final String SQL_TSI_FRAC_SECOND = "SQL_TSI_FRAC_SECOND";
//$NON-NLS-1$
+ public static final String SQL_TSI_SECOND = "SQL_TSI_SECOND"; //$NON-NLS-1$
+ public static final String SQL_TSI_MINUTE = "SQL_TSI_MINUTE"; //$NON-NLS-1$
+ public static final String SQL_TSI_HOUR = "SQL_TSI_HOUR"; //$NON-NLS-1$
+ public static final String SQL_TSI_DAY = "SQL_TSI_DAY"; //$NON-NLS-1$
+ public static final String SQL_TSI_WEEK = "SQL_TSI_WEEK"; //$NON-NLS-1$
+ public static final String SQL_TSI_MONTH = "SQL_TSI_MONTH"; //$NON-NLS-1$
+ public static final String SQL_TSI_QUARTER = "SQL_TSI_QUARTER";
//$NON-NLS-1$
+ public static final String SQL_TSI_YEAR = "SQL_TSI_YEAR"; //$NON-NLS-1$
+ public static final String TIMESTAMPADD = "TIMESTAMPADD"; //$NON-NLS-1$
+ public static final String TIMESTAMPDIFF = "TIMESTAMPDIFF"; //$NON-NLS-1$
+ //aggregate functions
+ public static final String MAX = "MAX"; //$NON-NLS-1$
+ public static final String MIN = "MIN"; //$NON-NLS-1$
+ public static final String COUNT = "COUNT"; //$NON-NLS-1$
+ public static final String AVG = "AVG"; //$NON-NLS-1$
+ public static final String SUM = "SUM"; //$NON-NLS-1$
+ //texttable
+ public static final String WIDTH = "WIDTH"; //$NON-NLS-1$
+ public static final String DELIMITER = "DELIMITER"; //$NON-NLS-1$
+ public static final String HEADER = "HEADER"; //$NON-NLS-1$
+ public static final String QUOTE = "QUOTE"; //$NON-NLS-1$
+ public static final String COLUMNS = "COLUMNS"; //$NON-NLS-1$
+ //xmltable
+ public static final String ORDINALITY = "ORDINALITY"; //$NON-NLS-1$
+ public static final String PASSING = "PASSING"; //$NON-NLS-1$
+ public static final String PATH = "PATH"; //$NON-NLS-1$
+ //xmlserialize
+ public static final String DOCUMENT = "DOCUMENT"; //$NON-NLS-1$
+ public static final String CONTENT = "CONTENT"; //$NON-NLS-1$
+ //xmlquery
+ public static final String RETURNING = "RETURNING"; //$NON-NLS-1$
+ public static final String SEQUENCE = "SEQUENCE"; //$NON-NLS-1$
+ public static final String EMPTY = "EMPTY"; //$NON-NLS-1$
+ }
+
+ public interface Reserved {
+ //Teiid specific
+ public static final String BIGDECIMAL = "BIGDECIMAL"; //$NON-NLS-1$
+ public static final String BIGINTEGER = "BIGINTEGER"; //$NON-NLS-1$
+ public static final String BREAK = "BREAK"; //$NON-NLS-1$
+ public static final String BYTE = "BYTE"; //$NON-NLS-1$
+ public static final String CRITERIA = "CRITERIA"; //$NON-NLS-1$
+ public static final String ERROR = "ERROR"; //$NON-NLS-1$
+ public static final String LIMIT = "LIMIT"; //$NON-NLS-1$
+ public static final String LONG = "LONG"; //$NON-NLS-1$
+ public static final String LOOP = "LOOP"; //$NON-NLS-1$
+ public static final String MAKEDEP = "MAKEDEP"; //$NON-NLS-1$
+ public static final String MAKENOTDEP = "MAKENOTDEP"; //$NON-NLS-1$
+ public static final String NOCACHE = "NOCACHE"; //$NON-NLS-1$
+ public static final String STRING = "STRING"; //$NON-NLS-1$
+ public static final String VIRTUAL = "VIRTUAL"; //$NON-NLS-1$
+ public static final String WHILE = "WHILE"; //$NON-NLS-1$
+
+ //SQL2003 keywords
+ public static final String ADD = "ADD"; //$NON-NLS-1$
+ public static final String ANY = "ANY"; //$NON-NLS-1$
+ public static final String ALL = "ALL"; //$NON-NLS-1$
+ public static final String ALLOCATE = "ALLOCATE"; //$NON-NLS-1$
+ public static final String ALTER = "ALTER"; //$NON-NLS-1$
+ public static final String AND = "AND"; //$NON-NLS-1$
+ public static final String ARE = "ARE"; //$NON-NLS-1$
+ public static final String ARRAY = "ARRAY"; //$NON-NLS-1$s
+ public static final String AS = "AS"; //$NON-NLS-1$
+ public static final String ASC = "ASC"; //$NON-NLS-1$
+ public static final String ASENSITIVE = "ASENSITIVE"; //$NON-NLS-1$
+ public static final String ASYMETRIC = "ASYMETRIC"; //$NON-NLS-1$
+ public static final String ATOMIC = "ATOMIC"; //$NON-NLS-1$
+ public static final String AUTHORIZATION = "AUTHORIZATION"; //$NON-NLS-1$
+ public static final String BEGIN = "BEGIN"; //$NON-NLS-1$
+ public static final String BETWEEN = "BETWEEN"; //$NON-NLS-1$
+ public static final String BIGINT = "BIGINT"; //$NON-NLS-1$
+ public static final String BINARY = "BINARY"; //$NON-NLS-1$
+ public static final String BLOB = "BLOB"; //$NON-NLS-1$
+ public static final String BOTH = "BOTH"; //$NON-NLS-1$
+ public static final String BY = "BY"; //$NON-NLS-1$
+ public static final String CALL = "CALL"; //$NON-NLS-1$
+ public static final String CALLED = "CALLED"; //$NON-NLS-1$
+ public static final String CASE = "CASE"; //$NON-NLS-1$
+ public static final String CAST = "CAST"; //$NON-NLS-1$
+ public static final String CASCADED = "CASCADED"; //$NON-NLS-1$
+ public static final String CHAR = "CHAR"; //$NON-NLS-1$
+ public static final String CHARACTER = "CHARACTER"; //$NON-NLS-1$
+ public static final String CHECK = "CHECK"; //$NON-NLS-1$
+ public static final String CLOB = "CLOB"; //$NON-NLS-1$
+ public static final String CLOSE = "CLOSE"; //$NON-NLS-1$
+ public static final String COLLATE = "COLLATE"; //$NON-NLS-1$
+ public static final String COLUMN = "COLUMN"; //$NON-NLS-1$
+ public static final String COMMIT = "COMMIT"; //$NON-NLS-1$
+ public static final String CONNECT = "CONNECT"; //$NON-NLS-1$
+ public static final String CONVERT = "CONVERT"; //$NON-NLS-1$
+ public static final String CONSTRAINT = "CONSTRAINT"; //$NON-NLS-1$
+ public static final String CONTINUE = "CONTINUE"; //$NON-NLS-1$
+ public static final String CORRESPONDING = "CORRESPONDING"; //$NON-NLS-1$
+ public static final String CREATE = "CREATE"; //$NON-NLS-1$
+ public static final String CROSS = "CROSS"; //$NON-NLS-1$
+ public static final String CURRENT_DATE = "CURRENT_DATE"; //$NON-NLS-1$
+ public static final String CURRENT_TIME = "CURRENT_TIME"; //$NON-NLS-1$
+ public static final String CURRENT_TIMESTAMP = "CURRENT_TIMESTAMP";
//$NON-NLS-1$
+ public static final String CURRENT_USER = "CURRENT_USER"; //$NON-NLS-1$
+ public static final String CURSOR = "CURSOR"; //$NON-NLS-1$
+ public static final String CYCLE = "CYCLE"; //$NON-NLS-1$
+ public static final String DATE = "DATE"; //$NON-NLS-1$
+ public static final String DAY = "DAY"; //$NON-NLS-1$
+ public static final String DEALLOCATE = "DEALLOCATE"; //$NON-NLS-1$
+ public static final String DEC = "DEC"; //$NON-NLS-1$
+ public static final String DECIMAL = "DECIMAL"; //$NON-NLS-1$
+ public static final String DECLARE = "DECLARE"; //$NON-NLS-1$
+ public static final String DEFAULT = "DEFAULT"; //$NON-NLS-1$
+ public static final String DELETE = "DELETE"; //$NON-NLS-1$
+ public static final String DEREF = "DEREF"; //$NON-NLS-1$
+ public static final String DESC = "DESC"; //$NON-NLS-1$
+ public static final String DESCRIBE = "DESCRIBE"; //$NON-NLS-1$
+ public static final String DETERMINISTIC = "DETERMINISTIC"; //$NON-NLS-1$
+ public static final String DISCONNECT = "DISCONNECT"; //$NON-NLS-1$
+ public static final String DISTINCT = "DISTINCT"; //$NON-NLS-1$
+ public static final String DOUBLE = "DOUBLE"; //$NON-NLS-1$
+ public static final String DROP = "DROP"; //$NON-NLS-1$
+ public static final String DYNAMIC = "DYNAMIC"; //$NON-NLS-1$
+ public static final String EACH = "EACH"; //$NON-NLS-1$
+ public static final String ELEMENT = "ELEMENT"; //$NON-NLS-1$
+ public static final String ELSE = "ELSE"; //$NON-NLS-1$
+ public static final String END = "END"; //$NON-NLS-1$
+ public static final String ESCAPE = "ESCAPE"; //$NON-NLS-1$
+ public static final String EXCEPT = "EXCEPT"; //$NON-NLS-1$
+ public static final String EXEC = "EXEC"; //$NON-NLS-1$
+ public static final String EXECUTE = "EXECUTE"; //$NON-NLS-1$
+ public static final String EXISTS = "EXISTS"; //$NON-NLS-1$
+ public static final String EXTERNAL = "EXTERNAL"; //$NON-NLS-1$
+ public static final String FALSE = "FALSE"; //$NON-NLS-1$
+ public static final String FETCH = "FETCH"; //$NON-NLS-1$
+ public static final String FILTER = "FILTER"; //$NON-NLS-1$
+ public static final String FLOAT = "FLOAT"; //$NON-NLS-1$
+ public static final String FOR = "FOR"; //$NON-NLS-1$
+ public static final String FOREIGN = "FOREIGN"; //$NON-NLS-1$
+ public static final String FREE = "FREE"; //$NON-NLS-1$
+ public static final String FROM = "FROM"; //$NON-NLS-1$
+ public static final String FULL = "FULL"; //$NON-NLS-1$
+ public static final String FUNCTION = "FUNCTION"; //$NON-NLS-1$
+ public static final String GET = "GET"; //$NON-NLS-1$
+ public static final String GLOBAL = "GLOBAL"; //$NON-NLS-1$
+ public static final String GRANT = "GRANT"; //$NON-NLS-1$
+ public static final String GROUP = "GROUP"; //$NON-NLS-1$
+ public static final String GROUPING = "GROUPING"; //$NON-NLS-1$
+ public static final String HAS = "HAS"; //$NON-NLS-1$
+ public static final String HAVING = "HAVING"; //$NON-NLS-1$
+ public static final String HOLD = "HOLD"; //$NON-NLS-1$
+ public static final String HOUR = "HOUR"; //$NON-NLS-1$
+ public static final String IDENTITY = "IDENTITY"; //$NON-NLS-1$
+ public static final String INDICATOR = "INDICATOR"; //$NON-NLS-1$
+ public static final String IF = "IF"; //$NON-NLS-1$
+ public static final String IMMEDIATE = "IMMEDIATE"; //$NON-NLS-1$
+ public static final String IN = "IN"; //$NON-NLS-1$
+ public static final String INOUT = "INOUT"; //$NON-NLS-1$
+ public static final String INNER = "INNER"; //$NON-NLS-1$
+ public static final String INPUT = "INPUT"; //$NON-NLS-1$
+ public static final String INSENSITIVE = "INSENSITIVE"; //$NON-NLS-1$
+ public static final String INSERT = "INSERT"; //$NON-NLS-1$
+ public static final String INTEGER = "INTEGER"; //$NON-NLS-1$
+ public static final String INTERSECT = "INTERSECT"; //$NON-NLS-1$
+ public static final String INTERVAL = "INTERVAL"; //$NON-NLS-1$
+ public static final String INT = "INT"; //$NON-NLS-1$
+ public static final String INTO = "INTO"; //$NON-NLS-1$
+ public static final String IS = "IS"; //$NON-NLS-1$
+ public static final String ISOLATION = "ISOLATION"; //$NON-NLS-1$
+ public static final String JOIN = "JOIN"; //$NON-NLS-1$
+ public static final String LANGUAGE = "LANGUAGE"; //$NON-NLS-1$
+ public static final String LARGE = "LARGE"; //$NON-NLS-1$
+ public static final String LATERAL = "LATERAL"; //$NON-NLS-1$
+ public static final String LEADING = "LEADING"; //$NON-NLS-1$
+ public static final String LEFT = "LEFT"; //$NON-NLS-1$
+ public static final String LIKE = "LIKE"; //$NON-NLS-1$
+ public static final String LOCAL = "LOCAL"; //$NON-NLS-1$
+ public static final String LOCALTIME = "LOCALTIME"; //$NON-NLS-1$
+ public static final String LOCALTIMESTAMP = "LOCALTIMESTAMP";
//$NON-NLS-1$
+ public static final String MATCH = "MATCH"; //$NON-NLS-1$
+ public static final String MEMBER = "MEMBER"; //$NON-NLS-1$
+ public static final String MERGE = "MERGE"; //$NON-NLS-1$
+ public static final String METHOD = "METHOD"; //$NON-NLS-1$
+ public static final String MINUTE = "MINUTE"; //$NON-NLS-1$
+ public static final String MODIFIES = "MODIFIES"; //$NON-NLS-1$
+ public static final String MODULE = "MODULE"; //$NON-NLS-1$
+ public static final String MONTH = "MONTH"; //$NON-NLS-1$
+ public static final String MULTISET = "MULTISET"; //$NON-NLS-1$
+ public static final String NATIONAL = "NATIONAL"; //$NON-NLS-1$
+ public static final String NATURAL = "NATURAL"; //$NON-NLS-1$
+ public static final String NCHAR = "NCHAR"; //$NON-NLS-1$
+ public static final String NCLOB = "NCLOB"; //$NON-NLS-1$
+ public static final String NEW = "NEW"; //$NON-NLS-1$
+ public static final String NO = "NO"; //$NON-NLS-1$
+ public static final String NONE = "NONE"; //$NON-NLS-1$
+ public static final String NOT = "NOT"; //$NON-NLS-1$
+ public static final String NULL = "NULL"; //$NON-NLS-1$
+ public static final String NUMERIC = "NUMERIC"; //$NON-NLS-1$
+ public static final String OBJECT = "OBJECT"; //$NON-NLS-1$
+ public static final String OF = "OF"; //$NON-NLS-1$
+ public static final String OLD = "OLD"; //$NON-NLS-1$
+ public static final String ON = "ON"; //$NON-NLS-1$
+ public static final String ONLY = "ONLY"; //$NON-NLS-1$
+ public static final String OPEN = "OPEN"; //$NON-NLS-1$
+ public static final String OR = "OR"; //$NON-NLS-1$
+ public static final String ORDER = "ORDER"; //$NON-NLS-1$
+ public static final String OUT = "OUT"; //$NON-NLS-1$
+ public static final String OUTER = "OUTER"; //$NON-NLS-1$
+ public static final String OUTPUT = "OUTPUT"; //$NON-NLS-1$
+ public static final String OPTION = "OPTION"; //$NON-NLS-1$
+ public static final String OVER = "OVER"; //$NON-NLS-1$
+ public static final String OVERLAPS = "OVERLAPS"; //$NON-NLS-1$
+ public static final String PARAMETER = "PARAMETER"; //$NON-NLS-1$
+ public static final String PARTITION = "PARTITION"; //$NON-NLS-1$
+ public static final String PRECISION = "PRECISION"; //$NON-NLS-1$
+ public static final String PREPARE = "PREPARE"; //$NON-NLS-1$
+ public static final String PRIMARY = "PRIMARY"; //$NON-NLS-1$
+ public static final String PROCEDURE = "PROCEDURE"; //$NON-NLS-1$
+ public static final String RANGE = "RANGE"; //$NON-NLS-1$
+ public static final String READS = "READS"; //$NON-NLS-1$
+ public static final String REAL = "REAL"; //$NON-NLS-1$
+ public static final String RECURSIVE = "RECURSIVE"; //$NON-NLS-1$
+ public static final String REFERENCES = "REFERENCES"; //$NON-NLS-1$
+ public static final String REFERENCING = "REFERENCING"; //$NON-NLS-1$
+ public static final String RELEASE = "RELEASE"; //$NON-NLS-1$
+ public static final String RETURN = "RETURN"; //$NON-NLS-1$
+ public static final String RETURNS = "RETURNS"; //$NON-NLS-1$
+ public static final String REVOKE = "REVOKE"; //$NON-NLS-1$
+ public static final String RIGHT = "RIGHT"; //$NON-NLS-1$
+ public static final String ROLLBACK = "ROLLBACK"; //$NON-NLS-1$
+ public static final String ROLLUP = "ROLLUP"; //$NON-NLS-1$
+ public static final String ROW = "ROW"; //$NON-NLS-1$
+ public static final String ROWS = "ROWS"; //$NON-NLS-1$
+ public static final String SAVEPOINT = "SAVEPOINT"; //$NON-NLS-1$
+ public static final String SCROLL = "SCROLL"; //$NON-NLS-1$
+ public static final String SEARCH = "SEARCH"; //$NON-NLS-1$
+ public static final String SECOND = "SECOND"; //$NON-NLS-1$
+ public static final String SELECT = "SELECT"; //$NON-NLS-1$
+ public static final String SENSITIVE = "SENSITIVE"; //$NON-NLS-1$
+ public static final String SESSION_USER = "SESSION_USER"; //$NON-NLS-1$
+ public static final String SET = "SET"; //$NON-NLS-1$
+ public static final String SHORT = "SHORT"; //$NON-NLS-1$
+ public static final String SIILAR = "SIMILAR"; //$NON-NLS-1$
+ public static final String SMALLINT = "SMALLINT"; //$NON-NLS-1$
+ public static final String SOME = "SOME"; //$NON-NLS-1$
+ public static final String SPECIFIC = "SPECIFIC"; //$NON-NLS-1$
+ public static final String SPECIFICTYPE = "SPECIFICTYPE"; //$NON-NLS-1$
+ public static final String SQL = "SQL"; //$NON-NLS-1$
+ public static final String SQLEXCEPTION = "SQLEXCEPTION"; //$NON-NLS-1$
+ public static final String SQLSTATE = "SQLSTATE"; //$NON-NLS-1$
+ public static final String SQLWARNING = "SQLWARNING"; //$NON-NLS-1$
+ public static final String SUBMULTILIST = "SUBMULTILIST"; //$NON-NLS-1$
+ public static final String START = "START"; //$NON-NLS-1$
+ public static final String STATIC = "STATIC"; //$NON-NLS-1$
+ public static final String SYMETRIC = "SYMETRIC"; //$NON-NLS-1$
+ public static final String SYSTEM = "SYSTEM"; //$NON-NLS-1$
+ public static final String SYSTEM_USER = "SYSTEM_USER"; //$NON-NLS-1$
+ public static final String TABLE = "TABLE"; //$NON-NLS-1$
+ public static final String TEMPORARY = "TEMPORARY"; //$NON-NLS-1$
+ public static final String THEN = "THEN"; //$NON-NLS-1$
+ public static final String TIME = "TIME"; //$NON-NLS-1$
+ public static final String TIMESTAMP = "TIMESTAMP"; //$NON-NLS-1$
+ public static final String TIMEZONE_HOUR = "TIMEZONE_HOUR"; //$NON-NLS-1$
+ public static final String TIMEZONE_MINUTE = "TIMEZONE_MINUTE";
//$NON-NLS-1$
+ public static final String TO = "TO"; //$NON-NLS-1$
+ public static final String TREAT = "TREAT"; //$NON-NLS-1$
+ public static final String TRAILING = "TRAILING"; //$NON-NLS-1$
+ public static final String TRANSLATE = "TRANSLATE"; //$NON-NLS-1$
+ public static final String TRANSLATION = "TRANSLATION"; //$NON-NLS-1$
+ public static final String TRIGGER = "TRIGGER"; //$NON-NLS-1$
+ public static final String TRUE = "TRUE"; //$NON-NLS-1$
+ public static final String UNION = "UNION"; //$NON-NLS-1$
+ public static final String UNIQUE = "UNIQUE"; //$NON-NLS-1$
+ public static final String UNKNOWN = "UNKNOWN"; //$NON-NLS-1$
+ public static final String UPDATE = "UPDATE"; //$NON-NLS-1$
+ public static final String USER = "USER"; //$NON-NLS-1$
+ public static final String USING = "USING"; //$NON-NLS-1$
+ public static final String VALUE = "VALUE"; //$NON-NLS-1$
+ public static final String VALUES = "VALUES"; //$NON-NLS-1$
+ public static final String VARCHAR = "VARCHAR"; //$NON-NLS-1$
+ public static final String VARYING = "VARYING"; //$NON-NLS-1$
+ public static final String WHEN = "WHEN"; //$NON-NLS-1$
+ public static final String WHENEVER = "WHENEVER"; //$NON-NLS-1$
+ public static final String WHERE = "WHERE"; //$NON-NLS-1$
+ public static final String WINDOW = "WINDOW"; //$NON-NLS-1$
+ public static final String WITH = "WITH"; //$NON-NLS-1$
+ public static final String WITHIN = "WITHIN"; //$NON-NLS-1$
+ public static final String WITHOUT = "WITHOUT"; //$NON-NLS-1$
+ public static final String YEAR = "YEAR"; //$NON-NLS-1$
+
+ //SQL/XML
+
+ public static final String XML = "XML"; //$NON-NLS-1$
+ public static final String XMLAGG = "XMLAGG"; //$NON-NLS-1$
+ public static final String XMLATTRIBUTES = "XMLATTRIBUTES"; //$NON-NLS-1$
+ public static final String XMLBINARY = "XMLBINARY"; //$NON-NLS-1$
+ public static final String XMLCONCAT = "XMLCONCAT"; //$NON-NLS-1$
+ public static final String XMLCOMMENT = "XMLCOMMENT"; //$NON-NLS-1$
+ public static final String XMLELEMENT = "XMLELEMENT"; //$NON-NLS-1$
+ public static final String XMLFOREST = "XMLFOREST"; //$NON-NLS-1$
+ public static final String XMLNAMESPACES = "XMLNAMESPACES"; //$NON-NLS-1$
+ public static final String XMLPARSE = "XMLPARSE"; //$NON-NLS-1$
+ public static final String XMLPI = "XMLPI"; //$NON-NLS-1$
+ public static final String XMLROOT = "XMLROOT"; //$NON-NLS-1$
+ public static final String XMLSERIALIZE = "XMLSERIALIZE"; //$NON-NLS-1$
+
+ //SQL/MED
+
+ public static final String DATALINK = "DATALINK"; //$NON-NLS-1$
+ public static final String DLNEWCOPY = "DLNEWCOPY"; //$NON-NLS-1$
+ public static final String DLPREVIOUSCOPY = "DLPREVIOUSCOPY";
//$NON-NLS-1$
+ public static final String DLURLCOMPLETE = "DLURLCOMPLETE"; //$NON-NLS-1$
+ public static final String DLURLCOMPLETEWRITE = "DLURELCOMPLETEWRITE";
//$NON-NLS-1$
+ public static final String DLURLCOMPLETEONLY = "DLURLCOMPLETEONLY";
//$NON-NLS-1$
+ public static final String DLURLPATH = "DLURLPATH"; //$NON-NLS-1$
+ public static final String DLURLPATHWRITE = "DLURLPATHWRITE";
//$NON-NLS-1$
+ public static final String DLURLPATHONLY = "DLURLPATHONLY"; //$NON-NLS-1$
+ public static final String DLURLSCHEME = "DLURLSCHEME"; //$NON-NLS-1$
+ public static final String DLURLSERVER = "DLURLSEVER"; //$NON-NLS-1$
+ public static final String DLVALUE = "DLVALUE"; //$NON-NLS-1$
+ public static final String IMPORT = "IMPORT"; //$NON-NLS-1$
+ }
+
+ /**
+ * Set of CAPITALIZED reserved words for checking whether a string is a reserved word.
+ */
+ private static final Set<String> RESERVED_WORDS = new HashSet<String>();
+
+ // Initialize RESERVED_WORDS set - This is a poor man's enum. To much legacy
code expects the constants to be Strings.
+ static {
+ Field[] fields = SQLConstants.Reserved.class.getDeclaredFields();
+ for (Field field : fields) {
+ if (field.getType() == String.class) {
+ try {
+ if (!RESERVED_WORDS.add((String)field.get(null))) {
+ throw new AssertionError("Duplicate value for " + field.getName());
//$NON-NLS-1$
+ }
+ } catch (Exception e) {
+ }
+ }
+ }
+ }
+
+ /** Can't construct */
+ private SQLConstants() {}
+
+ /**
+ * Check whether a string is a reserved word.
+ * @param str String to check
+ * @return True if reserved word, false if not or null
+ */
+ public static final boolean isReservedWord(String str) {
+ if(str == null) {
+ return false;
+ }
+ return RESERVED_WORDS.contains(str.toUpperCase());
+ }
+}
Deleted: trunk/api/src/main/java/org/teiid/language/SQLReservedWords.java
===================================================================
--- trunk/api/src/main/java/org/teiid/language/SQLReservedWords.java 2010-06-06 15:12:19
UTC (rev 2185)
+++ trunk/api/src/main/java/org/teiid/language/SQLReservedWords.java 2010-06-07 16:27:14
UTC (rev 2186)
@@ -1,398 +0,0 @@
-/*
- * 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.language;
-
-import java.lang.reflect.Field;
-import java.util.Set;
-import java.util.HashSet;
-
-/**
- * Reserved words for Teiid.
- */
-public class SQLReservedWords {
-
- public interface Tokens {
- public static final String ALL_COLS = "*"; //$NON-NLS-1$
- public static final String SPACE = " "; //$NON-NLS-1$
- public static final String COMMA = ","; //$NON-NLS-1$
- public static final String DOT = "."; //$NON-NLS-1$
- public static final String QUOTE = "'"; //$NON-NLS-1$
- public static final String EQ = "="; //$NON-NLS-1$
- public static final String NE = "<>"; //$NON-NLS-1$
- public static final String LT = "<"; //$NON-NLS-1$
- public static final String GT = ">"; //$NON-NLS-1$
- public static final String LE = "<="; //$NON-NLS-1$
- public static final String GE = ">="; //$NON-NLS-1$
- public static final String LPAREN = "("; //$NON-NLS-1$
- public static final String RPAREN = ")"; //$NON-NLS-1$
- }
-
- public interface NonReserved {
- public static final String SQL_TSI_FRAC_SECOND = "SQL_TSI_FRAC_SECOND";
//$NON-NLS-1$
- public static final String SQL_TSI_SECOND = "SQL_TSI_SECOND"; //$NON-NLS-1$
- public static final String SQL_TSI_MINUTE = "SQL_TSI_MINUTE"; //$NON-NLS-1$
- public static final String SQL_TSI_HOUR = "SQL_TSI_HOUR"; //$NON-NLS-1$
- public static final String SQL_TSI_DAY = "SQL_TSI_DAY"; //$NON-NLS-1$
- public static final String SQL_TSI_WEEK = "SQL_TSI_WEEK"; //$NON-NLS-1$
- public static final String SQL_TSI_MONTH = "SQL_TSI_MONTH"; //$NON-NLS-1$
- public static final String SQL_TSI_QUARTER = "SQL_TSI_QUARTER";
//$NON-NLS-1$
- public static final String SQL_TSI_YEAR = "SQL_TSI_YEAR"; //$NON-NLS-1$
- public static final String TIMESTAMPADD = "TIMESTAMPADD"; //$NON-NLS-1$
- public static final String TIMESTAMPDIFF = "TIMESTAMPDIFF"; //$NON-NLS-1$
- //aggregate functions
- public static final String MAX = "MAX"; //$NON-NLS-1$
- public static final String MIN = "MIN"; //$NON-NLS-1$
- public static final String COUNT = "COUNT"; //$NON-NLS-1$
- public static final String AVG = "AVG"; //$NON-NLS-1$
- public static final String SUM = "SUM"; //$NON-NLS-1$
- //texttable
- public static final String WIDTH = "WIDTH"; //$NON-NLS-1$
- public static final String DELIMITER = "DELIMITER"; //$NON-NLS-1$
- public static final String HEADER = "HEADER"; //$NON-NLS-1$
- public static final String QUOTE = "QUOTE"; //$NON-NLS-1$
- public static final String COLUMNS = "COLUMNS"; //$NON-NLS-1$
- //xmltable
- public static final String ORDINALITY = "ORDINALITY"; //$NON-NLS-1$
- public static final String PASSING = "PASSING"; //$NON-NLS-1$
- public static final String PATH = "PATH"; //$NON-NLS-1$
- //xmlserialize
- public static final String DOCUMENT = "DOCUMENT"; //$NON-NLS-1$
- public static final String CONTENT = "CONTENT"; //$NON-NLS-1$
- }
-
- //Teiid specific
- public static final String BIGDECIMAL = "BIGDECIMAL"; //$NON-NLS-1$
- public static final String BIGINTEGER = "BIGINTEGER"; //$NON-NLS-1$
- public static final String BREAK = "BREAK"; //$NON-NLS-1$
- public static final String BYTE = "BYTE"; //$NON-NLS-1$
- public static final String CRITERIA = "CRITERIA"; //$NON-NLS-1$
- public static final String ERROR = "ERROR"; //$NON-NLS-1$
- public static final String LIMIT = "LIMIT"; //$NON-NLS-1$
- public static final String LONG = "LONG"; //$NON-NLS-1$
- public static final String LOOP = "LOOP"; //$NON-NLS-1$
- public static final String MAKEDEP = "MAKEDEP"; //$NON-NLS-1$
- public static final String MAKENOTDEP = "MAKENOTDEP"; //$NON-NLS-1$
- public static final String NOCACHE = "NOCACHE"; //$NON-NLS-1$
- public static final String STRING = "STRING"; //$NON-NLS-1$
- public static final String VIRTUAL = "VIRTUAL"; //$NON-NLS-1$
- public static final String WHILE = "WHILE"; //$NON-NLS-1$
-
- //SQL2003 keywords
- public static final String ADD = "ADD"; //$NON-NLS-1$
- public static final String ANY = "ANY"; //$NON-NLS-1$
- public static final String ALL = "ALL"; //$NON-NLS-1$
- public static final String ALLOCATE = "ALLOCATE"; //$NON-NLS-1$
- public static final String ALTER = "ALTER"; //$NON-NLS-1$
- public static final String AND = "AND"; //$NON-NLS-1$
- public static final String ARE = "ARE"; //$NON-NLS-1$
- public static final String ARRAY = "ARRAY"; //$NON-NLS-1$s
- public static final String AS = "AS"; //$NON-NLS-1$
- public static final String ASC = "ASC"; //$NON-NLS-1$
- public static final String ASENSITIVE = "ASENSITIVE"; //$NON-NLS-1$
- public static final String ASYMETRIC = "ASYMETRIC"; //$NON-NLS-1$
- public static final String ATOMIC = "ATOMIC"; //$NON-NLS-1$
- public static final String AUTHORIZATION = "AUTHORIZATION"; //$NON-NLS-1$
- public static final String BEGIN = "BEGIN"; //$NON-NLS-1$
- public static final String BETWEEN = "BETWEEN"; //$NON-NLS-1$
- public static final String BIGINT = "BIGINT"; //$NON-NLS-1$
- public static final String BINARY = "BINARY"; //$NON-NLS-1$
- public static final String BLOB = "BLOB"; //$NON-NLS-1$
- public static final String BOTH = "BOTH"; //$NON-NLS-1$
- public static final String BY = "BY"; //$NON-NLS-1$
- public static final String CALL = "CALL"; //$NON-NLS-1$
- public static final String CALLED = "CALLED"; //$NON-NLS-1$
- public static final String CASE = "CASE"; //$NON-NLS-1$
- public static final String CAST = "CAST"; //$NON-NLS-1$
- public static final String CASCADED = "CASCADED"; //$NON-NLS-1$
- public static final String CHAR = "CHAR"; //$NON-NLS-1$
- public static final String CHARACTER = "CHARACTER"; //$NON-NLS-1$
- public static final String CHECK = "CHECK"; //$NON-NLS-1$
- public static final String CLOB = "CLOB"; //$NON-NLS-1$
- public static final String CLOSE = "CLOSE"; //$NON-NLS-1$
- public static final String COLLATE = "COLLATE"; //$NON-NLS-1$
- public static final String COLUMN = "COLUMN"; //$NON-NLS-1$
- public static final String COMMIT = "COMMIT"; //$NON-NLS-1$
- public static final String CONNECT = "CONNECT"; //$NON-NLS-1$
- public static final String CONVERT = "CONVERT"; //$NON-NLS-1$
- public static final String CONSTRAINT = "CONSTRAINT"; //$NON-NLS-1$
- public static final String CONTINUE = "CONTINUE"; //$NON-NLS-1$
- public static final String CORRESPONDING = "CORRESPONDING"; //$NON-NLS-1$
- public static final String CREATE = "CREATE"; //$NON-NLS-1$
- public static final String CROSS = "CROSS"; //$NON-NLS-1$
- public static final String CURRENT_DATE = "CURRENT_DATE"; //$NON-NLS-1$
- public static final String CURRENT_TIME = "CURRENT_TIME"; //$NON-NLS-1$
- public static final String CURRENT_TIMESTAMP = "CURRENT_TIMESTAMP";
//$NON-NLS-1$
- public static final String CURRENT_USER = "CURRENT_USER"; //$NON-NLS-1$
- public static final String CURSOR = "CURSOR"; //$NON-NLS-1$
- public static final String CYCLE = "CYCLE"; //$NON-NLS-1$
- public static final String DATE = "DATE"; //$NON-NLS-1$
- public static final String DAY = "DAY"; //$NON-NLS-1$
- public static final String DEALLOCATE = "DEALLOCATE"; //$NON-NLS-1$
- public static final String DEC = "DEC"; //$NON-NLS-1$
- public static final String DECIMAL = "DECIMAL"; //$NON-NLS-1$
- public static final String DECLARE = "DECLARE"; //$NON-NLS-1$
- public static final String DEFAULT = "DEFAULT"; //$NON-NLS-1$
- public static final String DELETE = "DELETE"; //$NON-NLS-1$
- public static final String DEREF = "DEREF"; //$NON-NLS-1$
- public static final String DESC = "DESC"; //$NON-NLS-1$
- public static final String DESCRIBE = "DESCRIBE"; //$NON-NLS-1$
- public static final String DETERMINISTIC = "DETERMINISTIC"; //$NON-NLS-1$
- public static final String DISCONNECT = "DISCONNECT"; //$NON-NLS-1$
- public static final String DISTINCT = "DISTINCT"; //$NON-NLS-1$
- public static final String DOUBLE = "DOUBLE"; //$NON-NLS-1$
- public static final String DROP = "DROP"; //$NON-NLS-1$
- public static final String DYNAMIC = "DYNAMIC"; //$NON-NLS-1$
- public static final String EACH = "EACH"; //$NON-NLS-1$
- public static final String ELEMENT = "ELEMENT"; //$NON-NLS-1$
- public static final String ELSE = "ELSE"; //$NON-NLS-1$
- public static final String END = "END"; //$NON-NLS-1$
- public static final String ESCAPE = "ESCAPE"; //$NON-NLS-1$
- public static final String EXCEPT = "EXCEPT"; //$NON-NLS-1$
- public static final String EXEC = "EXEC"; //$NON-NLS-1$
- public static final String EXECUTE = "EXECUTE"; //$NON-NLS-1$
- public static final String EXISTS = "EXISTS"; //$NON-NLS-1$
- public static final String EXTERNAL = "EXTERNAL"; //$NON-NLS-1$
- public static final String FALSE = "FALSE"; //$NON-NLS-1$
- public static final String FETCH = "FETCH"; //$NON-NLS-1$
- public static final String FILTER = "FILTER"; //$NON-NLS-1$
- public static final String FLOAT = "FLOAT"; //$NON-NLS-1$
- public static final String FOR = "FOR"; //$NON-NLS-1$
- public static final String FOREIGN = "FOREIGN"; //$NON-NLS-1$
- public static final String FREE = "FREE"; //$NON-NLS-1$
- public static final String FROM = "FROM"; //$NON-NLS-1$
- public static final String FULL = "FULL"; //$NON-NLS-1$
- public static final String FUNCTION = "FUNCTION"; //$NON-NLS-1$
- public static final String GET = "GET"; //$NON-NLS-1$
- public static final String GLOBAL = "GLOBAL"; //$NON-NLS-1$
- public static final String GRANT = "GRANT"; //$NON-NLS-1$
- public static final String GROUP = "GROUP"; //$NON-NLS-1$
- public static final String GROUPING = "GROUPING"; //$NON-NLS-1$
- public static final String HAS = "HAS"; //$NON-NLS-1$
- public static final String HAVING = "HAVING"; //$NON-NLS-1$
- public static final String HOLD = "HOLD"; //$NON-NLS-1$
- public static final String HOUR = "HOUR"; //$NON-NLS-1$
- public static final String IDENTITY = "IDENTITY"; //$NON-NLS-1$
- public static final String INDICATOR = "INDICATOR"; //$NON-NLS-1$
- public static final String IF = "IF"; //$NON-NLS-1$
- public static final String IMMEDIATE = "IMMEDIATE"; //$NON-NLS-1$
- public static final String IN = "IN"; //$NON-NLS-1$
- public static final String INOUT = "INOUT"; //$NON-NLS-1$
- public static final String INNER = "INNER"; //$NON-NLS-1$
- public static final String INPUT = "INPUT"; //$NON-NLS-1$
- public static final String INSENSITIVE = "INSENSITIVE"; //$NON-NLS-1$
- public static final String INSERT = "INSERT"; //$NON-NLS-1$
- public static final String INTEGER = "INTEGER"; //$NON-NLS-1$
- public static final String INTERSECT = "INTERSECT"; //$NON-NLS-1$
- public static final String INTERVAL = "INTERVAL"; //$NON-NLS-1$
- public static final String INT = "INT"; //$NON-NLS-1$
- public static final String INTO = "INTO"; //$NON-NLS-1$
- public static final String IS = "IS"; //$NON-NLS-1$
- public static final String ISOLATION = "ISOLATION"; //$NON-NLS-1$
- public static final String JOIN = "JOIN"; //$NON-NLS-1$
- public static final String LANGUAGE = "LANGUAGE"; //$NON-NLS-1$
- public static final String LARGE = "LARGE"; //$NON-NLS-1$
- public static final String LATERAL = "LATERAL"; //$NON-NLS-1$
- public static final String LEADING = "LEADING"; //$NON-NLS-1$
- public static final String LEFT = "LEFT"; //$NON-NLS-1$
- public static final String LIKE = "LIKE"; //$NON-NLS-1$
- public static final String LOCAL = "LOCAL"; //$NON-NLS-1$
- public static final String LOCALTIME = "LOCALTIME"; //$NON-NLS-1$
- public static final String LOCALTIMESTAMP = "LOCALTIMESTAMP";
//$NON-NLS-1$
- public static final String MATCH = "MATCH"; //$NON-NLS-1$
- public static final String MEMBER = "MEMBER"; //$NON-NLS-1$
- public static final String MERGE = "MERGE"; //$NON-NLS-1$
- public static final String METHOD = "METHOD"; //$NON-NLS-1$
- public static final String MINUTE = "MINUTE"; //$NON-NLS-1$
- public static final String MODIFIES = "MODIFIES"; //$NON-NLS-1$
- public static final String MODULE = "MODULE"; //$NON-NLS-1$
- public static final String MONTH = "MONTH"; //$NON-NLS-1$
- public static final String MULTISET = "MULTISET"; //$NON-NLS-1$
- public static final String NATIONAL = "NATIONAL"; //$NON-NLS-1$
- public static final String NATURAL = "NATURAL"; //$NON-NLS-1$
- public static final String NCHAR = "NCHAR"; //$NON-NLS-1$
- public static final String NCLOB = "NCLOB"; //$NON-NLS-1$
- public static final String NEW = "NEW"; //$NON-NLS-1$
- public static final String NO = "NO"; //$NON-NLS-1$
- public static final String NONE = "NONE"; //$NON-NLS-1$
- public static final String NOT = "NOT"; //$NON-NLS-1$
- public static final String NULL = "NULL"; //$NON-NLS-1$
- public static final String NUMERIC = "NUMERIC"; //$NON-NLS-1$
- public static final String OBJECT = "OBJECT"; //$NON-NLS-1$
- public static final String OF = "OF"; //$NON-NLS-1$
- public static final String OLD = "OLD"; //$NON-NLS-1$
- public static final String ON = "ON"; //$NON-NLS-1$
- public static final String ONLY = "ONLY"; //$NON-NLS-1$
- public static final String OPEN = "OPEN"; //$NON-NLS-1$
- public static final String OR = "OR"; //$NON-NLS-1$
- public static final String ORDER = "ORDER"; //$NON-NLS-1$
- public static final String OUT = "OUT"; //$NON-NLS-1$
- public static final String OUTER = "OUTER"; //$NON-NLS-1$
- public static final String OUTPUT = "OUTPUT"; //$NON-NLS-1$
- public static final String OPTION = "OPTION"; //$NON-NLS-1$
- public static final String OVER = "OVER"; //$NON-NLS-1$
- public static final String OVERLAPS = "OVERLAPS"; //$NON-NLS-1$
- public static final String PARAMETER = "PARAMETER"; //$NON-NLS-1$
- public static final String PARTITION = "PARTITION"; //$NON-NLS-1$
- public static final String PRECISION = "PRECISION"; //$NON-NLS-1$
- public static final String PREPARE = "PREPARE"; //$NON-NLS-1$
- public static final String PRIMARY = "PRIMARY"; //$NON-NLS-1$
- public static final String PROCEDURE = "PROCEDURE"; //$NON-NLS-1$
- public static final String RANGE = "RANGE"; //$NON-NLS-1$
- public static final String READS = "READS"; //$NON-NLS-1$
- public static final String REAL = "REAL"; //$NON-NLS-1$
- public static final String RECURSIVE = "RECURSIVE"; //$NON-NLS-1$
- public static final String REFERENCES = "REFERENCES"; //$NON-NLS-1$
- public static final String REFERENCING = "REFERENCING"; //$NON-NLS-1$
- public static final String RELEASE = "RELEASE"; //$NON-NLS-1$
- public static final String RETURN = "RETURN"; //$NON-NLS-1$
- public static final String RETURNS = "RETURNS"; //$NON-NLS-1$
- public static final String REVOKE = "REVOKE"; //$NON-NLS-1$
- public static final String RIGHT = "RIGHT"; //$NON-NLS-1$
- public static final String ROLLBACK = "ROLLBACK"; //$NON-NLS-1$
- public static final String ROLLUP = "ROLLUP"; //$NON-NLS-1$
- public static final String ROW = "ROW"; //$NON-NLS-1$
- public static final String ROWS = "ROWS"; //$NON-NLS-1$
- public static final String SAVEPOINT = "SAVEPOINT"; //$NON-NLS-1$
- public static final String SCROLL = "SCROLL"; //$NON-NLS-1$
- public static final String SEARCH = "SEARCH"; //$NON-NLS-1$
- public static final String SECOND = "SECOND"; //$NON-NLS-1$
- public static final String SELECT = "SELECT"; //$NON-NLS-1$
- public static final String SENSITIVE = "SENSITIVE"; //$NON-NLS-1$
- public static final String SESSION_USER = "SESSION_USER"; //$NON-NLS-1$
- public static final String SET = "SET"; //$NON-NLS-1$
- public static final String SHORT = "SHORT"; //$NON-NLS-1$
- public static final String SIILAR = "SIMILAR"; //$NON-NLS-1$
- public static final String SMALLINT = "SMALLINT"; //$NON-NLS-1$
- public static final String SOME = "SOME"; //$NON-NLS-1$
- public static final String SPECIFIC = "SPECIFIC"; //$NON-NLS-1$
- public static final String SPECIFICTYPE = "SPECIFICTYPE"; //$NON-NLS-1$
- public static final String SQL = "SQL"; //$NON-NLS-1$
- public static final String SQLEXCEPTION = "SQLEXCEPTION"; //$NON-NLS-1$
- public static final String SQLSTATE = "SQLSTATE"; //$NON-NLS-1$
- public static final String SQLWARNING = "SQLWARNING"; //$NON-NLS-1$
- public static final String SUBMULTILIST = "SUBMULTILIST"; //$NON-NLS-1$
- public static final String START = "START"; //$NON-NLS-1$
- public static final String STATIC = "STATIC"; //$NON-NLS-1$
- public static final String SYMETRIC = "SYMETRIC"; //$NON-NLS-1$
- public static final String SYSTEM = "SYSTEM"; //$NON-NLS-1$
- public static final String SYSTEM_USER = "SYSTEM_USER"; //$NON-NLS-1$
- public static final String TABLE = "TABLE"; //$NON-NLS-1$
- public static final String TEMPORARY = "TEMPORARY"; //$NON-NLS-1$
- public static final String THEN = "THEN"; //$NON-NLS-1$
- public static final String TIME = "TIME"; //$NON-NLS-1$
- public static final String TIMESTAMP = "TIMESTAMP"; //$NON-NLS-1$
- public static final String TIMEZONE_HOUR = "TIMEZONE_HOUR"; //$NON-NLS-1$
- public static final String TIMEZONE_MINUTE = "TIMEZONE_MINUTE";
//$NON-NLS-1$
- public static final String TO = "TO"; //$NON-NLS-1$
- public static final String TREAT = "TREAT"; //$NON-NLS-1$
- public static final String TRAILING = "TRAILING"; //$NON-NLS-1$
- public static final String TRANSLATE = "TRANSLATE"; //$NON-NLS-1$
- public static final String TRANSLATION = "TRANSLATION"; //$NON-NLS-1$
- public static final String TRIGGER = "TRIGGER"; //$NON-NLS-1$
- public static final String TRUE = "TRUE"; //$NON-NLS-1$
- public static final String UNION = "UNION"; //$NON-NLS-1$
- public static final String UNIQUE = "UNIQUE"; //$NON-NLS-1$
- public static final String UNKNOWN = "UNKNOWN"; //$NON-NLS-1$
- public static final String UPDATE = "UPDATE"; //$NON-NLS-1$
- public static final String USER = "USER"; //$NON-NLS-1$
- public static final String USING = "USING"; //$NON-NLS-1$
- public static final String VALUE = "VALUE"; //$NON-NLS-1$
- public static final String VALUES = "VALUES"; //$NON-NLS-1$
- public static final String VARCHAR = "VARCHAR"; //$NON-NLS-1$
- public static final String VARYING = "VARYING"; //$NON-NLS-1$
- public static final String WHEN = "WHEN"; //$NON-NLS-1$
- public static final String WHENEVER = "WHENEVER"; //$NON-NLS-1$
- public static final String WHERE = "WHERE"; //$NON-NLS-1$
- public static final String WINDOW = "WINDOW"; //$NON-NLS-1$
- public static final String WITH = "WITH"; //$NON-NLS-1$
- public static final String WITHIN = "WITHIN"; //$NON-NLS-1$
- public static final String WITHOUT = "WITHOUT"; //$NON-NLS-1$
- public static final String YEAR = "YEAR"; //$NON-NLS-1$
-
- //SQL/XML
-
- public static final String XML = "XML"; //$NON-NLS-1$
- public static final String XMLAGG = "XMLAGG"; //$NON-NLS-1$
- public static final String XMLATTRIBUTES = "XMLATTRIBUTES"; //$NON-NLS-1$
- public static final String XMLBINARY = "XMLBINARY"; //$NON-NLS-1$
- public static final String XMLCONCAT = "XMLCONCAT"; //$NON-NLS-1$
- public static final String XMLCOMMENT = "XMLCOMMENT"; //$NON-NLS-1$
- public static final String XMLELEMENT = "XMLELEMENT"; //$NON-NLS-1$
- public static final String XMLFOREST = "XMLFOREST"; //$NON-NLS-1$
- public static final String XMLNAMESPACES = "XMLNAMESPACES"; //$NON-NLS-1$
- public static final String XMLPARSE = "XMLPARSE"; //$NON-NLS-1$
- public static final String XMLPI = "XMLPI"; //$NON-NLS-1$
- public static final String XMLROOT = "XMLROOT"; //$NON-NLS-1$
- public static final String XMLSERIALIZE = "XMLSERIALIZE"; //$NON-NLS-1$
-
- //SQL/MED
-
- public static final String DATALINK = "DATALINK"; //$NON-NLS-1$
- public static final String DLNEWCOPY = "DLNEWCOPY"; //$NON-NLS-1$
- public static final String DLPREVIOUSCOPY = "DLPREVIOUSCOPY";
//$NON-NLS-1$
- public static final String DLURLCOMPLETE = "DLURLCOMPLETE"; //$NON-NLS-1$
- public static final String DLURLCOMPLETEWRITE = "DLURELCOMPLETEWRITE";
//$NON-NLS-1$
- public static final String DLURLCOMPLETEONLY = "DLURLCOMPLETEONLY";
//$NON-NLS-1$
- public static final String DLURLPATH = "DLURLPATH"; //$NON-NLS-1$
- public static final String DLURLPATHWRITE = "DLURLPATHWRITE";
//$NON-NLS-1$
- public static final String DLURLPATHONLY = "DLURLPATHONLY"; //$NON-NLS-1$
- public static final String DLURLSCHEME = "DLURLSCHEME"; //$NON-NLS-1$
- public static final String DLURLSERVER = "DLURLSEVER"; //$NON-NLS-1$
- public static final String DLVALUE = "DLVALUE"; //$NON-NLS-1$
- public static final String IMPORT = "IMPORT"; //$NON-NLS-1$
-
- /**
- * Set of CAPITALIZED reserved words for checking whether a string is a reserved word.
- */
- private static final Set<String> RESERVED_WORDS = new HashSet<String>();
-
- // Initialize RESERVED_WORDS set - This is a poor man's enum. To much legacy
code expects the constants to be Strings.
- static {
- Field[] fields = SQLReservedWords.class.getDeclaredFields();
- for (Field field : fields) {
- if (field.getType() == String.class) {
- try {
- if (!RESERVED_WORDS.add((String)field.get(null))) {
- throw new AssertionError("Duplicate value for " + field.getName());
//$NON-NLS-1$
- }
- } catch (Exception e) {
- }
- }
- }
- }
-
- /** Can't construct */
- private SQLReservedWords() {}
-
- /**
- * Check whether a string is a reserved word.
- * @param str String to check
- * @return True if reserved word, false if not or null
- */
- public static final boolean isReservedWord(String str) {
- if(str == null) {
- return false;
- }
- return RESERVED_WORDS.contains(str.toUpperCase());
- }
-}
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-06
15:12:19 UTC (rev 2185)
+++ trunk/api/src/main/java/org/teiid/language/visitor/SQLStringVisitor.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -22,6 +22,8 @@
package org.teiid.language.visitor;
+import static org.teiid.language.SQLConstants.Reserved.*;
+
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
@@ -57,7 +59,6 @@
import org.teiid.language.Not;
import org.teiid.language.OrderBy;
import org.teiid.language.QueryExpression;
-import org.teiid.language.SQLReservedWords;
import org.teiid.language.ScalarSubquery;
import org.teiid.language.SearchedCase;
import org.teiid.language.SearchedWhenClause;
@@ -70,8 +71,8 @@
import org.teiid.language.TableReference;
import org.teiid.language.Update;
import org.teiid.language.Argument.Direction;
-import org.teiid.language.SQLReservedWords.NonReserved;
-import org.teiid.language.SQLReservedWords.Tokens;
+import org.teiid.language.SQLConstants.NonReserved;
+import org.teiid.language.SQLConstants.Tokens;
import org.teiid.language.SortSpecification.Ordering;
import org.teiid.metadata.AbstractMetadataRecord;
@@ -165,7 +166,7 @@
.append(Tokens.LPAREN);
if ( obj.isDistinct()) {
- buffer.append(SQLReservedWords.DISTINCT)
+ buffer.append(DISTINCT)
.append(Tokens.SPACE);
}
@@ -212,15 +213,15 @@
* @see
com.metamatrix.data.visitor.LanguageObjectVisitor#visit(org.teiid.language.Delete)
*/
public void visit(Delete obj) {
- buffer.append(SQLReservedWords.DELETE)
+ buffer.append(DELETE)
.append(Tokens.SPACE);
buffer.append(getSourceComment(obj));
- buffer.append(SQLReservedWords.FROM)
+ buffer.append(FROM)
.append(Tokens.SPACE);
append(obj.getTable());
if (obj.getWhere() != null) {
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.WHERE)
+ .append(WHERE)
.append(Tokens.SPACE);
append(obj.getWhere());
}
@@ -311,7 +312,7 @@
* @see
com.metamatrix.data.visitor.LanguageObjectVisitor#visit(com.metamatrix.data.language.IExecute)
*/
public void visit(Call obj) {
- buffer.append(SQLReservedWords.EXEC)
+ buffer.append(EXEC)
.append(Tokens.SPACE);
if(obj.getMetadataObject() != null) {
@@ -342,7 +343,7 @@
* @see
com.metamatrix.data.visitor.LanguageObjectVisitor#visit(com.metamatrix.data.language.IExistsCriteria)
*/
public void visit(Exists obj) {
- buffer.append(SQLReservedWords.EXISTS)
+ buffer.append(EXISTS)
.append(Tokens.SPACE)
.append(Tokens.LPAREN);
append(obj.getSubquery());
@@ -360,7 +361,7 @@
String name = obj.getName();
List<Expression> args = obj.getParameters();
- if(name.equalsIgnoreCase(SQLReservedWords.CONVERT) ||
name.equalsIgnoreCase(SQLReservedWords.CAST)) {
+ if(name.equalsIgnoreCase(CONVERT) || name.equalsIgnoreCase(CAST)) {
Object typeValue = ((Literal)args.get(1)).getValue();
@@ -369,12 +370,12 @@
append(args.get(0));
- if(name.equalsIgnoreCase(SQLReservedWords.CONVERT)) {
+ if(name.equalsIgnoreCase(CONVERT)) {
buffer.append(Tokens.COMMA);
buffer.append(Tokens.SPACE);
} else {
buffer.append(Tokens.SPACE);
- buffer.append(SQLReservedWords.AS);
+ buffer.append(AS);
buffer.append(Tokens.SPACE);
}
buffer.append(typeValue);
@@ -429,7 +430,7 @@
if (obj.getCorrelationName() != null) {
buffer.append(Tokens.SPACE);
if (useAsInGroupAlias()){
- buffer.append(SQLReservedWords.AS)
+ buffer.append(AS)
.append(Tokens.SPACE);
}
buffer.append(obj.getCorrelationName());
@@ -451,9 +452,9 @@
* @see
com.metamatrix.data.visitor.LanguageObjectVisitor#visit(org.teiid.language.GroupBy)
*/
public void visit(GroupBy obj) {
- buffer.append(SQLReservedWords.GROUP)
+ buffer.append(GROUP)
.append(Tokens.SPACE)
- .append(SQLReservedWords.BY)
+ .append(BY)
.append(Tokens.SPACE);
append(obj.getElements());
}
@@ -465,10 +466,10 @@
append(obj.getLeftExpression());
if (obj.isNegated()) {
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.NOT);
+ .append(NOT);
}
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.IN)
+ .append(IN)
.append(Tokens.SPACE)
.append(Tokens.LPAREN);
append(obj.getRightExpressions());
@@ -481,7 +482,7 @@
buffer.append(Tokens.RPAREN);
buffer.append(Tokens.SPACE);
if(useAsInGroupAlias()) {
- buffer.append(SQLReservedWords.AS);
+ buffer.append(AS);
buffer.append(Tokens.SPACE);
}
buffer.append(obj.getCorrelationName());
@@ -491,9 +492,9 @@
* @see
com.metamatrix.data.visitor.LanguageObjectVisitor#visit(org.teiid.language.Insert)
*/
public void visit(Insert obj) {
- buffer.append(SQLReservedWords.INSERT).append(Tokens.SPACE);
+ buffer.append(INSERT).append(Tokens.SPACE);
buffer.append(getSourceComment(obj));
- buffer.append(SQLReservedWords.INTO).append(Tokens.SPACE);
+ buffer.append(INTO).append(Tokens.SPACE);
append(obj.getTable());
buffer.append(Tokens.SPACE).append(Tokens.LPAREN);
@@ -513,7 +514,7 @@
@Override
public void visit(ExpressionValueSource obj) {
- buffer.append(SQLReservedWords.VALUES).append(Tokens.SPACE).append(Tokens.LPAREN);
+ buffer.append(VALUES).append(Tokens.SPACE).append(Tokens.LPAREN);
append(obj.getValues());
buffer.append(Tokens.RPAREN);
}
@@ -521,13 +522,13 @@
public void visit(IsNull obj) {
append(obj.getExpression());
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.IS)
+ .append(IS)
.append(Tokens.SPACE);
if (obj.isNegated()) {
- buffer.append(SQLReservedWords.NOT)
+ buffer.append(NOT)
.append(Tokens.SPACE);
}
- buffer.append(SQLReservedWords.NULL);
+ buffer.append(NULL);
}
public void visit(Join obj) {
@@ -543,30 +544,30 @@
switch(obj.getJoinType()) {
case CROSS_JOIN:
- buffer.append(SQLReservedWords.CROSS);
+ buffer.append(CROSS);
break;
case FULL_OUTER_JOIN:
- buffer.append(SQLReservedWords.FULL)
+ buffer.append(FULL)
.append(Tokens.SPACE)
- .append(SQLReservedWords.OUTER);
+ .append(OUTER);
break;
case INNER_JOIN:
- buffer.append(SQLReservedWords.INNER);
+ buffer.append(INNER);
break;
case LEFT_OUTER_JOIN:
- buffer.append(SQLReservedWords.LEFT)
+ buffer.append(LEFT)
.append(Tokens.SPACE)
- .append(SQLReservedWords.OUTER);
+ .append(OUTER);
break;
case RIGHT_OUTER_JOIN:
- buffer.append(SQLReservedWords.RIGHT)
+ buffer.append(RIGHT)
.append(Tokens.SPACE)
- .append(SQLReservedWords.OUTER);
+ .append(OUTER);
break;
default: buffer.append(UNDEFINED);
}
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.JOIN)
+ .append(JOIN)
.append(Tokens.SPACE);
TableReference rightItem = obj.getRightItem();
@@ -581,7 +582,7 @@
final Condition condition = obj.getCondition();
if (condition != null) {
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.ON)
+ .append(ON)
.append(Tokens.SPACE);
append(condition);
}
@@ -591,15 +592,15 @@
append(obj.getLeftExpression());
if (obj.isNegated()) {
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.NOT);
+ .append(NOT);
}
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.LIKE)
+ .append(LIKE)
.append(Tokens.SPACE);
append(obj.getRightExpression());
if (obj.getEscapeCharacter() != null) {
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.ESCAPE)
+ .append(ESCAPE)
.append(Tokens.SPACE)
.append(Tokens.QUOTE)
.append(obj.getEscapeCharacter().toString())
@@ -609,7 +610,7 @@
}
public void visit(Limit obj) {
- buffer.append(SQLReservedWords.LIMIT)
+ buffer.append(LIMIT)
.append(Tokens.SPACE);
if (obj.getRowOffset() > 0) {
buffer.append(obj.getRowOffset())
@@ -623,7 +624,7 @@
if (obj.isBindValue()) {
buffer.append("?"); //$NON-NLS-1$
} else if (obj.getValue() == null) {
- buffer.append(SQLReservedWords.NULL);
+ buffer.append(NULL);
} else {
Class<?> type = obj.getType();
String val = obj.getValue().toString();
@@ -654,7 +655,7 @@
}
public void visit(Not obj) {
- buffer.append(SQLReservedWords.NOT)
+ buffer.append(NOT)
.append(Tokens.SPACE)
.append(Tokens.LPAREN);
append(obj.getCriteria());
@@ -662,9 +663,9 @@
}
public void visit(OrderBy obj) {
- buffer.append(SQLReservedWords.ORDER)
+ buffer.append(ORDER)
.append(Tokens.SPACE)
- .append(SQLReservedWords.BY)
+ .append(BY)
.append(Tokens.SPACE);
append(obj.getSortSpecifications());
}
@@ -673,7 +674,7 @@
append(obj.getExpression());
if (obj.getOrdering() == Ordering.DESC) {
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.DESC);
+ .append(DESC);
} // Don't print default "ASC"
}
@@ -682,10 +683,10 @@
}
public void visit(Select obj) {
- buffer.append(SQLReservedWords.SELECT).append(Tokens.SPACE);
+ buffer.append(SELECT).append(Tokens.SPACE);
buffer.append(getSourceComment(obj));
if (obj.isDistinct()) {
- buffer.append(SQLReservedWords.DISTINCT).append(Tokens.SPACE);
+ buffer.append(DISTINCT).append(Tokens.SPACE);
}
if (useSelectLimit() && obj.getLimit() != null) {
append(obj.getLimit());
@@ -693,12 +694,12 @@
}
append(obj.getDerivedColumns());
if (obj.getFrom() != null && !obj.getFrom().isEmpty()) {
- buffer.append(Tokens.SPACE).append(SQLReservedWords.FROM).append(Tokens.SPACE);
+ buffer.append(Tokens.SPACE).append(FROM).append(Tokens.SPACE);
append(obj.getFrom());
}
if (obj.getWhere() != null) {
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.WHERE)
+ .append(WHERE)
.append(Tokens.SPACE);
append(obj.getWhere());
}
@@ -708,7 +709,7 @@
}
if (obj.getHaving() != null) {
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.HAVING)
+ .append(HAVING)
.append(Tokens.SPACE);
append(obj.getHaving());
}
@@ -723,26 +724,26 @@
}
public void visit(SearchedCase obj) {
- buffer.append(SQLReservedWords.CASE);
+ buffer.append(CASE);
for (SearchedWhenClause swc : obj.getCases()) {
append(swc);
}
if (obj.getElseExpression() != null) {
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.ELSE)
+ .append(ELSE)
.append(Tokens.SPACE);
append(obj.getElseExpression());
}
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.END);
+ .append(END);
}
@Override
public void visit(SearchedWhenClause obj) {
- buffer.append(Tokens.SPACE).append(SQLReservedWords.WHEN)
+ buffer.append(Tokens.SPACE).append(WHEN)
.append(Tokens.SPACE);
append(obj.getCondition());
- buffer.append(Tokens.SPACE).append(SQLReservedWords.THEN)
+ buffer.append(Tokens.SPACE).append(THEN)
.append(Tokens.SPACE);
append(obj.getResult());
}
@@ -761,7 +762,7 @@
append(obj.getExpression());
if (obj.getAlias() != null) {
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.AS)
+ .append(AS)
.append(Tokens.SPACE)
.append(obj.getAlias());
}
@@ -782,8 +783,8 @@
}
buffer.append(Tokens.SPACE);
switch(obj.getQuantifier()) {
- case ALL: buffer.append(SQLReservedWords.ALL); break;
- case SOME: buffer.append(SQLReservedWords.SOME); break;
+ case ALL: buffer.append(ALL); break;
+ case SOME: buffer.append(SOME); break;
default: buffer.append(UNDEFINED);
}
buffer.append(Tokens.SPACE);
@@ -796,10 +797,10 @@
append(obj.getLeftExpression());
if (obj.isNegated()) {
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.NOT);
+ .append(NOT);
}
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.IN)
+ .append(IN)
.append(Tokens.SPACE)
.append(Tokens.LPAREN);
append(obj.getSubquery());
@@ -807,17 +808,17 @@
}
public void visit(Update obj) {
- buffer.append(SQLReservedWords.UPDATE)
+ buffer.append(UPDATE)
.append(Tokens.SPACE);
buffer.append(getSourceComment(obj));
append(obj.getTable());
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.SET)
+ .append(SET)
.append(Tokens.SPACE);
append(obj.getChanges());
if (obj.getWhere() != null) {
buffer.append(Tokens.SPACE)
- .append(SQLReservedWords.WHERE)
+ .append(WHERE)
.append(Tokens.SPACE);
append(obj.getWhere());
}
@@ -838,7 +839,7 @@
if(obj.isAll()) {
buffer.append(Tokens.SPACE);
- buffer.append(SQLReservedWords.ALL);
+ buffer.append(ALL);
}
buffer.append(Tokens.SPACE);
Modified: trunk/common-core/src/main/java/org/teiid/core/types/XMLType.java
===================================================================
--- trunk/common-core/src/main/java/org/teiid/core/types/XMLType.java 2010-06-06 15:12:19
UTC (rev 2185)
+++ trunk/common-core/src/main/java/org/teiid/core/types/XMLType.java 2010-06-07 16:27:14
UTC (rev 2186)
@@ -46,7 +46,7 @@
public final class XMLType extends Streamable<SQLXML> implements SQLXML {
public enum Type {
- UNKNOWN, DOCUMENT, FRAGMENT, SIBLINGS, COMMENT, PI, TEXT
+ UNKNOWN, DOCUMENT, FRAGMENT, SEQUENCE, COMMENT, PI, TEXT
}
private static final long serialVersionUID = -7922647237095135723L;
Modified:
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/ExtractFunctionModifier.java
===================================================================
---
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/ExtractFunctionModifier.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/ExtractFunctionModifier.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -29,8 +29,8 @@
import org.teiid.language.Expression;
import org.teiid.language.Function;
-import org.teiid.language.SQLReservedWords;
-import org.teiid.language.SQLReservedWords.Tokens;
+import org.teiid.language.SQLConstants.Reserved;
+import org.teiid.language.SQLConstants.Tokens;
import org.teiid.translator.SourceSystemFunctions;
@@ -75,7 +75,7 @@
objs.add("EXTRACT("); //$NON-NLS-1$
objs.add(FUNCTION_PART_MAP.get(function.getName().toLowerCase()));
objs.add(Tokens.SPACE);
- objs.add(SQLReservedWords.FROM);
+ objs.add(Reserved.FROM);
objs.add(Tokens.SPACE);
objs.add(args.get(0));
objs.add(Tokens.RPAREN);
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-06
15:12:19 UTC (rev 2185)
+++
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -45,12 +45,12 @@
import org.teiid.language.LanguageObject;
import org.teiid.language.Like;
import org.teiid.language.Literal;
-import org.teiid.language.SQLReservedWords;
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.SQLReservedWords.Tokens;
+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;
@@ -154,7 +154,7 @@
*/
private void translateSQLType(Class type, Object obj, StringBuilder valuesbuffer) {
if (obj == null) {
- valuesbuffer.append(SQLReservedWords.NULL);
+ valuesbuffer.append(Reserved.NULL);
} else {
if(Number.class.isAssignableFrom(type)) {
boolean useFormatting = false;
Modified:
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/hsql/AddDiffModifier.java
===================================================================
---
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/hsql/AddDiffModifier.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/hsql/AddDiffModifier.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -31,7 +31,7 @@
import org.teiid.language.Function;
import org.teiid.language.LanguageFactory;
import org.teiid.language.Literal;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.translator.TypeFacility;
import org.teiid.translator.jdbc.ExtractFunctionModifier;
import org.teiid.translator.jdbc.FunctionModifier;
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-06
15:12:19 UTC (rev 2185)
+++
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -47,7 +47,7 @@
import org.teiid.language.NamedTable;
import org.teiid.language.QueryExpression;
import org.teiid.language.Select;
-import org.teiid.language.SQLReservedWords.Tokens;
+import org.teiid.language.SQLConstants.Tokens;
import org.teiid.language.SetQuery.Operation;
import org.teiid.language.visitor.CollectorVisitor;
import org.teiid.logging.LogConstants;
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-06
15:12:19 UTC (rev 2185)
+++
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/postgresql/PostgreSQLExecutionFactory.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -35,7 +35,7 @@
import org.teiid.language.LanguageObject;
import org.teiid.language.Limit;
import org.teiid.language.Literal;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.translator.Translator;
import org.teiid.translator.TranslatorException;
import org.teiid.translator.ExecutionContext;
Modified:
trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/TestEscapeSyntaxModifier.java
===================================================================
---
trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/TestEscapeSyntaxModifier.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/TestEscapeSyntaxModifier.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -29,7 +29,7 @@
import org.teiid.cdk.CommandBuilder;
import org.teiid.language.Function;
import org.teiid.language.Literal;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.unittest.TimestampUtil;
import org.teiid.translator.jdbc.EscapeSyntaxModifier;
Modified:
trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/NameUtil.java
===================================================================
---
trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/NameUtil.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/NameUtil.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -7,7 +7,7 @@
*/
package org.teiid.translator.salesforce;
-import org.teiid.language.SQLReservedWords;
+import org.teiid.language.SQLConstants;
public class NameUtil {
@@ -28,7 +28,7 @@
* @return
*/
private static String checkReservedWords( String normal ) {
- if (SQLReservedWords.isReservedWord(normal)) {
+ if (SQLConstants.isReservedWord(normal)) {
normal = normal + "_"; //$NON-NLS-1$
}
return normal;
Modified: trunk/engine/src/main/java/org/teiid/common/buffer/impl/BufferManagerImpl.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/common/buffer/impl/BufferManagerImpl.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/common/buffer/impl/BufferManagerImpl.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -385,6 +385,7 @@
return new XMLType(sqlxml);
}
});
+ XMLUtil.setBufferManager(this);
}
@Override
Modified:
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -55,7 +55,7 @@
import org.teiid.dqp.message.AtomicRequestMessage;
import org.teiid.dqp.message.RequestID;
import org.teiid.dqp.service.BufferService;
-import org.teiid.language.SQLReservedWords;
+import org.teiid.language.SQLConstants.Reserved;
import org.teiid.metadata.AbstractMetadataRecord;
import org.teiid.metadata.Column;
import org.teiid.metadata.CompositeMetadataStore;
@@ -393,7 +393,7 @@
String keyElementName)
throws TeiidComponentException, TeiidProcessingException {
- String query = SQLReservedWords.SELECT + ' ' + keyElementName + "
," + returnElementName + ' ' + SQLReservedWords.FROM + ' ' +
codeTableName; //$NON-NLS-1$
+ String query = Reserved.SELECT + ' ' + keyElementName + " ," +
returnElementName + ' ' + Reserved.FROM + ' ' + codeTableName;
//$NON-NLS-1$
final CacheKey codeRequestId =
this.codeTableCache.createCacheRequest(codeTableName, returnElementName, keyElementName,
context);
Modified:
trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -45,7 +45,7 @@
import org.teiid.dqp.internal.process.SessionAwareCache.CacheID;
import org.teiid.dqp.internal.process.multisource.MultiSourceMetadataWrapper;
import org.teiid.dqp.message.RequestID;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.SupportConstants;
Modified: trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java 2010-06-06 15:12:19 UTC
(rev 2185)
+++ trunk/engine/src/main/java/org/teiid/query/eval/Evaluator.java 2010-06-07 16:27:14 UTC
(rev 2186)
@@ -22,17 +22,31 @@
package org.teiid.query.eval;
+import java.io.IOException;
+import java.io.Writer;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.TransformerException;
+
+import net.sf.saxon.expr.PathMap.PathMapRoot;
+import net.sf.saxon.om.Item;
+import net.sf.saxon.om.NodeInfo;
+import net.sf.saxon.om.SequenceIterator;
+import net.sf.saxon.query.QueryResult;
+import net.sf.saxon.trans.XPathException;
+
import org.teiid.api.exception.query.CriteriaEvaluationException;
import org.teiid.api.exception.query.ExpressionEvaluationException;
import org.teiid.api.exception.query.FunctionExecutionException;
@@ -41,8 +55,10 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.core.types.DataTypeManager;
+import org.teiid.core.types.SQLXMLImpl;
import org.teiid.core.types.Sequencable;
import org.teiid.core.types.TransformationException;
+import org.teiid.core.types.XMLTranslator;
import org.teiid.core.types.XMLType;
import org.teiid.core.types.XMLType.Type;
import org.teiid.core.types.basic.StringToSQLXMLTransform;
@@ -55,6 +71,7 @@
import org.teiid.query.function.source.XMLSystemFunctions;
import org.teiid.query.function.source.XMLSystemFunctions.NameValuePair;
import org.teiid.query.processor.ProcessorDataManager;
+import org.teiid.query.processor.xml.XMLUtil;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.lang.AbstractSetCriteria;
import org.teiid.query.sql.lang.CollectionValueIterator;
@@ -86,12 +103,14 @@
import org.teiid.query.sql.symbol.XMLElement;
import org.teiid.query.sql.symbol.XMLForest;
import org.teiid.query.sql.symbol.XMLNamespaces;
+import org.teiid.query.sql.symbol.XMLQuery;
import org.teiid.query.sql.symbol.XMLSerialize;
import org.teiid.query.sql.symbol.XMLNamespaces.NamespaceItem;
import org.teiid.query.sql.util.ValueIterator;
import org.teiid.query.sql.util.ValueIteratorSource;
import org.teiid.query.util.CommandContext;
import org.teiid.query.util.ErrorMessageKeys;
+import org.teiid.query.xquery.saxon.SaxonXQueryExpression;
public class Evaluator {
@@ -622,10 +641,92 @@
throw new FunctionExecutionException(e, e.getMessage());
}
throw new
FunctionExecutionException(QueryPlugin.Util.getString("Evaluator.xmlserialize"));
//$NON-NLS-1$
+ } else if (expression instanceof XMLQuery) {
+ XMLQuery xmlQuery = (XMLQuery)expression;
+ boolean contentOnly = true;
+ boolean emptyOnEmpty = true;
+ if (xmlQuery.getReturningContent() != null) {
+ contentOnly = xmlQuery.getReturningContent();
+ }
+ if (xmlQuery.getEmptyOnEmpty() != null) {
+ emptyOnEmpty = xmlQuery.getEmptyOnEmpty();
+ }
+ try {
+ SequenceIterator iter = evaluateXQuery(xmlQuery.getXQueryExpression(),
xmlQuery.getContextRoot(), xmlQuery.getPassing(), tuple);
+ return createXMLType(iter, xmlQuery.getXQueryExpression(), contentOnly,
emptyOnEmpty);
+ } catch (TeiidProcessingException e) {
+ throw new FunctionExecutionException(e,
QueryPlugin.Util.getString("Evaluator.xmlquery", e.getMessage()));
//$NON-NLS-1$
+ } catch (XPathException e) {
+ throw new FunctionExecutionException(e,
QueryPlugin.Util.getString("Evaluator.xmlquery", e.getMessage()));
//$NON-NLS-1$
+ }
} else {
throw new TeiidComponentException(ErrorMessageKeys.PROCESSOR_0016,
QueryPlugin.Util.getString(ErrorMessageKeys.PROCESSOR_0016,
expression.getClass().getName()));
}
}
+
+ public XMLType createXMLType(final SequenceIterator iter, final SaxonXQueryExpression
expr, boolean contentOnly, boolean emptyOnEmpty) throws XPathException,
TeiidComponentException, TeiidProcessingException {
+ Item item = iter.next();
+ if (item == null) {
+ if (contentOnly) {
+ throw new
FunctionExecutionException(QueryPlugin.Util.getString("Evaluator.xmlquery_content_empty"));
//$NON-NLS-1$
+ }
+ if (!emptyOnEmpty) {
+ return null;
+ }
+ }
+ XMLType.Type type = Type.SEQUENCE;
+ if (item instanceof NodeInfo) {
+ NodeInfo info = (NodeInfo)item;
+ switch (info.getNodeKind()) {
+ case net.sf.saxon.type.Type.DOCUMENT:
+ type = Type.DOCUMENT;
+ break;
+ case net.sf.saxon.type.Type.ELEMENT:
+ type = Type.FRAGMENT;
+ break;
+ case net.sf.saxon.type.Type.TEXT:
+ type = Type.TEXT;
+ break;
+ }
+ }
+ Item next = iter.next();
+ if (next != null) {
+ type = Type.SEQUENCE;
+ }
+ if (contentOnly && type != Type.DOCUMENT && type != Type.FRAGMENT) {
+ throw new
FunctionExecutionException(QueryPlugin.Util.getString("Evaluator.xmlquery_content"));
//$NON-NLS-1$
+ }
+ SQLXMLImpl xml = XMLUtil.saveToBufferManager(new XMLTranslator() {
+
+ @Override
+ public void translate(Writer writer) throws TransformerException,
+ IOException {
+ Properties props = new Properties();
+ props.setProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$
+ //props.setProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
+ props.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
//$NON-NLS-1$
+ QueryResult.serializeSequence(iter.getAnother(), expr.getConfig(), writer,
props);
+ }
+ });
+ XMLType value = new XMLType(xml);
+ value.setType(type);
+ return value;
+ }
+
+ public SequenceIterator evaluateXQuery(SaxonXQueryExpression xquery, PathMapRoot
contextRoot, List<DerivedColumn> cols, List<?> tuple)
+ throws BlockedException, TeiidComponentException, TeiidProcessingException {
+ HashMap<String, Object> parameters = new HashMap<String, Object>();
+ Object contextItem = null;
+ for (DerivedColumn passing : cols) {
+ Object value = this.evaluate(passing.getExpression(), tuple);
+ if (passing.getAlias() == null) {
+ contextItem = value;
+ } else {
+ parameters.put(passing.getAlias(), value);
+ }
+ }
+ return xquery.evaluateXQuery(contextItem, contextRoot, parameters);
+ }
private NameValuePair<Object>[] getNameValuePairs(List tuple,
List<DerivedColumn> args)
throws ExpressionEvaluationException, BlockedException, TeiidComponentException {
Modified: trunk/engine/src/main/java/org/teiid/query/function/FunctionForm.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/function/FunctionForm.java 2010-06-06
15:12:19 UTC (rev 2185)
+++ trunk/engine/src/main/java/org/teiid/query/function/FunctionForm.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -23,12 +23,15 @@
package org.teiid.query.function;
import java.io.Serializable;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
import org.teiid.core.util.Assertion;
import org.teiid.core.util.HashCodeUtil;
-import org.teiid.language.SQLReservedWords;
-import org.teiid.query.function.metadata.*;
+import org.teiid.language.SQLConstants.Reserved;
+import org.teiid.query.function.metadata.FunctionMethod;
+import org.teiid.query.function.metadata.FunctionParameter;
/**
@@ -171,7 +174,7 @@
str.append(", "); //$NON-NLS-1$
} else {
str.append(" "); //$NON-NLS-1$
- str.append(SQLReservedWords.AS);
+ str.append(Reserved.AS);
str.append(" "); //$NON-NLS-1$
}
str.append(inputParamNames.get(1));
Modified: trunk/engine/src/main/java/org/teiid/query/function/FunctionMethods.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/function/FunctionMethods.java 2010-06-06
15:12:19 UTC (rev 2185)
+++ trunk/engine/src/main/java/org/teiid/query/function/FunctionMethods.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -41,7 +41,7 @@
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.types.TransformationException;
import org.teiid.core.util.TimestampWithTimezone;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.QueryPlugin;
import org.teiid.query.util.CommandContext;
import org.teiid.query.util.ErrorMessageKeys;
Modified:
trunk/engine/src/main/java/org/teiid/query/function/source/XMLSystemFunctions.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/function/source/XMLSystemFunctions.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/function/source/XMLSystemFunctions.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -183,7 +183,7 @@
}
}
}, context.getStreamingBatchSize()));
- result.setType(Type.SIBLINGS);
+ result.setType(Type.SEQUENCE);
return result;
}
@@ -268,7 +268,7 @@
}
}
}, context.getStreamingBatchSize()));
- result.setType(Type.SIBLINGS);
+ result.setType(Type.SEQUENCE);
return result;
}
@@ -341,7 +341,7 @@
}
switch(type) {
case FRAGMENT:
- case SIBLINGS:
+ case SEQUENCE:
case PI:
case COMMENT: //write the value directly to the writer
eventWriter.flush();
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-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/PlanToProcessConverter.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -28,6 +28,8 @@
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;
@@ -384,7 +386,7 @@
for (int col : projectionIndexes) {
filteredColumns.add(xt.getColumns().get(col));
}
- xt.getXQueryExpression().useDocumentProjection(filteredColumns, analysisRecord);
+ PathMapRoot root = xt.getXQueryExpression().useDocumentProjection(filteredColumns,
analysisRecord);
xtn.setProjectedColumns(filteredColumns);
xtn.setTable(xt);
processNode = xtn;
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-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CapabilitiesUtil.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -30,7 +30,7 @@
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.function.FunctionLibrary;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.optimizer.capabilities.CapabilitiesFinder;
Modified:
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushAggregates.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushAggregates.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushAggregates.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -40,7 +40,7 @@
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.function.FunctionLibrary;
import org.teiid.query.metadata.QueryMetadataInterface;
Modified:
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -33,7 +33,7 @@
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.util.Assertion;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.optimizer.capabilities.CapabilitiesFinder;
Modified: trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java 2010-06-06
15:12:19 UTC (rev 2185)
+++ trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -28,8 +28,8 @@
import org.teiid.core.util.Assertion;
import org.teiid.core.util.StringUtil;
-import org.teiid.language.SQLReservedWords;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
+import org.teiid.language.SQLConstants.Reserved;
import org.teiid.query.QueryPlugin;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.FromClause;
@@ -210,17 +210,17 @@
return JoinType.JOIN_INNER;
}
String joinType = joinTypeToken.image;
- if(joinType.equalsIgnoreCase(SQLReservedWords.INNER)) {
+ if(joinType.equalsIgnoreCase(Reserved.INNER)) {
return JoinType.JOIN_INNER;
- } else if(joinType.equalsIgnoreCase(SQLReservedWords.CROSS)) {
+ } else if(joinType.equalsIgnoreCase(Reserved.CROSS)) {
return JoinType.JOIN_CROSS;
- } else if(joinType.equalsIgnoreCase(SQLReservedWords.LEFT)) {
+ } else if(joinType.equalsIgnoreCase(Reserved.LEFT)) {
return JoinType.JOIN_LEFT_OUTER;
- } else if(joinType.equalsIgnoreCase(SQLReservedWords.RIGHT)) {
+ } else if(joinType.equalsIgnoreCase(Reserved.RIGHT)) {
return JoinType.JOIN_RIGHT_OUTER;
- } else if(joinType.equalsIgnoreCase(SQLReservedWords.FULL)) {
+ } else if(joinType.equalsIgnoreCase(Reserved.FULL)) {
return JoinType.JOIN_FULL_OUTER;
- } else if(joinType.equalsIgnoreCase(SQLReservedWords.UNION)) {
+ } else if(joinType.equalsIgnoreCase(Reserved.UNION)) {
return JoinType.JOIN_UNION;
} else {
Object[] params = new Object[] { joinType };
@@ -258,7 +258,7 @@
} else if(functionType.equals(NonReserved.MAX)) {
int num = info.anonMaxCount++;
return "max" + (num == 0 ? "" :
""+num);//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- } else if(functionType.equals(SQLReservedWords.XMLAGG)) {
+ } else if(functionType.equals(Reserved.XMLAGG)) {
int num = info.anonMaxCount++;
return "xmlagg" + (num == 0 ? "" :
""+num);//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
} else {
Modified:
trunk/engine/src/main/java/org/teiid/query/processor/proc/ExecDynamicSqlInstruction.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/processor/proc/ExecDynamicSqlInstruction.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/processor/proc/ExecDynamicSqlInstruction.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -38,7 +38,8 @@
import org.teiid.core.TeiidProcessingException;
import org.teiid.core.id.IDGenerator;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.language.SQLReservedWords;
+import org.teiid.language.SQLConstants;
+import org.teiid.language.SQLConstants.Reserved;
import org.teiid.logging.LogManager;
import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.execution.QueryExecPlugin;
@@ -146,9 +147,9 @@
if (dynamicCommand.getUsing() != null
&& !dynamicCommand.getUsing().isEmpty()) {
- metadataStore.addTempGroup(SQLReservedWords.USING, new
LinkedList(dynamicCommand.getUsing().getClauseMap().keySet()));
- GroupSymbol using = new GroupSymbol(SQLReservedWords.USING);
-
using.setMetadataID(metadataStore.getTempGroupID(SQLReservedWords.USING));
+ metadataStore.addTempGroup(Reserved.USING, new
LinkedList(dynamicCommand.getUsing().getClauseMap().keySet()));
+ GroupSymbol using = new GroupSymbol(Reserved.USING);
+ using.setMetadataID(metadataStore.getTempGroupID(Reserved.USING));
command.addExternalGroupToContext(using);
metadataStore.addTempGroup(ProcedureReservedWords.DVARS, new
LinkedList(dynamicCommand.getUsing().getClauseMap().keySet()));
using = new GroupSymbol(ProcedureReservedWords.DVARS);
@@ -234,7 +235,7 @@
new Object[] { this, " The using variable ", //$NON-NLS-1$
setClause.getSymbol(), " has value :", assignment }); //$NON-NLS-1$
localContext.setValue(setClause.getSymbol(), assignment);
- localContext.setValue(new ElementSymbol(SQLReservedWords.USING +
ElementSymbol.SEPARATOR + setClause.getSymbol().getShortName()), assignment);
+ localContext.setValue(new ElementSymbol(Reserved.USING + ElementSymbol.SEPARATOR +
setClause.getSymbol().getShortName()), assignment);
}
}
}
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-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/processor/relational/GroupingNode.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -39,7 +39,7 @@
import org.teiid.common.buffer.TupleSource;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.eval.Evaluator;
import org.teiid.query.function.aggregate.AggregateFunction;
import org.teiid.query.function.aggregate.Avg;
Modified:
trunk/engine/src/main/java/org/teiid/query/processor/relational/XMLTableNode.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/processor/relational/XMLTableNode.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/processor/relational/XMLTableNode.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -22,22 +22,13 @@
package org.teiid.query.processor.relational;
-import java.io.IOException;
-import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
-import java.util.Properties;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.TransformerException;
-
-import net.sf.saxon.Configuration;
+import net.sf.saxon.expr.PathMap.PathMapRoot;
import net.sf.saxon.om.Item;
-import net.sf.saxon.om.NodeInfo;
import net.sf.saxon.om.SequenceIterator;
-import net.sf.saxon.query.QueryResult;
import net.sf.saxon.sxpath.XPathDynamicContext;
import net.sf.saxon.sxpath.XPathExpression;
import net.sf.saxon.trans.XPathException;
@@ -49,44 +40,19 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.core.types.SQLXMLImpl;
-import org.teiid.core.types.Streamable;
-import org.teiid.core.types.TransformationException;
-import org.teiid.core.types.XMLTranslator;
import org.teiid.core.types.XMLType;
-import org.teiid.core.types.XMLType.Type;
-import org.teiid.query.processor.xml.XMLUtil;
+import org.teiid.query.execution.QueryExecPlugin;
import org.teiid.query.sql.lang.XMLTable;
import org.teiid.query.sql.lang.XMLTable.XMLColumn;
-import org.teiid.query.sql.symbol.DerivedColumn;
/**
* Handles xml table processing.
*/
public class XMLTableNode extends SubqueryAwareRelationalNode {
- private static final class QueryResultTranslator extends XMLTranslator {
- private final SequenceIterator pathIter;
- private final Configuration config;
-
- private QueryResultTranslator(SequenceIterator pathIter, Configuration config) {
- this.pathIter = pathIter;
- this.config = config;
- }
-
- @Override
- public void translate(Writer writer) throws TransformerException,
- IOException {
- Properties props = new Properties();
- props.setProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$
- //props.setProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
- props.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); //$NON-NLS-1$
- QueryResult.serializeSequence(pathIter, config, writer, props);
- }
- }
-
private XMLTable table;
private List<XMLColumn> projectedColumns;
+ private PathMapRoot contextRoot;
private SequenceIterator result;
private int rowCount = 0;
@@ -119,6 +85,10 @@
this.projectedColumns = projectedColumns;
}
+ public void setContextRoot(PathMapRoot contextRoot) {
+ this.contextRoot = contextRoot;
+ }
+
@Override
public XMLTableNode clone() {
XMLTableNode clone = new XMLTableNode(getID());
@@ -134,34 +104,23 @@
if (result == null) {
setReferenceValues(this.table);
- HashMap<String, Object> parameters = new HashMap<String, Object>();
- Object contextItem = null;
- for (DerivedColumn passing : this.table.getPassing()) {
- Object value = getEvaluator(Collections.emptyMap()).evaluate(passing.getExpression(),
null);
- if (passing.getAlias() == null) {
- contextItem = value;
- } else {
- parameters.put(passing.getAlias(), value);
- }
- }
- result = this.table.getXQueryExpression().evaluateXQuery(contextItem, parameters);
+ result =
getEvaluator(Collections.emptyMap()).evaluateXQuery(this.table.getXQueryExpression(),
this.contextRoot, this.table.getPassing(), null);
}
while (!isBatchFull() && !isLastBatch()) {
- try {
- processRow();
- } catch (XPathException e) {
- e.printStackTrace();
- }
+ processRow();
}
return pullBatch();
}
- private void processRow() throws XPathException,
- ExpressionEvaluationException, BlockedException,
- TeiidComponentException, TeiidProcessingException,
- TransformationException {
- Item item = result.next();
+ private void processRow() throws ExpressionEvaluationException, BlockedException,
+ TeiidComponentException, TeiidProcessingException {
+ Item item;
+ try {
+ item = result.next();
+ } catch (XPathException e) {
+ throw new TeiidProcessingException(e,
QueryExecPlugin.Util.getString("XMLTableNode.error", e.getMessage()));
//$NON-NLS-1$
+ }
rowCount++;
if (item == null) {
terminateBatches();
@@ -172,48 +131,40 @@
if (proColumn.isOrdinal()) {
tuple.add(rowCount);
} else {
- XPathExpression path = proColumn.getPathExpression();
- XPathDynamicContext dynamicContext = path.createDynamicContext(item);
- SequenceIterator pathIter = path.iterate(dynamicContext);
- Item colItem = pathIter.next();
- if (colItem == null) {
- if (proColumn.getDefaultExpression() != null) {
- tuple.add(getEvaluator(Collections.emptyMap()).evaluate(proColumn.getDefaultExpression(),
null));
- } else {
- tuple.add(null);
- }
- continue;
- }
- if (proColumn.getSymbol().getType() == DataTypeManager.DefaultDataClasses.XML) {
- Item next = pathIter.next();
- XMLType.Type type = Type.FRAGMENT;
- if (next != null) {
- if (next instanceof NodeInfo || colItem instanceof NodeInfo) {
- type = Type.SIBLINGS;
+ try {
+ XPathExpression path = proColumn.getPathExpression();
+ XPathDynamicContext dynamicContext = path.createDynamicContext(item);
+ SequenceIterator pathIter = path.iterate(dynamicContext);
+ Item colItem = pathIter.next();
+ if (colItem == null) {
+ if (proColumn.getDefaultExpression() != null) {
+ tuple.add(getEvaluator(Collections.emptyMap()).evaluate(proColumn.getDefaultExpression(),
null));
} else {
- type = Type.TEXT;
+ tuple.add(null);
}
+ continue;
}
- pathIter = pathIter.getAnother();
- SQLXMLImpl xml = XMLUtil.saveToBufferManager(getBufferManager(), new
QueryResultTranslator(pathIter, this.table.getXQueryExpression().getConfig()),
Streamable.STREAMING_BATCH_SIZE_IN_BYTES);
- XMLType value = new XMLType(xml);
- value.setType(type);
+ if (proColumn.getSymbol().getType() == DataTypeManager.DefaultDataClasses.XML) {
+ XMLType value =
getEvaluator(Collections.emptyMap()).createXMLType(pathIter.getAnother(),
table.getXQueryExpression(), false, false);
+ tuple.add(value);
+ continue;
+ }
+ if (pathIter.next() != null) {
+ throw new
TeiidProcessingException(QueryExecPlugin.Util.getString("XMLTableName.multi_value",
proColumn.getName())); //$NON-NLS-1$
+ }
+ Object value = Value.convertToJava(colItem);
+ if (value instanceof Item) {
+ value = ((Item)value).getStringValue();
+ }
+ value = DataTypeManager.convertToRuntimeType(value);
+ value = DataTypeManager.transformValue(value, proColumn.getSymbol().getType());
tuple.add(value);
- continue;
+ } catch (XPathException e) {
+ throw new TeiidProcessingException(e,
QueryExecPlugin.Util.getString("XMLTableNode.path_error", proColumn.getName()));
//$NON-NLS-1$
}
- if (pathIter.next() != null) {
- throw new TeiidProcessingException("Unexpected multi-valued result was returned
for XML Column " + proColumn.getName() + ". All path expressions should return
at most a single result.");
- }
- Object value = Value.convertToJava(colItem);
- if (value instanceof Item) {
- value = ((Item)value).getStringValue();
- }
- value = DataTypeManager.convertToRuntimeType(value);
- value = DataTypeManager.transformValue(value, proColumn.getSymbol().getType());
- tuple.add(value);
}
}
addBatchRow(tuple);
}
-
+
}
\ No newline at end of file
Modified: trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLUtil.java 2010-06-06
15:12:19 UTC (rev 2185)
+++ trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLUtil.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -33,6 +33,7 @@
import org.teiid.common.buffer.BufferManager;
import org.teiid.common.buffer.FileStore;
import org.teiid.common.buffer.FileStore.FileStoreOutputStream;
+import org.teiid.common.buffer.impl.BufferManagerImpl;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.core.types.InputStreamFactory;
@@ -47,6 +48,17 @@
*/
public class XMLUtil {
+ //horrible hack
+ private static BufferManager bufferManager;
+
+ public static void setBufferManager(BufferManager bufferManager) {
+ XMLUtil.bufferManager = bufferManager;
+ }
+
+ public static SQLXMLImpl saveToBufferManager(XMLTranslator translator) throws
TeiidComponentException, TeiidProcessingException {
+ return saveToBufferManager(bufferManager, translator,
Streamable.STREAMING_BATCH_SIZE_IN_BYTES);
+ }
+
/**
* This method saves the given XML object to the buffer manager's disk process
* Documents less than the maxMemorySize will be held directly in memory
Deleted: trunk/engine/src/main/java/org/teiid/query/resolver/command/XQueryResolver.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/resolver/command/XQueryResolver.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/resolver/command/XQueryResolver.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -1,53 +0,0 @@
-/*
- * 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.resolver.command;
-
-import org.teiid.api.exception.query.QueryMetadataException;
-import org.teiid.api.exception.query.QueryResolverException;
-import org.teiid.core.TeiidComponentException;
-import org.teiid.query.analysis.AnalysisRecord;
-import org.teiid.query.metadata.TempMetadataAdapter;
-import org.teiid.query.resolver.CommandResolver;
-import org.teiid.query.sql.lang.Command;
-
-
-
-/**
- * Resolves XQueries, which in metamatrix currently involves
- * taking the arguments to the doc() functions, adding them as
- * the sub commands of the XQuery, which are then themselves
- * resolved by the Resolver framework.
- *
- * XQuery resolution does not currently involve making sure the
- * XQuery's XPath statements referring to the virtual documents are
- * valid for those documents.
- */
-public class XQueryResolver implements CommandResolver {
-
- /**
- * @see
org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command,
org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord,
boolean)
- */
- public void resolveCommand(Command command, TempMetadataAdapter metadata,
AnalysisRecord analysis, boolean resolveNullLiterals)
- throws QueryMetadataException, QueryResolverException, TeiidComponentException {
- }
-}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverVisitor.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverVisitor.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverVisitor.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -64,6 +64,7 @@
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.Reference;
import org.teiid.query.sql.symbol.SearchedCaseExpression;
+import org.teiid.query.sql.symbol.XMLQuery;
import org.teiid.query.sql.symbol.XMLSerialize;
import org.teiid.query.util.ErrorMessageKeys;
@@ -338,6 +339,15 @@
handleException(new QueryResolverException(e,
QueryPlugin.Util.getString("XMLSerialize.resolvingError", obj))); //$NON-NLS-1$
}
}
+
+ @Override
+ public void visit(XMLQuery obj) {
+ try {
+ obj.compileXqueryExpression();
+ } catch (QueryResolverException e) {
+ handleException(e);
+ }
+ }
public TeiidComponentException getComponentException() {
return this.componentException;
Modified: trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2010-06-06
15:12:19 UTC (rev 2185)
+++ trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -53,7 +53,7 @@
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.Assertion;
import org.teiid.core.util.TimestampWithTimezone;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.eval.Evaluator;
import org.teiid.query.execution.QueryExecPlugin;
import org.teiid.query.function.FunctionDescriptor;
@@ -140,6 +140,7 @@
import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.symbol.XMLElement;
import org.teiid.query.sql.symbol.XMLForest;
+import org.teiid.query.sql.symbol.XMLQuery;
import org.teiid.query.sql.symbol.XMLSerialize;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.sql.util.ValueIterator;
@@ -1909,6 +1910,8 @@
rewriteExpressions(expression);
} else if (expression instanceof XMLSerialize) {
rewriteExpressions(expression);
+ } else if (expression instanceof XMLQuery) {
+ rewriteExpressions(expression);
}
if(dataMgr == null) {
Modified: trunk/engine/src/main/java/org/teiid/query/sql/LanguageVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/LanguageVisitor.java 2010-06-06
15:12:19 UTC (rev 2185)
+++ trunk/engine/src/main/java/org/teiid/query/sql/LanguageVisitor.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -133,4 +133,5 @@
public void visit(XMLTable obj) {}
public void visit(DerivedColumn obj) {}
public void visit(XMLSerialize obj) {}
+ public void visit(XMLQuery obj) {}
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/ProcedureReservedWords.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/ProcedureReservedWords.java 2010-06-06
15:12:19 UTC (rev 2185)
+++ trunk/engine/src/main/java/org/teiid/query/sql/ProcedureReservedWords.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -26,7 +26,8 @@
import java.util.HashSet;
import java.util.Set;
-import org.teiid.language.SQLReservedWords;
+import org.teiid.language.SQLConstants;
+import org.teiid.language.SQLConstants.Reserved;
/**
* Special variable names in stored procedure language.
@@ -34,7 +35,7 @@
public class ProcedureReservedWords {
@Deprecated
- public static final String INPUT = SQLReservedWords.INPUT;
+ public static final String INPUT = Reserved.INPUT;
public static final String INPUTS = "INPUTS"; //$NON-NLS-1$
@@ -53,7 +54,7 @@
// Initialize RESERVED_WORDS set - This is a poor man's enum. To much legacy
code expects the constants to be Strings.
static {
- Field[] fields = SQLReservedWords.class.getDeclaredFields();
+ Field[] fields = SQLConstants.class.getDeclaredFields();
for (Field field : fields) {
if (field.getType() == String.class) {
try {
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Option.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Option.java 2010-06-06 15:12:19
UTC (rev 2185)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Option.java 2010-06-07 16:27:14
UTC (rev 2186)
@@ -27,7 +27,7 @@
import org.teiid.core.util.EquivalenceUtil;
import org.teiid.core.util.HashCodeUtil;
-import org.teiid.language.SQLReservedWords;
+import org.teiid.language.SQLConstants.Reserved;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.visitor.SQLStringVisitor;
@@ -40,8 +40,8 @@
*/
public class Option implements LanguageObject {
- public final static String MAKEDEP = SQLReservedWords.MAKEDEP;
- public final static String MAKENOTDEP = SQLReservedWords.MAKENOTDEP;
+ public final static String MAKEDEP = Reserved.MAKEDEP;
+ public final static String MAKENOTDEP = Reserved.MAKENOTDEP;
public final static String OPTIONAL = "optional"; //$NON-NLS-1$
private List<String> makeDependentGroups;
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/XMLTable.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/XMLTable.java 2010-06-06 15:12:19
UTC (rev 2185)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/XMLTable.java 2010-06-07 16:27:14
UTC (rev 2186)
@@ -178,6 +178,16 @@
if (defaultColumn != null) {
clone.defaultColumn = this.defaultColumn;
}
+ if (this.namespaces != null) {
+ clone.namespaces = this.namespaces.clone();
+ }
+ if (this.passing != null) {
+ for (DerivedColumn col : this.passing) {
+ clone.passing.add(col.clone());
+ }
+ }
+ clone.xquery = this.xquery;
+ clone.xqueryExpression = this.xqueryExpression;
return clone;
}
@@ -195,7 +205,10 @@
return false;
}
XMLTable other = (XMLTable)obj;
- return this.columns.equals(other.columns);
+ return this.columns.equals(other.columns)
+ && EquivalenceUtil.areEqual(this.namespaces, other.namespaces)
+ && this.xquery.equals(other.xquery)
+ && this.passing.equals(other.passing);
}
public void rewriteDefaultColumn() {
Modified:
trunk/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -98,6 +98,7 @@
import org.teiid.query.sql.symbol.XMLElement;
import org.teiid.query.sql.symbol.XMLForest;
import org.teiid.query.sql.symbol.XMLNamespaces;
+import org.teiid.query.sql.symbol.XMLQuery;
import org.teiid.query.sql.symbol.XMLSerialize;
@@ -562,6 +563,14 @@
}
@Override
+ public void visit(XMLQuery obj) {
+ preVisitVisitor(obj);
+ visitNode(obj.getNamespaces());
+ visitNodes(obj.getPassing());
+ postVisitVisitor(obj);
+ }
+
+ @Override
public void visit(DerivedColumn obj) {
preVisitVisitor(obj);
visitNode(obj.getExpression());
Modified: trunk/engine/src/main/java/org/teiid/query/sql/proc/RaiseErrorStatement.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/sql/proc/RaiseErrorStatement.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/sql/proc/RaiseErrorStatement.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -22,7 +22,7 @@
package org.teiid.query.sql.proc;
-import org.teiid.language.SQLReservedWords;
+import org.teiid.language.SQLConstants.Reserved;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
@@ -58,10 +58,10 @@
* matter that it has an invalid ID or GroupSymbol. Setting the type to
* String allows for the expression to be converted to String as necessary.
*/
- ElementSymbol result = new ElementSymbol(SQLReservedWords.ERROR);
- result.setMetadataID(SQLReservedWords.ERROR);
+ ElementSymbol result = new ElementSymbol(Reserved.ERROR);
+ result.setMetadataID(Reserved.ERROR);
result.setType(String.class);
- result.setGroupSymbol(new GroupSymbol(SQLReservedWords.ERROR));
+ result.setGroupSymbol(new GroupSymbol(Reserved.ERROR));
return result;
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/AggregateSymbol.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/AggregateSymbol.java 2010-06-06
15:12:19 UTC (rev 2185)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/AggregateSymbol.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -30,8 +30,8 @@
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.EquivalenceUtil;
import org.teiid.core.util.HashCodeUtil;
-import org.teiid.language.SQLReservedWords;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
+import org.teiid.language.SQLConstants.Reserved;
import org.teiid.query.QueryPlugin;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.lang.OrderBy;
@@ -75,7 +75,7 @@
AGGREGATE_FUNCTIONS.add(NonReserved.AVG);
AGGREGATE_FUNCTIONS.add(NonReserved.MIN);
AGGREGATE_FUNCTIONS.add(NonReserved.MAX);
- AGGREGATE_FUNCTIONS.add(SQLReservedWords.XMLAGG);
+ AGGREGATE_FUNCTIONS.add(Reserved.XMLAGG);
SUM_TYPES = new HashMap<Class<?>, Class<?>>();
SUM_TYPES.put(DataTypeManager.DefaultDataClasses.BYTE,
DataTypeManager.DefaultDataClasses.LONG);
@@ -114,7 +114,7 @@
/**
* Construct an aggregate symbol with all given data.
* @param name Name of the function
- * @param aggregateFunction Aggregate function type ({@link
org.teiid.language.SQLReservedWords.NonReserved#COUNT}, etc)
+ * @param aggregateFunction Aggregate function type ({@link
org.teiid.language.SQLConstants.NonReserved#COUNT}, etc)
* @param isDistinct True if DISTINCT flag is set
* @param expression Contained expression
*/
@@ -129,11 +129,11 @@
* Set the aggregate function. If the aggregate function is an invalid value, an
* IllegalArgumentException is thrown.
* @param aggregateFunction Aggregate function type
- * @see org.teiid.language.SQLReservedWords.NonReserved#COUNT
- * @see org.teiid.language.SQLReservedWords.NonReserved#SUM
- * @see org.teiid.language.SQLReservedWords.NonReserved#AVG
- * @see org.teiid.language.SQLReservedWords.NonReserved#MIN
- * @see org.teiid.language.SQLReservedWords.NonReserved#MAX
+ * @see org.teiid.language.SQLConstants.NonReserved#COUNT
+ * @see org.teiid.language.SQLConstants.NonReserved#SUM
+ * @see org.teiid.language.SQLConstants.NonReserved#AVG
+ * @see org.teiid.language.SQLConstants.NonReserved#MIN
+ * @see org.teiid.language.SQLConstants.NonReserved#MAX
*/
private void setAggregateFunction(String aggregateFunction) {
// Validate aggregate
@@ -147,11 +147,11 @@
* Get the aggregate function type - this will map to one of the reserved words
* for the aggregate functions.
* @return Aggregate function type
- * @see org.teiid.language.SQLReservedWords.NonReserved#COUNT
- * @see org.teiid.language.SQLReservedWords.NonReserved#SUM
- * @see org.teiid.language.SQLReservedWords.NonReserved#AVG
- * @see org.teiid.language.SQLReservedWords.NonReserved#MIN
- * @see org.teiid.language.SQLReservedWords.NonReserved#MAX
+ * @see org.teiid.language.SQLConstants.NonReserved#COUNT
+ * @see org.teiid.language.SQLConstants.NonReserved#SUM
+ * @see org.teiid.language.SQLConstants.NonReserved#AVG
+ * @see org.teiid.language.SQLConstants.NonReserved#MIN
+ * @see org.teiid.language.SQLConstants.NonReserved#MAX
*/
public String getAggregateFunction() {
return this.aggregate;
Added: trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLQuery.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLQuery.java
(rev 0)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLQuery.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -0,0 +1,140 @@
+package org.teiid.query.sql.symbol;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.saxon.expr.PathMap.PathMapRoot;
+
+import org.teiid.api.exception.query.QueryResolverException;
+import org.teiid.core.types.DataTypeManager;
+import org.teiid.core.util.EquivalenceUtil;
+import org.teiid.query.analysis.AnalysisRecord;
+import org.teiid.query.sql.LanguageVisitor;
+import org.teiid.query.sql.visitor.SQLStringVisitor;
+import org.teiid.query.xquery.saxon.SaxonXQueryExpression;
+
+public class XMLQuery implements Expression {
+
+ private XMLNamespaces namespaces;
+ private String xquery;
+ private List<DerivedColumn> passing = new ArrayList<DerivedColumn>();
+ private Boolean emptyOnEmpty;
+ private Boolean returningContent;
+
+ private SaxonXQueryExpression xqueryExpression;
+ private PathMapRoot contextRoot;
+
+ @Override
+ public Class<?> getType() {
+ return DataTypeManager.DefaultDataClasses.XML;
+ }
+
+ public Boolean getEmptyOnEmpty() {
+ return emptyOnEmpty;
+ }
+
+ public void setEmptyOnEmpty(Boolean emptyOnEmpty) {
+ this.emptyOnEmpty = emptyOnEmpty;
+ }
+
+ public Boolean getReturningContent() {
+ return returningContent;
+ }
+
+ public void setReturningContent(Boolean returningContent) {
+ this.returningContent = returningContent;
+ }
+
+ @Override
+ public boolean isResolved() {
+ return xqueryExpression != null;
+ }
+
+ public List<DerivedColumn> getPassing() {
+ return passing;
+ }
+
+ //TODO: display the analysis record info
+ public void compileXqueryExpression() throws QueryResolverException {
+ this.xqueryExpression = new SaxonXQueryExpression(xquery, namespaces, passing,
null);
+ this.contextRoot = this.xqueryExpression.useDocumentProjection(null, new
AnalysisRecord(false, false));
+ }
+
+ public SaxonXQueryExpression getXQueryExpression() {
+ return xqueryExpression;
+ }
+
+ public PathMapRoot getContextRoot() {
+ return contextRoot;
+ }
+
+ public void setPassing(List<DerivedColumn> passing) {
+ this.passing = passing;
+ }
+
+ public String getXquery() {
+ return xquery;
+ }
+
+ public void setXquery(String xquery) {
+ this.xquery = xquery;
+ }
+
+ public XMLNamespaces getNamespaces() {
+ return namespaces;
+ }
+
+ public void setNamespaces(XMLNamespaces namespaces) {
+ this.namespaces = namespaces;
+ }
+
+ @Override
+ public void acceptVisitor(LanguageVisitor visitor) {
+ visitor.visit(this);
+ }
+
+ @Override
+ public XMLQuery clone() {
+ XMLQuery clone = new XMLQuery();
+ if (this.namespaces != null) {
+ clone.namespaces = this.namespaces.clone();
+ }
+ if (this.passing != null) {
+ for (DerivedColumn col : this.passing) {
+ clone.passing.add(col.clone());
+ }
+ }
+ clone.xquery = this.xquery;
+ clone.xqueryExpression = this.xqueryExpression;
+ clone.emptyOnEmpty = this.emptyOnEmpty;
+ clone.returningContent = this.returningContent;
+ return clone;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof XMLQuery)) {
+ return false;
+ }
+ XMLQuery other = (XMLQuery)obj;
+ return EquivalenceUtil.areEqual(this.namespaces, other.namespaces)
+ && this.passing.equals(other.passing)
+ && this.xquery.equals(other.xquery)
+ && EquivalenceUtil.areEqual(this.emptyOnEmpty, other.emptyOnEmpty)
+ && EquivalenceUtil.areEqual(this.returningContent, other.returningContent);
+ }
+
+ @Override
+ public int hashCode() {
+ return this.xquery.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return SQLStringVisitor.getSQLString(this);
+ }
+
+}
Property changes on: trunk/engine/src/main/java/org/teiid/query/sql/symbol/XMLQuery.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
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-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/sql/visitor/SQLStringVisitor.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -22,6 +22,8 @@
package org.teiid.query.sql.visitor;
+import static org.teiid.language.SQLConstants.Reserved.*;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -31,9 +33,9 @@
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.StringUtil;
-import org.teiid.language.SQLReservedWords;
-import org.teiid.language.SQLReservedWords.NonReserved;
-import org.teiid.language.SQLReservedWords.Tokens;
+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;
@@ -118,6 +120,7 @@
import org.teiid.query.sql.symbol.XMLElement;
import org.teiid.query.sql.symbol.XMLForest;
import org.teiid.query.sql.symbol.XMLNamespaces;
+import org.teiid.query.sql.symbol.XMLQuery;
import org.teiid.query.sql.symbol.XMLSerialize;
import org.teiid.query.sql.symbol.XMLNamespaces.NamespaceItem;
import org.teiid.translator.SourceSystemFunctions;
@@ -193,43 +196,43 @@
parts.add(SPACE);
if (obj.isNegated()) {
- parts.add(SQLReservedWords.NOT);
+ parts.add(NOT);
parts.add(SPACE);
}
- parts.add(SQLReservedWords.BETWEEN);
+ parts.add(BETWEEN);
parts.add(SPACE);
parts.add(registerNode(obj.getLowerExpression()));
parts.add(SPACE);
- parts.add(SQLReservedWords.AND);
+ parts.add(AND);
parts.add(SPACE);
parts.add(registerNode(obj.getUpperExpression()));
}
public void visit(CaseExpression obj) {
- parts.add(SQLReservedWords.CASE);
+ parts.add(CASE);
parts.add(SPACE);
parts.add(registerNode(obj.getExpression()) );
parts.add(SPACE);
for (int i = 0; i < obj.getWhenCount(); i++) {
- parts.add(SQLReservedWords.WHEN);
+ parts.add(WHEN);
parts.add(SPACE);
parts.add(registerNode(obj.getWhenExpression(i)) );
parts.add(SPACE);
- parts.add(SQLReservedWords.THEN);
+ parts.add(THEN);
parts.add(SPACE);
parts.add(registerNode(obj.getThenExpression(i)));
parts.add(SPACE);
}
if (obj.getElseExpression() != null) {
- parts.add(SQLReservedWords.ELSE);
+ parts.add(ELSE);
parts.add(SPACE);
parts.add(registerNode(obj.getElseExpression()));
parts.add(SPACE);
}
- parts.add(SQLReservedWords.END);
+ parts.add(END);
}
public void visit(CompareCriteria obj) {
@@ -249,9 +252,9 @@
int operator = obj.getOperator();
String operatorStr = ""; //$NON-NLS-1$
if(operator == CompoundCriteria.AND) {
- operatorStr = SQLReservedWords.AND;
+ operatorStr = AND;
} else if(operator == CompoundCriteria.OR) {
- operatorStr = SQLReservedWords.OR;
+ operatorStr = OR;
}
// Get criteria
@@ -299,17 +302,17 @@
public void visit(Delete obj) {
//add delete clause
- parts.add(SQLReservedWords.DELETE);
+ parts.add(DELETE);
parts.add(SPACE);
//add from clause
- parts.add(SQLReservedWords.FROM);
+ parts.add(FROM);
parts.add(SPACE);
parts.add(registerNode(obj.getGroup()));
//add where clause
if(obj.getCriteria() != null) {
parts.add(SPACE);
- parts.add(SQLReservedWords.WHERE);
+ parts.add(WHERE);
parts.add(SPACE);
parts.add(registerNode(obj.getCriteria()));
}
@@ -327,10 +330,10 @@
// operator and beginning of list
parts.add(SPACE);
if (obj.isNegated()) {
- parts.add(SQLReservedWords.NOT);
+ parts.add(NOT);
parts.add(SPACE);
}
- parts.add(SQLReservedWords.IN);
+ parts.add(IN);
parts.add(" (<dependent values>)"); //$NON-NLS-1$
}
@@ -339,13 +342,13 @@
List clauses = obj.getClauses();
if(clauses.size() == 1) {
replaceStringParts(new Object[] {
- SQLReservedWords.FROM, SPACE,
+ FROM, SPACE,
registerNode( (FromClause) clauses.get(0) ) });
} else if(clauses.size() > 1) {
parts = new Object[2 + clauses.size() + (clauses.size()-1)];
// Add first clause
- parts[0] = SQLReservedWords.FROM;
+ parts[0] = FROM;
parts[1] = SPACE;
Iterator clauseIter = clauses.iterator();
parts[2] = registerNode((FromClause) clauseIter.next());
@@ -359,7 +362,7 @@
replaceStringParts(parts);
} else {
// Shouldn't happen, but being tolerant
- replaceStringParts(new Object[] { SQLReservedWords.FROM });
+ replaceStringParts(new Object[] { FROM });
}
}
@@ -368,15 +371,15 @@
List symbols = obj.getSymbols();
if(symbols.size() == 1) {
replaceStringParts(new Object[] {
- SQLReservedWords.GROUP, SPACE, SQLReservedWords.BY, SPACE,
+ GROUP, SPACE, BY, SPACE,
registerNode( (Expression) symbols.get(0) ) });
} else if(symbols.size() > 1) {
parts = new Object[4 + symbols.size() + (symbols.size()-1)];
// Add first clause
- parts[0] = SQLReservedWords.GROUP;
+ parts[0] = GROUP;
parts[1] = SPACE;
- parts[2] = SQLReservedWords.BY;
+ parts[2] = BY;
parts[3] = SPACE;
Iterator symbolIter = symbols.iterator();
parts[4] = registerNode((Expression) symbolIter.next());
@@ -390,7 +393,7 @@
replaceStringParts(parts);
} else {
// Shouldn't happen, but being tolerant
- replaceStringParts(new Object[] { SQLReservedWords.GROUP, SPACE,
SQLReservedWords.BY });
+ replaceStringParts(new Object[] { GROUP, SPACE, BY });
}
}
@@ -400,7 +403,7 @@
if ( obj.getQueryExpression() != null ) {
parts.add(registerNode(obj.getQueryExpression()));
} else {
- parts.add(SQLReservedWords.VALUES);
+ parts.add(VALUES);
parts.add(" ("); //$NON-NLS-1$
Iterator valueIter = obj.getValues().iterator();
while(valueIter.hasNext()) {
@@ -421,13 +424,13 @@
}
public void visit(Create obj) {
- parts.add(SQLReservedWords.CREATE);
+ parts.add(CREATE);
parts.add(SPACE);
- parts.add(SQLReservedWords.LOCAL);
+ parts.add(LOCAL);
parts.add(SPACE);
- parts.add(SQLReservedWords.TEMPORARY);
+ parts.add(TEMPORARY);
parts.add(SPACE);
- parts.add(SQLReservedWords.TABLE);
+ parts.add(TABLE);
parts.add(SPACE);
parts.add(registerNode(obj.getTable()));
parts.add(SPACE);
@@ -450,17 +453,17 @@
}
public void visit(Drop obj) {
- parts.add(SQLReservedWords.DROP);
+ parts.add(DROP);
parts.add(SPACE);
- parts.add(SQLReservedWords.TABLE);
+ parts.add(TABLE);
parts.add(SPACE);
parts.add(registerNode(obj.getTable()));
}
private void formatBasicInsert(Insert obj) {
- parts.add(SQLReservedWords.INSERT);
+ parts.add(INSERT);
parts.add(SPACE);
- parts.add(SQLReservedWords.INTO);
+ parts.add(INTO);
parts.add(SPACE);
parts.add(registerNode(obj.getGroup()));
parts.add(SPACE);
@@ -489,13 +492,13 @@
Object exprPart = registerNode(expr);
parts.add(exprPart);
parts.add(SPACE);
- parts.add(SQLReservedWords.IS);
+ parts.add(IS);
parts.add(SPACE);
if (obj.isNegated()) {
- parts.add(SQLReservedWords.NOT);
+ parts.add(NOT);
parts.add(SPACE);
}
- parts.add(SQLReservedWords.NULL);
+ parts.add(NULL);
}
public void visit(JoinPredicate obj) {
@@ -534,7 +537,7 @@
List joinCriteria = obj.getJoinCriteria();
if(joinCriteria != null && joinCriteria.size() > 0) {
parts.add(SPACE);
- parts.add(SQLReservedWords.ON);
+ parts.add(ON);
parts.add(SPACE);
Iterator critIter = joinCriteria.iterator();
while(critIter.hasNext()) {
@@ -549,7 +552,7 @@
if(critIter.hasNext()) {
parts.add(SPACE);
- parts.add(SQLReservedWords.AND);
+ parts.add(AND);
parts.add(SPACE);
}
}
@@ -586,21 +589,21 @@
public void visit(JoinType obj) {
Object[] parts = null;
if(obj.equals(JoinType.JOIN_INNER)) {
- parts = new Object[] { SQLReservedWords.INNER, SPACE, SQLReservedWords.JOIN
};
+ parts = new Object[] { INNER, SPACE, JOIN };
} else if(obj.equals(JoinType.JOIN_CROSS)) {
- parts = new Object[] { SQLReservedWords.CROSS, SPACE, SQLReservedWords.JOIN
};
+ parts = new Object[] { CROSS, SPACE, JOIN };
} else if(obj.equals(JoinType.JOIN_LEFT_OUTER)) {
- parts = new Object[] { SQLReservedWords.LEFT, SPACE, SQLReservedWords.OUTER,
SPACE, SQLReservedWords.JOIN };
+ parts = new Object[] { LEFT, SPACE, OUTER, SPACE, JOIN };
} else if(obj.equals(JoinType.JOIN_RIGHT_OUTER)) {
- parts = new Object[] { SQLReservedWords.RIGHT, SPACE, SQLReservedWords.OUTER,
SPACE, SQLReservedWords.JOIN };
+ parts = new Object[] { RIGHT, SPACE, OUTER, SPACE, JOIN };
} else if(obj.equals(JoinType.JOIN_FULL_OUTER)) {
- parts = new Object[] { SQLReservedWords.FULL, SPACE, SQLReservedWords.OUTER,
SPACE, SQLReservedWords.JOIN };
+ parts = new Object[] { FULL, SPACE, OUTER, SPACE, JOIN };
} else if(obj.equals(JoinType.JOIN_UNION)) {
- parts = new Object[] { SQLReservedWords.UNION, SPACE, SQLReservedWords.JOIN
};
+ parts = new Object[] { UNION, SPACE, JOIN };
} else if (obj.equals(JoinType.JOIN_SEMI)) {
- parts = new Object[] { "SEMI", SPACE, SQLReservedWords.JOIN };
//$NON-NLS-1$
+ parts = new Object[] { "SEMI", SPACE, JOIN }; //$NON-NLS-1$
} else if (obj.equals(JoinType.JOIN_ANTI_SEMI)) {
- parts = new Object[] { "ANTI SEMI", SPACE, SQLReservedWords.JOIN };
//$NON-NLS-1$
+ parts = new Object[] { "ANTI SEMI", SPACE, JOIN }; //$NON-NLS-1$
}
replaceStringParts(parts);
@@ -611,17 +614,17 @@
parts.add(SPACE);
if (obj.isNegated()) {
- parts.add(SQLReservedWords.NOT);
+ parts.add(NOT);
parts.add(SPACE);
}
- parts.add(SQLReservedWords.LIKE);
+ parts.add(LIKE);
parts.add(SPACE);
parts.add(registerNode(obj.getRightExpression()));
if(obj.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR) {
parts.add(SPACE);
- parts.add(SQLReservedWords.ESCAPE);
+ parts.add(ESCAPE);
parts.add(" '"); //$NON-NLS-1$
parts.add("" + obj.getEscapeChar()); //$NON-NLS-1$
parts.add("'"); //$NON-NLS-1$
@@ -629,19 +632,19 @@
}
public void visit(NotCriteria obj) {
- parts.add(SQLReservedWords.NOT);
+ parts.add(NOT);
parts.add(" ("); //$NON-NLS-1$
parts.add(registerNode(obj.getCriteria()));
parts.add(")"); //$NON-NLS-1$
}
public void visit(Option obj) {
- parts.add(SQLReservedWords.OPTION);
+ parts.add(OPTION);
Collection groups = obj.getDependentGroups();
if(groups != null && groups.size() > 0) {
parts.add(" "); //$NON-NLS-1$
- parts.add(SQLReservedWords.MAKEDEP);
+ parts.add(MAKEDEP);
parts.add(" "); //$NON-NLS-1$
Iterator iter = groups.iterator();
@@ -658,7 +661,7 @@
groups = obj.getNotDependentGroups();
if(groups != null && groups.size() > 0) {
parts.add(" "); //$NON-NLS-1$
- parts.add(SQLReservedWords.MAKENOTDEP);
+ parts.add(MAKENOTDEP);
parts.add(" "); //$NON-NLS-1$
Iterator iter = groups.iterator();
@@ -675,7 +678,7 @@
groups = obj.getNoCacheGroups();
if(groups != null && groups.size() > 0) {
parts.add(" "); //$NON-NLS-1$
- parts.add(SQLReservedWords.NOCACHE);
+ parts.add(NOCACHE);
parts.add(" "); //$NON-NLS-1$
Iterator iter = groups.iterator();
@@ -689,15 +692,15 @@
}
}else if(obj.isNoCache()){
parts.add(" "); //$NON-NLS-1$
- parts.add(SQLReservedWords.NOCACHE);
+ parts.add(NOCACHE);
}
}
public void visit(OrderBy obj) {
- parts.add(SQLReservedWords.ORDER);
+ parts.add(ORDER);
parts.add(SPACE);
- parts.add(SQLReservedWords.BY);
+ parts.add(BY);
parts.add(SPACE);
for (Iterator<OrderByItem> iterator = obj.getOrderByItems().iterator();
iterator.hasNext();) {
OrderByItem item = iterator.next();
@@ -719,20 +722,20 @@
}
if(!obj.isAscending()) {
parts.add(SPACE);
- parts.add(SQLReservedWords.DESC);
+ parts.add(DESC);
} // Don't print default "ASC"
}
public void visit(DynamicCommand obj) {
- parts.add(SQLReservedWords.EXECUTE);
+ parts.add(EXECUTE);
parts.add(SPACE);
- parts.add(SQLReservedWords.STRING);
+ parts.add(STRING);
parts.add(SPACE);
parts.add(registerNode(obj.getSql()));
if(obj.isAsClauseSet()){
parts.add(SPACE);
- parts.add(SQLReservedWords.AS);
+ parts.add(AS);
parts.add(SPACE);
for (int i = 0; i < obj.getAsColumns().size(); i++) {
ElementSymbol symbol = (ElementSymbol)obj.getAsColumns().get(i);
@@ -748,21 +751,21 @@
if(obj.getIntoGroup() != null){
parts.add(SPACE);
- parts.add(SQLReservedWords.INTO);
+ parts.add(INTO);
parts.add(SPACE);
parts.add(registerNode(obj.getIntoGroup()));
}
if(obj.getUsing() != null && !obj.getUsing().isEmpty()) {
parts.add(SPACE);
- parts.add(SQLReservedWords.USING);
+ parts.add(USING);
parts.add(SPACE);
parts.add(registerNode(obj.getUsing()));
}
if (obj.getUpdatingModelCount() > 0) {
parts.add(SPACE);
- parts.add(SQLReservedWords.UPDATE);
+ parts.add(UPDATE);
parts.add(SPACE);
if (obj.getUpdatingModelCount() > 1) {
parts.add("*"); //$NON-NLS-1$
@@ -796,7 +799,7 @@
if(obj.getInto() != null){
parts.add(SPACE);
- parts.add(SQLReservedWords.INTO);
+ parts.add(INTO);
parts.add(SPACE);
parts.add(registerNode(obj.getInto()));
}
@@ -809,7 +812,7 @@
// Where clause
if(obj.getCriteria() != null) {
parts.add(SPACE);
- parts.add(SQLReservedWords.WHERE);
+ parts.add(WHERE);
parts.add(SPACE);
parts.add(registerNode(obj.getCriteria()));
}
@@ -823,7 +826,7 @@
// Having clause
if(obj.getHaving() != null) {
parts.add(SPACE);
- parts.add(SQLReservedWords.HAVING);
+ parts.add(HAVING);
parts.add(SPACE);
parts.add(registerNode(obj.getHaving()));
}
@@ -847,33 +850,33 @@
}
public void visit(SearchedCaseExpression obj) {
- parts.add(SQLReservedWords.CASE);
+ parts.add(CASE);
for (int i = 0; i < obj.getWhenCount(); i++) {
parts.add(SPACE);
- parts.add(SQLReservedWords.WHEN);
+ parts.add(WHEN);
parts.add(SPACE);
parts.add(registerNode(obj.getWhenCriteria(i)));
parts.add(SPACE);
- parts.add(SQLReservedWords.THEN);
+ parts.add(THEN);
parts.add(SPACE);
parts.add(registerNode(obj.getThenExpression(i)));
}
parts.add(SPACE);
if (obj.getElseExpression() != null) {
- parts.add(SQLReservedWords.ELSE);
+ parts.add(ELSE);
parts.add(SPACE);
parts.add(registerNode(obj.getElseExpression()));
parts.add(SPACE);
}
- parts.add(SQLReservedWords.END);
+ parts.add(END);
}
public void visit(Select obj) {
- parts.add(SQLReservedWords.SELECT);
+ parts.add(SELECT);
parts.add(SPACE);
if(obj.isDistinct()) {
- parts.add(SQLReservedWords.DISTINCT);
+ parts.add(DISTINCT);
parts.add(SPACE);
}
@@ -894,10 +897,10 @@
// operator and beginning of list
parts.add(SPACE);
if (obj.isNegated()) {
- parts.add(SQLReservedWords.NOT);
+ parts.add(NOT);
parts.add(SPACE);
}
- parts.add(SQLReservedWords.IN);
+ parts.add(IN);
parts.add(" ("); //$NON-NLS-1$
// value list
@@ -936,7 +939,7 @@
parts.add(SPACE);
if(obj.isAll()) {
- parts.add(SQLReservedWords.ALL);
+ parts.add(ALL);
parts.add(SPACE);
}
@@ -968,7 +971,7 @@
public void visit(StoredProcedure obj) {
addCacheHint(obj);
//exec clause
- parts.add(SQLReservedWords.EXEC);
+ parts.add(EXEC);
parts.add(SPACE);
parts.add(obj.getProcedureName());
parts.add("("); //$NON-NLS-1$
@@ -1022,7 +1025,7 @@
public void visit(SubqueryFromClause obj) {
addOptionComment(obj);
if (obj.isTable()) {
- parts.add(SQLReservedWords.TABLE);
+ parts.add(TABLE);
}
parts.add("(");//$NON-NLS-1$
parts.add(registerNode(obj.getCommand()));
@@ -1039,10 +1042,10 @@
// operator and beginning of list
parts.add(SPACE);
if (obj.isNegated()) {
- parts.add(SQLReservedWords.NOT);
+ parts.add(NOT);
parts.add(SPACE);
}
- parts.add(SQLReservedWords.IN);
+ parts.add(IN);
parts.add(" ("); //$NON-NLS-1$
parts.add(registerNode(obj.getCommand()));
parts.add(")"); //$NON-NLS-1$
@@ -1057,13 +1060,13 @@
public void visit(Update obj) {
// Update clause
- parts.add(SQLReservedWords.UPDATE);
+ parts.add(UPDATE);
parts.add(SPACE);
parts.add(registerNode(obj.getGroup()));
parts.add(SPACE);
// Set clause
- parts.add(SQLReservedWords.SET);
+ parts.add(SET);
parts.add(SPACE);
parts.add(registerNode(obj.getChangeList()));
@@ -1071,7 +1074,7 @@
// Where clause
if(obj.getCriteria() != null) {
parts.add(SPACE);
- parts.add(SQLReservedWords.WHERE);
+ parts.add(WHERE);
parts.add(SPACE);
parts.add(registerNode(obj.getCriteria()));
}
@@ -1094,7 +1097,7 @@
parts.add("("); //$NON-NLS-1$
if(obj.isDistinct()) {
- parts.add(SQLReservedWords.DISTINCT);
+ parts.add(DISTINCT);
parts.add(" "); //$NON-NLS-1$
}
@@ -1114,7 +1117,7 @@
public void visit(AliasSymbol obj) {
parts.add(registerNode(obj.getSymbol()));
parts.add(SPACE);
- parts.add(SQLReservedWords.AS);
+ parts.add(AS);
parts.add(SPACE);
parts.add(escapeSinglePart(obj.getOutputName()));
}
@@ -1134,7 +1137,7 @@
constantParts = new Object[] {"?"}; //$NON-NLS-1$
} else if(obj.isNull()) {
if(type.equals(DataTypeManager.DefaultDataClasses.BOOLEAN)) {
- constantParts = new Object[] {SQLReservedWords.UNKNOWN};
+ constantParts = new Object[] {UNKNOWN};
} else {
constantParts = new Object[] {"null"}; //$NON-NLS-1$
}
@@ -1142,13 +1145,15 @@
if(Number.class.isAssignableFrom(type)) {
constantParts = new Object[] { obj.getValue().toString() };
} else if(type.equals(DataTypeManager.DefaultDataClasses.BOOLEAN)) {
- constantParts = new Object[] { obj.getValue().equals(Boolean.TRUE) ?
SQLReservedWords.TRUE : SQLReservedWords.FALSE};
+ constantParts = new Object[] { obj.getValue().equals(Boolean.TRUE) ? TRUE
: FALSE};
} else if(type.equals(DataTypeManager.DefaultDataClasses.TIMESTAMP)) {
constantParts = new Object[] { "{ts'",
obj.getValue().toString(), "'}" }; //$NON-NLS-1$ //$NON-NLS-2$
} else if(type.equals(DataTypeManager.DefaultDataClasses.TIME)) {
constantParts = new Object[] { "{t'",
obj.getValue().toString(), "'}" }; //$NON-NLS-1$ //$NON-NLS-2$
} else if(type.equals(DataTypeManager.DefaultDataClasses.DATE)) {
constantParts = new Object[] { "{d'",
obj.getValue().toString(), "'}" }; //$NON-NLS-1$ //$NON-NLS-2$
+ } else if(type.equals(DataTypeManager.DefaultDataClasses.XML)){
+ constantParts = new Object[] { "{x '",
escapeStringValue(obj.getValue().toString(), "'"), "'}" };
//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
} else {
String strValue = obj.getValue().toString();
strValue = escapeStringValue(strValue, "'"); //$NON-NLS-1$
@@ -1204,18 +1209,18 @@
// Hide this function, which is implicit
parts.add(registerNode(args[0]));
- } else if(name.equalsIgnoreCase(SQLReservedWords.CONVERT) ||
name.equalsIgnoreCase(SQLReservedWords.CAST)) {
+ } else if(name.equalsIgnoreCase(CONVERT) || name.equalsIgnoreCase(CAST)) {
parts.add(name);
parts.add("("); //$NON-NLS-1$
if(args != null && args.length > 0) {
parts.add(registerNode(args[0]));
- if(name.equalsIgnoreCase(SQLReservedWords.CONVERT)) {
+ if(name.equalsIgnoreCase(CONVERT)) {
parts.add(", "); //$NON-NLS-1$
} else {
parts.add(" "); //$NON-NLS-1$
- parts.add(SQLReservedWords.AS);
+ parts.add(AS);
parts.add(" "); //$NON-NLS-1$
}
@@ -1291,7 +1296,7 @@
if(alias != null) {
parts.add(SPACE);
- parts.add(SQLReservedWords.AS);
+ parts.add(AS);
parts.add(SPACE);
parts.add(escapeSinglePart(alias));
}
@@ -1310,12 +1315,12 @@
public void visit(Block obj) {
List statements = obj.getStatements();
if(statements.size() == 1) {
- replaceStringParts(new Object[] { SQLReservedWords.BEGIN, "\n",
//$NON-NLS-1$
- registerNode((Statement)obj.getStatements().get(0)), "\n",
SQLReservedWords.END}); //$NON-NLS-1$
+ replaceStringParts(new Object[] { BEGIN, "\n", //$NON-NLS-1$
+ registerNode((Statement)obj.getStatements().get(0)), "\n", END});
//$NON-NLS-1$
} else if(statements.size() > 1) {
List parts = new ArrayList();
// Add first clause
- parts.add(SQLReservedWords.BEGIN);
+ parts.add(BEGIN);
parts.add("\n"); //$NON-NLS-1$
Iterator stmtIter = statements.iterator();
while(stmtIter.hasNext()) {
@@ -1323,12 +1328,12 @@
parts.add(registerNode((Statement) stmtIter.next()));
parts.add("\n"); //$NON-NLS-1$
}
- parts.add(SQLReservedWords.END);
+ parts.add(END);
replaceStringParts(parts.toArray());
} else {
// Shouldn't happen, but being tolerant
- replaceStringParts(new Object[] { SQLReservedWords.BEGIN, "\n",
//$NON-NLS-1$
- SQLReservedWords.END });
+ replaceStringParts(new Object[] { BEGIN, "\n", //$NON-NLS-1$
+ END });
}
}
@@ -1338,19 +1343,19 @@
}
public void visit(CreateUpdateProcedureCommand obj) {
- parts.add(SQLReservedWords.CREATE);
+ parts.add(CREATE);
parts.add(SPACE);
if(!obj.isUpdateProcedure()){
- parts.add(SQLReservedWords.VIRTUAL);
+ parts.add(VIRTUAL);
parts.add(SPACE);
}
- parts.add(SQLReservedWords.PROCEDURE);
+ parts.add(PROCEDURE);
parts.add("\n"); //$NON-NLS-1$
parts.add(registerNode(obj.getBlock()));
}
public void visit(DeclareStatement obj) {
- parts.add(SQLReservedWords.DECLARE);
+ parts.add(DECLARE);
parts.add(SPACE);
parts.add(obj.getVariableType());
parts.add(SPACE);
@@ -1371,14 +1376,14 @@
}
public void visit(IfStatement obj) {
- parts.add(SQLReservedWords.IF);
+ parts.add(IF);
parts.add("("); //$NON-NLS-1$
parts.add(registerNode(obj.getCondition()));
parts.add(")\n"); //$NON-NLS-1$
parts.add(registerNode(obj.getIfBlock()));
if(obj.hasElseBlock()) {
parts.add("\n"); //$NON-NLS-1$
- parts.add(SQLReservedWords.ELSE);
+ parts.add(ELSE);
parts.add("\n"); //$NON-NLS-1$
parts.add(registerNode(obj.getElseBlock()));
}
@@ -1389,19 +1394,19 @@
}
public void visit(HasCriteria obj) {
- parts.add( SQLReservedWords.HAS);
+ parts.add( HAS);
parts.add(SPACE);
parts.add(registerNode(obj.getSelector()));
}
public void visit(TranslateCriteria obj) {
- parts.add(SQLReservedWords.TRANSLATE);
+ parts.add(TRANSLATE);
parts.add(SPACE);
parts.add(registerNode(obj.getSelector()));
if(obj.hasTranslations()) {
parts.add(SPACE);
- parts.add(SQLReservedWords.WITH);
+ parts.add(WITH);
parts.add(SPACE);
parts.add("("); //$NON-NLS-1$
Iterator critIter = obj.getTranslations().iterator();
@@ -1441,29 +1446,29 @@
parts.add("<> "); //$NON-NLS-1$
break;
case CriteriaSelector.IN:
- parts.add(SQLReservedWords.IN);
+ parts.add(IN);
parts.add(SPACE);
break;
case CriteriaSelector.IS_NULL:
- parts.add(SQLReservedWords.IS);
+ parts.add(IS);
parts.add(SPACE);
- parts.add(SQLReservedWords.NULL);
+ parts.add(NULL);
parts.add(SPACE);
break;
case CriteriaSelector.LIKE:
- parts.add(SQLReservedWords.LIKE);
+ parts.add(LIKE);
parts.add(SPACE);
break;
case CriteriaSelector.BETWEEN:
- parts.add(SQLReservedWords.BETWEEN);
+ parts.add(BETWEEN);
parts.add(SPACE);
break;
}
- parts.add(SQLReservedWords.CRITERIA);
+ parts.add(CRITERIA);
if(obj.hasElements()) {
parts.add(SPACE);
- parts.add(SQLReservedWords.ON);
+ parts.add(ON);
parts.add(SPACE);
parts.add("("); //$NON-NLS-1$
@@ -1481,7 +1486,7 @@
public void visit(RaiseErrorStatement obj) {
Object parts[] = new Object[4];
- parts[0] = SQLReservedWords.ERROR;
+ parts[0] = ERROR;
parts[1] = SPACE;
parts[2] = registerNode(obj.getExpression());
parts[3] = ";"; //$NON-NLS-1$
@@ -1489,23 +1494,23 @@
}
public void visit(BreakStatement obj) {
- parts.add(SQLReservedWords.BREAK);
+ parts.add(BREAK);
parts.add(";"); //$NON-NLS-1$
}
public void visit(ContinueStatement obj) {
- parts.add(SQLReservedWords.CONTINUE);
+ parts.add(CONTINUE);
parts.add(";"); //$NON-NLS-1$
}
public void visit(LoopStatement obj) {
- parts.add(SQLReservedWords.LOOP);
+ parts.add(LOOP);
parts.add(" "); //$NON-NLS-1$
- parts.add(SQLReservedWords.ON);
+ parts.add(ON);
parts.add(" ("); //$NON-NLS-1$
parts.add(registerNode(obj.getCommand()));
parts.add(") "); //$NON-NLS-1$
- parts.add(SQLReservedWords.AS);
+ parts.add(AS);
parts.add(" "); //$NON-NLS-1$
parts.add(obj.getCursorName());
parts.add("\n"); //$NON-NLS-1$
@@ -1513,7 +1518,7 @@
}
public void visit(WhileStatement obj) {
- parts.add(SQLReservedWords.WHILE);
+ parts.add(WHILE);
parts.add("("); //$NON-NLS-1$
parts.add(registerNode(obj.getCondition()));
parts.add(")\n"); //$NON-NLS-1$
@@ -1522,7 +1527,7 @@
public void visit(ExistsCriteria obj) {
// operator and beginning of list
- parts.add(SQLReservedWords.EXISTS);
+ parts.add(EXISTS);
parts.add(" ("); //$NON-NLS-1$
parts.add(registerNode(obj.getCommand()));
parts.add(")"); //$NON-NLS-1$
@@ -1618,7 +1623,7 @@
}
public void visit(Limit obj) {
- parts.add(SQLReservedWords.LIMIT);
+ parts.add(LIMIT);
if (obj.getOffset() != null) {
parts.add(SPACE);
parts.add(registerNode(obj.getOffset()));
@@ -1660,7 +1665,7 @@
if (obj.getQuote() != null) {
parts.add(SPACE);
if (obj.isEscape()) {
- parts.add(SQLReservedWords.ESCAPE);
+ parts.add(ESCAPE);
} else {
parts.add(NonReserved.QUOTE);
}
@@ -1683,7 +1688,7 @@
}
parts.add(")");//$NON-NLS-1$
parts.add(SPACE);
- parts.add(SQLReservedWords.AS);
+ parts.add(AS);
parts.add(SPACE);
outputDisplayName(obj.getName());
}
@@ -1712,7 +1717,7 @@
outputDisplayName(col.getName());
parts.add(SPACE);
if (col.isOrdinal()) {
- parts.add(SQLReservedWords.FOR);
+ parts.add(FOR);
parts.add(SPACE);
parts.add(NonReserved.ORDINALITY);
} else {
@@ -1725,7 +1730,7 @@
}
if (col.getDefaultExpression() != null) {
parts.add(SPACE);
- parts.add(SQLReservedWords.DEFAULT);
+ parts.add(DEFAULT);
parts.add(SPACE);
parts.add(registerNode(col.getDefaultExpression()));
}
@@ -1737,17 +1742,57 @@
}
parts.add(")");//$NON-NLS-1$
parts.add(SPACE);
- parts.add(SQLReservedWords.AS);
+ parts.add(AS);
parts.add(SPACE);
outputDisplayName(obj.getName());
}
@Override
+ public void visit(XMLQuery obj) {
+ parts.add("XMLQUERY("); //$NON-NLS-1$
+ if (obj.getNamespaces() != null) {
+ parts.add(registerNode(obj.getNamespaces()));
+ parts.add(","); //$NON-NLS-1$
+ parts.add(SPACE);
+ }
+ parts.add(new Constant(obj.getXquery()));
+ if (!obj.getPassing().isEmpty()) {
+ parts.add(SPACE);
+ parts.add(NonReserved.PASSING);
+ parts.add(SPACE);
+ registerNodes(obj.getPassing(), 0);
+ }
+ if (obj.getReturningContent() != null) {
+ parts.add(SPACE);
+ parts.add(NonReserved.RETURNING);
+ parts.add(SPACE);
+ if (obj.getReturningContent()) {
+ parts.add(NonReserved.CONTENT);
+ } else {
+ parts.add(NonReserved.SEQUENCE);
+ if (obj.getEmptyOnEmpty() != null) {
+ parts.add(SPACE);
+ if (obj.getEmptyOnEmpty()) {
+ parts.add(NonReserved.EMPTY);
+ } else {
+ parts.add(NULL);
+ }
+ parts.add(SPACE);
+ parts.add(ON);
+ parts.add(SPACE);
+ parts.add(NonReserved.EMPTY);
+ }
+ }
+ }
+ parts.add(")");//$NON-NLS-1$
+ }
+
+ @Override
public void visit(DerivedColumn obj) {
parts.add(registerNode(obj.getExpression()));
if (obj.getAlias() != null) {
parts.add(SPACE);
- parts.add(SQLReservedWords.AS);
+ parts.add(AS);
parts.add(SPACE);
outputDisplayName(obj.getAlias());
}
@@ -1755,22 +1800,22 @@
@Override
public void visit(XMLSerialize obj) {
- parts.add(SQLReservedWords.XMLSERIALIZE);
- parts.add(SQLReservedWords.Tokens.LPAREN);
+ parts.add(XMLSERIALIZE);
+ parts.add(Tokens.LPAREN);
if (obj.isDocument()) {
- parts.add(SQLReservedWords.NonReserved.DOCUMENT);
+ parts.add(NonReserved.DOCUMENT);
} else {
- parts.add(SQLReservedWords.NonReserved.CONTENT);
+ parts.add(NonReserved.CONTENT);
}
parts.add(SPACE);
parts.add(registerNode(obj.getExpression()));
if (obj.getTypeString() != null) {
parts.add(SPACE);
- parts.add(SQLReservedWords.AS);
+ parts.add(AS);
parts.add(SPACE);
parts.add(obj.getTypeString());
}
- parts.add(SQLReservedWords.Tokens.RPAREN);
+ parts.add(Tokens.RPAREN);
}
public static String escapeSinglePart(String part) {
@@ -1802,7 +1847,7 @@
if(string == null) {
return false;
}
- return SQLReservedWords.isReservedWord(string);
+ return SQLConstants.isReservedWord(string);
}
}
Modified:
trunk/engine/src/main/java/org/teiid/query/validator/AggregateValidationVisitor.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/validator/AggregateValidationVisitor.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/validator/AggregateValidationVisitor.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -26,8 +26,8 @@
import java.util.Set;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.language.SQLReservedWords;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
+import org.teiid.language.SQLConstants.Reserved;
import org.teiid.query.QueryPlugin;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.navigator.PreOrderNavigator;
@@ -75,7 +75,7 @@
String aggregateFunction = obj.getAggregateFunction();
if((aggregateFunction.equals(NonReserved.SUM) ||
aggregateFunction.equals(NonReserved.AVG)) && obj.getType() == null) {
handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0041, new
Object[] {aggregateFunction, obj}), obj);
- } else if (aggregateFunction.equals(SQLReservedWords.XMLAGG) &&
obj.getType() != DataTypeManager.DefaultDataClasses.XML) {
+ } else if (aggregateFunction.equals(Reserved.XMLAGG) && obj.getType() !=
DataTypeManager.DefaultDataClasses.XML) {
handleValidationError(QueryPlugin.Util.getString("AggregateValidationVisitor.non_xml",
new Object[] {aggregateFunction, obj}), obj); //$NON-NLS-1$
}
if((obj.isDistinct() || aggregateFunction.equals(NonReserved.MIN) ||
aggregateFunction.equals(NonReserved.MAX)) &&
DataTypeManager.isNonComparable(DataTypeManager.getDataTypeName(aggExp.getType()))) {
Modified: trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2010-06-06
15:12:19 UTC (rev 2185)
+++ trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -106,6 +106,7 @@
import org.teiid.query.sql.symbol.XMLAttributes;
import org.teiid.query.sql.symbol.XMLForest;
import org.teiid.query.sql.symbol.XMLNamespaces;
+import org.teiid.query.sql.symbol.XMLQuery;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.sql.visitor.AggregateSymbolCollectorVisitor;
import org.teiid.query.sql.visitor.CommandCollectorVisitor;
@@ -117,6 +118,7 @@
import org.teiid.query.sql.visitor.SQLStringVisitor;
import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
import org.teiid.query.util.ErrorMessageKeys;
+import org.teiid.query.xquery.saxon.SaxonXQueryExpression;
import org.teiid.translator.SourceSystemFunctions;
public class ValidationVisitor extends AbstractValidationVisitor {
@@ -1156,10 +1158,34 @@
@Override
public void visit(XMLTable obj) {
- boolean context = false;
+ List<DerivedColumn> passing = obj.getPassing();
+ validatePassing(obj, obj.getXQueryExpression(), passing);
+ boolean hasOrdinal = false;
+ for (XMLColumn xc : obj.getColumns()) {
+ if (!xc.isOrdinal()) {
+ if (xc.getDefaultExpression() != null &&
!EvaluatableVisitor.isFullyEvaluatable(obj, false)) {
+ handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.invalid_default",
xc.getDefaultExpression()), obj); //$NON-NLS-1$
+ }
+ continue;
+ }
+ if (hasOrdinal) {
+ handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.one_ordinal"),
obj); //$NON-NLS-1$
+ break;
+ }
+ hasOrdinal = true;
+ }
+ }
+
+ @Override
+ public void visit(XMLQuery obj) {
+ validatePassing(obj, obj.getXQueryExpression(), obj.getPassing());
+ }
+
+ private void validatePassing(LanguageObject obj, SaxonXQueryExpression xqe,
List<DerivedColumn> passing) {
+ boolean context = false;
boolean hadError = false;
HashSet<String> names = new HashSet<String>();
- for (DerivedColumn dc : obj.getPassing()) {
+ for (DerivedColumn dc : passing) {
if (dc.getAlias() == null) {
Class<?> type = dc.getExpression().getType();
if (type != DataTypeManager.DefaultDataClasses.XML &&
@@ -1175,29 +1201,14 @@
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.duplicate_passing",
dc.getAlias()), obj); //$NON-NLS-1$
}
}
- if (obj.getXQueryExpression().usesContextItem() && !context) {
+ if (xqe.usesContextItem() && !context) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.context_required"),
obj); //$NON-NLS-1$
}
- boolean hasOrdinal = false;
- for (XMLColumn xc : obj.getColumns()) {
- if (!xc.isOrdinal()) {
- if (xc.getDefaultExpression() != null &&
!EvaluatableVisitor.isFullyEvaluatable(obj, false)) {
- handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.invalid_default",
xc.getDefaultExpression()), obj); //$NON-NLS-1$
- }
- continue;
- }
- if (hasOrdinal) {
- handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.one_ordinal"),
obj); //$NON-NLS-1$
- break;
- }
- hasOrdinal = true;
- }
- }
+ }
@Override
public void visit(XMLNamespaces obj) {
boolean hasDefault = false;
- boolean noDefault = false;
for (XMLNamespaces.NamespaceItem item : obj.getNamespaceItems()) {
if (item.getPrefix() != null) {
if (item.getPrefix().equals("xml") ||
item.getPrefix().equals("xmlns")) { //$NON-NLS-1$ //$NON-NLS-2$
@@ -1205,15 +1216,11 @@
}
continue;
}
- if (hasDefault || noDefault) {
+ if (hasDefault) {
handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.xml_namespaces"),
obj); //$NON-NLS-1$
break;
}
- if (item.getUri() == null) {
- noDefault = true;
- } else {
- hasDefault = true;
- }
+ hasDefault = true;
}
}
Modified:
trunk/engine/src/main/java/org/teiid/query/xquery/saxon/SaxonXQueryExpression.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/xquery/saxon/SaxonXQueryExpression.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/main/java/org/teiid/query/xquery/saxon/SaxonXQueryExpression.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -121,11 +121,10 @@
};
private net.sf.saxon.query.XQueryExpression xQuery;
- private PathMap.PathMapRoot contextRoot;
private Configuration config = new Configuration();
public SaxonXQueryExpression(String xQueryString, XMLNamespaces namespaces,
List<DerivedColumn> passing, List<XMLTable.XMLColumn> columns)
- throws TeiidProcessingException {
+ throws QueryResolverException {
config.setErrorListener(ERROR_LISTENER);
StaticQueryContext context = new StaticQueryContext(config);
IndependentContext ic = new IndependentContext(config);
@@ -153,6 +152,7 @@
try {
context.declareGlobalVariable(StructuredQName.fromClarkName(derivedColumn.getAlias()),
SequenceType.ANY_SEQUENCE, null, true);
} catch (XPathException e) {
+ //this is always expected to work
throw new TeiidRuntimeException(e, "Could not define global variable");
//$NON-NLS-1$
}
}
@@ -170,7 +170,7 @@
return this.xQuery.usesContextItem();
}
- public void useDocumentProjection(List<XMLTable.XMLColumn> columns, AnalysisRecord
record) {
+ public PathMapRoot useDocumentProjection(List<XMLTable.XMLColumn> columns,
AnalysisRecord record) {
PathMap map = this.xQuery.getPathMap();
PathMapRoot parentRoot;
try {
@@ -179,7 +179,7 @@
if (record.recordDebug()) {
record.println("Document projection will not be used, since multiple context
item exist."); //$NON-NLS-1$
}
- return;
+ return null;
}
if (parentRoot == null) {
//TODO: this seems like we could omit the context item altogether
@@ -187,7 +187,7 @@
if (record.recordDebug()) {
record.println("Document projection will not be used, since no context item
reference was found in the XQuery"); //$NON-NLS-1$
}
- return;
+ return null;
}
HashSet<PathMapNode> finalNodes = new HashSet<PathMapNode>();
getReturnableNodes(parentRoot, finalNodes);
@@ -198,11 +198,11 @@
if (record.recordDebug()) {
record.println("Document projection will not be used, since multiple return
items exist"); //$NON-NLS-1$
}
- return;
+ return null;
}
parentRoot = projectColumns(parentRoot, columns, finalNodes.iterator().next(),
record);
if (parentRoot == null) {
- return;
+ return null;
}
} else {
for (Iterator iter = finalNodes.iterator(); iter.hasNext(); ) {
@@ -215,14 +215,14 @@
if (record.recordDebug()) {
record.println("Document projection will not be used since there are unknown
dependencies (most likely a user defined function)."); //$NON-NLS-1$
}
- return;
+ return null;
}
- contextRoot = parentRoot;
if (record.recordDebug()) {
StringBuilder sb = new StringBuilder();
- showArcs(sb, contextRoot, 0);
+ showArcs(sb, parentRoot, 0);
record.println("Using path filtering for XQuery context item: \n" +
sb.toString()); //$NON-NLS-1$
}
+ return parentRoot;
}
private PathMapRoot projectColumns(PathMapRoot parentRoot,
List<XMLTable.XMLColumn> columns, PathMapNode finalNode, AnalysisRecord record) {
@@ -299,7 +299,7 @@
}
private void processColumns(List<XMLTable.XMLColumn> columns, IndependentContext
ic)
- throws TeiidProcessingException {
+ throws QueryResolverException {
if (columns == null) {
return;
}
@@ -314,14 +314,18 @@
path = xmlColumn.getName();
}
path = path.trim();
- if (path.startsWith("/") && !path.startsWith("//"))
{ //$NON-NLS-1$ //$NON-NLS-2$
- path = path.substring(1);
+ if (path.startsWith("/")) { //$NON-NLS-1$
+ if (path.startsWith("//")) { //$NON-NLS-1$
+ path = '.' + path;
+ } else {
+ path = path.substring(1);
+ }
}
XPathExpression exp;
try {
exp = eval.createExpression(path);
} catch (XPathException e) {
- throw new TeiidProcessingException(e, "Invalid path expression");
+ throw new QueryResolverException(e,
QueryPlugin.Util.getString("SaxonXQueryExpression.invalid_path",
xmlColumn.getName(), xmlColumn.getPath())); //$NON-NLS-1$
}
xmlColumn.setPathExpression(exp);
}
@@ -344,7 +348,7 @@
throw new AssertionError("Unknown type"); //$NON-NLS-1$
}
- public SequenceIterator evaluateXQuery(Object context, Map<String, Object>
parameterValues) throws TeiidProcessingException {
+ public SequenceIterator evaluateXQuery(Object context, PathMapRoot contextRoot,
Map<String, Object> parameterValues) throws TeiidProcessingException {
DynamicQueryContext dynamicContext = new DynamicQueryContext(config);
for (Map.Entry<String, Object> entry : parameterValues.entrySet()) {
@@ -368,7 +372,7 @@
try {
doc = config.buildDocument(source);
} catch (XPathException e) {
- throw new TeiidProcessingException(e);
+ throw new TeiidProcessingException(e,
QueryPlugin.Util.getString("SaxonXQueryExpression.bad_context")); //$NON-NLS-1$
}
dynamicContext.setContextItem(doc);
}
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-06 15:12:19
UTC (rev 2185)
+++ trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj 2010-06-07 16:27:14
UTC (rev 2186)
@@ -361,6 +361,7 @@
| < TIMETYPE: "{" "t" >
| < TIMESTAMPTYPE: "{" "ts" >
| < BOOLEANTYPE: "{" "b" >
+| < XMLTYPE: "{" "x" >
| < INTEGERVAL: (<MINUS>)?(<DIGIT>)+ >
| < FLOATVAL: (<MINUS>)? (<DIGIT>)* <PERIOD> (<DIGIT>)+
@@ -2027,6 +2028,61 @@
}
}
+XMLQuery xmlQuery(ParseInfo info) :
+{
+ String xquery = null;
+ XMLNamespaces xmlNamespaces = null;
+ DerivedColumn passing = null;
+ ArrayList<DerivedColumn> passingValues = new ArrayList<DerivedColumn>();
+ Boolean content = null;
+ Boolean empty = null;
+}
+{
+ <ID> <LPAREN>
+ [ xmlNamespaces = xmlNamespaces(info) <COMMA> ]
+ xquery = stringVal()
+ [
+ LOOKAHEAD(<ID>, { "passing".equalsIgnoreCase(getToken(1).image) })
<ID>
+ passing = derivedColumn(info)
+ {
+ passingValues.add(passing);
+ passing.setPropagateName(false);
+ }
+ (<COMMA>
+ passing = derivedColumn(info)
+ {
+ passingValues.add(passing);
+ passing.setPropagateName(false);
+ }
+ )*
+ ]
+ [
+ LOOKAHEAD(<ID>, { "returning".equalsIgnoreCase(getToken(1).image) })
<ID>
+ (
+ LOOKAHEAD(<ID>, { "content".equalsIgnoreCase(getToken(1).image) })
<ID> { content = true; }
+ |
+ LOOKAHEAD(<ID>, { "sequence".equalsIgnoreCase(getToken(1).image) })
(<ID> { content = false; }
+ [
+ (<NULL> { empty = false; }
+ |
+ nonReserved("EMPTY") { empty = true; }
+ )
+ <ON> nonReserved("EMPTY")
+ ])
+ )
+ ]
+ <RPAREN>
+ {
+ XMLQuery result = new XMLQuery();
+ result.setXquery(xquery);
+ result.setNamespaces(xmlNamespaces);
+ result.setPassing(passingValues);
+ result.setEmptyOnEmpty(empty);
+ result.setReturningContent(content);
+ return result;
+ }
+}
+
XMLTable xmlTable(ParseInfo info) :
{
String xquery = null;
@@ -3283,7 +3339,11 @@
{
return expression;
}
- |
+ | LOOKAHEAD(<ID>, { "xmlQuery".equalsIgnoreCase(getToken(1).image) })
expression = xmlQuery(info)
+ {
+ return expression;
+ }
+ |
( funcName = id()
{
funcName = validateFunctionName(funcName);
@@ -3578,7 +3638,8 @@
( (<BOOLEANTYPE> { escapeType=DataTypeManager.DefaultDataClasses.BOOLEAN;
} |
<TIMESTAMPTYPE> {
escapeType=DataTypeManager.DefaultDataClasses.TIMESTAMP; } |
<DATETYPE> { escapeType=DataTypeManager.DefaultDataClasses.DATE; }
|
- <TIMETYPE> { escapeType=DataTypeManager.DefaultDataClasses.TIME; })
strVal=stringVal() {
+ <TIMETYPE> { escapeType=DataTypeManager.DefaultDataClasses.TIME; }
|
+ <XMLTYPE> { escapeType=DataTypeManager.DefaultDataClasses.XML; })
strVal=stringVal() {
try {
constant = new Constant(DataTypeManager.transformValue(strVal, escapeType),
escapeType);
} catch (TransformationException e) {
Modified: trunk/engine/src/main/resources/org/teiid/query/execution/i18n.properties
===================================================================
--- trunk/engine/src/main/resources/org/teiid/query/execution/i18n.properties 2010-06-06
15:12:19 UTC (rev 2185)
+++ trunk/engine/src/main/resources/org/teiid/query/execution/i18n.properties 2010-06-07
16:27:14 UTC (rev 2186)
@@ -216,3 +216,7 @@
TextTableNode.character_not_allowed=Text parse error: Non-whitespace character found
between the qualifier and the delimiter in text line {0}.
TextTableNode.unknown_escape=Text parse error: Unknown escape sequence \\{0} in text line
{1}.
TextTableNode.invalid_width=Text parse error: Fixed width line width {0} is smaller than
the expected {1} on text line {2}
+
+XMLTableNode.error=Error evaluating XQuery row context for XMLTable: {0}
+XMLTableNode.path_error=Error evaluating XMLTable column path expression for column: {0}
+XMLTableName.multi_value=Unexpected multi-valued result was returned for XMLTable column
"{0}". Path expressions for non-XML type columns should return at most a single
result.
Modified: trunk/engine/src/main/resources/org/teiid/query/i18n.properties
===================================================================
--- trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2010-06-06 15:12:19
UTC (rev 2185)
+++ trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2010-06-07 16:27:14
UTC (rev 2186)
@@ -815,8 +815,11 @@
TempMetadataAdapter.Group_____{0}_____not_found._1=Group ''{0}'' not
found.
ExpressionEvaluator.Must_push=Function {0} is marked in the function metadata as a
function that must be evaluated at the source.
ExpressionEvaluator.Eval_failed=Unable to evaluate {0}: {1}
-XMLSerialize.data_exception=XMLSerialize: data exception - not an xml document
XMLSerialize.resolvingError=XMLSerialize is valid only for XML expressions: {0}
+Evaluator.xmlserialize=XMLSerialize: data exception - not an xml document
+Evaluator.xmlquery=Error evaluating XMLQuery: {0}
+Evaluator.xmlquery_content=XQuery evaluation was expected to return content, but it
returned a sequence.
+Evaluator.xmlquery_content_empty=XQuery evaluation was expected to return content, but
was empty.
FunctionDefinitionsReader.Read_error=Error reading FunctionDefinitions.xmi: {0}
FunctionDefinitionsSource.Read_error=Error reading {0}
ExecResolver.Param_convert_fail=Unable to convert procedural parameter of type {0} to
expected type {1}
@@ -897,6 +900,7 @@
ValidationVisitor.duplicate_passing=XMLTABLE or XMLQUERY PASSING clause duplicate item
name "{0}".
ValidationVisitor.one_ordinal=Only one FOR ORDINALITY column is allowed for an XMLTABLE.
ValidationVisitor.invalid_default=XMLTABLE DEFAULT expression is invalid:
"{0}"
+ValidationVisitor.context_required=The XQuery requires a context item, but none exists in
the PASSING clause.
UpdateProcedureResolver.only_variables=Element symbol "{0}" cannot be assigned
a value. Only declared VARIABLES can be assigned values.
wrong_result_type=No results found; or non-XML result object has been produced as a
result of the execution of XQuery expression. Please note that only XML type results are
supported.
MappingLoader.unknown_node_type=Unknown Node Type "{0}" being loaded by the XML
mapping document.
@@ -909,6 +913,8 @@
criteria_node_not_allowed=Criteria Nodes can be only added on the Choice nodes; Wrong
type of parent found.
SaxonXQueryExpression.bad_xquery=Failed to evaluate XQuery expression; Please check the
query and correct errors in syntax or usage.
SaxonXQueryExpression.compile_failed=Could not compile XQuery; Please check the query for
syntax or usage errors.
+SaxonXQueryExpression.invalid_path=Column "{0}" has an invalid path expression:
{1}
+SaxonXQueryExpression.bad_context=Error building Source for context item.
SimpleQueryResolver.unknown_group_in_nocache=Unknown group "{0}" found in the
Option NOCACHE hint.
MappingLoader.invalidName=Null or blank name found in the Mapping Document, Must have
valid name. Re-build the VDB
MatchCriteria.invalid_escape=Invalid escape sequence "{0}" with escape
character "{1}"
Modified:
trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestAggregateImpl.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestAggregateImpl.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestAggregateImpl.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -27,7 +27,7 @@
import org.teiid.core.types.DataTypeManager;
import org.teiid.language.AggregateFunction;
import org.teiid.language.Literal;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.sql.symbol.AggregateSymbol;
import org.teiid.query.sql.symbol.Constant;
Modified: trunk/engine/src/test/java/org/teiid/query/function/TestFunction.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/function/TestFunction.java 2010-06-06
15:12:19 UTC (rev 2185)
+++ trunk/engine/src/test/java/org/teiid/query/function/TestFunction.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -34,7 +34,7 @@
import org.junit.Test;
import org.teiid.api.exception.query.FunctionExecutionException;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.function.FunctionMethods;
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.unittest.TimestampUtil;
Modified: trunk/engine/src/test/java/org/teiid/query/function/TestFunctionLibrary.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/function/TestFunctionLibrary.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/test/java/org/teiid/query/function/TestFunctionLibrary.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -47,7 +47,7 @@
import org.teiid.core.types.XMLType;
import org.teiid.core.util.ObjectConverterUtil;
import org.teiid.core.util.TimestampWithTimezone;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.function.metadata.FunctionMethod;
import org.teiid.query.unittest.TimestampUtil;
import org.teiid.query.util.CommandContext;
Modified:
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestCapabilitiesUtil.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestCapabilitiesUtil.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestCapabilitiesUtil.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -27,7 +27,7 @@
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.optimizer.capabilities.BasicSourceCapabilities;
import org.teiid.query.optimizer.capabilities.DefaultCapabilitiesFinder;
import org.teiid.query.optimizer.capabilities.FakeCapabilitiesFinder;
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-06 15:12:19
UTC (rev 2185)
+++ trunk/engine/src/test/java/org/teiid/query/parser/TestParser.java 2010-06-07 16:27:14
UTC (rev 2186)
@@ -38,7 +38,7 @@
import org.teiid.client.metadata.ParameterInfo;
import org.teiid.core.TeiidException;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.language.SQLReservedWords;
+import org.teiid.language.SQLConstants.Reserved;
import org.teiid.query.sql.lang.BetweenCriteria;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.CompareCriteria;
@@ -114,6 +114,7 @@
import org.teiid.query.sql.symbol.XMLElement;
import org.teiid.query.sql.symbol.XMLForest;
import org.teiid.query.sql.symbol.XMLNamespaces;
+import org.teiid.query.sql.symbol.XMLQuery;
import org.teiid.query.sql.symbol.XMLSerialize;
@SuppressWarnings("nls")
@@ -6741,7 +6742,7 @@
@Test public void testXmlAggWithOrderBy() throws Exception {
String sql = "SELECT xmlAgg(1 order by e2)"; //$NON-NLS-1$
- AggregateSymbol as = new AggregateSymbol("foo",
SQLReservedWords.XMLAGG, false, new Constant(1));
+ AggregateSymbol as = new AggregateSymbol("foo", Reserved.XMLAGG, false,
new Constant(1));
as.setOrderBy(new OrderBy(Arrays.asList(new ElementSymbol("e2"))));
Query query = new Query();
query.setSelect(new Select(Arrays.asList(as)));
@@ -6813,5 +6814,14 @@
f.setTypeString("CLOB");
helpTestExpression("xmlserialize(document x as CLOB)",
"XMLSERIALIZE(DOCUMENT x AS CLOB)", f);
}
+
+ @Test public void testXmlQuery() throws Exception {
+ XMLQuery f = new XMLQuery();
+ f.setXquery("/x");
+ f.setEmptyOnEmpty(false);
+ f.setReturningContent(false);
+ f.setPassing(Arrays.asList(new DerivedColumn(null, new
ElementSymbol("foo"))));
+ helpTestExpression("xmlquery('/x' passing foo returning sequence null
on empty)", "XMLQUERY('/x' PASSING foo RETURNING SEQUENCE NULL ON
EMPTY)", f);
+ }
}
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestSQLXMLProcessing.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/processor/TestSQLXMLProcessing.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/test/java/org/teiid/query/processor/TestSQLXMLProcessing.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -27,8 +27,8 @@
import java.util.Arrays;
import java.util.List;
-import org.junit.Ignore;
import org.junit.Test;
+import org.teiid.core.TeiidProcessingException;
import org.teiid.query.unittest.FakeMetadataFactory;
@SuppressWarnings({"nls", "unchecked"})
@@ -294,12 +294,14 @@
helpProcess(plan, dataManager, expected);
}
- @Ignore
- @Test public void testXmlTableForOrdinality() {
- String sql = "select * from xmltable('/a/b' passing
convert('<a><b><c>1</c></b><b>1</b><b><c>1</c></b><b>1</b></a>',
xml) as a columns x for ordinality, c integer path '.') as x"; //$NON-NLS-1$
+ @Test public void testXmlTableForOrdinalityAndDefaultPath() {
+ String sql = "select * from xmltable('/a/b' passing
convert('<a><b><c>1</c></b><b>1</b><b><c>1</c></b><b>1</b></a>',
xml) columns x for ordinality, c integer) as x"; //$NON-NLS-1$
List<?>[] expected = new List<?>[] {
- Arrays.asList("<b>first</b>"),
+ Arrays.asList(1, 1),
+ Arrays.asList(2, null),
+ Arrays.asList(3, 1),
+ Arrays.asList(4, null),
};
FakeDataManager dataManager = new FakeDataManager();
@@ -309,5 +311,78 @@
helpProcess(plan, dataManager, expected);
}
+
+ @Test public void testXmlTableDescendantPath() {
+ String sql = "select * from xmltable('<a>{for $i in (1 to 5)
return $i}</a>' columns x string path '//text()') as x";
//$NON-NLS-1$
+
+ List<?>[] expected = new List<?>[] {
+ Arrays.asList("1 2 3 4 5"),
+ };
+
+ FakeDataManager dataManager = new FakeDataManager();
+ sampleData1(dataManager);
+
+ ProcessorPlan plan = helpGetPlan(helpParse(sql),
FakeMetadataFactory.example1Cached());
+
+ helpProcess(plan, dataManager, expected);
+ }
+ @Test public void testXmlQuery() {
+ String sql = "select xmlquery('for $i in (1 to 5) return $i'
returning sequence)"; //$NON-NLS-1$
+
+ List<?>[] expected = new List<?>[] {
+ Arrays.asList("1 2 3 4 5"),
+ };
+
+ FakeDataManager dataManager = new FakeDataManager();
+ sampleData1(dataManager);
+
+ ProcessorPlan plan = helpGetPlan(helpParse(sql),
FakeMetadataFactory.example1Cached());
+
+ helpProcess(plan, dataManager, expected);
+ }
+
+ @Test(expected=TeiidProcessingException.class) public void testXmlQueryContentError()
throws Exception {
+ String sql = "select xmlquery('for $i in $e1 return $i' passing e1
as e1) from pm1.g1 order by e1 limit 1"; //$NON-NLS-1$
+
+ List<?>[] expected = new List<?>[] {
+ };
+
+ FakeDataManager dataManager = new FakeDataManager();
+ sampleData1(dataManager);
+
+ ProcessorPlan plan = helpGetPlan(helpParse(sql),
FakeMetadataFactory.example1Cached());
+
+ helpProcess(plan, createCommandContext(), dataManager, expected);
+ }
+
+ @Test(expected=TeiidProcessingException.class) public void testXmlQueryEmpty() throws
Exception {
+ String sql = "select xmlquery('/a' passing xmlelement(x, e1)) from
pm1.g1 order by e1 limit 1"; //$NON-NLS-1$
+
+ List<?>[] expected = new List<?>[] {
+ };
+
+ FakeDataManager dataManager = new FakeDataManager();
+ sampleData1(dataManager);
+
+ ProcessorPlan plan = helpGetPlan(helpParse(sql),
FakeMetadataFactory.example1Cached());
+
+ helpProcess(plan, createCommandContext(), dataManager, expected);
+ }
+
+ @Test public void testXmlQueryEmptyNull() throws Exception {
+ String sql = "select xmlquery('/a' passing {x '<x/>'}
returning sequence null on empty)"; //$NON-NLS-1$
+
+ List<?>[] expected = new List<?>[] {
+ Arrays.asList((String)null)
+ };
+
+ FakeDataManager dataManager = new FakeDataManager();
+ sampleData1(dataManager);
+
+ ProcessorPlan plan = helpGetPlan(helpParse(sql),
FakeMetadataFactory.example1Cached());
+
+ helpProcess(plan, createCommandContext(), dataManager, expected);
+ }
+
}
Modified: trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestAggregateSymbol.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestAggregateSymbol.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/test/java/org/teiid/query/sql/symbol/TestAggregateSymbol.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -25,7 +25,7 @@
import junit.framework.TestCase;
import org.teiid.core.util.UnitTestUtil;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.sql.symbol.AggregateSymbol;
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.sql.symbol.ElementSymbol;
Modified:
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestExpressionMappingVisitor.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestExpressionMappingVisitor.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestExpressionMappingVisitor.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -31,7 +31,7 @@
import java.util.Map;
import org.junit.Test;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.lang.CompareCriteria;
import org.teiid.query.sql.lang.Select;
Modified:
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestSQLStringVisitor.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestSQLStringVisitor.java 2010-06-06
15:12:19 UTC (rev 2185)
+++
trunk/engine/src/test/java/org/teiid/query/sql/visitor/TestSQLStringVisitor.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -31,7 +31,7 @@
import org.teiid.client.metadata.ParameterInfo;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.query.parser.QueryParser;
import org.teiid.query.resolver.QueryResolver;
import org.teiid.query.sql.LanguageObject;
Modified: trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java 2010-06-06
15:12:19 UTC (rev 2185)
+++ trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -1999,12 +1999,12 @@
}
@Test public void testXMLTablePassingMultipleContext() {
- helpValidate("select * from pm1.g1, xmltable('/' passing
'<a/>', '<b/>') as x", new String[]
{"XMLTABLE('/' PASSING '<a/>', '<b/>') AS
x"}, FakeMetadataFactory.example1Cached());
+ helpValidate("select * from pm1.g1, xmltable('/' passing {x
'<a/>'}, {x '<b/>'}) as x", new String[]
{"XMLTABLE('/' PASSING {x '<a/>'}, {x '<b/>'}) AS
x"}, FakeMetadataFactory.example1Cached());
}
@Ignore("this is actually handled by saxon and will show up during
resolving")
@Test public void testXMLTablePassingSameName() {
- helpValidate("select * from pm1.g1, xmltable('/' passing
'<a/>' as a, '<b/>' as a) as x", new String[]
{"xmltable('/' passing e1, e1 || 'x') as x"},
FakeMetadataFactory.example1Cached());
+ helpValidate("select * from pm1.g1, xmltable('/' passing {x
'<a/>'} as a, {x '<b/>'} as a) as x", new String[]
{"xmltable('/' passing e1, e1 || 'x') as x"},
FakeMetadataFactory.example1Cached());
}
@Test public void testXMLTablePassingContextType() {
@@ -2012,7 +2012,15 @@
}
@Test public void testXMLTableMultipleOrdinals() {
- helpValidate("select * from pm1.g1, xmltable('/' passing
'<a/>' columns x for ordinality, y for ordinality) as x", new String[]
{"XMLTABLE('/' PASSING '<a/>' COLUMNS x FOR ORDINALITY, y FOR
ORDINALITY) AS x"}, FakeMetadataFactory.example1Cached());
+ helpValidate("select * from pm1.g1, xmltable('/' passing {x
'<a/>'} columns x for ordinality, y for ordinality) as x", new String[]
{"XMLTABLE('/' PASSING {x '<a/>'} COLUMNS x FOR ORDINALITY, y
FOR ORDINALITY) AS x"}, FakeMetadataFactory.example1Cached());
}
+
+ @Test public void testXMLTableContextRequired() {
+ helpValidate("select * from xmltable('/a/b' passing
convert('<a/>', xml) as a columns x for ordinality, c integer path
'.') as x", new String[] {"XMLTABLE('/a/b' PASSING
convert('<a/>', xml) AS a COLUMNS x FOR ORDINALITY, c integer PATH
'.') AS x"}, FakeMetadataFactory.example1Cached());
+ }
+ @Test public void testXMLQueryPassingContextType() {
+ helpValidate("select xmlquery('/' passing 2)", new String[]
{"XMLQUERY('/' PASSING 2)"}, FakeMetadataFactory.example1Cached());
+ }
+
}
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-06
15:12:19 UTC (rev 2185)
+++
trunk/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java 2010-06-07
16:27:14 UTC (rev 2186)
@@ -66,7 +66,7 @@
import org.teiid.language.LanguageObject;
import org.teiid.language.Literal;
import org.teiid.language.Select;
-import org.teiid.language.SQLReservedWords.NonReserved;
+import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.language.visitor.SQLStringVisitor;
import org.teiid.metadata.RuntimeMetadata;
import org.teiid.query.sql.lang.CompareCriteria;