[teiid-commits] teiid SVN: r1886 - in branches/JCA: common-core/src/main/java/com/metamatrix/common/types and 42 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Tue Mar 2 09:32:31 EST 2010


Author: shawkins
Date: 2010-03-02 09:32:21 -0500 (Tue, 02 Mar 2010)
New Revision: 1886

Added:
   branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SQLReservedWords.java
   branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedWhenClause.java
Removed:
   branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLReservedWords.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ReservedWords.java
Modified:
   branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java
   branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java
   branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
   branches/JCA/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java
   branches/JCA/connector-api/src/main/java/org/teiid/connector/language/Comparison.java
   branches/JCA/connector-api/src/main/java/org/teiid/connector/language/LanguageFactory.java
   branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedCase.java
   branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/AbstractLanguageVisitor.java
   branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/DelegatingHierarchyVisitor.java
   branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/HierarchyVisitor.java
   branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/LanguageObjectVisitor.java
   branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/CollectorVisitor.java
   branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLStringVisitor.java
   branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/AddDiffModifier.java
   branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java
   branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java
   branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java
   branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java
   branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java
   branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java
   branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java
   branches/JCA/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/NameUtil.java
   branches/JCA/documentation/reference/src/main/docbook/en-US/content/procedures.xml
   branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionForm.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CapabilitiesUtil.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePushAggregates.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/parser/QueryParser.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/parser/SQLParserUtil.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/processor/proc/ExecDynamicSqlInstruction.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/processor/relational/GroupingNode.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/ProcedureContainerResolver.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DeleteResolver.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DynamicCommandResolver.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/InsertResolver.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateProcedureResolver.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateResolver.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverVisitor.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ProcedureReservedWords.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Insert.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Option.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Update.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/sql/proc/RaiseErrorStatement.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/sql/symbol/AggregateSymbol.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/sql/util/UpdateProcedureGenerator.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/sql/visitor/SQLStringVisitor.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java
   branches/JCA/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java
   branches/JCA/engine/src/main/java/org/teiid/dqp/internal/datamgr/language/LanguageBridgeFactory.java
   branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java
   branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
   branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
   branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
   branches/JCA/engine/src/main/javacc/com/metamatrix/query/parser/SQLParser.jj
   branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunction.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunctionLibrary.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/TestAggregatePushdown.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCapabilitiesUtil.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestCallableStatementParsing.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestOptionsAndHints.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestParser.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/processor/proc/TestProcedureProcessor.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/resolver/TestProcedureResolving.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/sql/symbol/TestAggregateSymbol.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/sql/util/TestUpdateProcedureGenerator.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestExpressionMappingVisitor.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestSQLStringVisitor.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java
   branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestAggregateImpl.java
   branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestSearchedCaseExpressionImpl.java
   branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java
   branches/JCA/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java
Log:
TEIID-1005 TEIID-1003 consolidating reserved words and adding initial set of 2003 reserved words.  also added searchedwhenclause to the connector api

Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,10 +22,8 @@
 package org.teiid.adminapi.impl;
 
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -42,7 +40,12 @@
 	
 	private String name;
 		
-	private LinkedHashMap<String, PropertyMetadata> properties = new LinkedHashMap<String, PropertyMetadata>();
+	private ListOverMap<PropertyMetadata> properties = new ListOverMap<PropertyMetadata>(new KeyBuilder<PropertyMetadata>() {
+		@Override
+		public String getKey(PropertyMetadata entry) {
+			return entry.getName();
+		}
+	});
 	
 	private transient Map<String, Object> attachments = Collections.synchronizedMap(new HashMap<String, Object>());
 		
@@ -58,7 +61,7 @@
 	@Override
 	public Properties getProperties() {
 		Properties props = new Properties();
-		for (PropertyMetadata p:this.properties.values()) {
+		for (PropertyMetadata p:this.properties.getMap().values()) {
 			props.setProperty(p.getName(), p.getValue());
 		}
 		return props;
@@ -72,21 +75,16 @@
 	}	
 	
 	protected List<PropertyMetadata> getPropertiesDirect(){
-		return new ListOverMap<PropertyMetadata>(this.properties, new KeyBuilder<PropertyMetadata>() {
-			@Override
-			public String getKey(PropertyMetadata entry) {
-				return entry.getName();
-			}
-		});
+		return properties;
 	}
 	
 	@Override
 	public String getPropertyValue(String name) {
-		return this.properties.get(name).getValue();
+		return this.properties.getMap().get(name).getValue();
 	}
 
 	public void addProperty(String key, String value) {
-		this.properties.put(key, new PropertyMetadata(key, value));
+		this.properties.getMap().put(key, new PropertyMetadata(key, value));
 	}
 	
 	   /**

Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -29,39 +29,42 @@
 
 final class ListOverMap<E> extends AbstractList<E> {
 	
-	private LinkedHashMap<String, E> parent;
-	private KeyBuilder builder;
+	private LinkedHashMap<String, E> map = new LinkedHashMap<String, E>();
+	private KeyBuilder<E> builder;
 	
-	public ListOverMap(LinkedHashMap<String, E> parent, KeyBuilder builder) {
-		this.parent = parent;
+	public ListOverMap(KeyBuilder<E> builder) {
 		this.builder = builder;
 	}
 	
+	public LinkedHashMap<String, E> getMap() {
+		return map;
+	}
+	
 	@Override
 	public void add(int index, E element) {
-		this.parent.put(builder.getKey(element), element);
+		this.map.put(builder.getKey(element), element);
 	}
 
 	@Override
 	public E remove(int index) {
 		String key = getKey(index);
 		if (key == null) {
-			throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size());					
+			throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size());	//$NON-NLS-1$ //$NON-NLS-2$
 		}
-		return this.parent.remove(key);
+		return this.map.remove(key);
 	}
 
 	@Override
 	public E get(int index) {
 		String key = getKey(index);
 		if (key == null) {
-			throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size());					
+			throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size());	//$NON-NLS-1$ //$NON-NLS-2$				
 		}
-		return this.parent.get(key);
+		return this.map.get(key);
 	}
 
 	private String getKey(int index) {
-		Set<String> keys = this.parent.keySet();
+		Set<String> keys = this.map.keySet();
 		int i = 0;
 		for (String key:keys) {
 			if (i == index) {
@@ -74,7 +77,7 @@
 
 	@Override
 	public int size() {
-		return this.parent.size();
+		return this.map.size();
 	}	
 }
 

Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -25,7 +25,6 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Properties;
 import java.util.Set;
@@ -64,7 +63,12 @@
 
 	private static final long serialVersionUID = -4723595252013356436L;
 	
-	private LinkedHashMap<String, ModelMetaData> models = new LinkedHashMap<String, ModelMetaData>();
+	private ListOverMap<ModelMetaData> models = new ListOverMap<ModelMetaData>(new KeyBuilder<ModelMetaData>() {
+		@Override
+		public String getKey(ModelMetaData entry) {
+			return entry.getName();
+		}
+	});
 	 
 	@XmlAttribute(name = "version", required = true)
 	private int version = 1;
@@ -73,7 +77,12 @@
 	private String description;
 	
     @XmlElement(name = "connector-mapping")
-    protected List<ReferenceMappingMetadata> connectorMappings;
+    protected ListOverMap<ReferenceMappingMetadata> connectorMappings = new ListOverMap<ReferenceMappingMetadata>(new KeyBuilder<ReferenceMappingMetadata>() {
+			@Override
+			public String getKey(ReferenceMappingMetadata entry) {
+				return entry.getRefName();
+			}
+		});
     
     @XmlElement(name = "security-role-mapping")
     protected List<ReferenceMappingMetadata> securityRoleMappings;	
@@ -146,7 +155,7 @@
 
 	@ManagementProperty(description="Model list in a VDB", managed=true)
 	public List<ModelMetaData> getModels(){
-		return new ArrayList<ModelMetaData>(this.models.values());
+		return new ArrayList<ModelMetaData>(this.models.getMap().values());
 	}
 	
 	/**
@@ -156,16 +165,11 @@
 	 */
 	@XmlElement(name = "model", required = true, type = ModelMetaData.class)
 	protected List<ModelMetaData> getModelsDirect(){
-		return new ListOverMap(this.models, new KeyBuilder<ModelMetaData>() {
-			@Override
-			public String getKey(ModelMetaData entry) {
-				return entry.getName();
-			}
-		});
+		return models;
 	}	
 	
 	public void addModel(ModelMetaData m) {
-		this.models.put(m.getName(), m);
+		this.models.getMap().put(m.getName(), m);
 	}	
 
 	@Override
@@ -190,7 +194,7 @@
 			}
 			return errors;
 		}
-		return Collections.EMPTY_LIST; 
+		return Collections.emptyList(); 
 	}
 
 	@Override
@@ -203,7 +207,7 @@
         if (getModels().isEmpty()) {
             return false;        	
         }
-    	for(ModelMetaData m: this.models.values()) {
+    	for(ModelMetaData m: this.models.getMap().values()) {
     		if (m.isSource()) {
     			String connectorReference = m.getConnectorReference();
     			if (connectorReference == null) {
@@ -220,17 +224,17 @@
     } 	
     
 	public String toString() {
-		return getName()+"."+getVersion()+ models;
+		return getName()+"."+getVersion()+ models; //$NON-NLS-1$
 	}
 
 	@ManagementOperation(description = "Get the model with given name")		
 	public ModelMetaData getModel(String modelName) {
-		return this.models.get(modelName);
+		return this.models.getMap().get(modelName);
 	}
 	
 	public Set<String> getMultiSourceModelNames(){
 		Set<String> list = new HashSet<String>();
-		for(ModelMetaData m: models.values()) {
+		for(ModelMetaData m: models.getMap().values()) {
 			if (m.isSupportsMultiSourceBindings()) {
 				list.add(m.getName());
 			}
@@ -240,26 +244,19 @@
 	
 	@ManagementProperty(description="Connector reference mappings")
     public List<ReferenceMappingMetadata> getConnectorMappings() {
-		return this.connectorMappings;
+		return connectorMappings;
 	}	
 	
 	public List<String> getConnectorBindingNames(String referenceName) {
-		if (this.connectorMappings == null) {
-			return Collections.EMPTY_LIST;
+		ReferenceMappingMetadata rmm = this.connectorMappings.getMap().get(referenceName);
+		if (rmm != null) {
+			return rmm.getResourceNames();
 		}
-		for (ReferenceMappingMetadata data:this.connectorMappings) {
-			if (data.getRefName().equals(referenceName)) {
-				return data.getResourceNames();
-			}
-		}
-		return Collections.EMPTY_LIST;
+		return Collections.emptyList();
 	}
     
     public void addConnectorMapping(ReferenceMappingMetadata data) {
-    	if (this.connectorMappings == null) {
-    		this.connectorMappings = new ArrayList<ReferenceMappingMetadata>();
-    	}
-    	this.connectorMappings.add(data);
+    	this.connectorMappings.getMap().put(data.getRefName(), data);
     }
     
     @ManagementProperty(description="Security refrence mappings")
@@ -300,7 +297,10 @@
         "value"
     })
     public static class ProblemMarker implements Serializable{
-        @XmlValue
+    	
+		private static final long serialVersionUID = -2939032879707369197L;
+		
+		@XmlValue
         protected String value;
         @XmlAttribute(name = "severity")
         protected String severity;

Modified: branches/JCA/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java
===================================================================
--- branches/JCA/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -40,7 +40,9 @@
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -138,6 +140,15 @@
 	private static Map<Class<?>, ValueCache<?>> valueMaps = new HashMap<Class<?>, ValueCache<?>>(128); 
 
 	public static final int MAX_STRING_LENGTH = 4000;
+	
+	public static final class DataTypeAliases {
+		public static final String VARCHAR = "varchar"; //$NON-NLS-1$
+		public static final String TINYINT = "tinyint"; //$NON-NLS-1$
+		public static final String SMALLINT = "smallint"; //$NON-NLS-1$
+		public static final String BIGINT = "bigint"; //$NON-NLS-1$
+		public static final String REAL = "real"; //$NON-NLS-1$
+		public static final String DECIMAL = "decimal"; //$NON-NLS-1$
+	}
 
 	public static final class DefaultDataTypes {
 		public static final String STRING = "string"; //$NON-NLS-1$
@@ -217,7 +228,7 @@
 	/** Base data type names and classes, Type class --> Type name */
 	private static Map<Class, String> dataTypeClasses = new LinkedHashMap<Class, String>(128);
 
-	private static Set<String> DATA_TYPE_NAMES = Collections.unmodifiableSet(dataTypeNames.keySet());
+	private static Set<String> DATA_TYPE_NAMES;
 
 	private static Set<Class> DATA_TYPE_CLASSES = Collections.unmodifiableSet(dataTypeClasses.keySet());
 
@@ -491,6 +502,13 @@
 		DataTypeManager.addDataType(DefaultDataTypes.OBJECT, DefaultDataClasses.OBJECT);
 		DataTypeManager.addDataType(DefaultDataTypes.NULL, DefaultDataClasses.NULL);
 		DataTypeManager.addDataType(DefaultDataTypes.BLOB, DefaultDataClasses.BLOB);
+		DATA_TYPE_NAMES = Collections.unmodifiableSet(new LinkedHashSet<String>(dataTypeNames.keySet()));
+		dataTypeNames.put(DataTypeAliases.BIGINT, DefaultDataClasses.LONG);
+		dataTypeNames.put(DataTypeAliases.DECIMAL, DefaultDataClasses.BIG_DECIMAL);
+		dataTypeNames.put(DataTypeAliases.REAL, DefaultDataClasses.FLOAT);
+		dataTypeNames.put(DataTypeAliases.SMALLINT, DefaultDataClasses.SHORT);
+		dataTypeNames.put(DataTypeAliases.TINYINT, DefaultDataClasses.BYTE);
+		dataTypeNames.put(DataTypeAliases.VARCHAR, DefaultDataClasses.STRING);
 		
 		if (USE_VALUE_CACHE) {
 			valueMaps.put(DefaultDataClasses.BOOLEAN, new ValueCache<Boolean>() {

Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/language/Comparison.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/language/Comparison.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/language/Comparison.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,8 +22,8 @@
 
 package org.teiid.connector.language;
 
+import org.teiid.connector.language.SQLReservedWords.Tokens;
 import org.teiid.connector.visitor.framework.LanguageObjectVisitor;
-import org.teiid.connector.visitor.util.SQLReservedWords;
 
 /**
  * Represents a comparison between two expressions connected with
@@ -32,12 +32,12 @@
 public class Comparison extends Condition implements Predicate {
 
 	public enum Operator {
-		EQ(SQLReservedWords.EQ),
-		NE(SQLReservedWords.NE),
-		LT(SQLReservedWords.LT),
-		LE(SQLReservedWords.LE),
-		GT(SQLReservedWords.GT),
-		GE(SQLReservedWords.GE);
+		EQ(Tokens.EQ),
+		NE(Tokens.NE),
+		LT(Tokens.LT),
+		LE(Tokens.LE),
+		GT(Tokens.GT),
+		GE(Tokens.GE);
 		
 		private String toString;
 		Operator(String toString) {

Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/language/LanguageFactory.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/language/LanguageFactory.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/language/LanguageFactory.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -155,12 +155,15 @@
     }
 
     public SearchedCase createSearchedCaseExpression(
-        List<? extends Condition> whenExpressions,
-        List<? extends Expression> thenExpressions,
+        List<SearchedWhenClause> cases,
         Expression elseExpression,
         Class<?> type) {
-        return new SearchedCase(new ArrayList<Condition>(whenExpressions), new ArrayList<Expression>(thenExpressions), elseExpression, type);
+        return new SearchedCase(cases, elseExpression, type);
     }
+    
+    public SearchedWhenClause createSearchedWhenCondition(Condition condition, Expression result) {
+    	return new SearchedWhenClause(condition, result);
+    }
 
     public DerivedColumn createSelectSymbol(String name, Expression expression) {
         return new DerivedColumn(name, expression);

Copied: branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SQLReservedWords.java (from rev 1878, branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLReservedWords.java)
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SQLReservedWords.java	                        (rev 0)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SQLReservedWords.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -0,0 +1,323 @@
+/*
+ * 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.connector.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 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 ALTER = "ALTER"; //$NON-NLS-1$
+    public static final String AND = "AND"; //$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 ATOMIC = "ATOMIC"; //$NON-NLS-1$
+    public static final String AUTHORIZATION = "autorization"; //$NON-NLS-1$
+	public static final String AVG = "AVG"; //$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 BIGDECIMAL = "BIGDECIMAL"; //$NON-NLS-1$
+    public static final String BIGINT = "BIGINT"; //$NON-NLS-1$
+	public static final String BIGINTEGER = "BIGINTEGER"; //$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 BREAK = "BREAK"; //$NON-NLS-1$
+	public static final String BY = "BY"; //$NON-NLS-1$
+    public static final String BYTE = "BYTE"; //$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 COUNT = "COUNT"; //$NON-NLS-1$
+	public static final String CORRESPONDING = "CORRESPONDING"; //$NON-NLS-1$
+    public static final String CRITERIA = "CRITERIA"; //$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 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 DEBUG = "DEBUG"; //$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 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 EACH = "EACH"; //$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 ERROR = "ERROR";	 //$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 FN = "FN"; //$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 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 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 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 LIMIT = "LIMIT"; //$NON-NLS-1$
+    public static final String LOCAL = "LOCAL"; //$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 MATCH = "MATCH"; //$NON-NLS-1$
+    public static final String MAX = "MAX"; //$NON-NLS-1$
+	public static final String MIN = "MIN"; //$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 NATURAL = "NATURAL"; //$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 NOCACHE = "NOCACHE"; //$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 OBJECT = "OBJECT"; //$NON-NLS-1$
+	public static final String OF = "OF"; //$NON-NLS-1$
+	public static final String OJ = "OJ"; //$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 PLANONLY = "PLANONLY"; //$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 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 = "ROWS"; //$NON-NLS-1$
+    public static final String SCROLL = "ROWS"; //$NON-NLS-1$
+    public static final String SEARCH = "ROWS"; //$NON-NLS-1$
+    public static final String SECOND = "ROWS"; //$NON-NLS-1$
+	public static final String SELECT = "SELECT"; //$NON-NLS-1$
+    public static final String SENSITIVE = "ROWS"; //$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 SHOWPLAN = "SHOWPLAN"; //$NON-NLS-1$
+    public static final String SIILAR = "ROWS"; //$NON-NLS-1$
+    public static final String SMALLINT = "ROWS"; //$NON-NLS-1$
+    public static final String SOME = "SOME"; //$NON-NLS-1$
+    public static final String SPECIFIC = "ROWS"; //$NON-NLS-1$
+    public static final String SQL = "ROWS"; //$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 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 START = "START"; //$NON-NLS-1$
+    public static final String STATIC = "STATIC"; //$NON-NLS-1$
+    public static final String STRING = "STRING"; //$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 SUM = "SUM"; //$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 TIMESTAMPADD = "TIMESTAMPADD"; //$NON-NLS-1$
+    public static final String TIMESTAMPDIFF = "TIMESTAMPDIFF"; //$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 TRAILING = "TRAILING"; //$NON-NLS-1$
+	public static final String TRANSLATE = "TRANSLATE";	 //$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 VIRTUAL = "VIRTUAL"; //$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 WHILE = "WHILE"; //$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 XML = "XML"; //$NON-NLS-1$
+    public static final String YEAR = "YEAR"; //$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 {
+					RESERVED_WORDS.add((String)field.get(null));
+				} 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: branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedCase.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedCase.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedCase.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -32,14 +32,12 @@
  */
 public class SearchedCase extends BaseLanguageObject implements Expression {
 	
-    private List<Condition> whenConditions;
-    private List<Expression> thenExpressions;
+    private List<SearchedWhenClause> cases;
     private Expression elseExpression;
     private Class<?> type;
     
-    public SearchedCase(List<Condition> whens, List<Expression> thens, Expression elseExpression, Class<?> type) {
-        this.whenConditions = whens;
-        this.thenExpressions = thens;
+    public SearchedCase(List<SearchedWhenClause> cases, Expression elseExpression, Class<?> type) {
+        this.cases = cases;
         this.elseExpression = elseExpression;
         this.type = type;
     }
@@ -48,14 +46,10 @@
         return elseExpression;
     }
     
-    public List<Expression> getThenExpressions() {
-		return thenExpressions;
+    public List<SearchedWhenClause> getCases() {
+		return cases;
 	}
     
-    public List<Condition> getWhenConditions() {
-		return whenConditions;
-	}
-    
     public void acceptVisitor(LanguageObjectVisitor visitor) {
         visitor.visit(this);
     }

Added: branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedWhenClause.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedWhenClause.java	                        (rev 0)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedWhenClause.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -0,0 +1,57 @@
+/*
+ * 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.connector.language;
+
+import org.teiid.connector.visitor.framework.LanguageObjectVisitor;
+
+public class SearchedWhenClause extends BaseLanguageObject {
+
+	private Condition condition;
+	private Expression result;
+	
+	public SearchedWhenClause(Condition condition, Expression result) {
+		this.condition = condition;
+		this.result = result;
+	}
+
+	public Condition getCondition() {
+		return condition;
+	}
+
+	public Expression getResult() {
+		return result;
+	}
+
+	public void setCondition(Condition symbol) {
+		this.condition = symbol;
+	}
+
+	public void setResult(Expression value) {
+		this.result = value;
+	}
+
+	public void acceptVisitor(LanguageObjectVisitor visitor) {
+		visitor.visit(this);
+	}
+
+}


Property changes on: branches/JCA/connector-api/src/main/java/org/teiid/connector/language/SearchedWhenClause.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/AbstractLanguageVisitor.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/AbstractLanguageVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/AbstractLanguageVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -51,6 +51,7 @@
 import org.teiid.connector.language.OrderBy;
 import org.teiid.connector.language.ScalarSubquery;
 import org.teiid.connector.language.SearchedCase;
+import org.teiid.connector.language.SearchedWhenClause;
 import org.teiid.connector.language.Select;
 import org.teiid.connector.language.SetClause;
 import org.teiid.connector.language.SetQuery;
@@ -144,4 +145,5 @@
     public void visit(Update obj) {}
     public void visit(SetQuery obj) {}
     public void visit(SetClause obj) {}
+    public void visit(SearchedWhenClause obj) {}
 }

Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/DelegatingHierarchyVisitor.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/DelegatingHierarchyVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/DelegatingHierarchyVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -49,6 +49,7 @@
 import org.teiid.connector.language.OrderBy;
 import org.teiid.connector.language.ScalarSubquery;
 import org.teiid.connector.language.SearchedCase;
+import org.teiid.connector.language.SearchedWhenClause;
 import org.teiid.connector.language.Select;
 import org.teiid.connector.language.SetClause;
 import org.teiid.connector.language.SetQuery;
@@ -383,6 +384,17 @@
             postVisitor.visit(obj);
         }
     }
+    
+    @Override
+    public void visit(SearchedWhenClause obj) {
+    	if (preVisitor != null) {
+            preVisitor.visit(obj);
+        }
+        super.visit(obj);
+        if (postVisitor != null) {
+            postVisitor.visit(obj);
+        }
+    }
         
     /** 
      * This utility method can be used to execute the behaviorVisitor in a pre-order walk

Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/HierarchyVisitor.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/HierarchyVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/HierarchyVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -44,6 +44,7 @@
 import org.teiid.connector.language.QueryExpression;
 import org.teiid.connector.language.ScalarSubquery;
 import org.teiid.connector.language.SearchedCase;
+import org.teiid.connector.language.SearchedWhenClause;
 import org.teiid.connector.language.Select;
 import org.teiid.connector.language.SetClause;
 import org.teiid.connector.language.SetQuery;
@@ -173,13 +174,16 @@
     }
     
     public void visit(SearchedCase obj) {
-        for (int i = 0; i < obj.getWhenConditions().size(); i++) {
-            visitNode(obj.getWhenConditions().get(i));
-            visitNode(obj.getThenExpressions().get(i));
-        }
+    	visitNodes(obj.getCases());
         visitNode(obj.getElseExpression());
     }
     
+    @Override
+    public void visit(SearchedWhenClause obj) {
+    	visitNode(obj.getCondition());
+    	visitNode(obj.getResult());
+    }
+    
     public void visit(DerivedColumn obj) {
         visitNode(obj.getExpression());
     }

Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/LanguageObjectVisitor.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/LanguageObjectVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/framework/LanguageObjectVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -60,4 +60,5 @@
     public void visit(Update obj);
     public void visit(SetQuery obj);
     public void visit(SetClause obj);
+    public void visit(SearchedWhenClause obj);
 }

Modified: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/CollectorVisitor.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/CollectorVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/CollectorVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -54,6 +54,7 @@
 import org.teiid.connector.language.OrderBy;
 import org.teiid.connector.language.ScalarSubquery;
 import org.teiid.connector.language.SearchedCase;
+import org.teiid.connector.language.SearchedWhenClause;
 import org.teiid.connector.language.Select;
 import org.teiid.connector.language.SetClause;
 import org.teiid.connector.language.SetQuery;
@@ -222,6 +223,11 @@
     public void visit(SetClause obj) {
         checkInstance(obj);
     }
+    
+    @Override
+    public void visit(SearchedWhenClause obj) {
+    	checkInstance(obj);    	
+    }
 
     /**
      * This is a utility method to instantiate and run the visitor in conjunction 

Deleted: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLReservedWords.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLReservedWords.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLReservedWords.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -1,191 +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.connector.visitor.util;
-
-import java.util.HashSet;
-import java.util.Set;
-
-public class SQLReservedWords {
-
-    public static final String ANY = "ANY"; //$NON-NLS-1$
-    public static final String ALL = "ALL"; //$NON-NLS-1$
-    public static final String ALL_COLS = "*"; //$NON-NLS-1$
-    public static final String AND = "AND"; //$NON-NLS-1$
-    public static final String AS = "AS"; //$NON-NLS-1$
-    public static final String ASC = "ASC"; //$NON-NLS-1$
-	public static final String AVG = "AVG"; //$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 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 BY = "BY"; //$NON-NLS-1$
-    public static final String BYTE = "BYTE"; //$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 CHAR = "CHAR"; //$NON-NLS-1$
-    public static final String CONVERT = "CONVERT"; //$NON-NLS-1$
-    public static final String CONTINUE = "CONTINUE"; //$NON-NLS-1$
-	public static final String COUNT = "COUNT"; //$NON-NLS-1$
-    public static final String CRITERIA = "CRITERIA"; //$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 DATE = "DATE"; //$NON-NLS-1$
-    public static final String DEBUG = "DEBUG"; //$NON-NLS-1$
-    public static final String DECLARE = "DECLARE";     //$NON-NLS-1$
-	public static final String DELETE = "DELETE"; //$NON-NLS-1$
-    public static final String DESC = "DESC"; //$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 ELSE = "ELSE";	 //$NON-NLS-1$
-	public static final String END = "END"; //$NON-NLS-1$
-	public static final String ERROR = "ERROR";	 //$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 FALSE = "FALSE"; //$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 FROM = "FROM"; //$NON-NLS-1$
-    public static final String FULL = "FULL"; //$NON-NLS-1$
-	public static final String GROUP = "GROUP"; //$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 IF = "IF";     //$NON-NLS-1$
-    public static final String IN = "IN"; //$NON-NLS-1$
-    public static final String INNER = "INNER"; //$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 INTO = "INTO"; //$NON-NLS-1$
-    public static final String IS = "IS";     //$NON-NLS-1$
-    public static final String JOIN = "JOIN"; //$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 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 MIN = "MIN"; //$NON-NLS-1$
-	public static final String MAX = "MAX"; //$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 OBJECT = "OBJECT"; //$NON-NLS-1$
-	public static final String ON = "ON"; //$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 OPTION = "OPTION"; //$NON-NLS-1$
-    public static final String OUTER = "OUTER"; //$NON-NLS-1$
-    public static final String PROCEDURE = "PROCEDURE"; //$NON-NLS-1$
-    public static final String RIGHT = "RIGHT"; //$NON-NLS-1$
-	public static final String SELECT = "SELECT"; //$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 SHOWPLAN = "SHOWPLAN"; //$NON-NLS-1$
-    public static final String SOME = "SOME"; //$NON-NLS-1$
-    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 STRING = "STRING"; //$NON-NLS-1$
-	public static final String SUM = "SUM"; //$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 TIMESTAMPADD = "TIMESTAMPADD"; //$NON-NLS-1$
-    public static final String TIMESTAMPDIFF = "TIMESTAMPDIFF"; //$NON-NLS-1$
-	public static final String TRANSLATE = "TRANSLATE";	 //$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 UNKNOWN = "UNKNOWN"; //$NON-NLS-1$
-	public static final String UPDATE = "UPDATE"; //$NON-NLS-1$
-	public static final String USING = "USING";	 //$NON-NLS-1$
-    public static final String VALUES = "VALUES"; //$NON-NLS-1$
-    public static final String VIRTUAL = "VIRTUAL"; //$NON-NLS-1$
-    public static final String WHEN = "WHEN";     //$NON-NLS-1$
-    public static final String WITH = "WITH";     //$NON-NLS-1$
-	public static final String WHERE = "WHERE"; //$NON-NLS-1$
-    public static final String WHILE = "WHILE"; //$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 static final String[] ALL_WORDS = new String[] {ALL, ALL_COLS, AND, ANY, AS, ASC, AVG, BEGIN, BETWEEN, BIGINTEGER,
-        BIGDECIMAL, BREAK, BY, BYTE, CASE, CAST, CHAR, CONVERT, CONTINUE, COUNT, CREATE, CRITERIA, CROSS, DATE, DEBUG, DECLARE,
-        DELETE, DESC, DISTINCT, DOUBLE, ELSE, END, ERROR, ESCAPE, EXCEPT, EXEC, EXECUTE, EXISTS, FALSE, FLOAT, FOR, FROM, FULL,
-        GROUP, HAS, HAVING, IF, IN, INNER, INSERT, INTEGER, INTERSECT, INTO, IS, JOIN, LEFT, LIKE, LONG, LOOP, MAKEDEP, MIN, MAX,
-        NOT, NULL, OBJECT, ON, OR, ORDER, OPTION, OUTER, PROCEDURE, RIGHT, SELECT, SET, SHORT, SHOWPLAN, SOME,
-        SQL_TSI_FRAC_SECOND, SQL_TSI_SECOND, SQL_TSI_MINUTE, SQL_TSI_HOUR, SQL_TSI_DAY, SQL_TSI_WEEK, SQL_TSI_MONTH,
-        SQL_TSI_QUARTER, SQL_TSI_YEAR, STRING, SUM, THEN, TIME, TIMESTAMP, TIMESTAMPADD, TIMESTAMPDIFF, TRANSLATE, TRUE, UNION,
-        UNKNOWN, UPDATE, USING, VALUES, VIRTUAL, WHEN, WITH, WHERE, WHILE,};
-
-    /**
-     * Set of CAPITALIZED reserved words for checking whether a string is a reserved word.
-     */
-    private static final Set RESERVED_WORDS = new HashSet();
-
-    // Initialize RESERVED_WORDS set
-    static {
-        // Iterate through the reserved words and capitalize all of them
-        for (int i = 0; i != SQLReservedWords.ALL_WORDS.length; ++i) {
-            String reservedWord = SQLReservedWords.ALL_WORDS[i];
-            SQLReservedWords.RESERVED_WORDS.add(reservedWord.toUpperCase());
-        }
-    }
-
-    /** 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: branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLStringVisitor.java
===================================================================
--- branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLStringVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLStringVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -55,8 +55,10 @@
 import org.teiid.connector.language.Not;
 import org.teiid.connector.language.OrderBy;
 import org.teiid.connector.language.QueryExpression;
+import org.teiid.connector.language.SQLReservedWords;
 import org.teiid.connector.language.ScalarSubquery;
 import org.teiid.connector.language.SearchedCase;
+import org.teiid.connector.language.SearchedWhenClause;
 import org.teiid.connector.language.Select;
 import org.teiid.connector.language.SetClause;
 import org.teiid.connector.language.SetQuery;
@@ -66,6 +68,7 @@
 import org.teiid.connector.language.TableReference;
 import org.teiid.connector.language.Update;
 import org.teiid.connector.language.Argument.Direction;
+import org.teiid.connector.language.SQLReservedWords.Tokens;
 import org.teiid.connector.language.SortSpecification.Ordering;
 import org.teiid.connector.metadata.runtime.AbstractMetadataRecord;
 import org.teiid.connector.visitor.framework.AbstractLanguageVisitor;
@@ -121,8 +124,8 @@
         if (items != null && items.size() != 0) {
             append(items.get(0));
             for (int i = 1; i < items.size(); i++) {
-                buffer.append(SQLReservedWords.COMMA)
-                      .append(SQLReservedWords.SPACE);
+                buffer.append(Tokens.COMMA)
+                      .append(Tokens.SPACE);
                 append(items.get(i));
             }
         }
@@ -137,8 +140,8 @@
         if (items != null && items.length != 0) {
             append(items[0]);
             for (int i = 1; i < items.length; i++) {
-                buffer.append(SQLReservedWords.COMMA)
-                      .append(SQLReservedWords.SPACE);
+                buffer.append(Tokens.COMMA)
+                      .append(Tokens.SPACE);
                 append(items[i]);
             }
         }
@@ -159,26 +162,26 @@
     
     public void visit(AggregateFunction obj) {
         buffer.append(obj.getName())
-              .append(SQLReservedWords.LPAREN);
+              .append(Tokens.LPAREN);
         
         if ( obj.isDistinct()) {
             buffer.append(SQLReservedWords.DISTINCT)
-                  .append(SQLReservedWords.SPACE);
+                  .append(Tokens.SPACE);
         }
         
         if (obj.getExpression() == null) {
-             buffer.append(SQLReservedWords.ALL_COLS);
+             buffer.append(Tokens.ALL_COLS);
         } else {
             append(obj.getExpression());
         }
-        buffer.append(SQLReservedWords.RPAREN);
+        buffer.append(Tokens.RPAREN);
     }
 
     public void visit(Comparison obj) {
         append(obj.getLeftExpression());
-        buffer.append(SQLReservedWords.SPACE);
+        buffer.append(Tokens.SPACE);
         buffer.append(obj.getOperator());
-        buffer.append(SQLReservedWords.SPACE);
+        buffer.append(Tokens.SPACE);
         append(obj.getRightExpression());
     }
 
@@ -186,9 +189,9 @@
         String opString = obj.getOperator().toString();
 
         appendNestedCondition(obj, obj.getLeftCondition());
-	    buffer.append(SQLReservedWords.SPACE)
+	    buffer.append(Tokens.SPACE)
 	          .append(opString)
-	          .append(SQLReservedWords.SPACE);
+	          .append(Tokens.SPACE);
         appendNestedCondition(obj, obj.getRightCondition());
     }
     
@@ -196,9 +199,9 @@
     	if (condition instanceof AndOr) {
     		AndOr nested = (AndOr)condition;
     		if (nested.getOperator() != parent.getOperator()) {
-    			buffer.append(SQLReservedWords.LPAREN);
+    			buffer.append(Tokens.LPAREN);
     			append(condition);
-    			buffer.append(SQLReservedWords.RPAREN);
+    			buffer.append(Tokens.RPAREN);
     			return;
     		}
     	}
@@ -210,15 +213,15 @@
      */
     public void visit(Delete obj) {
         buffer.append(SQLReservedWords.DELETE)
-              .append(SQLReservedWords.SPACE);
+              .append(Tokens.SPACE);
         buffer.append(getSourceComment(obj));
         buffer.append(SQLReservedWords.FROM)
-              .append(SQLReservedWords.SPACE);
+              .append(Tokens.SPACE);
         append(obj.getTable());
         if (obj.getWhere() != null) {
-            buffer.append(SQLReservedWords.SPACE)
+            buffer.append(Tokens.SPACE)
                   .append(SQLReservedWords.WHERE)
-                  .append(SQLReservedWords.SPACE);
+                  .append(Tokens.SPACE);
             append(obj.getWhere());
         }
     }
@@ -285,7 +288,7 @@
         // If not, do normal logic:  [group + "."] + element
         if(groupName != null) {
         	elementName.append(groupName);
-        	elementName.append(SQLReservedWords.DOT);
+        	elementName.append(Tokens.DOT);
         }
         elementName.append(elemShortName);
         return elementName.toString();
@@ -309,7 +312,7 @@
      */
     public void visit(Call obj) {              
         buffer.append(SQLReservedWords.EXEC)
-              .append(SQLReservedWords.SPACE);
+              .append(Tokens.SPACE);
         
         if(obj.getMetadataObject() != null) {
             buffer.append(getName(obj.getMetadataObject()));                         
@@ -317,7 +320,7 @@
             buffer.append(obj.getProcedureName());
         }
               
-        buffer.append(SQLReservedWords.LPAREN);
+        buffer.append(Tokens.LPAREN);
         final List<Argument> params = obj.getArguments();
         if (params != null && params.size() != 0) {
             Argument param = null;
@@ -325,14 +328,14 @@
                 param = params.get(i);
                 if (param.getDirection() == Direction.IN || param.getDirection() == Direction.INOUT) {
                     if (i != 0) {
-                        buffer.append(SQLReservedWords.COMMA)
-                              .append(SQLReservedWords.SPACE);
+                        buffer.append(Tokens.COMMA)
+                              .append(Tokens.SPACE);
                     }
                     append(param);
                 }
             }
         }
-        buffer.append(SQLReservedWords.RPAREN);
+        buffer.append(Tokens.RPAREN);
     }
 
     /* 
@@ -340,10 +343,10 @@
      */
     public void visit(Exists obj) {
         buffer.append(SQLReservedWords.EXISTS)
-              .append(SQLReservedWords.SPACE)
-              .append(SQLReservedWords.LPAREN);
+              .append(Tokens.SPACE)
+              .append(Tokens.LPAREN);
         append(obj.getSubquery());
-        buffer.append(SQLReservedWords.RPAREN);
+        buffer.append(Tokens.RPAREN);
     }
     
     protected boolean isInfixFunction(String function) {
@@ -362,56 +365,56 @@
             Object typeValue = ((Literal)args.get(1)).getValue();
                
             buffer.append(name);
-            buffer.append(SQLReservedWords.LPAREN); 
+            buffer.append(Tokens.LPAREN); 
             
             append(args.get(0));
 
             if(name.equalsIgnoreCase(SQLReservedWords.CONVERT)) { 
-                buffer.append(SQLReservedWords.COMMA); 
-                buffer.append(SQLReservedWords.SPACE); 
+                buffer.append(Tokens.COMMA); 
+                buffer.append(Tokens.SPACE); 
             } else {
-                buffer.append(SQLReservedWords.SPACE); 
+                buffer.append(Tokens.SPACE); 
                 buffer.append(SQLReservedWords.AS); 
-                buffer.append(SQLReservedWords.SPACE); 
+                buffer.append(Tokens.SPACE); 
             }
             buffer.append(typeValue);
-            buffer.append(SQLReservedWords.RPAREN); 
+            buffer.append(Tokens.RPAREN); 
         } else if(isInfixFunction(name)) { 
-            buffer.append(SQLReservedWords.LPAREN); 
+            buffer.append(Tokens.LPAREN); 
 
             if(args != null) {
                 for(int i=0; i<args.size(); i++) {
                     append(args.get(i));
                     if(i < (args.size()-1)) {
-                        buffer.append(SQLReservedWords.SPACE);
+                        buffer.append(Tokens.SPACE);
                         buffer.append(name);
-                        buffer.append(SQLReservedWords.SPACE);
+                        buffer.append(Tokens.SPACE);
                     }
                 }
             }
-            buffer.append(SQLReservedWords.RPAREN);
+            buffer.append(Tokens.RPAREN);
 
         } else if(name.equalsIgnoreCase(SQLReservedWords.TIMESTAMPADD) || name.equalsIgnoreCase(SQLReservedWords.TIMESTAMPDIFF)) {
             buffer.append(name);
-            buffer.append(SQLReservedWords.LPAREN); 
+            buffer.append(Tokens.LPAREN); 
 
             if(args != null && args.size() > 0) {
                 buffer.append(((Literal)args.get(0)).getValue());
 
                 for(int i=1; i<args.size(); i++) {
-                	buffer.append(SQLReservedWords.COMMA); 
-                    buffer.append(SQLReservedWords.SPACE);
+                	buffer.append(Tokens.COMMA); 
+                    buffer.append(Tokens.SPACE);
                 	append(args.get(i));
                 }
             }
-            buffer.append(SQLReservedWords.RPAREN);
+            buffer.append(Tokens.RPAREN);
 
         } else {
 
             buffer.append(obj.getName())
-                  .append(SQLReservedWords.LPAREN);
+                  .append(Tokens.LPAREN);
             append(obj.getParameters());
-            buffer.append(SQLReservedWords.RPAREN);
+            buffer.append(Tokens.RPAREN);
         }
     }
 
@@ -424,10 +427,10 @@
         }        
         
         if (obj.getCorrelationName() != null) {
-            buffer.append(SQLReservedWords.SPACE);
+            buffer.append(Tokens.SPACE);
             if (useAsInGroupAlias()){
                 buffer.append(SQLReservedWords.AS)
-                      .append(SQLReservedWords.SPACE);
+                      .append(Tokens.SPACE);
             }
         	buffer.append(obj.getCorrelationName());
         }
@@ -449,9 +452,9 @@
      */
     public void visit(GroupBy obj) {
         buffer.append(SQLReservedWords.GROUP)
-              .append(SQLReservedWords.SPACE)
+              .append(Tokens.SPACE)
               .append(SQLReservedWords.BY)
-              .append(SQLReservedWords.SPACE);
+              .append(Tokens.SPACE);
         append(obj.getElements());
     }
 
@@ -461,25 +464,25 @@
     public void visit(In obj) {
         append(obj.getLeftExpression());
         if (obj.isNegated()) {
-            buffer.append(SQLReservedWords.SPACE)
+            buffer.append(Tokens.SPACE)
                   .append(SQLReservedWords.NOT);
         }
-        buffer.append(SQLReservedWords.SPACE)
+        buffer.append(Tokens.SPACE)
               .append(SQLReservedWords.IN)
-              .append(SQLReservedWords.SPACE)
-              .append(SQLReservedWords.LPAREN);
+              .append(Tokens.SPACE)
+              .append(Tokens.LPAREN);
         append(obj.getRightExpressions());
-        buffer.append(SQLReservedWords.RPAREN);
+        buffer.append(Tokens.RPAREN);
     }
 
     public void visit(DerivedTable obj) {
-        buffer.append(SQLReservedWords.LPAREN);
+        buffer.append(Tokens.LPAREN);
     	append(obj.getQuery());
-        buffer.append(SQLReservedWords.RPAREN);
-        buffer.append(SQLReservedWords.SPACE);
+        buffer.append(Tokens.RPAREN);
+        buffer.append(Tokens.SPACE);
         if(useAsInGroupAlias()) {
             buffer.append(SQLReservedWords.AS);
-            buffer.append(SQLReservedWords.SPACE);
+            buffer.append(Tokens.SPACE);
         }
         buffer.append(obj.getCorrelationName());
     }
@@ -488,41 +491,41 @@
      * @see com.metamatrix.data.visitor.LanguageObjectVisitor#visit(org.teiid.connector.language.Insert)
      */
     public void visit(Insert obj) {
-    	buffer.append(SQLReservedWords.INSERT).append(SQLReservedWords.SPACE);
+    	buffer.append(SQLReservedWords.INSERT).append(Tokens.SPACE);
 		buffer.append(getSourceComment(obj));
-		buffer.append(SQLReservedWords.INTO).append(SQLReservedWords.SPACE);
+		buffer.append(SQLReservedWords.INTO).append(Tokens.SPACE);
 		append(obj.getTable());
-		buffer.append(SQLReservedWords.SPACE).append(SQLReservedWords.LPAREN);
+		buffer.append(Tokens.SPACE).append(Tokens.LPAREN);
 
 		int elementCount = obj.getColumns().size();
 		for (int i = 0; i < elementCount; i++) {
 			buffer.append(getElementName(obj.getColumns().get(i), false));
 			if (i < elementCount - 1) {
-				buffer.append(SQLReservedWords.COMMA);
-				buffer.append(SQLReservedWords.SPACE);
+				buffer.append(Tokens.COMMA);
+				buffer.append(Tokens.SPACE);
 			}
 		}
 
-		buffer.append(SQLReservedWords.RPAREN);
-        buffer.append(SQLReservedWords.SPACE);
+		buffer.append(Tokens.RPAREN);
+        buffer.append(Tokens.SPACE);
         append(obj.getValueSource());
     }
     
     @Override
 	public void visit(ExpressionValueSource obj) {
-		buffer.append(SQLReservedWords.VALUES).append(SQLReservedWords.SPACE).append(SQLReservedWords.LPAREN);
+		buffer.append(SQLReservedWords.VALUES).append(Tokens.SPACE).append(Tokens.LPAREN);
 		append(obj.getValues());
-		buffer.append(SQLReservedWords.RPAREN);
+		buffer.append(Tokens.RPAREN);
 	}
         
     public void visit(IsNull obj) {
         append(obj.getExpression());
-        buffer.append(SQLReservedWords.SPACE)
+        buffer.append(Tokens.SPACE)
               .append(SQLReservedWords.IS)
-              .append(SQLReservedWords.SPACE);
+              .append(Tokens.SPACE);
         if (obj.isNegated()) {
             buffer.append(SQLReservedWords.NOT)
-                  .append(SQLReservedWords.SPACE);
+                  .append(Tokens.SPACE);
         }
         buffer.append(SQLReservedWords.NULL);
     }
@@ -530,13 +533,13 @@
     public void visit(Join obj) {
         TableReference leftItem = obj.getLeftItem();
         if(useParensForJoins() && leftItem instanceof Join) {
-            buffer.append(SQLReservedWords.LPAREN);
+            buffer.append(Tokens.LPAREN);
             append(leftItem);
-            buffer.append(SQLReservedWords.RPAREN);
+            buffer.append(Tokens.RPAREN);
         } else {
             append(leftItem);
         }
-        buffer.append(SQLReservedWords.SPACE);
+        buffer.append(Tokens.SPACE);
         
         switch(obj.getJoinType()) {
             case CROSS_JOIN:
@@ -544,7 +547,7 @@
                 break;
             case FULL_OUTER_JOIN:
                 buffer.append(SQLReservedWords.FULL)
-                      .append(SQLReservedWords.SPACE)
+                      .append(Tokens.SPACE)
                       .append(SQLReservedWords.OUTER);
                 break;
             case INNER_JOIN:
@@ -552,34 +555,34 @@
                 break;
             case LEFT_OUTER_JOIN:
                 buffer.append(SQLReservedWords.LEFT)
-                      .append(SQLReservedWords.SPACE)
+                      .append(Tokens.SPACE)
                       .append(SQLReservedWords.OUTER);
                 break;
             case RIGHT_OUTER_JOIN:
                 buffer.append(SQLReservedWords.RIGHT)
-                      .append(SQLReservedWords.SPACE)
+                      .append(Tokens.SPACE)
                       .append(SQLReservedWords.OUTER);
                 break;
             default: buffer.append(UNDEFINED);
         }
-        buffer.append(SQLReservedWords.SPACE)
+        buffer.append(Tokens.SPACE)
               .append(SQLReservedWords.JOIN)
-              .append(SQLReservedWords.SPACE);
+              .append(Tokens.SPACE);
         
         TableReference rightItem = obj.getRightItem();
         if(rightItem instanceof Join && (useParensForJoins() || obj.getJoinType() == Join.JoinType.CROSS_JOIN)) {
-            buffer.append(SQLReservedWords.LPAREN);
+            buffer.append(Tokens.LPAREN);
             append(rightItem);
-            buffer.append(SQLReservedWords.RPAREN);
+            buffer.append(Tokens.RPAREN);
         } else {
             append(rightItem);
         }
         
         final Condition condition = obj.getCondition();
         if (condition != null) {
-            buffer.append(SQLReservedWords.SPACE)
+            buffer.append(Tokens.SPACE)
                   .append(SQLReservedWords.ON)
-                  .append(SQLReservedWords.SPACE);
+                  .append(Tokens.SPACE);
             append(condition);                    
         }        
     }
@@ -587,31 +590,31 @@
     public void visit(Like obj) {
         append(obj.getLeftExpression());
         if (obj.isNegated()) {
-            buffer.append(SQLReservedWords.SPACE)
+            buffer.append(Tokens.SPACE)
                   .append(SQLReservedWords.NOT);
         }
-        buffer.append(SQLReservedWords.SPACE)
+        buffer.append(Tokens.SPACE)
               .append(SQLReservedWords.LIKE)
-              .append(SQLReservedWords.SPACE);
+              .append(Tokens.SPACE);
         append(obj.getRightExpression());
         if (obj.getEscapeCharacter() != null) {
-            buffer.append(SQLReservedWords.SPACE)
+            buffer.append(Tokens.SPACE)
                   .append(SQLReservedWords.ESCAPE)
-                  .append(SQLReservedWords.SPACE)
-                  .append(SQLReservedWords.QUOTE)
+                  .append(Tokens.SPACE)
+                  .append(Tokens.QUOTE)
                   .append(obj.getEscapeCharacter().toString())
-                  .append(SQLReservedWords.QUOTE);
+                  .append(Tokens.QUOTE);
         }
         
     }
     
     public void visit(Limit obj) {
         buffer.append(SQLReservedWords.LIMIT)
-              .append(SQLReservedWords.SPACE);
+              .append(Tokens.SPACE);
         if (obj.getRowOffset() > 0) {
             buffer.append(obj.getRowOffset())
-                  .append(SQLReservedWords.COMMA)
-                  .append(SQLReservedWords.SPACE);
+                  .append(Tokens.COMMA)
+                  .append(Tokens.SPACE);
         }
         buffer.append(obj.getRowLimit());
     }
@@ -643,33 +646,33 @@
                       .append(val)
                       .append("'}"); //$NON-NLS-1$
             } else {
-                buffer.append(SQLReservedWords.QUOTE)
-                      .append(escapeString(val, SQLReservedWords.QUOTE))
-                      .append(SQLReservedWords.QUOTE);
+                buffer.append(Tokens.QUOTE)
+                      .append(escapeString(val, Tokens.QUOTE))
+                      .append(Tokens.QUOTE);
             }
         }
     }
 
     public void visit(Not obj) {
         buffer.append(SQLReservedWords.NOT)
-              .append(SQLReservedWords.SPACE)
-              .append(SQLReservedWords.LPAREN);
+              .append(Tokens.SPACE)
+              .append(Tokens.LPAREN);
         append(obj.getCriteria());
-        buffer.append(SQLReservedWords.RPAREN);
+        buffer.append(Tokens.RPAREN);
     }
 
     public void visit(OrderBy obj) {
         buffer.append(SQLReservedWords.ORDER)
-              .append(SQLReservedWords.SPACE)
+              .append(Tokens.SPACE)
               .append(SQLReservedWords.BY)
-              .append(SQLReservedWords.SPACE);
+              .append(Tokens.SPACE);
         append(obj.getSortSpecifications());
     }
 
     public void visit(SortSpecification obj) {
     	append(obj.getExpression());            
         if (obj.getOrdering() == Ordering.DESC) {
-            buffer.append(SQLReservedWords.SPACE)
+            buffer.append(Tokens.SPACE)
                   .append(SQLReservedWords.DESC);
         } // Don't print default "ASC"
     }
@@ -679,175 +682,177 @@
     }
 
     public void visit(Select obj) {
-		buffer.append(SQLReservedWords.SELECT).append(SQLReservedWords.SPACE);
+		buffer.append(SQLReservedWords.SELECT).append(Tokens.SPACE);
         buffer.append(getSourceComment(obj));
         if (obj.isDistinct()) {
-            buffer.append(SQLReservedWords.DISTINCT).append(SQLReservedWords.SPACE);
+            buffer.append(SQLReservedWords.DISTINCT).append(Tokens.SPACE);
         }
         if (useSelectLimit() && obj.getLimit() != null) {
             append(obj.getLimit());
-            buffer.append(SQLReservedWords.SPACE);
+            buffer.append(Tokens.SPACE);
         }
         append(obj.getDerivedColumns());
         if (obj.getFrom() != null) {
-        	buffer.append(SQLReservedWords.SPACE).append(SQLReservedWords.FROM).append(SQLReservedWords.SPACE);      
+        	buffer.append(Tokens.SPACE).append(SQLReservedWords.FROM).append(Tokens.SPACE);      
             append(obj.getFrom());
         }
         if (obj.getWhere() != null) {
-            buffer.append(SQLReservedWords.SPACE)
+            buffer.append(Tokens.SPACE)
                   .append(SQLReservedWords.WHERE)
-                  .append(SQLReservedWords.SPACE);
+                  .append(Tokens.SPACE);
             append(obj.getWhere());
         }
         if (obj.getGroupBy() != null) {
-            buffer.append(SQLReservedWords.SPACE);
+            buffer.append(Tokens.SPACE);
             append(obj.getGroupBy());
         }
         if (obj.getHaving() != null) {
-            buffer.append(SQLReservedWords.SPACE)
+            buffer.append(Tokens.SPACE)
                   .append(SQLReservedWords.HAVING)
-                  .append(SQLReservedWords.SPACE);
+                  .append(Tokens.SPACE);
             append(obj.getHaving());
         }
         if (obj.getOrderBy() != null) {
-            buffer.append(SQLReservedWords.SPACE);
+            buffer.append(Tokens.SPACE);
             append(obj.getOrderBy());
         }
         if (!useSelectLimit() && obj.getLimit() != null) {
-            buffer.append(SQLReservedWords.SPACE);
+            buffer.append(Tokens.SPACE);
             append(obj.getLimit());
         }
     }
 
     public void visit(SearchedCase obj) {
         buffer.append(SQLReservedWords.CASE);
-        final int whenCount = obj.getWhenConditions().size();
-        for (int i = 0; i < whenCount; i++) {
-            buffer.append(SQLReservedWords.SPACE)
-                  .append(SQLReservedWords.WHEN)
-                  .append(SQLReservedWords.SPACE);
-            append(obj.getWhenConditions().get(i));
-            buffer.append(SQLReservedWords.SPACE)
-                  .append(SQLReservedWords.THEN)
-                  .append(SQLReservedWords.SPACE);
-            append(obj.getThenExpressions().get(i));
-        }
+        for (SearchedWhenClause swc : obj.getCases()) {
+			append(swc);
+		}
         if (obj.getElseExpression() != null) {
-            buffer.append(SQLReservedWords.SPACE)
+            buffer.append(Tokens.SPACE)
                   .append(SQLReservedWords.ELSE)
-                  .append(SQLReservedWords.SPACE);
+                  .append(Tokens.SPACE);
             append(obj.getElseExpression());
         }
-        buffer.append(SQLReservedWords.SPACE)
+        buffer.append(Tokens.SPACE)
               .append(SQLReservedWords.END);
     }
+    
+    @Override
+    public void visit(SearchedWhenClause obj) {
+		buffer.append(Tokens.SPACE).append(SQLReservedWords.WHEN)
+				.append(Tokens.SPACE);
+		append(obj.getCondition());
+		buffer.append(Tokens.SPACE).append(SQLReservedWords.THEN)
+				.append(Tokens.SPACE);
+		append(obj.getResult());
+    }
 
     protected String getSourceComment(Command command) {
         return ""; //$NON-NLS-1$
     }
     
     public void visit(ScalarSubquery obj) {
-        buffer.append(SQLReservedWords.LPAREN);   
+        buffer.append(Tokens.LPAREN);   
         append(obj.getSubquery());     
-        buffer.append(SQLReservedWords.RPAREN);        
+        buffer.append(Tokens.RPAREN);        
     }
 
     public void visit(DerivedColumn obj) {
         append(obj.getExpression());
         if (obj.getAlias() != null) {
-            buffer.append(SQLReservedWords.SPACE)
+            buffer.append(Tokens.SPACE)
                   .append(SQLReservedWords.AS)
-                  .append(SQLReservedWords.SPACE)
+                  .append(Tokens.SPACE)
                   .append(obj.getAlias());
         }
     }
 
     public void visit(SubqueryComparison obj) {
         append(obj.getLeftExpression());
-        buffer.append(SQLReservedWords.SPACE);
+        buffer.append(Tokens.SPACE);
         
         switch(obj.getOperator()) {
-            case EQ: buffer.append(SQLReservedWords.EQ); break;
-            case GE: buffer.append(SQLReservedWords.GE); break;
-            case GT: buffer.append(SQLReservedWords.GT); break;
-            case LE: buffer.append(SQLReservedWords.LE); break;
-            case LT: buffer.append(SQLReservedWords.LT); break;
-            case NE: buffer.append(SQLReservedWords.NE); break;
+            case EQ: buffer.append(Tokens.EQ); break;
+            case GE: buffer.append(Tokens.GE); break;
+            case GT: buffer.append(Tokens.GT); break;
+            case LE: buffer.append(Tokens.LE); break;
+            case LT: buffer.append(Tokens.LT); break;
+            case NE: buffer.append(Tokens.NE); break;
             default: buffer.append(UNDEFINED);
         }
-        buffer.append(SQLReservedWords.SPACE);
+        buffer.append(Tokens.SPACE);
         switch(obj.getQuantifier()) {
             case ALL: buffer.append(SQLReservedWords.ALL); break;
             case SOME: buffer.append(SQLReservedWords.SOME); break;
             default: buffer.append(UNDEFINED);
         }
-        buffer.append(SQLReservedWords.SPACE);
-        buffer.append(SQLReservedWords.LPAREN);        
+        buffer.append(Tokens.SPACE);
+        buffer.append(Tokens.LPAREN);        
         append(obj.getSubquery());
-        buffer.append(SQLReservedWords.RPAREN);        
+        buffer.append(Tokens.RPAREN);        
     }
 
     public void visit(SubqueryIn obj) {
         append(obj.getLeftExpression());
         if (obj.isNegated()) {
-            buffer.append(SQLReservedWords.SPACE)
+            buffer.append(Tokens.SPACE)
                   .append(SQLReservedWords.NOT);
         }
-        buffer.append(SQLReservedWords.SPACE)
+        buffer.append(Tokens.SPACE)
               .append(SQLReservedWords.IN)
-              .append(SQLReservedWords.SPACE)
-              .append(SQLReservedWords.LPAREN);
+              .append(Tokens.SPACE)
+              .append(Tokens.LPAREN);
         append(obj.getSubquery());
-        buffer.append(SQLReservedWords.RPAREN);
+        buffer.append(Tokens.RPAREN);
     }
 
     public void visit(Update obj) {
         buffer.append(SQLReservedWords.UPDATE)
-              .append(SQLReservedWords.SPACE);
+              .append(Tokens.SPACE);
         buffer.append(getSourceComment(obj));
         append(obj.getTable());
-        buffer.append(SQLReservedWords.SPACE)
+        buffer.append(Tokens.SPACE)
               .append(SQLReservedWords.SET)
-              .append(SQLReservedWords.SPACE);
+              .append(Tokens.SPACE);
         append(obj.getChanges()); 
         if (obj.getWhere() != null) {
-            buffer.append(SQLReservedWords.SPACE)
+            buffer.append(Tokens.SPACE)
                   .append(SQLReservedWords.WHERE)
-                  .append(SQLReservedWords.SPACE);
+                  .append(Tokens.SPACE);
             append(obj.getWhere());
         }
     }
     
     public void visit(SetClause clause) {
         buffer.append(getElementName(clause.getSymbol(), false));
-        buffer.append(SQLReservedWords.SPACE).append(SQLReservedWords.EQ).append(SQLReservedWords.SPACE);
+        buffer.append(Tokens.SPACE).append(Tokens.EQ).append(Tokens.SPACE);
         append(clause.getValue());
     }
     
     public void visit(SetQuery obj) {
         appendSetQuery(obj, obj.getLeftQuery(), false);
         
-        buffer.append(SQLReservedWords.SPACE);
+        buffer.append(Tokens.SPACE);
         
         appendSetOperation(obj.getOperation());
 
         if(obj.isAll()) {
-            buffer.append(SQLReservedWords.SPACE);
+            buffer.append(Tokens.SPACE);
             buffer.append(SQLReservedWords.ALL);                
         }
-        buffer.append(SQLReservedWords.SPACE);
+        buffer.append(Tokens.SPACE);
 
         appendSetQuery(obj, obj.getRightQuery(), true);
         
         OrderBy orderBy = obj.getOrderBy();
         if(orderBy != null) {
-            buffer.append(SQLReservedWords.SPACE);
+            buffer.append(Tokens.SPACE);
             append(orderBy);
         }
 
         Limit limit = obj.getLimit();
         if(limit != null) {
-            buffer.append(SQLReservedWords.SPACE);
+            buffer.append(Tokens.SPACE);
             append(limit);
         }
     }
@@ -865,9 +870,9 @@
         		|| (right && obj instanceof SetQuery 
         				&& ((parent.isAll() && !((SetQuery)obj).isAll()) 
         						|| parent.getOperation() != ((SetQuery)obj).getOperation()))) {
-            buffer.append(SQLReservedWords.LPAREN);
+            buffer.append(Tokens.LPAREN);
             append(obj);
-            buffer.append(SQLReservedWords.RPAREN);
+            buffer.append(Tokens.RPAREN);
         } else {
         	if (!parent.isAll() && obj instanceof SetQuery) {
         		((SetQuery)obj).setAll(false);

Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/AddDiffModifier.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/AddDiffModifier.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/AddDiffModifier.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -34,7 +34,7 @@
 import org.teiid.connector.language.Function;
 import org.teiid.connector.language.LanguageFactory;
 import org.teiid.connector.language.Literal;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords;
 
 public class AddDiffModifier extends FunctionModifier {
 

Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -34,6 +34,7 @@
 import org.teiid.connector.language.Function;
 import org.teiid.connector.language.LanguageFactory;
 import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.SearchedWhenClause;
 import org.teiid.connector.language.AndOr.Operator;
 
 
@@ -56,7 +57,6 @@
     
     @Override
     public List<?> translate(Function function) {
-    	List<Condition> when = new ArrayList<Condition>();
         Expression a = function.getParameters().get(0);
         Expression b = function.getParameters().get(1);
         List<Condition> crits = new ArrayList<Condition>();
@@ -81,10 +81,9 @@
         	crit = crits.get(0);
         } else {
         	crit = langFactory.createAndOr(Operator.OR, crits.get(0), crits.get(1));
-        }
-        when.add(crit);
-        List<Expression> then = Arrays.asList((Expression)nullValue); 
-        return Arrays.asList(langFactory.createSearchedCaseExpression(when, then, function, TypeFacility.RUNTIME_TYPES.STRING));
+        }
+        List<SearchedWhenClause> cases = Arrays.asList(langFactory.createSearchedWhenCondition(crit, nullValue));
+        return Arrays.asList(langFactory.createSearchedCaseExpression(cases, function, TypeFacility.RUNTIME_TYPES.STRING));
     }
     
     private boolean isNotNull(Expression expr) {

Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -47,20 +47,20 @@
 import org.teiid.connector.jdbc.translator.FunctionModifier;
 import org.teiid.connector.jdbc.translator.LocateFunctionModifier;
 import org.teiid.connector.jdbc.translator.Translator;
+import org.teiid.connector.language.ColumnReference;
 import org.teiid.connector.language.Command;
-import org.teiid.connector.language.ColumnReference;
+import org.teiid.connector.language.DerivedColumn;
+import org.teiid.connector.language.ExpressionValueSource;
 import org.teiid.connector.language.Function;
-import org.teiid.connector.language.NamedTable;
 import org.teiid.connector.language.Insert;
-import org.teiid.connector.language.ExpressionValueSource;
 import org.teiid.connector.language.Limit;
+import org.teiid.connector.language.NamedTable;
+import org.teiid.connector.language.QueryExpression;
 import org.teiid.connector.language.Select;
-import org.teiid.connector.language.QueryExpression;
-import org.teiid.connector.language.DerivedColumn;
+import org.teiid.connector.language.SQLReservedWords.Tokens;
 import org.teiid.connector.language.SetQuery.Operation;
 import org.teiid.connector.metadata.runtime.Column;
 import org.teiid.connector.visitor.util.CollectorVisitor;
-import org.teiid.connector.visitor.util.SQLReservedWords;
 
 public class OracleSQLTranslator extends Translator {
 
@@ -193,7 +193,7 @@
     		
             String sequence = name.substring(seqIndex + SEQUENCE.length());
             
-            int delimiterIndex = sequence.indexOf(SQLReservedWords.DOT);
+            int delimiterIndex = sequence.indexOf(Tokens.DOT);
             if (delimiterIndex == -1) {
             	throw new ConnectorException("Invalid name in source sequence format.  Expected <element name>" + SEQUENCE + "<sequence name>.<sequence value>, but was " + name); //$NON-NLS-1$ //$NON-NLS-2$
             }
@@ -329,7 +329,7 @@
         if (useIndex >= 0) {
         	String name = element.substring(0, useIndex);
         	if (group != null) {
-        		return group + SQLReservedWords.DOT + name;
+        		return group + Tokens.DOT + name;
         	}
         	return name;
         }

Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -49,7 +49,7 @@
 import org.teiid.connector.language.LanguageObject;
 import org.teiid.connector.language.Limit;
 import org.teiid.connector.language.Literal;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords;
 
 
 

Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -30,7 +30,8 @@
 import org.teiid.connector.api.SourceSystemFunctions;
 import org.teiid.connector.language.Expression;
 import org.teiid.connector.language.Function;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords.Tokens;
 
 
 /**
@@ -73,13 +74,13 @@
         List<Object> objs = new ArrayList<Object>();
         objs.add("EXTRACT("); //$NON-NLS-1$
         objs.add(FUNCTION_PART_MAP.get(function.getName().toLowerCase()));
-        objs.add(SQLReservedWords.SPACE);
+        objs.add(Tokens.SPACE);
         objs.add(SQLReservedWords.FROM); 
-        objs.add(SQLReservedWords.SPACE);               
+        objs.add(Tokens.SPACE);               
         objs.add(args.get(0));
-        objs.add(SQLReservedWords.RPAREN);
+        objs.add(Tokens.RPAREN);
         if (function.getName().toLowerCase().equals(SourceSystemFunctions.DAYOFWEEK)) {
-        	objs.add(0, SQLReservedWords.LPAREN);
+        	objs.add(0, Tokens.LPAREN);
         	objs.add(" + 1)"); //$NON-NLS-1$
         }
         return objs;

Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -165,13 +165,13 @@
 				literal.setValue(1);
 			}
 		} else {
-			Comparison[] whenExpr = {langFactory.createCompareCriteria(
+			Comparison whenExpr = langFactory.createCompareCriteria(
 					Operator.LT, 
 					startIndex, 
 					langFactory.createLiteral(1, Integer.class)
-				)};
-			Literal[] thenExpr = {langFactory.createLiteral(1, Integer.class)};
-			startIndex = langFactory.createSearchedCaseExpression(Arrays.asList(whenExpr), Arrays.asList(thenExpr), startIndex, TypeFacility.RUNTIME_TYPES.INTEGER);
+				);
+			Literal thenExpr = langFactory.createLiteral(1, Integer.class);
+			startIndex = langFactory.createSearchedCaseExpression(Arrays.asList(langFactory.createSearchedWhenCondition(whenExpr, thenExpr)), startIndex, TypeFacility.RUNTIME_TYPES.INTEGER);
 		}
 		return startIndex;
 	}

Modified: branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -48,13 +48,14 @@
 import org.teiid.connector.language.LanguageObject;
 import org.teiid.connector.language.Like;
 import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.SQLReservedWords;
 import org.teiid.connector.language.SearchedCase;
 import org.teiid.connector.language.SetClause;
 import org.teiid.connector.language.SortSpecification;
 import org.teiid.connector.language.Argument.Direction;
+import org.teiid.connector.language.SQLReservedWords.Tokens;
 import org.teiid.connector.language.SetQuery.Operation;
 import org.teiid.connector.language.SortSpecification.Ordering;
-import org.teiid.connector.visitor.util.SQLReservedWords;
 import org.teiid.connector.visitor.util.SQLStringVisitor;
 
 
@@ -188,9 +189,9 @@
             } else {
                 // If obj is string, toSting() will not create a new String 
                 // object, it returns it self, so new object creation. 
-                valuesbuffer.append(SQLReservedWords.QUOTE)
-                      .append(escapeString(obj.toString(), SQLReservedWords.QUOTE))
-                      .append(SQLReservedWords.QUOTE);
+                valuesbuffer.append(Tokens.QUOTE)
+                      .append(escapeString(obj.toString(), Tokens.QUOTE))
+                      .append(Tokens.QUOTE);
             }
         }        
     }

Modified: branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -29,7 +29,7 @@
 import org.teiid.connector.jdbc.translator.EscapeSyntaxModifier;
 import org.teiid.connector.language.Function;
 import org.teiid.connector.language.Literal;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords;
 
 import junit.framework.TestCase;
 

Modified: branches/JCA/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/NameUtil.java
===================================================================
--- branches/JCA/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/NameUtil.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/NameUtil.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -7,7 +7,7 @@
  */
 package com.metamatrix.connector.salesforce;
 
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords;
 
 public class NameUtil {
 

Modified: branches/JCA/documentation/reference/src/main/docbook/en-US/content/procedures.xml
===================================================================
--- branches/JCA/documentation/reference/src/main/docbook/en-US/content/procedures.xml	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/documentation/reference/src/main/docbook/en-US/content/procedures.xml	2010-03-02 14:32:21 UTC (rev 1886)
@@ -437,9 +437,12 @@
       <para>You can use a number of special variables when defining your update procedure.</para>
       <sect3 id="input_variables">
         <title>INPUT Variables</title>
-        <para>Every attribute in the view whose UPDATE and INSERT transformations you are defining has an equivalent variable named INPUT.&lt;column_name&gt;</para>
+        <para>Every attribute in the view whose UPDATE and INSERT transformations you are defining has an equivalent variable named INPUTS.&lt;column_name&gt;</para>
         <para>When an INSERT or an UPDATE command is executed against the view, these variables are initialized to the values in the INSERT VALUES clause or the UPDATE SET clause respectively.</para>
         <para>In an UPDATE procedure, the default value of these variables, if they are not set by the command, is null. In an INSERT procedure, the default value of these variables is the default value of the virtual table attributes, based on their defined types.  See <link linkend="changing_variables">CHANGING Variables</link> for distinguishing defaults from passed values.</para>
+      	<warning>
+      		<para>In prior release of Teiid INPUT was also accepted as the quailifer for an input variable.  As of Teidd 7, INPUT is a reserved word, so INPUTS is the preferred qualifier.</para>
+      	</warning>
       </sect3>
       <sect3 id="changing_variables">
         <title>CHANGING Variables</title>
@@ -579,7 +582,7 @@
                   <entry>Translates any user criteria using the default mappings.</entry>
                 </row>
                 <row>
-                  <entry>TRANSLATE CRITERIA WITH (column1 = 'A', column2 = INPUT.column2 + 2)</entry>
+                  <entry>TRANSLATE CRITERIA WITH (column1 = 'A', column2 = INPUTS.column2 + 2)</entry>
                   <entry>Translates any criteria with some additional mappings: column1 is always mapped to 'A' and column2 is mapped to the incoming column2 value + 2.</entry>
                 </row>
                 <row>

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionForm.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionForm.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionForm.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -24,9 +24,11 @@
 
 import java.io.Serializable;
 import java.util.*;
+
+import org.teiid.connector.language.SQLReservedWords;
+
 import com.metamatrix.core.util.Assertion;
 import com.metamatrix.core.util.HashCodeUtil;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.function.metadata.*;
 
 /**
@@ -169,7 +171,7 @@
 				str.append(", "); //$NON-NLS-1$
 			} else {
 				str.append(" "); //$NON-NLS-1$
-				str.append(ReservedWords.AS);
+				str.append(SQLReservedWords.AS);
 				str.append(" "); //$NON-NLS-1$
 			}	
 			str.append(inputParamNames.get(1));

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -36,13 +36,14 @@
 import java.util.Properties;
 import java.util.TimeZone;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import com.metamatrix.api.exception.query.ExpressionEvaluationException;
 import com.metamatrix.api.exception.query.FunctionExecutionException;
 import com.metamatrix.common.types.DataTypeManager;
 import com.metamatrix.common.types.TransformationException;
 import com.metamatrix.common.util.TimestampWithTimezone;
 import com.metamatrix.query.QueryPlugin;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.util.CommandContext;
 import com.metamatrix.query.util.ErrorMessageKeys;
 
@@ -449,7 +450,7 @@
 		cal.setTime(timestamp);
 
 		// case of interval = 1, fractional seconds (nanos), don't go to branches of addField()
-		if (intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_FRAC_SECOND)) {
+		if (intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_FRAC_SECOND)) {
 			int countValue = count.intValue();
 			nanos += countValue;
 
@@ -487,23 +488,23 @@
 	private static void addField(String interval, Integer count, Calendar cal) {
 		int countValue = count.intValue();
 
-        if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_FRAC_SECOND)) {
+        if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_FRAC_SECOND)) {
             //nano seconds - should never get into this branch
-        } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_SECOND)) {
+        } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_SECOND)) {
             cal.add(Calendar.SECOND, countValue);
-        } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_MINUTE)) {
+        } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_MINUTE)) {
             cal.add(Calendar.MINUTE, countValue);
-        } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_HOUR)) {
+        } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_HOUR)) {
             cal.add(Calendar.HOUR_OF_DAY, countValue);
-        } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_DAY)) {
+        } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_DAY)) {
             cal.add(Calendar.DAY_OF_YEAR, countValue);
-        } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_WEEK)) {
+        } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_WEEK)) {
             cal.add(Calendar.WEEK_OF_YEAR, countValue);
-        } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_MONTH)) {
+        } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_MONTH)) {
             cal.add(Calendar.MONTH, countValue);
-        } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_QUARTER)) {
+        } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_QUARTER)) {
             cal.add(Calendar.MONTH, countValue*3);
-        } else if(interval.equalsIgnoreCase(ReservedWords.SQL_TSI_YEAR)) {
+        } else if(interval.equalsIgnoreCase(SQLReservedWords.SQL_TSI_YEAR)) {
             cal.add(Calendar.YEAR, countValue);
         }
 	}
@@ -525,25 +526,25 @@
         long tsDiff = ts2 - ts1;
 
         long count = 0;
-        if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_FRAC_SECOND)) {
+        if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_FRAC_SECOND)) {
             count = tsDiff;
         } else { 
         	tsDiff = tsDiff / 1000000; //convert to milliseconds
-            if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_SECOND)) {
+            if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_SECOND)) {
                 count = tsDiff / 1000;
-            } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_MINUTE)) {
+            } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_MINUTE)) {
                 count = (tsDiff / 1000) / 60;
-            } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_HOUR)) {
+            } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_HOUR)) {
                 count = (tsDiff / 1000) / (60*60);
-            } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_DAY)) {
+            } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_DAY)) {
                 count = (tsDiff / 1000) / (60*60*24);
-            } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_WEEK)) {
+            } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_WEEK)) {
                 count = (tsDiff / 1000) / (60*60*24*7);
-            } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_MONTH)) {
+            } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_MONTH)) {
                 count = (tsDiff / 1000) / (60*60*24*30);
-            } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_QUARTER)) {
+            } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_QUARTER)) {
                 count = (tsDiff / 1000) / (60*60*24*91);
-            } else if(intervalType.equalsIgnoreCase(ReservedWords.SQL_TSI_YEAR)) {
+            } else if(intervalType.equalsIgnoreCase(SQLReservedWords.SQL_TSI_YEAR)) {
                 count = (tsDiff / 1000) / (60*60*24*365);
             }    
         }

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CapabilitiesUtil.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CapabilitiesUtil.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CapabilitiesUtil.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -28,6 +28,7 @@
 import java.util.List;
 
 import org.teiid.connector.api.ConnectorCapabilities.SupportedJoinCriteria;
+import org.teiid.connector.language.SQLReservedWords;
 
 import com.metamatrix.api.exception.MetaMatrixComponentException;
 import com.metamatrix.api.exception.query.QueryMetadataException;
@@ -38,7 +39,6 @@
 import com.metamatrix.query.optimizer.capabilities.SourceCapabilities;
 import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
 import com.metamatrix.query.sql.LanguageObject;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.lang.JoinType;
 import com.metamatrix.query.sql.lang.SetQuery.Operation;
 import com.metamatrix.query.sql.symbol.AggregateSymbol;
@@ -145,7 +145,7 @@
 
         // Check particular function
         String func = aggregate.getAggregateFunction();
-        if(func.equals(ReservedWords.COUNT)) {
+        if(func.equals(SQLReservedWords.COUNT)) {
             if(aggregate.getExpression() == null) {
                 if(! caps.supportsCapability(Capability.QUERY_AGGREGATES_COUNT_STAR)) {
                     return false;
@@ -155,19 +155,19 @@
                     return false;
                 }                
             }
-        } else if(func.equals(ReservedWords.SUM)) {
+        } else if(func.equals(SQLReservedWords.SUM)) {
             if(! caps.supportsCapability(Capability.QUERY_AGGREGATES_SUM)) {
                 return false;
             }
-        } else if(func.equals(ReservedWords.AVG)) {
+        } else if(func.equals(SQLReservedWords.AVG)) {
             if(! caps.supportsCapability(Capability.QUERY_AGGREGATES_AVG)) {
                 return false;
             }
-        } else if(func.equals(ReservedWords.MIN)) {
+        } else if(func.equals(SQLReservedWords.MIN)) {
             if(! caps.supportsCapability(Capability.QUERY_AGGREGATES_MIN)) {
                 return false;
             }
-        } else if(func.equals(ReservedWords.MAX)) {
+        } else if(func.equals(SQLReservedWords.MAX)) {
             if(! caps.supportsCapability(Capability.QUERY_AGGREGATES_MAX)) {
                 return false;
             }

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePushAggregates.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePushAggregates.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePushAggregates.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -35,6 +35,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import com.metamatrix.api.exception.MetaMatrixComponentException;
 import com.metamatrix.api.exception.query.QueryMetadataException;
 import com.metamatrix.api.exception.query.QueryPlannerException;
@@ -57,7 +59,6 @@
 import com.metamatrix.query.resolver.util.ResolverUtil;
 import com.metamatrix.query.resolver.util.ResolverVisitor;
 import com.metamatrix.query.rewriter.QueryRewriter;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.LanguageObject.Util;
 import com.metamatrix.query.sql.lang.CompareCriteria;
 import com.metamatrix.query.sql.lang.Criteria;
@@ -350,7 +351,7 @@
         	if (pushdown) {
         		projectedViewSymbols.add(agg);
         	} else {
-        		if (agg.getAggregateFunction().equals(ReservedWords.COUNT)) {
+        		if (agg.getAggregateFunction().equals(SQLReservedWords.COUNT)) {
         			SearchedCaseExpression count = new SearchedCaseExpression(Arrays.asList(new IsNullCriteria(agg.getExpression())), Arrays.asList(new Constant(Integer.valueOf(0))));
         			count.setElseExpression(new Constant(Integer.valueOf(1)));
         			count.setType(DataTypeManager.DefaultDataClasses.INTEGER);
@@ -500,7 +501,7 @@
 		} else {
 		    // if the source has no rows we need to insert a select node with criteria count(*)>0
 		    PlanNode selectNode = NodeFactory.getNewNode(NodeConstants.Types.SELECT);
-		    AggregateSymbol count = new AggregateSymbol("stagedAgg", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+		    AggregateSymbol count = new AggregateSymbol("stagedAgg", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
 		    aggregates.add(count); //consider the count aggregate for the push down call below
 		    selectNode.setProperty(NodeConstants.Info.SELECT_CRITERIA, new CompareCriteria(count, CompareCriteria.GT,
 		                                                                                   new Constant(new Integer(0))));
@@ -668,9 +669,9 @@
             Expression newExpression = null;
 
             String aggFunction = partitionAgg.getAggregateFunction();
-            if (aggFunction.equals(ReservedWords.COUNT)) {
+            if (aggFunction.equals(SQLReservedWords.COUNT)) {
                 //COUNT(x) -> CONVERT(SUM(COUNT(x)), INTEGER)
-                AggregateSymbol newAgg = new AggregateSymbol("stagedAgg", ReservedWords.SUM, false, partitionAgg); //$NON-NLS-1$
+                AggregateSymbol newAgg = new AggregateSymbol("stagedAgg", SQLReservedWords.SUM, false, partitionAgg); //$NON-NLS-1$
 
                 // Build conversion function to convert SUM (which returns LONG) back to INTEGER
                 Constant convertTargetType = new Constant(DataTypeManager.getDataTypeName(partitionAgg.getType()),
@@ -680,13 +681,13 @@
 
                 newExpression = convertFunc;  
                 nestedAggregates.add(partitionAgg);
-            } else if (aggFunction.equals(ReservedWords.AVG)) {
+            } else if (aggFunction.equals(SQLReservedWords.AVG)) {
                 //AVG(x) -> SUM(SUM(x)) / SUM(COUNT(x))
-                AggregateSymbol countAgg = new AggregateSymbol("stagedAgg", ReservedWords.COUNT, false, partitionAgg.getExpression()); //$NON-NLS-1$
-                AggregateSymbol sumAgg = new AggregateSymbol("stagedAgg", ReservedWords.SUM, false, partitionAgg.getExpression()); //$NON-NLS-1$
+                AggregateSymbol countAgg = new AggregateSymbol("stagedAgg", SQLReservedWords.COUNT, false, partitionAgg.getExpression()); //$NON-NLS-1$
+                AggregateSymbol sumAgg = new AggregateSymbol("stagedAgg", SQLReservedWords.SUM, false, partitionAgg.getExpression()); //$NON-NLS-1$
                 
-                AggregateSymbol sumSumAgg = new AggregateSymbol("stagedAgg", ReservedWords.SUM, false, sumAgg); //$NON-NLS-1$
-                AggregateSymbol sumCountAgg = new AggregateSymbol("stagedAgg", ReservedWords.SUM, false, countAgg); //$NON-NLS-1$
+                AggregateSymbol sumSumAgg = new AggregateSymbol("stagedAgg", SQLReservedWords.SUM, false, sumAgg); //$NON-NLS-1$
+                AggregateSymbol sumCountAgg = new AggregateSymbol("stagedAgg", SQLReservedWords.SUM, false, countAgg); //$NON-NLS-1$
 
                 Function divideFunc = new Function("/", new Expression[] {sumSumAgg, sumCountAgg}); //$NON-NLS-1$
                 ResolverVisitor.resolveLanguageObject(divideFunc, metadata);

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -28,6 +28,8 @@
 import java.util.List;
 import java.util.Set;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import com.metamatrix.api.exception.MetaMatrixComponentException;
 import com.metamatrix.api.exception.query.QueryMetadataException;
 import com.metamatrix.api.exception.query.QueryPlannerException;
@@ -42,7 +44,6 @@
 import com.metamatrix.query.optimizer.relational.plantree.NodeEditor;
 import com.metamatrix.query.optimizer.relational.plantree.PlanNode;
 import com.metamatrix.query.resolver.util.ResolverUtil;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.lang.Criteria;
 import com.metamatrix.query.sql.lang.JoinType;
 import com.metamatrix.query.sql.lang.OrderBy;
@@ -276,8 +277,8 @@
 
 	static boolean areAggregatesCardinalityDependent(Set<AggregateSymbol> aggs) {
 		for (AggregateSymbol aggregateSymbol : aggs) {
-			if (aggregateSymbol.getAggregateFunction().equalsIgnoreCase(ReservedWords.COUNT) || 
-					aggregateSymbol.getAggregateFunction().equalsIgnoreCase(ReservedWords.AVG)) {
+			if (aggregateSymbol.getAggregateFunction().equalsIgnoreCase(SQLReservedWords.COUNT) || 
+					aggregateSymbol.getAggregateFunction().equalsIgnoreCase(SQLReservedWords.AVG)) {
 				return true;
 			}
 		}

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/parser/QueryParser.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/parser/QueryParser.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/parser/QueryParser.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -24,10 +24,11 @@
 
 import java.io.StringReader;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import com.metamatrix.api.exception.MetaMatrixProcessingException;
 import com.metamatrix.api.exception.query.QueryParserException;
 import com.metamatrix.query.QueryPlugin;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.lang.Command;
 import com.metamatrix.query.sql.lang.Criteria;
 import com.metamatrix.query.sql.lang.Option;
@@ -126,7 +127,7 @@
             // Check for OPTION
             Option option = null;
             int closeBracket = sql.lastIndexOf(XML_CLOSE_BRACKET);
-            int optionIndex = sql.toUpperCase().lastIndexOf(ReservedWords.OPTION);
+            int optionIndex = sql.toUpperCase().lastIndexOf(SQLReservedWords.OPTION);
             if (optionIndex != -1 && optionIndex > closeBracket){
                 String optionSQL = sql.substring(optionIndex);
                 option = getOption(optionSQL, parseInfo);

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/parser/SQLParserUtil.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/parser/SQLParserUtil.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/parser/SQLParserUtil.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -27,10 +27,11 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import com.metamatrix.core.util.Assertion;
 import com.metamatrix.core.util.StringUtil;
 import com.metamatrix.query.QueryPlugin;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.lang.Command;
 import com.metamatrix.query.sql.lang.FromClause;
 import com.metamatrix.query.sql.lang.JoinType;
@@ -201,17 +202,17 @@
             return JoinType.JOIN_INNER;
         }   
         String joinType = joinTypeToken.image;
-        if(joinType.equalsIgnoreCase(ReservedWords.INNER)) {
+        if(joinType.equalsIgnoreCase(SQLReservedWords.INNER)) {
             return JoinType.JOIN_INNER;
-        } else if(joinType.equalsIgnoreCase(ReservedWords.CROSS)) {
+        } else if(joinType.equalsIgnoreCase(SQLReservedWords.CROSS)) {
             return JoinType.JOIN_CROSS;         
-        } else if(joinType.equalsIgnoreCase(ReservedWords.LEFT)) {
+        } else if(joinType.equalsIgnoreCase(SQLReservedWords.LEFT)) {
             return JoinType.JOIN_LEFT_OUTER;
-        } else if(joinType.equalsIgnoreCase(ReservedWords.RIGHT)) {
+        } else if(joinType.equalsIgnoreCase(SQLReservedWords.RIGHT)) {
             return JoinType.JOIN_RIGHT_OUTER;
-        } else if(joinType.equalsIgnoreCase(ReservedWords.FULL)) {
+        } else if(joinType.equalsIgnoreCase(SQLReservedWords.FULL)) {
             return JoinType.JOIN_FULL_OUTER;
-        } else if(joinType.equalsIgnoreCase(ReservedWords.UNION)) {
+        } else if(joinType.equalsIgnoreCase(SQLReservedWords.UNION)) {
             return JoinType.JOIN_UNION;
         } else {
             Object[] params = new Object[] { joinType };
@@ -230,23 +231,23 @@
             int num = info.anonExprCount++;
             return "expr" + (num == 0 ? "" : ""+num); //$NON-NLS-1$   //$NON-NLS-2$   //$NON-NLS-3$
 
-        } else if(functionType.equals(ReservedWords.COUNT)) { 
+        } else if(functionType.equals(SQLReservedWords.COUNT)) { 
             int num = info.anonCountCount++;
             return "count" + (num == 0 ? "" : ""+num);//$NON-NLS-1$   //$NON-NLS-2$   //$NON-NLS-3$
 
-        } else if(functionType.equals(ReservedWords.SUM)) { 
+        } else if(functionType.equals(SQLReservedWords.SUM)) { 
             int num = info.anonSumCount++;
             return "sum" + (num == 0 ? "" : ""+num);//$NON-NLS-1$   //$NON-NLS-2$   //$NON-NLS-3$
 
-        } else if(functionType.equals(ReservedWords.AVG)) { 
+        } else if(functionType.equals(SQLReservedWords.AVG)) { 
             int num = info.anonAvgCount++;
             return "avg" + (num == 0 ? "" : ""+num);//$NON-NLS-1$   //$NON-NLS-2$   //$NON-NLS-3$
 
-        } else if(functionType.equals(ReservedWords.MIN)) { 
+        } else if(functionType.equals(SQLReservedWords.MIN)) { 
             int num = info.anonMinCount++;
             return "min" + (num == 0 ? "" : ""+num);//$NON-NLS-1$   //$NON-NLS-2$   //$NON-NLS-3$
 
-        } else if(functionType.equals(ReservedWords.MAX)) { 
+        } else if(functionType.equals(SQLReservedWords.MAX)) { 
             int num = info.anonMaxCount++;
             return "max" + (num == 0 ? "" : ""+num);//$NON-NLS-1$   //$NON-NLS-2$   //$NON-NLS-3$
         } else {

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/processor/proc/ExecDynamicSqlInstruction.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/processor/proc/ExecDynamicSqlInstruction.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/processor/proc/ExecDynamicSqlInstruction.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -30,6 +30,8 @@
 import java.util.List;
 import java.util.Map;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import com.metamatrix.api.exception.MetaMatrixComponentException;
 import com.metamatrix.api.exception.MetaMatrixProcessingException;
 import com.metamatrix.api.exception.query.QueryProcessingException;

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/processor/relational/GroupingNode.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/processor/relational/GroupingNode.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/processor/relational/GroupingNode.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -28,6 +28,8 @@
 import java.util.List;
 import java.util.Map;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import com.metamatrix.api.exception.MetaMatrixComponentException;
 import com.metamatrix.api.exception.MetaMatrixProcessingException;
 import com.metamatrix.api.exception.query.ExpressionEvaluationException;
@@ -47,7 +49,6 @@
 import com.metamatrix.query.function.aggregate.Sum;
 import com.metamatrix.query.processor.ProcessorDataManager;
 import com.metamatrix.query.processor.relational.SortUtility.Mode;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.lang.OrderBy;
 import com.metamatrix.query.sql.symbol.AggregateSymbol;
 import com.metamatrix.query.sql.symbol.Expression;
@@ -163,19 +164,19 @@
                     }
                 	aggProjectionIndexes[i] = index;
                     String function = aggSymbol.getAggregateFunction();
-                    if(function.equals(ReservedWords.COUNT)) {
+                    if(function.equals(SQLReservedWords.COUNT)) {
                         functions[i] = new Count();
-                    } else if(function.equals(ReservedWords.SUM)) {
+                    } else if(function.equals(SQLReservedWords.SUM)) {
                         functions[i] = new Sum();
-                    } else if(function.equals(ReservedWords.AVG)) {
+                    } else if(function.equals(SQLReservedWords.AVG)) {
                         functions[i] = new Avg();
-                    } else if(function.equals(ReservedWords.MIN)) {
+                    } else if(function.equals(SQLReservedWords.MIN)) {
                         functions[i] = new Min();
                     } else {
                         functions[i] = new Max();
                     }
 
-                    if(aggSymbol.isDistinct() && !function.equals(ReservedWords.MIN) && !function.equals(ReservedWords.MAX)) {
+                    if(aggSymbol.isDistinct() && !function.equals(SQLReservedWords.MIN) && !function.equals(SQLReservedWords.MAX)) {
                         functions[i] = new DuplicateFilter(functions[i], getBufferManager(), getConnectionID());
                     }
                     

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/ProcedureContainerResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/ProcedureContainerResolver.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/ProcedureContainerResolver.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -106,7 +106,7 @@
         TempMetadataStore childMetadata = new TempMetadataStore();
         QueryMetadataInterface resolveMetadata = new TempMetadataAdapter(metadata, childMetadata);
 
-        GroupContext externalGroups = findChildCommandMetadata(procCommand, subCommand, childMetadata, resolveMetadata);
+        GroupContext externalGroups = findChildCommandMetadata(procCommand, childMetadata, resolveMetadata);
         
         QueryResolver.setChildMetadata(subCommand, childMetadata.getData(), externalGroups);
         
@@ -132,20 +132,27 @@
      * Find all metadata defined by this command for it's children.  This metadata should be collected 
      * in the childMetadata object.  Typical uses of this are for stored queries that define parameter
      * variables valid in subcommands. only used for inserts, updates, and deletes
+     * @param metadata Metadata access
      * @param command The command to find metadata on
-     * @param metadata Metadata access
      * @param childMetadata The store to collect child metadata in 
      * @throws QueryMetadataException If there is a metadata problem
      * @throws QueryResolverException If the query cannot be resolved
      * @throws MetaMatrixComponentException If there is an internal error    
      */ 
-    public GroupContext findChildCommandMetadata(ProcedureContainer container, Command subCommand, TempMetadataStore discoveredMetadata, QueryMetadataInterface metadata)
+    public GroupContext findChildCommandMetadata(ProcedureContainer container, TempMetadataStore discoveredMetadata, QueryMetadataInterface metadata)
     throws QueryMetadataException, QueryResolverException, MetaMatrixComponentException {
         // get the group on the delete statement
         GroupSymbol group = container.getGroup();
         // proceed further if it is a virtual group
             
-        GroupContext externalGroups = new GroupContext();
+        return createChildMetadata(discoveredMetadata, metadata, group);
+    }
+
+	static GroupContext createChildMetadata(
+			TempMetadataStore discoveredMetadata,
+			QueryMetadataInterface metadata, GroupSymbol group)
+			throws QueryMetadataException, MetaMatrixComponentException {
+		GroupContext externalGroups = new GroupContext();
         
         //Look up elements for the virtual group
         List<ElementSymbol> elements = ResolverUtil.resolveElementsInGroup(group, metadata);
@@ -159,6 +166,7 @@
         }
 
         addScalarGroup(ProcedureReservedWords.INPUT, discoveredMetadata, externalGroups, inputElments);
+        addScalarGroup(ProcedureReservedWords.INPUTS, discoveredMetadata, externalGroups, inputElments);
 
         // Switch type to be boolean for all CHANGING variables
         List<ElementSymbol> changingElements = new ArrayList<ElementSymbol>(elements.size());
@@ -170,10 +178,9 @@
         }
 
         addScalarGroup(ProcedureReservedWords.CHANGING, discoveredMetadata, externalGroups, changingElements);
+		return externalGroups;
+	}
         
-        return externalGroups;
-    }
-        
     /** 
      * @see com.metamatrix.query.resolver.CommandResolver#resolveCommand(com.metamatrix.query.sql.lang.Command, com.metamatrix.query.metadata.TempMetadataAdapter, com.metamatrix.query.analysis.AnalysisRecord, boolean)
      */

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DeleteResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DeleteResolver.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DeleteResolver.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -75,8 +75,7 @@
     
     @Override
     public GroupContext findChildCommandMetadata(ProcedureContainer container,
-    		Command subCommand, TempMetadataStore discoveredMetadata,
-    		QueryMetadataInterface metadata) throws QueryMetadataException,
+    		TempMetadataStore discoveredMetadata, QueryMetadataInterface metadata) throws QueryMetadataException,
     		QueryResolverException, MetaMatrixComponentException {
     	//defect 16451: don't expose input and changing variables to delete procedures
     	return null;

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DynamicCommandResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DynamicCommandResolver.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/DynamicCommandResolver.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,30 +22,32 @@
 
 package com.metamatrix.query.resolver.command;
 
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.teiid.connector.language.SQLReservedWords;
+
+import com.metamatrix.api.exception.MetaMatrixComponentException;
+import com.metamatrix.api.exception.query.QueryMetadataException;
+import com.metamatrix.api.exception.query.QueryResolverException;
+import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.query.QueryPlugin;
+import com.metamatrix.query.analysis.AnalysisRecord;
+import com.metamatrix.query.metadata.TempMetadataAdapter;
+import com.metamatrix.query.metadata.TempMetadataID;
+import com.metamatrix.query.resolver.CommandResolver;
+import com.metamatrix.query.resolver.util.ResolverUtil;
+import com.metamatrix.query.resolver.util.ResolverVisitor;
+import com.metamatrix.query.sql.ProcedureReservedWords;
+import com.metamatrix.query.sql.lang.Command;
+import com.metamatrix.query.sql.lang.DynamicCommand;
+import com.metamatrix.query.sql.lang.SetClause;
+import com.metamatrix.query.sql.symbol.ElementSymbol;
+import com.metamatrix.query.sql.symbol.GroupSymbol;
+import com.metamatrix.query.sql.symbol.SingleElementSymbol;
 
-import com.metamatrix.api.exception.MetaMatrixComponentException;
-import com.metamatrix.api.exception.query.QueryMetadataException;
-import com.metamatrix.api.exception.query.QueryResolverException;
-import com.metamatrix.common.types.DataTypeManager;
-import com.metamatrix.query.QueryPlugin;
-import com.metamatrix.query.analysis.AnalysisRecord;
-import com.metamatrix.query.metadata.TempMetadataAdapter;
-import com.metamatrix.query.metadata.TempMetadataID;
-import com.metamatrix.query.resolver.CommandResolver;
-import com.metamatrix.query.resolver.util.ResolverUtil;
-import com.metamatrix.query.resolver.util.ResolverVisitor;
-import com.metamatrix.query.sql.ProcedureReservedWords;
-import com.metamatrix.query.sql.lang.Command;
-import com.metamatrix.query.sql.lang.DynamicCommand;
-import com.metamatrix.query.sql.lang.SetClause;
-import com.metamatrix.query.sql.symbol.ElementSymbol;
-import com.metamatrix.query.sql.symbol.GroupSymbol;
-import com.metamatrix.query.sql.symbol.SingleElementSymbol;
-
 public class DynamicCommandResolver implements CommandResolver {
 
     /** 

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -209,8 +209,7 @@
     
     @Override
     public GroupContext findChildCommandMetadata(ProcedureContainer container,
-    		Command subCommand, TempMetadataStore discoveredMetadata,
-    		QueryMetadataInterface metadata) throws QueryMetadataException,
+    		TempMetadataStore discoveredMetadata, QueryMetadataInterface metadata) throws QueryMetadataException,
     		QueryResolverException, MetaMatrixComponentException {
 
         StoredProcedure storedProcedureCommand = (StoredProcedure) container;

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/InsertResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/InsertResolver.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/InsertResolver.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -249,9 +249,11 @@
             String varName = varSymbol.getShortCanonicalName();
             String changingKey = ProcedureReservedWords.CHANGING + ElementSymbol.SEPARATOR + varName;
             String inputKey = ProcedureReservedWords.INPUT + ElementSymbol.SEPARATOR + varName;
-            
+            String inputsKey = ProcedureReservedWords.INPUTS + ElementSymbol.SEPARATOR + varName;
             result.put(changingKey, new Constant(Boolean.TRUE));
-            result.put(inputKey, valIter.next());
+            Object value = valIter.next();
+            result.put(inputKey, value);
+            result.put(inputsKey, value);
         }
         
         Collection insertElmnts = ResolverUtil.resolveElementsInGroup(insert.getGroup(), metadata);
@@ -267,9 +269,10 @@
             String varName = varSymbol.getShortCanonicalName();
             String changingKey = ProcedureReservedWords.CHANGING + ElementSymbol.SEPARATOR + varName;
             String inputKey = ProcedureReservedWords.INPUT + ElementSymbol.SEPARATOR + varName;
-            
+            String inputsKey = ProcedureReservedWords.INPUTS + ElementSymbol.SEPARATOR + varName;
             result.put(changingKey, new Constant(Boolean.FALSE));
             result.put(inputKey, value);
+            result.put(inputsKey, value);
         }
         
         return result;

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateProcedureResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateProcedureResolver.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateProcedureResolver.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -92,6 +92,7 @@
 	        	GroupSymbol groupSymbol = (GroupSymbol) groupIter.next();
 	        	String groupName = groupSymbol.getName();
 	        	if(!groupName.equalsIgnoreCase(ProcedureReservedWords.INPUT) &&
+	        		!groupName.equalsIgnoreCase(ProcedureReservedWords.INPUTS) &&
 		        	 !groupName.equalsIgnoreCase(ProcedureReservedWords.CHANGING) ) {
 		        	 // set the groupSymbol on the procedure
 		        	 ResolverUtil.resolveGroup(groupSymbol, metadata);

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateResolver.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateResolver.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/command/UpdateResolver.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -102,10 +102,10 @@
             String varName = leftSymbol.getShortCanonicalName();
             String changingKey = ProcedureReservedWords.CHANGING + ElementSymbol.SEPARATOR + varName;
             String inputKey = ProcedureReservedWords.INPUT + ElementSymbol.SEPARATOR + varName;
-            
+            String inputsKey = ProcedureReservedWords.INPUTS + ElementSymbol.SEPARATOR + varName;
             result.put(changingKey, new Constant(Boolean.TRUE));
             result.put(inputKey, entry.getValue());
-            
+            result.put(inputsKey, entry.getValue());
             updateVars.add(leftSymbol);
         }
         

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverVisitor.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -48,6 +48,7 @@
 import com.metamatrix.query.metadata.QueryMetadataInterface;
 import com.metamatrix.query.sql.LanguageObject;
 import com.metamatrix.query.sql.LanguageVisitor;
+import com.metamatrix.query.sql.ProcedureReservedWords;
 import com.metamatrix.query.sql.lang.BetweenCriteria;
 import com.metamatrix.query.sql.lang.CompareCriteria;
 import com.metamatrix.query.sql.lang.GroupContext;
@@ -205,6 +206,13 @@
         
         //copy the match information
         ElementSymbol resolvedSymbol = match.element;
+        if (isExternal //convert input to inputs
+        		&& metadata.isScalarGroup(resolvedSymbol.getGroupSymbol().getMetadataID())
+        		&& ProcedureReservedWords.INPUT.equals(groupContext)) {
+        	resolvedSymbol = new ElementSymbol(ProcedureReservedWords.INPUTS + ElementSymbol.SEPARATOR + elementShortName);
+        	resolveElementSymbol(resolvedSymbol);
+        	elementSymbol.setOutputName(resolvedSymbol.getOutputName());
+        } 
         elementSymbol.setIsExternalReference(isExternal);
         elementSymbol.setType(resolvedSymbol.getType());
         elementSymbol.setMetadataID(resolvedSymbol.getMetadataID());

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -42,6 +42,7 @@
 import java.util.StringTokenizer;
 
 import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.language.SQLReservedWords;
 
 import com.metamatrix.api.exception.MetaMatrixComponentException;
 import com.metamatrix.api.exception.MetaMatrixException;
@@ -71,7 +72,6 @@
 import com.metamatrix.query.resolver.util.ResolverVisitor;
 import com.metamatrix.query.sql.LanguageObject;
 import com.metamatrix.query.sql.ProcedureReservedWords;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.LanguageObject.Util;
 import com.metamatrix.query.sql.lang.AbstractSetCriteria;
 import com.metamatrix.query.sql.lang.BatchedUpdateCommand;
@@ -1892,7 +1892,7 @@
                 Expression value = (Expression)variables.get(es.getCanonicalName());
 
                 if (value == null) {
-	                if (grpName.equals(ProcedureReservedWords.INPUT)) {
+	                if ((grpName.equals(ProcedureReservedWords.INPUT) || grpName.equals(ProcedureReservedWords.INPUTS))) {
 	                	return new Constant(null, es.getType());
 	                } 
 	                if (grpName.equals(ProcedureReservedWords.CHANGING)) {
@@ -1944,8 +1944,8 @@
 	}
     
     private Expression rewriteExpression(AggregateSymbol expression) {
-    	if (!expression.getAggregateFunction().equals(ReservedWords.COUNT)
-				&& !expression.getAggregateFunction().equals(ReservedWords.SUM)
+    	if (!expression.getAggregateFunction().equals(SQLReservedWords.COUNT)
+				&& !expression.getAggregateFunction().equals(SQLReservedWords.SUM)
 				&& EvaluatableVisitor.willBecomeConstant(expression.getExpression())) {
 			try {
 				return new ExpressionSymbol(expression.getName(), ResolverUtil
@@ -1998,7 +1998,7 @@
 			}
 			case 1: {//from_unixtime(a) => timestampadd(SQL_TSI_SECOND, a, new Timestamp(0)) 
 				Function result = new Function(FunctionLibrary.TIMESTAMPADD,
-						new Expression[] {new Constant(ReservedWords.SQL_TSI_SECOND), function.getArg(0), new Constant(new Timestamp(0)) });
+						new Expression[] {new Constant(SQLReservedWords.SQL_TSI_SECOND), function.getArg(0), new Constant(new Timestamp(0)) });
 				//resolve the function
 				FunctionDescriptor descriptor = 
 					funcLibrary.findFunction(FunctionLibrary.TIMESTAMPADD, new Class[] { DataTypeManager.DefaultDataClasses.STRING, DataTypeManager.DefaultDataClasses.INTEGER, DataTypeManager.DefaultDataClasses.TIMESTAMP });
@@ -2464,7 +2464,7 @@
         Boolean result = null;
         for (ElementSymbol var : ElementCollectorVisitor.getElements(expr, false)) {
             String grpName = var.getGroupSymbol().getName();
-            if (var.isExternalReference() && grpName.equals(ProcedureReservedWords.INPUT)) {
+            if (var.isExternalReference() && (grpName.equalsIgnoreCase(ProcedureReservedWords.INPUT) || grpName.equalsIgnoreCase(ProcedureReservedWords.INPUTS))) {
                 
                 String changingKey = ProcedureReservedWords.CHANGING + ElementSymbol.SEPARATOR + var.getShortCanonicalName();
                 

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ProcedureReservedWords.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ProcedureReservedWords.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ProcedureReservedWords.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,15 +22,21 @@
 
 package com.metamatrix.query.sql;
 
+import java.lang.reflect.Field;
 import java.util.HashSet;
 import java.util.Set;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 /**
  * Special variable names in stored procedure language.
  */
 public class ProcedureReservedWords {
 
-    public static final String INPUT = "INPUT"; //$NON-NLS-1$
+	@Deprecated
+    public static final String INPUT = SQLReservedWords.INPUT;
+    
+    public static final String INPUTS = "INPUTS"; //$NON-NLS-1$
 
     public static final String ROWS_UPDATED = "ROWS_UPDATED"; //$NON-NLS-1$
 
@@ -38,29 +44,25 @@
 
     public static final String VARIABLES = "VARIABLES"; //$NON-NLS-1$
     
-    public static final String USING = "USING"; //$NON-NLS-1$
-
-    public static final String[] ALL_WORDS = new String[] {
-        INPUT,
-        ROWS_UPDATED,
-        CHANGING,
-        VARIABLES,
-        USING
-    };        
-
+    public static final String USING = SQLReservedWords.USING;
+    
     /**
-     * Set of CAPITALIZED reserved words for checking whether a string is a reserved word.
-     */
-    private static final Set PROCEDURE_RESERVED_WORDS = new HashSet();
+ 	 * 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 PROCEDURE_RESERVED_WORDS set
-    static {
-        // Iterate through the reserved words and capitalize all of them
-        for ( int i=0; i!=ProcedureReservedWords.ALL_WORDS.length; ++i ) {
-            String reservedWord = ProcedureReservedWords.ALL_WORDS[i];
-            ProcedureReservedWords.PROCEDURE_RESERVED_WORDS.add( reservedWord.toUpperCase() );    
-        } 
-    }
+    // 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 {
+					RESERVED_WORDS.add((String)field.get(null));
+				} catch (Exception e) {
+				}
+ 			}
+ 		}
+ 	}
 
     /** Can't construct */
     private ProcedureReservedWords() {}
@@ -74,6 +76,6 @@
         if (str == null) { 
             return false;    
         }
-        return PROCEDURE_RESERVED_WORDS.contains(str.toUpperCase());    
+        return RESERVED_WORDS.contains(str.toUpperCase());    
     }
 }

Deleted: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ReservedWords.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ReservedWords.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/ReservedWords.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -1,296 +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 com.metamatrix.query.sql;
-
-import java.util.Set;
-import java.util.HashSet;
-
-public class ReservedWords {
-
-    public static final String ANY = "ANY"; //$NON-NLS-1$
-    public static final String ALL = "ALL"; //$NON-NLS-1$
-    public static final String ALL_COLS = "*"; //$NON-NLS-1$
-    public static final String AND = "AND"; //$NON-NLS-1$
-    public static final String AS = "AS"; //$NON-NLS-1$
-    public static final String ASC = "ASC"; //$NON-NLS-1$
-	public static final String AVG = "AVG"; //$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 BIGDECIMAL = "BIGDECIMAL"; //$NON-NLS-1$
-	public static final String BIGINTEGER = "BIGINTEGER"; //$NON-NLS-1$
-    public static final String BLOB = "BLOB"; //$NON-NLS-1$
-    public static final String BREAK = "BREAK"; //$NON-NLS-1$
-	public static final String BY = "BY"; //$NON-NLS-1$
-    public static final String BYTE = "BYTE"; //$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 CHAR = "CHAR"; //$NON-NLS-1$
-    public static final String CLOB = "CLOB"; //$NON-NLS-1$
-    public static final String CONVERT = "CONVERT"; //$NON-NLS-1$
-    public static final String CONTINUE = "CONTINUE"; //$NON-NLS-1$
-	public static final String COUNT = "COUNT"; //$NON-NLS-1$
-    public static final String CRITERIA = "CRITERIA"; //$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 DATE = "DATE"; //$NON-NLS-1$
-    public static final String DEBUG = "DEBUG"; //$NON-NLS-1$
-    public static final String DECLARE = "DECLARE";     //$NON-NLS-1$
-	public static final String DELETE = "DELETE"; //$NON-NLS-1$
-    public static final String DESC = "DESC"; //$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 ELSE = "ELSE";	 //$NON-NLS-1$
-	public static final String END = "END"; //$NON-NLS-1$
-	public static final String ERROR = "ERROR";	 //$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 FALSE = "FALSE"; //$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 FROM = "FROM"; //$NON-NLS-1$
-    public static final String FULL = "FULL"; //$NON-NLS-1$
-	public static final String GROUP = "GROUP"; //$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 IF = "IF";     //$NON-NLS-1$
-    public static final String IN = "IN"; //$NON-NLS-1$
-    public static final String INNER = "INNER"; //$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 INTO = "INTO"; //$NON-NLS-1$
-    public static final String IS = "IS";     //$NON-NLS-1$
-    public static final String JOIN = "JOIN"; //$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 LIMIT = "LIMIT"; //$NON-NLS-1$
-    public static final String LOCAL = "LOCAL"; //$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 MIN = "MIN"; //$NON-NLS-1$
-	public static final String MAX = "MAX"; //$NON-NLS-1$
-    public static final String NOCACHE = "NOCACHE"; //$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 OBJECT = "OBJECT"; //$NON-NLS-1$
-	public static final String ON = "ON"; //$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 OPTION = "OPTION"; //$NON-NLS-1$
-    public static final String OUTER = "OUTER"; //$NON-NLS-1$
-    public static final String PROCEDURE = "PROCEDURE"; //$NON-NLS-1$
-    public static final String PLANONLY = "PLANONLY"; //$NON-NLS-1$
-    public static final String RIGHT = "RIGHT"; //$NON-NLS-1$
-	public static final String SELECT = "SELECT"; //$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 SHOWPLAN = "SHOWPLAN"; //$NON-NLS-1$
-    public static final String SOME = "SOME"; //$NON-NLS-1$
-    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 STRING = "STRING"; //$NON-NLS-1$
-	public static final String SUM = "SUM"; //$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 TIMESTAMPADD = "TIMESTAMPADD"; //$NON-NLS-1$
-    public static final String TIMESTAMPDIFF = "TIMESTAMPDIFF"; //$NON-NLS-1$
-	public static final String TRANSLATE = "TRANSLATE";	 //$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 UNKNOWN = "UNKNOWN"; //$NON-NLS-1$
-	public static final String UPDATE = "UPDATE"; //$NON-NLS-1$
-	public static final String USING = "USING";	 //$NON-NLS-1$
-    public static final String VALUES = "VALUES"; //$NON-NLS-1$
-    public static final String VIRTUAL = "VIRTUAL"; //$NON-NLS-1$
-    public static final String VIRTUAL_DEP_JOIN = "VIRTUALDEP";  //$NON-NLS-1$  
-    public static final String WHEN = "WHEN";     //$NON-NLS-1$
-    public static final String WITH = "WITH";     //$NON-NLS-1$
-	public static final String WHERE = "WHERE"; //$NON-NLS-1$
-    public static final String WHILE = "WHILE"; //$NON-NLS-1$
-    public static final String XML = "XML"; //$NON-NLS-1$
-
-    public static final String[] ALL_WORDS = new String[] {
-        ALL,
-        ALL_COLS,
-        AND,
-        ANY,
-        AS,
-        ASC,
-        AVG,
-        BEGIN,
-        BETWEEN,
-        BIGINTEGER,
-        BIGDECIMAL,
-        BLOB,
-        BREAK,
-        BY,
-        BYTE,
-        CASE,
-        CAST,
-        CHAR,
-        CLOB,
-        CONVERT,
-        CONTINUE,
-        COUNT,
-		CREATE,
-		CRITERIA,
-        CROSS,
-        DATE,
-        DEBUG,
-        DECLARE,
-        DELETE,
-        DESC,
-        DISTINCT,
-        DOUBLE,
-        DROP,
-        ELSE,
-        END,
-        ERROR,        
-        ESCAPE,
-        EXCEPT,
-        EXEC,
-        EXECUTE,
-        EXISTS,
-        FALSE,
-        FLOAT,
-		FOR,
-        FROM,
-        FULL,
-        GROUP,
-        HAS,
-        HAVING,
-        IF,
-        IN,
-        INNER,
-        INSERT,
-        INTEGER,
-        INTERSECT,
-        INTO,
-        IS,    
-        JOIN,
-        LEFT,
-        LIKE,
-        LIMIT,
-        LOCAL,
-        LONG,
-        LOOP,
-        MAKEDEP,
-        MAKENOTDEP,
-        MIN,
-        MAX,
-        NOCACHE,
-        NOT,
-        NULL,
-        OBJECT,
-        ON,
-        OR,
-        ORDER,
-        OPTION,
-        OUTER,
-        PLANONLY,
-		PROCEDURE,
-        RIGHT,
-        SELECT,
-        SET,
-        SHORT,
-        SHOWPLAN,
-        SOME,
-        SQL_TSI_FRAC_SECOND,
-        SQL_TSI_SECOND,
-        SQL_TSI_MINUTE,
-        SQL_TSI_HOUR,
-        SQL_TSI_DAY,
-        SQL_TSI_WEEK,
-        SQL_TSI_MONTH,
-        SQL_TSI_QUARTER,
-        SQL_TSI_YEAR,        
-        STRING,
-        SUM,
-        TABLE,
-        TEMPORARY,
-        THEN,
-		TIME,
-		TIMESTAMP,
-        TIMESTAMPADD,
-        TIMESTAMPDIFF,
-		TRANSLATE,
-        TRUE,
-        UNION,
-        UNKNOWN,
-        UPDATE,
-        USING,   
-        VALUES,
-        VIRTUAL,
-        VIRTUAL_DEP_JOIN,
-        WHEN,
-        WITH,    
-        WHERE,
-        WHILE,
-        XML,
-    };        
-
-    /**
- 	 * Set of CAPITALIZED reserved words for checking whether a string is a reserved word.
- 	 */
-    private static final Set RESERVED_WORDS = new HashSet();
-
-    // Initialize RESERVED_WORDS set
- 	static {
- 	    // Iterate through the reserved words and capitalize all of them
- 	    for ( int i=0; i!=ReservedWords.ALL_WORDS.length; ++i ) {
- 	    	String reservedWord = ReservedWords.ALL_WORDS[i];
- 	    	ReservedWords.RESERVED_WORDS.add( reservedWord.toUpperCase() );    
- 	    } 
- 	}
-
- 	/** Can't construct */
- 	private ReservedWords() {}   
-
- 	/**
- 	 * 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: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Insert.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Insert.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Insert.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -239,6 +239,9 @@
             ElementSymbol symbol = (ElementSymbol)((ElementSymbol)variables.get( j )).clone();
             symbol.setName(ProcedureReservedWords.INPUT + SingleElementSymbol.SEPARATOR + symbol.getShortCanonicalName());
             map.put(symbol, values.get( j ) );
+            symbol = (ElementSymbol)((ElementSymbol)variables.get( j )).clone();
+            symbol.setName(ProcedureReservedWords.INPUTS + SingleElementSymbol.SEPARATOR + symbol.getShortCanonicalName());
+            map.put(symbol, values.get( j ) );
         } // for 
         return map;
     }

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Option.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Option.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Option.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -24,6 +24,8 @@
 
 import java.util.*;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import com.metamatrix.core.util.HashCodeUtil;
 import com.metamatrix.query.sql.*;
 import com.metamatrix.core.util.EquivalenceUtil;
@@ -36,8 +38,8 @@
  */
 public class Option implements LanguageObject {
     
-    public final static String MAKEDEP = ReservedWords.MAKEDEP; 
-    public final static String MAKENOTDEP = ReservedWords.MAKENOTDEP; 
+    public final static String MAKEDEP = SQLReservedWords.MAKEDEP; 
+    public final static String MAKENOTDEP = SQLReservedWords.MAKENOTDEP; 
     public final static String OPTIONAL = "optional"; //$NON-NLS-1$
 
 	private boolean showPlan = false;

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Update.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Update.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/lang/Update.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -267,7 +267,9 @@
             ElementSymbol symbol = (ElementSymbol)(setClause.getSymbol()).clone();
             symbol.setName(ProcedureReservedWords.INPUT + SingleElementSymbol.SEPARATOR + symbol.getShortCanonicalName());
             map.put( symbol, setClause.getValue() );
-            
+            symbol = (ElementSymbol)(setClause.getSymbol()).clone();
+            symbol.setName(ProcedureReservedWords.INPUTS + SingleElementSymbol.SEPARATOR + symbol.getShortCanonicalName());
+            map.put( symbol, setClause.getValue() );
         } // for
         
         return map;

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/proc/RaiseErrorStatement.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/proc/RaiseErrorStatement.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/proc/RaiseErrorStatement.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,8 +22,9 @@
 
 package com.metamatrix.query.sql.proc;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import com.metamatrix.query.sql.LanguageVisitor;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.symbol.ElementSymbol;
 import com.metamatrix.query.sql.symbol.Expression;
 import com.metamatrix.query.sql.symbol.GroupSymbol;
@@ -57,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(ReservedWords.ERROR);
-        result.setMetadataID(ReservedWords.ERROR);
+        ElementSymbol result = new ElementSymbol(SQLReservedWords.ERROR);
+        result.setMetadataID(SQLReservedWords.ERROR);
         result.setType(String.class);
-        result.setGroupSymbol(new GroupSymbol(ReservedWords.ERROR));
+        result.setGroupSymbol(new GroupSymbol(SQLReservedWords.ERROR));
         return result;
     }
     

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/symbol/AggregateSymbol.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/symbol/AggregateSymbol.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/symbol/AggregateSymbol.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -27,12 +27,13 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import com.metamatrix.common.types.DataTypeManager;
 import com.metamatrix.core.util.EquivalenceUtil;
 import com.metamatrix.core.util.HashCodeUtil;
 import com.metamatrix.query.QueryPlugin;
 import com.metamatrix.query.sql.LanguageVisitor;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.util.ErrorMessageKeys;
 
 /**
@@ -66,11 +67,11 @@
 
 	static {
 		AGGREGATE_FUNCTIONS = new HashSet();
-		AGGREGATE_FUNCTIONS.add(ReservedWords.COUNT);
-		AGGREGATE_FUNCTIONS.add(ReservedWords.SUM);
-		AGGREGATE_FUNCTIONS.add(ReservedWords.AVG);
-		AGGREGATE_FUNCTIONS.add(ReservedWords.MIN);
-		AGGREGATE_FUNCTIONS.add(ReservedWords.MAX);
+		AGGREGATE_FUNCTIONS.add(SQLReservedWords.COUNT);
+		AGGREGATE_FUNCTIONS.add(SQLReservedWords.SUM);
+		AGGREGATE_FUNCTIONS.add(SQLReservedWords.AVG);
+		AGGREGATE_FUNCTIONS.add(SQLReservedWords.MIN);
+		AGGREGATE_FUNCTIONS.add(SQLReservedWords.MAX);
 
 		SUM_TYPES = new HashMap();
 		SUM_TYPES.put(DataTypeManager.DefaultDataClasses.BYTE, DataTypeManager.DefaultDataClasses.LONG);
@@ -109,7 +110,7 @@
 	/**
 	 * Construct an aggregate symbol with all given data.
 	 * @param name Name of the function
-	 * @param aggregateFunction Aggregate function type ({@link com.metamatrix.query.sql.ReservedWords#COUNT}, etc)
+	 * @param aggregateFunction Aggregate function type ({@link org.teiid.connector.language.SQLReservedWords#COUNT}, etc)
 	 * @param isDistinct True if DISTINCT flag is set
 	 * @param expression Contained expression
 	 */
@@ -119,16 +120,16 @@
 		setAggregateFunction(aggregateFunction);
 		this.distinct = isDistinct;
 	}
-
+	
 	/**
 	 * Set the aggregate function.  If the aggregate function is an invalid value, an
 	 * IllegalArgumentException is thrown.
 	 * @param aggregateFunction Aggregate function type
-	 * @see com.metamatrix.query.sql.ReservedWords#COUNT
-	 * @see com.metamatrix.query.sql.ReservedWords#SUM
-	 * @see com.metamatrix.query.sql.ReservedWords#AVG
-	 * @see com.metamatrix.query.sql.ReservedWords#MIN
-	 * @see com.metamatrix.query.sql.ReservedWords#MAX
+	 * @see org.teiid.connector.language.SQLReservedWords#COUNT
+	 * @see org.teiid.connector.language.SQLReservedWords#SUM
+	 * @see org.teiid.connector.language.SQLReservedWords#AVG
+	 * @see org.teiid.connector.language.SQLReservedWords#MIN
+	 * @see org.teiid.connector.language.SQLReservedWords#MAX
 	 */
 	private void setAggregateFunction(String aggregateFunction) {
 		// Validate aggregate
@@ -142,11 +143,11 @@
 	 * Get the aggregate function type - this will map to one of the reserved words
 	 * for the aggregate functions.
 	 * @return Aggregate function type
-	 * @see com.metamatrix.query.sql.ReservedWords#COUNT
-	 * @see com.metamatrix.query.sql.ReservedWords#SUM
-	 * @see com.metamatrix.query.sql.ReservedWords#AVG
-	 * @see com.metamatrix.query.sql.ReservedWords#MIN
-	 * @see com.metamatrix.query.sql.ReservedWords#MAX
+	 * @see org.teiid.connector.language.SQLReservedWords#COUNT
+	 * @see org.teiid.connector.language.SQLReservedWords#SUM
+	 * @see org.teiid.connector.language.SQLReservedWords#AVG
+	 * @see org.teiid.connector.language.SQLReservedWords#MIN
+	 * @see org.teiid.connector.language.SQLReservedWords#MAX
 	 */
 	public String getAggregateFunction() {
 		return this.aggregate;
@@ -167,12 +168,12 @@
 	 * @return Type of the symbol
 	 */
 	public Class getType() {
-		if(this.aggregate.equals(ReservedWords.COUNT)) {
+		if(this.aggregate.equals(SQLReservedWords.COUNT)) {
 			return COUNT_TYPE;
-		} else if(this.aggregate.equals(ReservedWords.SUM) ) {
+		} else if(this.aggregate.equals(SQLReservedWords.SUM) ) {
 			Class expressionType = this.getExpression().getType();
 			return (Class) SUM_TYPES.get(expressionType);
-        } else if (this.aggregate.equals(ReservedWords.AVG)) {
+        } else if (this.aggregate.equals(SQLReservedWords.AVG)) {
             Class expressionType = this.getExpression().getType();
             return (Class) AVG_TYPES.get(expressionType);
 		} else {

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/util/UpdateProcedureGenerator.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/util/UpdateProcedureGenerator.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/util/UpdateProcedureGenerator.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -186,7 +186,7 @@
                     // Construct properly named INPUT variable based on short name of virtual element
                     String virtualElementName = metadata.getFullName(virtualElements.get(i));
                     String virtualElementShortName = metadata.getShortElementName(virtualElementName);
-                    ElementSymbol inputElement = new ElementSymbol(ProcedureReservedWords.INPUT + "." + virtualElementShortName); //$NON-NLS-1$
+                    ElementSymbol inputElement = new ElementSymbol(ProcedureReservedWords.INPUTS + "." + virtualElementShortName); //$NON-NLS-1$
                     values.add(inputElement);
                 }
             }

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/sql/visitor/SQLStringVisitor.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/sql/visitor/SQLStringVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/sql/visitor/SQLStringVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -29,11 +29,13 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import org.teiid.connector.language.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords.Tokens;
+
 import com.metamatrix.common.types.DataTypeManager;
 import com.metamatrix.core.util.StringUtil;
 import com.metamatrix.query.sql.LanguageObject;
 import com.metamatrix.query.sql.LanguageVisitor;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.lang.BetweenCriteria;
 import com.metamatrix.query.sql.lang.Command;
 import com.metamatrix.query.sql.lang.CompareCriteria;
@@ -177,43 +179,43 @@
         parts.add(SPACE);
         
         if (obj.isNegated()) {
-            parts.add(ReservedWords.NOT);
+            parts.add(SQLReservedWords.NOT);
             parts.add(SPACE);
         }
-        parts.add(ReservedWords.BETWEEN);
+        parts.add(SQLReservedWords.BETWEEN);
         parts.add(SPACE);
         parts.add(registerNode(obj.getLowerExpression()));
 
         parts.add(SPACE);
-        parts.add(ReservedWords.AND);
+        parts.add(SQLReservedWords.AND);
         parts.add(SPACE);
         parts.add(registerNode(obj.getUpperExpression()));
     }
 
     public void visit(CaseExpression obj) {
-        parts.add(ReservedWords.CASE);
+        parts.add(SQLReservedWords.CASE);
         parts.add(SPACE);
         parts.add(registerNode(obj.getExpression()) ); 
         parts.add(SPACE);
 
         for (int i = 0; i < obj.getWhenCount(); i++) {
-            parts.add(ReservedWords.WHEN);
+            parts.add(SQLReservedWords.WHEN);
             parts.add(SPACE);
             parts.add(registerNode(obj.getWhenExpression(i)) );
             parts.add(SPACE);
-            parts.add(ReservedWords.THEN);
+            parts.add(SQLReservedWords.THEN);
             parts.add(SPACE);
             parts.add(registerNode(obj.getThenExpression(i)));
             parts.add(SPACE);
         }
 
         if (obj.getElseExpression() != null) {
-            parts.add(ReservedWords.ELSE);
+            parts.add(SQLReservedWords.ELSE);
             parts.add(SPACE);
             parts.add(registerNode(obj.getElseExpression()));
             parts.add(SPACE);
         }
-        parts.add(ReservedWords.END);
+        parts.add(SQLReservedWords.END);
     }
 
     public void visit(CompareCriteria obj) {
@@ -233,9 +235,9 @@
         int operator = obj.getOperator();
         String operatorStr = ""; //$NON-NLS-1$
         if(operator == CompoundCriteria.AND) {
-            operatorStr = ReservedWords.AND;
+            operatorStr = SQLReservedWords.AND;
         } else if(operator == CompoundCriteria.OR) {
-            operatorStr = ReservedWords.OR;
+            operatorStr = SQLReservedWords.OR;
         }
 
         // Get criteria
@@ -283,17 +285,17 @@
 
     public void visit(Delete obj) {
 		//add delete clause
-		parts.add(ReservedWords.DELETE);
+		parts.add(SQLReservedWords.DELETE);
 		parts.add(SPACE);
 		//add from clause
-		parts.add(ReservedWords.FROM);
+		parts.add(SQLReservedWords.FROM);
 		parts.add(SPACE);
 		parts.add(registerNode(obj.getGroup()));
 
 		//add where clause
 		if(obj.getCriteria() != null) {
 			parts.add(SPACE);
-			parts.add(ReservedWords.WHERE);
+			parts.add(SQLReservedWords.WHERE);
 			parts.add(SPACE);
 			parts.add(registerNode(obj.getCriteria()));
 		}
@@ -311,10 +313,10 @@
         // operator and beginning of list
         parts.add(SPACE);
         if (obj.isNegated()) {
-            parts.add(ReservedWords.NOT);
+            parts.add(SQLReservedWords.NOT);
             parts.add(SPACE);
         }
-        parts.add(ReservedWords.IN);
+        parts.add(SQLReservedWords.IN);
         parts.add(" (<dependent values>)"); //$NON-NLS-1$
     }
 
@@ -323,13 +325,13 @@
         List clauses = obj.getClauses();
         if(clauses.size() == 1) {
             replaceStringParts(new Object[] {
-                ReservedWords.FROM, SPACE,
+                SQLReservedWords.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] = ReservedWords.FROM;
+            parts[0] = SQLReservedWords.FROM;
             parts[1] = SPACE;
             Iterator clauseIter = clauses.iterator();
             parts[2] = registerNode((FromClause) clauseIter.next());
@@ -343,7 +345,7 @@
             replaceStringParts(parts);
         } else {
             // Shouldn't happen, but being tolerant
-            replaceStringParts(new Object[] { ReservedWords.FROM });
+            replaceStringParts(new Object[] { SQLReservedWords.FROM });
         }
     }
 
@@ -352,15 +354,15 @@
         List symbols = obj.getSymbols();
         if(symbols.size() == 1) {
             replaceStringParts(new Object[] {
-                ReservedWords.GROUP, SPACE, ReservedWords.BY, SPACE,
+                SQLReservedWords.GROUP, SPACE, SQLReservedWords.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] = ReservedWords.GROUP;
+            parts[0] = SQLReservedWords.GROUP;
             parts[1] = SPACE;
-            parts[2] = ReservedWords.BY;
+            parts[2] = SQLReservedWords.BY;
             parts[3] = SPACE;
             Iterator symbolIter = symbols.iterator();
             parts[4] = registerNode((Expression) symbolIter.next());
@@ -374,7 +376,7 @@
             replaceStringParts(parts);
         } else {
             // Shouldn't happen, but being tolerant
-            replaceStringParts(new Object[] { ReservedWords.GROUP, SPACE, ReservedWords.BY });
+            replaceStringParts(new Object[] { SQLReservedWords.GROUP, SPACE, SQLReservedWords.BY });
         }
     }
 
@@ -384,7 +386,7 @@
         if ( obj.getQueryExpression() != null ) {
             parts.add(registerNode(obj.getQueryExpression()));
         } else {
-            parts.add(ReservedWords.VALUES);
+            parts.add(SQLReservedWords.VALUES);
             parts.add(" ("); //$NON-NLS-1$
             Iterator valueIter = obj.getValues().iterator();
             while(valueIter.hasNext()) {
@@ -405,13 +407,13 @@
     }
 
     public void visit(Create obj) {
-        parts.add(ReservedWords.CREATE);
+        parts.add(SQLReservedWords.CREATE);
         parts.add(SPACE);
-        parts.add(ReservedWords.LOCAL);
+        parts.add(SQLReservedWords.LOCAL);
         parts.add(SPACE);
-        parts.add(ReservedWords.TEMPORARY);
+        parts.add(SQLReservedWords.TEMPORARY);
         parts.add(SPACE);
-        parts.add(ReservedWords.TABLE);
+        parts.add(SQLReservedWords.TABLE);
         parts.add(SPACE);
         parts.add(registerNode(obj.getTable()));
         parts.add(SPACE);
@@ -434,17 +436,17 @@
     }
     
     public void visit(Drop obj) {
-        parts.add(ReservedWords.DROP);
+        parts.add(SQLReservedWords.DROP);
         parts.add(SPACE);
-        parts.add(ReservedWords.TABLE);
+        parts.add(SQLReservedWords.TABLE);
         parts.add(SPACE);
         parts.add(registerNode(obj.getTable()));
     }
     
     private void formatBasicInsert(Insert obj) {
-        parts.add(ReservedWords.INSERT);
+        parts.add(SQLReservedWords.INSERT);
         parts.add(SPACE);
-        parts.add(ReservedWords.INTO);
+        parts.add(SQLReservedWords.INTO);
         parts.add(SPACE);
         parts.add(registerNode(obj.getGroup()));
         parts.add(SPACE);
@@ -473,13 +475,13 @@
         Object exprPart = registerNode(expr);
         parts.add(exprPart);
         parts.add(SPACE);
-        parts.add(ReservedWords.IS);
+        parts.add(SQLReservedWords.IS);
         parts.add(SPACE);
         if (obj.isNegated()) {
-            parts.add(ReservedWords.NOT);
+            parts.add(SQLReservedWords.NOT);
             parts.add(SPACE);
         }
-        parts.add(ReservedWords.NULL);
+        parts.add(SQLReservedWords.NULL);
     }
 
     public void visit(JoinPredicate obj) {
@@ -518,7 +520,7 @@
         List joinCriteria = obj.getJoinCriteria();
 		if(joinCriteria != null && joinCriteria.size() > 0) {
             parts.add(SPACE);
-			parts.add(ReservedWords.ON);
+			parts.add(SQLReservedWords.ON);
             parts.add(SPACE);
 			Iterator critIter = joinCriteria.iterator();
 			while(critIter.hasNext()) {
@@ -533,7 +535,7 @@
 
 				if(critIter.hasNext()) {
 					parts.add(SPACE);
-					parts.add(ReservedWords.AND);
+					parts.add(SQLReservedWords.AND);
 					parts.add(SPACE);
 				}
 			}
@@ -570,21 +572,21 @@
     public void visit(JoinType obj) {
         Object[] parts = null;
         if(obj.equals(JoinType.JOIN_INNER)) {
-            parts = new Object[] { ReservedWords.INNER, SPACE, ReservedWords.JOIN };
+            parts = new Object[] { SQLReservedWords.INNER, SPACE, SQLReservedWords.JOIN };
         } else if(obj.equals(JoinType.JOIN_CROSS)) {
-            parts = new Object[] { ReservedWords.CROSS, SPACE, ReservedWords.JOIN };
+            parts = new Object[] { SQLReservedWords.CROSS, SPACE, SQLReservedWords.JOIN };
         } else if(obj.equals(JoinType.JOIN_LEFT_OUTER)) {
-            parts = new Object[] { ReservedWords.LEFT, SPACE, ReservedWords.OUTER, SPACE, ReservedWords.JOIN };
+            parts = new Object[] { SQLReservedWords.LEFT, SPACE, SQLReservedWords.OUTER, SPACE, SQLReservedWords.JOIN };
         } else if(obj.equals(JoinType.JOIN_RIGHT_OUTER)) {
-            parts = new Object[] { ReservedWords.RIGHT, SPACE, ReservedWords.OUTER, SPACE, ReservedWords.JOIN };
+            parts = new Object[] { SQLReservedWords.RIGHT, SPACE, SQLReservedWords.OUTER, SPACE, SQLReservedWords.JOIN };
         } else if(obj.equals(JoinType.JOIN_FULL_OUTER)) {
-            parts = new Object[] { ReservedWords.FULL, SPACE, ReservedWords.OUTER, SPACE, ReservedWords.JOIN };
+            parts = new Object[] { SQLReservedWords.FULL, SPACE, SQLReservedWords.OUTER, SPACE, SQLReservedWords.JOIN };
         } else if(obj.equals(JoinType.JOIN_UNION)) {
-            parts = new Object[] { ReservedWords.UNION, SPACE, ReservedWords.JOIN };
+            parts = new Object[] { SQLReservedWords.UNION, SPACE, SQLReservedWords.JOIN };
         } else if (obj.equals(JoinType.JOIN_SEMI)) {
-            parts = new Object[] { "SEMI", SPACE, ReservedWords.JOIN }; //$NON-NLS-1$
+            parts = new Object[] { "SEMI", SPACE, SQLReservedWords.JOIN }; //$NON-NLS-1$
         } else if (obj.equals(JoinType.JOIN_ANTI_SEMI)) {
-            parts = new Object[] { "ANTI SEMI", SPACE, ReservedWords.JOIN }; //$NON-NLS-1$
+            parts = new Object[] { "ANTI SEMI", SPACE, SQLReservedWords.JOIN }; //$NON-NLS-1$
         }
 
         replaceStringParts(parts);
@@ -595,17 +597,17 @@
 
         parts.add(SPACE);
         if (obj.isNegated()) {
-            parts.add(ReservedWords.NOT);
+            parts.add(SQLReservedWords.NOT);
             parts.add(SPACE);
         }
-        parts.add(ReservedWords.LIKE);
+        parts.add(SQLReservedWords.LIKE);
         parts.add(SPACE);
 
         parts.add(registerNode(obj.getRightExpression()));
 
         if(obj.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR) {
             parts.add(SPACE);
-            parts.add(ReservedWords.ESCAPE);
+            parts.add(SQLReservedWords.ESCAPE);
             parts.add(" '"); //$NON-NLS-1$
             parts.add("" + obj.getEscapeChar()); //$NON-NLS-1$
             parts.add("'"); //$NON-NLS-1$
@@ -613,34 +615,34 @@
     }
 
     public void visit(NotCriteria obj) {
-        parts.add(ReservedWords.NOT);
+        parts.add(SQLReservedWords.NOT);
         parts.add(" ("); //$NON-NLS-1$
         parts.add(registerNode(obj.getCriteria()));
         parts.add(")"); //$NON-NLS-1$
     }
 
     public void visit(Option obj) {
-        parts.add(ReservedWords.OPTION);
+        parts.add(SQLReservedWords.OPTION);
 
 		if(obj.getShowPlan()) {
 			parts.add(" "); //$NON-NLS-1$
-			parts.add(ReservedWords.SHOWPLAN);
+			parts.add(SQLReservedWords.SHOWPLAN);
 		}
 
         if(obj.getPlanOnly()) {
             parts.add(" "); //$NON-NLS-1$
-            parts.add(ReservedWords.PLANONLY);
+            parts.add(SQLReservedWords.PLANONLY);
         }
 
 		if(obj.getDebug()) {
 			parts.add(" "); //$NON-NLS-1$
-			parts.add(ReservedWords.DEBUG);
+			parts.add(SQLReservedWords.DEBUG);
 		}
         
         Collection groups = obj.getDependentGroups();
         if(groups != null && groups.size() > 0) {
             parts.add(" "); //$NON-NLS-1$
-            parts.add(ReservedWords.MAKEDEP);
+            parts.add(SQLReservedWords.MAKEDEP);
             parts.add(" "); //$NON-NLS-1$
 
             Iterator iter = groups.iterator();
@@ -657,7 +659,7 @@
         groups = obj.getNotDependentGroups();
         if(groups != null && groups.size() > 0) {
             parts.add(" "); //$NON-NLS-1$
-            parts.add(ReservedWords.MAKENOTDEP);
+            parts.add(SQLReservedWords.MAKENOTDEP);
             parts.add(" "); //$NON-NLS-1$
 
             Iterator iter = groups.iterator();
@@ -674,7 +676,7 @@
         groups = obj.getNoCacheGroups();
         if(groups != null && groups.size() > 0) {
             parts.add(" "); //$NON-NLS-1$
-            parts.add(ReservedWords.NOCACHE);
+            parts.add(SQLReservedWords.NOCACHE);
             parts.add(" "); //$NON-NLS-1$
 
             Iterator iter = groups.iterator();
@@ -688,15 +690,15 @@
             }
         }else if(obj.isNoCache()){
             parts.add(" "); //$NON-NLS-1$
-            parts.add(ReservedWords.NOCACHE);
+            parts.add(SQLReservedWords.NOCACHE);
         }
 
     }
 
     public void visit(OrderBy obj) {
-        parts.add(ReservedWords.ORDER);
+        parts.add(SQLReservedWords.ORDER);
         parts.add(SPACE);
-        parts.add(ReservedWords.BY);
+        parts.add(SQLReservedWords.BY);
 		parts.add(SPACE);
 		for (Iterator<OrderByItem> iterator = obj.getOrderByItems().iterator(); iterator.hasNext();) {
 			OrderByItem item = iterator.next();
@@ -718,20 +720,20 @@
 	    }
         if(!obj.isAscending()) {
             parts.add(SPACE);
-            parts.add(ReservedWords.DESC);
+            parts.add(SQLReservedWords.DESC);
         } // Don't print default "ASC"
     }
     
     public void visit(DynamicCommand obj) {
-        parts.add(ReservedWords.EXECUTE);
+        parts.add(SQLReservedWords.EXECUTE);
         parts.add(SPACE);
-        parts.add(ReservedWords.STRING);
+        parts.add(SQLReservedWords.STRING);
         parts.add(SPACE);
         parts.add(registerNode(obj.getSql()));
 
         if(obj.isAsClauseSet()){
             parts.add(SPACE);
-            parts.add(ReservedWords.AS);
+            parts.add(SQLReservedWords.AS);
             parts.add(SPACE);
             for (int i = 0; i < obj.getAsColumns().size(); i++) {
                 ElementSymbol symbol = (ElementSymbol)obj.getAsColumns().get(i);
@@ -747,21 +749,21 @@
 
         if(obj.getIntoGroup() != null){
             parts.add(SPACE);
-            parts.add(ReservedWords.INTO);
+            parts.add(SQLReservedWords.INTO);
             parts.add(SPACE);
             parts.add(registerNode(obj.getIntoGroup()));
         }
 
         if(obj.getUsing() != null && !obj.getUsing().isEmpty()) {
             parts.add(SPACE);
-            parts.add(ReservedWords.USING);
+            parts.add(SQLReservedWords.USING);
             parts.add(SPACE);
             parts.add(registerNode(obj.getUsing()));
         }
 
         if (obj.getUpdatingModelCount() > 0) {
             parts.add(SPACE);
-            parts.add(ReservedWords.UPDATE);
+            parts.add(SQLReservedWords.UPDATE);
             parts.add(SPACE);
             if (obj.getUpdatingModelCount() > 1) {
                 parts.add("*"); //$NON-NLS-1$
@@ -795,7 +797,7 @@
 
         if(obj.getInto() != null){
             parts.add(SPACE);
-            parts.add(ReservedWords.INTO);
+            parts.add(SQLReservedWords.INTO);
             parts.add(SPACE);
             parts.add(registerNode(obj.getInto()));
         }
@@ -808,7 +810,7 @@
         // Where clause
         if(obj.getCriteria() != null) {
             parts.add(SPACE);
-            parts.add(ReservedWords.WHERE);
+            parts.add(SQLReservedWords.WHERE);
             parts.add(SPACE);
             parts.add(registerNode(obj.getCriteria()));
         }
@@ -822,7 +824,7 @@
 		// Having clause
 		if(obj.getHaving() != null) {
             parts.add(SPACE);
-            parts.add(ReservedWords.HAVING);
+            parts.add(SQLReservedWords.HAVING);
             parts.add(SPACE);
             parts.add(registerNode(obj.getHaving()));
 		}
@@ -846,33 +848,33 @@
     }
 
     public void visit(SearchedCaseExpression obj) {
-        parts.add(ReservedWords.CASE);
+        parts.add(SQLReservedWords.CASE);
         for (int i = 0; i < obj.getWhenCount(); i++) {
             parts.add(SPACE);
-            parts.add(ReservedWords.WHEN);
+            parts.add(SQLReservedWords.WHEN);
             parts.add(SPACE);
             parts.add(registerNode(obj.getWhenCriteria(i)));
             parts.add(SPACE);
-            parts.add(ReservedWords.THEN);
+            parts.add(SQLReservedWords.THEN);
             parts.add(SPACE);
             parts.add(registerNode(obj.getThenExpression(i)));
         }
         parts.add(SPACE);
         if (obj.getElseExpression() != null) {
-            parts.add(ReservedWords.ELSE);
+            parts.add(SQLReservedWords.ELSE);
             parts.add(SPACE);
             parts.add(registerNode(obj.getElseExpression()));
             parts.add(SPACE);
         }
-        parts.add(ReservedWords.END);
+        parts.add(SQLReservedWords.END);
     }
 
     public void visit(Select obj) {
-        parts.add(ReservedWords.SELECT);
+        parts.add(SQLReservedWords.SELECT);
         parts.add(SPACE);
 
 		if(obj.isDistinct()) {
-			parts.add(ReservedWords.DISTINCT);
+			parts.add(SQLReservedWords.DISTINCT);
 			parts.add(SPACE);
 		}
 
@@ -893,10 +895,10 @@
 		// operator and beginning of list
 		parts.add(SPACE);
         if (obj.isNegated()) {
-            parts.add(ReservedWords.NOT);
+            parts.add(SQLReservedWords.NOT);
             parts.add(SPACE);
         }
-		parts.add(ReservedWords.IN);
+		parts.add(SQLReservedWords.IN);
 		parts.add(" ("); //$NON-NLS-1$
 
 		// value list
@@ -935,7 +937,7 @@
         parts.add(SPACE);
 
         if(obj.isAll()) {
-            parts.add(ReservedWords.ALL);
+            parts.add(SQLReservedWords.ALL);
             parts.add(SPACE);
         }
 
@@ -978,7 +980,7 @@
     public void visit(StoredProcedure obj) {
     	addCacheHint(obj);
         //exec clause
-        parts.add(ReservedWords.EXEC);
+        parts.add(SQLReservedWords.EXEC);
 		parts.add(SPACE);
 		parts.add(obj.getProcedureName());
 		parts.add("("); //$NON-NLS-1$
@@ -1046,10 +1048,10 @@
         // operator and beginning of list
         parts.add(SPACE);
         if (obj.isNegated()) {
-            parts.add(ReservedWords.NOT);
+            parts.add(SQLReservedWords.NOT);
             parts.add(SPACE);
         }
-        parts.add(ReservedWords.IN);
+        parts.add(SQLReservedWords.IN);
         parts.add(" ("); //$NON-NLS-1$
         parts.add(registerNode(obj.getCommand()));
         parts.add(")"); //$NON-NLS-1$
@@ -1064,13 +1066,13 @@
 
     public void visit(Update obj) {
         // Update clause
-        parts.add(ReservedWords.UPDATE);
+        parts.add(SQLReservedWords.UPDATE);
 		parts.add(SPACE);
         parts.add(registerNode(obj.getGroup()));
 		parts.add(SPACE);
 
         // Set clause
-        parts.add(ReservedWords.SET);
+        parts.add(SQLReservedWords.SET);
         parts.add(SPACE);
 
         parts.add(registerNode(obj.getChangeList()));
@@ -1078,7 +1080,7 @@
 		// Where clause
 		if(obj.getCriteria() != null) {
 			parts.add(SPACE);
-			parts.add(ReservedWords.WHERE);
+			parts.add(SQLReservedWords.WHERE);
 			parts.add(SPACE);
 			parts.add(registerNode(obj.getCriteria()));
 		}
@@ -1101,12 +1103,12 @@
 		parts.add("("); //$NON-NLS-1$
 
 		if(obj.isDistinct()) {
-			parts.add(ReservedWords.DISTINCT);
+			parts.add(SQLReservedWords.DISTINCT);
 			parts.add(" "); //$NON-NLS-1$
 		}
 
 		if(obj.getExpression() == null) {
-			parts.add(ReservedWords.ALL_COLS);
+			parts.add(Tokens.ALL_COLS);
 		} else {
 			parts.add(registerNode(obj.getExpression()));
 		}
@@ -1116,7 +1118,7 @@
     public void visit(AliasSymbol obj) {
         parts.add(registerNode(obj.getSymbol()));
         parts.add(SPACE);
-        parts.add(ReservedWords.AS);
+        parts.add(SQLReservedWords.AS);
         parts.add(SPACE);
         parts.add(escapeSinglePart(obj.getOutputName()));
     }
@@ -1136,7 +1138,7 @@
         	constantParts = new Object[] {"?"}; //$NON-NLS-1$
         } else if(obj.isNull()) {
         	if(type.equals(DataTypeManager.DefaultDataClasses.BOOLEAN)) {
-    			constantParts = new Object[] {ReservedWords.UNKNOWN};
+    			constantParts = new Object[] {SQLReservedWords.UNKNOWN};
         	} else {
     			constantParts = new Object[] {"null"}; //$NON-NLS-1$
         	}
@@ -1144,7 +1146,7 @@
             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) ? ReservedWords.TRUE : ReservedWords.FALSE}; 
+                constantParts = new Object[] { obj.getValue().equals(Boolean.TRUE) ? SQLReservedWords.TRUE : SQLReservedWords.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)) {
@@ -1206,18 +1208,18 @@
 			// Hide this function, which is implicit
             parts.add(registerNode(args[0]));
 
-		} else if(name.equalsIgnoreCase(ReservedWords.CONVERT) || name.equalsIgnoreCase(ReservedWords.CAST)) {
+		} else if(name.equalsIgnoreCase(SQLReservedWords.CONVERT) || name.equalsIgnoreCase(SQLReservedWords.CAST)) {
 			parts.add(name);
 			parts.add("("); //$NON-NLS-1$
 
 			if(args != null && args.length > 0) {
 				parts.add(registerNode(args[0]));
 
-				if(name.equalsIgnoreCase(ReservedWords.CONVERT)) {
+				if(name.equalsIgnoreCase(SQLReservedWords.CONVERT)) {
 					parts.add(", "); //$NON-NLS-1$
 				} else {
 					parts.add(" "); //$NON-NLS-1$
-					parts.add(ReservedWords.AS);
+					parts.add(SQLReservedWords.AS);
 					parts.add(" "); //$NON-NLS-1$
 				}
 
@@ -1244,7 +1246,7 @@
 			}
 			parts.add(")"); //$NON-NLS-1$
 
-        } else if(name.equalsIgnoreCase(ReservedWords.TIMESTAMPADD) || name.equalsIgnoreCase(ReservedWords.TIMESTAMPDIFF)) {
+        } else if(name.equalsIgnoreCase(SQLReservedWords.TIMESTAMPADD) || name.equalsIgnoreCase(SQLReservedWords.TIMESTAMPDIFF)) {
             parts.add(name);
             parts.add("("); //$NON-NLS-1$
 
@@ -1287,7 +1289,7 @@
 
         if(alias != null) {
             parts.add(SPACE);
-            parts.add(ReservedWords.AS);
+            parts.add(SQLReservedWords.AS);
             parts.add(SPACE);
             parts.add(escapeSinglePart(alias));
         }
@@ -1306,12 +1308,12 @@
     public void visit(Block obj) {
     	List statements = obj.getStatements();
     	if(statements.size() == 1) {
-    		replaceStringParts(new Object[] { ReservedWords.BEGIN, "\n", //$NON-NLS-1$
-			registerNode((Statement)obj.getStatements().get(0)), "\n", ReservedWords.END}); //$NON-NLS-1$
+    		replaceStringParts(new Object[] { SQLReservedWords.BEGIN, "\n", //$NON-NLS-1$
+			registerNode((Statement)obj.getStatements().get(0)), "\n", SQLReservedWords.END}); //$NON-NLS-1$
     	} else if(statements.size() > 1) {
 	        List parts = new ArrayList();
             // Add first clause
-            parts.add(ReservedWords.BEGIN);
+            parts.add(SQLReservedWords.BEGIN);
             parts.add("\n"); //$NON-NLS-1$
             Iterator stmtIter = statements.iterator();
             while(stmtIter.hasNext()) {
@@ -1319,12 +1321,12 @@
 	            parts.add(registerNode((Statement) stmtIter.next()));
                 parts.add("\n"); //$NON-NLS-1$
             }
-            parts.add(ReservedWords.END);
+            parts.add(SQLReservedWords.END);
             replaceStringParts(parts.toArray());
         } else {
             // Shouldn't happen, but being tolerant
-            replaceStringParts(new Object[] { ReservedWords.BEGIN, "\n", //$NON-NLS-1$
-            							ReservedWords.END });
+            replaceStringParts(new Object[] { SQLReservedWords.BEGIN, "\n", //$NON-NLS-1$
+            							SQLReservedWords.END });
         }
     }
 
@@ -1334,19 +1336,19 @@
     }
 
     public void visit(CreateUpdateProcedureCommand obj) {
-        parts.add(ReservedWords.CREATE);
+        parts.add(SQLReservedWords.CREATE);
         parts.add(SPACE);
         if(!obj.isUpdateProcedure()){
-            parts.add(ReservedWords.VIRTUAL);
+            parts.add(SQLReservedWords.VIRTUAL);
             parts.add(SPACE);
         }
-        parts.add(ReservedWords.PROCEDURE);
+        parts.add(SQLReservedWords.PROCEDURE);
         parts.add("\n"); //$NON-NLS-1$
         parts.add(registerNode(obj.getBlock()));
     }
 
     public void visit(DeclareStatement obj) {
-		parts.add(ReservedWords.DECLARE);
+		parts.add(SQLReservedWords.DECLARE);
 		parts.add(SPACE);
         parts.add(obj.getVariableType());
         parts.add(SPACE);
@@ -1367,14 +1369,14 @@
     }
 
     public void visit(IfStatement obj) {
-        parts.add(ReservedWords.IF);
+        parts.add(SQLReservedWords.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(ReservedWords.ELSE);
+	        parts.add(SQLReservedWords.ELSE);
 	        parts.add("\n"); //$NON-NLS-1$
 	        parts.add(registerNode(obj.getElseBlock()));
         }
@@ -1385,19 +1387,19 @@
     }
 
     public void visit(HasCriteria obj) {
-        parts.add( ReservedWords.HAS);
+        parts.add( SQLReservedWords.HAS);
         parts.add(SPACE);
         parts.add(registerNode(obj.getSelector()));
     }
 
     public void visit(TranslateCriteria obj) {
-        parts.add(ReservedWords.TRANSLATE);
+        parts.add(SQLReservedWords.TRANSLATE);
         parts.add(SPACE);
         parts.add(registerNode(obj.getSelector()));
 
         if(obj.hasTranslations()) {
 	        parts.add(SPACE);
-	        parts.add(ReservedWords.WITH);
+	        parts.add(SQLReservedWords.WITH);
 	        parts.add(SPACE);
         	parts.add("("); //$NON-NLS-1$
 	        Iterator critIter = obj.getTranslations().iterator();
@@ -1437,29 +1439,29 @@
         		parts.add("<> "); //$NON-NLS-1$
         		break;
         	case CriteriaSelector.IN:
-        		parts.add(ReservedWords.IN);
+        		parts.add(SQLReservedWords.IN);
         		parts.add(SPACE);
         		break;
         	case CriteriaSelector.IS_NULL:
-        		parts.add(ReservedWords.IS);
+        		parts.add(SQLReservedWords.IS);
         		parts.add(SPACE);
-        		parts.add(ReservedWords.NULL);
+        		parts.add(SQLReservedWords.NULL);
         		parts.add(SPACE);
         		break;
             case CriteriaSelector.LIKE:
-                parts.add(ReservedWords.LIKE);
+                parts.add(SQLReservedWords.LIKE);
                 parts.add(SPACE);
                 break;
             case CriteriaSelector.BETWEEN:
-                parts.add(ReservedWords.BETWEEN);
+                parts.add(SQLReservedWords.BETWEEN);
                 parts.add(SPACE);
                 break;
         }
 
-        parts.add(ReservedWords.CRITERIA);
+        parts.add(SQLReservedWords.CRITERIA);
 		if(obj.hasElements()) {
 	        parts.add(SPACE);
-	        parts.add(ReservedWords.ON);
+	        parts.add(SQLReservedWords.ON);
 	        parts.add(SPACE);
 	        parts.add("("); //$NON-NLS-1$
 
@@ -1477,7 +1479,7 @@
     public void visit(RaiseErrorStatement obj) {
         Object parts[] = new Object[4];
 
-        parts[0] = ReservedWords.ERROR;
+        parts[0] = SQLReservedWords.ERROR;
         parts[1] = SPACE;
         parts[2] = registerNode(obj.getExpression());
         parts[3] = ";"; //$NON-NLS-1$
@@ -1485,23 +1487,23 @@
     }
 
     public void visit(BreakStatement obj) {
-        parts.add(ReservedWords.BREAK);
+        parts.add(SQLReservedWords.BREAK);
         parts.add(";"); //$NON-NLS-1$
     }
 
     public void visit(ContinueStatement obj) {
-        parts.add(ReservedWords.CONTINUE);
+        parts.add(SQLReservedWords.CONTINUE);
         parts.add(";"); //$NON-NLS-1$
     }
 
     public void visit(LoopStatement obj) {
-        parts.add(ReservedWords.LOOP);
+        parts.add(SQLReservedWords.LOOP);
         parts.add(" "); //$NON-NLS-1$
-        parts.add(ReservedWords.ON);
+        parts.add(SQLReservedWords.ON);
         parts.add(" ("); //$NON-NLS-1$
         parts.add(registerNode(obj.getCommand()));
         parts.add(") "); //$NON-NLS-1$
-        parts.add(ReservedWords.AS);
+        parts.add(SQLReservedWords.AS);
         parts.add(" "); //$NON-NLS-1$
         parts.add(obj.getCursorName());
         parts.add("\n"); //$NON-NLS-1$
@@ -1509,7 +1511,7 @@
     }
 
     public void visit(WhileStatement obj) {
-        parts.add(ReservedWords.WHILE);
+        parts.add(SQLReservedWords.WHILE);
         parts.add("("); //$NON-NLS-1$
         parts.add(registerNode(obj.getCondition()));
         parts.add(")\n"); //$NON-NLS-1$
@@ -1518,7 +1520,7 @@
 
     public void visit(ExistsCriteria obj) {
         // operator and beginning of list
-        parts.add(ReservedWords.EXISTS);
+        parts.add(SQLReservedWords.EXISTS);
         parts.add(" ("); //$NON-NLS-1$
         parts.add(registerNode(obj.getCommand()));
         parts.add(")"); //$NON-NLS-1$
@@ -1550,7 +1552,7 @@
 
     
     public void visit(Limit obj) {
-        parts.add(ReservedWords.LIMIT);
+        parts.add(SQLReservedWords.LIMIT);
         if (obj.getOffset() != null) {
             parts.add(SPACE);
             parts.add(registerNode(obj.getOffset()));
@@ -1589,7 +1591,7 @@
     	if(string == null) {
     	    return false;
     	}
-   		return ReservedWords.isReservedWord(string);
+   		return SQLReservedWords.isReservedWord(string);
     }
 
 }

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -25,10 +25,11 @@
 import java.util.Collection;
 import java.util.Set;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import com.metamatrix.common.types.DataTypeManager;
 import com.metamatrix.query.QueryPlugin;
 import com.metamatrix.query.sql.LanguageObject;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.navigator.PreOrderNavigator;
 import com.metamatrix.query.sql.symbol.AggregateSymbol;
 import com.metamatrix.query.sql.symbol.CaseExpression;
@@ -71,10 +72,10 @@
         
         // Verify data type of aggregate expression
         String aggregateFunction = obj.getAggregateFunction();
-        if((aggregateFunction.equals(ReservedWords.SUM) || aggregateFunction.equals(ReservedWords.AVG)) && obj.getType() == null) {
+        if((aggregateFunction.equals(SQLReservedWords.SUM) || aggregateFunction.equals(SQLReservedWords.AVG)) && obj.getType() == null) {
             handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0041, new Object[] {aggregateFunction, obj}), obj);
         }
-        if((aggregateFunction.equals(ReservedWords.MIN) || aggregateFunction.equals(ReservedWords.MAX)) && DataTypeManager.isNonComparable(DataTypeManager.getDataTypeName(aggExp.getType()))) {
+        if((aggregateFunction.equals(SQLReservedWords.MIN) || aggregateFunction.equals(SQLReservedWords.MAX)) && DataTypeManager.isNonComparable(DataTypeManager.getDataTypeName(aggExp.getType()))) {
     		handleValidationError(QueryPlugin.Util.getString("AggregateValidationVisitor.non_comparable", new Object[] {aggregateFunction, obj}), obj); //$NON-NLS-1$
         }
         validateBelow = false;

Modified: branches/JCA/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java
===================================================================
--- branches/JCA/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -330,8 +330,8 @@
     	String groupName = variable.getGroupSymbol().getCanonicalName();
 
     	if(groupName.equals(ProcedureReservedWords.INPUT) ||
-			groupName.equals(ProcedureReservedWords.CHANGING)) {
-			handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0012, new Object[] {ProcedureReservedWords.INPUT, ProcedureReservedWords.CHANGING}), obj);
+			groupName.equals(ProcedureReservedWords.CHANGING) || groupName.equals(ProcedureReservedWords.INPUTS)) {
+			handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0012, new Object[] {ProcedureReservedWords.INPUT, ProcedureReservedWords.INPUTS, ProcedureReservedWords.CHANGING}), obj);
 		}
 
 		if(obj.hasCommand()) {
@@ -376,10 +376,9 @@
     	ElementSymbol variable = obj.getVariable();
     	String elementname = variable.getShortName().toUpperCase();
 
-		// varaible cnnot be one of the special variables
-    	if(elementname.equals(ProcedureReservedWords.INPUT) || elementname.equals(ProcedureReservedWords.CHANGING)
-				|| elementname.equals(ProcedureReservedWords.ROWS_UPDATED)) {
-			handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0017, new Object[] {ProcedureReservedWords.INPUT, ProcedureReservedWords.CHANGING, ProcedureReservedWords.ROWS_UPDATED}), obj);
+		// varible cannot be one of the special variables
+    	if(elementname.equals(ProcedureReservedWords.ROWS_UPDATED)) {
+			handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0017, new Object[] {ProcedureReservedWords.ROWS_UPDATED}), obj);
 		}
         
         visit((AssignmentStatement)obj);

Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/datamgr/language/LanguageBridgeFactory.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/datamgr/language/LanguageBridgeFactory.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/datamgr/language/LanguageBridgeFactory.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -47,6 +47,7 @@
 import org.teiid.connector.language.NamedTable;
 import org.teiid.connector.language.Not;
 import org.teiid.connector.language.QueryExpression;
+import org.teiid.connector.language.SearchedWhenClause;
 import org.teiid.connector.language.Select;
 import org.teiid.connector.language.SearchedCase;
 import org.teiid.connector.language.SortSpecification;
@@ -471,14 +472,11 @@
     }
 
     SearchedCase translate(SearchedCaseExpression expr) throws MetaMatrixComponentException {
-        ArrayList<Condition> whens = new ArrayList<Condition>();
-        ArrayList<org.teiid.connector.language.Expression> thens = new ArrayList<org.teiid.connector.language.Expression>();
+        ArrayList<SearchedWhenClause> whens = new ArrayList<SearchedWhenClause>();
         for (int i = 0; i < expr.getWhenCount(); i++) {
-            whens.add(translate(expr.getWhenCriteria(i)));
-            thens.add(translate(expr.getThenExpression(i)));
+        	whens.add(new SearchedWhenClause(translate(expr.getWhenCriteria(i)), translate(expr.getThenExpression(i))));
         }
         return new SearchedCase(whens,
-                                      thens,
                                       translate(expr.getElseExpression()),
                                       expr.getType());
     }

Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -44,7 +44,7 @@
 	private static BasicSourceCapabilities SYSTEM_CAPS = new BasicSourceCapabilities();
 	
     private ConnectorManagerRepository connectorRepo;
-    private DQPWorkContext workContext;
+    private VDBMetaData vdb;
     
     private Map<String, SourceCapabilities> userCache = new HashMap<String, SourceCapabilities>();
     
@@ -52,9 +52,9 @@
      * Construct a CacheFinder that wraps another finder
      * @param internalFinder Finder to wrap
      */
-    public CachedFinder(ConnectorManagerRepository repo, DQPWorkContext workContext) {
+    public CachedFinder(ConnectorManagerRepository repo, VDBMetaData vdb) {
         this.connectorRepo = repo;
-        this.workContext = workContext;
+        this.vdb = vdb;
     	userCache.put(CoreConstants.SYSTEM_MODEL, SYSTEM_CAPS);
     }
 
@@ -67,7 +67,6 @@
             return caps;
         }
         ConnectorException exception = null;
-        VDBMetaData vdb = workContext.getVDB();
         ModelMetaData model = vdb.getModel(modelName);
         for (String binding:vdb.getConnectorBindingNames(model.getConnectorReference())) {
         	try {

Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -40,6 +40,7 @@
 import org.teiid.adminapi.impl.ModelMetaData;
 import org.teiid.adminapi.impl.VDBMetaData;
 import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.language.SQLReservedWords;
 import org.teiid.connector.metadata.runtime.AbstractMetadataRecord;
 import org.teiid.connector.metadata.runtime.Column;
 import org.teiid.connector.metadata.runtime.Datatype;
@@ -74,7 +75,6 @@
 import com.metamatrix.query.processor.CollectionTupleSource;
 import com.metamatrix.query.processor.ProcessorDataManager;
 import com.metamatrix.query.processor.QueryProcessor;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.lang.Command;
 import com.metamatrix.query.sql.lang.Query;
 import com.metamatrix.query.sql.lang.StoredProcedure;
@@ -423,7 +423,7 @@
         String keyElementName)
         throws MetaMatrixComponentException, MetaMatrixProcessingException {
 
-        String query = ReservedWords.SELECT + ' ' + keyElementName + " ," + returnElementName + ' ' + ReservedWords.FROM + ' ' + codeTableName; //$NON-NLS-1$ 
+        String query = SQLReservedWords.SELECT + ' ' + keyElementName + " ," + returnElementName + ' ' + SQLReservedWords.FROM + ' ' + codeTableName; //$NON-NLS-1$ 
         
         final CacheKey codeRequestId = this.codeTableCache.createCacheRequest(codeTableName, returnElementName, keyElementName, context);
 

Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -29,6 +29,7 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.teiid.connector.language.SQLReservedWords;
 import org.teiid.dqp.internal.process.DQPCore.ClientState;
 import org.teiid.dqp.internal.process.SessionAwareCache.CacheID;
 import org.teiid.dqp.internal.process.multisource.MultiSourceMetadataWrapper;
@@ -52,7 +53,6 @@
 import com.metamatrix.query.parser.ParseInfo;
 import com.metamatrix.query.parser.QueryParser;
 import com.metamatrix.query.resolver.QueryResolver;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.lang.Command;
 import com.metamatrix.query.sql.lang.Query;
 import com.metamatrix.query.sql.lang.XQuery;
@@ -315,7 +315,7 @@
         
         Expression expression = symbol.getExpression();
         String function = symbol.getAggregateFunction();
-        if(function.equals(ReservedWords.MIN) || function.equals(ReservedWords.MAX)){
+        if(function.equals(SQLReservedWords.MIN) || function.equals(SQLReservedWords.MAX)){
             if(expression instanceof ElementSymbol) {
                 return createColumnMetadata(shortColumnName, (ElementSymbol)expression);
             }

Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/Request.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/Request.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -178,7 +178,7 @@
         	return;
         }
     	// Prepare dependencies for running the optimizer        
-        this.capabilitiesFinder = new CachedFinder(this.connectorManagerRepo, workContext);        
+        this.capabilitiesFinder = new CachedFinder(this.connectorManagerRepo, workContext.getVDB());        
         
 
         metadata = workContext.getVDB().getAttachment(QueryMetadataInterface.class);

Modified: branches/JCA/engine/src/main/javacc/com/metamatrix/query/parser/SQLParser.jj
===================================================================
--- branches/JCA/engine/src/main/javacc/com/metamatrix/query/parser/SQLParser.jj	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/main/javacc/com/metamatrix/query/parser/SQLParser.jj	2010-03-02 14:32:21 UTC (rev 1886)
@@ -60,16 +60,22 @@
 TOKEN: /* Data types */
 {
 	<STRING: "string">
+|   <VARCHAR: "varchar">
 |	<BOOLEAN: "boolean">
 |	<BYTE: "byte">
+|   <TINYINT: "tinyint">
 |	<SHORT: "short">
+|   <SMALLINT: "smallint">
 |	<CHAR: "char">
 |	<INTEGER: "integer">
 |	<LONG: "long">
+|   <BIGINT: "bigint">
 |	<BIGINTEGER: "biginteger">
-|	<FLOAT: "float"> 
+|	<FLOAT: "float">
+|   <REAL: "real"> 
 |	<DOUBLE: "double">
 |	<BIGDECIMAL: "bigdecimal">
+|   <DECIMAL: "decimal">
 |	<DATE: "date">
 |	<TIME: "time">
 |	<TIMESTAMP: "timestamp">
@@ -97,24 +103,54 @@
 
 TOKEN : /* Reserved words */
 {
-    <ALL: "all">
+    <ADD: "add">
+|   <ALL: "all">
+|   <ALTER: "alter">
 |   <AND: "and">
 |   <ANY: "any">
+|   <ARRAY: "array">
 |   <AS: "as">
 |   <ASC: "asc">
+|   <ATOMIC: "atomic">
+|   <AUTORIZATION: "authorization">
 |   <BEGIN: "begin">
 |   <BETWEEN: "between">
+|   <BINARY: "binary">
+|   <BOTH: "both">
 |   <BREAK: "break">
 |   <BY: "by">
+|   <CALL: "call">
+|   <CALLED: "called">
+|   <CASCADED: "cascaded">
 |   <CASE: "case">
+|   <CHARACTER: "character">
+|   <CHECK: "check">
+|   <CLOSE: "close">
+|   <COLLATE: "collate">
+|   <COLUMN: "column">
+|   <COMMIT: "commit">
+|   <CONNECT: "connect">
+|   <CONSTRAINT: "constraint">
 |   <CONTINUE: "continue">
+|   <CORRESPONDING: "corresponding">
+|   <CURRENT_DATE: "current_date">
+|   <CURRENT_TIME: "current_time">
+|   <CURRENT_TIMESTAMP: "current_timestamp">
+|   <CURRENT_USER: "current_user">
 |   <CREATE: "create">
 |   <CRITERIA: "criteria">
 |   <CROSS: "cross">
+|   <CURSOR: "cursor">
+|   <DAY: "day">
+|   <DEALLOCATE: "deallocate">
+|   <DEFAULT_KEYWORD: "default">
 |   <DEBUG: "debug">
 |   <DECLARE: "declare">
 |   <DELETE: "delete">
 |   <DESC: "desc">
+|   <DESCRIBE: "describe">
+|   <DETERMINISTIC: "deterministic">
+|   <DISCONNECT: "disconnect">
 |   <DISTINCT: "distinct">
 |   <DROP: "drop">
 |   <ELSE: "else">
@@ -124,61 +160,146 @@
 |   <EXCEPT: "except">
 |   <EXEC: "exec">
 |   <EXECUTE: "execute">
+|   <EXTERNAL: "external">
 |   <EXISTS: "exists">
 |   <FALSE: "false">
+|   <FETCH: "fetch">
+|   <FILTER: "filter">
 |   <FN: "fn">
 |   <FOR: "for">
+|   <FORIEGN: "foriegn">
 |   <FROM: "from">
 |   <FULL: "full">
+|   <FUNCTION: "function">
+|   <GET: "get">
+|   <GLOBAL: "global">
+|   <GRANT: "grant">
 |   <GROUP: "group">
 |   <HAS: "has">
 |   <HAVING: "having">
+|   <HOLD: "hold">
+|   <HOUR: "hour">
 |   <IF: "if">
+|   <IDENTITY: "identity">
+|   <IMMEDIATE: "immediate">
 |   <IN: "in">
+|   <INDICATOR: "indicator">
 |   <INNER: "inner">
+|   <INPUT: "input">
+|   <INOUT: "inout">
+|   <INSENSITIVE: "insensitive">
 |   <INSERT: "insert">
 |   <INTERSECT: "intersect">
+|   <INTERVAL: "interval">
 |   <INTO: "into">
 |   <IS: "is">
+|   <ISOLATION: "isolation">
 |   <JOIN: "join">
 |   <LEFT: "left">
+|   <LANGUAGE: "language">
+|   <LARGE: "large">
+|   <LEADING: "leading">
 |   <LIKE: "like">
 |   <LIMIT: "limit">
 |   <LOCAL: "local">
 |   <LOOP: "loop">
 |   <MAKEDEP: "makedep">
 |   <MAKENOTDEP: "makenotdep">
+|   <MATCH: "match">
+|   <MERGE: "merge">
+|   <METHOD: "method">
+|   <MINUTE: "minute">
+|   <MODIFIES: "modifies">
+|   <MODULE: "module">
+|   <MONTH: "month">
+|   <NATURAL: "natural">
+|   <NEW: "new">
 |	<NOCACHE: "nocache">
+|   <NO: "no">
+|   <NONE: "none">
 |   <NOT: "not">
 |   <NULL: "null">
+|   <OF: "of">
+|   <OLD: "old">
 |   <ON: "on">
+|   <ONLY: "only">
 |   <OJ: "oj">
+|   <OPEN: "open">
 |   <OPTION: "option">
 |   <OR: "or">
 |   <ORDER: "order">
 |   <OUTER: "outer">
+|   <OUTPUT: "output">
+|   <OVER: "over">
+|   <OVERLAPS: "OVERLAPS">
+|   <PARAMETER: "parameter">
+|   <PARTITION: "partition">
 |   <PLANONLY: "planonly">
+|   <PRECISION: "precision">
+|   <PREPARE: "prepare">
+|   <PRIMARY: "primary">
 |   <PROCEDURE: "procedure">
+|   <RANGE: "range">
+|   <READS: "reads">
+|   <RECURSIVE: "recursive">
+|   <REFERENCES: "REFERENCES">
+|   <REFERENCING: "REFERENCING">
+|   <RETURN: "return">
+|   <RETURNS: "returns">
+|   <REVOKE: "REVOKE">
 |   <RIGHT: "right">
+|   <ROLLBACK: "ROLLBACK">
+|   <ROLLUP: "ROLLUP">
+|   <ROW: "row">
+|   <ROWS: "rows">
+|   <SAVEPOINT: "savepoint">
+|   <SCROLL: "scroll">
+|   <SEARCH: "search">
+|   <SECOND: "second">
 |   <SELECT: "select">
+|   <SENSITIVE: "sensitive">
+|   <SESSION_USER: "session_user">
 |   <SET: "set">
 |   <SHOWPLAN: "showplan">
+|   <SIMILAR: "similar">
+|   <SPECIFIC: "specific">
 |   <SOME: "some">
+|   <SQL: "sql">
+|   <SQLEXCEPTION: "sqlexception">
+|   <SQLSTATE: "sqlstate">
+|   <SQLWARNING: "sqlwarning">
+|   <START: "start">
+|   <STATIC: "static">
+|   <SYSTEM: "system">
+|   <SYSTEM_USER: "system_user">
 |   <TABLE: "table">
 |   <TEMPORARY: "temporary">
 |   <THEN: "then">
+|   <TIMEZONE_HOUR: "timezone_hour">
+|   <TIMEZONE_MINUTE: "timezone_minute">
+|   <TO: "to">
+|   <TRAILING: "trailing">
 |   <TRANSLATE: "translate">
+|   <TRIGGER: "trigger">
 |   <TRUE: "true">
 |   <UNION: "union">
+|   <UNIQUE: "unique">
 |   <UNKNOWN: "unknown">
+|   <USER: "user">
 |   <UPDATE: "update">
 |   <USING: "using">
+|   <VALUE: "value">
 |   <VALUES: "values">
 |   <VIRTUAL: "virtual">
 |   <WHEN: "when">
+|   <WHENEVER: "whenever">
 |   <WHERE: "where">
 |   <WITH: "with">
 |   <WHILE: "while">
+|   <WINDOW: "window">
+|   <WITHIN: "within">
+|   <WITHOUT: "without">
+|   <YEAR: "year">
 }
 
 TOKEN : /* Special function words */
@@ -957,14 +1078,8 @@
 	   storedProcedure.setParameter(parameter);
 	 }
 	]
-	call = <ID>
+	<CALL> procName = id()
 	{
-		if (!"call".equalsIgnoreCase(call.image)) { //$NON-NLS-1$
-		   throw new ParseException(QueryPlugin.Util.getString("SQLParser.call_expected")); //$NON-NLS-1$
-		}
-	}
-	procName = id()
-	{
 		storedProcedure.setProcedureName(procName);
 	}
 		
@@ -1007,6 +1122,8 @@
 		 (execToken = <EXEC> { setQueryCacheOption(execToken, info); }) 
 		 |
 		 (execToken = <EXECUTE> { setQueryCacheOption(execToken, info); })
+		 |
+		 (execToken = <CALL> { setQueryCacheOption(execToken, info); })
 		)
 		procName = id()
 		{
@@ -2765,7 +2882,9 @@
 	)		
 	|
 	(
-		(funcToken = <LEFT> | funcToken = <RIGHT> | funcToken = <CHAR>)
+		(funcToken = <LEFT> | funcToken = <RIGHT> | funcToken = <CHAR> | funcToken = <USER> 
+		                    | funcToken = <YEAR> | funcToken = <MONTH> | funcToken = <HOUR>
+		                    | funcToken = <MINUTE> | funcToken = <SECOND>)
 		<LPAREN>
 		[
 			expression = expression(info)
@@ -2869,17 +2988,23 @@
 }
 {
 	(
-		typeToken = <STRING> | 
+		typeToken = <STRING> |
+		typeToken = <VARCHAR> | 
 		typeToken = <BOOLEAN> | 
 		typeToken = <BYTE> | 
+		typeToken = <TINYINT> |
 		typeToken = <SHORT> | 
+		typeToken = <SMALLINT> |
 		typeToken = <CHAR> | 
 		typeToken = <INTEGER> | 
 		typeToken = <LONG> | 
+		typeToken = <BIGINT> |
 		typeToken = <BIGINTEGER> | 
-		typeToken = <FLOAT> | 
+		typeToken = <FLOAT> |
+		typeToken = <REAL> | 
 		typeToken = <DOUBLE> | 
-		typeToken = <BIGDECIMAL> | 
+		typeToken = <BIGDECIMAL> |
+		typeToken = <DECIMAL> | 
 		typeToken = <DATE> | 
 		typeToken = <TIME> |
 		typeToken = <TIMESTAMP> |

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunction.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunction.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunction.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -33,9 +33,9 @@
 import java.util.Properties;
 
 import org.junit.Test;
+import org.teiid.connector.language.SQLReservedWords;
 
 import com.metamatrix.api.exception.query.FunctionExecutionException;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.symbol.Constant;
 import com.metamatrix.query.unittest.TimestampUtil;
 import com.metamatrix.query.util.CommandContext;
@@ -845,18 +845,18 @@
     }
 
     @Test public void testTimestampAdd2() throws Exception {
-    	assertEquals(TimestampUtil.createTimestamp(103, 11, 1, 18, 20, 30, 0), FunctionMethods.timestampAdd(ReservedWords.SQL_TSI_HOUR, 3, TimestampUtil.createTimestamp(103, 11, 1, 15, 20, 30, 0)));
+    	assertEquals(TimestampUtil.createTimestamp(103, 11, 1, 18, 20, 30, 0), FunctionMethods.timestampAdd(SQLReservedWords.SQL_TSI_HOUR, 3, TimestampUtil.createTimestamp(103, 11, 1, 15, 20, 30, 0)));
     }
 
     @Test public void testTimestampDiffTimeStamp_FracSec_1() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND, 
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND, 
                               TimestampUtil.createTimestamp((2001-1900), 5, 21, 3, 9, 35, 1),
                               TimestampUtil.createTimestamp((2001-1900), 5, 21, 3, 9, 35, 100000000),
                               new Long(99999999));
     }
 
     @Test public void testTimestampDiffTimeStamp_FracSec_2() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
                               // 1 day (8.64 x 10^10 nanos) and 1 nano
                               TimestampUtil.createTimestamp((2001-1900), 5, 21, 3, 9, 35, 2),
                               TimestampUtil.createTimestamp((2001-1900), 5, 22, 3, 9, 35, 3),
@@ -864,7 +864,7 @@
     }
 
     @Test public void testTimestampDiffTimeStamp_FracSec_3() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
                               // 1 day (8.64 x 10^10 nanos) less 1 nano
                               TimestampUtil.createTimestamp((2001-1900), 5, 22, 3, 9, 35, 2),
                               TimestampUtil.createTimestamp((2001-1900), 5, 21, 3, 9, 35, 3),
@@ -872,28 +872,28 @@
     }
 
     @Test public void testTimestampDiffTimeStamp_FracSec_4() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
                               TimestampUtil.createTimestamp((2001-1900), 5, 21, 0, 0, 0, 1),
                               TimestampUtil.createTimestamp((2001-1900), 5, 21, 0, 0, 0, 3),
                               new Long(00000002));
     }
 
     @Test public void testTimestampDiffTimeStamp_FracSec_5() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
                               TimestampUtil.createTimestamp((2004-1900), 5, 22, 0, 0, 0, 1),
                               TimestampUtil.createTimestamp((2004-1900), 5, 22, 0, 0, 0, 10),
                               new Long(9));
     }
 
     @Test public void testTimestampDiffTimeStamp_FracSec_6() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
                               TimestampUtil.createTimestamp((2001-1900), 5, 22, 0, 0, 0, 2),
                               TimestampUtil.createTimestamp((2001-1900), 5, 22, 0, 0, 0, 3),
                               new Long(1));
     }
 
     @Test public void testTimestampDiffTimeStamp_FracSec_7() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
                               // 1 nano diff
                               TimestampUtil.createTimestamp((2004-1900), 5, 22, 3, 9, 35, 2),
                               TimestampUtil.createTimestamp((2004-1900), 5, 22, 3, 9, 35, 3),
@@ -901,7 +901,7 @@
     }
 
     @Test public void testTimestampDiffTimeStamp_FracSec_8() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_FRAC_SECOND,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_FRAC_SECOND,
                               // 1 nano diff
                               TimestampUtil.createTimestamp((2004-1900), 5, 22, 3, 9, 35, 3),
                               TimestampUtil.createTimestamp((2004-1900), 5, 22, 3, 9, 35, 2),
@@ -909,98 +909,98 @@
     }
 
     @Test public void testTimestampDiffTimeStamp_Min_1() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_MINUTE,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MINUTE,
                               TimestampUtil.createTimestamp(0, 0, 0, 2, 34, 12, 0),
                               TimestampUtil.createTimestamp(0, 0, 0, 12, 0, 0, 0),
                               new Long(565));
     }
 
     @Test public void testTimestampDiffTimeStamp_Min_2() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_MINUTE,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MINUTE,
                               TimestampUtil.createTimestamp((2001-1900), 0, 0, 2, 0, 0, 0),
                               TimestampUtil.createTimestamp((2001-1900), 0, 0, 0, 33, 12, 0),
                               new Long(-86));
     }
 
     @Test public void testTimestampDiffTimeStamp_Min_3() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_MINUTE,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MINUTE,
                               TimestampUtil.createTimestamp((2001-1900), 8, 26, 12, 07, 58, 65497),
                               TimestampUtil.createTimestamp((2001-1900), 8, 29, 11, 25, 42, 483219),
                               new Long(4277));
     }
 
     @Test public void testTimestampDiffTimeStamp_Min_4() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_MINUTE,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MINUTE,
                               TimestampUtil.createTimestamp((2001-1900), 8, 26, 12, 07, 58, 0),
                               TimestampUtil.createTimestamp((2001-1900), 8, 29, 11, 25, 42, 0),
                               new Long(4277));
     }
 
     @Test public void testTimestampDiffTimeStamp_Min_5() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_MINUTE,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MINUTE,
                               TimestampUtil.createTimestamp((2001-1900), 8, 26, 12, 0, 0, 1),
                               TimestampUtil.createTimestamp((2001-1900), 8, 26, 12, 0, 0, 0),
                               new Long(0));
     }
 
     @Test public void testTimestampDiffTimeStamp_Hour_1() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_HOUR,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_HOUR,
                               TimestampUtil.createTimestamp((2004-1900), 8, 26, 12, 0, 0, 0),
                               TimestampUtil.createTimestamp((2004-1900), 8, 26, 12, 59, 59, 999999999),
                               new Long(0));
     }
 
     @Test public void testTimestampDiffTimeStamp_Week_1() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_WEEK,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_WEEK,
                               TimestampUtil.createTimestamp((2001-1900), 5, 21, 3, 9, 35, 100),
                               TimestampUtil.createTimestamp((2001-1900), 4, 2, 5, 19, 35, 500),
                               new Long(-7));
     }
 
     @Test public void testTimestampDiffTimeStamp_Month_1() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_MONTH,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MONTH,
                               TimestampUtil.createTimestamp((2004-1900), 4, 19, 0, 0, 0, 0),
                               TimestampUtil.createTimestamp((2004-1900), 11, 20, 12, 0, 0, 0),
                               new Long(7));
     }
 
     @Test public void testTimestampDiffTimeStamp_Month_2() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_MONTH,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MONTH,
                               TimestampUtil.createTimestamp((2004-1900), 5, 1, 0, 0, 0, 1000000),
                               TimestampUtil.createTimestamp((2004-1900), 11, 1, 12, 0, 0, 1),
                               new Long(6));
     }
 
     @Test public void testTimestampDiffTimeStamp_Month_3() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_MONTH,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MONTH,
                               TimestampUtil.createTimestamp((2004-1900), 4, 19, 0, 0, 0, 1),
                               TimestampUtil.createTimestamp((2004-1900), 11, 18, 12, 0, 0, 1000000),
                               new Long(7));
     }
 
     @Test public void testTimestampDiffTimeStamp_Month_4() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_MONTH,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MONTH,
                               TimestampUtil.createTimestamp((2004-1900), 4, 1, 0, 0, 0, 1000000),
                               TimestampUtil.createTimestamp((2004-1900), 11, 1, 0, 0, 0, 0),
                               new Long(7));
     }
 
     @Test public void testTimestampDiffTimeStamp_Month_5() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_MONTH,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MONTH,
                               TimestampUtil.createTimestamp((2004-1900), 4, 1, 0, 0, 1, 0),
                               TimestampUtil.createTimestamp((2004-1900), 11, 1, 0, 0, 0, 0),
                               new Long(7));
     }
 
     @Test public void testTimestampDiffTimeStamp_Month_6() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_MONTH,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_MONTH,
                               TimestampUtil.createTimestamp((2004-1900), 4, 1, 0, 0, 1, 0),
                               TimestampUtil.createTimestamp((2004-1900), 11, 1, 0, 0, 2, 0),
                               new Long(7));
     }
 
     @Test public void testTimestampDiffTimeStamp_Day_1() throws Exception {
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_DAY,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_DAY,
                               TimestampUtil.createTimestamp((2004-1900), 2, 1, 0, 0, 0, 0),
                               TimestampUtil.createTimestamp((2004-1900), 3, 1, 0, 0, 0, 0),
                               new Long(31));
@@ -1008,20 +1008,20 @@
 
     @Test public void testTimestampDiffTimeStamp_Day_2() throws Exception {
         // Leap year
-        helpTestTimestampDiff(ReservedWords.SQL_TSI_DAY,
+        helpTestTimestampDiff(SQLReservedWords.SQL_TSI_DAY,
                               TimestampUtil.createTimestamp((2004-1900), 1, 1, 0, 0, 0, 0),
                               TimestampUtil.createTimestamp((2004-1900), 2, 1, 0, 0, 0, 0),
                               new Long(29));
     }
 
 	@Test public void testTimestampDiffTime_Hour_1() throws Exception {
-		helpTestTimestampDiff(ReservedWords.SQL_TSI_HOUR, new Timestamp(
+		helpTestTimestampDiff(SQLReservedWords.SQL_TSI_HOUR, new Timestamp(
 				TimestampUtil.createTime(3, 4, 45).getTime()), new Timestamp(
 				TimestampUtil.createTime(5, 5, 36).getTime()), new Long(2));
 	}
 
 	@Test public void testTimestampDiffTime_Hour_2() throws Exception {
-		helpTestTimestampDiff(ReservedWords.SQL_TSI_HOUR, new Timestamp(
+		helpTestTimestampDiff(SQLReservedWords.SQL_TSI_HOUR, new Timestamp(
 				TimestampUtil.createTime(5, 0, 30).getTime()), new Timestamp(
 				TimestampUtil.createTime(3, 0, 31).getTime()), new Long(-1));
 	}

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunctionLibrary.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunctionLibrary.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/function/TestFunctionLibrary.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -44,12 +44,12 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.language.SQLReservedWords;
 
 import com.metamatrix.api.exception.query.FunctionExecutionException;
 import com.metamatrix.common.types.DataTypeManager;
 import com.metamatrix.common.util.TimestampWithTimezone;
 import com.metamatrix.query.function.metadata.FunctionMethod;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.unittest.TimestampUtil;
 import com.metamatrix.query.util.CommandContext;
 
@@ -1018,68 +1018,68 @@
     
 	/** date + month --> count=18, inteval=month, result should be 2004-11-15 */
 	@Test public void testInvokeTimestampAddDate2() {
-		helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_MONTH,  //$NON-NLS-1$
+		helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_MONTH,  //$NON-NLS-1$
 			new Integer(18), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(104, 10, 15).getTime()));	
 	}
 
 	/** date + month --> count=-18, inteval=month, result should be 2001-11-15 */
 	@Test public void testInvokeTimestampAddDate2a() {
-		helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_MONTH,  //$NON-NLS-1$
+		helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_MONTH,  //$NON-NLS-1$
 			new Integer(-18), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(101, 10, 15).getTime()));	
 	}
 	
 	/** date + week --> count=6, inteval=week, result should be 2003-04-03 */
 	@Test public void testInvokeTimestampAddDate3() {
-		helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_WEEK,  //$NON-NLS-1$
+		helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_WEEK,  //$NON-NLS-1$
 			new Integer(-6), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(103, 3, 3).getTime()));	
 	}
 
 	/** date + quarter --> count=3, inteval=quarter, result should be 2004-2-15 */
 	@Test public void testInvokeTimestampAddDate4() {
-		helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_QUARTER,  //$NON-NLS-1$
+		helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_QUARTER,  //$NON-NLS-1$
 			new Integer(3), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(104, 1, 15).getTime()));	
 	}
 
 	/** date + year --> count=-1, inteval=year, result should be 2002-5-15 */
 	@Test public void testInvokeTimestampAddDate5() {
-		helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_YEAR,  //$NON-NLS-1$
+		helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_YEAR,  //$NON-NLS-1$
 			new Integer(-1), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(102, 4, 15).getTime()));	
 	}
 			
 	/** time + minute --> count=23, inteval=3, result should be 03:32:12 */
 	@Test public void testInvokeTimestampAddTime1() {
-		helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_MINUTE,  //$NON-NLS-1$
+		helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_MINUTE,  //$NON-NLS-1$
 			new Integer(23), new Timestamp(TimestampUtil.createTime(3, 9, 12).getTime())}, new Timestamp(TimestampUtil.createTime(3, 32, 12).getTime()));	
 	}
 
 	/** time + hour --> count=21, inteval=4, result should be 00:09:12 and overflow */
 	@Test public void testInvokeTimestampAddTime2() {
-		helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_HOUR,  //$NON-NLS-1$
+		helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_HOUR,  //$NON-NLS-1$
 			new Integer(21), new Timestamp(TimestampUtil.createTime(3, 9, 12).getTime())}, TimestampUtil.createTimestamp(70, 0, 2, 0, 9, 12, 0));	
 	}
 
 	/** time + hour --> count=2, inteval=4, result should be 01:12:12*/
 	@Test public void testInvokeTimestampAddTime3() {
-		helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_HOUR,  //$NON-NLS-1$
+		helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_HOUR,  //$NON-NLS-1$
 			new Integer(2), new Timestamp(TimestampUtil.createTime(23, 12, 12).getTime())}, TimestampUtil.createTimestamp(70, 0, 2, 1, 12, 12, 0));	
 	}
 	
 	/** time + second --> count=23, inteval=2, result should be 03:10:01 */
 	@Test public void testInvokeTimestampAddTime4() {
-		helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_SECOND,  //$NON-NLS-1$
+		helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_SECOND,  //$NON-NLS-1$
 			new Integer(49), new Timestamp(TimestampUtil.createTime(3, 9, 12).getTime())}, new Timestamp(TimestampUtil.createTime(3, 10, 1).getTime()));	
 	}
 
 	/** timestamp + second --> count=23, inteval=2, result should be 2003-05-15 03:09:35.100  */
 	@Test public void testInvokeTimestampAddTimestamp1() {
-		helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_SECOND,  //$NON-NLS-1$
+		helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_SECOND,  //$NON-NLS-1$
 			new Integer(23), TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 12, 100)}, 
 			TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 35, 100));	
 	}
 
 	/** timestamp + nanos --> count=1, inteval=1, result should be 2003-05-15 03:09:12.000000101  */
 	@Test public void testInvokeTimestampAddTimestamp2() {
-		helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_FRAC_SECOND,  //$NON-NLS-1$
+		helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_FRAC_SECOND,  //$NON-NLS-1$
 			new Integer(1), TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 12, 100)}, 
 			TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 12, 101));	
 	}
@@ -1088,14 +1088,14 @@
 	 *  with increase in second and minutes, because second already at 59 sec originally
 	 */
 	@Test public void testInvokeTimestampAddTimestamp3() {
-		helpInvokeMethod("timestampAdd", new Object[] {ReservedWords.SQL_TSI_FRAC_SECOND,  //$NON-NLS-1$
+		helpInvokeMethod("timestampAdd", new Object[] {SQLReservedWords.SQL_TSI_FRAC_SECOND,  //$NON-NLS-1$
 			new Integer(2100000000), TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 59, 1)}, 
 			TimestampUtil.createTimestamp(103, 4, 15, 3, 10, 1, 100000003));	
 	}
 			
 	/** time --> interval=hour, time1 = 03:04:45, time2= 05:05:36 return = 2  */
 	@Test public void testInvokeTimestampDiffTime1() {
-		helpInvokeMethod("timestampDiff", new Object[] {ReservedWords.SQL_TSI_HOUR,  //$NON-NLS-1$
+		helpInvokeMethod("timestampDiff", new Object[] {SQLReservedWords.SQL_TSI_HOUR,  //$NON-NLS-1$
 				new Timestamp(TimestampUtil.createTime(3, 4, 45).getTime()), new Timestamp(TimestampUtil.createTime(5, 5, 36).getTime()) }, 
 			new Long(2));	
 	}
@@ -1111,7 +1111,7 @@
 	 * time2= 2003-05-02 05:19:35.500 return = 45
 	 */
 	@Test public void testInvokeTimestampDiffTimestamp1() {
-		helpInvokeMethod("timestampDiff", new Object[] {ReservedWords.SQL_TSI_WEEK,  //$NON-NLS-1$
+		helpInvokeMethod("timestampDiff", new Object[] {SQLReservedWords.SQL_TSI_WEEK,  //$NON-NLS-1$
 			TimestampUtil.createTimestamp(102, 5, 21, 3, 9, 35, 100), TimestampUtil.createTimestamp(103, 4, 2, 5, 19, 35, 500) }, 
 			new Long(45));	
 	}
@@ -1121,7 +1121,7 @@
      * time2= 2002-06-21 03:09:35.100000000 return = 999999999
      */
     @Test public void testInvokeTimestampDiffTimestamp2() {
-        helpInvokeMethod("timestampDiff", new Object[] {ReservedWords.SQL_TSI_FRAC_SECOND,  //$NON-NLS-1$
+        helpInvokeMethod("timestampDiff", new Object[] {SQLReservedWords.SQL_TSI_FRAC_SECOND,  //$NON-NLS-1$
             TimestampUtil.createTimestamp(102, 5, 21, 3, 9, 35, 1), TimestampUtil.createTimestamp(102, 5, 21, 3, 9, 35, 100000000) }, 
             new Long(99999999));  
     }
@@ -1131,7 +1131,7 @@
      * time2= 2002-06-22 03:09:35.000000001 return = 
      */
     @Test public void testInvokeTimestampDiffTimestamp3() {
-        helpInvokeMethod("timestampDiff", new Object[] {ReservedWords.SQL_TSI_FRAC_SECOND,  //$NON-NLS-1$
+        helpInvokeMethod("timestampDiff", new Object[] {SQLReservedWords.SQL_TSI_FRAC_SECOND,  //$NON-NLS-1$
             TimestampUtil.createTimestamp(102, 5, 21, 3, 9, 35, 2), TimestampUtil.createTimestamp(102, 5, 22, 3, 9, 35, 1) }, 
             new Long(86399999999999L));  
     }

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/TestAggregatePushdown.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/TestAggregatePushdown.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/TestAggregatePushdown.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -515,14 +515,14 @@
         String sql = "SELECT Q1.S, Q2.C, Q1.PRODUCT, Q1.REGION AS Q1R, Q2.REGION AS Q2R FROM " + //$NON-NLS-1$
             "(SELECT SUM(SALES) AS S, REGION, PRODUCT FROM DB2_TABLE WHERE PRODUCT IN ('GUNS', 'TOYS', 'VIDEOTAPES') GROUP BY REGION, PRODUCT) Q1 " + //$NON-NLS-1$
             "FULL OUTER JOIN " +  //$NON-NLS-1$
-            "(SELECT SUM(COSTS) AS C, REGION FROM ORACLE_TABLE WHERE YEAR = '1999' GROUP BY REGION) Q2 " + //$NON-NLS-1$
+            "(SELECT SUM(COSTS) AS C, REGION FROM ORACLE_TABLE WHERE \"YEAR\" = '1999' GROUP BY REGION) Q2 " + //$NON-NLS-1$
             "ON Q1.REGION = Q2.REGION"; //$NON-NLS-1$
 
         ProcessorPlan plan = helpPlan(sql,  
                                       metadata,
                                       null, capFinder,
                                       new String[] {"SELECT REGION, SUM(SALES), PRODUCT FROM db2model.DB2_TABLE WHERE PRODUCT IN ('GUNS', 'TOYS', 'VIDEOTAPES') GROUP BY REGION, PRODUCT", //$NON-NLS-1$
-                                                    "SELECT REGION, SUM(COSTS) FROM oraclemodel.Oracle_table WHERE YEAR = '1999' GROUP BY REGION"},  //$NON-NLS-1$
+                                                    "SELECT REGION, SUM(COSTS) FROM oraclemodel.Oracle_table WHERE \"YEAR\" = '1999' GROUP BY REGION"},  //$NON-NLS-1$
                                       SHOULD_SUCCEED );
 
         checkNodeTypes(plan, new int[] {
@@ -568,8 +568,8 @@
         ProcessorPlan plan = helpPlan(sql,  
                                       metadata,
                                       null, capFinder,
-                                      new String[] {"SELECT g_0.MONTH, g_0.YEAR FROM msModel.\"TIME\" AS g_0 WHERE g_0.YEAR = '1999'", //$NON-NLS-1$
-                                                    "SELECT DISTINCT g_0.MONTH AS c_0, g_0.CITY AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0 WHERE (g_0.MONTH IN (<dependent values>)) AND (g_0.CITY IN (<dependent values>)) GROUP BY g_0.MONTH, g_0.CITY ORDER BY c_0, c_1", //$NON-NLS-1$ 
+                                      new String[] {"SELECT g_0.\"MONTH\", g_0.\"YEAR\" FROM msModel.\"TIME\" AS g_0 WHERE g_0.\"YEAR\" = '1999'", //$NON-NLS-1$
+                                                    "SELECT DISTINCT g_0.\"MONTH\" AS c_0, g_0.CITY AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0 WHERE (g_0.\"MONTH\" IN (<dependent values>)) AND (g_0.CITY IN (<dependent values>)) GROUP BY g_0.\"MONTH\", g_0.CITY ORDER BY c_0, c_1", //$NON-NLS-1$ 
                                                     "SELECT g_0.CITY, g_0.REGION FROM oraclemodel.GEOGRAPHY AS g_0 WHERE g_0.REGION IN ('BORDEAUX', 'POLINESIA')"},  //$NON-NLS-1$
                                       ComparisonMode.EXACT_COMMAND_STRING );
 
@@ -616,8 +616,8 @@
         ProcessorPlan plan = helpPlan(sql,  
                                       metadata,
                                       null, capFinder,
-                                      new String[] {"SELECT g_0.MONTH, g_0.YEAR FROM msModel.\"TIME\" AS g_0 WHERE g_0.YEAR = '1999'", //$NON-NLS-1$
-                                          "SELECT DISTINCT g_0.MONTH AS c_0, g_0.CITY AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0 WHERE (g_0.MONTH IN (<dependent values>)) AND (g_0.CITY IN (<dependent values>)) GROUP BY g_0.MONTH, g_0.CITY ORDER BY c_0, c_1", //$NON-NLS-1$ 
+                                      new String[] {"SELECT g_0.\"MONTH\", g_0.\"YEAR\" FROM msModel.\"TIME\" AS g_0 WHERE g_0.\"YEAR\" = '1999'", //$NON-NLS-1$
+                                          "SELECT DISTINCT g_0.\"MONTH\" AS c_0, g_0.CITY AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0 WHERE (g_0.\"MONTH\" IN (<dependent values>)) AND (g_0.CITY IN (<dependent values>)) GROUP BY g_0.\"MONTH\", g_0.CITY ORDER BY c_0, c_1", //$NON-NLS-1$ 
                                           "SELECT g_0.CITY, g_0.REGION FROM oraclemodel.GEOGRAPHY AS g_0 WHERE g_0.REGION IN ('BORDEAUX', 'POLINESIA')"},  //$NON-NLS-1$
                                       ComparisonMode.EXACT_COMMAND_STRING );
 
@@ -664,8 +664,8 @@
         ProcessorPlan plan = helpPlan(sql,  
                                       metadata,
                                       null, capFinder,
-                                      new String[] {"SELECT DISTINCT g_0.MONTH AS c_0, g_1.REGION AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0, db2model.GEOGRAPHY2 AS g_1 WHERE (g_0.CITY = g_1.CITY) AND (g_1.REGION IN ('BORDEAUX', 'POLINESIA')) AND (g_0.MONTH IN (<dependent values>)) GROUP BY g_0.MONTH, g_1.REGION ORDER BY c_0", //$NON-NLS-1$ 
-                                                    "SELECT g_0.MONTH AS c_0, g_0.YEAR AS c_1 FROM msModel.\"TIME\" AS g_0 WHERE g_0.YEAR = '1999' ORDER BY c_0"},  //$NON-NLS-1$
+                                      new String[] {"SELECT DISTINCT g_0.\"MONTH\" AS c_0, g_1.REGION AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0, db2model.GEOGRAPHY2 AS g_1 WHERE (g_0.CITY = g_1.CITY) AND (g_1.REGION IN ('BORDEAUX', 'POLINESIA')) AND (g_0.\"MONTH\" IN (<dependent values>)) GROUP BY g_0.\"MONTH\", g_1.REGION ORDER BY c_0", //$NON-NLS-1$ 
+                                                    "SELECT g_0.\"MONTH\" AS c_0, g_0.\"YEAR\" AS c_1 FROM msModel.\"TIME\" AS g_0 WHERE g_0.\"YEAR\" = '1999' ORDER BY c_0"},  //$NON-NLS-1$
                                                     ComparisonMode.EXACT_COMMAND_STRING );
 
         checkNodeTypes(plan, new int[] {

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCapabilitiesUtil.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCapabilitiesUtil.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCapabilitiesUtil.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -25,6 +25,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import junit.framework.TestCase;
 
 import com.metamatrix.api.exception.MetaMatrixComponentException;
@@ -34,7 +36,6 @@
 import com.metamatrix.query.optimizer.capabilities.FakeCapabilitiesFinder;
 import com.metamatrix.query.optimizer.capabilities.SourceCapabilities;
 import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.lang.JoinType;
 import com.metamatrix.query.sql.lang.SetQuery.Operation;
 import com.metamatrix.query.sql.symbol.AggregateSymbol;
@@ -190,7 +191,7 @@
         BasicSourceCapabilities caps = new BasicSourceCapabilities();
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, false);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
         
         helpTestSupportsAggregateFunction(caps, aggregate, false); 
     }    
@@ -202,7 +203,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, false);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, false);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
         
         helpTestSupportsAggregateFunction(caps, aggregate, false); 
     }    
@@ -214,7 +215,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, false);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, true);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
         
         helpTestSupportsAggregateFunction(caps, aggregate, true); 
     }    
@@ -226,7 +227,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, false);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, true);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.COUNT, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.COUNT, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
         
         helpTestSupportsAggregateFunction(caps, aggregate, false); 
     }    
@@ -238,7 +239,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, false);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
         
         helpTestSupportsAggregateFunction(caps, aggregate, false); 
     }    
@@ -250,7 +251,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, false);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.COUNT, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.COUNT, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
         
         helpTestSupportsAggregateFunction(caps, aggregate, true); 
     }    
@@ -261,7 +262,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, false);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.SUM, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.SUM, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
         
         helpTestSupportsAggregateFunction(caps, aggregate, false); 
     }    
@@ -272,7 +273,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, true);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.SUM, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.SUM, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
         
         helpTestSupportsAggregateFunction(caps, aggregate, true); 
     }    
@@ -283,7 +284,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_AVG, false);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.AVG, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.AVG, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
         
         helpTestSupportsAggregateFunction(caps, aggregate, false); 
     }    
@@ -294,7 +295,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_AVG, true);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.AVG, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.AVG, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
         
         helpTestSupportsAggregateFunction(caps, aggregate, true); 
     }    
@@ -305,7 +306,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MIN, false);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.MIN, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.MIN, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
         
         helpTestSupportsAggregateFunction(caps, aggregate, false); 
     }    
@@ -316,7 +317,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MIN, true);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.MIN, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.MIN, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
         
         helpTestSupportsAggregateFunction(caps, aggregate, true); 
     }    
@@ -327,7 +328,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, false);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.MAX, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.MAX, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
         
         helpTestSupportsAggregateFunction(caps, aggregate, false); 
     }    
@@ -338,7 +339,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.MAX, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.MAX, false, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
         
         helpTestSupportsAggregateFunction(caps, aggregate, true); 
     }    
@@ -350,7 +351,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_DISTINCT, false);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.MAX, true, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.MAX, true, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
         
         helpTestSupportsAggregateFunction(caps, aggregate, false); 
     }    
@@ -362,7 +363,7 @@
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
         caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_DISTINCT, true);
         
-        AggregateSymbol aggregate = new AggregateSymbol("expr", ReservedWords.MAX, true, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
+        AggregateSymbol aggregate = new AggregateSymbol("expr", SQLReservedWords.MAX, true, new ElementSymbol("x")); //$NON-NLS-1$ //$NON-NLS-2$
         
         helpTestSupportsAggregateFunction(caps, aggregate, true); 
     }    

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestCallableStatementParsing.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestCallableStatementParsing.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestCallableStatementParsing.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,10 +22,14 @@
 
 package com.metamatrix.query.parser;
 
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
 import com.metamatrix.api.exception.query.QueryParserException;
 import com.metamatrix.query.sql.lang.StoredProcedure;
 
-public class TestCallableStatementParsing extends junit.framework.TestCase {
+public class TestCallableStatementParsing {
     
     private void helpTestIllegalCall(String call) {
         try {
@@ -44,14 +48,14 @@
         assertEquals("EXEC procedure_name(?, ?, ?)", sp.toString()); //$NON-NLS-1$
     }
             
-    public void testCallNoParams() throws QueryParserException {
+    @Test public void testCallNoParams() throws QueryParserException {
         StoredProcedure sp = (StoredProcedure)QueryParser.getQueryParser().parseCommand("{call procedure_name}"); //$NON-NLS-1$
         assertFalse(sp.returnsScalarValue());
         assertEquals("procedure_name", sp.getProcedureName()); //$NON-NLS-1$
         assertEquals(0, sp.getParameters().size());
     }
     
-    public void testCallWithReturnParam() throws QueryParserException {
+    @Test public void testCallWithReturnParam() throws QueryParserException {
         helpTestGetExec("{?=call procedure_name(?, ?, ?)}", true); //$NON-NLS-1$
         helpTestGetExec(" {?=call procedure_name(?, ?, ?)}", true); //$NON-NLS-1$
         helpTestGetExec("{ ?=call procedure_name(?, ?, ?)}", true); //$NON-NLS-1$
@@ -60,7 +64,7 @@
         helpTestGetExec("{?=\ncall procedure_name(?, ?, ?)}", true); //$NON-NLS-1$
     }
     
-    public void testIllegalCalls() {
+    @Test public void testIllegalCalls() {
         helpTestIllegalCall("{call procedure_name"); //$NON-NLS-1$
         helpTestIllegalCall("call procedure_name}"); //$NON-NLS-1$
         helpTestIllegalCall("{call procedure_name(}"); //$NON-NLS-1$
@@ -73,7 +77,7 @@
         helpTestIllegalCall("{?=cal procedure_name}"); //$NON-NLS-1$
     }
     
-    public void testGetExec() throws QueryParserException {
+    @Test public void testGetExec() throws QueryParserException {
         helpTestGetExec("{call procedure_name(?, ?, ?)}", false); //$NON-NLS-1$
         helpTestGetExec(" {call procedure_name(?, ?, ?)}", false); //$NON-NLS-1$
         helpTestGetExec("{ call procedure_name(?, ?, ?)}", false); //$NON-NLS-1$
@@ -83,13 +87,8 @@
         helpTestGetExec("{CALL procedure_name(?, ?, ?)} ", false); //$NON-NLS-1$
     }
     
-    public void testBadCallKeyword() {
-        try {
-            QueryParser.getQueryParser().parseCommand("{calli procedure_name}"); //$NON-NLS-1$
-            fail("expected exception"); //$NON-NLS-1$
-        } catch (QueryParserException qpe) {
-            assertEquals("Parsing error: Call keyword expected in callable statement", qpe.getMessage()); //$NON-NLS-1$
-        }
+    @Test(expected=QueryParserException.class) public void testBadCallKeyword() throws Exception {
+        QueryParser.getQueryParser().parseCommand("{calli procedure_name}"); //$NON-NLS-1$
     }
 
 }

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestOptionsAndHints.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestOptionsAndHints.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestOptionsAndHints.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -300,7 +300,7 @@
         ElementSymbol x = new ElementSymbol("a.x", true); //$NON-NLS-1$
         ElementSymbol y = new ElementSymbol("b.y", true); //$NON-NLS-1$
         
-        Criteria criteria = new CompareCriteria(x, CompareCriteria.EQ, new Function("function", new Expression[] {y})); //$NON-NLS-1$
+        Criteria criteria = new CompareCriteria(x, CompareCriteria.EQ, new Function("func", new Expression[] {y})); //$NON-NLS-1$
         JoinPredicate predicate = new JoinPredicate(new UnaryFromClause(a), new UnaryFromClause(b), JoinType.JOIN_INNER, Arrays.asList(new Object[] {criteria}));
         From from = new From(Arrays.asList(new Object[] {predicate}));
         predicate.getLeftClause().setMakeNotDep(true);
@@ -308,8 +308,8 @@
         Select select = new Select(Arrays.asList(new Object[] {x, y}));
         
         Query query = new Query(select, from, null, null, null, null, null);
-        TestParser.helpTest("Select a.x, b.y From a MAKENOTDEP INNER JOIN b MAKEDEP ON a.x = function(b.y)",  //$NON-NLS-1$
-                 "SELECT a.x, b.y FROM a MAKENOTDEP INNER JOIN b MAKEDEP ON a.x = function(b.y)",  //$NON-NLS-1$
+        TestParser.helpTest("Select a.x, b.y From a MAKENOTDEP INNER JOIN b MAKEDEP ON a.x = func(b.y)",  //$NON-NLS-1$
+                 "SELECT a.x, b.y FROM a MAKENOTDEP INNER JOIN b MAKEDEP ON a.x = func(b.y)",  //$NON-NLS-1$
                  query);
     }
 

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestParser.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestParser.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/parser/TestParser.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -681,9 +681,9 @@
 				 query);
 	}
 
-    /** SELECT left(fullname, 3) as x FROM system.groups */
+    /** SELECT left(fullname, 3) as x FROM sys.groups */
     @Test public void testLeftFunction() {
-        GroupSymbol g = new GroupSymbol("system.groups"); //$NON-NLS-1$
+        GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$
         From from = new From();
         from.addGroup(g);
 
@@ -696,14 +696,14 @@
         Query query = new Query();
         query.setSelect(select);
         query.setFrom(from);
-        helpTest("SELECT left(fullname, 3) as x FROM system.groups",  //$NON-NLS-1$
-                 "SELECT left(fullname, 3) AS x FROM system.groups",  //$NON-NLS-1$
+        helpTest("SELECT left(fullname, 3) as x FROM sys.groups",  //$NON-NLS-1$
+                 "SELECT left(fullname, 3) AS x FROM sys.groups",  //$NON-NLS-1$
                  query);
     }
 
-    /** SELECT right(fullname, 3) as x FROM system.groups */
+    /** SELECT right(fullname, 3) as x FROM sys.groups */
     @Test public void testRightFunction() {
-        GroupSymbol g = new GroupSymbol("system.groups"); //$NON-NLS-1$
+        GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$
         From from = new From();
         from.addGroup(g);
 
@@ -716,14 +716,14 @@
         Query query = new Query();
         query.setSelect(select);
         query.setFrom(from);
-        helpTest("SELECT right(fullname, 3) as x FROM system.groups",  //$NON-NLS-1$
-                 "SELECT right(fullname, 3) AS x FROM system.groups",  //$NON-NLS-1$
+        helpTest("SELECT right(fullname, 3) as x FROM sys.groups",  //$NON-NLS-1$
+                 "SELECT right(fullname, 3) AS x FROM sys.groups",  //$NON-NLS-1$
                  query);
     }
 
-    /** SELECT char('x') AS x FROM system.groups */
+    /** SELECT char('x') AS x FROM sys.groups */
     @Test public void testCharFunction() {
-        GroupSymbol g = new GroupSymbol("system.groups"); //$NON-NLS-1$
+        GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$
         From from = new From();
         from.addGroup(g);
 
@@ -736,14 +736,14 @@
         Query query = new Query();
         query.setSelect(select);
         query.setFrom(from);
-        helpTest("SELECT char('x') AS x FROM system.groups",  //$NON-NLS-1$
-                 "SELECT char('x') AS x FROM system.groups",  //$NON-NLS-1$
+        helpTest("SELECT char('x') AS x FROM sys.groups",  //$NON-NLS-1$
+                 "SELECT char('x') AS x FROM sys.groups",  //$NON-NLS-1$
                  query);
     }
 
-    /** SELECT insert('x', 1, 'a') as x FROM system.groups */
+    /** SELECT insert('x', 1, 'a') as x FROM sys.groups */
     @Test public void testInsertFunction() {
-        GroupSymbol g = new GroupSymbol("system.groups"); //$NON-NLS-1$
+        GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$
         From from = new From();
         from.addGroup(g);
 
@@ -756,15 +756,15 @@
         Query query = new Query();
         query.setSelect(select);
         query.setFrom(from);
-        helpTest("SELECT insert('x', 1, 'a') AS x FROM system.groups",  //$NON-NLS-1$
-                 "SELECT insert('x', 1, 'a') AS x FROM system.groups",  //$NON-NLS-1$
+        helpTest("SELECT insert('x', 1, 'a') AS x FROM sys.groups",  //$NON-NLS-1$
+                 "SELECT insert('x', 1, 'a') AS x FROM sys.groups",  //$NON-NLS-1$
                  query);
     }
 
 
     
     @Test public void testInsertIntoSelect() {
-        GroupSymbol g = new GroupSymbol("system.groups"); //$NON-NLS-1$
+        GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$
         From from = new From();
         from.addGroup(g);
 
@@ -786,9 +786,9 @@
                  insert);
     }
 
-    /** SELECT translate('x', 'x', 'y') FROM system.groups */
+    /** SELECT translate('x', 'x', 'y') FROM sys.groups */
     @Test public void testTranslateFunction() {
-        GroupSymbol g = new GroupSymbol("system.groups"); //$NON-NLS-1$
+        GroupSymbol g = new GroupSymbol("sys.groups"); //$NON-NLS-1$
         From from = new From();
         from.addGroup(g);
 
@@ -800,8 +800,8 @@
         Query query = new Query();
         query.setSelect(select);
         query.setFrom(from);
-        helpTest("SELECT translate('x', 'x', 'y') FROM system.groups",  //$NON-NLS-1$
-                 "SELECT translate('x', 'x', 'y') FROM system.groups",  //$NON-NLS-1$
+        helpTest("SELECT translate('x', 'x', 'y') FROM sys.groups",  //$NON-NLS-1$
+                 "SELECT translate('x', 'x', 'y') FROM sys.groups",  //$NON-NLS-1$
                  query);
     }
 
@@ -2030,7 +2030,7 @@
 		query.setFrom(from);
 		query.setCriteria(crit);
 		helpTest("SELECT a from db.g where a <> \"value\"",  //$NON-NLS-1$
-				 "SELECT a FROM db.g WHERE a <> value",  //$NON-NLS-1$
+				 "SELECT a FROM db.g WHERE a <> \"value\"",  //$NON-NLS-1$
 				 query);
 	}
 
@@ -2225,8 +2225,8 @@
         query.setSelect(select);
         query.setFrom(from);
 
-        helpTest("SELECT g.x AS year FROM g",  //$NON-NLS-1$
-                 "SELECT g.x AS year FROM g",  //$NON-NLS-1$
+        helpTest("SELECT g.x AS \"year\" FROM g",  //$NON-NLS-1$
+                 "SELECT g.x AS \"year\" FROM g",  //$NON-NLS-1$
                  query);
     }
 
@@ -6167,7 +6167,7 @@
     }
 
     @Test public void testNationCharString2() throws Exception {
-        Query query = (Query) QueryParser.getQueryParser().parseCommand("SELECT DISTINCT TABLE_QUALIFIER, NULL AS TABLE_OWNER, NULL AS TABLE_NAME, NULL AS TABLE_TYPE, NULL AS REMARKS FROM ATIODBCSystem.OA_TABLES  WHERE TABLE_QUALIFIER LIKE N'%'  ESCAPE '\\'  ORDER BY TABLE_QUALIFIER  "); //$NON-NLS-1$
+        Query query = (Query) QueryParser.getQueryParser().parseCommand("SELECT DISTINCT TABLE_QUALIFIER, NULL AS TABLE_OWNER, NULL AS TABLE_NAME, NULL AS TABLE_TYPE, NULL AS REMARKS FROM ATIODBCSYSTEM.OA_TABLES  WHERE TABLE_QUALIFIER LIKE N'%'  ESCAPE '\\'  ORDER BY TABLE_QUALIFIER  "); //$NON-NLS-1$
         MatchCriteria matchCrit = (MatchCriteria) query.getCriteria();
         Constant c = (Constant) matchCrit.getRightExpression();
         assertEquals(c, new Constant("%")); //$NON-NLS-1$
@@ -6568,11 +6568,7 @@
     @Test public void testCreateTempTable5() {
         helpException("Create  local TEMPORARY table tempTable (c1 boolean primary, c2 byte)"); //$NON-NLS-1$ 
     }
-    
-    @Test public void testCreateTempTable6() {
-        helpException("Create  local TEMPORARY table tempTable (c1 varchar, c2 byte)"); //$NON-NLS-1$ 
-    }
-    
+        
     @Test public void testCreateTempTable7() {
         helpException("Create local TEMPORARY table tempTable (c1.x boolean, c2 byte)" ,"Parsing error: Invalid simple identifier format: [c1.x]"); //$NON-NLS-1$ //$NON-NLS-2$ 
     }
@@ -6687,5 +6683,28 @@
                  "INSERT INTO m.g VALUES ('a', 'b')",  //$NON-NLS-1$
                  insert);
     }
-    
+
+    @Test public void testTypeAliases() {
+        Create create = new Create();
+        create.setTable(new GroupSymbol("tempTable")); //$NON-NLS-1$
+        List columns = new ArrayList();
+        ElementSymbol column = new ElementSymbol("c1");//$NON-NLS-1$
+        column.setType(DataTypeManager.DefaultDataClasses.STRING);
+        columns.add(column);
+        column = new ElementSymbol("c2");//$NON-NLS-1$
+        column.setType(DataTypeManager.DefaultDataClasses.BYTE);
+        columns.add(column);
+        column = new ElementSymbol("c3");//$NON-NLS-1$
+        column.setType(DataTypeManager.DefaultDataClasses.SHORT);
+        columns.add(column);
+        column = new ElementSymbol("c4");//$NON-NLS-1$
+        column.setType(DataTypeManager.DefaultDataClasses.FLOAT);
+        columns.add(column);
+        column = new ElementSymbol("c5");//$NON-NLS-1$
+        column.setType(DataTypeManager.DefaultDataClasses.BIG_DECIMAL);
+        columns.add(column);
+        create.setColumns(columns);
+        helpTest("Create local TEMPORARY table tempTable (c1 varchar, c2 tinyint, c3 smallint, c4 real, c5 decimal)", "CREATE LOCAL TEMPORARY TABLE tempTable (c1 string, c2 byte, c3 short, c4 float, c5 bigdecimal)", create); //$NON-NLS-1$ 
+    }
+
 }

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/processor/proc/TestProcedureProcessor.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/processor/proc/TestProcedureProcessor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/processor/proc/TestProcedureProcessor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -179,7 +179,7 @@
             //reset and clone after 1st run
             if (i==1) {
                 procPlan.reset();
-                procPlan = (ProcessorPlan)procPlan.clone();
+                procPlan = procPlan.clone();
             }
         }
     }
@@ -2333,7 +2333,7 @@
         FakeMetadataObject rs2p1 = FakeMetadataFactory.createParameter("ret", 1, ParameterInfo.RESULT_SET, DataTypeManager.DefaultDataTypes.OBJECT, rs2);  //$NON-NLS-1$
         FakeMetadataObject rs2p2 = FakeMetadataFactory.createParameter("input", 2, ParameterInfo.IN, DataTypeManager.DefaultDataTypes.INTEGER, null);  //$NON-NLS-1$
         QueryNode sq2n1 = new QueryNode("xqttest.proc", "CREATE VIRTUAL PROCEDURE BEGIN\n" //$NON-NLS-1$ //$NON-NLS-2$
-                                        + "declare integer VARIABLES.x = input; SELECT * FROM xmltest.doc9 WHERE context(SupplierID, OrderID)=x OR OrderID='2'; END"); //$NON-NLS-1$ 
+                                        + "declare integer VARIABLES.x = xqttest.proc.input; SELECT * FROM xmltest.doc9 WHERE context(SupplierID, OrderID)=x OR OrderID='2'; END"); //$NON-NLS-1$ 
         FakeMetadataObject sq2 = FakeMetadataFactory.createVirtualProcedure("xqttest.proc", pm1, Arrays.asList(new FakeMetadataObject[] { rs2p1, rs2p2 }), sq2n1);  //$NON-NLS-1$
 
         metadata.getStore().addObject(rs2);
@@ -2362,7 +2362,7 @@
         FakeMetadataObject rs2p1 = FakeMetadataFactory.createParameter("ret", 1, ParameterInfo.RESULT_SET, DataTypeManager.DefaultDataTypes.OBJECT, rs2);  //$NON-NLS-1$
         FakeMetadataObject rs2p2 = FakeMetadataFactory.createParameter("input", 2, ParameterInfo.IN, DataTypeManager.DefaultDataTypes.INTEGER, null);  //$NON-NLS-1$
         QueryNode sq2n1 = new QueryNode("xqttest.proc", "CREATE VIRTUAL PROCEDURE BEGIN\n" //$NON-NLS-1$ //$NON-NLS-2$
-                                        + "declare integer VARIABLES.x = input; declare xml y = SELECT * FROM xmltest.doc9 WHERE context(SupplierID, OrderID)=x OR OrderID='2'; select convert(y, string); END"); //$NON-NLS-1$ 
+                                        + "declare integer VARIABLES.x = xqttest.proc.input; declare xml y = SELECT * FROM xmltest.doc9 WHERE context(SupplierID, OrderID)=x OR OrderID='2'; select convert(y, string); END"); //$NON-NLS-1$ 
         FakeMetadataObject sq2 = FakeMetadataFactory.createVirtualProcedure("xqttest.proc", pm1, Arrays.asList(new FakeMetadataObject[] { rs2p1, rs2p2 }), sq2n1);  //$NON-NLS-1$
 
         metadata.getStore().addObject(rs2);
@@ -2429,7 +2429,7 @@
         FakeMetadataObject rs2p1 = FakeMetadataFactory.createParameter("ret", 1, ParameterInfo.RESULT_SET, DataTypeManager.DefaultDataTypes.OBJECT, rs2);  //$NON-NLS-1$
         FakeMetadataObject rs2p2 = FakeMetadataFactory.createParameter("input", 2, ParameterInfo.IN, DataTypeManager.DefaultDataTypes.INTEGER, null);  //$NON-NLS-1$
         QueryNode sq2n1 = new QueryNode("xmltest.proc", "CREATE VIRTUAL PROCEDURE BEGIN\n" //$NON-NLS-1$ //$NON-NLS-2$
-                                        + "declare integer VARIABLES.x = input; SELECT * FROM xmltest.doc9 WHERE context(SupplierID, SupplierID)=x; END"); //$NON-NLS-1$ 
+                                        + "declare integer VARIABLES.x = xmltest.proc.input; SELECT * FROM xmltest.doc9 WHERE context(SupplierID, SupplierID)=x; END"); //$NON-NLS-1$ 
         FakeMetadataObject sq2 = FakeMetadataFactory.createVirtualProcedure("xmltest.proc", pm1, Arrays.asList(new FakeMetadataObject[] { rs2p1, rs2p2 }), sq2n1);  //$NON-NLS-1$
 
         metadata.getStore().addObject(rs2);

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/resolver/TestProcedureResolving.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/resolver/TestProcedureResolving.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/resolver/TestProcedureResolving.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -24,7 +24,6 @@
 
 import static org.junit.Assert.*;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -42,12 +41,12 @@
 import com.metamatrix.query.mapping.relational.QueryNode;
 import com.metamatrix.query.metadata.QueryMetadataInterface;
 import com.metamatrix.query.metadata.TempMetadataAdapter;
-import com.metamatrix.query.metadata.TempMetadataID;
 import com.metamatrix.query.metadata.TempMetadataStore;
 import com.metamatrix.query.parser.QueryParser;
 import com.metamatrix.query.resolver.util.ResolverUtil;
 import com.metamatrix.query.sql.ProcedureReservedWords;
 import com.metamatrix.query.sql.lang.Command;
+import com.metamatrix.query.sql.lang.GroupContext;
 import com.metamatrix.query.sql.lang.Insert;
 import com.metamatrix.query.sql.lang.ProcedureContainer;
 import com.metamatrix.query.sql.proc.AssignmentStatement;
@@ -104,39 +103,21 @@
     public static Map getProcedureExternalMetadata(GroupSymbol virtualGroup, QueryMetadataInterface metadata)
     throws QueryMetadataException, MetaMatrixComponentException {
         Map externalMetadata = new HashMap();
-
-        // Look up elements for the virtual group
-        List elements = ResolverUtil.resolveElementsInGroup(virtualGroup, metadata);
-        // virtual group metadata info
+        
+        //TODO: it doesn't seem like these should be in the 
+        List<ElementSymbol> elements = ResolverUtil.resolveElementsInGroup(virtualGroup, metadata);
         externalMetadata.put(virtualGroup, elements);
+        
+        TempMetadataStore tms = new TempMetadataStore();
 
-        // INPUT group metadata info
-        GroupSymbol inputGroup = new GroupSymbol(ProcedureReservedWords.INPUT);
-        List inputElments = new ArrayList(elements.size());
-        List elementIds = new ArrayList();
-        for(int i=0; i<elements.size(); i++) {
-            ElementSymbol virtualElmnt = (ElementSymbol)elements.get(i);
-            ElementSymbol inputElement = (ElementSymbol)virtualElmnt.clone();
-            inputElments.add(inputElement);
-            elementIds.add(new TempMetadataID(ProcedureReservedWords.INPUT + ElementSymbol.SEPARATOR + virtualElmnt.getShortName(), virtualElmnt.getType()));
+        TempMetadataAdapter tma = new TempMetadataAdapter(metadata, tms);
+        
+        GroupContext gc = ProcedureContainerResolver.createChildMetadata(tms, metadata, virtualGroup);
+        
+        for (GroupSymbol symbol : gc.getAllGroups()) {
+        	externalMetadata.put(symbol, ResolverUtil.resolveElementsInGroup(symbol, tma));
         }
-        inputGroup.setMetadataID(new TempMetadataID(ProcedureReservedWords.INPUT, elementIds));
-        externalMetadata.put(inputGroup, inputElments);
-
-        // CHANGING group metadata info
-        // Switch type to be boolean for all CHANGING variables
-        GroupSymbol changeGroup = new GroupSymbol(ProcedureReservedWords.CHANGING);
-        List changingElments = new ArrayList(elements.size());
-        elementIds = new ArrayList();
-        for(int i=0; i<elements.size(); i++) {
-            ElementSymbol changeElement = (ElementSymbol)((ElementSymbol)elements.get(i)).clone();
-            changeElement.setType(DataTypeManager.DefaultDataClasses.BOOLEAN);
-            changingElments.add(changeElement);
-            elementIds.add(new TempMetadataID(ProcedureReservedWords.INPUT + ElementSymbol.SEPARATOR + changeElement.getShortName(), changeElement.getType()));
-        }
-        changeGroup.setMetadataID(new TempMetadataID(ProcedureReservedWords.CHANGING, elementIds));
-        externalMetadata.put(changeGroup, changingElments);
-
+        
         return externalMetadata;
     }
 	
@@ -218,7 +199,7 @@
     @Test public void testProcedureScoping() throws Exception {
         StringBuffer proc = new StringBuffer("CREATE PROCEDURE") //$NON-NLS-1$
         .append("\nBEGIN") //$NON-NLS-1$
-        //note that this declare takes presedense over the proc INPUT.e1 and CHANGING.e1 variables
+        //note that this declare takes presedense over the proc INPUTS.e1 and CHANGING.e1 variables
         .append("\n  declare integer e1 = 1;") //$NON-NLS-1$
         .append("\n  e1 = e1;") //$NON-NLS-1$
         .append("\n  LOOP ON (SELECT pm1.g1.e1 FROM pm1.g1) AS loopCursor") //$NON-NLS-1$
@@ -363,7 +344,7 @@
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
         procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
         procedure = procedure + "ROWS_UPDATED = Select pm1.g1.e2 from pm1.g1;\n"; //$NON-NLS-1$
-        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = var1;\n"; //$NON-NLS-1$
+        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = var1;\n"; //$NON-NLS-1$
 		procedure = procedure + "ROWS_UPDATED = ROWS_UPDATED + var1;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
 
@@ -379,7 +360,7 @@
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
         procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
         procedure = procedure + "ROWS_UPDATED = Select pm1.g1.e2 from pm1.g1;\n"; //$NON-NLS-1$
-        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = var1;\n"; //$NON-NLS-1$
+        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = var1;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
 
         String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -393,8 +374,8 @@
         String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
         procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
-        procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
-        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+        procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
+        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
 
         String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -410,8 +391,8 @@
         procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
         procedure = procedure + "if(CHANGING.e1 = 'true')\n";         //$NON-NLS-1$
         procedure = procedure + "BEGIN\n";         //$NON-NLS-1$
-        procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
-        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+        procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
+        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
         procedure = procedure + "END\n";         //$NON-NLS-1$
 
@@ -426,10 +407,10 @@
         String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
         procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
-        procedure = procedure + "if(CHANGING.e1='false' and INPUT.e1=1)\n";         //$NON-NLS-1$
+        procedure = procedure + "if(CHANGING.e1='false' and INPUTS.e1=1)\n";         //$NON-NLS-1$
         procedure = procedure + "BEGIN\n";         //$NON-NLS-1$
-        procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
-        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+        procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
+        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
         procedure = procedure + "END\n";         //$NON-NLS-1$
 
@@ -444,10 +425,10 @@
         String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
         procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
-        procedure = procedure + "if(CHANGING.e4 ='true' and INPUT.e2=1 or var1 < 30)\n";         //$NON-NLS-1$
+        procedure = procedure + "if(CHANGING.e4 ='true' and INPUTS.e2=1 or var1 < 30)\n";         //$NON-NLS-1$
         procedure = procedure + "BEGIN\n";         //$NON-NLS-1$
-        procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
-        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+        procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
+        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
         procedure = procedure + "END\n";         //$NON-NLS-1$
 
@@ -463,7 +444,7 @@
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
         procedure = procedure + "if(CHANGING.e4 = {d'2000-01-01'})\n";         //$NON-NLS-1$
         procedure = procedure + "BEGIN\n";         //$NON-NLS-1$
-        procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
+        procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
         procedure = procedure + "END\n";         //$NON-NLS-1$
 
@@ -527,7 +508,7 @@
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
         procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
         procedure = procedure + "ROWS_UPDATED = Select pm1.g1.e2 from pm1.g1 where Translate CRITERIA WITH (vm1.g1.e1 = 1, vm1.g1.e1 = 2);\n"; //$NON-NLS-1$
-        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = 'x', pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = 'x', pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
 
         String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -543,7 +524,7 @@
 //        procedure = procedure + "DECLARE integer var1;\n";
         procedure = procedure + "var3 = var2+var1;\n";         //$NON-NLS-1$
         procedure = procedure + "var2 = Select pm1.g1.e2 from pm1.g1 where Translate CRITERIA WITH (vm1.g1.e1 = 1, vm1.g1.e1 = 2);\n"; //$NON-NLS-1$
-        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = 'x', pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = 'x', pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
 
         String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -558,7 +539,7 @@
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
         procedure = procedure + "DECLARE struct var1;\n"; //$NON-NLS-1$
         procedure = procedure + "var1 = Select pm1.g1.e2 from pm1.g1 where Translate CRITERIA WITH (vm1.g1.e1 = 1, vm1.g1.e1 = 2);\n"; //$NON-NLS-1$
-        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = 'x', pm1.g1.e2 = INPUT.e2;\n"; //$NON-NLS-1$
+        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = 'x', pm1.g1.e2 = INPUTS.e2;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
 
         String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -852,8 +833,8 @@
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
         procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
         procedure = procedure + "Select pm1.g1.e2 from pm1.g1 where TRANSLATE CRITERIA ON (e1) WITH (g1.e1 = 1);\n";         //$NON-NLS-1$
-//        procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n";
-//        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = INPUT.e2;\n";
+//        procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n";
+//        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = INPUTS.e2;\n";
         procedure = procedure + "END\n"; //$NON-NLS-1$
         
         QueryMetadataInterface metadata = FakeMetadataFactory.exampleUpdateProc(FakeMetadataObject.Props.UPDATE_PROCEDURE, procedure);
@@ -869,9 +850,9 @@
     @Test public void testCreateUpdateProcedure44() throws Exception {
         String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
-        procedure = procedure + "if(INPUT.e1 = 10)\n";         //$NON-NLS-1$
+        procedure = procedure + "if(INPUTS.e1 = 10)\n";         //$NON-NLS-1$
         procedure = procedure + "BEGIN\n";         //$NON-NLS-1$
-        procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
+        procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
         procedure = procedure + "END\n";         //$NON-NLS-1$
 
@@ -885,9 +866,9 @@
     @Test public void testCreateUpdateProcedure45() throws Exception {
         String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
-        procedure = procedure + "if(INPUT.e1 = 10)\n";         //$NON-NLS-1$
+        procedure = procedure + "if(INPUTS.e1 = 10)\n";         //$NON-NLS-1$
         procedure = procedure + "BEGIN\n";         //$NON-NLS-1$
-        procedure = procedure + "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
+        procedure = procedure + "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
         procedure = procedure + "END\n";         //$NON-NLS-1$
 
@@ -906,7 +887,7 @@
     @Test public void testCreateUpdateProcedure46() throws Exception {
         String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
-        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1;\n"; //$NON-NLS-1$
+        procedure = procedure + "UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1;\n"; //$NON-NLS-1$
         procedure = procedure + "END\n";         //$NON-NLS-1$
 
         Command procCommand = QueryParser.getQueryParser().parseCommand(procedure);
@@ -942,7 +923,7 @@
 		String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
 		procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
 		procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
-		procedure = procedure + "Select pm1.g1.e1 from pm1.g1 where Translate CRITERIA WITH (vm1.g1.e1 = 1, INPUT.e2 = 2);\n";         //$NON-NLS-1$
+		procedure = procedure + "Select pm1.g1.e1 from pm1.g1 where Translate CRITERIA WITH (vm1.g1.e1 = 1, INPUTS.e2 = 2);\n";         //$NON-NLS-1$
 		procedure = procedure + "END\n"; //$NON-NLS-1$
 
 		String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -969,7 +950,7 @@
 		String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
 		procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
 		procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
-		procedure = procedure + "if(HAS CRITERIA ON (vm1.g1.E1, vm1.g1.e1, INPUT.e1))\n";                 //$NON-NLS-1$
+		procedure = procedure + "if(HAS CRITERIA ON (vm1.g1.E1, vm1.g1.e1, INPUTS.e1))\n";                 //$NON-NLS-1$
 		procedure = procedure + "BEGIN\n";         //$NON-NLS-1$
 		procedure = procedure + "END\n"; //$NON-NLS-1$
 		procedure = procedure + "ROWS_UPDATED =0;\n";         //$NON-NLS-1$
@@ -1019,7 +1000,7 @@
 		String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
 		procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
 		procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
-		procedure = procedure + "var1 = INPUT.e4;"; //$NON-NLS-1$
+		procedure = procedure + "var1 = INPUTS.e4;"; //$NON-NLS-1$
 		procedure = procedure + "ROWS_UPDATED =0;\n";         //$NON-NLS-1$
 		procedure = procedure + "END\n"; //$NON-NLS-1$
 
@@ -1281,8 +1262,8 @@
     /*@Test public void testCommandUpdating3() throws Exception{
         StringBuffer procedure = new StringBuffer("CREATE PROCEDURE  ") //$NON-NLS-1$
         .append("BEGIN\n") //$NON-NLS-1$
-        .append("INSERT INTO pm1.g1 (e1) VALUES (input.e1);\n") //$NON-NLS-1$
-        .append("ROWS_UPDATED = INSERT INTO pm1.g2 (e1) VALUES (input.e1);\n") //$NON-NLS-1$
+        .append("INSERT INTO pm1.g1 (e1) VALUES (INPUTS.e1);\n") //$NON-NLS-1$
+        .append("ROWS_UPDATED = INSERT INTO pm1.g2 (e1) VALUES (INPUTS.e1);\n") //$NON-NLS-1$
         .append("END\n"); //$NON-NLS-1$
 
         String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
@@ -1295,9 +1276,9 @@
     /*@Test public void testCommandUpdatingCount6() throws Exception{
         String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
-        procedure = procedure + "if(INPUT.e1 = 10)\n";         //$NON-NLS-1$
+        procedure = procedure + "if(INPUTS.e1 = 10)\n";         //$NON-NLS-1$
         procedure = procedure + "BEGIN\n";         //$NON-NLS-1$
-        procedure = procedure + "INSERT INTO pm1.g1 (e2) VALUES (Input.e2);\n"; //$NON-NLS-1$
+        procedure = procedure + "INSERT INTO pm1.g1 (e2) VALUES (INPUTS.e2);\n"; //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
         procedure = procedure + "END\n";         //$NON-NLS-1$
 
@@ -1327,14 +1308,14 @@
         String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
         procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
-        procedure = procedure + "INPUT.e1 = Select pm1.g1.e1 from pm1.g1;\n"; //$NON-NLS-1$
+        procedure = procedure + "INPUTS.e1 = Select pm1.g1.e1 from pm1.g1;\n"; //$NON-NLS-1$
         procedure = procedure + "ROWS_UPDATED =0;\n";         //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
 
         String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
         
         helpFailUpdateProcedure(procedure, userUpdateStr,
-                                     FakeMetadataObject.Props.UPDATE_PROCEDURE, "Element symbol \"INPUT.e1\" cannot be assigned a value.  Only declared VARIABLES can be assigned values."); //$NON-NLS-1$
+                                     FakeMetadataObject.Props.UPDATE_PROCEDURE, "Element symbol \"INPUTS.e1\" cannot be assigned a value.  Only declared VARIABLES can be assigned values."); //$NON-NLS-1$
     }
     
     // validating CHANGING element assigned
@@ -1372,14 +1353,14 @@
         String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
         procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
         procedure = procedure + "DECLARE integer var1;\n"; //$NON-NLS-1$
-        procedure = procedure + "Insert into pm1.g1 (pm1.g1.e2, INPUT.x) values (1, 2);\n"; //$NON-NLS-1$
+        procedure = procedure + "Insert into pm1.g1 (pm1.g1.e2, INPUTS.x) values (1, 2);\n"; //$NON-NLS-1$
         procedure = procedure + "ROWS_UPDATED =0;\n";         //$NON-NLS-1$
         procedure = procedure + "END\n"; //$NON-NLS-1$
 
         String userQuery = "UPDATE vm1.g3 SET x='x' where e3= 1"; //$NON-NLS-1$
 
         helpFailUpdateProcedure(procedure, userQuery, 
-                FakeMetadataObject.Props.UPDATE_PROCEDURE, "Column variables do not reference columns on group \"pm1.g1\": [Unable to resolve 'INPUT.x': Symbol INPUT.x is specified with an unknown group context]"); //$NON-NLS-1$
+                FakeMetadataObject.Props.UPDATE_PROCEDURE, "Column variables do not reference columns on group \"pm1.g1\": [Unable to resolve 'INPUTS.x': Symbol INPUTS.x is specified with an unknown group context]"); //$NON-NLS-1$
     }
     
     //should resolve first to the table's column
@@ -1539,14 +1520,14 @@
 	@Test public void testDefect16451() {
 		String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
         procedure += "BEGIN\n"; //$NON-NLS-1$
-        procedure += "Select pm1.g1.e2 from pm1.g1 where e1 = input.e1;\n"; //$NON-NLS-1$
+        procedure += "Select pm1.g1.e2 from pm1.g1 where e1 = INPUTS.e1;\n"; //$NON-NLS-1$
         procedure += "ROWS_UPDATED = 0;"; //$NON-NLS-1$
         procedure += "END\n"; //$NON-NLS-1$
         
         String userUpdateStr = "delete from vm1.g1 where e1='x'"; //$NON-NLS-1$
         
 		helpFailUpdateProcedure(procedure, userUpdateStr,
-									 FakeMetadataObject.Props.DELETE_PROCEDURE, "Symbol input.e1 is specified with an unknown group context"); //$NON-NLS-1$
+									 FakeMetadataObject.Props.DELETE_PROCEDURE, "Symbol INPUTS.e1 is specified with an unknown group context"); //$NON-NLS-1$
 	}
 	
     @Test public void testInvalidVirtualProcedure3() throws Exception {
@@ -1573,14 +1554,14 @@
         String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
         procedure += "BEGIN\n"; //$NON-NLS-1$
         procedure += "DECLARE integer var1;\n"; //$NON-NLS-1$
-        procedure += "Select pm1.g1.e2, Input.e2 from pm1.g1;\n"; //$NON-NLS-1$
-        procedure += "ROWS_UPDATED = UPDATE pm1.g1 SET pm1.g1.e1 = INPUT.e1, pm1.g1.e2 = INPUT.e1;\n"; //$NON-NLS-1$
+        procedure += "Select pm1.g1.e2, INPUTS.e2 from pm1.g1;\n"; //$NON-NLS-1$
+        procedure += "ROWS_UPDATED = UPDATE pm1.g1 SET pm1.g1.e1 = INPUTS.e1, pm1.g1.e2 = INPUTS.e1;\n"; //$NON-NLS-1$
         procedure += "END\n"; //$NON-NLS-1$
 
         String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
         
 		helpFailUpdateProcedure(procedure, userUpdateStr,
-				 FakeMetadataObject.Props.UPDATE_PROCEDURE, "Error Code:ERR.015.008.0041 Message:Cannot set symbol 'pm1.g1.e2' with expected type integer to expression 'INPUT.e1'"); //$NON-NLS-1$
+				 FakeMetadataObject.Props.UPDATE_PROCEDURE, "Error Code:ERR.015.008.0041 Message:Cannot set symbol 'pm1.g1.e2' with expected type integer to expression 'INPUTS.e1'"); //$NON-NLS-1$
     }
     
     @Test public void testVirtualProcedure() throws Exception {

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/sql/symbol/TestAggregateSymbol.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/sql/symbol/TestAggregateSymbol.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/sql/symbol/TestAggregateSymbol.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -22,10 +22,11 @@
 
 package com.metamatrix.query.sql.symbol;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import junit.framework.TestCase;
 
 import com.metamatrix.core.util.UnitTestUtil;
-import com.metamatrix.query.sql.ReservedWords;
 
 public class TestAggregateSymbol extends TestCase {
 
@@ -70,105 +71,105 @@
 	// ################################## ACTUAL TESTS ################################
 	
 	public void testParser1() {
-		AggregateSymbol as = new AggregateSymbol("count", ReservedWords.COUNT, false, sampleElement()); //$NON-NLS-1$
+		AggregateSymbol as = new AggregateSymbol("count", SQLReservedWords.COUNT, false, sampleElement()); //$NON-NLS-1$
 		helpParser(as, "COUNT(m.g.c)"); //$NON-NLS-1$
 	}
 
 	public void testParser2() {
-		AggregateSymbol as = new AggregateSymbol("count", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+		AggregateSymbol as = new AggregateSymbol("count", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
 		helpParser(as, "COUNT(DISTINCT m.g.c)"); //$NON-NLS-1$
 	}
 
 	public void testParser3() {
-		AggregateSymbol as = new AggregateSymbol("x", ReservedWords.MIN, false, sampleConstant()); //$NON-NLS-1$
+		AggregateSymbol as = new AggregateSymbol("x", SQLReservedWords.MIN, false, sampleConstant()); //$NON-NLS-1$
 		helpParser(as, "MIN(5)"); //$NON-NLS-1$
 	}
 
 	public void testParser4() {
-		AggregateSymbol as = new AggregateSymbol("x", ReservedWords.MAX, false, sampleFunction()); //$NON-NLS-1$
+		AggregateSymbol as = new AggregateSymbol("x", SQLReservedWords.MAX, false, sampleFunction()); //$NON-NLS-1$
 		helpParser(as, "MAX((m.g.c + 5))"); //$NON-NLS-1$
 	}
 
 	public void testParser5() {
-		AggregateSymbol as = new AggregateSymbol("x", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+		AggregateSymbol as = new AggregateSymbol("x", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
 		helpParser(as, "COUNT(*)"); //$NON-NLS-1$
 	}
 		
 	public void testEquals1() { 
-		AggregateSymbol as = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+		AggregateSymbol as = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
 		helpEquals(as, as, true);		
 	}
 
 	public void testEquals2() { 
-		AggregateSymbol as1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+		AggregateSymbol as1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
 		AggregateSymbol as2 = (AggregateSymbol) as1.clone();
 		helpEquals(as1, as2, true);		
 	}
 
     //just changing the name of an aggregatesymbol doesn't matter
 	public void testEquals3() { 
-		AggregateSymbol as1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
-		AggregateSymbol as2 = new AggregateSymbol("y", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+		AggregateSymbol as1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+		AggregateSymbol as2 = new AggregateSymbol("y", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
 		helpEquals(as1, as2, true);		
 	}
 	
 	public void testEquals4() { 
-		AggregateSymbol as1 = new AggregateSymbol("count", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+		AggregateSymbol as1 = new AggregateSymbol("count", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
 		AggregateSymbol as2 = (AggregateSymbol) as1.clone();
 		helpEquals(as1, as2, true);		
 	}
 
 	public void testSelfEquivalence(){
-		AggregateSymbol test = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+		AggregateSymbol test = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
 		int equals = 0;
 		UnitTestUtil.helpTestEquivalence(equals, test, test);
 	}
 
 	public void testEquivalence(){
-		AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
-		AggregateSymbol test2 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+		AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+		AggregateSymbol test2 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
 		int equals = 0;
 		UnitTestUtil.helpTestEquivalence(equals, test1, test2);
 	}
     
     public void testEquivalenceCountStar(){
-        AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.COUNT, false, null); //$NON-NLS-1$
-        AggregateSymbol test2 = new AggregateSymbol("x", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+        AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
+        AggregateSymbol test2 = new AggregateSymbol("x", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
         int equals = 0;
         UnitTestUtil.helpTestEquivalence(equals, test1, test2);
     }
 
 	public void testEquivalenceCaseInsens(){
-		AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
-		AggregateSymbol test2 = new AggregateSymbol("X", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+		AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+		AggregateSymbol test2 = new AggregateSymbol("X", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
 		int equals = 0;
 		UnitTestUtil.helpTestEquivalence(equals, test1, test2);
 	}
     
     public void testNonEquivalenceUsingDiffElements(){ 
-        AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$ 
-        AggregateSymbol test2 = new AggregateSymbol("X", ReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$ 
+        AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$ 
+        AggregateSymbol test2 = new AggregateSymbol("X", SQLReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$ 
         int equals = -1; 
         UnitTestUtil.helpTestEquivalence(equals, test1, test2); 
     } 
 	
 	public void testNonEquivalence(){
-		AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
-		AggregateSymbol test2 = new AggregateSymbol("y", ReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
+		AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+		AggregateSymbol test2 = new AggregateSymbol("y", SQLReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
 		int equals = -1;
 		UnitTestUtil.helpTestEquivalence(equals, test1, test2);
 	}
     
     public void testNonEquivalence1(){
-        AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
-        AggregateSymbol test2 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
+        AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement()); //$NON-NLS-1$
+        AggregateSymbol test2 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
         int equals = -1;
         UnitTestUtil.helpTestEquivalence(equals, test1, test2);
     }
     
     public void testNonEquivalence2(){
-        AggregateSymbol test1 = new AggregateSymbol("x", ReservedWords.MAX, true, sampleElement()); //$NON-NLS-1$
-        AggregateSymbol test2 = new AggregateSymbol("x", ReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
+        AggregateSymbol test1 = new AggregateSymbol("x", SQLReservedWords.MAX, true, sampleElement()); //$NON-NLS-1$
+        AggregateSymbol test2 = new AggregateSymbol("x", SQLReservedWords.COUNT, true, sampleElement2()); //$NON-NLS-1$
         int equals = -1;
         UnitTestUtil.helpTestEquivalence(equals, test1, test2);
     }

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/sql/util/TestUpdateProcedureGenerator.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/sql/util/TestUpdateProcedureGenerator.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/sql/util/TestUpdateProcedureGenerator.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -178,7 +178,7 @@
 			"vm1.g1", //$NON-NLS-1$
 			"select e1 as a, e2 from pm1.g1 where e4 > 5",              //$NON-NLS-1$
 		    TestUpdateProcedureGenerator.example1(),
-            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e1, pm1.g1.e2) VALUES (INPUT.a, INPUT.e2);\nEND"); //$NON-NLS-1$
+            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e1, pm1.g1.e2) VALUES (INPUTS.a, INPUTS.e2);\nEND"); //$NON-NLS-1$
 	}
 	
 	public void testCreateInsertCommand2(){ //put a constant in select statement
@@ -186,7 +186,7 @@
 			"vm1.g1", //$NON-NLS-1$
 			"select e1 as a, 5 from pm1.g1 where e4 > 5",              //$NON-NLS-1$
 		    TestUpdateProcedureGenerator.example1(),
-            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e1) VALUES (INPUT.a);\nEND"); //$NON-NLS-1$
+            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e1) VALUES (INPUTS.a);\nEND"); //$NON-NLS-1$
 	}
 	
 	public void testCreateInsertCommand3(){ 
@@ -194,7 +194,7 @@
 			"vm1.g2", //$NON-NLS-1$
 			"select * from pm1.g2 where e4 > 5",              //$NON-NLS-1$
 		    TestUpdateProcedureGenerator.example1(),
-            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g2 (pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4) VALUES (INPUT.e1, INPUT.e2, INPUT.e3, INPUT.e4);\nEND"); //$NON-NLS-1$
+            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g2 (pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4) VALUES (INPUTS.e1, INPUTS.e2, INPUTS.e3, INPUTS.e4);\nEND"); //$NON-NLS-1$
 	}
 	
 	public void testCreateInsertCommand4(){ //test group alias
@@ -202,7 +202,7 @@
 			"vm1.g2", //$NON-NLS-1$
 			"select * from pm1.g2 as g_alias",              //$NON-NLS-1$
 			TestUpdateProcedureGenerator.example1(),
-			"CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g2 (pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4) VALUES (INPUT.e1, INPUT.e2, INPUT.e3, INPUT.e4);\nEND"); //$NON-NLS-1$
+			"CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g2 (pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4) VALUES (INPUTS.e1, INPUTS.e2, INPUTS.e3, INPUTS.e4);\nEND"); //$NON-NLS-1$
 	}	
 
 	public void testCreateInsertCommand5(){
@@ -210,7 +210,7 @@
 			"vm1.g1", //$NON-NLS-1$
 			"select e1 as a, e2 from pm1.g1 as g_alias where e4 > 5",              //$NON-NLS-1$
 			TestUpdateProcedureGenerator.example1(),
-			"CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e1, pm1.g1.e2) VALUES (INPUT.a, INPUT.e2);\nEND"); //$NON-NLS-1$
+			"CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e1, pm1.g1.e2) VALUES (INPUTS.a, INPUTS.e2);\nEND"); //$NON-NLS-1$
 	}
 		
 	public void testCreateUpdateCommand(){
@@ -218,7 +218,7 @@
 			"vm1.g1", //$NON-NLS-1$
 			"select e1 as a, e2 from pm1.g1 where e4 > 5",              //$NON-NLS-1$
 		    TestUpdateProcedureGenerator.example1(),
-            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = UPDATE pm1.g1 SET e1 = INPUT.a, e2 = INPUT.e2 WHERE TRANSLATE CRITERIA;\nEND"); //$NON-NLS-1$
+            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = UPDATE pm1.g1 SET e1 = INPUTS.a, e2 = INPUTS.e2 WHERE TRANSLATE CRITERIA;\nEND"); //$NON-NLS-1$
 	}
 	
 	public void testCreateDeleteCommand(){
@@ -339,7 +339,7 @@
             "vm1.g3", //$NON-NLS-1$
             "SELECT e1, e2 FROM pm1.g3", //$NON-NLS-1$
             TestUpdateProcedureGenerator.example1(),
-            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g3 (pm1.g3.e1, pm1.g3.e2) VALUES (INPUT.e1, INPUT.e2);\nEND"); //$NON-NLS-1$
+            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g3 (pm1.g3.e1, pm1.g3.e2) VALUES (INPUTS.e1, INPUTS.e2);\nEND"); //$NON-NLS-1$
     }
 
     // Check that e2 is not required (it is auto-incremented)
@@ -348,7 +348,7 @@
             "vm1.g4", //$NON-NLS-1$
             "SELECT e1, e3 FROM pm1.g3", //$NON-NLS-1$
             TestUpdateProcedureGenerator.example1(),
-            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g3 (pm1.g3.e1, pm1.g3.e3) VALUES (INPUT.e1, INPUT.e3);\nEND"); //$NON-NLS-1$
+            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g3 (pm1.g3.e1, pm1.g3.e3) VALUES (INPUTS.e1, INPUTS.e3);\nEND"); //$NON-NLS-1$
     }
 
     // Check that e1 is required (it is not-nullable, not auto-incrementable, and has no default value)
@@ -366,7 +366,7 @@
                     "vm1.g1", //$NON-NLS-1$
                     "select e1 as a, e2 from pm1.g1 where e4 > 5",              //$NON-NLS-1$
                     TestUpdateProcedureGenerator.example1(false),
-                    "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = UPDATE pm1.g1 SET e2 = INPUT.e2 WHERE TRANSLATE CRITERIA;\nEND"); //$NON-NLS-1$
+                    "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = UPDATE pm1.g1 SET e2 = INPUTS.e2 WHERE TRANSLATE CRITERIA;\nEND"); //$NON-NLS-1$
 	}
 	
     // Verify that elements that are not updateable are exlcluded from update and delete procedures
@@ -375,7 +375,7 @@
             "vm1.g1", //$NON-NLS-1$
             "SELECT e1, e2 FROM pm1.g1", //$NON-NLS-1$
             TestUpdateProcedureGenerator.example1(false),
-            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e2) VALUES (INPUT.e2);\nEND"); //$NON-NLS-1$
+            "CREATE PROCEDURE\nBEGIN\nROWS_UPDATED = INSERT INTO pm1.g1 (pm1.g1.e2) VALUES (INPUTS.e2);\nEND"); //$NON-NLS-1$
     }
 
 }

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestExpressionMappingVisitor.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestExpressionMappingVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestExpressionMappingVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -32,9 +32,9 @@
 
 import org.junit.Test;
 import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.language.SQLReservedWords;
 
 import com.metamatrix.query.sql.LanguageObject;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.lang.CompareCriteria;
 import com.metamatrix.query.sql.lang.Select;
 import com.metamatrix.query.sql.lang.SetCriteria;
@@ -196,10 +196,10 @@
      */
     @Test public void testRecursionDetection() {
     	ElementSymbol e1 = new ElementSymbol("e1"); //$NON-NLS-1$
-    	AggregateSymbol a1 = new AggregateSymbol("x", ReservedWords.SUM, false, e1); //$NON-NLS-1$
+    	AggregateSymbol a1 = new AggregateSymbol("x", SQLReservedWords.SUM, false, e1); //$NON-NLS-1$
     	Function f = new Function(SourceSystemFunctions.ADD_OP, new Expression[] {a1, a1});
     	HashMap<AggregateSymbol, AggregateSymbol> map = new HashMap<AggregateSymbol, AggregateSymbol>();
-    	map.put(a1, new AggregateSymbol("x", ReservedWords.SUM, false, a1)); //$NON-NLS-1$
+    	map.put(a1, new AggregateSymbol("x", SQLReservedWords.SUM, false, a1)); //$NON-NLS-1$
     	ExpressionMappingVisitor.mapExpressions(f, map);
         assertEquals("(SUM(SUM(e1)) + SUM(SUM(e1)))", f.toString()); //$NON-NLS-1$
     }

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestSQLStringVisitor.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestSQLStringVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/sql/visitor/TestSQLStringVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -27,6 +27,8 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.teiid.connector.language.SQLReservedWords;
+
 import junit.framework.TestCase;
 
 import com.metamatrix.common.types.DataTypeManager;
@@ -34,7 +36,6 @@
 import com.metamatrix.query.parser.QueryParser;
 import com.metamatrix.query.resolver.QueryResolver;
 import com.metamatrix.query.sql.LanguageObject;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.lang.BetweenCriteria;
 import com.metamatrix.query.sql.lang.Command;
 import com.metamatrix.query.sql.lang.CompareCriteria;
@@ -1051,37 +1052,37 @@
 	}
 	
 	public void testAggregateSymbol1() {
-		AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.COUNT, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
+		AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.COUNT, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
 		helpTest(agg, "COUNT('abc')"); //$NON-NLS-1$
 	}
 	
 	public void testAggregateSymbol2() {
-		AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.COUNT, true, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
+		AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.COUNT, true, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
 		helpTest(agg, "COUNT(DISTINCT 'abc')"); //$NON-NLS-1$
 	}
 	
 	public void testAggregateSymbol3() {
-		AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.COUNT, false, null); //$NON-NLS-1$
+		AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.COUNT, false, null); //$NON-NLS-1$
 		helpTest(agg, "COUNT(*)"); //$NON-NLS-1$
 	}
 	
 	public void testAggregateSymbol4() {
-		AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.AVG, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
+		AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.AVG, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
 		helpTest(agg, "AVG('abc')"); //$NON-NLS-1$
 	}
 	
 	public void testAggregateSymbol5() {
-		AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.SUM, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
+		AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.SUM, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
 		helpTest(agg, "SUM('abc')"); //$NON-NLS-1$
 	}
 	
 	public void testAggregateSymbol6() {
-		AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.MIN, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
+		AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.MIN, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
 		helpTest(agg, "MIN('abc')"); //$NON-NLS-1$
 	}
 	
 	public void testAggregateSymbol7() {
-		AggregateSymbol agg = new AggregateSymbol("abc", ReservedWords.MAX, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
+		AggregateSymbol agg = new AggregateSymbol("abc", SQLReservedWords.MAX, false, new Constant("abc")); //$NON-NLS-1$ //$NON-NLS-2$
 		helpTest(agg, "MAX('abc')"); //$NON-NLS-1$
 	}
 	

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -1060,34 +1060,6 @@
         helpValidate("EXEC pm1.sq1()", new String[] {}, FakeMetadataFactory.example1Cached()); //$NON-NLS-1$
     }
     
-	// variable declared is of special type INPUT
-    @Test public void testCreateUpdateProcedure1() {
-        String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
-        procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
-        procedure = procedure + "DECLARE integer INPUT;\n"; //$NON-NLS-1$
-        procedure = procedure + "ROWS_UPDATED =0;\n";         //$NON-NLS-1$
-        procedure = procedure + "END\n"; //$NON-NLS-1$
-
-        String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
-        
-		helpFailProcedure(procedure, userUpdateStr,
-									 FakeMetadataObject.Props.UPDATE_PROCEDURE);
-    }
-    
-	// variable declared is of special type CHANGING
-    @Test public void testCreateUpdateProcedure3() {
-        String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$
-        procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
-        procedure = procedure + "DECLARE integer CHANGING;\n"; //$NON-NLS-1$
-        procedure = procedure + "ROWS_UPDATED =0;\n";         //$NON-NLS-1$
-        procedure = procedure + "END\n"; //$NON-NLS-1$
-
-        String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
-        
-		helpFailProcedure(procedure, userUpdateStr,
-									 FakeMetadataObject.Props.UPDATE_PROCEDURE);
-    }
-
 	// valid variable declared
     @Test public void testCreateUpdateProcedure4() {
         String procedure = "CREATE PROCEDURE  "; //$NON-NLS-1$

Modified: branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestAggregateImpl.java
===================================================================
--- branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestAggregateImpl.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestAggregateImpl.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -25,9 +25,9 @@
 import org.teiid.connector.language.AggregateFunction;
 import org.teiid.connector.language.AggregateFunction;
 import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.SQLReservedWords;
 
 import com.metamatrix.common.types.DataTypeManager;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.symbol.AggregateSymbol;
 import com.metamatrix.query.sql.symbol.Constant;
 
@@ -53,23 +53,23 @@
     }
 
     public void testGetName() throws Exception {
-        assertEquals(AggregateFunction.COUNT, example("testName", ReservedWords.COUNT, true, 42).getName()); //$NON-NLS-1$ 
+        assertEquals(AggregateFunction.COUNT, example("testName", SQLReservedWords.COUNT, true, 42).getName()); //$NON-NLS-1$ 
     }
 
     public void testIsDistinct() throws Exception {
-        assertTrue(example("testName", ReservedWords.COUNT, true, 42).isDistinct()); //$NON-NLS-1$
-        assertFalse(example("testName", ReservedWords.COUNT, false, 42).isDistinct()); //$NON-NLS-1$
+        assertTrue(example("testName", SQLReservedWords.COUNT, true, 42).isDistinct()); //$NON-NLS-1$
+        assertFalse(example("testName", SQLReservedWords.COUNT, false, 42).isDistinct()); //$NON-NLS-1$
     }
 
     public void testGetExpression() throws Exception {
-        AggregateFunction agg = example("testName", ReservedWords.COUNT, true, 42); //$NON-NLS-1$
+        AggregateFunction agg = example("testName", SQLReservedWords.COUNT, true, 42); //$NON-NLS-1$
         assertNotNull(agg.getExpression());
         assertTrue(agg.getExpression() instanceof Literal);
         assertEquals(new Integer(42), ((Literal)agg.getExpression()).getValue());
     }
 
     public void testGetType() throws Exception {
-        assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, example("x", ReservedWords.COUNT, true, 42).getType()); //$NON-NLS-1$
+        assertEquals(DataTypeManager.DefaultDataClasses.INTEGER, example("x", SQLReservedWords.COUNT, true, 42).getType()); //$NON-NLS-1$
     }
 
 }

Modified: branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestSearchedCaseExpressionImpl.java
===================================================================
--- branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestSearchedCaseExpressionImpl.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestSearchedCaseExpressionImpl.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -73,19 +73,19 @@
     }
 
     public void testGetThenExpression() throws Exception {
-        assertNotNull(example().getThenExpressions().get(0));
-        assertNotNull(example().getThenExpressions().get(1));
-        assertNotNull(example().getThenExpressions().get(2));
+        assertNotNull(example().getCases().get(0));
+        assertNotNull(example().getCases().get(1));
+        assertNotNull(example().getCases().get(2));
     }
 
     public void testGetWhenCount() throws Exception {
-        assertEquals(3, example().getWhenConditions().size());
+        assertEquals(3, example().getCases().size());
     }
 
     public void testGetWhenCriteria() throws Exception {
-        assertNotNull(example().getWhenConditions().get(0));
-        assertNotNull(example().getWhenConditions().get(1));
-        assertNotNull(example().getWhenConditions().get(2));
+        assertNotNull(example().getCases().get(0));
+        assertNotNull(example().getCases().get(1));
+        assertNotNull(example().getCases().get(2));
     }
 
 }

Modified: branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java
===================================================================
--- branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -48,16 +48,11 @@
     }
 
     public void testFind() throws Exception {
-        String vdbName = "myvdb"; //$NON-NLS-1$
-        int vdbVersion = 1; //$NON-NLS-1$
         String modelName = "model"; //$NON-NLS-1$
         String functionName = "fakeFunction"; //$NON-NLS-1$
         
         BasicSourceCapabilities caps = new BasicSourceCapabilities();
         caps.setFunctionSupport("fakeFunction", true); //$NON-NLS-1$
-        DQPWorkContext workContext = new DQPWorkContext();
-        workContext.setVdbName(vdbName);
-        workContext.setVdbVersion(vdbVersion);
        
         ArrayList<String> bindings = new ArrayList<String>();
         bindings.add(modelName);
@@ -67,7 +62,6 @@
         Mockito.stub(vdb.getModel(modelName)).toReturn(model);
         Mockito.stub(model.getConnectorReference()).toReturn("ref-name");
         Mockito.stub(vdb.getConnectorBindingNames("ref-name")).toReturn(bindings);
-        workContext.setVdb(vdb);
         
         BasicSourceCapabilities basicSourceCapabilities = new BasicSourceCapabilities();
         basicSourceCapabilities.setFunctionSupport(functionName, true);
@@ -77,7 +71,7 @@
         Mockito.stub(cm.getCapabilities()).toReturn(basicSourceCapabilities);
         Mockito.stub(repo.getConnectorManager(modelName)).toReturn(cm);
         
-        CachedFinder finder = new CachedFinder(repo, workContext);
+        CachedFinder finder = new CachedFinder(repo, vdb);
         
         // Test
         SourceCapabilities actual = finder.findCapabilities(modelName);

Modified: branches/JCA/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java
===================================================================
--- branches/JCA/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java	2010-03-02 05:20:24 UTC (rev 1885)
+++ branches/JCA/test-integration/common/src/test/java/org/teiid/connector/visitor/util/TestSQLStringVisitor.java	2010-03-02 14:32:21 UTC (rev 1886)
@@ -40,6 +40,7 @@
 import org.teiid.connector.language.LanguageObject;
 import org.teiid.connector.language.Literal;
 import org.teiid.connector.language.NamedTable;
+import org.teiid.connector.language.SQLReservedWords;
 import org.teiid.connector.language.Select;
 import org.teiid.connector.metadata.runtime.RuntimeMetadata;
 import org.teiid.dqp.internal.datamgr.language.TestAggregateImpl;
@@ -73,7 +74,6 @@
 import com.metamatrix.cdk.unittest.FakeTranslationFactory;
 import com.metamatrix.common.types.DataTypeManager;
 import com.metamatrix.query.metadata.QueryMetadataInterface;
-import com.metamatrix.query.sql.ReservedWords;
 import com.metamatrix.query.sql.lang.CompareCriteria;
 import com.metamatrix.query.sql.lang.JoinType;
 import com.metamatrix.query.unittest.FakeMetadataFacade;
@@ -119,7 +119,7 @@
      */
     @Test public void testVisitIAggregate() throws Exception {
         String expected = "COUNT(42)"; //$NON-NLS-1$
-        assertEquals(expected, getString(TestAggregateImpl.example("COUNT", ReservedWords.COUNT, false, 42))); //$NON-NLS-1$
+        assertEquals(expected, getString(TestAggregateImpl.example("COUNT", SQLReservedWords.COUNT, false, 42))); //$NON-NLS-1$
     }
 
     @Test public void testVisitIAggregateDistinct() throws Exception {



More information about the teiid-commits mailing list