[teiid-commits] teiid SVN: r1918 - in trunk/connectors/connector-jdbc: src and 28 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Fri Mar 5 10:27:15 EST 2010


Author: shawkins
Date: 2010-03-05 10:27:12 -0500 (Fri, 05 Mar 2010)
New Revision: 1918

Added:
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCManagedConnectionFactory.java
   trunk/connectors/connector-jdbc/src/main/rar/
   trunk/connectors/connector-jdbc/src/main/rar/META-INF/
   trunk/connectors/connector-jdbc/src/main/rar/META-INF/ra.xml
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/FakeMetadataFactory.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TranslationHelper.class
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TranslationHelper.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQL5Translator.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.class
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.class
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleTranslator.class
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sqlserver/TestSqlServerConversionVisitor.class
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestExtractFunctionModifier.class
   trunk/connectors/connector-jdbc/src/test/resources/PartsSupplier.vdb
Removed:
   trunk/connectors/connector-jdbc/src/assembly/
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceXAConnection.java
   trunk/connectors/connector-jdbc/src/main/rar/META-INF/
   trunk/connectors/connector-jdbc/src/main/rar/META-INF/ra.xml
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCSourceConnection.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TranslationHelper.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQL5Translator.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java
Modified:
   trunk/connectors/connector-jdbc/pom.xml
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCBaseExecution.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCConnector.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCMetdataProcessor.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCProcedureExecution.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCQueryExecution.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceConnection.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCUpdateExecution.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2SQLTranslator.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbySQLTranslator.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/h2/H2Translator.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/AddDiffModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/HsqlTranslator.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/informix/InformixSQLTranslator.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/BitFunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQL5Translator.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLTranslator.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/DayWeekQuarterFunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/LeftOrRightFunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/Log10FunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/MonthOrDayNameFunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSpatialFunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/LocateFunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerSQLTranslator.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SubstringFunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseSQLTranslator.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/AliasModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ConvertModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/EscapeSyntaxModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/FunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ModFunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/TranslatedCommand.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/Translator.java
   trunk/connectors/connector-jdbc/src/main/resources/org/teiid/connector/jdbc/i18n.properties
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCProcedureExecution.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCUpdateExecution.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/access/TestAccessSQLTranslator.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2ConvertModifier.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2SqlTranslator.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/derby/TestDerbySQLTranslator.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/h2/TestH2Translator.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestDayWeekQuarterFunctionModifier.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLeftOrRightFunctionModifier.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLog10FunctionModifier.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestMonthOrDayNameFunctionModifier.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleConvertModifier.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleTranslator.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestSubstringFunctionModifier.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/postgresql/TestPostgreSQLTranslator.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sqlserver/TestSqlServerConversionVisitor.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseConvertModifier.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseSQLConversionVisitor.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestExtractFunctionModifier.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLocateFunctionModifier.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestModFunctionModifier.java
Log:
TEIID-833 committing JCA merge

Modified: trunk/connectors/connector-jdbc/pom.xml
===================================================================
--- trunk/connectors/connector-jdbc/pom.xml	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/pom.xml	2010-03-05 15:27:12 UTC (rev 1918)
@@ -11,8 +11,9 @@
   <artifactId>connector-jdbc</artifactId>
   <groupId>org.jboss.teiid.connectors</groupId>
   <name>JDBC Connector</name>
-  <description>This project contains connectors for a JDBC source. Currently this is an aggregator for all the JDBC connectors relational databases.</description>
+  <packaging>rar</packaging>
   
+  <description>This project contains connectors for a JDBC source. Currently this is an aggregator for all the JDBC connectors relational databases.</description>
     <dependencies>
         <dependency>
             <groupId>org.jboss.teiid</groupId>
@@ -24,101 +25,29 @@
             <artifactId>teiid-common-core</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+          <groupId>javax.resource</groupId>
+          <artifactId>connector-api</artifactId>
+          <scope>provided</scope>
+        </dependency>       
     </dependencies>
       
-    <!-- This build portion is identical for all the connectors that are deployed; so when making changes make sure
-    it applies to all the connectors. This below block computes the classpath, writes to classpath.properties; it replaces
-    classpath in the xml file, then bundles current project and its dependencies and xml file in a zip for deployment-->
     <build>
-        <plugins>
-            <!-- build class path -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>build-classpath</id>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>build-classpath</goal>
-                        </goals>
-                        <configuration>
-                            <fileSeparator>:</fileSeparator>
-                            <pathSeparator>;</pathSeparator>
-                            <prefix>extensionjar</prefix>
-                            <excludeTransitive>false</excludeTransitive>
-                            <includeScope>runtime</includeScope>
-                            <excludeTypes>pom</excludeTypes>
-                            <outputFile>target/classpath.properties</outputFile>
-                            <regenerateFile>true</regenerateFile>
-                            <outputFilterFile>true</outputFilterFile>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-      
-            <!-- bundles all its dependencies in a single zip file  -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-dependencies</id>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <excludeTransitive>false</excludeTransitive>
-                            <includeScope>runtime</includeScope>
-                            <excludeTypes>pom</excludeTypes>
-                            <includeArtifactIds>${project.artifactId}</includeArtifactIds>
-                            <outputDirectory>target/dependency</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>              
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <version>2.2-beta-2</version>
-                <configuration>
-                    <descriptors>
-                        <descriptor>src/assembly/bundle.xml</descriptor>
-                    </descriptors>
-                    <outputDirectory>target/distribution</outputDirectory>
-                    <workDirectory>target/assembly/work</workDirectory>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>make-assembly</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-        <!-- replaces the classpath tokens in the xml file -->
-        <filters>
-            <filter>target/classpath.properties</filter>
-        </filters>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*.xml</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>false</filtering>
-                <excludes>
-                    <exclude>**/*.xml</exclude>
-                </excludes>
-            </resource>            
-        </resources>
+      <plugins>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <executions>
+            <execution>
+              <id>build_jar</id>
+              <phase>process-classes</phase>
+              <goals>
+                <goal>jar</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+      </plugins>
     </build>
+
     
 </project>
\ No newline at end of file

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCBaseExecution.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCBaseExecution.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCBaseExecution.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -29,21 +29,16 @@
 import java.sql.SQLWarning;
 import java.sql.Statement;
 import java.util.List;
-import java.util.Properties;
 
 import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.api.ConnectorIdentity;
 import org.teiid.connector.api.ConnectorLogger;
-import org.teiid.connector.api.ConnectorPropertyNames;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.basic.BasicExecution;
 import org.teiid.connector.jdbc.translator.TranslatedCommand;
 import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.ICommand;
-import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.Command;
+import org.teiid.connector.language.Literal;
 
-import com.metamatrix.common.util.PropertiesUtils;
-
 /**
  */
 public abstract class JDBCBaseExecution extends BasicExecution  {
@@ -55,11 +50,12 @@
     // Passed to constructor
     protected Connection connection;
     protected Translator sqlTranslator;
-    protected ConnectorIdentity id;
     protected ConnectorLogger logger;
     protected ExecutionContext context;
+    protected JDBCManagedConnectionFactory env;
 
     // Derived from properties
+    protected boolean trimString;
     protected int fetchSize;
     protected int maxResultRows;
 
@@ -70,23 +66,19 @@
     // Constructors
     // ===========================================================================================================================
 
-    protected JDBCBaseExecution(Connection connection,
-                                Translator sqlTranslator,
-                                ConnectorLogger logger,
-                                Properties props,
-                                ExecutionContext context) {
+    protected JDBCBaseExecution(Connection connection, ExecutionContext context, JDBCManagedConnectionFactory env) throws ConnectorException {
         this.connection = connection;
-        this.sqlTranslator = sqlTranslator;
-        this.logger = logger;
+        this.sqlTranslator = env.getExtensionTranslationClass();
+        this.logger = env.getLogger();
         this.context = context;
+        this.env = env;
 
-        fetchSize = PropertiesUtils.getIntProperty(props, JDBCPropertyNames.FETCH_SIZE, 0);
-        if (fetchSize == 0) {
-        	fetchSize = context.getBatchSize();
-        }
-        maxResultRows = PropertiesUtils.getIntProperty(props, ConnectorPropertyNames.MAX_RESULT_ROWS, -1);
+        trimString = env.isTrimStrings();
+        fetchSize = (env.getFetchSize() != -1)?env.getFetchSize():context.getBatchSize();
+        maxResultRows = env.getMaxResultRows();
+      
         //if the connector work needs to throw an excpetion, set the size plus 1
-        if (maxResultRows > 0 && PropertiesUtils.getBooleanProperty(props, ConnectorPropertyNames.EXCEPTION_ON_MAX_ROWS, false)) {
+        if (maxResultRows > 0 && env.isExceptionOnMaxRows()) {
         	maxResultRows++;
         }
         if (maxResultRows > 0) {
@@ -102,7 +94,7 @@
 
         for (int row = 0; row < rowCount; row++) {
 	        for (int i = 0; i< params.size(); i++) {
-	            ILiteral paramValue = (ILiteral)params.get(i);
+	            Literal paramValue = (Literal)params.get(i);
 	            Object value = paramValue.getValue();
 	            if (paramValue.isMultiValued()) {
 	            	value = ((List<?>)value).get(row);
@@ -120,7 +112,7 @@
     // Methods
     // ===========================================================================================================================
 
-    protected TranslatedCommand translateCommand(ICommand command) throws ConnectorException {
+    protected TranslatedCommand translateCommand(Command command) throws ConnectorException {
         TranslatedCommand translatedCommand = new TranslatedCommand(context, sqlTranslator);
         translatedCommand.translateCommand(command);
 

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCConnector.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCConnector.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCConnector.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -22,343 +22,79 @@
 
 package org.teiid.connector.jdbc;
 
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.sql.Driver;
-import java.sql.DriverManager;
 import java.sql.SQLException;
-import java.util.Enumeration;
-import java.util.Properties;
 
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import javax.sql.DataSource;
-import javax.sql.XADataSource;
 
 import org.teiid.connector.api.Connection;
 import org.teiid.connector.api.ConnectorCapabilities;
 import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.ConnectorLogger;
-import org.teiid.connector.api.ConnectorPropertyNames;
-import org.teiid.connector.api.ExecutionContext;
-import org.teiid.connector.api.MappedUserIdentity;
-import org.teiid.connector.api.MetadataProvider;
-import org.teiid.connector.api.SingleIdentity;
-import org.teiid.connector.api.ConnectorAnnotations.ConnectionPooling;
 import org.teiid.connector.basic.BasicConnector;
-import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.metadata.runtime.MetadataFactory;
-import org.teiid.connector.xa.api.TransactionContext;
-import org.teiid.connector.xa.api.XAConnection;
-import org.teiid.connector.xa.api.XAConnector;
 
-import com.metamatrix.common.util.PropertiesUtils;
-import com.metamatrix.core.MetaMatrixCoreException;
-import com.metamatrix.core.util.ReflectionHelper;
+import com.metamatrix.core.util.StringUtil;
 
 /**
  * JDBC implementation of Connector interface.
  */
- at ConnectionPooling
-public class JDBCConnector extends BasicConnector implements XAConnector, MetadataProvider {
+public class JDBCConnector extends BasicConnector {
 	
-	private static final String JNDI = "JNDI:"; //$NON-NLS-1$
-	
-	static final int NO_ISOLATION_LEVEL_SET = Integer.MIN_VALUE;
-
-	enum TransactionIsolationLevel {
-        TRANSACTION_READ_UNCOMMITTED(java.sql.Connection.TRANSACTION_READ_UNCOMMITTED),
-        TRANSACTION_READ_COMMITTED(java.sql.Connection.TRANSACTION_READ_COMMITTED),
-        TRANSACTION_REPEATABLE_READ(java.sql.Connection.TRANSACTION_REPEATABLE_READ),
-        TRANSACTION_SERIALIZABLE(java.sql.Connection.TRANSACTION_SERIALIZABLE),
-        TRANSACTION_NONE(java.sql.Connection.TRANSACTION_NONE);
-
-        private int connectionContant;
-
-        private TransactionIsolationLevel(int connectionConstant) {
-			this.connectionContant = connectionConstant;
-		}
-        
-        public int getConnectionConstant() {
-        	return connectionContant;
-        }
-	}
-	
-	protected ConnectorEnvironment environment;
-    private ConnectorLogger logger;
+	private JDBCManagedConnectionFactory config;
     private ConnectorCapabilities capabilities;
-    private Translator sqlTranslator;
-    private DataSource ds;
-    private XADataSource xaDs;
-    private int transIsoLevel = NO_ISOLATION_LEVEL_SET;
+    
+    
+	@Override
+	public void initialize(ConnectorEnvironment env) throws ConnectorException {
+		super.initialize(env);
+				
+		this.config = (JDBCManagedConnectionFactory)env;
+		
+		ConnectorLogger logger = config.getLogger();
+		
+		logger.logInfo(JDBCPlugin.Util.getString("JDBCConnector.JDBCConnector_initialized._1")); //$NON-NLS-1$
+		
         
-    @Override
-    public void start(ConnectorEnvironment environment)
-    		throws ConnectorException {
-    	super.start(environment);
-    	logger = environment.getLogger();
-        this.environment = environment;
+        // Get the JNDI name for the underlying JDBC source
+        String dataSourceName = this.config.getSourceJNDIName();
         
-        logger.logInfo(JDBCPlugin.Util.getString("JDBCConnector.JDBCConnector_initialized._1")); //$NON-NLS-1$
-        
-        Properties connectionProps = environment.getProperties();
-
-        // Get the JDBC properties ...
-        String dataSourceClassName = connectionProps.getProperty(JDBCPropertyNames.CONNECTION_SOURCE_CLASS);
-        
         // Verify required items
-        if (dataSourceClassName == null || dataSourceClassName.trim().length() == 0) {
-            throw new ConnectorException(JDBCPlugin.Util.getString("JDBCSourceConnectionFactory.Missing_JDBC_driver_class_name_1")); //$NON-NLS-1$
+        if (!StringUtil.isValid(dataSourceName)) {
+            throw new ConnectorException(JDBCPlugin.Util.getString("JDBCSourceConnectionFactory.Missing_JDBC_jndi_1")); //$NON-NLS-1$
         }
-        dataSourceClassName = dataSourceClassName.trim();
-
-        String levelStr = connectionProps.getProperty(JDBCPropertyNames.TRANSACTION_ISOLATION_LEVEL);
         
-        if(levelStr != null && levelStr.trim().length() != 0){
-        	transIsoLevel = TransactionIsolationLevel.valueOf(levelStr.toUpperCase()).getConnectionConstant();
-        }
+        capabilities = config.getExtensionTranslationClass().getConnectorCapabilities();
         
-        try {
-            String className = environment.getProperties().getProperty(JDBCPropertyNames.EXT_TRANSLATOR_CLASS, Translator.class.getName());  
-            this.sqlTranslator = (Translator)ReflectionHelper.create(className, null, Thread.currentThread().getContextClassLoader());
-        } catch (MetaMatrixCoreException e) {
-            throw new ConnectorException(e);
-        }
-        PropertiesUtils.setBeanProperties(sqlTranslator, environment.getProperties(), null);
-        sqlTranslator.initialize(environment);
-        
-        capabilities = sqlTranslator.getConnectorCapabilities();
-        PropertiesUtils.setBeanProperties(capabilities, environment.getProperties(), null);
-        
-        createDataSources(dataSourceClassName, connectionProps);
-        
         logger.logInfo(JDBCPlugin.Util.getString("JDBCConnector.JDBCConnector_started._4")); //$NON-NLS-1$
     }
     
-	@Override
-    public void stop() {     
-		/*
-		 * attempt to deregister drivers that may have been implicitly registered
-		 * with the driver manager
-		 */
-		boolean usingCustomClassLoader = PropertiesUtils.getBooleanProperty(this.environment.getProperties(), ConnectorPropertyNames.USING_CUSTOM_CLASSLOADER, false);
-
-		if (!usingCustomClassLoader) {
-			return;
-		}
-		
-		Enumeration drivers = DriverManager.getDrivers();
-
-        while(drivers.hasMoreElements()){
-        	Driver tempdriver = (Driver)drivers.nextElement();
-            if(tempdriver.getClass().getClassLoader() != Thread.currentThread().getContextClassLoader()) {
-            	continue;
-            }
-            try {
-                DriverManager.deregisterDriver(tempdriver);
-            } catch (Throwable e) {
-                this.environment.getLogger().logError(e.getMessage());
-            }
-        }
-                
-        logger.logInfo(JDBCPlugin.Util.getString("JDBCConnector.JDBCConnector_stopped._3")); //$NON-NLS-1$
-    }
     
 	@Override
-    public Connection getConnection(ExecutionContext context) throws ConnectorException {
+    public Connection getConnection() throws ConnectorException {
 		DataSource dataSource = getDataSource();
-		if (dataSource == null) {
-			return getXAConnection(context, null);
-		}
-		java.sql.Connection conn = null;
-		try { 
-			if (context == null || context.getConnectorIdentity() instanceof SingleIdentity) {
-				conn = dataSource.getConnection();
-			} else if (context.getConnectorIdentity() instanceof MappedUserIdentity) {
-				MappedUserIdentity id = (MappedUserIdentity)context.getConnectorIdentity();
-				conn = dataSource.getConnection(id.getMappedUser(), id.getPassword());
-			}
-			setDefaultTransactionIsolationLevel(conn);
+		try {
+			// TODO: credential mapping facility is now gone. so, no more re-authenticating user.
+			return new JDBCSourceConnection(dataSource.getConnection(), this.config);
 		} catch (SQLException e) {
 			throw new ConnectorException(e);
 		}
-		return createJDBCSourceConnection(conn, this.environment, this.sqlTranslator);
     }
 
-	public Connection createJDBCSourceConnection(java.sql.Connection conn, ConnectorEnvironment env, Translator trans)
-			throws ConnectorException {
-		return new JDBCSourceConnection(conn, env, trans);
-	}
 	
-	@Override
-	public XAConnection getXAConnection(
-			ExecutionContext context,
-			TransactionContext transactionContext) throws ConnectorException {
-		XADataSource xaDataSource = getXADataSource();
-		if (xaDataSource == null) {
-			throw new UnsupportedOperationException(JDBCPlugin.Util.getString("JDBCConnector.non_xa_connection_source")); //$NON-NLS-1$
-		}
-		javax.sql.XAConnection conn = null;
-		try {
-			if (context == null || context.getConnectorIdentity() instanceof SingleIdentity) {
-				conn = xaDataSource.getXAConnection();
-			} else if (context.getConnectorIdentity() instanceof MappedUserIdentity) {
-				MappedUserIdentity id = (MappedUserIdentity)context.getConnectorIdentity();
-				conn = xaDataSource.getXAConnection(id.getMappedUser(), id.getPassword());
-			} else {
-				throw new ConnectorException(JDBCPlugin.Util.getString("JDBCConnector.unsupported_identity_type")); //$NON-NLS-1$
-			}
-			java.sql.Connection c = conn.getConnection();
-			setDefaultTransactionIsolationLevel(c);
-			return createJDBCSourceXAConnection(conn, c, this.environment, this.sqlTranslator);
-		} catch (SQLException e) {
-			throw new ConnectorException(e);
-		}
-	}
-
-	public XAConnection createJDBCSourceXAConnection(
-			javax.sql.XAConnection conn, java.sql.Connection c, ConnectorEnvironment env, Translator trans)
-			throws ConnectorException, SQLException {
-		return new JDBCSourceXAConnection(c, conn, env, trans);
-	}
-
     @Override
 	public ConnectorCapabilities getCapabilities() {
 		return capabilities;
 	}
 	
-    protected void createDataSources(String dataSourceClassName, final Properties connectionProps) throws ConnectorException {
-        // create data source
-        if (dataSourceClassName.startsWith(JNDI)) {
-        	try {
-				InitialContext ic = new InitialContext();
-				this.ds = (DataSource) ic.lookup(dataSourceClassName.substring(JNDI.length()));
-			} catch (NamingException e) {
-				throw new ConnectorException(e,JDBCPlugin.Util.getString("JDBCSourceConnectionFactory.Unable_to_find_jndi_ds", dataSourceClassName.substring(JNDI.length()))); //$NON-NLS-1$
-			}
-        } else {
-	    	Object temp = null;
-	        try {
-	        	temp = ReflectionHelper.create(dataSourceClassName, null, Thread.currentThread().getContextClassLoader());
-	        } catch (MetaMatrixCoreException e) {
-	    		throw new ConnectorException(e,JDBCPlugin.Util.getString("JDBCSourceConnectionFactory.Unable_to_load_the_JDBC_driver_class_6", dataSourceClassName)); //$NON-NLS-1$
-	    	}
-	
-	        final String url = connectionProps.getProperty(JDBCPropertyNames.URL);
-	
-	        if (temp instanceof Driver) {
-	    		final Driver driver = (Driver)temp;
-	    		// check URL if there is one
-	            if (url == null || url.trim().length() == 0) {
-	                throw new ConnectorException(JDBCPlugin.Util.getString("JDBCSourceConnectionFactory.Missing_JDBC_database_name_3")); //$NON-NLS-1$
-	            }
-	            validateURL(driver, url);
-	    		this.ds = (DataSource)Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class[] {DataSource.class}, new InvocationHandler() {
-	    			@Override
-	    			public Object invoke(Object proxy, Method method,
-	    					Object[] args) throws Throwable {
-	    				if (method.getName().equals("getConnection")) { //$NON-NLS-1$
-	    					Properties p = new Properties();
-	    					String user = null;
-	    					String password = null;
-	    					if (args != null && args.length == 2) {
-	    						user = (String)args[0];
-	    						password = (String)args[1];
-	    					} else {
-	    						user = connectionProps.getProperty(JDBCPropertyNames.USERNAME);
-	    						password = connectionProps.getProperty(JDBCPropertyNames.PASSWORD);
-	    					}
-	    					if (user != null) {
-	    						p.put("user", user); //$NON-NLS-1$
-	    					}
-	    					if (password != null) {
-	    						p.put("password", password); //$NON-NLS-1$
-	    					}
-	    					return driver.connect(url, p);
-	    				} 
-	    				throw new UnsupportedOperationException("Driver DataSource proxy only provides Connections"); //$NON-NLS-1$
-	    			}
-	    		});
-	    	} else {
-	    		if (temp instanceof DataSource) {
-		    		this.ds = (DataSource)temp;
-		            PropertiesUtils.setBeanProperties(this.ds, connectionProps, null);
-	    		} else if (temp instanceof XADataSource) {
-	    			this.xaDs = (XADataSource)temp;
-	    	        PropertiesUtils.setBeanProperties(this.xaDs, connectionProps, null);
-	    		} else {
-	    			throw new ConnectorException(JDBCPlugin.Util.getString("JDBCConnector.invalid_source", dataSourceClassName)); //$NON-NLS-1$
-	    		}
-	    	} 
-        }
-    	if (this.ds instanceof XADataSource) {
-    		this.xaDs = (XADataSource)this.ds;
-    	}
-    }
-    
-    public DataSource getDataSource() {
-    	return ds;
-    }
-    
-    public XADataSource getXADataSource() {
-		return xaDs;
-	}
-        
-    private void validateURL(Driver driver, String url) throws ConnectorException {
-        boolean acceptsURL = false;
-        try {
-            acceptsURL = driver.acceptsURL(url);
-        } catch ( SQLException e ) {
-            throw new ConnectorException(e);
-        }
-        if(!acceptsURL ){
-            throw new ConnectorException(JDBCPlugin.Util.getString("JDBCSourceConnectionFactory.Driver__7", driver.getClass().getName(), url)); //$NON-NLS-1$
-        }
-    }
-    
-    public int getDefaultTransactionIsolationLevel() {
-        return this.transIsoLevel;
-    }
-    
-	protected void setDefaultTransactionIsolationLevel(java.sql.Connection sqlConn)
-			throws SQLException {
-		if(getDefaultTransactionIsolationLevel() != NO_ISOLATION_LEVEL_SET && getDefaultTransactionIsolationLevel() != java.sql.Connection.TRANSACTION_NONE){
-		    sqlConn.setTransactionIsolation(getDefaultTransactionIsolationLevel());
-		}
-	}
-	
-	@Override
-	public void getConnectorMetadata(MetadataFactory metadataFactory)
-			throws ConnectorException {
-		java.sql.Connection conn = null;
-		javax.sql.XAConnection xaConn = null;
+    protected DataSource getDataSource() throws ConnectorException {
+    	String dsName = this.config.getSourceJNDIName(); 
 		try {
-			if (ds != null) {
-				conn = ds.getConnection();
-			} else {
-				xaConn = xaDs.getXAConnection();
-				conn = xaConn.getConnection();
-			}
-			JDBCMetdataProcessor metadataProcessor = new JDBCMetdataProcessor(this.logger);
-			PropertiesUtils.setBeanProperties(metadataProcessor, metadataFactory.getImportProperties(), "importer"); //$NON-NLS-1$
-			PropertiesUtils.setBeanProperties(metadataProcessor, this.environment.getProperties(), "importer"); //$NON-NLS-1$
-			metadataProcessor.getConnectorMetadata(conn, metadataFactory);
-		} catch (SQLException e) {
-			throw new ConnectorException(e);
-		} finally {
-			try {
-				if (conn != null) {
-					conn.close();
-				}
-				if (xaConn != null) {
-					xaConn.close();
-				}
-			} catch (SQLException e) {
-				
-			}
+			InitialContext ic = new InitialContext();
+			return (DataSource) ic.lookup(dsName);
+		} catch (NamingException e) {
+			throw new ConnectorException(e,JDBCPlugin.Util.getString("JDBCSourceConnectionFactory.Unable_to_find_jndi_ds", dsName)); //$NON-NLS-1$
 		}
-	}
-        
+    }
 }

Copied: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCManagedConnectionFactory.java (from rev 1900, branches/JCA/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCManagedConnectionFactory.java)
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCManagedConnectionFactory.java	                        (rev 0)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCManagedConnectionFactory.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -0,0 +1,118 @@
+/*
+ * 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.jdbc;
+
+import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.basic.BasicManagedConnectionFactory;
+import org.teiid.connector.jdbc.translator.Translator;
+
+import com.metamatrix.core.MetaMatrixCoreException;
+import com.metamatrix.core.util.ReflectionHelper;
+import com.metamatrix.core.util.StringUtil;
+
+public class JDBCManagedConnectionFactory extends BasicManagedConnectionFactory {
+	
+	private static final long serialVersionUID = -6719853084334318668L;
+	// JDBC connector properties
+	private boolean useBindVariables = false;
+	private String databaseTimeZone;
+	private String extensionTranslationClassName;
+	private String sourceJNDIName;
+	private boolean trimStrings=false;
+	private boolean useCommentsInSourceQuery = false;
+	private int fetchSize = -1;
+		
+	// derived
+	private Translator sqlTranslator;
+	
+	public boolean isUseBindVariables() {
+		return useBindVariables;
+	}
+
+	public String getDatabaseTimeZone() {
+		return databaseTimeZone;
+	}
+
+	public String getExtensionTranslationClassName() {
+		return extensionTranslationClassName;
+	}
+	
+	public Translator getExtensionTranslationClass() throws ConnectorException {
+		if (this.sqlTranslator == null) {
+	        try {
+	        	String className = getExtensionTranslationClassName();
+	        	if (StringUtil.isValid(className)) {
+	        		className = Translator.class.getName();
+	        	}
+	            this.sqlTranslator = (Translator)ReflectionHelper.create(className, null, Thread.currentThread().getContextClassLoader());
+	            sqlTranslator.initialize(this);
+	        } catch (MetaMatrixCoreException e) {
+	            throw new ConnectorException(e);
+			}
+		}
+		return this.sqlTranslator;
+	}	
+
+	public String getSourceJNDIName() {
+		return sourceJNDIName;
+	}
+
+	public boolean isTrimStrings() {
+		return trimStrings;
+	}
+
+	public boolean isUseCommentsInSourceQuery() {
+		return useCommentsInSourceQuery;
+	}
+	
+	public void setUseBindVariables(Boolean arg0) {
+		this.useBindVariables = arg0.booleanValue();
+	}
+	
+	public void setDatabaseTimeZone(String arg0) {
+		this.databaseTimeZone = arg0;
+	}
+	
+	public void setExtensionTranslationClassName(String arg0) {
+		this.extensionTranslationClassName = arg0;
+	}
+	
+	public void setSourceJNDIName(String arg0) {
+		this.sourceJNDIName = arg0;
+	}
+	
+	public void setTrimStrings(Boolean arg0) {
+		this.trimStrings = arg0.booleanValue();
+	}
+
+	public void setUseCommentsInSourceQuery(Boolean arg0) {
+		this.useCommentsInSourceQuery = arg0.booleanValue();
+	}
+	
+	public void setFetchSize(Integer arg0) {
+		this.fetchSize = arg0.intValue();
+	}
+	
+	public int getFetchSize() {
+		return this.fetchSize;
+	}	
+}

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCMetdataProcessor.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCMetdataProcessor.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCMetdataProcessor.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -41,7 +41,7 @@
 import org.teiid.connector.metadata.runtime.BaseColumn;
 import org.teiid.connector.metadata.runtime.Column;
 import org.teiid.connector.metadata.runtime.MetadataFactory;
-import org.teiid.connector.metadata.runtime.ProcedureRecordImpl;
+import org.teiid.connector.metadata.runtime.Procedure;
 import org.teiid.connector.metadata.runtime.Table;
 import org.teiid.connector.metadata.runtime.BaseColumn.NullType;
 import org.teiid.connector.metadata.runtime.ProcedureParameter.Type;
@@ -70,17 +70,16 @@
 		}
 	}
 	
-	private String catalog;
-	private String schemaPattern;
-	private String tableNamePattern;
+	private boolean importProcedures;
+	private boolean importKeys;
+	private boolean importIndexes;
 	private String procedureNamePattern;
+	private boolean useFullSchemaName;	
 	private String[] tableTypes;
-	
-	private boolean useFullSchemaName = true;
-	private boolean importKeys = true;
-	private boolean importIndexes = true;
+	private String tableNamePattern;
+	private String catalog;
+	private String schemaPattern;	
 	private boolean importApproximateIndexes = true;
-	private boolean importProcedures = true;
 	private boolean widenUnsingedTypes = true;
 	private boolean quoteNameInSource = true;
 	//TODO add an option to not fully qualify name in source
@@ -89,6 +88,8 @@
 	private Set<String> unsignedTypes = new HashSet<String>();
 	private String quoteString;
 	
+
+	
 	public JDBCMetdataProcessor(ConnectorLogger logger) {
 		this.logger = logger;
 	}
@@ -140,7 +141,7 @@
 			String procedureSchema = procedures.getString(2);
 			String procedureName = procedures.getString(3);
 			String fullProcedureName = getFullyQualifiedName(procedureCatalog, procedureSchema, procedureName);
-			ProcedureRecordImpl procedure = metadataFactory.addProcedure(useFullSchemaName?fullProcedureName:procedureName);
+			Procedure procedure = metadataFactory.addProcedure(useFullSchemaName?fullProcedureName:procedureName);
 			procedure.setNameInSource(getFullyQualifiedName(procedureCatalog, procedureSchema, procedureName, true));
 			ResultSet columns = metadata.getProcedureColumns(catalog, procedureSchema, procedureName, null);
 			while (columns.next()) {
@@ -204,34 +205,53 @@
 			String remarks = tables.getString(5);
 			table.setAnnotation(remarks);
 			tableMap.put(fullName, new TableInfo(tableCatalog, tableSchema, tableName, table));
-			
-			ResultSet columns = metadata.getColumns(tableCatalog, tableSchema, tableName, null);
-			int rsColumns = columns.getMetaData().getColumnCount();
-			while (columns.next()) {
-				String columnName = columns.getString(4);
-				int type = columns.getInt(5);
-				String typeName = columns.getString(6);
-				type = checkForUnsigned(type, typeName);
-				//note that the resultset is already ordered by position, so we can rely on just adding columns in order
-				Column column = metadataFactory.addColumn(columnName, TypeFacility.getDataTypeNameFromSQLType(type), table);
-				column.setNameInSource(quoteName(columnName));
-				column.setNativeType(columns.getString(6));
-				column.setRadix(columns.getInt(10));
-				column.setNullType(NullType.values()[columns.getShort(11)]);
-				column.setUpdatable(true);
-				column.setAnnotation(columns.getString(12));
-				column.setCharOctetLength(columns.getInt(16));
-				if (rsColumns >= 23) {
-					column.setAutoIncrementable("YES".equalsIgnoreCase(columns.getString(23))); //$NON-NLS-1$
-				}
-			}
-			columns.close();
+			tableMap.put(tableName, new TableInfo(tableCatalog, tableSchema, tableName, table));
 		}
 		tables.close();
 		
+		getColumns(metadataFactory, metadata, tableMap);
 		return tableMap;
 	}
 
+	private void getColumns(MetadataFactory metadataFactory,
+			DatabaseMetaData metadata, Map<String, TableInfo> tableMap)
+			throws SQLException, ConnectorException {
+		logger.logDetail("JDBCMetadataProcessor - Importing columns"); //$NON-NLS-1$
+		ResultSet columns = metadata.getColumns(catalog, schemaPattern, tableNamePattern, null);
+		int rsColumns = columns.getMetaData().getColumnCount();
+		while (columns.next()) {
+			String tableCatalog = columns.getString(1);
+			String tableSchema = columns.getString(2);
+			String tableName = columns.getString(3);
+			String fullTableName = getFullyQualifiedName(tableCatalog, tableSchema, tableName);
+			TableInfo tableInfo = tableMap.get(fullTableName);
+			if (tableInfo == null) {
+				tableInfo = tableMap.get(tableName);
+				if (tableInfo == null) {
+					continue;
+				}
+			}
+			String columnName = columns.getString(4);
+			int type = columns.getInt(5);
+			String typeName = columns.getString(6);
+			type = checkForUnsigned(type, typeName);
+			//note that the resultset is already ordered by position, so we can rely on just adding columns in order
+			Column column = metadataFactory.addColumn(columnName, TypeFacility.getDataTypeNameFromSQLType(type), tableInfo.table);
+			column.setNameInSource(quoteName(columnName));
+			column.setNativeType(columns.getString(6));
+			column.setRadix(columns.getInt(10));
+			column.setNullType(NullType.values()[columns.getShort(11)]);
+			column.setUpdatable(true);
+			String remarks = columns.getString(12);
+			column.setAnnotation(remarks);
+			column.setCharOctetLength(columns.getInt(16));
+			if (rsColumns >= 23) {
+				column.setAutoIncremented("YES".equalsIgnoreCase(columns.getString(23))); //$NON-NLS-1$
+			}
+		}
+		columns.close();
+	}
+	
 	private String quoteName(String name) {
 		if (quoteNameInSource) {
 			return quoteString + StringUtil.replaceAll(name, quoteString, quoteString + quoteString) + quoteString;
@@ -367,13 +387,7 @@
 		return fullName;
 	}
 		
-	public void setCatalog(String catalog) {
-		this.catalog = catalog;
-	}
 
-	public void setSchemaPattern(String schemaPattern) {
-		this.schemaPattern = schemaPattern;
-	}
 
 	public void setTableNamePattern(String tableNamePattern) {
 		this.tableNamePattern = tableNamePattern;
@@ -415,4 +429,13 @@
 		this.quoteNameInSource = quoteIdentifiers;
 	}
 
+	// Importer specific properties
+	public void setCatalog(String catalog) {
+		this.catalog = catalog;
+	}
+
+	public void setSchemaPattern(String schema) {
+		this.schemaPattern = schema;
+	}
+	
 }

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCProcedureExecution.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCProcedureExecution.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCProcedureExecution.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -27,21 +27,15 @@
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Properties;
 
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.api.ConnectorLogger;
 import org.teiid.connector.api.DataNotAvailableException;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.api.ProcedureExecution;
 import org.teiid.connector.jdbc.translator.TranslatedCommand;
-import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.ICommand;
-import org.teiid.connector.language.IParameter;
-import org.teiid.connector.language.IProcedure;
-import org.teiid.connector.language.IParameter.Direction;
-import org.teiid.connector.metadata.runtime.RuntimeMetadata;
+import org.teiid.connector.language.Argument;
+import org.teiid.connector.language.Call;
+import org.teiid.connector.language.Command;
 
 /**
  */
@@ -54,19 +48,13 @@
      * @param props
      * @param id
      */
-    public JDBCProcedureExecution(ICommand command,
-        Connection connection,
-        Translator sqlTranslator,
-        ConnectorLogger logger,
-        Properties props,
-        RuntimeMetadata metadata, ExecutionContext context,
-        ConnectorEnvironment env) {
-        super(command, connection, sqlTranslator, logger, props, context, env);
+	public JDBCProcedureExecution(Command command, Connection connection, ExecutionContext context, JDBCManagedConnectionFactory env) throws ConnectorException {
+        super(command, connection, context, env);
     }
 
     @Override
     public void execute() throws ConnectorException {
-    	IProcedure procedure = (IProcedure)command;
+    	Call procedure = (Call)command;
         columnDataTypes = procedure.getResultSetColumnTypes();
 
         //translate command
@@ -77,7 +65,7 @@
         try{
             //create parameter index map
             CallableStatement cstmt = getCallableStatement(sql);
-            this.results = sqlTranslator.executeStoredProcedure(cstmt, translatedComm);
+            this.results = sqlTranslator.executeStoredProcedure(cstmt, translatedComm, procedure.getReturnType());
             addStatementWarnings();
         }catch(SQLException e){
             throw new ConnectorException(e, JDBCPlugin.Util.getString("JDBCQueryExecution.Error_executing_query__1", sql)); //$NON-NLS-1$
@@ -96,25 +84,21 @@
     @Override
     public List<?> getOutputParameterValues() throws ConnectorException {
         try {
-        	IProcedure proc = (IProcedure)this.command;
+        	Call proc = (Call)this.command;
         	List<Object> result = new ArrayList<Object>();
         	int paramIndex = 1;
-        	for (IParameter parameter : proc.getParameters()) {
-        		if (parameter.getDirection() == Direction.RETURN) {
-                	addParameterValue(result, paramIndex++, parameter);
-                	break;
-        		}
-			}
-        	for (IParameter parameter : proc.getParameters()) {
+        	if (proc.getReturnType() != null) {
+        		addParameterValue(result, paramIndex++, proc.getReturnType());
+        	}
+        	for (Argument parameter : proc.getArguments()) {
         		switch (parameter.getDirection()) {
         		case IN:
         			paramIndex++;
-        		case RETURN:
-        		case RESULT_SET:
-        			continue;
+        			break;
         		case INOUT:
         		case OUT:
-        			addParameterValue(result, paramIndex++, parameter);
+        			addParameterValue(result, paramIndex++, parameter.getType());
+        			break;
         		}
 			}
         	return result;
@@ -124,8 +108,8 @@
     }
 
 	private void addParameterValue(List<Object> result, int paramIndex,
-			IParameter parameter) throws SQLException {
-		Object value = sqlTranslator.retrieveValue((CallableStatement)this.statement, paramIndex, parameter.getType());
+			Class<?> type) throws SQLException {
+		Object value = sqlTranslator.retrieveValue((CallableStatement)this.statement, paramIndex, type);
 		result.add(value);
 	}
     

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCQueryExecution.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCQueryExecution.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCQueryExecution.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -31,18 +31,14 @@
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Properties;
 
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.api.ConnectorLogger;
 import org.teiid.connector.api.DataNotAvailableException;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.api.ResultSetExecution;
 import org.teiid.connector.jdbc.translator.TranslatedCommand;
-import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.ICommand;
-import org.teiid.connector.language.IQueryCommand;
+import org.teiid.connector.language.Command;
+import org.teiid.connector.language.QueryExpression;
 
 
 /**
@@ -55,29 +51,22 @@
     // ===========================================================================================================================
 
     protected ResultSet results;
-    protected ConnectorEnvironment env;
-    protected ICommand command;
+    protected Command command;
     protected Class<?>[] columnDataTypes;
 
     // ===========================================================================================================================
     // Constructors
     // ===========================================================================================================================
 
-    public JDBCQueryExecution(ICommand command, Connection connection,
-                              Translator sqlTranslator,
-                              ConnectorLogger logger,
-                              Properties props,
-                              ExecutionContext context,
-                              ConnectorEnvironment env) {
-        super(connection, sqlTranslator, logger, props, context);
+    public JDBCQueryExecution(Command command, Connection connection, ExecutionContext context, JDBCManagedConnectionFactory env) throws ConnectorException {
+        super(connection, context, env);
         this.command = command;
-        this.env = env;
     }
     
     @Override
     public void execute() throws ConnectorException {
         // get column types
-        columnDataTypes = ((IQueryCommand)command).getColumnTypes();
+        columnDataTypes = ((QueryExpression)command).getColumnTypes();
 
         // translate command
         TranslatedCommand translatedComm = translateCommand(command);
@@ -125,7 +114,7 @@
     /**
      * @see org.teiid.connector.jdbc.JDBCBaseExecution#close()
      */
-    public void close() throws ConnectorException {
+    public synchronized void close() throws ConnectorException {
         // first we would need to close the result set here then we can close
         // the statement, using the base class.
         if (results != null) {

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceConnection.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceConnection.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceConnection.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -24,61 +24,58 @@
  */
 package org.teiid.connector.jdbc;
 
-import java.sql.Connection;
 import java.sql.SQLException;
-import java.sql.Statement;
 
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.api.ConnectorLogger;
 import org.teiid.connector.api.ExecutionContext;
+import org.teiid.connector.api.MetadataProvider;
 import org.teiid.connector.api.ProcedureExecution;
 import org.teiid.connector.api.ResultSetExecution;
 import org.teiid.connector.api.UpdateExecution;
 import org.teiid.connector.basic.BasicConnection;
 import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.ICommand;
-import org.teiid.connector.language.IProcedure;
-import org.teiid.connector.language.IQueryCommand;
+import org.teiid.connector.language.Call;
+import org.teiid.connector.language.Command;
+import org.teiid.connector.language.QueryExpression;
+import org.teiid.connector.metadata.runtime.MetadataFactory;
 import org.teiid.connector.metadata.runtime.RuntimeMetadata;
 
+import com.metamatrix.common.util.PropertiesUtils;
 
+
 /**
  * 
  */
-public class JDBCSourceConnection extends BasicConnection {
+public class JDBCSourceConnection extends BasicConnection implements MetadataProvider{
     protected java.sql.Connection physicalConnection;
-    protected ConnectorEnvironment environment;
-    private ConnectorLogger logger;
+    protected JDBCManagedConnectionFactory environment;
     private Translator sqlTranslator;
 
-    public JDBCSourceConnection(java.sql.Connection connection, ConnectorEnvironment environment, Translator sqlTranslator) throws ConnectorException {
+    public JDBCSourceConnection(java.sql.Connection connection, JDBCManagedConnectionFactory environment) throws ConnectorException {
         this.physicalConnection = connection;
         this.environment = environment;
-        this.logger = environment.getLogger();
-        this.sqlTranslator = sqlTranslator;
+        this.sqlTranslator = environment.getExtensionTranslationClass();
         this.sqlTranslator.afterConnectionCreation(connection);
     }
     
     @Override
-    public ResultSetExecution createResultSetExecution(IQueryCommand command,
-    		ExecutionContext executionContext, RuntimeMetadata metadata)
+    public ResultSetExecution createResultSetExecution(QueryExpression command, ExecutionContext executionContext, RuntimeMetadata metadata)
     		throws ConnectorException {
-    	return new JDBCQueryExecution(command, this.physicalConnection, sqlTranslator, logger, this.environment.getProperties(), executionContext, this.environment);
+    	return new JDBCQueryExecution(command, this.physicalConnection, executionContext, this.environment);
     }
     
     @Override
-    public ProcedureExecution createProcedureExecution(IProcedure command,
+    public ProcedureExecution createProcedureExecution(Call command,
     		ExecutionContext executionContext, RuntimeMetadata metadata)
     		throws ConnectorException {
-    	return new JDBCProcedureExecution(command, this.physicalConnection, sqlTranslator, logger, this.environment.getProperties(), metadata, executionContext, this.environment);
+    	return new JDBCProcedureExecution(command, this.physicalConnection, executionContext, this.environment);
     }
 
     @Override
-    public UpdateExecution createUpdateExecution(ICommand command,
+    public UpdateExecution createUpdateExecution(Command command,
     		ExecutionContext executionContext, RuntimeMetadata metadata)
     		throws ConnectorException {
-    	return new JDBCUpdateExecution(command, this.physicalConnection, sqlTranslator, logger, this.environment.getProperties(), executionContext);    
+    	return new JDBCUpdateExecution(command, this.physicalConnection, executionContext, this.environment);    
     }
     
     @Override
@@ -90,38 +87,18 @@
 		try {
             this.physicalConnection.close();
         } catch(SQLException e) {
-        	logger.logDetail("Exception during close: " + e.getMessage()); //$NON-NLS-1$
+        	environment.getLogger().logDetail("Exception during close: " + e.getMessage()); //$NON-NLS-1$
         }
 	}
 
-    @Override
-    public boolean isAlive() {
-    	Connection connection = this.physicalConnection;
-        Statement statement = null;
-    	try {
-    		int timeout = this.sqlTranslator.getIsValidTimeout();
-    		if (timeout >= 0) {
-    			return connection.isValid(timeout);
-    		}
-            if(connection.isClosed()){
-                return false;
-            } 
-            String connectionTestQuery = sqlTranslator.getConnectionTestQuery();
-            if (connectionTestQuery != null) {
-		        statement = connection.createStatement();
-		        statement.executeQuery(connectionTestQuery);
-            }
-        } catch(SQLException e) {
-        	return false;
-        } finally {
-            if ( statement != null ) {
-                try {
-                    statement.close();
-                } catch ( SQLException e ) {
-                }
-            }
-        }
-        return true;
-    }
-    
+	@Override
+	public void getConnectorMetadata(MetadataFactory metadataFactory) throws ConnectorException {
+		try {
+			JDBCMetdataProcessor metadataProcessor = new JDBCMetdataProcessor(this.environment.getLogger());
+			PropertiesUtils.setBeanProperties(metadataProcessor, metadataFactory.getImportProperties(), "importer"); //$NON-NLS-1$
+			metadataProcessor.getConnectorMetadata(this.physicalConnection, metadataFactory);
+		} catch (SQLException e) {
+			throw new ConnectorException(e);
+		}
+	}	
 }

Deleted: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceXAConnection.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceXAConnection.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCSourceXAConnection.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -1,104 +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.jdbc;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-
-import javax.sql.ConnectionEvent;
-import javax.sql.ConnectionEventListener;
-import javax.transaction.xa.XAResource;
-
-import org.teiid.connector.api.ConnectorEnvironment;
-import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.xa.api.XAConnection;
-
-
-public class JDBCSourceXAConnection extends JDBCSourceConnection implements XAConnection {
-    private javax.sql.XAConnection xaConn;
-    private XAResource resource;
-    private boolean errorOccurred;
-    
-    public JDBCSourceXAConnection(Connection conn, javax.sql.XAConnection xaConn, ConnectorEnvironment environment, Translator sqlTranslator) throws ConnectorException, SQLException {       
-        super(conn, environment, sqlTranslator);
-        this.xaConn = xaConn;
-        this.xaConn.addConnectionEventListener(new ConnectionEventListener() {
-        	@Override
-        	public void connectionClosed(ConnectionEvent event) {
-        		
-        	}
-        	@Override
-        	public void connectionErrorOccurred(ConnectionEvent event) {
-        		errorOccurred = true;
-        	}
-        });
-        this.resource = xaConn.getXAResource();
-    }
-    
-    /**
-     * @see org.teiid.connector.xa.api.XAConnection#getXAResource()
-     */
-    public XAResource getXAResource() throws ConnectorException {
-        return resource;
-    }
-    
-    @Override
-    public void close() {
-        super.close();
-        
-        try {
-			this.xaConn.close();
-		} catch (SQLException e) {
-			this.environment.getLogger().logDetail("Exception while closing: " + e.getMessage()); //$NON-NLS-1$
-		}
-    }
-    
-    /**
-     * XAConnection Connections should be cycled to ensure proper cleanup after the transaction.
-     */
-    @Override
-    public void closeCalled() {
-    	closeSourceConnection();
-    	try {
-			this.physicalConnection = this.xaConn.getConnection();
-		} catch (SQLException e) {
-			this.environment.getLogger().logDetail("Exception while cycling connection: " + e.getMessage()); //$NON-NLS-1$
-		}
-    }
-    
-    @Override
-    public boolean isAlive() {
-    	if (errorOccurred) {
-    		return false;
-    	}
-    	return super.isAlive();
-    }
-    
-    public javax.sql.XAConnection getXAConnection() {
-    	return this.xaConn;
-    }
-    
-}

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCUpdateExecution.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCUpdateExecution.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCUpdateExecution.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -27,26 +27,22 @@
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Properties;
 
 import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.api.ConnectorLogger;
 import org.teiid.connector.api.DataNotAvailableException;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.api.UpdateExecution;
 import org.teiid.connector.jdbc.translator.TranslatedCommand;
-import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.IBatchedUpdates;
-import org.teiid.connector.language.ICommand;
-import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.BatchedUpdates;
+import org.teiid.connector.language.Command;
+import org.teiid.connector.language.Literal;
 
 
 /**
  */
-public class JDBCUpdateExecution extends JDBCBaseExecution implements
-                                                          UpdateExecution {
+public class JDBCUpdateExecution extends JDBCBaseExecution implements UpdateExecution {
 
-	private ICommand command;
+	private Command command;
 	private int[] result;
 	
     /**
@@ -56,12 +52,8 @@
      * @param props
      * @param id
      */
-    public JDBCUpdateExecution(ICommand command, Connection connection,
-                               Translator sqlTranslator,
-                               ConnectorLogger logger,
-                               Properties props,
-                               ExecutionContext context) {
-        super(connection, sqlTranslator, logger, props, context);
+	public JDBCUpdateExecution(Command command, Connection connection, ExecutionContext context, JDBCManagedConnectionFactory env) throws ConnectorException {
+        super(connection, context, env);
         this.command = command;
     }
 
@@ -71,8 +63,8 @@
 
     @Override
     public void execute() throws ConnectorException {
-        if (command instanceof IBatchedUpdates) {
-        	result = execute(((IBatchedUpdates)command));
+        if (command instanceof BatchedUpdates) {
+        	result = execute(((BatchedUpdates)command));
         } else {
             // translate command
             TranslatedCommand translatedComm = translateCommand(command);
@@ -82,14 +74,14 @@
     }
 
     /**
-     * @see com.metamatrix.data.api.BatchedUpdatesExecution#execute(org.teiid.connector.language.ICommand[])
+     * @see com.metamatrix.data.api.BatchedUpdatesExecution#execute(org.teiid.connector.language.Command[])
      * @since 4.2
      */
-    public int[] execute(IBatchedUpdates batchedCommand) throws ConnectorException {
+    public int[] execute(BatchedUpdates batchedCommand) throws ConnectorException {
         boolean succeeded = false;
 
         boolean commitType = getAutoCommit(null);
-        ICommand[] commands = batchedCommand.getUpdateCommands().toArray(new ICommand[batchedCommand.getUpdateCommands().size()]);
+        Command[] commands = batchedCommand.getUpdateCommands().toArray(new Command[batchedCommand.getUpdateCommands().size()]);
         int[] results = new int[commands.length];
 
         TranslatedCommand tCommand = null;
@@ -180,7 +172,7 @@
             	PreparedStatement pstatement = getPreparedStatement(sql);
                 int rowCount = 1;
                 for (int i = 0; i< translatedComm.getPreparedValues().size(); i++) {
-                    ILiteral paramValue = (ILiteral)translatedComm.getPreparedValues().get(i);
+                    Literal paramValue = (Literal)translatedComm.getPreparedValues().get(i);
                     if (paramValue.isMultiValued()) {
                     	rowCount = ((List<?>)paramValue.getValue()).size();
                     	break;
@@ -248,6 +240,7 @@
         	throw new JDBCExecutionException(err, tCommand);
         } finally {
         	try {
+        		connection.commit(); // in JbossAs setAutocommit = true does not trigger the commit.
         		connection.setAutoCommit(true);
         	} catch (SQLException err) {
             	throw new JDBCExecutionException(err, tCommand);

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2SQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2SQLTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2SQLTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -26,26 +26,26 @@
 import java.util.List;
 
 import org.teiid.connector.api.ConnectorCapabilities;
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.api.SourceSystemFunctions;
 import org.teiid.connector.api.TypeFacility;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.AliasModifier;
 import org.teiid.connector.jdbc.translator.ConvertModifier;
 import org.teiid.connector.jdbc.translator.FunctionModifier;
 import org.teiid.connector.jdbc.translator.LocateFunctionModifier;
 import org.teiid.connector.jdbc.translator.ModFunctionModifier;
 import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.IJoin;
-import org.teiid.connector.language.ILanguageObject;
-import org.teiid.connector.language.ILimit;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.language.ISelectSymbol;
-import org.teiid.connector.language.ICompareCriteria.Operator;
-import org.teiid.connector.language.IJoin.JoinType;
+import org.teiid.connector.language.DerivedColumn;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.Join;
+import org.teiid.connector.language.LanguageObject;
+import org.teiid.connector.language.Limit;
+import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.Comparison.Operator;
+import org.teiid.connector.language.Join.JoinType;
 
 public class DB2SQLTranslator extends Translator {
 
@@ -56,10 +56,10 @@
 		}
 
 		@Override
-		public List<?> translate(IFunction function) {
-			IExpression arg = function.getParameters().get(0);
-			if (arg instanceof ILiteral && ((ILiteral)arg).getValue() == null) {
-				((ILiteral)function.getParameters().get(1)).setValue(this.alias);
+		public List<?> translate(Function function) {
+			Expression arg = function.getParameters().get(0);
+			if (arg instanceof Literal && ((Literal)arg).getValue() == null) {
+				((Literal)function.getParameters().get(1)).setValue(this.alias);
 				return null;
 			}
 			return super.translate(function);
@@ -67,7 +67,7 @@
 	}
 
 	@Override
-	public void initialize(ConnectorEnvironment env) throws ConnectorException {
+	public void initialize(JDBCManagedConnectionFactory env) throws ConnectorException {
 		super.initialize(env);
         registerFunctionModifier(SourceSystemFunctions.CHAR, new AliasModifier("chr")); //$NON-NLS-1$ 
         registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new AliasModifier("day")); //$NON-NLS-1$ 
@@ -87,20 +87,20 @@
     	convertModifier.addTypeMapping("clob", FunctionModifier.CLOB, FunctionModifier.XML); //$NON-NLS-1$
     	convertModifier.addConvert(FunctionModifier.TIME, FunctionModifier.TIMESTAMP, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				return Arrays.asList("timestamp('1970-01-01', ", function.getParameters().get(0), ")"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 		});
     	convertModifier.addConvert(FunctionModifier.DATE, FunctionModifier.TIMESTAMP, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				return Arrays.asList("timestamp(",function.getParameters().get(0), ", '00:00:00')"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 		});
     	//the next convert is not strictly necessary for db2, but it also works for derby
     	convertModifier.addConvert(FunctionModifier.STRING, FunctionModifier.FLOAT, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				return Arrays.asList("cast(double(", function.getParameters().get(0), ") as real)"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 		});
@@ -118,26 +118,26 @@
 		
 	@SuppressWarnings("unchecked")
 	@Override
-	public List<?> translateLimit(ILimit limit, ExecutionContext context) {
+	public List<?> translateLimit(Limit limit, ExecutionContext context) {
 		return Arrays.asList("FETCH FIRST ", limit.getRowLimit(), " ROWS ONLY"); //$NON-NLS-1$ //$NON-NLS-2$ 
 	}
 	
 	@Override
-	public List<?> translate(ILanguageObject obj, ExecutionContext context) {
+	public List<?> translate(LanguageObject obj, ExecutionContext context) {
 		//DB2 doesn't support cross join
-		if (obj instanceof IJoin) {
-			IJoin join = (IJoin)obj;
+		if (obj instanceof Join) {
+			Join join = (Join)obj;
 			if (join.getJoinType() == JoinType.CROSS_JOIN) {
-				ILiteral one = getLanguageFactory().createLiteral(1, TypeFacility.RUNTIME_TYPES.INTEGER);
-				join.getCriteria().add(getLanguageFactory().createCompareCriteria(Operator.EQ, one, one));
+				Literal one = getLanguageFactory().createLiteral(1, TypeFacility.RUNTIME_TYPES.INTEGER);
+				join.setCondition(getLanguageFactory().createCompareCriteria(Operator.EQ, one, one));
 				join.setJoinType(JoinType.INNER_JOIN);
 			}
 		}
 		//DB2 needs projected nulls wrapped in casts
-		if (obj instanceof ISelectSymbol) {
-			ISelectSymbol selectSymbol = (ISelectSymbol)obj;
-			if (selectSymbol.getExpression() instanceof ILiteral) {
-				ILiteral literal = (ILiteral)selectSymbol.getExpression();
+		if (obj instanceof DerivedColumn) {
+			DerivedColumn selectSymbol = (DerivedColumn)obj;
+			if (selectSymbol.getExpression() instanceof Literal) {
+				Literal literal = (Literal)selectSymbol.getExpression();
 				if (literal.getValue() == null) {
 					selectSymbol.setExpression(ConvertModifier.createConvertFunction(getLanguageFactory(), literal, TypeFacility.getDataTypeName(literal.getType())));
 				}
@@ -145,13 +145,9 @@
 		}
 		return super.translate(obj, context);
 	}
+
 	
 	@Override
-	public String getDefaultConnectionTestQuery() {
-		return "Select 'x' from sysibm.systables where 1 = 2"; //$NON-NLS-1$
-	}
-	
-	@Override
 	public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
 		return DB2Capabilities.class;
 	}

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbySQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbySQLTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbySQLTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -23,9 +23,9 @@
 package org.teiid.connector.jdbc.derby;
 
 import org.teiid.connector.api.ConnectorCapabilities;
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.db2.DB2SQLTranslator;
 import org.teiid.connector.jdbc.oracle.LeftOrRightFunctionModifier;
 import org.teiid.connector.jdbc.translator.EscapeSyntaxModifier;
@@ -40,7 +40,7 @@
 	private String version = DerbyCapabilities.TEN_1;
 	
 	@Override
-	public void initialize(ConnectorEnvironment env) throws ConnectorException {
+	public void initialize(JDBCManagedConnectionFactory env) throws ConnectorException {
 		super.initialize(env);
 		//additional derby functions
         registerFunctionModifier(SourceSystemFunctions.TIMESTAMPADD, new EscapeSyntaxModifier()); 
@@ -57,11 +57,6 @@
     }
     
     @Override
-    public String getDefaultConnectionTestQuery() {
-    	return "Select 0 from sys.systables where 1 = 2"; //$NON-NLS-1$
-    }
-    
-    @Override
     public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
     	return DerbyCapabilities.class;
     }

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/h2/H2Translator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/h2/H2Translator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/h2/H2Translator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -27,9 +27,9 @@
 import java.sql.Timestamp;
 
 import org.teiid.connector.api.ConnectorCapabilities;
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.hsql.AddDiffModifier;
 import org.teiid.connector.jdbc.oracle.ConcatFunctionModifier;
 import org.teiid.connector.jdbc.translator.AliasModifier;
@@ -41,7 +41,7 @@
 public class H2Translator extends Translator {
 	
 	@Override
-	public void initialize(ConnectorEnvironment env) throws ConnectorException {
+	public void initialize(JDBCManagedConnectionFactory env) throws ConnectorException {
 		super.initialize(env);
 		registerFunctionModifier(SourceSystemFunctions.PARSETIMESTAMP, new AliasModifier("parsedatetime")); //$NON-NLS-1$
 		registerFunctionModifier(SourceSystemFunctions.FORMATTIMESTAMP, new AliasModifier("formatdatetime")); //$NON-NLS-1$

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/AddDiffModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/AddDiffModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/AddDiffModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -30,11 +30,11 @@
 import org.teiid.connector.api.TypeFacility;
 import org.teiid.connector.jdbc.translator.ExtractFunctionModifier;
 import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
+import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.SQLReservedWords;
 
 public class AddDiffModifier extends FunctionModifier {
 
@@ -50,21 +50,21 @@
 	}
 	
 	private boolean add;
-	private ILanguageFactory factory;
+	private LanguageFactory factory;
 
-	public AddDiffModifier(boolean add, ILanguageFactory factory) {
+	public AddDiffModifier(boolean add, LanguageFactory factory) {
 		this.add = add;
 		this.factory = factory;
 	}
 	
 	@Override
-	public List<?> translate(IFunction function) {
+	public List<?> translate(Function function) {
 		if (add) {
 			function.setName("dateadd"); //$NON-NLS-1$
 		} else {
 			function.setName("datediff"); //$NON-NLS-1$
 		}
-		ILiteral intervalType = (ILiteral)function.getParameters().get(0);
+		Literal intervalType = (Literal)function.getParameters().get(0);
 		String interval = ((String)intervalType.getValue()).toUpperCase();
 		String newInterval = INTERVAL_MAP.get(interval);
 		if (newInterval != null) {
@@ -74,15 +74,15 @@
 		if (add) {
 			if (interval.equals(SQLReservedWords.SQL_TSI_FRAC_SECOND)) {
 				intervalType.setValue("MILLISECOND"); //$NON-NLS-1$
-				IExpression[] args = new IExpression[] {function.getParameters().get(1), factory.createLiteral(1000000, TypeFacility.RUNTIME_TYPES.INTEGER)};
+				Expression[] args = new Expression[] {function.getParameters().get(1), factory.createLiteral(1000000, TypeFacility.RUNTIME_TYPES.INTEGER)};
 				function.getParameters().set(1, factory.createFunction("/", args, TypeFacility.RUNTIME_TYPES.INTEGER)); //$NON-NLS-1$
 			} else if (interval.equals(SQLReservedWords.SQL_TSI_QUARTER)) {
 				intervalType.setValue(ExtractFunctionModifier.DAY);
-				IExpression[] args = new IExpression[] {function.getParameters().get(1), factory.createLiteral(91, TypeFacility.RUNTIME_TYPES.INTEGER)};
+				Expression[] args = new Expression[] {function.getParameters().get(1), factory.createLiteral(91, TypeFacility.RUNTIME_TYPES.INTEGER)};
 				function.getParameters().set(1, factory.createFunction("*", args, TypeFacility.RUNTIME_TYPES.INTEGER)); //$NON-NLS-1$
 			} else {
 				intervalType.setValue(ExtractFunctionModifier.DAY);
-				IExpression[] args = new IExpression[] {function.getParameters().get(1), factory.createLiteral(7, TypeFacility.RUNTIME_TYPES.INTEGER)};
+				Expression[] args = new Expression[] {function.getParameters().get(1), factory.createLiteral(7, TypeFacility.RUNTIME_TYPES.INTEGER)};
 				function.getParameters().set(1, factory.createFunction("*", args, TypeFacility.RUNTIME_TYPES.INTEGER)); //$NON-NLS-1$
 			}
 			return null;

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/HsqlTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/HsqlTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/hsql/HsqlTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -27,9 +27,9 @@
 import java.sql.Timestamp;
 
 import org.teiid.connector.api.ConnectorCapabilities;
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.ConvertModifier;
 import org.teiid.connector.jdbc.translator.FunctionModifier;
 import org.teiid.connector.jdbc.translator.Translator;
@@ -37,7 +37,7 @@
 public class HsqlTranslator extends Translator {
 	
 	@Override
-	public void initialize(ConnectorEnvironment env) throws ConnectorException {
+	public void initialize(JDBCManagedConnectionFactory env) throws ConnectorException {
 		super.initialize(env);
 		registerFunctionModifier(SourceSystemFunctions.TIMESTAMPADD, new AddDiffModifier(true, getLanguageFactory()));
 		registerFunctionModifier(SourceSystemFunctions.TIMESTAMPDIFF, new AddDiffModifier(false, getLanguageFactory())); 

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/informix/InformixSQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/informix/InformixSQLTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/informix/InformixSQLTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -25,9 +25,9 @@
 package org.teiid.connector.jdbc.informix;
 
 import org.teiid.connector.api.ConnectorCapabilities;
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.ConvertModifier;
 import org.teiid.connector.jdbc.translator.Translator;
 
@@ -37,17 +37,12 @@
 public class InformixSQLTranslator extends Translator {
 
 	@Override
-	public void initialize(ConnectorEnvironment env) throws ConnectorException {
+	public void initialize(JDBCManagedConnectionFactory env) throws ConnectorException {
 		super.initialize(env);
     	registerFunctionModifier(SourceSystemFunctions.CONVERT, new ConvertModifier());
     }
 	
 	@Override
-	public String getDefaultConnectionTestQuery() {
-		return "select 'x' from informix.sysusers where 1=0"; //$NON-NLS-1$
-	}
-	
-	@Override
 	public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
 		return InformixCapabilities.class;
 	}

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/BitFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/BitFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/BitFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -28,13 +28,13 @@
 import org.teiid.connector.api.TypeFacility;
 import org.teiid.connector.jdbc.translator.AliasModifier;
 import org.teiid.connector.jdbc.translator.ConvertModifier;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
 
 public class BitFunctionModifier extends AliasModifier {
-	private ILanguageFactory langFactory;
+	private LanguageFactory langFactory;
 
-	public BitFunctionModifier(String alias, ILanguageFactory langFactory) {
+	public BitFunctionModifier(String alias, LanguageFactory langFactory) {
 		super(alias);
 		this.langFactory = langFactory;
 	}
@@ -43,7 +43,7 @@
 	 * Wrap the renamed function in a convert back to integer
 	 */
 	@Override
-	public List<?> translate(IFunction function) {
+	public List<?> translate(Function function) {
 		modify(function);
 		return Arrays.asList(ConvertModifier.createConvertFunction(langFactory, function, TypeFacility.RUNTIME_NAMES.INTEGER));
 	}

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQL5Translator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQL5Translator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQL5Translator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -26,21 +26,21 @@
 import java.util.List;
 
 import org.teiid.connector.api.ConnectorCapabilities;
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.IFunction;
+import org.teiid.connector.language.Function;
 
 public class MySQL5Translator extends MySQLTranslator {
 	
 	@Override
-    public void initialize(ConnectorEnvironment env) throws ConnectorException {
+    public void initialize(JDBCManagedConnectionFactory env) throws ConnectorException {
         super.initialize(env);
         registerFunctionModifier(SourceSystemFunctions.CHAR, new FunctionModifier() {
 			
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				return Arrays.asList("char(", function.getParameters().get(0), " USING ASCII)"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 		});

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -32,15 +32,15 @@
 import java.util.List;
 
 import org.teiid.connector.api.ConnectorCapabilities;
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.SourceSystemFunctions;
 import org.teiid.connector.api.TypeFacility;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.ConvertModifier;
 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.IFunction;
+import org.teiid.connector.language.Function;
 
 /** 
  * @since 4.3
@@ -52,7 +52,7 @@
 	 */
 	private final class PadFunctionModifier extends FunctionModifier {
 		@Override
-		public List<?> translate(IFunction function) {
+		public List<?> translate(Function function) {
 			if (function.getParameters().size() == 2) {
 				function.getParameters().add(getLanguageFactory().createLiteral(" ", TypeFacility.RUNTIME_TYPES.STRING)); //$NON-NLS-1$
 			}
@@ -61,7 +61,7 @@
 	}
 
 	@Override
-    public void initialize(ConnectorEnvironment env) throws ConnectorException {
+    public void initialize(JDBCManagedConnectionFactory env) throws ConnectorException {
         super.initialize(env);
         registerFunctionModifier(SourceSystemFunctions.BITAND, new BitFunctionModifier("&", getLanguageFactory())); //$NON-NLS-1$
         registerFunctionModifier(SourceSystemFunctions.BITNOT, new BitFunctionModifier("~", getLanguageFactory())); //$NON-NLS-1$
@@ -87,7 +87,7 @@
     	convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.STRING, new ConvertModifier.FormatModifier("date_format", "%Y-%m-%d %H:%i:%S.%f")); //$NON-NLS-1$ //$NON-NLS-2$
     	convertModifier.addTypeConversion(new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				return Arrays.asList(function.getParameters().get(0), " + 0.0"); //$NON-NLS-1$
 			}
 		}, FunctionModifier.BIGDECIMAL, FunctionModifier.BIGINTEGER, FunctionModifier.FLOAT, FunctionModifier.DOUBLE);

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -29,12 +29,13 @@
 import org.teiid.connector.api.SourceSystemFunctions;
 import org.teiid.connector.api.TypeFacility;
 import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.ICriteria;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.language.ICompoundCriteria.Operator;
+import org.teiid.connector.language.Condition;
+import org.teiid.connector.language.Expression;
+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;
 
 
 
@@ -45,23 +46,22 @@
  * </code>   
  */
 public class ConcatFunctionModifier extends FunctionModifier {
-    private ILanguageFactory langFactory;
+    private LanguageFactory langFactory;
     
     /** 
      * @param langFactory
      */
-    public ConcatFunctionModifier(ILanguageFactory langFactory) {
+    public ConcatFunctionModifier(LanguageFactory langFactory) {
         this.langFactory = langFactory;
     }
     
     @Override
-    public List<?> translate(IFunction function) {
-    	List when = new ArrayList();
-        IExpression a = function.getParameters().get(0);
-        IExpression b = function.getParameters().get(1);
-        List crits = new ArrayList();
+    public List<?> translate(Function function) {
+        Expression a = function.getParameters().get(0);
+        Expression b = function.getParameters().get(1);
+        List<Condition> crits = new ArrayList<Condition>();
         
-        ILiteral nullValue = langFactory.createLiteral(null, TypeFacility.RUNTIME_TYPES.STRING);
+        Literal nullValue = langFactory.createLiteral(null, TypeFacility.RUNTIME_TYPES.STRING);
         if (isNull(a)) {
         	return Arrays.asList(nullValue);
         } else if (!isNotNull(a)) {
@@ -73,27 +73,26 @@
         	crits.add(langFactory.createIsNullCriteria(b, false));
         }
         
-        ICriteria crit = null;
+        Condition crit = null;
         
         if (crits.isEmpty()) {
         	return null;
         } else if (crits.size() == 1) {
-        	crit = (ICriteria)crits.get(0);
+        	crit = crits.get(0);
         } else {
-        	crit = langFactory.createCompoundCriteria(Operator.OR, crits);
-        }
-        when.add(crit);
-        List then = Arrays.asList(new IExpression[] {nullValue}); 
-        return Arrays.asList(langFactory.createSearchedCaseExpression(when, then, function, TypeFacility.RUNTIME_TYPES.STRING));
+        	crit = langFactory.createAndOr(Operator.OR, crits.get(0), crits.get(1));
+        }
+        List<SearchedWhenClause> cases = Arrays.asList(langFactory.createSearchedWhenCondition(crit, nullValue));
+        return Arrays.asList(langFactory.createSearchedCaseExpression(cases, function, TypeFacility.RUNTIME_TYPES.STRING));
     }
     
-    private boolean isNotNull(IExpression expr) {
-    	if (expr instanceof ILiteral) {
-    		ILiteral literal = (ILiteral)expr;
+    private boolean isNotNull(Expression expr) {
+    	if (expr instanceof Literal) {
+    		Literal literal = (Literal)expr;
     		return literal.getValue() != null;
     	}
-    	if (expr instanceof IFunction) {
-    		IFunction function = (IFunction)expr;
+    	if (expr instanceof Function) {
+    		Function function = (Function)expr;
     		if (function.getName().equalsIgnoreCase("NVL") || function.getName().equalsIgnoreCase(SourceSystemFunctions.IFNULL)) { //$NON-NLS-1$
     			return isNotNull(function.getParameters().get(1));
     		}
@@ -101,9 +100,9 @@
     	return false;
     }
     
-    private boolean isNull(IExpression expr) {
-    	if (expr instanceof ILiteral) {
-    		ILiteral literal = (ILiteral)expr;
+    private boolean isNull(Expression expr) {
+    	if (expr instanceof Literal) {
+    		Literal literal = (Literal)expr;
     		return literal.getValue() == null;
     	}
     	return false;

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/DayWeekQuarterFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/DayWeekQuarterFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/DayWeekQuarterFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -26,7 +26,7 @@
 import java.util.List;
 
 import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.IFunction;
+import org.teiid.connector.language.Function;
 
 
 /**
@@ -45,7 +45,7 @@
     }
     
     @Override
-    public List<?> translate(IFunction function) {
+    public List<?> translate(Function function) {
         return Arrays.asList("to_number(TO_CHAR(",function.getParameters().get(0), ", '", format,"'))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$    
     }
 }

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/LeftOrRightFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/LeftOrRightFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/LeftOrRightFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -27,9 +27,9 @@
 
 import org.teiid.connector.api.TypeFacility;
 import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
 
 
 /**
@@ -37,16 +37,16 @@
  * or right(string, count) --> substr(string, -1 * count) - we lack a way to express a unary negation
  */
 public class LeftOrRightFunctionModifier extends FunctionModifier {
-    private ILanguageFactory langFactory;
+    private LanguageFactory langFactory;
     
-    public LeftOrRightFunctionModifier(ILanguageFactory langFactory) {
+    public LeftOrRightFunctionModifier(LanguageFactory langFactory) {
         this.langFactory = langFactory;
     }
     
     @Override
-    public List<?> translate(IFunction function) {
-        List<IExpression> args = function.getParameters();
-        IFunction func = null;
+    public List<?> translate(Function function) {
+        List<Expression> args = function.getParameters();
+        Function func = null;
         
         if (function.getName().equalsIgnoreCase("left")) { //$NON-NLS-1$
             func = langFactory.createFunction("SUBSTR",  //$NON-NLS-1$
@@ -56,7 +56,7 @@
                     args.get(1)),
                     String.class);   
         } else if (function.getName().equalsIgnoreCase("right")) { //$NON-NLS-1$
-            IFunction negIndex = langFactory.createFunction("*",  //$NON-NLS-1$
+            Function negIndex = langFactory.createFunction("*",  //$NON-NLS-1$
                 Arrays.asList(langFactory.createLiteral(Integer.valueOf(-1), TypeFacility.RUNTIME_TYPES.INTEGER), args.get(1)),
                 Integer.class);
                             

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/Log10FunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/Log10FunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/Log10FunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -26,24 +26,24 @@
 
 import org.teiid.connector.api.TypeFacility;
 import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
 
 
 public class Log10FunctionModifier extends FunctionModifier {
     
-    private ILanguageFactory languageFactory;
+    private LanguageFactory languageFactory;
 
-    public Log10FunctionModifier(ILanguageFactory languageFactory) {
+    public Log10FunctionModifier(LanguageFactory languageFactory) {
         this.languageFactory = languageFactory;
     }
 
     @Override
-    public List<?> translate(IFunction function) {
+    public List<?> translate(Function function) {
         function.setName("log"); //$NON-NLS-1$
         
-        List<IExpression> args = function.getParameters();
+        List<Expression> args = function.getParameters();
         args.add(args.get(0));
         args.set(0, languageFactory.createLiteral(new Integer(10), TypeFacility.RUNTIME_TYPES.INTEGER));
         return null;

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/MonthOrDayNameFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/MonthOrDayNameFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/MonthOrDayNameFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -28,9 +28,9 @@
 import org.teiid.connector.api.SourceSystemFunctions;
 import org.teiid.connector.api.TypeFacility;
 import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
 
 
 /**
@@ -38,26 +38,26 @@
  * Format: to_char(timestampvalue/dayvalue, 'Month'/'Day') 
  */
 public class MonthOrDayNameFunctionModifier extends FunctionModifier {
-    private ILanguageFactory langFactory;
+    private LanguageFactory langFactory;
     private String format;
     
-    public MonthOrDayNameFunctionModifier(ILanguageFactory langFactory, String format) {
+    public MonthOrDayNameFunctionModifier(LanguageFactory langFactory, String format) {
         this.langFactory = langFactory;
         this.format = format;
     }
     
     @Override
-    public List<?> translate(IFunction function) {
-        List<IExpression> args = function.getParameters();
+    public List<?> translate(Function function) {
+        List<Expression> args = function.getParameters();
     
-        IFunction func = langFactory.createFunction("TO_CHAR",  //$NON-NLS-1$
+        Function func = langFactory.createFunction("TO_CHAR",  //$NON-NLS-1$
             Arrays.asList( 
                 args.get(0), 
                 langFactory.createLiteral(format, TypeFacility.RUNTIME_TYPES.STRING)),  
             TypeFacility.RUNTIME_TYPES.STRING);
         
         // For some reason, these values have trailing spaces
-        IFunction trimFunc = langFactory.createFunction(SourceSystemFunctions.RTRIM,
+        Function trimFunc = langFactory.createFunction(SourceSystemFunctions.RTRIM,
             Arrays.asList( func ), TypeFacility.RUNTIME_TYPES.STRING);
         
         return Arrays.asList(trimFunc);    

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -36,10 +36,10 @@
 import java.util.List;
 
 import org.teiid.connector.api.ConnectorCapabilities;
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.JDBCPlugin;
 import org.teiid.connector.jdbc.translator.AliasModifier;
 import org.teiid.connector.jdbc.translator.ConvertModifier;
@@ -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.ICommand;
-import org.teiid.connector.language.IElement;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.IGroup;
-import org.teiid.connector.language.IInsert;
-import org.teiid.connector.language.IInsertExpressionValueSource;
-import org.teiid.connector.language.ILimit;
-import org.teiid.connector.language.IQuery;
-import org.teiid.connector.language.IQueryCommand;
-import org.teiid.connector.language.ISelectSymbol;
-import org.teiid.connector.language.ISetQuery.Operation;
-import org.teiid.connector.metadata.runtime.Element;
+import org.teiid.connector.language.ColumnReference;
+import org.teiid.connector.language.Command;
+import org.teiid.connector.language.DerivedColumn;
+import org.teiid.connector.language.ExpressionValueSource;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.Insert;
+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.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 {
 
@@ -78,7 +78,7 @@
     public final static String ROWNUM = "ROWNUM"; //$NON-NLS-1$
     public final static String SEQUENCE = ":SEQUENCE="; //$NON-NLS-1$
 	
-    public void initialize(ConnectorEnvironment env) throws ConnectorException {
+    public void initialize(JDBCManagedConnectionFactory env) throws ConnectorException {
         super.initialize(env);
         registerFunctionModifier(SourceSystemFunctions.CHAR, new AliasModifier("chr")); //$NON-NLS-1$ 
         registerFunctionModifier(SourceSystemFunctions.LCASE, new AliasModifier("lower")); //$NON-NLS-1$ 
@@ -118,13 +118,13 @@
     	convertModifier.addTypeMapping("timestamp", FunctionModifier.TIMESTAMP); //$NON-NLS-1$
     	convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.TIME, new FunctionModifier() {
     		@Override
-    		public List<?> translate(IFunction function) {
+    		public List<?> translate(Function function) {
     			return Arrays.asList("case when ", function.getParameters().get(0), " is null then null else to_date('1970-01-01 ' || to_char(",function.getParameters().get(0),", 'HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') end"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
     		}
     	});
     	convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.DATE, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				return Arrays.asList("trunc(cast(",function.getParameters().get(0)," AS date))"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 		});
@@ -140,7 +140,7 @@
     			FunctionModifier.FLOAT, FunctionModifier.DOUBLE, FunctionModifier.BIGDECIMAL);
     	convertModifier.addTypeConversion(new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				if (Number.class.isAssignableFrom(function.getParameters().get(0).getType())) {
 					return Arrays.asList("trunc(", function.getParameters().get(0), ")"); //$NON-NLS-1$ //$NON-NLS-2$
 				}
@@ -153,24 +153,24 @@
     	registerFunctionModifier(SourceSystemFunctions.CONVERT, convertModifier);
     }
     
-    public void handleInsertSequences(IInsert insert) throws ConnectorException {
+    public void handleInsertSequences(Insert insert) throws ConnectorException {
         /* 
          * If a missing auto_increment column is modeled with name in source indicating that an Oracle Sequence 
          * then pull the Sequence name out of the name in source of the column.
          */
-    	if (!(insert.getValueSource() instanceof IInsertExpressionValueSource)) {
+    	if (!(insert.getValueSource() instanceof ExpressionValueSource)) {
     		return;
     	}
-    	IInsertExpressionValueSource values = (IInsertExpressionValueSource)insert.getValueSource();
-    	List<Element> allElements = insert.getGroup().getMetadataObject().getChildren();
+    	ExpressionValueSource values = (ExpressionValueSource)insert.getValueSource();
+    	List<Column> allElements = insert.getTable().getMetadataObject().getColumns();
     	if (allElements.size() == values.getValues().size()) {
     		return;
     	}
     	
     	int index = 0;
-    	List<IElement> elements = insert.getElements();
+    	List<ColumnReference> elements = insert.getColumns();
     	
-    	for (Element element : allElements) {
+    	for (Column element : allElements) {
     		if (!element.isAutoIncremented()) {
     			continue;
     		}
@@ -193,38 +193,38 @@
     		
             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$
             }
             String sequenceGroupName = sequence.substring(0, delimiterIndex);
             String sequenceElementName = sequence.substring(delimiterIndex + 1);
                 
-            IGroup sequenceGroup = this.getLanguageFactory().createGroup(sequenceGroupName, null, null);
-            IElement sequenceElement = this.getLanguageFactory().createElement(sequenceElementName, sequenceGroup, null, element.getJavaType());
-            insert.getElements().add(index, this.getLanguageFactory().createElement(element.getName(), insert.getGroup(), element, element.getJavaType()));
+            NamedTable sequenceGroup = this.getLanguageFactory().createNamedTable(sequenceGroupName, null, null);
+            ColumnReference sequenceElement = this.getLanguageFactory().createColumnReference(sequenceElementName, sequenceGroup, null, element.getJavaType());
+            insert.getColumns().add(index, this.getLanguageFactory().createColumnReference(element.getName(), insert.getTable(), element, element.getJavaType()));
             values.getValues().add(index, sequenceElement);
 		}
     }
     
     @Override
-    public List<?> translateCommand(ICommand command, ExecutionContext context) {
-    	if (command instanceof IInsert) {
+    public List<?> translateCommand(Command command, ExecutionContext context) {
+    	if (command instanceof Insert) {
     		try {
-				handleInsertSequences((IInsert)command);
+				handleInsertSequences((Insert)command);
 			} catch (ConnectorException e) {
 				throw new RuntimeException(e);
 			}
     	}
     	
-    	if (!(command instanceof IQueryCommand)) {
+    	if (!(command instanceof QueryExpression)) {
     		return null;
     	}
-		IQueryCommand queryCommand = (IQueryCommand)command;
+		QueryExpression queryCommand = (QueryExpression)command;
 		if (queryCommand.getLimit() == null) {
 			return null;
     	}
-		ILimit limit = queryCommand.getLimit();
+		Limit limit = queryCommand.getLimit();
 		queryCommand.setLimit(null);
     	List<Object> parts = new ArrayList<Object>();
     	parts.add("SELECT "); //$NON-NLS-1$
@@ -234,8 +234,8 @@
     	 * we just use the projected names 
     	 */
     	boolean allAliased = true;
-    	for (ISelectSymbol selectSymbol : queryCommand.getProjectedQuery().getSelect().getSelectSymbols()) {
-			if (!selectSymbol.hasAlias()) {
+    	for (DerivedColumn selectSymbol : queryCommand.getProjectedQuery().getDerivedColumns()) {
+			if (selectSymbol.getAlias() == null) {
 				allAliased = false;
 				break;
 			}
@@ -283,7 +283,7 @@
     }
     
     @Override
-    public String getSourceComment(ExecutionContext context, ICommand command) {
+    public String getSourceComment(ExecutionContext context, Command command) {
     	String comment = super.getSourceComment(context, command);
     	
     	if (context != null) {
@@ -297,7 +297,7 @@
 		    }
     	}
     	
-		if (command instanceof IQuery) {
+		if (command instanceof Select) {
 	        //
 	        // This simple algorithm determines the hint which will be added to the
 	        // query.
@@ -305,8 +305,8 @@
 	        // (returned as a collection)
 	        // Then we check if any of those functions are sdo_relate
 	        // If so, the ORDERED hint is added, if not, it isn't
-	        Collection<IFunction> col = CollectorVisitor.collectObjects(IFunction.class, command);
-	        for (IFunction func : col) {
+	        Collection<Function> col = CollectorVisitor.collectObjects(Function.class, command);
+	        for (Function func : col) {
 	            if (func.getName().equalsIgnoreCase(RELATE)) {
 	                return comment + "/*+ ORDERED */ "; //$NON-NLS-1$
 	            }
@@ -329,13 +329,13 @@
         if (useIndex >= 0) {
         	String name = element.substring(0, useIndex);
         	if (group != null) {
-        		return group + SQLReservedWords.DOT + name;
+        		return group + Tokens.DOT + name;
         	}
         	return name;
         }
 
         // Check if the group name should be discarded
-        if((group != null && group.equalsIgnoreCase(DUAL)) || element.equalsIgnoreCase(ROWNUM)) {
+        if((group != null && DUAL.equalsIgnoreCase(group)) || element.equalsIgnoreCase(ROWNUM)) {
             // Strip group if group or element are pseudo-columns
             return element;
         }
@@ -347,13 +347,8 @@
     public boolean hasTimeType() {
     	return false;
     }
-    
+       
     @Override
-    public String getDefaultConnectionTestQuery() {
-    	return "Select 'x' from DUAL"; //$NON-NLS-1$
-    }
-    
-    @Override
     public void bindValue(PreparedStatement stmt, Object param, Class<?> paramType, int i) throws SQLException {
     	if(param == null && Object.class.equals(paramType)){
     		//Oracle drive does not support JAVA_OBJECT type

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSpatialFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSpatialFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSpatialFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -26,9 +26,9 @@
 import java.util.List;
 
 import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.Literal;
 
 
 public class OracleSpatialFunctionModifier extends FunctionModifier {
@@ -37,8 +37,8 @@
      * If either of the first two parameters are a Literal String, then we need to put the literal itself in the SQL
      * to be passed to Oracle, without the tick marks
      */
-    public List<?> translate(IFunction function) {
-        List<IExpression> params = function.getParameters();
+    public List<?> translate(Function function) {
+        List<Expression> params = function.getParameters();
     	List<Object> objs = new ArrayList<Object>();
         objs.add(function.getName());
         objs.add("("); //$NON-NLS-1$
@@ -55,10 +55,10 @@
     }
 	
 	protected void addParamWithConversion(List<Object> objs,
-                                          IExpression expression) {
-		if ((expression instanceof ILiteral) 
-				&& (((ILiteral) expression).getValue() instanceof String)) {
-			objs.add(((ILiteral) expression).getValue());
+                                          Expression expression) {
+		if ((expression instanceof Literal) 
+				&& (((Literal) expression).getValue() instanceof String)) {
+			objs.add(((Literal) expression).getValue());
 		} else {
 			objs.add(expression);
 		}

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/LocateFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/LocateFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/LocateFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -26,32 +26,32 @@
 import java.util.List;
 
 import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
+import org.teiid.connector.language.Literal;
 
 public class LocateFunctionModifier extends org.teiid.connector.jdbc.translator.LocateFunctionModifier {
 	
-	public LocateFunctionModifier(ILanguageFactory factory) {
+	public LocateFunctionModifier(LanguageFactory factory) {
 		super(factory);
 	}
 
 	@Override
-	public List<?> translate(IFunction function) {
+	public List<?> translate(Function function) {
 		modify(function);
 		List<Object> parts = new ArrayList<Object>();
-		List<IExpression> params = function.getParameters();
+		List<Expression> params = function.getParameters();
 		parts.add("position("); //$NON-NLS-1$
 		parts.add(params.get(0));		
 		parts.add(" in "); //$NON-NLS-1$
 		boolean useSubStr = false;
 		if (params.size() == 3) {
 			useSubStr = true;
-			if (params.get(2) instanceof ILiteral && ((ILiteral)params.get(2)).getValue() instanceof Integer) {
-				Integer value = (Integer)((ILiteral)params.get(2)).getValue();
+			if (params.get(2) instanceof Literal && ((Literal)params.get(2)).getValue() instanceof Integer) {
+				Integer value = (Integer)((Literal)params.get(2)).getValue();
 				if (value > 1) {
-					((ILiteral)params.get(2)).setValue(value - 1);
+					((Literal)params.get(2)).setValue(value - 1);
 				} else {
 					useSubStr = false;
 				}
@@ -62,7 +62,7 @@
 			parts.add(this.getLanguageFactory().createFunction("substr", params.subList(1, 3), TypeFacility.RUNTIME_TYPES.STRING)); //$NON-NLS-1$
 			parts.add(")"); //$NON-NLS-1$
 			parts.add(" + "); //$NON-NLS-1$
-			if (params.get(2) instanceof ILiteral && ((ILiteral)params.get(2)).getValue() instanceof Integer) {
+			if (params.get(2) instanceof Literal && ((Literal)params.get(2)).getValue() instanceof Integer) {
 				parts.add(params.get(2));
 			} else {
 				parts.add(params.get(2));

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -29,11 +29,11 @@
 import java.util.List;
 
 import org.teiid.connector.api.ConnectorCapabilities;
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.api.SourceSystemFunctions;
 import org.teiid.connector.api.TypeFacility;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.oracle.LeftOrRightFunctionModifier;
 import org.teiid.connector.jdbc.oracle.MonthOrDayNameFunctionModifier;
 import org.teiid.connector.jdbc.translator.AliasModifier;
@@ -43,13 +43,13 @@
 import org.teiid.connector.jdbc.translator.FunctionModifier;
 import org.teiid.connector.jdbc.translator.ModFunctionModifier;
 import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.IAggregate;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageObject;
-import org.teiid.connector.language.ILimit;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.AggregateFunction;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageObject;
+import org.teiid.connector.language.Limit;
+import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.SQLReservedWords;
 
 
 
@@ -61,7 +61,7 @@
 	
 	private String version = PostgreSQLCapabilities.EIGHT_0;
 
-    public void initialize(ConnectorEnvironment env) throws ConnectorException {
+    public void initialize(JDBCManagedConnectionFactory env) throws ConnectorException {
         //TODO: all of the functions (except for convert) can be handled through just the escape syntax
         super.initialize(env);
         registerFunctionModifier(SourceSystemFunctions.LOG, new AliasModifier("ln")); //$NON-NLS-1$ 
@@ -118,13 +118,13 @@
     	convertModifier.addTypeMapping("timestamp", FunctionModifier.TIMESTAMP); //$NON-NLS-1$
     	convertModifier.addConvert(FunctionModifier.TIME, FunctionModifier.TIMESTAMP, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				return Arrays.asList(function.getParameters().get(0), " + TIMESTAMP '1970-01-01'"); //$NON-NLS-1$
 			}
 		});
     	convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.TIME, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				return Arrays.asList("cast(date_trunc('second', ", function.getParameters().get(0), ") AS time)"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 		});
@@ -133,15 +133,15 @@
     	convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.STRING, new ConvertModifier.FormatModifier("to_char", "YYYY-MM-DD HH24:MI:SS.UF")); //$NON-NLS-1$ //$NON-NLS-2$
     	convertModifier.addConvert(FunctionModifier.BOOLEAN, FunctionModifier.STRING, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
-				IExpression stringValue = function.getParameters().get(0);
+			public List<?> translate(Function function) {
+				Expression stringValue = function.getParameters().get(0);
 				return Arrays.asList("CASE WHEN ", stringValue, " THEN 'true' WHEN not(", stringValue, ") THEN 'false' END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 		});
     	convertModifier.addSourceConversion(new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
-				((ILiteral)function.getParameters().get(1)).setValue("integer"); //$NON-NLS-1$
+			public List<?> translate(Function function) {
+				((Literal)function.getParameters().get(1)).setValue("integer"); //$NON-NLS-1$
 				return null;
 			}
 		}, FunctionModifier.BOOLEAN);
@@ -178,7 +178,7 @@
     
     @SuppressWarnings("unchecked")
 	@Override
-    public List<?> translateLimit(ILimit limit, ExecutionContext context) {
+    public List<?> translateLimit(Limit limit, ExecutionContext context) {
     	if (limit.getRowOffset() > 0) {
     		return Arrays.asList("LIMIT ", limit.getRowLimit(), " OFFSET ", limit.getRowOffset()); //$NON-NLS-1$ //$NON-NLS-2$ 
     	}
@@ -188,13 +188,13 @@
     /**
      * Postgres doesn't provide min/max(boolean), so this conversion writes a min(BooleanValue) as 
      * bool_and(BooleanValue)
-     * @see org.teiid.connector.visitor.framework.LanguageObjectVisitor#visit(org.teiid.connector.language.IAggregate)
+     * @see org.teiid.connector.visitor.framework.LanguageObjectVisitor#visit(org.teiid.connector.language.AggregateFunction)
      * @since 4.3
      */
     @Override
-    public List<?> translate(ILanguageObject obj, ExecutionContext context) {
-    	if (obj instanceof IAggregate) {
-    		IAggregate agg = (IAggregate)obj;
+    public List<?> translate(LanguageObject obj, ExecutionContext context) {
+    	if (obj instanceof AggregateFunction) {
+    		AggregateFunction agg = (AggregateFunction)obj;
     		if (TypeFacility.RUNTIME_TYPES.BOOLEAN.equals(agg.getExpression().getType())) {
             	if (agg.getName().equalsIgnoreCase(SQLReservedWords.MIN)) {
             		agg.setName("bool_and"); //$NON-NLS-1$

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerSQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerSQLTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerSQLTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -28,16 +28,13 @@
 import java.util.List;
 
 import org.teiid.connector.api.ConnectorCapabilities;
-import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.api.TypeFacility;
 import org.teiid.connector.jdbc.sybase.SybaseSQLTranslator;
-import org.teiid.connector.language.IElement;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageObject;
+import org.teiid.connector.language.ColumnReference;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageObject;
 
-import com.metamatrix.core.MetaMatrixRuntimeException;
-
 /**
  * Updated to assume the use of the DataDirect, 2005 driver, or later.
  */
@@ -46,12 +43,12 @@
 	//TEIID-31 remove mod modifier for SQL Server 2008
 	
 	@Override
-	protected List<Object> convertDateToString(IFunction function) {
+	protected List<Object> convertDateToString(Function function) {
 		return Arrays.asList("replace(convert(varchar, ", function.getParameters().get(0), ", 102), '.', '-')"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
     
 	@Override
-	protected List<?> convertTimestampToString(IFunction function) {
+	protected List<?> convertTimestampToString(Function function) {
 		return Arrays.asList("convert(varchar, ", function.getParameters().get(0), ", 21)"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 	
@@ -61,15 +58,11 @@
     }
     
     @Override
-    public List<?> translate(ILanguageObject obj, ExecutionContext context) {
-    	if (obj instanceof IElement) {
-    		IElement elem = (IElement)obj;
-    		try {
-				if (TypeFacility.RUNTIME_TYPES.STRING.equals(elem.getType()) && elem.getMetadataObject() != null && "uniqueidentifier".equalsIgnoreCase(elem.getMetadataObject().getNativeType())) { //$NON-NLS-1$
-					return Arrays.asList("cast(", elem, " as char(36))"); //$NON-NLS-1$ //$NON-NLS-2$
-				}
-			} catch (ConnectorException e) {
-				throw new MetaMatrixRuntimeException(e);
+    public List<?> translate(LanguageObject obj, ExecutionContext context) {
+    	if (obj instanceof ColumnReference) {
+    		ColumnReference elem = (ColumnReference)obj;
+			if (TypeFacility.RUNTIME_TYPES.STRING.equals(elem.getType()) && elem.getMetadataObject() != null && "uniqueidentifier".equalsIgnoreCase(elem.getMetadataObject().getNativeType())) { //$NON-NLS-1$
+				return Arrays.asList("cast(", elem, " as char(36))"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
     	}
     	return super.translate(obj, context);

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SubstringFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SubstringFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SubstringFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -28,9 +28,9 @@
 import org.teiid.connector.api.SourceSystemFunctions;
 import org.teiid.connector.api.TypeFacility;
 import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
 
 
 /**
@@ -38,15 +38,15 @@
  */
 public class SubstringFunctionModifier extends FunctionModifier {
 
-    private ILanguageFactory languageFactory;
+    private LanguageFactory languageFactory;
     
-    public SubstringFunctionModifier(ILanguageFactory languageFactory) {
+    public SubstringFunctionModifier(LanguageFactory languageFactory) {
     	this.languageFactory = languageFactory; 
     }
 
     @Override
-    public List<?> translate(IFunction function) {
-        List<IExpression> args = function.getParameters();
+    public List<?> translate(Function function) {
+        List<Expression> args = function.getParameters();
         
         if(args.size() == 2) {
             args.add(languageFactory.createFunction(SourceSystemFunctions.LENGTH, Arrays.asList(args.get(0)), TypeFacility.RUNTIME_TYPES.INTEGER)); 

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseSQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseSQLTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseSQLTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -29,21 +29,21 @@
 import java.util.List;
 
 import org.teiid.connector.api.ConnectorCapabilities;
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.AliasModifier;
 import org.teiid.connector.jdbc.translator.ConvertModifier;
 import org.teiid.connector.jdbc.translator.EscapeSyntaxModifier;
 import org.teiid.connector.jdbc.translator.FunctionModifier;
 import org.teiid.connector.jdbc.translator.ModFunctionModifier;
 import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.ICommand;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILimit;
-import org.teiid.connector.language.IOrderBy;
-import org.teiid.connector.language.ISetQuery;
+import org.teiid.connector.language.Command;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.Limit;
+import org.teiid.connector.language.OrderBy;
+import org.teiid.connector.language.SetQuery;
 
 
 /**
@@ -53,7 +53,7 @@
     /* 
      * @see com.metamatrix.connector.jdbc.extension.SQLTranslator#initialize(com.metamatrix.data.api.ConnectorEnvironment, com.metamatrix.data.metadata.runtime.RuntimeMetadata)
      */
-    public void initialize(ConnectorEnvironment env) throws ConnectorException {
+    public void initialize(JDBCManagedConnectionFactory env) throws ConnectorException {
         super.initialize(env);
         registerFunctionModifier(SourceSystemFunctions.MOD, new ModFunctionModifier("%", getLanguageFactory())); //$NON-NLS-1$ 
         registerFunctionModifier(SourceSystemFunctions.CONCAT, new AliasModifier("+")); //$NON-NLS-1$ 
@@ -93,7 +93,7 @@
     	convertModifier.addTypeMapping("datetime", FunctionModifier.DATE, FunctionModifier.TIME, FunctionModifier.TIMESTAMP); //$NON-NLS-1$
     	convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.TIME, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				List<Object> result = new ArrayList<Object>();
 				result.add("cast("); //$NON-NLS-1$
 				result.add("'1970-01-01 ' + "); //$NON-NLS-1$
@@ -104,7 +104,7 @@
 		});
     	convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.DATE, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				List<Object> result = new ArrayList<Object>();
 				result.add("cast("); //$NON-NLS-1$
 				result.addAll(convertDateToString(function));
@@ -114,19 +114,19 @@
 		});
     	convertModifier.addConvert(FunctionModifier.TIME, FunctionModifier.STRING, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				return convertTimeToString(function);
 			}
 		}); 
     	convertModifier.addConvert(FunctionModifier.DATE, FunctionModifier.STRING, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				return convertDateToString(function);
 			}
 		});
     	convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.STRING, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
+			public List<?> translate(Function function) {
 				return convertTimestampToString(function);
 			}
 		});
@@ -134,11 +134,11 @@
     	registerFunctionModifier(SourceSystemFunctions.CONVERT, convertModifier);
     }
     
-	private List<Object> convertTimeToString(IFunction function) {
+	private List<Object> convertTimeToString(Function function) {
 		return Arrays.asList("convert(varchar, ", function.getParameters().get(0), ", 8)"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
     
-    protected List<Object> convertDateToString(IFunction function) {
+    protected List<Object> convertDateToString(Function function) {
 		return Arrays.asList("stuff(stuff(convert(varchar, ", function.getParameters().get(0), ", 102), 5, 1, '-'), 8, 1, '-')"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
     
@@ -147,7 +147,7 @@
      * @param function
      * @return
      */
-	protected List<?> convertTimestampToString(IFunction function) {
+	protected List<?> convertTimestampToString(Function function) {
 		return Arrays.asList("stuff(convert(varchar, ", function.getParameters().get(0), ", 123), 11, 1, ' ')"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
     
@@ -170,16 +170,16 @@
      * SetQueries don't have a concept of TOP, an inline view is needed.
      */
     @Override
-    public List<?> translateCommand(ICommand command, ExecutionContext context) {
-    	if (!(command instanceof ISetQuery)) {
+    public List<?> translateCommand(Command command, ExecutionContext context) {
+    	if (!(command instanceof SetQuery)) {
     		return null;
     	}
-    	ISetQuery queryCommand = (ISetQuery)command;
+    	SetQuery queryCommand = (SetQuery)command;
 		if (queryCommand.getLimit() == null) {
 			return null;
     	}
-		ILimit limit = queryCommand.getLimit();
-		IOrderBy orderBy = queryCommand.getOrderBy();
+		Limit limit = queryCommand.getLimit();
+		OrderBy orderBy = queryCommand.getOrderBy();
 		queryCommand.setLimit(null);
 		queryCommand.setOrderBy(null);
 		List<Object> parts = new ArrayList<Object>(6);
@@ -197,7 +197,7 @@
     
     @SuppressWarnings("unchecked")
 	@Override
-    public List<?> translateLimit(ILimit limit, ExecutionContext context) {
+    public List<?> translateLimit(Limit limit, ExecutionContext context) {
     	return Arrays.asList("TOP ", limit.getRowLimit()); //$NON-NLS-1$
     }
     

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/AliasModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/AliasModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/AliasModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -39,12 +39,12 @@
     }
     
     @Override
-    public List<?> translate(IFunction function) {
+    public List<?> translate(Function function) {
     	modify(function);
     	return null;
     }
 
-	protected void modify(IFunction function) {
+	protected void modify(Function function) {
 		function.setName(alias);
 	}
     

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ConvertModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ConvertModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -29,10 +29,10 @@
 
 import org.teiid.connector.api.SourceSystemFunctions;
 import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
+import org.teiid.connector.language.Literal;
 
 /**
  * Base class for handling the convert function.
@@ -68,12 +68,12 @@
 		}
 
 		@Override
-		public List<?> translate(IFunction function) {
+		public List<?> translate(Function function) {
 			modify(function);
 			if (format == null) {
 				function.getParameters().remove(1);
 			} else {
-				((ILiteral)function.getParameters().get(1)).setValue(format);
+				((Literal)function.getParameters().get(1)).setValue(format);
 			}
 			return null;
 		}
@@ -114,10 +114,10 @@
     }
     
     @Override
-    public List<?> translate(IFunction function) {
+    public List<?> translate(Function function) {
     	function.setName("cast"); //$NON-NLS-1$
     	int targetCode = getCode(function.getType());
-    	List<IExpression> args = function.getParameters();
+    	List<Expression> args = function.getParameters();
         Class<?> srcType = args.get(0).getType();
         int sourceCode = getCode(srcType);
         
@@ -154,7 +154,7 @@
 	    	
 	    	if (type != null 
 	    			&& (!type.equals(typeMapping.get(sourceCode)) || sourceCode == targetCode)) { //checks for implicit, but allows for dummy converts 
-	    		((ILiteral)function.getParameters().get(1)).setValue(type);
+	    		((Literal)function.getParameters().get(1)).setValue(type);
 	    		return null;
 	    	}
 		}
@@ -162,10 +162,10 @@
     	return Arrays.asList(function.getParameters().get(0));
 	}
 
-	public static IFunction createConvertFunction(ILanguageFactory langFactory, IExpression expr, String typeName) {
+	public static Function createConvertFunction(LanguageFactory langFactory, Expression expr, String typeName) {
 		Class<?> type = TypeFacility.getDataTypeClass(typeName);
 		return langFactory.createFunction(SourceSystemFunctions.CONVERT, 
-				new IExpression[] {expr, langFactory.createLiteral(typeName, type)}, type);
+				new Expression[] {expr, langFactory.createLiteral(typeName, type)}, type);
 	}
 	
 	public void addNumericBooleanConversions() {
@@ -173,17 +173,17 @@
 		//number -> boolean
 		this.addTypeConversion(new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
-				IExpression stringValue = function.getParameters().get(0);
+			public List<?> translate(Function function) {
+				Expression stringValue = function.getParameters().get(0);
 				return Arrays.asList("CASE WHEN ", stringValue, " = 0 THEN 0 WHEN ", stringValue, " IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 		}, FunctionModifier.BOOLEAN);
 		this.addConvert(FunctionModifier.BOOLEAN, FunctionModifier.STRING, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
-				IExpression booleanValue = function.getParameters().get(0);
-				if (booleanValue instanceof IFunction) {
-					IFunction nested = (IFunction)booleanValue;
+			public List<?> translate(Function function) {
+				Expression booleanValue = function.getParameters().get(0);
+				if (booleanValue instanceof Function) {
+					Function nested = (Function)booleanValue;
 					if (nested.getName().equalsIgnoreCase("convert") && Number.class.isAssignableFrom(nested.getParameters().get(0).getType())) { //$NON-NLS-1$
 						booleanValue = nested.getParameters().get(0);
 					}
@@ -193,8 +193,8 @@
 		});
     	this.addConvert(FunctionModifier.STRING, FunctionModifier.BOOLEAN, new FunctionModifier() {
 			@Override
-			public List<?> translate(IFunction function) {
-				IExpression stringValue = function.getParameters().get(0);
+			public List<?> translate(Function function) {
+				Expression stringValue = function.getParameters().get(0);
 				return Arrays.asList("CASE WHEN ", stringValue, " IN ('false', '0') THEN 0 WHEN ", stringValue, " IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
 		});

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/EscapeSyntaxModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/EscapeSyntaxModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/EscapeSyntaxModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -25,7 +25,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.teiid.connector.language.IFunction;
+import org.teiid.connector.language.Function;
 
 
 /**
@@ -36,10 +36,10 @@
 public class EscapeSyntaxModifier extends FunctionModifier {
 
     /** 
-     * @see org.teiid.connector.jdbc.translator.BasicFunctionModifier#translate(org.teiid.connector.language.IFunction)
+     * @see org.teiid.connector.jdbc.translator.BasicFunctionModifier#translate(org.teiid.connector.language.Function)
      * @since 5.0
      */
-    public List<?> translate(IFunction function) {
+    public List<?> translate(Function function) {
     	List<Object> objs = new ArrayList<Object>();
         objs.add("{fn "); //$NON-NLS-1$
         objs.add(function);

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -28,9 +28,10 @@
 import java.util.Map;
 
 import org.teiid.connector.api.SourceSystemFunctions;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.SQLReservedWords;
+import org.teiid.connector.language.SQLReservedWords.Tokens;
 
 
 /**
@@ -68,18 +69,18 @@
     public ExtractFunctionModifier() {
     }
     
-    public List<?> translate(IFunction function) {
-        List<IExpression> args = function.getParameters();
+    public List<?> translate(Function function) {
+        List<Expression> args = function.getParameters();
         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: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/FunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/FunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/FunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -29,8 +29,8 @@
 import java.util.Map;
 
 import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageObject;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageObject;
 
 
 /**
@@ -90,13 +90,13 @@
     }
     
     /**
-     * Return a List of translated parts ({@link ILanguageObject}s and Objects), or null
+     * Return a List of translated parts ({@link LanguageObject}s and Objects), or null
      * if this FunctionModifier wishes to rely on the default translation of the
      * conversion visitor. 
      * @param function IFunction to be translated
      * @return List of translated parts, or null
      * @since 4.2
      */
-    public abstract List<?> translate(IFunction function);
+    public abstract List<?> translate(Function function);
     
 }

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -25,12 +25,13 @@
 import java.util.Arrays;
 import java.util.List;
 
-import org.teiid.connector.language.ICompareCriteria;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.language.ICompareCriteria.Operator;
+import org.teiid.connector.api.TypeFacility;
+import org.teiid.connector.language.Comparison;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
+import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.Comparison.Operator;
 
 
 /**
@@ -73,7 +74,7 @@
 
 	public static String LOCATE = "LOCATE"; //$NON-NLS-1$
 	
-    private ILanguageFactory langFactory;
+    private LanguageFactory langFactory;
     private boolean sourceStringFirst;
     
 	/**
@@ -83,7 +84,7 @@
 	 * 
 	 * @param langFactory the language factory associated with translation
 	 */
-    public LocateFunctionModifier(ILanguageFactory langFactory) {
+    public LocateFunctionModifier(LanguageFactory langFactory) {
     	this(langFactory, LOCATE, false);
     }
 
@@ -96,7 +97,7 @@
 	 * @param functionName the function name or alias to be used instead of LOCATE
 	 * @param sourceStringFirst
 	 */
-    public LocateFunctionModifier(ILanguageFactory langFactory, final String functionName, boolean sourceStringFirst) {
+    public LocateFunctionModifier(LanguageFactory langFactory, final String functionName, boolean sourceStringFirst) {
     	super(functionName);
     	this.langFactory = langFactory;
     	this.sourceStringFirst = sourceStringFirst;
@@ -113,14 +114,14 @@
 	 * and <code>startIndex</code> is a literal value, it is translated for 
 	 * consistency between the built-in system function 
 	 * <code>LOCATE(searchStr, sourceStr, startIndex)</code> and the sources 
-	 * implementation.  This is done by calling {@link #getStartIndexExpression(ILiteral)} 
+	 * implementation.  This is done by calling {@link #getStartIndexExpression(Literal)} 
 	 * and passing it the literal <code>startIndex</code> value.
 	 * <p>
 	 * If <code>function</code> represents <code>LOCATE(searchStr, sourceStr, startIndex)</code>
 	 * and <code>startIndex</code> is not a literal value, it is translated for 
 	 * consistency between the built-in system function 
 	 * <code>LOCATE(searchStr, sourceStr, startIndex)</code> and the sources 
-	 * implementation.  This is done by calling {@link #getStartIndexExpression(IExpression)} 
+	 * implementation.  This is done by calling {@link #getStartIndexExpression(Expression)} 
 	 * and passing it the non-literal <code>startIndex</code> value.
 	 * <p>
 	 * Finally, <code>function</code>'s parameters may be rearranged depending 
@@ -141,11 +142,11 @@
 	 * 
 	 * @param function the LOCATE function that may need to be modified
 	 */
-    public void modify(IFunction function) {
+    public void modify(Function function) {
     	super.modify(function);
-        List<IExpression> args = function.getParameters();
-        IExpression searchStr = args.get(0);
-        IExpression sourceStr = args.get(1);
+        List<Expression> args = function.getParameters();
+        Expression searchStr = args.get(0);
+        Expression sourceStr = args.get(1);
 
         // if startIndex was given then we may need to do additional work
         if (args.size() > 2) {
@@ -157,30 +158,30 @@
         }
     }
 
-	private IExpression ensurePositiveStartIndex(IExpression startIndex) {
-		if (startIndex instanceof ILiteral) {
-			ILiteral literal = (ILiteral)startIndex;  
+	private Expression ensurePositiveStartIndex(Expression startIndex) {
+		if (startIndex instanceof Literal) {
+			Literal literal = (Literal)startIndex;  
 			if (literal.getValue() instanceof Integer && ((Integer)literal.getValue() < 1)) {
 				literal.setValue(1);
 			}
 		} else {
-			ICompareCriteria[] whenExpr = {langFactory.createCompareCriteria(
+			Comparison whenExpr = langFactory.createCompareCriteria(
 					Operator.LT, 
 					startIndex, 
 					langFactory.createLiteral(1, Integer.class)
-				)};
-			ILiteral[] thenExpr = {langFactory.createLiteral(1, Integer.class)};
-			startIndex = langFactory.createSearchedCaseExpression(Arrays.asList(whenExpr), Arrays.asList(thenExpr), startIndex, Integer.class);
+				);
+			Literal thenExpr = langFactory.createLiteral(1, Integer.class);
+			startIndex = langFactory.createSearchedCaseExpression(Arrays.asList(langFactory.createSearchedWhenCondition(whenExpr, thenExpr)), startIndex, TypeFacility.RUNTIME_TYPES.INTEGER);
 		}
 		return startIndex;
 	}
 	
 	/**
-     * Get the instance of {@link ILanguageFactory} set during construction.
+     * Get the instance of {@link LanguageFactory} set during construction.
      * 
      * @return the <code>ILanguageFactory</code> instance
      */
-	protected ILanguageFactory getLanguageFactory() {
+	protected LanguageFactory getLanguageFactory() {
 		return this.langFactory;
 	}
 

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ModFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ModFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ModFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -31,9 +31,9 @@
 
 import org.teiid.connector.api.SourceSystemFunctions;
 import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
 
 /**
  * Adds mod (remainder) support for non-integral types
@@ -42,13 +42,13 @@
 
 	private Set<Class> supportedTypes = new HashSet<Class>(Arrays.asList(TypeFacility.RUNTIME_TYPES.INTEGER, TypeFacility.RUNTIME_TYPES.LONG));
 
-	private ILanguageFactory langFactory;
+	private LanguageFactory langFactory;
 
-    public ModFunctionModifier(String modFunction, ILanguageFactory langFactory) {
+    public ModFunctionModifier(String modFunction, LanguageFactory langFactory) {
     	this(modFunction, langFactory, null);
     }
 
-    public ModFunctionModifier(String modFunction, ILanguageFactory langFactory, Collection<Class> supportedTypes) {
+    public ModFunctionModifier(String modFunction, LanguageFactory langFactory, Collection<Class> supportedTypes) {
     	super(modFunction);
     	this.langFactory = langFactory;
     	if (supportedTypes != null) {
@@ -57,26 +57,26 @@
     }
     
     @Override
-    public List<?> translate(IFunction function) {
-    	List<IExpression> expressions = function.getParameters();
+    public List<?> translate(Function function) {
+    	List<Expression> expressions = function.getParameters();
 		Class<?> type = function.getType();
 		if (supportedTypes.contains(type)) {
 			modify(function);
 			return null;
 		}
 		//x % y => x - sign(x) * floor(abs(x / y)) * y
-		IFunction divide = langFactory.createFunction(SourceSystemFunctions.DIVIDE_OP, new ArrayList<IExpression>(expressions), type); 
+		Function divide = langFactory.createFunction(SourceSystemFunctions.DIVIDE_OP, new ArrayList<Expression>(expressions), type); 
 
-		IFunction abs = langFactory.createFunction(SourceSystemFunctions.ABS, Arrays.asList(divide), type);
+		Function abs = langFactory.createFunction(SourceSystemFunctions.ABS, Arrays.asList(divide), type);
 		
-		IFunction floor = langFactory.createFunction(SourceSystemFunctions.FLOOR, Arrays.asList(abs), type); 
+		Function floor = langFactory.createFunction(SourceSystemFunctions.FLOOR, Arrays.asList(abs), type); 
 		
-		IFunction sign = langFactory.createFunction(SourceSystemFunctions.SIGN, Arrays.asList(expressions.get(0)), type);
+		Function sign = langFactory.createFunction(SourceSystemFunctions.SIGN, Arrays.asList(expressions.get(0)), type);
 		
-		List<? extends IExpression> multArgs = Arrays.asList(sign, floor, langFactory.createFunction(SourceSystemFunctions.ABS, Arrays.asList(expressions.get(1)), type));
-		IFunction mult = langFactory.createFunction(SourceSystemFunctions.MULTIPLY_OP, multArgs, type); 
+		List<? extends Expression> multArgs = Arrays.asList(sign, floor, langFactory.createFunction(SourceSystemFunctions.ABS, Arrays.asList(expressions.get(1)), type));
+		Function mult = langFactory.createFunction(SourceSystemFunctions.MULTIPLY_OP, multArgs, type); 
 
-		List<IExpression> minusArgs = Arrays.asList(expressions.get(0), mult);
+		List<Expression> minusArgs = Arrays.asList(expressions.get(0), mult);
 		
 		return Arrays.asList(langFactory.createFunction(SourceSystemFunctions.SUBTRACT_OP, minusArgs, type)); 
 	}

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -30,7 +30,6 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.IdentityHashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -38,23 +37,25 @@
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.api.TypeFacility;
 import org.teiid.connector.jdbc.translator.Translator.NullOrder;
-import org.teiid.connector.language.ICommand;
-import org.teiid.connector.language.ICompareCriteria;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.IInCriteria;
-import org.teiid.connector.language.IInsertExpressionValueSource;
-import org.teiid.connector.language.ILanguageObject;
-import org.teiid.connector.language.ILikeCriteria;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.language.IOrderByItem;
-import org.teiid.connector.language.IParameter;
-import org.teiid.connector.language.IProcedure;
-import org.teiid.connector.language.ISearchedCaseExpression;
-import org.teiid.connector.language.ISelectSymbol;
-import org.teiid.connector.language.ISetClause;
-import org.teiid.connector.language.IParameter.Direction;
-import org.teiid.connector.language.ISetQuery.Operation;
-import org.teiid.connector.visitor.util.SQLReservedWords;
+import org.teiid.connector.language.Argument;
+import org.teiid.connector.language.Call;
+import org.teiid.connector.language.Command;
+import org.teiid.connector.language.Comparison;
+import org.teiid.connector.language.DerivedColumn;
+import org.teiid.connector.language.ExpressionValueSource;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.In;
+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.SQLStringVisitor;
 
 
@@ -76,8 +77,8 @@
     
     private List preparedValues = new ArrayList();
     
-    private Set<ILanguageObject> recursionObjects = Collections.newSetFromMap(new IdentityHashMap<ILanguageObject, Boolean>());
-    private Map<ILanguageObject, Object> translations = new IdentityHashMap<ILanguageObject, Object>(); 
+    private Set<LanguageObject> recursionObjects = Collections.newSetFromMap(new IdentityHashMap<LanguageObject, Boolean>());
+    private Map<LanguageObject, Object> translations = new IdentityHashMap<LanguageObject, Object>(); 
     
     private boolean replaceWithBinding = false;
     
@@ -87,9 +88,9 @@
     }
     
     @Override
-    public void append(ILanguageObject obj) {
+    public void append(LanguageObject obj) {
         boolean replacementMode = replaceWithBinding;
-        if (obj instanceof ICommand || obj instanceof IFunction) {
+        if (obj instanceof Command || obj instanceof Function) {
     	    /*
     	     * In general it is not appropriate to use bind values within a function
     	     * unless the particulars of the function parameters are know.  
@@ -103,8 +104,8 @@
     		Object trans = this.translations.get(obj);
     		if (trans instanceof List<?>) {
     			parts = (List<?>)trans;
-    		} else if (trans instanceof ILanguageObject) {
-    			obj = (ILanguageObject)trans;
+    		} else if (trans instanceof LanguageObject) {
+    			obj = (LanguageObject)trans;
     		} else {
     			parts = translator.translate(obj, context);
     			if (parts != null) {
@@ -117,8 +118,8 @@
 		if (parts != null) {
 			recursionObjects.add(obj);
 			for (Object part : parts) {
-			    if(part instanceof ILanguageObject) {
-			        append((ILanguageObject)part);
+			    if(part instanceof LanguageObject) {
+			        append((LanguageObject)part);
 			    } else {
 			        buffer.append(part);
 			    }
@@ -131,13 +132,13 @@
     }
     
 	@Override
-	public void visit(IOrderByItem obj) {
+	public void visit(SortSpecification obj) {
 		super.visit(obj);
 		NullOrder nullOrder = this.translator.getDefaultNullOrder();
 		if (!this.translator.supportsExplicitNullOrdering() || nullOrder == NullOrder.LOW) {
 			return;
 		}
-		if (obj.getDirection() == IOrderByItem.ASC) {
+		if (obj.getOrdering() == Ordering.ASC) {
 			if (nullOrder != NullOrder.FIRST) {
 				buffer.append(" NULLS FIRST"); //$NON-NLS-1$
 			}
@@ -188,29 +189,29 @@
             } 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);
             }
         }        
     }
 
     /**
-     * @see org.teiid.connector.visitor.util.SQLStringVisitor#visit(org.teiid.connector.language.IProcedure)
+     * @see org.teiid.connector.visitor.util.SQLStringVisitor#visit(org.teiid.connector.language.Call)
      */
-    public void visit(IProcedure obj) {
+    public void visit(Call obj) {
         this.prepared = true;
         /*
          * preparedValues is now a list of procedure params instead of just values
          */
-        this.preparedValues = obj.getParameters();
+        this.preparedValues = obj.getArguments();
         buffer.append(generateSqlForStoredProcedure(obj));
     }
 
     /**
-     * @see org.teiid.connector.visitor.util.SQLStringVisitor#visit(org.teiid.connector.language.ILiteral)
+     * @see org.teiid.connector.visitor.util.SQLStringVisitor#visit(org.teiid.connector.language.Literal)
      */
-    public void visit(ILiteral obj) {
+    public void visit(Literal obj) {
         if (this.prepared && (replaceWithBinding || TranslatedCommand.isBindEligible(obj) || obj.isBindValue())) {
             buffer.append(UNDEFINED_PARAM);
             preparedValues.add(obj);
@@ -220,43 +221,43 @@
     }
     
     @Override
-    public void visit(IInCriteria obj) {
+    public void visit(In obj) {
         replaceWithBinding = true;
         super.visit(obj);
     }
 
     @Override
-    public void visit(ILikeCriteria obj) {
+    public void visit(Like obj) {
         replaceWithBinding = true;
         super.visit(obj);
     }
 
     @Override
-    public void visit(ICompareCriteria obj) {
+    public void visit(Comparison obj) {
         replaceWithBinding = true;
         super.visit(obj);
     }
 
     @Override
-    public void visit(IInsertExpressionValueSource obj) {
+    public void visit(ExpressionValueSource obj) {
         replaceWithBinding = true;
         super.visit(obj);
     }
     
     @Override
-    public void visit(ISetClause obj) {
+    public void visit(SetClause obj) {
         replaceWithBinding = true;
         super.visit(obj);
     }
     
     @Override
-    public void visit(ISelectSymbol obj) {
+    public void visit(DerivedColumn obj) {
     	replaceWithBinding = false;
     	super.visit(obj);
     }
     
     @Override
-    public void visit(ISearchedCaseExpression obj) {
+    public void visit(SearchedCase obj) {
     	replaceWithBinding = false;
     	super.visit(obj);
     }
@@ -280,7 +281,7 @@
         return this.context;
     }
 
-    protected String getSourceComment(ICommand command) {
+    protected String getSourceComment(Command command) {
     	return this.translator.getSourceComment(this.context, command);
     }
     
@@ -290,22 +291,14 @@
      * @param exec The command for the stored procedure.
      * @return String to be executed by CallableStatement.
      */
-    protected String generateSqlForStoredProcedure(IProcedure exec) {
+    protected String generateSqlForStoredProcedure(Call exec) {
         StringBuffer prepareCallBuffer = new StringBuffer();
         prepareCallBuffer.append("{ "); //$NON-NLS-1$
 
-        List params = exec.getParameters();
+        List<Argument> params = exec.getArguments();
 
         //check whether a "?" is needed if there are returns
-        boolean needQuestionMark = false;
-        Iterator iter = params.iterator();
-        while(iter.hasNext()){
-            IParameter param = (IParameter)iter.next();
-            if(param.getDirection() == Direction.RETURN){
-                needQuestionMark = true;
-                break;
-            }
-        }
+        boolean needQuestionMark = exec.getReturnType() != null;
         
         prepareCallBuffer.append(getSourceComment(exec));
         
@@ -318,9 +311,7 @@
         prepareCallBuffer.append("("); //$NON-NLS-1$
 
         int numberOfParameters = 0;
-        iter = params.iterator();
-        while(iter.hasNext()){
-            IParameter param = (IParameter)iter.next();
+        for (Argument param : params) {
             if(param.getDirection() == Direction.IN || param.getDirection() == Direction.OUT || param.getDirection() == Direction.INOUT){
                 if(numberOfParameters > 0){
                     prepareCallBuffer.append(","); //$NON-NLS-1$

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/TranslatedCommand.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/TranslatedCommand.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/TranslatedCommand.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -29,8 +29,8 @@
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.language.ICommand;
-import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.Command;
+import org.teiid.connector.language.Literal;
 import org.teiid.connector.visitor.util.CollectorVisitor;
 
 
@@ -64,7 +64,7 @@
      * @param command ICommand to be translated
      * @throws ConnectorException 
      */
-    public void translateCommand(ICommand command) throws ConnectorException {
+    public void translateCommand(Command command) throws ConnectorException {
     	SQLConversionVisitor sqlConversionVisitor = sqlTranslator.getSQLConversionVisitor();
         sqlConversionVisitor.setExecutionContext(context);
         if (sqlTranslator.usePreparedStatements() || hasBindValue(command)) {
@@ -83,8 +83,8 @@
      * @param command
      * @return
      */
-    private boolean hasBindValue(ICommand command) {
-        for (ILiteral l : CollectorVisitor.collectObjects(ILiteral.class, command)) {
+    private boolean hasBindValue(Command command) {
+        for (Literal l : CollectorVisitor.collectObjects(Literal.class, command)) {
             if (l.isBindValue() || isBindEligible(l)) {
                 return true;
             }
@@ -96,7 +96,7 @@
      * @param l
      * @return
      */
-    static boolean isBindEligible(ILiteral l) {
+    static boolean isBindEligible(Literal l) {
 		return TypeFacility.RUNTIME_TYPES.XML.equals(l.getType())
 				|| TypeFacility.RUNTIME_TYPES.CLOB.equals(l.getType())
 				|| TypeFacility.RUNTIME_TYPES.BLOB.equals(l.getType())

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/Translator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/Translator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/Translator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -48,22 +48,21 @@
 import org.teiid.connector.api.SourceSystemFunctions;
 import org.teiid.connector.api.TypeFacility;
 import org.teiid.connector.jdbc.JDBCCapabilities;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.JDBCPlugin;
 import org.teiid.connector.jdbc.JDBCPropertyNames;
-import org.teiid.connector.language.ICommand;
-import org.teiid.connector.language.IElement;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILanguageObject;
-import org.teiid.connector.language.ILimit;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.language.IParameter;
-import org.teiid.connector.language.ISetQuery;
-import org.teiid.connector.language.IParameter.Direction;
+import org.teiid.connector.language.Command;
+import org.teiid.connector.language.ColumnReference;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
+import org.teiid.connector.language.LanguageObject;
+import org.teiid.connector.language.Limit;
+import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.Argument;
+import org.teiid.connector.language.SetQuery;
+import org.teiid.connector.language.Argument.Direction;
 
-import com.metamatrix.common.util.PropertiesUtils;
-import com.metamatrix.core.MetaMatrixRuntimeException;
 import com.metamatrix.core.util.ReflectionHelper;
 
 /**
@@ -130,7 +129,7 @@
     };
 
 	private Map<String, FunctionModifier> functionModifiers = new HashMap<String, FunctionModifier>();
-    private ConnectorEnvironment environment;
+    private JDBCManagedConnectionFactory environment;
     
     private boolean useComments;
     private boolean usePreparedStatements;
@@ -138,8 +137,6 @@
     private TypeFacility typeFacility;
 
     private volatile boolean initialConnection;
-    private String connectionTestQuery;
-    private int isValidTimeout = -1;
     private boolean trimChar;
     
     /**
@@ -148,11 +145,11 @@
      * @param metadata
      * @throws ConnectorException
      */
-    public void initialize(ConnectorEnvironment env) throws ConnectorException {
+    public void initialize(JDBCManagedConnectionFactory env) throws ConnectorException {
         this.environment = env;
         this.typeFacility = env.getTypeFacility();
 
-        String timeZone = env.getProperties().getProperty(JDBCPropertyNames.DATABASE_TIME_ZONE);
+        String timeZone = this.environment.getDatabaseTimeZone();
         if(timeZone != null && timeZone.trim().length() > 0) {
         	TimeZone tz = TimeZone.getTimeZone(timeZone);
             if(!DEFAULT_TIME_ZONE.hasSameRules(tz)) {
@@ -160,11 +157,9 @@
             }
         }   
         
-        this.useComments = PropertiesUtils.getBooleanProperty(env.getProperties(), JDBCPropertyNames.USE_COMMENTS_SOURCE_QUERY, false);
-        this.usePreparedStatements = PropertiesUtils.getBooleanProperty(env.getProperties(), JDBCPropertyNames.USE_BIND_VARIABLES, false);
-    	this.connectionTestQuery = env.getProperties().getProperty(JDBCPropertyNames.CONNECTION_TEST_QUERY, getDefaultConnectionTestQuery());
-    	this.isValidTimeout = PropertiesUtils.getIntProperty(env.getProperties(), JDBCPropertyNames.IS_VALID_TIMEOUT, -1);   
-    	this.trimChar = PropertiesUtils.getBooleanProperty(env.getProperties(), JDBCPropertyNames.TRIM_STRINGS, false);
+        this.useComments = this.environment.isUseCommentsInSourceQuery();
+        this.usePreparedStatements = this.environment.isUseBindVariables();
+        trimChar = this.environment.isTrimStrings();
     }
     
     /**
@@ -186,66 +181,62 @@
 	}
     
     /**
-     * Gets the {@link ILanguageFactory}
+     * Gets the {@link LanguageFactory}
      */
-    public final ILanguageFactory getLanguageFactory() {
+    public final LanguageFactory getLanguageFactory() {
     	return environment.getLanguageFactory();
     }
 
     /**
-     * Return a List of translated parts ({@link ILanguageObject}s and Objects), or null
+     * Return a List of translated parts ({@link LanguageObject}s and Objects), or null
      * if to rely on the default translation.  Override with care.
      * @param command
      * @param context
      * @return
      */
-    public List<?> translate(ILanguageObject obj, ExecutionContext context) {
+    public List<?> translate(LanguageObject obj, ExecutionContext context) {
 		List<?> parts = null;
-    	if (obj instanceof IFunction) {
-    		IFunction function = (IFunction)obj;
+    	if (obj instanceof Function) {
+    		Function function = (Function)obj;
     		if (functionModifiers != null) {
     			FunctionModifier modifier = functionModifiers.get(function.getName().toLowerCase());
     			if (modifier != null) {
     				parts = modifier.translate(function);
     			}
     		}
-    	} else if (obj instanceof ICommand) {
-    		parts = translateCommand((ICommand)obj, context);
-    	} else if (obj instanceof ILimit) {
-    		parts = translateLimit((ILimit)obj, context);
-    	} else if (obj instanceof IElement) {
-    		IElement elem = (IElement)obj;
-    		try {
-    			if (trimChar && elem.getType() == TypeFacility.RUNTIME_TYPES.STRING && elem.getMetadataObject() != null 
-    					&& ("char".equalsIgnoreCase(elem.getMetadataObject().getNativeType()) || "nchar".equalsIgnoreCase(elem.getMetadataObject().getNativeType()))) { //$NON-NLS-1$ //$NON-NLS-2$
-    				return Arrays.asList(getLanguageFactory().createFunction(SourceSystemFunctions.RTRIM, new IExpression[] {elem}, TypeFacility.RUNTIME_TYPES.STRING));
-    			}
-    		} catch (ConnectorException e) {
-    			throw new MetaMatrixRuntimeException(e);
-    		}
+    	} else if (obj instanceof Command) {
+    		parts = translateCommand((Command)obj, context);
+    	} else if (obj instanceof Limit) {
+    		parts = translateLimit((Limit)obj, context);
+    	} else if (obj instanceof ColumnReference) {
+    		ColumnReference elem = (ColumnReference)obj;
+			if (trimChar && elem.getType() == TypeFacility.RUNTIME_TYPES.STRING && elem.getMetadataObject() != null 
+					&& ("char".equalsIgnoreCase(elem.getMetadataObject().getNativeType()) || "nchar".equalsIgnoreCase(elem.getMetadataObject().getNativeType()))) { //$NON-NLS-1$ //$NON-NLS-2$
+				return Arrays.asList(getLanguageFactory().createFunction(SourceSystemFunctions.RTRIM, new Expression[] {elem}, TypeFacility.RUNTIME_TYPES.STRING));
+			}
     	}
     	return parts;
     }
     
     /**
-     * Return a List of translated parts ({@link ILanguageObject}s and Objects), or null
+     * Return a List of translated parts ({@link LanguageObject}s and Objects), or null
      * if to rely on the default translation. 
      * @param command
      * @param context
      * @return
      */
-    public List<?> translateCommand(ICommand command, ExecutionContext context) {
+    public List<?> translateCommand(Command command, ExecutionContext context) {
     	return null;
     }
 
     /**
-     * Return a List of translated parts ({@link ILanguageObject}s and Objects), or null
+     * Return a List of translated parts ({@link LanguageObject}s and Objects), or null
      * if to rely on the default translation. 
      * @param limit
      * @param context
      * @return
      */
-    public List<?> translateLimit(ILimit limit, ExecutionContext context) {
+    public List<?> translateLimit(Limit limit, ExecutionContext context) {
     	return null;
     }
     
@@ -367,7 +358,7 @@
     /**
      * Use PreparedStatements (or CallableStatements) as
      * appropriate for all commands.  Bind values will be 
-     * determined by the {@link BindValueVisitor}.  {@link ILiteral#setBindValue(boolean)}
+     * determined by the {@link BindValueVisitor}.  {@link Literal#setBindValue(boolean)}
      * can be used to force a literal to be a bind value.  
      */
     public boolean usePreparedStatements() {
@@ -393,11 +384,11 @@
     }
     
     /**
-     * Returns the name for a given {@link ISetQuery.Operation}
+     * Returns the name for a given {@link SetQuery.Operation}
      * @param operation
      * @return
      */
-    public String getSetOperationString(ISetQuery.Operation operation) {
+    public String getSetOperationString(SetQuery.Operation operation) {
     	return operation.toString();
     }
     
@@ -407,7 +398,7 @@
      * @param command
      * @return
      */
-    public String getSourceComment(ExecutionContext context, ICommand command) {
+    public String getSourceComment(ExecutionContext context, Command command) {
 	    if (addSourceComment() && context != null) {
             return COMMENT.get().format(new Object[] {context.getConnectionIdentifier(), context.getRequestIdentifier(), context.getPartIdentifier()});
 	    }
@@ -432,14 +423,6 @@
     	return 9;
     }
     
-    public String getConnectionTestQuery() {
-		return connectionTestQuery;
-	}
-    
-    public String getDefaultConnectionTestQuery() {
-    	return "select 1"; //$NON-NLS-1$
-    }
-    
     public TypeFacility getTypeFacility() {
     	return typeFacility;
     }
@@ -449,33 +432,28 @@
      * stored procedures differently, subclasses should override this method
      * if necessary.
      */
-    public ResultSet executeStoredProcedure(CallableStatement statement, TranslatedCommand command) throws SQLException {
+    public ResultSet executeStoredProcedure(CallableStatement statement, TranslatedCommand command, Class<?> returnType) throws SQLException {
         List params = command.getPreparedValues();
         int index = 1;
         
-        Iterator iter = params.iterator();
-        while(iter.hasNext()){
-            IParameter param = (IParameter)iter.next();
-            if(param.getDirection() == Direction.RETURN){
-                registerSpecificTypeOfOutParameter(statement,param, index++);
-            }
+        if(returnType != null){
+            registerSpecificTypeOfOutParameter(statement, returnType, index++);
         }
         
-        iter = params.iterator();
+        Iterator iter = params.iterator();
         while(iter.hasNext()){
-            IParameter param = (IParameter)iter.next();
+            Argument param = (Argument)iter.next();
                     
             if(param.getDirection() == Direction.INOUT){
-                registerSpecificTypeOfOutParameter(statement,param, index);
+                registerSpecificTypeOfOutParameter(statement,param.getType(), index);
             }else if(param.getDirection() == Direction.OUT){
-                registerSpecificTypeOfOutParameter(statement,param, index++);
+                registerSpecificTypeOfOutParameter(statement,param.getType(), index++);
             }
                     
             if(param.getDirection() == Direction.IN || param.getDirection() == Direction.INOUT){
-                bindValue(statement, param.getValue(), param.getType(), index++);
+                bindValue(statement, param.getArgumentValue().getValue(), param.getType(), index++);
             }
         }
-        
         boolean resultSetNext = statement.execute();
         
         while (!resultSetNext) {
@@ -496,8 +474,7 @@
      * @param parameter
      * @throws SQLException
      */
-    protected void registerSpecificTypeOfOutParameter(CallableStatement statement, IParameter param, int index) throws SQLException {
-        Class runtimeType = param.getType();
+    protected void registerSpecificTypeOfOutParameter(CallableStatement statement, Class<?> runtimeType, int index) throws SQLException {
         int typeToSet = TypeFacility.getSQLTypeFromRuntimeType(runtimeType);
         
         statement.registerOutParameter(index,typeToSet);
@@ -763,14 +740,7 @@
         }
     }
     
-    /**
-     * Returns a positive number if query testing should use the JDBC 4.0 isValid check.
-     * Can be set via the {@link JDBCPropertyNames#IS_VALID_TIMEOUT} property
-     * @return
-     */
-    public int getIsValidTimeout() {
-		return isValidTimeout;
-	}
+
     
     /**
      * Create the {@link SQLConversionVisitor} that will perform translation.  Typical custom
@@ -798,12 +768,11 @@
      */
     public ConnectorCapabilities getConnectorCapabilities() throws ConnectorException {
 		// create Capabilities
-		String className = this.environment.getProperties().getProperty(JDBCPropertyNames.EXT_CAPABILITY_CLASS);
+		String className = this.environment.getCapabilitiesClass();
 		try {
 			ConnectorCapabilities result = null;
 			if (className != null && className.length() > 0) {
-				result = (ConnectorCapabilities) ReflectionHelper.create(
-						className, null, Thread.currentThread().getContextClassLoader());
+				result = (ConnectorCapabilities) ReflectionHelper.create(className, null, Thread.currentThread().getContextClassLoader());
 			} else {
 				result = getDefaultCapabilities().newInstance();
 			}

Copied: trunk/connectors/connector-jdbc/src/main/rar (from rev 1900, branches/JCA/connectors/connector-jdbc/src/main/rar)

Copied: trunk/connectors/connector-jdbc/src/main/rar/META-INF (from rev 1900, branches/JCA/connectors/connector-jdbc/src/main/rar/META-INF)

Deleted: trunk/connectors/connector-jdbc/src/main/rar/META-INF/ra.xml
===================================================================
--- branches/JCA/connectors/connector-jdbc/src/main/rar/META-INF/ra.xml	2010-03-04 15:18:19 UTC (rev 1900)
+++ trunk/connectors/connector-jdbc/src/main/rar/META-INF/ra.xml	2010-03-05 15:27:12 UTC (rev 1918)
@@ -1,151 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<connector xmlns="http://java.sun.com/xml/ns/j2ee"
-           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-           xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-           http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd"
-           version="1.5">
-
-   <vendor-name>Red Hat Middleware LLC</vendor-name>
-   <eis-type>Teiid JDBC Connector</eis-type>
-   <resourceadapter-version>1.0</resourceadapter-version>
-   <license>
-      <description>
- JBoss, Home of Professional Open Source.
- Copyright 2006, Red Hat Middleware LLC, and individual contributors
- as indicated by the @author tags. See the copyright.txt file in the
- distribution for a full listing of individual contributors.
-
- This 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 software 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 software; if not, write to the Free
- Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-      </description>
-      <license-required>true</license-required>
-   </license>
-   <resourceadapter>
-      <resourceadapter-class>org.teiid.connector.basic.BasicResourceAdapter</resourceadapter-class>
-
-      <outbound-resourceadapter>
-         <connection-definition>
-            <managedconnectionfactory-class>org.teiid.connector.jdbc.JDBCManagedConnectionFactory</managedconnectionfactory-class>
-
-            <config-property>
-               <description>{$display:"Connector Class",$advanced:"true"}</description>
-               <config-property-name>ConnectorClass</config-property-name>
-               <config-property-type>java.lang.String</config-property-type>
-               <config-property-value>org.teiid.connector.jdbc.JDBCConnector</config-property-value>
-            </config-property>
-
-            <config-property>
-               <description>{$display:"Connector Capabilities",$description:"The class to use to provide the Connector Capabilities",$advanced:"true"}</description>
-               <config-property-name>CapabilitiesClass</config-property-name>
-               <config-property-type>java.lang.String</config-property-type>
-               <config-property-value>org.teiid.connector.basic.BasicConnectorCapabilities</config-property-value>
-            </config-property>
-            
-            <config-property>
-               <description>{$display:"Is Immutable",$description:"Is Immutable, True if the source never changes.",$advanced:"true"}</description>
-               <config-property-name>Immutable</config-property-name>
-               <config-property-type>java.lang.Boolean</config-property-type>
-               <config-property-value>false</config-property-value>
-            </config-property>
-            
-            <config-property>
-               <description>{$display:"Is XA Capable",$description:"True, if this connector supports XA Transactions",$advanced:"true"}</description>
-               <config-property-name>XaCapable</config-property-name>
-               <config-property-type>java.lang.Boolean</config-property-type>
-               <config-property-value>false</config-property-value>
-            </config-property>            
-
-            <config-property>             
-               <description>{$display:"Exception on Exceeding Max Rows",$description:"Indicates if an Exception should be thrown if the specified value for Maximum Result Rows is exceeded; else no exception and no more than the maximum will be returned",$advanced:"true"}</description>
-               <config-property-name>ExceptionOnMaxRows</config-property-name>
-               <config-property-type>java.lang.Boolean</config-property-type>
-               <config-property-value>true</config-property-value>
-            </config-property>
-
-            <config-property>
-               <description>{$display:"Maximum Result Rows",$description:"Maximum Result Rows allowed",$advanced:"true"}</description>
-               <config-property-name>MaxResultRows</config-property-name>
-               <config-property-type>java.lang.Integer</config-property-type>
-               <config-property-value>10000</config-property-value>
-            </config-property>
-
-            <!--  JDBC Specific properties -->
-
-            <config-property>
-               <description>{$display:"Use prepared statements and bind variables",$advanced:"true"}</description>
-               <config-property-name>UseBindVariables</config-property-name>
-               <config-property-type>java.lang.Boolean</config-property-type>
-               <config-property-value>false</config-property-value>
-            </config-property>
-
-            <config-property>
-               <description>{$display:"fetch size used from the connector to its underlying source.",$advanced:"true"}</description>
-               <config-property-name>FetchSize</config-property-name>
-               <config-property-type>java.lang.Integer</config-property-type>
-               <config-property-value>2000</config-property-value>
-            </config-property>
-            
-            <config-property>
-               <description>{$display:"Database time zone",$description:"Time zone of the database, if different than Integration Server",$advanced:"true"}</description>
-               <config-property-name>DatabaseTimeZone</config-property-name>
-               <config-property-type>java.lang.String</config-property-type>
-            </config-property>
-            
-            <config-property>
-               <description>{$display:"Extension SQL Translation Class",$required:"true",$advanced:"true",$allowed:["org.teiid.connector.jdbc.translator.Translator","org.teiid.connector.jdbc.oracle.OracleSQLTranslator","org.teiid.connector.jdbc.db2.DB2SQLTranslator", "org.teiid.connector.jdbc.sqlserver.SqlServerSQLTranslator", "org.teiid.connector.jdbc.mysql.MySQLTranslator","org.teiid.connector.jdbc.mysql.MySQL5Translator", "org.teiid.connector.jdbc.postgresql.PostgreSQLTranslator", "org.teiid.connector.jdbc.derby.DerbySQLTranslator", "org.teiid.connector.jdbc.access.AccessSQLTranslator","org.teiid.connector.jdbc.h2.H2Translator","org.teiid.connector.jdbc.h2.H2Translator"]}</description>
-               <config-property-name>ExtensionTranslationClassName</config-property-name>
-               <config-property-type>java.lang.String</config-property-type>
-               <config-property-value>org.teiid.connector.jdbc.translator.Translator</config-property-value>
-            </config-property>
-
-            <config-property>
-               <description>{$display:"Source Connection JNDI Name",$required:"true"}</description>
-               <description>JNDI Name of the physical resource.</description>
-               <config-property-name>SourceJNDIName</config-property-name>
-               <config-property-type>java.lang.String</config-property-type>
-            </config-property>
-
-            <config-property>
-               <description>{$display:"Trim string flag",$description:"Right Trim fixed character types returned as Strings - note that the native type must be char or nchar and the source must support the rtrim function.",$advanced:"true"}</description>
-               <config-property-name>TrimStrings</config-property-name>
-               <config-property-type>java.lang.Boolean</config-property-type>
-               <config-property-value>false</config-property-value>
-            </config-property>
-                              
-            <config-property>
-               <description>{$display:"Use informational comments in Source Queries",$description:"This will embed /*comment*/ style comment with session/request id in source SQL query for informational purposes",$advanced:"true"}</description>
-               <config-property-name>UseCommentsInSourceQuery</config-property-name>
-               <config-property-type>java.lang.Boolean</config-property-type>
-               <config-property-value>false</config-property-value>
-            </config-property>
-                                                                                                      
-            <connectionfactory-interface>org.teiid.connector.api.Connector</connectionfactory-interface>
-            <connectionfactory-impl-class>org.teiid.connector.basic.WrappedConnector</connectionfactory-impl-class>
-            <connection-interface>org.teiid.connector.api.Connection</connection-interface>
-            <connection-impl-class>org.teiid.connector.basic.WrappedConnection</connection-impl-class>
-
-         </connection-definition>
-         
-         <transaction-support>NoTransaction</transaction-support>
-        
-        <authentication-mechanism>
-            <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
-            <credential-interface>javax.resource.spi.security.PasswordCredential</credential-interface>
-        </authentication-mechanism>
-        <reauthentication-support>false</reauthentication-support>
-      </outbound-resourceadapter>
-   </resourceadapter>
-</connector>

Copied: trunk/connectors/connector-jdbc/src/main/rar/META-INF/ra.xml (from rev 1900, branches/JCA/connectors/connector-jdbc/src/main/rar/META-INF/ra.xml)
===================================================================
--- trunk/connectors/connector-jdbc/src/main/rar/META-INF/ra.xml	                        (rev 0)
+++ trunk/connectors/connector-jdbc/src/main/rar/META-INF/ra.xml	2010-03-05 15:27:12 UTC (rev 1918)
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<connector xmlns="http://java.sun.com/xml/ns/j2ee"
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+           xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
+           http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd"
+           version="1.5">
+
+   <vendor-name>Red Hat Middleware LLC</vendor-name>
+   <eis-type>Teiid JDBC Connector</eis-type>
+   <resourceadapter-version>1.0</resourceadapter-version>
+   <license>
+      <description>
+ JBoss, Home of Professional Open Source.
+ Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ as indicated by the @author tags. See the copyright.txt file in the
+ distribution for a full listing of individual contributors.
+
+ This 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 software 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 software; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+      </description>
+      <license-required>true</license-required>
+   </license>
+   <resourceadapter>
+      <resourceadapter-class>org.teiid.connector.basic.BasicResourceAdapter</resourceadapter-class>
+
+      <outbound-resourceadapter>
+         <connection-definition>
+            <managedconnectionfactory-class>org.teiid.connector.jdbc.JDBCManagedConnectionFactory</managedconnectionfactory-class>
+
+            <config-property>
+               <description>{$display:"Connector Class",$advanced:"true"}</description>
+               <config-property-name>ConnectorClass</config-property-name>
+               <config-property-type>java.lang.String</config-property-type>
+               <config-property-value>org.teiid.connector.jdbc.JDBCConnector</config-property-value>
+            </config-property>
+
+            <config-property>
+               <description>{$display:"Connector Capabilities",$description:"The class to use to provide the Connector Capabilities",$advanced:"true"}</description>
+               <config-property-name>CapabilitiesClass</config-property-name>
+               <config-property-type>java.lang.String</config-property-type>
+               <config-property-value>org.teiid.connector.basic.BasicConnectorCapabilities</config-property-value>
+            </config-property>
+            
+            <config-property>
+               <description>{$display:"Is Immutable",$description:"Is Immutable, True if the source never changes.",$advanced:"true"}</description>
+               <config-property-name>Immutable</config-property-name>
+               <config-property-type>java.lang.Boolean</config-property-type>
+               <config-property-value>false</config-property-value>
+            </config-property>
+            
+            <config-property>
+               <description>{$display:"Is XA Capable",$description:"True, if this connector supports XA Transactions",$advanced:"true"}</description>
+               <config-property-name>XaCapable</config-property-name>
+               <config-property-type>java.lang.Boolean</config-property-type>
+               <config-property-value>false</config-property-value>
+            </config-property>            
+
+            <config-property>             
+               <description>{$display:"Exception on Exceeding Max Rows",$description:"Indicates if an Exception should be thrown if the specified value for Maximum Result Rows is exceeded; else no exception and no more than the maximum will be returned",$advanced:"true"}</description>
+               <config-property-name>ExceptionOnMaxRows</config-property-name>
+               <config-property-type>java.lang.Boolean</config-property-type>
+               <config-property-value>true</config-property-value>
+            </config-property>
+
+            <config-property>
+               <description>{$display:"Maximum Result Rows",$description:"Maximum Result Rows allowed",$advanced:"true"}</description>
+               <config-property-name>MaxResultRows</config-property-name>
+               <config-property-type>java.lang.Integer</config-property-type>
+               <config-property-value>10000</config-property-value>
+            </config-property>
+
+            <!--  JDBC Specific properties -->
+
+            <config-property>
+               <description>{$display:"Use prepared statements and bind variables",$advanced:"true"}</description>
+               <config-property-name>UseBindVariables</config-property-name>
+               <config-property-type>java.lang.Boolean</config-property-type>
+               <config-property-value>false</config-property-value>
+            </config-property>
+
+            <config-property>
+               <description>{$display:"fetch size used from the connector to its underlying source.",$advanced:"true"}</description>
+               <config-property-name>FetchSize</config-property-name>
+               <config-property-type>java.lang.Integer</config-property-type>
+               <config-property-value>2000</config-property-value>
+            </config-property>
+            
+            <config-property>
+               <description>{$display:"Database time zone",$description:"Time zone of the database, if different than Integration Server",$advanced:"true"}</description>
+               <config-property-name>DatabaseTimeZone</config-property-name>
+               <config-property-type>java.lang.String</config-property-type>
+            </config-property>
+            
+            <config-property>
+               <description>{$display:"Extension SQL Translation Class",$required:"true",$advanced:"true",$allowed:["org.teiid.connector.jdbc.translator.Translator","org.teiid.connector.jdbc.oracle.OracleSQLTranslator","org.teiid.connector.jdbc.db2.DB2SQLTranslator", "org.teiid.connector.jdbc.sqlserver.SqlServerSQLTranslator", "org.teiid.connector.jdbc.mysql.MySQLTranslator","org.teiid.connector.jdbc.mysql.MySQL5Translator", "org.teiid.connector.jdbc.postgresql.PostgreSQLTranslator", "org.teiid.connector.jdbc.derby.DerbySQLTranslator", "org.teiid.connector.jdbc.access.AccessSQLTranslator","org.teiid.connector.jdbc.h2.H2Translator","org.teiid.connector.jdbc.h2.H2Translator"]}</description>
+               <config-property-name>ExtensionTranslationClassName</config-property-name>
+               <config-property-type>java.lang.String</config-property-type>
+               <config-property-value>org.teiid.connector.jdbc.translator.Translator</config-property-value>
+            </config-property>
+
+            <config-property>
+               <description>{$display:"Source Connection JNDI Name",$required:"true"}</description>
+               <description>JNDI Name of the physical resource.</description>
+               <config-property-name>SourceJNDIName</config-property-name>
+               <config-property-type>java.lang.String</config-property-type>
+            </config-property>
+
+            <config-property>
+               <description>{$display:"Trim string flag",$description:"Right Trim fixed character types returned as Strings - note that the native type must be char or nchar and the source must support the rtrim function.",$advanced:"true"}</description>
+               <config-property-name>TrimStrings</config-property-name>
+               <config-property-type>java.lang.Boolean</config-property-type>
+               <config-property-value>false</config-property-value>
+            </config-property>
+                              
+            <config-property>
+               <description>{$display:"Use informational comments in Source Queries",$description:"This will embed /*comment*/ style comment with session/request id in source SQL query for informational purposes",$advanced:"true"}</description>
+               <config-property-name>UseCommentsInSourceQuery</config-property-name>
+               <config-property-type>java.lang.Boolean</config-property-type>
+               <config-property-value>false</config-property-value>
+            </config-property>
+                                                                                                      
+            <connectionfactory-interface>org.teiid.connector.api.Connector</connectionfactory-interface>
+            <connectionfactory-impl-class>org.teiid.connector.basic.WrappedConnector</connectionfactory-impl-class>
+            <connection-interface>org.teiid.connector.api.Connection</connection-interface>
+            <connection-impl-class>org.teiid.connector.basic.WrappedConnection</connection-impl-class>
+
+         </connection-definition>
+         
+         <transaction-support>NoTransaction</transaction-support>
+        
+        <authentication-mechanism>
+            <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
+            <credential-interface>javax.resource.spi.security.PasswordCredential</credential-interface>
+        </authentication-mechanism>
+        <reauthentication-support>false</reauthentication-support>
+      </outbound-resourceadapter>
+   </resourceadapter>
+</connector>

Modified: trunk/connectors/connector-jdbc/src/main/resources/org/teiid/connector/jdbc/i18n.properties
===================================================================
--- trunk/connectors/connector-jdbc/src/main/resources/org/teiid/connector/jdbc/i18n.properties	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/main/resources/org/teiid/connector/jdbc/i18n.properties	2010-03-05 15:27:12 UTC (rev 1918)
@@ -20,7 +20,7 @@
 # 02110-1301 USA.
 #
 
-JDBCSourceConnectionFactory.Missing_JDBC_driver_class_name_1=Missing JDBC driver class name
+JDBCSourceConnectionFactory.Missing_JDBC_jndi_1=Missing JDBC Source JNDI Name
 JDBCSourceConnectionFactory.Missing_JDBC_protocol_name_2=Missing JDBC protocol name
 JDBCSourceConnectionFactory.Missing_JDBC_database_name_3=Missing JDBC database name
 JDBCSourceConnectionFactory.Unable_to_load_the_JDBC_driver_class_6=Unable to load the JDBC driver class "{0}".

Copied: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/FakeMetadataFactory.java (from rev 1900, branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/FakeMetadataFactory.java)
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/FakeMetadataFactory.java	                        (rev 0)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/FakeMetadataFactory.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -0,0 +1,66 @@
+/*
+ * 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.jdbc;
+
+import static org.junit.Assert.assertEquals;
+import junit.framework.Assert;
+
+import org.mockito.Mockito;
+import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.api.ExecutionContext;
+import org.teiid.connector.jdbc.translator.TranslatedCommand;
+import org.teiid.connector.jdbc.translator.Translator;
+import org.teiid.connector.language.Command;
+
+import com.metamatrix.cdk.api.TranslationUtility;
+import com.metamatrix.cdk.unittest.FakeTranslationFactory;
+
+public class FakeMetadataFactory {
+	
+    public static final String PARTS_VDB = "/PartsSupplier.vdb"; //$NON-NLS-1$
+    public static final String BQT_VDB = "/bqt.vdb"; //$NON-NLS-1$
+
+    public static Command helpTranslate(String vdbFileName, String sql) {
+    	TranslationUtility util = null;
+    	if (PARTS_VDB.equals(vdbFileName)) {
+    		util = new TranslationUtility(FakeMetadataFactory.class.getResource(vdbFileName));
+    	} else if (BQT_VDB.equals(vdbFileName)){
+    		util = FakeTranslationFactory.getInstance().getBQTTranslationUtility();
+    	} else {
+    		Assert.fail("unknown vdb"); //$NON-NLS-1$
+    	}
+        return util.parseCommand(sql);        
+    }
+
+	public static void helpTestVisitor(String vdb, String input, String expectedOutput, Translator translator) throws ConnectorException {
+	    // Convert from sql to objects
+	    Command obj = helpTranslate(vdb, input);
+	    
+	    TranslatedCommand tc = new TranslatedCommand(Mockito.mock(ExecutionContext.class), translator); //$NON-NLS-1$
+	    tc.translateCommand(obj);
+	    
+	    // Check stuff
+	    assertEquals("Did not get correct sql", expectedOutput, tc.getSql());             //$NON-NLS-1$
+	}
+
+}

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCProcedureExecution.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCProcedureExecution.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCProcedureExecution.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -22,54 +22,54 @@
 
 package org.teiid.connector.jdbc;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
 
 import java.sql.CallableStatement;
 import java.sql.Connection;
 import java.sql.Types;
 import java.util.Arrays;
-import java.util.Properties;
 
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.teiid.connector.api.ConnectorLogger;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.ICommand;
-import org.teiid.dqp.internal.datamgr.metadata.RuntimeMetadataImpl;
+import org.teiid.connector.language.Command;
 
-import com.metamatrix.cdk.api.EnvironmentUtility;
-import com.metamatrix.query.unittest.FakeMetadataFactory;
-
 public class TestJDBCProcedureExecution {
 	
 	@Test public void testProcedureExecution() throws Exception {
-		ICommand command = TranslationHelper.helpTranslate(TranslationHelper.BQT_VDB, "exec pm2.spTest8a()"); //$NON-NLS-1$
+		Command command = TranslationHelper.helpTranslate(TranslationHelper.BQT_VDB, "exec pm2.spTest8a()"); //$NON-NLS-1$
 		Connection connection = Mockito.mock(Connection.class);
 		CallableStatement cs = Mockito.mock(CallableStatement.class);
 		Mockito.stub(cs.getUpdateCount()).toReturn(-1);
 		Mockito.stub(cs.getInt(1)).toReturn(5);
 		Mockito.stub(connection.prepareCall("{  call spTest8a(?)}")).toReturn(cs); //$NON-NLS-1$
 		Translator sqlTranslator = new Translator();
-		ExecutionContext context = EnvironmentUtility.createSecurityContext("user"); //$NON-NLS-1$
-		RuntimeMetadataImpl runtimeMetadata = new RuntimeMetadataImpl(FakeMetadataFactory.exampleBQTCached());
-		JDBCProcedureExecution procedureExecution = new JDBCProcedureExecution(command, connection, sqlTranslator, Mockito.mock(ConnectorLogger.class), new Properties(), runtimeMetadata, context, EnvironmentUtility.createEnvironment(new Properties()) );
+		
+		JDBCManagedConnectionFactory config = Mockito.mock(JDBCManagedConnectionFactory.class);
+		Mockito.stub(config.getExtensionTranslationClass()).toReturn(sqlTranslator);
+		Mockito.stub(config.getLogger()).toReturn(Mockito.mock(ConnectorLogger.class));
+		
+		JDBCProcedureExecution procedureExecution = new JDBCProcedureExecution(command, connection, Mockito.mock(ExecutionContext.class),  config);
 		procedureExecution.execute();
 		assertEquals(Arrays.asList(5), procedureExecution.getOutputParameterValues());
 		Mockito.verify(cs, Mockito.times(1)).registerOutParameter(1, Types.INTEGER);
 	}
-	
 	@Test public void testProcedureExecution1() throws Exception {
-		ICommand command = TranslationHelper.helpTranslate(TranslationHelper.BQT_VDB, "exec pm2.spTest8(1)"); //$NON-NLS-1$
+		Command command = TranslationHelper.helpTranslate(TranslationHelper.BQT_VDB, "exec pm2.spTest8(1)"); //$NON-NLS-1$
 		Connection connection = Mockito.mock(Connection.class);
 		CallableStatement cs = Mockito.mock(CallableStatement.class);
 		Mockito.stub(cs.getUpdateCount()).toReturn(-1);
 		Mockito.stub(cs.getInt(2)).toReturn(5);
 		Mockito.stub(connection.prepareCall("{  call spTest8(?,?)}")).toReturn(cs); //$NON-NLS-1$
 		Translator sqlTranslator = new Translator();
-		ExecutionContext context = EnvironmentUtility.createSecurityContext("user"); //$NON-NLS-1$
-		RuntimeMetadataImpl runtimeMetadata = new RuntimeMetadataImpl(FakeMetadataFactory.exampleBQTCached());
-		JDBCProcedureExecution procedureExecution = new JDBCProcedureExecution(command, connection, sqlTranslator, Mockito.mock(ConnectorLogger.class), new Properties(), runtimeMetadata, context, EnvironmentUtility.createEnvironment(new Properties()) );
+
+		JDBCManagedConnectionFactory config = Mockito.mock(JDBCManagedConnectionFactory.class);
+		Mockito.stub(config.getExtensionTranslationClass()).toReturn(sqlTranslator);
+		Mockito.stub(config.getLogger()).toReturn(Mockito.mock(ConnectorLogger.class));
+		
+		JDBCProcedureExecution procedureExecution = new JDBCProcedureExecution(command, connection, Mockito.mock(ExecutionContext.class), config );
 		procedureExecution.execute();
 		assertEquals(Arrays.asList(5), procedureExecution.getOutputParameterValues());
 		Mockito.verify(cs, Mockito.times(1)).registerOutParameter(2, Types.INTEGER);

Deleted: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCSourceConnection.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCSourceConnection.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCSourceConnection.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -1,118 +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.jdbc;
-
-import java.sql.Connection;
-import java.util.Properties;
-
-import org.teiid.connector.api.ConnectorEnvironment;
-import org.teiid.connector.basic.BasicConnectorCapabilities;
-import org.teiid.connector.jdbc.JDBCPropertyNames;
-import org.teiid.connector.jdbc.JDBCSourceConnection;
-import org.teiid.connector.jdbc.translator.Translator;
-
-import junit.framework.TestCase;
-
-import com.metamatrix.cdk.api.EnvironmentUtility;
-import com.metamatrix.core.util.SimpleMock;
-
-
-/** 
- * Test case for JDBCSourceConnection
- * @since 4.3
- */
-public class TestJDBCSourceConnection extends TestCase {
-    
-    private FakeConnection fakeConnection;
-    private Connection connection;
-    private ConnectorEnvironment environment;
-    
-    
-    public TestJDBCSourceConnection(String name) {
-        super(name);
-    }
-    
-    public void setUp() throws Exception {
-        fakeConnection = new FakeConnection();
-        connection = SimpleMock.createSimpleMock(fakeConnection, Connection.class);
-
-        final Properties properties = new Properties();
-        properties.setProperty(JDBCPropertyNames.EXT_CAPABILITY_CLASS, BasicConnectorCapabilities.class.getName());  
-        
-        environment = EnvironmentUtility.createEnvironment(properties, false); 
-    }
-    
-
-    /**
-     * Tests JDBCSourceConnection.isConnectionAlive() with a ConnectionQueryStrategy
-     * @since 4.3
-     */
-    public void testIsAlive() throws Exception {
-        JDBCSourceConnection sourceConnection = new JDBCSourceConnection(connection, environment, new Translator() {
-        	@Override
-        	public String getConnectionTestQuery() {
-        		return "select 1";
-        	}
-        }); 
-        
-        //closed connections should not be 'alive'        
-        fakeConnection.closed = true;
-        assertFalse(sourceConnection.isAlive());        
-        
-        //open connections should be 'alive'
-        fakeConnection.closed = false;
-        assertTrue(sourceConnection.isAlive());
-        
-        //failed connections should not be 'alive'
-        fakeConnection.fail = true;
-        assertFalse(sourceConnection.isAlive());
-        
-    }
-    
-    /**
-     * Tests JDBCSourceConnection.isConnectionAlive() with a null ConnectionStrategy
-     * @since 4.3
-     */
-    public void testIsAliveNullStrategy() throws Exception {
-        JDBCSourceConnection sourceConnection = new JDBCSourceConnection(connection, environment, new Translator() {
-        	@Override
-        	public String getConnectionTestQuery() {
-        		return null;
-        	}
-        }); 
-        
-        //closed connections should not be 'alive'        
-        fakeConnection.closed = true;
-        assertFalse(sourceConnection.isAlive());        
-        
-        //open connections should be 'alive'
-        fakeConnection.closed = false;
-        assertTrue(sourceConnection.isAlive());
-        
-        //without a strategy, failed connections are detected as 'alive'
-        fakeConnection.fail = true;
-        assertTrue(sourceConnection.isAlive());
-        
-    }
-    
-}

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCUpdateExecution.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCUpdateExecution.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCUpdateExecution.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -25,26 +25,23 @@
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.util.Arrays;
-import java.util.Properties;
 
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.teiid.connector.api.ConnectorLogger;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.ICommand;
-import org.teiid.connector.language.IInsert;
-import org.teiid.connector.language.IInsertExpressionValueSource;
-import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.Command;
+import org.teiid.connector.language.Insert;
+import org.teiid.connector.language.ExpressionValueSource;
+import org.teiid.connector.language.Literal;
 
-import com.metamatrix.cdk.api.EnvironmentUtility;
-
 public class TestJDBCUpdateExecution {
 
 	@Test public void testBulkUpdate() throws Exception {
-		ICommand command = TranslationHelper.helpTranslate(TranslationHelper.BQT_VDB, "insert into bqt1.smalla (intkey, intnum) values (1, 2)"); //$NON-NLS-1$
-		ILiteral value = ((ILiteral)((IInsertExpressionValueSource)((IInsert)command).getValueSource()).getValues().get(0));
-		ILiteral value1 = ((ILiteral)((IInsertExpressionValueSource)((IInsert)command).getValueSource()).getValues().get(1));
+		Command command = TranslationHelper.helpTranslate(TranslationHelper.BQT_VDB, "insert into BQT1.SmallA (IntKey, IntNum) values (1, 2)"); //$NON-NLS-1$
+		Literal value = ((Literal)((ExpressionValueSource)((Insert)command).getValueSource()).getValues().get(0));
+		Literal value1 = ((Literal)((ExpressionValueSource)((Insert)command).getValueSource()).getValues().get(1));
 		value.setMultiValued(true);
 		value.setBindValue(true);
 		value.setValue(Arrays.asList(1, 2));
@@ -55,9 +52,12 @@
 		PreparedStatement p = Mockito.mock(PreparedStatement.class);
 		Mockito.stub(p.executeBatch()).toReturn(new int [] {1, 1});
 		Mockito.stub(connection.prepareStatement("INSERT INTO SmallA (IntKey, IntNum) VALUES (?, ?)")).toReturn(p); //$NON-NLS-1$
-		Translator sqlTranslator = new Translator();
-		ExecutionContext context = EnvironmentUtility.createSecurityContext("user"); //$NON-NLS-1$
-		JDBCUpdateExecution updateExecution = new JDBCUpdateExecution(command, connection, sqlTranslator, Mockito.mock(ConnectorLogger.class), new Properties(), context);
+		
+		JDBCManagedConnectionFactory config = Mockito.mock(JDBCManagedConnectionFactory.class);
+		Mockito.stub(config.getExtensionTranslationClass()).toReturn(new Translator());
+		Mockito.stub(config.getLogger()).toReturn(Mockito.mock(ConnectorLogger.class));
+		
+		JDBCUpdateExecution updateExecution = new JDBCUpdateExecution(command, connection, Mockito.mock(ExecutionContext.class), config);
 		updateExecution.execute();
 		Mockito.verify(p, Mockito.times(2)).addBatch();
 	}

Copied: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TranslationHelper.class (from rev 1900, branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TranslationHelper.class)
===================================================================
(Binary files differ)

Deleted: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TranslationHelper.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TranslationHelper.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TranslationHelper.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -1,69 +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.jdbc;
-
-import static org.junit.Assert.*;
-
-import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.jdbc.translator.TranslatedCommand;
-import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.ICommand;
-
-import junit.framework.Assert;
-
-import com.metamatrix.cdk.api.EnvironmentUtility;
-import com.metamatrix.cdk.api.TranslationUtility;
-import com.metamatrix.cdk.unittest.FakeTranslationFactory;
-
-public class TranslationHelper {
-	
-    public static final String PARTS_VDB = "/PartsSupplier.vdb"; //$NON-NLS-1$
-    public static final String BQT_VDB = "/bqt.vdb"; //$NON-NLS-1$
-
-    public static ICommand helpTranslate(String vdbFileName, String sql) {
-    	TranslationUtility util = null;
-    	if (PARTS_VDB.equals(vdbFileName)) {
-    		util = new TranslationUtility(TranslationHelper.class.getResource(vdbFileName));
-    	} else if (BQT_VDB.equals(vdbFileName)){
-    		util = FakeTranslationFactory.getInstance().getBQTTranslationUtility();
-    	} else {
-    		Assert.fail("unknown vdb"); //$NON-NLS-1$
-    	}
-        return util.parseCommand(sql);        
-    }
-
-	public static void helpTestVisitor(String vdb, String input, String expectedOutput, Translator translator) throws ConnectorException {
-	    // Convert from sql to objects
-	    ICommand obj = helpTranslate(vdb, input);
-	    
-	    helpTestVisitor(expectedOutput, translator, obj);
-	}
-
-	public static void helpTestVisitor(String expectedOutput,
-			Translator translator, ICommand obj) throws ConnectorException {
-		TranslatedCommand tc = new TranslatedCommand(EnvironmentUtility.createSecurityContext("user"), translator); //$NON-NLS-1$
-	    tc.translateCommand(obj);
-	    assertEquals("Did not get correct sql", expectedOutput, tc.getSql());             //$NON-NLS-1$
-	}
-
-}

Copied: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TranslationHelper.java (from rev 1900, branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TranslationHelper.java)
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TranslationHelper.java	                        (rev 0)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TranslationHelper.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -0,0 +1,93 @@
+/*
+ * 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.jdbc;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.Collection;
+
+import junit.framework.Assert;
+
+import org.mockito.Mockito;
+import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.api.ExecutionContext;
+import org.teiid.connector.jdbc.translator.TranslatedCommand;
+import org.teiid.connector.jdbc.translator.Translator;
+import org.teiid.connector.language.Command;
+
+import com.metamatrix.cdk.api.TranslationUtility;
+import com.metamatrix.cdk.unittest.FakeTranslationFactory;
+import com.metamatrix.core.MetaMatrixRuntimeException;
+import com.metamatrix.query.function.metadata.FunctionMetadataReader;
+import com.metamatrix.query.function.metadata.FunctionMethod;
+
+public class TranslationHelper {
+	
+    public static final String PARTS_VDB = "/PartsSupplier.vdb"; //$NON-NLS-1$
+    public static final String BQT_VDB = "/bqt.vdb"; //$NON-NLS-1$
+
+    public static Command helpTranslate(String vdbFileName, String sql) {
+    	return helpTranslate(vdbFileName, null, sql);
+    }
+    
+    public static Command helpTranslate(String vdbFileName, String udf, String sql) {
+    	TranslationUtility util = null;
+    	if (PARTS_VDB.equals(vdbFileName)) {
+    		util = new TranslationUtility(TranslationHelper.class.getResource(vdbFileName));
+    	} else if (BQT_VDB.equals(vdbFileName)){
+    		util = FakeTranslationFactory.getInstance().getBQTTranslationUtility();
+    	} else {
+    		Assert.fail("unknown vdb"); //$NON-NLS-1$
+    	}
+    	
+    	if (udf != null) {
+    		try {
+				Collection <FunctionMethod> methods = FunctionMetadataReader.loadFunctionMethods(TranslationHelper.class.getResource(udf).openStream());
+				util.setUDF(methods);
+			} catch (IOException e) {
+				throw new MetaMatrixRuntimeException("failed to load UDF");
+			}
+    	}
+        return util.parseCommand(sql);        
+    }    
+
+	public static void helpTestVisitor(String vdb, String input, String expectedOutput, Translator translator) throws ConnectorException {
+		helpTestVisitor(vdb,null,input, expectedOutput, translator);
+	}
+	
+	public static void helpTestVisitor(String vdb, String udf, String input, String expectedOutput, Translator translator) throws ConnectorException {
+	    // Convert from sql to objects
+	    Command obj = helpTranslate(vdb, udf, input);
+	    
+	    helpTestVisitor(expectedOutput, translator, obj);
+	}	
+
+	public static void helpTestVisitor(String expectedOutput,
+			Translator translator, Command obj) throws ConnectorException {
+		TranslatedCommand tc = new TranslatedCommand(Mockito.mock(ExecutionContext.class), translator);
+	    tc.translateCommand(obj);
+	    assertEquals("Did not get correct sql", expectedOutput, tc.getSql());             //$NON-NLS-1$
+	}
+
+}

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/access/TestAccessSQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/access/TestAccessSQLTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/access/TestAccessSQLTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -22,17 +22,16 @@
 
 package org.teiid.connector.jdbc.access;
 
-import java.util.Properties;
+import junit.framework.TestCase;
 
+import org.mockito.Mockito;
 import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.jdbc.access.AccessSQLTranslator;
+import org.teiid.connector.api.ExecutionContext;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.TranslatedCommand;
 import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.ICommand;
+import org.teiid.connector.language.Command;
 
-import junit.framework.TestCase;
-
-import com.metamatrix.cdk.api.EnvironmentUtility;
 import com.metamatrix.cdk.unittest.FakeTranslationFactory;
 
 
@@ -46,7 +45,7 @@
     static {
         try {
             TRANSLATOR = new AccessSQLTranslator();        
-            TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+            TRANSLATOR.initialize( Mockito.mock(JDBCManagedConnectionFactory.class));
         } catch(ConnectorException e) {
             e.printStackTrace();    
         }
@@ -54,9 +53,9 @@
     
     public void helpTestVisitor(String input, String expectedOutput) throws ConnectorException {
         // Convert from sql to objects
-        ICommand obj = FakeTranslationFactory.getInstance().getBQTTranslationUtility().parseCommand(input);
+        Command obj = FakeTranslationFactory.getInstance().getBQTTranslationUtility().parseCommand(input);
         
-        TranslatedCommand tc = new TranslatedCommand(EnvironmentUtility.createSecurityContext("user"), TRANSLATOR);
+        TranslatedCommand tc = new TranslatedCommand(Mockito.mock(ExecutionContext.class), TRANSLATOR);
         tc.translateCommand(obj);
         
         

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2ConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2ConvertModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2ConvertModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -26,25 +26,24 @@
 import java.math.BigInteger;
 import java.sql.Timestamp;
 import java.util.Arrays;
-import java.util.Properties;
 
 import junit.framework.TestCase;
 
 import org.teiid.connector.api.TypeFacility;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
+import org.teiid.connector.language.LanguageFactory;
 
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
 import com.metamatrix.query.unittest.TimestampUtil;
 
 /**
  */
 public class TestDB2ConvertModifier extends TestCase {
 
-    private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
+    private static final LanguageFactory LANG_FACTORY = new LanguageFactory();
 
     /**
      * Constructor for TestSybaseConvertModifier.
@@ -54,17 +53,17 @@
         super(name);
     }
 
-    public String helpGetString(IExpression expr) throws Exception {
+    public String helpGetString(Expression expr) throws Exception {
         DB2SQLTranslator trans = new DB2SQLTranslator();
-        trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        trans.initialize(new JDBCManagedConnectionFactory());
         SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor(); 
         sqlVisitor.append(expr);  
         
         return sqlVisitor.toString();        
     }
 
-    public void helpTest(IExpression srcExpression, String tgtType, String expectedExpression) throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+    public void helpTest(Expression srcExpression, String tgtType, String expectedExpression) throws Exception {
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
             Arrays.asList( 
                 srcExpression,
                 LANG_FACTORY.createLiteral(tgtType, String.class)),

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2SqlTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2SqlTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2SqlTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -24,17 +24,16 @@
 
 import static org.junit.Assert.assertEquals;
 
-import java.util.Properties;
-
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.mockito.Mockito;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.ExecutionContext;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.TranslationHelper;
 import org.teiid.connector.jdbc.translator.TranslatedCommand;
-import org.teiid.connector.language.ICommand;
+import org.teiid.connector.language.Command;
 
-import com.metamatrix.cdk.api.EnvironmentUtility;
 import com.metamatrix.cdk.api.TranslationUtility;
 import com.metamatrix.cdk.unittest.FakeTranslationFactory;
 import com.metamatrix.core.util.UnitTestUtil;
@@ -48,7 +47,7 @@
     @BeforeClass
     public static void setUp() throws ConnectorException {
         TRANSLATOR = new DB2SQLTranslator();        
-        TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        TRANSLATOR.initialize(new JDBCManagedConnectionFactory());
     }
     
     public String getTestVDB() {
@@ -57,11 +56,9 @@
     
     public void helpTestVisitor(TranslationUtility util, String input, String expectedOutput) throws ConnectorException {
         // Convert from sql to objects
-        ICommand obj = util.parseCommand(input);
+        Command obj = util.parseCommand(input);
         
-        ExecutionContext context = EnvironmentUtility.createSecurityContext("user"); //$NON-NLS-1$
-                
-        TranslatedCommand tc = new TranslatedCommand(context, TRANSLATOR);
+        TranslatedCommand tc = new TranslatedCommand(Mockito.mock(ExecutionContext.class), TRANSLATOR);
         tc.translateCommand(obj);
         
         assertEquals("Did not get correct sql", expectedOutput, tc.getSql());             //$NON-NLS-1$

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/derby/TestDerbySQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/derby/TestDerbySQLTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/derby/TestDerbySQLTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -22,14 +22,12 @@
 
 package org.teiid.connector.jdbc.derby;
 
-import java.util.Properties;
-
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.TranslationHelper;
 
-import com.metamatrix.cdk.api.EnvironmentUtility;
 
 /**
  */
@@ -40,7 +38,7 @@
     @BeforeClass
     public static void setUp() throws ConnectorException {
         TRANSLATOR = new DerbySQLTranslator();        
-        TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        TRANSLATOR.initialize(new JDBCManagedConnectionFactory());
     }
     
     @Test

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/h2/TestH2Translator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/h2/TestH2Translator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/h2/TestH2Translator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -22,15 +22,12 @@
 
 package org.teiid.connector.jdbc.h2;
 
-import java.util.Properties;
-
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.TranslationHelper;
 
-import com.metamatrix.cdk.api.EnvironmentUtility;
-
 public class TestH2Translator {
 	
     private static H2Translator TRANSLATOR; 
@@ -38,7 +35,7 @@
     @BeforeClass
     public static void setUp() throws ConnectorException {
         TRANSLATOR = new H2Translator();        
-        TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        TRANSLATOR.initialize(new JDBCManagedConnectionFactory());
     }
 	
 	@Test public void testTimestampDiff() throws Exception {

Deleted: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQL5Translator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQL5Translator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQL5Translator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -1,54 +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.jdbc.mysql;
-
-import java.util.Properties;
-
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.jdbc.TranslationHelper;
-
-import com.metamatrix.cdk.api.EnvironmentUtility;
-
-/**
- */
-public class TestMySQL5Translator {
-
-    private static MySQL5Translator TRANSLATOR; 
-    
-    @BeforeClass public static void oneTimeSetup() throws ConnectorException {
-        TRANSLATOR = new MySQL5Translator();        
-        TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
-    }
-
-    @Test public void testChar() throws Exception {
-    	String input = "SELECT intkey, CHR(CONVERT(bigintegervalue, integer)) FROM BQT1.MediumA"; //$NON-NLS-1$
-        String output = "SELECT MediumA.IntKey, char(cast(MediumA.BigIntegerValue AS signed) USING ASCII) FROM MediumA"; //$NON-NLS-1$
-          
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
-            input, 
-            output, TRANSLATOR);
-    }
-    
-}

Copied: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQL5Translator.java (from rev 1900, branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQL5Translator.java)
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQL5Translator.java	                        (rev 0)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQL5Translator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -0,0 +1,51 @@
+/*
+ * 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.jdbc.mysql;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
+import org.teiid.connector.jdbc.TranslationHelper;
+
+/**
+ */
+public class TestMySQL5Translator {
+
+    private static MySQL5Translator TRANSLATOR; 
+    
+    @BeforeClass public static void oneTimeSetup() throws ConnectorException {
+        TRANSLATOR = new MySQL5Translator();        
+        TRANSLATOR.initialize(new JDBCManagedConnectionFactory());
+    }
+
+    @Test public void testChar() throws Exception {
+    	String input = "SELECT intkey, CHR(CONVERT(bigintegervalue, integer)) FROM BQT1.MediumA"; //$NON-NLS-1$
+        String output = "SELECT MediumA.IntKey, char(cast(MediumA.BigIntegerValue AS signed) USING ASCII) FROM MediumA"; //$NON-NLS-1$
+          
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+            input, 
+            output, TRANSLATOR);
+    }
+    
+}

Copied: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.class (from rev 1900, branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.class)
===================================================================
(Binary files differ)

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -22,16 +22,13 @@
 
 package org.teiid.connector.jdbc.mysql;
 
-import java.util.Properties;
-
 import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.TranslationHelper;
 
-import com.metamatrix.cdk.api.EnvironmentUtility;
-
 /**
  */
 public class TestMySQLTranslator {
@@ -40,7 +37,7 @@
     
     @BeforeClass public static void oneTimeSetup() throws ConnectorException {
         TRANSLATOR = new MySQLTranslator();        
-        TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        TRANSLATOR.initialize(new JDBCManagedConnectionFactory());
     }
 
     private String getTestVDB() {

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestDayWeekQuarterFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestDayWeekQuarterFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestDayWeekQuarterFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -24,25 +24,23 @@
 
 import java.sql.Timestamp;
 import java.util.Arrays;
-import java.util.Properties;
 
 import junit.framework.TestCase;
 
 import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
+import org.teiid.connector.language.Literal;
 
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
 import com.metamatrix.query.unittest.TimestampUtil;
 
 /**
  */
 public class TestDayWeekQuarterFunctionModifier extends TestCase {
 
-    private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
+    private static final LanguageFactory LANG_FACTORY = new LanguageFactory();
 
     /**
      * Constructor for TestHourFunctionModifier.
@@ -52,13 +50,13 @@
         super(name);
     }
 
-    public void helpTestMod(ILiteral c, String format, String expectedStr) throws Exception {
-        IFunction func = LANG_FACTORY.createFunction(format,  
+    public void helpTestMod(Literal c, String format, String expectedStr) throws Exception {
+        Function func = LANG_FACTORY.createFunction(format,  
             Arrays.asList(c),
             String.class);
         
         OracleSQLTranslator trans = new OracleSQLTranslator();
-        trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        trans.initialize(new JDBCManagedConnectionFactory());
         
         SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor(); 
         sqlVisitor.append(func);  
@@ -66,25 +64,25 @@
     }
 
     public void test1() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
         helpTestMod(arg1, SourceSystemFunctions.DAYOFYEAR, 
             "to_number(TO_CHAR({ts '2004-01-21 10:05:00.0'}, 'DDD'))"); //$NON-NLS-1$
     }
 
     public void test2() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
         helpTestMod(arg1, SourceSystemFunctions.DAYOFYEAR, 
             "to_number(TO_CHAR({d '2004-01-21'}, 'DDD'))"); //$NON-NLS-1$
     }
     
     public void test9() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
         helpTestMod(arg1, SourceSystemFunctions.QUARTER,
             "to_number(TO_CHAR({ts '2004-01-21 10:05:00.0'}, 'Q'))"); //$NON-NLS-1$
     }
 
     public void test10() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
         helpTestMod(arg1, SourceSystemFunctions.QUARTER, 
             "to_number(TO_CHAR({d '2004-01-21'}, 'Q'))"); //$NON-NLS-1$
     }

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLeftOrRightFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLeftOrRightFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLeftOrRightFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -23,23 +23,20 @@
 package org.teiid.connector.jdbc.oracle;
 
 import java.util.Arrays;
-import java.util.Properties;
 
 import junit.framework.TestCase;
 
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
+import org.teiid.connector.language.Literal;
 
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
-
 /**
  */
 public class TestLeftOrRightFunctionModifier extends TestCase {
 
-    private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
+    private static final LanguageFactory LANG_FACTORY = new LanguageFactory();
 
     /**
      * Constructor for TestHourFunctionModifier.
@@ -49,13 +46,13 @@
         super(name);
     }
 
-    public void helpTestMod(ILiteral c, ILiteral d, String target, String expectedStr) throws Exception {
-        IFunction func = LANG_FACTORY.createFunction(target,
+    public void helpTestMod(Literal c, Literal d, String target, String expectedStr) throws Exception {
+        Function func = LANG_FACTORY.createFunction(target,
             Arrays.asList( c, d ),
             String.class);
         
         OracleSQLTranslator trans = new OracleSQLTranslator();
-        trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        trans.initialize(new JDBCManagedConnectionFactory());
         
         SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor(); 
         sqlVisitor.append(func);  
@@ -63,15 +60,15 @@
     }
 
     public void test1() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral("1234214", String.class); //$NON-NLS-1$
-        ILiteral count = LANG_FACTORY.createLiteral(new Integer(11), Integer.class);
+        Literal arg1 = LANG_FACTORY.createLiteral("1234214", String.class); //$NON-NLS-1$
+        Literal count = LANG_FACTORY.createLiteral(new Integer(11), Integer.class);
         helpTestMod(arg1, count, "left", //$NON-NLS-1$
             "SUBSTR('1234214', 1, 11)"); //$NON-NLS-1$
     }
     
     public void test2() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral("1234214", String.class); //$NON-NLS-1$
-        ILiteral count = LANG_FACTORY.createLiteral(new Integer(2), Integer.class);
+        Literal arg1 = LANG_FACTORY.createLiteral("1234214", String.class); //$NON-NLS-1$
+        Literal count = LANG_FACTORY.createLiteral(new Integer(2), Integer.class);
         helpTestMod(arg1, count, "right", //$NON-NLS-1$
             "SUBSTR('1234214', (-1 * 2))"); //$NON-NLS-1$
     }

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLog10FunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLog10FunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLog10FunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -25,20 +25,19 @@
 import java.util.Arrays;
 import java.util.List;
 
-import org.teiid.connector.jdbc.oracle.Log10FunctionModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.visitor.util.SQLStringVisitor;
-
 import junit.framework.TestCase;
 
-import com.metamatrix.cdk.CommandBuilder;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
+import org.teiid.connector.language.Literal;
+import org.teiid.connector.visitor.util.SQLStringVisitor;
 
 /**
  */
 public class TestLog10FunctionModifier extends TestCase {
-
+	private static final LanguageFactory LANG_FACTORY = new LanguageFactory();
+	
     /**
      * Constructor for TestLog10FunctionModifier.
      * @param name
@@ -48,21 +47,21 @@
     }
 
     public void testModifier() {
-        ILiteral arg = CommandBuilder.getLanuageFactory().createLiteral(new Double(5.2), Double.class);
-        IFunction func = CommandBuilder.getLanuageFactory().createFunction("log10", Arrays.asList(arg), Double.class); //$NON-NLS-1$
+        Literal arg = LANG_FACTORY.createLiteral(new Double(5.2), Double.class);
+        Function func = LANG_FACTORY.createFunction("log10", Arrays.asList(arg), Double.class); //$NON-NLS-1$
         
-        Log10FunctionModifier modifier = new Log10FunctionModifier(CommandBuilder.getLanuageFactory());
+        Log10FunctionModifier modifier = new Log10FunctionModifier(LANG_FACTORY);
         modifier.translate(func);
         
         assertEquals("log", func.getName()); //$NON-NLS-1$
         assertEquals(Double.class, func.getType());
         
-        List<IExpression> outArgs = func.getParameters();
+        List<Expression> outArgs = func.getParameters();
         assertEquals(2, outArgs.size());
         assertEquals(arg, outArgs.get(1));
         
-        assertTrue(outArgs.get(1) instanceof ILiteral);
-        ILiteral newArg = (ILiteral) outArgs.get(0);
+        assertTrue(outArgs.get(1) instanceof Literal);
+        Literal newArg = (Literal) outArgs.get(0);
         assertEquals(Integer.class, newArg.getType());
         assertEquals(new Integer(10), newArg.getValue());
         

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestMonthOrDayNameFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestMonthOrDayNameFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestMonthOrDayNameFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -24,24 +24,22 @@
 
 import java.sql.Timestamp;
 import java.util.Arrays;
-import java.util.Properties;
 
 import junit.framework.TestCase;
 
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
+import org.teiid.connector.language.Literal;
 
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
 import com.metamatrix.query.unittest.TimestampUtil;
 
 /**
  */
 public class TestMonthOrDayNameFunctionModifier extends TestCase {
 
-    private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
+    private static final LanguageFactory LANG_FACTORY = new LanguageFactory();
 
     /**
      * Constructor for TestHourFunctionModifier.
@@ -51,13 +49,13 @@
         super(name);
     }
 
-    public void helpTestMod(ILiteral c, String format, String expectedStr) throws Exception {
-        IFunction func = LANG_FACTORY.createFunction(format.toLowerCase()+"name",  // "monthname" //$NON-NLS-1$ 
+    public void helpTestMod(Literal c, String format, String expectedStr) throws Exception {
+        Function func = LANG_FACTORY.createFunction(format.toLowerCase()+"name",  // "monthname" //$NON-NLS-1$ 
             Arrays.asList( c ),
             String.class);
         
         OracleSQLTranslator trans = new OracleSQLTranslator();
-        trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        trans.initialize(new JDBCManagedConnectionFactory());
         
         SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor(); 
         sqlVisitor.append(func);  
@@ -65,25 +63,25 @@
     }
 
     public void test1() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
         helpTestMod(arg1, "Month", //$NON-NLS-1$
             "rtrim(TO_CHAR({ts '2004-01-21 10:05:00.0'}, 'Month'))"); //$NON-NLS-1$
     }
 
     public void test2() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
         helpTestMod(arg1, "Month", //$NON-NLS-1$
             "rtrim(TO_CHAR({d '2004-01-21'}, 'Month'))"); //$NON-NLS-1$
     }
     
     public void test3() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
         helpTestMod(arg1, "Day",  //$NON-NLS-1$
             "rtrim(TO_CHAR({ts '2004-01-21 10:05:00.0'}, 'Day'))"); //$NON-NLS-1$
     }
 
     public void test4() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
         helpTestMod(arg1, "Day", //$NON-NLS-1$
             "rtrim(TO_CHAR({d '2004-01-21'}, 'Day'))"); //$NON-NLS-1$
     }

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleConvertModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleConvertModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -22,41 +22,40 @@
 
 package org.teiid.connector.jdbc.oracle;
 
+import static org.junit.Assert.*;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.sql.Timestamp;
 import java.util.Arrays;
-import java.util.Properties;
 
-import static org.junit.Assert.*;
-
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.teiid.connector.api.TypeFacility;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
 import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
 
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
 import com.metamatrix.query.unittest.TimestampUtil;
 
 /**
  */
 public class TestOracleConvertModifier {
 
-    private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
+    private static final LanguageFactory LANG_FACTORY = new LanguageFactory();
+    
     private static Translator TRANSLATOR = new OracleSQLTranslator(); 
     
     @BeforeClass public static void oneTimeSetup() throws Exception {
-        TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        TRANSLATOR.initialize(new JDBCManagedConnectionFactory());
     }
     
-    public String helpGetString(IExpression expr) throws Exception {
+    public String helpGetString(Expression expr) throws Exception {
         OracleSQLTranslator trans = new OracleSQLTranslator();
-        trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        trans.initialize(new JDBCManagedConnectionFactory());
         
         SQLConversionVisitor sqlVisitor = TRANSLATOR.getSQLConversionVisitor(); 
         sqlVisitor.append(expr);  
@@ -64,8 +63,8 @@
         return sqlVisitor.toString();        
     }
 
-    public void helpTest(IExpression srcExpression, String tgtType, String expectedExpression) throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+    public void helpTest(Expression srcExpression, String tgtType, String expectedExpression) throws Exception {
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
             Arrays.asList( 
                 srcExpression,
                 LANG_FACTORY.createLiteral(tgtType, String.class)),

Copied: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.class (from rev 1900, branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.class)
===================================================================
(Binary files differ)

Deleted: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -1,348 +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.jdbc.oracle;
-
-import static org.junit.Assert.*;
-
-import java.util.Properties;
-
-import org.junit.Test;
-import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.api.ExecutionContext;
-import org.teiid.connector.jdbc.JDBCPropertyNames;
-import org.teiid.connector.jdbc.oracle.OracleSQLTranslator;
-import org.teiid.connector.jdbc.translator.TranslatedCommand;
-import org.teiid.connector.language.ICommand;
-import org.teiid.dqp.internal.datamgr.impl.ExecutionContextImpl;
-import org.teiid.dqp.internal.datamgr.impl.FakeExecutionContextImpl;
-
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
-import com.metamatrix.cdk.api.TranslationUtility;
-import com.metamatrix.common.types.DataTypeManager;
-import com.metamatrix.core.util.UnitTestUtil;
-import com.metamatrix.query.metadata.QueryMetadataInterface;
-import com.metamatrix.query.unittest.FakeMetadataFacade;
-import com.metamatrix.query.unittest.FakeMetadataFactory;
-import com.metamatrix.query.unittest.FakeMetadataObject;
-import com.metamatrix.query.unittest.FakeMetadataStore;
-
-public class TestOracleSQLConversionVisitor {
-    private static ExecutionContext EMPTY_CONTEXT = new FakeExecutionContextImpl();
-    
-    private String getTestVDB() {
-        return UnitTestUtil.getTestDataPath() + "/PartsSupplierOracle.vdb"; //$NON-NLS-1$
-    }
-    
-    private void helpTestVisitor(String vdb, String input, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
-        helpTestVisitor(vdb, input, EMPTY_CONTEXT, dbmsTimeZone, expectedOutput, false);
-    }
-
-    private void helpTestVisitor(String vdb, String input, String dbmsTimeZone, String expectedOutput, boolean correctNaming) throws ConnectorException {
-        helpTestVisitor(vdb, input, EMPTY_CONTEXT, dbmsTimeZone, expectedOutput, correctNaming);
-    }
-
-    private void helpTestVisitor(String vdb, String input, ExecutionContext context, String dbmsTimeZone, String expectedOutput, boolean correctNaming) throws ConnectorException {
-        // Convert from sql to objects
-        TranslationUtility util = new TranslationUtility(vdb);
-        ICommand obj =  util.parseCommand(input, correctNaming, true);        
-		this.helpTestVisitor(obj, context, dbmsTimeZone, expectedOutput);
-    }
-
-    /** Helper method takes a QueryMetadataInterface impl instead of a VDB filename 
-     * @throws ConnectorException 
-     */
-    private void helpTestVisitor(QueryMetadataInterface metadata, String input, ExecutionContext context, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
-        // Convert from sql to objects
-        CommandBuilder commandBuilder = new CommandBuilder(metadata);
-        ICommand obj = commandBuilder.getCommand(input);
-		this.helpTestVisitor(obj, context, dbmsTimeZone, expectedOutput);
-    }
-    
-    private void helpTestVisitor(ICommand obj, ExecutionContext context, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
-
-        
-        // Apply function replacement
-        OracleSQLTranslator translator = new OracleSQLTranslator();
-        Properties p = new Properties();
-        if (dbmsTimeZone != null) {
-        	p.setProperty(JDBCPropertyNames.DATABASE_TIME_ZONE, dbmsTimeZone);
-        }
-        translator.initialize(EnvironmentUtility.createEnvironment(p, false));
-        // Convert back to SQL
-        TranslatedCommand tc = new TranslatedCommand(context, translator);
-        tc.translateCommand(obj);
-        
-        // Check stuff
-        assertEquals("Did not get correct sql", expectedOutput, tc.getSql());             //$NON-NLS-1$
-    }
-    
-    /** defect 21775 */
-    @Test public void testDateStuff() throws Exception {
-        String input = "SELECT ((CASE WHEN month(datevalue) < 10 THEN ('0' || convert(month(datevalue), string)) ELSE convert(month(datevalue), string) END || CASE WHEN dayofmonth(datevalue) < 10 THEN ('0' || convert(dayofmonth(datevalue), string)) ELSE convert(dayofmonth(datevalue), string) END) || convert(year(datevalue), string)), SUM(intkey) FROM bqt1.SMALLA GROUP BY datevalue"; //$NON-NLS-1$
-        String output = "SELECT CASE WHEN (CASE WHEN (CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END IS NULL) OR (CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END IS NULL) THEN NULL ELSE concat(CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END, CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE con!
 cat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END) END IS NULL) OR (to_char(EXTRACT(YEAR FROM SmallA.DateValue)) IS NULL) THEN NULL ELSE concat(CASE WHEN (CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END IS NULL) OR (CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END IS NULL) THEN NULL ELSE concat(CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FR!
 OM SmallA.DateValue)) END, CASE WHEN EXTRACT(DAY FROM SmallA.D!
 ateValue
) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END) END, to_char(EXTRACT(YEAR FROM SmallA.DateValue))) END, SUM(SmallA.IntKey) FROM SmallA GROUP BY SmallA.DateValue"; //$NON-NLS-1$
-        
-        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
-                        input, 
-                        EMPTY_CONTEXT, null, output);
-    }
-    
-    @Test public void testAliasedGroup() throws Exception {
-        helpTestVisitor(getTestVDB(),
-            "select y.part_name from parts as y", //$NON-NLS-1$
-            null,
-            "SELECT y.PART_NAME FROM PARTS y"); //$NON-NLS-1$
-    }
-    
-    @Test public void testDateLiteral() throws Exception {
-        helpTestVisitor(getTestVDB(),
-            "select {d '2002-12-31'} FROM parts", //$NON-NLS-1$
-            null,
-            "SELECT {d '2002-12-31'} FROM PARTS"); //$NON-NLS-1$
-    }
-
-    @Test public void testTimeLiteral() throws Exception {
-        helpTestVisitor(getTestVDB(),
-            "select {t '13:59:59'} FROM parts", //$NON-NLS-1$
-            null,
-            "SELECT {ts '1970-01-01 13:59:59'} FROM PARTS"); //$NON-NLS-1$
-    }
-
-    @Test public void testTimestampLiteral() throws Exception {
-        helpTestVisitor(getTestVDB(),
-            "select {ts '2002-12-31 13:59:59'} FROM parts", //$NON-NLS-1$
-            null,
-            "SELECT {ts '2002-12-31 13:59:59.0'} FROM PARTS"); //$NON-NLS-1$
-    }
-
-    @Test public void testUnionOrderByWithThreeBranches() throws Exception {
-        helpTestVisitor(getTestVDB(),
-                        "select part_id id FROM parts UNION ALL select part_name FROM parts UNION ALL select part_id FROM parts ORDER BY id", //$NON-NLS-1$
-                        null,
-                        "SELECT g_2.PART_ID AS c_0 FROM PARTS g_2 UNION ALL SELECT g_1.PART_NAME AS c_0 FROM PARTS g_1 UNION ALL SELECT g_0.PART_ID AS c_0 FROM PARTS g_0 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
-                        true); 
-    }
-    
-    @Test public void testUnionOrderBy() throws Exception {
-        helpTestVisitor(getTestVDB(),
-                        "select part_id FROM parts UNION ALL select part_name FROM parts ORDER BY part_id", //$NON-NLS-1$
-                        null,
-                        "SELECT g_1.PART_ID AS c_0 FROM PARTS g_1 UNION ALL SELECT g_0.PART_NAME AS c_0 FROM PARTS g_0 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
-                        true); 
-    }
-
-    @Test public void testUnionOrderBy2() throws Exception {
-        helpTestVisitor(getTestVDB(),
-                        "select part_id as p FROM parts UNION ALL select part_name FROM parts ORDER BY p", //$NON-NLS-1$
-                        null,
-                        "SELECT PARTS.PART_ID AS p FROM PARTS UNION ALL SELECT PARTS.PART_NAME FROM PARTS ORDER BY p NULLS FIRST"); //$NON-NLS-1$
-    }
-
-    @Test public void testUpdateWithFunction() throws Exception {
-        String input = "UPDATE bqt1.smalla SET intkey = intkey + 1"; //$NON-NLS-1$
-        String output = "UPDATE SmallA SET IntKey = (SmallA.IntKey + 1)"; //$NON-NLS-1$
-        
-        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
-                input, 
-                EMPTY_CONTEXT, null, output);
-    }
-    
-
-    /**
-     * Oracle's DUAL table is a pseudo-table; element names cannot be 
-     * fully qualified since the table doesn't really exist nor contain
-     * any columns.  But this requires modeling the DUAL table in 
-     * MM as if it were a real physical table, and also modeling any
-     * columns in the table.  Case 3742
-     * 
-     * @since 4.3
-     */
-    @Test public void testDUAL() throws Exception {
-        String input = "SELECT something FROM DUAL"; //$NON-NLS-1$
-        String output = "SELECT something FROM DUAL"; //$NON-NLS-1$
-               
-        helpTestVisitor(getTestVDB(),
-            input, 
-            null,
-            output);
-    }
-
-    /**
-     * Test Oracle's rownum pseudo-column.  Not a real column, so it can't
-     * be fully-qualified with a table name.  MM requires this column to be
-     * modeled in any table which the user wants to use rownum with.
-     * Case 3739
-     * 
-     * @since 4.3
-     */
-    @Test public void testROWNUM() throws Exception {
-        String input = "SELECT part_name, rownum FROM parts"; //$NON-NLS-1$
-        String output = "SELECT PARTS.PART_NAME, ROWNUM FROM PARTS"; //$NON-NLS-1$
-               
-        helpTestVisitor(getTestVDB(),
-            input, 
-            null,
-            output);        
-    }
-    
-    /**
-     * Test Oracle's rownum pseudo-column.  Not a real column, so it can't
-     * be fully-qualified with a table name.  MM requires this column to be
-     * modeled in any table which the user wants to use rownum with.  Case 3739
-     * 
-     * @since 4.3
-     */
-    @Test public void testROWNUM2() throws Exception {
-        String input = "SELECT part_name FROM parts where rownum < 100"; //$NON-NLS-1$
-        String output = "SELECT PARTS.PART_NAME FROM PARTS WHERE ROWNUM < 100"; //$NON-NLS-1$
-               
-        helpTestVisitor(getTestVDB(),
-            input, 
-            null,
-            output);        
-    }    
-    
-    /**
-     * Case 3744.  Test that an Oracle-specific db hint, delivered as a String via command
-     * payload, is added to the translated SQL.
-     * 
-     * @since 4.3
-     */
-    @Test public void testOracleCommentPayload() throws Exception {
-        String input = "SELECT part_name, rownum FROM parts"; //$NON-NLS-1$
-        String output = "SELECT /*+ ALL_ROWS */ PARTS.PART_NAME, ROWNUM FROM PARTS"; //$NON-NLS-1$
-               
-        String hint = "/*+ ALL_ROWS */"; //$NON-NLS-1$
-        ExecutionContext context = new ExecutionContextImpl(null, null, null, null, hint, null, "", null, null, null); //$NON-NLS-1$
-        
-        helpTestVisitor(getTestVDB(),
-            input, 
-            context,
-            null,
-            output,
-            false);        
-    }
-    
-    /**
-     * reproducing this case relies on the name in source for the table being different from
-     * the name
-     */
-    @Test public void testCase3845() throws Exception {
-        
-        String input = "SELECT (DoubleNum * 1.0) FROM BQT1.Smalla"; //$NON-NLS-1$
-        String output = "SELECT (SmallishA.DoubleNum * 1.0) FROM SmallishA"; //$NON-NLS-1$
-
-        FakeMetadataFacade metadata = exampleCase3845();
-
-        helpTestVisitor(metadata, input, EMPTY_CONTEXT, null, output);
-    }
-    
-    /** create fake BQT metadata to test this case, name in source is important */
-    private FakeMetadataFacade exampleCase3845() { 
-        // Create models
-        FakeMetadataObject bqt1 = FakeMetadataFactory.createPhysicalModel("BQT1"); //$NON-NLS-1$
-        FakeMetadataObject bqt1SmallA = FakeMetadataFactory.createPhysicalGroup("BQT1.SmallA", bqt1); //$NON-NLS-1$
-        bqt1SmallA.putProperty(FakeMetadataObject.Props.NAME_IN_SOURCE, "SmallishA");//$NON-NLS-1$
-        FakeMetadataObject doubleNum = FakeMetadataFactory.createElement("BQT1.SmallA.DoubleNum", bqt1SmallA, DataTypeManager.DefaultDataTypes.DOUBLE, 0); //$NON-NLS-1$
-
-        FakeMetadataStore store = new FakeMetadataStore();
-        store.addObject(bqt1);
-        store.addObject(bqt1SmallA);
-        store.addObject(doubleNum);
-        return new FakeMetadataFacade(store);
-    }
-
-	public void helpTestVisitor(String vdb, String input, String expectedOutput) throws ConnectorException {
-		helpTestVisitor(vdb, input, null, expectedOutput);
-	}
-
-    @Test public void testRowLimit2() throws Exception {
-        String input = "select intkey from bqt1.smalla limit 100"; //$NON-NLS-1$
-        String output = "SELECT * FROM (SELECT SmallA.IntKey FROM SmallA) WHERE ROWNUM <= 100"; //$NON-NLS-1$
-               
-        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
-                input, 
-                EMPTY_CONTEXT, null, output);        
-    }
-    
-    @Test public void testRowLimit3() throws Exception {
-        String input = "select intkey from bqt1.smalla limit 50, 100"; //$NON-NLS-1$
-        String output = "SELECT * FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (SELECT SmallA.IntKey FROM SmallA) VIEW_FOR_LIMIT WHERE ROWNUM <= 150) WHERE ROWNUM_ > 50"; //$NON-NLS-1$
-               
-        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
-                input, 
-                EMPTY_CONTEXT, null, output);        
-    }
-            
-    @Test public void testLimitWithNestedInlineView() throws Exception {
-        String input = "select max(intkey), stringkey from (select intkey, stringkey from bqt1.smalla order by intkey limit 100) x group by stringkey"; //$NON-NLS-1$
-        String output = "SELECT MAX(x.intkey), x.stringkey FROM (SELECT * FROM (SELECT SmallA.IntKey, SmallA.StringKey FROM SmallA ORDER BY intkey NULLS FIRST) WHERE ROWNUM <= 100) x GROUP BY x.stringkey"; //$NON-NLS-1$
-               
-        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
-                input, 
-                EMPTY_CONTEXT, null, output);        
-    }
-    
-    @Test public void testExceptAsMinus() throws Exception {
-        String input = "select intkey, intnum from bqt1.smalla except select intnum, intkey from bqt1.smallb"; //$NON-NLS-1$
-        String output = "SELECT SmallA.IntKey, SmallA.IntNum FROM SmallA MINUS SELECT SmallB.IntNum, SmallB.IntKey FROM SmallB"; //$NON-NLS-1$
-               
-        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
-                input, 
-                EMPTY_CONTEXT, null, output);        
-    }
-    
-    @Test public void testConcat2_useLiteral() throws Exception {
-        String sql = "select concat2(stringnum,'_xx') from BQT1.Smalla"; //$NON-NLS-1$       
-        String expected = "SELECT concat(nvl(SmallA.StringNum, ''), '_xx') FROM SmallA"; //$NON-NLS-1$
-        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
-    }
-
-    @Test public void testConcat2() throws Exception {
-        String sql = "select concat2(stringnum, stringnum) from BQT1.Smalla"; //$NON-NLS-1$       
-        String expected = "SELECT CASE WHEN SmallA.StringNum IS NULL THEN NULL ELSE concat(nvl(SmallA.StringNum, ''), nvl(SmallA.StringNum, '')) END FROM SmallA"; //$NON-NLS-1$
-        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
-    }
-    
-    @Test public void testConcat() throws Exception {
-        String sql = "select concat(stringnum, stringkey) from BQT1.Smalla"; //$NON-NLS-1$       
-        String expected = "SELECT CASE WHEN (SmallA.StringNum IS NULL) OR (SmallA.StringKey IS NULL) THEN NULL ELSE concat(SmallA.StringNum, SmallA.StringKey) END FROM SmallA"; //$NON-NLS-1$
-        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
-    }
-    
-    @Test public void testConcat_withLiteral() throws Exception {
-        String sql = "select stringnum || '1' from BQT1.Smalla"; //$NON-NLS-1$       
-        String expected = "SELECT CASE WHEN SmallA.StringNum IS NULL THEN NULL ELSE concat(SmallA.StringNum, '1') END FROM SmallA"; //$NON-NLS-1$
-        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
-    }
-    
-    @Test public void testRowLimitWithUnionOrderBy() throws Exception {
-        String input = "(select intkey from bqt1.smalla limit 50, 100) union select intnum from bqt1.smalla order by intkey"; //$NON-NLS-1$
-        String output = "SELECT c_0 FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (SELECT g_1.IntKey AS c_0 FROM SmallA g_1) VIEW_FOR_LIMIT WHERE ROWNUM <= 150) WHERE ROWNUM_ > 50 UNION SELECT g_0.IntNum AS c_0 FROM SmallA g_0 ORDER BY c_0 NULLS FIRST"; //$NON-NLS-1$
-               
-        CommandBuilder commandBuilder = new CommandBuilder(FakeMetadataFactory.exampleBQTCached());
-        ICommand obj = commandBuilder.getCommand(input, true, true);
-		this.helpTestVisitor(obj, EMPTY_CONTEXT, null, output);
-    }
-
-}

Copied: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleTranslator.class (from rev 1900, branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleTranslator.class)
===================================================================
(Binary files differ)

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -22,86 +22,70 @@
 
 package org.teiid.connector.jdbc.oracle;
 
-import java.io.File;
-import java.net.URL;
+import static org.junit.Assert.*;
+
+import java.util.List;
 import java.util.Properties;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.api.ExecutionContext;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
+import org.teiid.connector.jdbc.JDBCPropertyNames;
 import org.teiid.connector.jdbc.TranslationHelper;
 import org.teiid.connector.jdbc.translator.TranslatedCommand;
 import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.ICommand;
+import org.teiid.connector.language.Command;
+import org.teiid.connector.metadata.runtime.Column;
+import org.teiid.connector.metadata.runtime.MetadataStore;
+import org.teiid.connector.metadata.runtime.Schema;
+import org.teiid.connector.metadata.runtime.Table;
+import org.teiid.dqp.internal.datamgr.impl.ExecutionContextImpl;
+import org.teiid.dqp.internal.datamgr.impl.FakeExecutionContextImpl;
+import org.teiid.metadata.CompositeMetadataStore;
+import org.teiid.metadata.TransformationMetadata;
 
-import com.metamatrix.cdk.api.EnvironmentUtility;
-import com.metamatrix.cdk.unittest.FakeTranslationFactory;
-import com.metamatrix.query.function.FunctionLibraryManager;
-import com.metamatrix.query.function.UDFSource;
+import com.metamatrix.cdk.CommandBuilder;
+import com.metamatrix.cdk.api.TranslationUtility;
+import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.core.util.UnitTestUtil;
+import com.metamatrix.query.metadata.QueryMetadataInterface;
+import com.metamatrix.query.unittest.FakeMetadataFactory;
+import com.metamatrix.query.unittest.RealMetadataFactory;
 
 public class TestOracleTranslator {
 	
     /**
      * An instance of {@link Translator} which has already been initialized.  
      */
-    private static Translator TRANSLATOR; 
+    private Translator TRANSLATOR;
+    private String UDF = "/OracleSpatialFunctions.xmi"; //$NON-NLS-1$;
+    private static ExecutionContext EMPTY_CONTEXT = new FakeExecutionContextImpl();
 
-    @BeforeClass public static void oneTimeSetup() throws Exception {
-        TRANSLATOR = new OracleSQLTranslator();        
-        TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
-        // Define a UDFSource to hold the reference to our function definitions
-        File udfFile = new File("src/main/resources/OracleSpatialFunctions.xmi"); //$NON-NLS-1$;
-        URL[] urls = new URL[0];            
-        UDFSource udfSource = new UDFSource(udfFile.toURI().toURL(), urls);
-        FunctionLibraryManager.deregisterSource(udfSource);
-        FunctionLibraryManager.registerSource(udfSource);
+    @Before 
+    public void setup() throws Exception {
+        TRANSLATOR = new OracleSQLTranslator();     
+        TRANSLATOR.initialize(new JDBCManagedConnectionFactory());
     }
 
-    /**
-     * Performs cleanup tasks that should be executed after all test methods 
-     * have been executed.  This method should only be executed once and does 
-     * not protect from multiple executions.  It is intended to be executed by 
-     * the JUnit4 test framework.
-     * <p>
-     * This method unloads the function definitions supported by the Oracle Spatial 
-     * Connector from the global instance of <code>FunctionLibraryManager</code> 
-     * so that they are no longer resolvable during query parsing. 
-     * 
-     * @throws Exception
-     */
-    @AfterClass public static void oneTimeFinished() throws Exception {
-        // Define a UDFSource to hold the reference to our function definitions
-        File udfFile = new File("src/main/resources/OracleSpatialFunctions.xmi"); //$NON-NLS-1$;
-        URL[] urls = new URL[0];            
-        UDFSource udfSource = new UDFSource(udfFile.toURI().toURL(), urls);
-        FunctionLibraryManager.deregisterSource(udfSource);
-    }
-
 	private void helpTestVisitor(String input, String expectedOutput) throws ConnectorException {
-        // Convert from sql to objects
-        ICommand obj = FakeTranslationFactory.getInstance().getAutoIncrementTranslationUtility().parseCommand(input);
-        
-        TranslatedCommand tc = new TranslatedCommand(EnvironmentUtility.createSecurityContext("user"), TRANSLATOR); //$NON-NLS-1$
-        tc.translateCommand(obj);
-        
-        // Check stuff
-        org.junit.Assert.assertEquals("Did not get correct sql", expectedOutput, tc.getSql()); //$NON-NLS-1$
+		helpTestVisitor(getOracleSpecificMetadata(), input, EMPTY_CONTEXT, null, expectedOutput);
     }
 	
 	@Test public void testInsertWithSequnce() throws Exception {
-		helpTestVisitor("insert into test.group (e0) values (1)", "INSERT INTO group (e0, e1) VALUES (1, MYSEQUENCE.nextVal)"); //$NON-NLS-1$ //$NON-NLS-2$
+		helpTestVisitor("insert into smalla (doublenum) values (1)", "INSERT INTO SmallishA (DoubleNum, ID) VALUES (1.0, MYSEQUENCE.nextVal)"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 	
 	@Test public void testInsertWithSequnce1() throws Exception {
-		helpTestVisitor("insert into test.group (e0, e1) values (1, 'x')", "INSERT INTO group (e0, e1) VALUES (1, 'x')"); //$NON-NLS-1$ //$NON-NLS-2$
+		helpTestVisitor("insert into smalla (doublenum, id) values (1, 1)", "INSERT INTO SmallishA (DoubleNum, ID) VALUES (1.0, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 	
 	@Test public void testJoins() throws Exception {
         String input = "select smalla.intkey from bqt1.smalla inner join bqt1.smallb on smalla.stringkey=smallb.stringkey cross join bqt1.mediuma"; //$NON-NLS-1$
         String output = "SELECT SmallA.IntKey FROM SmallA INNER JOIN SmallB ON SmallA.StringKey = SmallB.StringKey CROSS JOIN MediumA"; //$NON-NLS-1$
           
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
             input, 
             output, TRANSLATOR);        
     }
@@ -110,7 +94,7 @@
         String input = "select smalla.intkey from bqt1.smalla cross join (bqt1.smallb cross join bqt1.mediuma)"; //$NON-NLS-1$
         String output = "SELECT SmallA.IntKey FROM SmallA CROSS JOIN (SmallB CROSS JOIN MediumA)"; //$NON-NLS-1$
       
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
             input, 
             output, TRANSLATOR);        
     }
@@ -119,7 +103,7 @@
         String input = "SELECT char(convert(STRINGNUM, integer) + 100) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT chr((trunc(to_number(SmallA.StringNum)) + 100)) FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
             input, output, 
             TRANSLATOR);
     }
@@ -128,7 +112,7 @@
         String input = "SELECT convert(STRINGNUM, long) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT trunc(to_number(SmallA.StringNum)) FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -137,7 +121,7 @@
         String input = "SELECT convert(convert(STRINGNUM, long), string) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT to_char(trunc(to_number(SmallA.StringNum))) FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -146,7 +130,7 @@
         String input = "SELECT convert(convert(TIMESTAMPVALUE, date), string) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT to_char(trunc(cast(SmallA.TimestampValue AS date)), 'YYYY-MM-DD') FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -154,7 +138,7 @@
         String input = "SELECT convert(convert(TIMEVALUE, timestamp), string) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT to_char(cast(SmallA.TimeValue AS timestamp), 'YYYY-MM-DD HH24:MI:SS.FF') FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -162,7 +146,7 @@
         String input = "SELECT nvl(INTNUM, 'otherString') FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT nvl(to_char(SmallA.IntNum), 'otherString') FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -170,7 +154,7 @@
         String input = "SELECT convert(convert(STRINGNUM, integer), string) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT to_char(trunc(to_number(SmallA.StringNum))) FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -187,7 +171,7 @@
         String input = "SELECT locate(INTNUM, 'chimp', 1) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT INSTR('chimp', to_char(SmallA.IntNum), 1) FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -204,7 +188,7 @@
         String input = "SELECT locate(STRINGNUM, 'chimp') FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT INSTR('chimp', SmallA.StringNum) FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -221,7 +205,7 @@
         String input = "SELECT locate(INTNUM, '234567890', 1) FROM BQT1.SMALLA WHERE INTKEY = 26"; //$NON-NLS-1$
         String output = "SELECT INSTR('234567890', to_char(SmallA.IntNum), 1) FROM SmallA WHERE SmallA.IntKey = 26";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -238,7 +222,7 @@
         String input = "SELECT locate('c', 'chimp', 1) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT 1 FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -255,7 +239,7 @@
         String input = "SELECT locate(STRINGNUM, 'chimp', -5) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT INSTR('chimp', SmallA.StringNum, 1) FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -272,7 +256,7 @@
         String input = "SELECT locate(STRINGNUM, 'chimp', INTNUM) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT INSTR('chimp', SmallA.StringNum, CASE WHEN SmallA.IntNum < 1 THEN 1 ELSE SmallA.IntNum END) FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -289,7 +273,7 @@
         String input = "SELECT locate(STRINGNUM, 'chimp', LOCATE(STRINGNUM, 'chimp') + 1) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT INSTR('chimp', SmallA.StringNum, CASE WHEN (INSTR('chimp', SmallA.StringNum) + 1) < 1 THEN 1 ELSE (INSTR('chimp', SmallA.StringNum) + 1) END) FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -298,7 +282,7 @@
         String input = "SELECT substring(StringNum, 1) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT substr(SmallA.StringNum, 1) FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -306,7 +290,7 @@
         String input = "SELECT substring(StringNum, 1, 1) FROM BQT1.SMALLA"; //$NON-NLS-1$
         String output = "SELECT substr(SmallA.StringNum, 1, 1) FROM SmallA";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -314,7 +298,7 @@
         String input = "SELECT IntKey FROM BQT1.SMALLA UNION SELECT IntKey FROM BQT1.SMALLB ORDER BY IntKey"; //$NON-NLS-1$
         String output = "SELECT SmallA.IntKey FROM SmallA UNION SELECT SmallB.IntKey FROM SmallB ORDER BY IntKey NULLS FIRST";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -322,7 +306,7 @@
         String input = "select intkey from bqt1.smalla limit 10, 0"; //$NON-NLS-1$
         String output = "SELECT * FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (SELECT SmallA.IntKey FROM SmallA) VIEW_FOR_LIMIT WHERE ROWNUM <= 10) WHERE ROWNUM_ > 10"; //$NON-NLS-1$
                
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -330,7 +314,7 @@
         String input = "select intkey from bqt1.smalla limit 0, 10"; //$NON-NLS-1$
         String output = "SELECT * FROM (SELECT SmallA.IntKey FROM SmallA) WHERE ROWNUM <= 10"; //$NON-NLS-1$
                
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -338,7 +322,7 @@
         String input = "select intkey from bqt1.smalla limit 1, 10"; //$NON-NLS-1$
         String output = "SELECT * FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (SELECT SmallA.IntKey FROM SmallA) VIEW_FOR_LIMIT WHERE ROWNUM <= 11) WHERE ROWNUM_ > 1"; //$NON-NLS-1$
                
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -346,7 +330,7 @@
         String input = "select intkey from bqt1.mediuma limit 100"; //$NON-NLS-1$
         String output = "SELECT * FROM (SELECT MediumA.IntKey FROM MediumA) WHERE ROWNUM <= 100"; //$NON-NLS-1$
                
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -354,7 +338,7 @@
         String input = "select intkey from bqt1.mediuma limit 50, 100"; //$NON-NLS-1$
         String output = "SELECT * FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (SELECT MediumA.IntKey FROM MediumA) VIEW_FOR_LIMIT WHERE ROWNUM <= 150) WHERE ROWNUM_ > 50"; //$NON-NLS-1$
                
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -362,15 +346,15 @@
     @Test public void testConcat2_useLiteral() throws Exception {        
         String input = "select concat2(stringnum,'_xx') from bqt1.Smalla"; //$NON-NLS-1$
         String output = "SELECT concat(nvl(SmallA.StringNum, ''), '_xx') FROM SmallA"; //$NON-NLS-1$
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
 
     @Test public void testConcat2() throws Exception {        
         String input = "select concat2(stringnum, stringkey) from bqt1.Smalla"; //$NON-NLS-1$
-        String output = "SELECT CASE WHEN (SmallA.StringNum IS NULL) AND (SmallA.StringKey IS NULL) THEN NULL ELSE concat(nvl(SmallA.StringNum, ''), nvl(SmallA.StringKey, '')) END FROM SmallA"; //$NON-NLS-1$
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        String output = "SELECT CASE WHEN SmallA.StringNum IS NULL AND SmallA.StringKey IS NULL THEN NULL ELSE concat(nvl(SmallA.StringNum, ''), nvl(SmallA.StringKey, '')) END FROM SmallA"; //$NON-NLS-1$
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -386,7 +370,7 @@
         String input = "SELECT a.INTKEY FROM BQT1.SMALLA A, BQT1.SMALLB B WHERE sdo_relate(A.OBJECTVALUE, b.OBJECTVALUE, 'mask=ANYINTERACT') = true"; //$NON-NLS-1$
         String output = "SELECT /*+ ORDERED */ A.IntKey FROM SmallA A, SmallB B WHERE sdo_relate(A.ObjectValue, B.ObjectValue, 'mask=ANYINTERACT') = 'true'";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -402,7 +386,7 @@
         String input = "SELECT INTKEY FROM BQT1.SMALLA WHERE sdo_within_distance(OBJECTVALUE, 'SDO_GEOMETRY(2001, 8307, MDSYS.SDO_POINT_TYPE(90.0, -45.0, NULL), NULL, NULL)', 'DISTANCE=25.0 UNIT=NAUT_MILE') = true"; //$NON-NLS-1$
         String output = "SELECT SmallA.IntKey FROM SmallA WHERE sdo_within_distance(SmallA.ObjectValue, SDO_GEOMETRY(2001, 8307, MDSYS.SDO_POINT_TYPE(90.0, -45.0, NULL), NULL, NULL), 'DISTANCE=25.0 UNIT=NAUT_MILE') = 'true'";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -418,7 +402,7 @@
         String input = "SELECT INTKEY FROM BQT1.SMALLA WHERE sdo_within_distance('SDO_GEOMETRY(2001, 8307, MDSYS.SDO_POINT_TYPE(90.0, -45.0, NULL), NULL, NULL)', OBJECTVALUE, 'DISTANCE=25.0 UNIT=NAUT_MILE') = true"; //$NON-NLS-1$
         String output = "SELECT SmallA.IntKey FROM SmallA WHERE sdo_within_distance(SDO_GEOMETRY(2001, 8307, MDSYS.SDO_POINT_TYPE(90.0, -45.0, NULL), NULL, NULL), SmallA.ObjectValue, 'DISTANCE=25.0 UNIT=NAUT_MILE') = 'true'";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -439,7 +423,7 @@
         // as the signature was the best match for this query.
         String output = "SELECT SmallA.IntKey FROM SmallA WHERE sdo_within_distance(SmallA.StringKey, SDO_GEOMETRY(2001, 8307, MDSYS.SDO_POINT_TYPE(90.0, -45.0, NULL), NULL, NULL), 'DISTANCE=25.0 UNIT=NAUT_MILE') = ?";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -460,7 +444,7 @@
         // as the signature was the best match for this query.
         String output = "SELECT SmallA.IntKey FROM SmallA WHERE sdo_within_distance(SDO_GEOMETRY(2001, 8307, MDSYS.SDO_POINT_TYPE(90.0, -45.0, NULL), NULL, NULL), SDO_GEOMETRY(2001, 8307, MDSYS.SDO_POINT_TYPE(90.0, -45.0, NULL), NULL, NULL), 'DISTANCE=25.0 UNIT=NAUT_MILE') = ?";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -476,7 +460,7 @@
         String input = "SELECT a.INTKEY FROM BQT1.SMALLA A, BQT1.SMALLB B WHERE sdo_within_distance(a.OBJECTVALUE, b.OBJECTVALUE, 'DISTANCE=25.0 UNIT=NAUT_MILE') = true"; //$NON-NLS-1$
         String output = "SELECT A.IntKey FROM SmallA A, SmallB B WHERE sdo_within_distance(A.ObjectValue, B.ObjectValue, 'DISTANCE=25.0 UNIT=NAUT_MILE') = 'true'";  //$NON-NLS-1$
 
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -485,7 +469,7 @@
         String input = "SELECT log(CONVERT(stringkey, INTEGER)) FROM bqt1.smalla"; //$NON-NLS-1$
         String output = "SELECT ln(trunc(to_number(SmallA.StringKey))) FROM SmallA"; //$NON-NLS-1$
     
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -494,7 +478,7 @@
         String input = "SELECT log10(CONVERT(stringkey, INTEGER)) FROM bqt1.smalla"; //$NON-NLS-1$
         String output = "SELECT log(10, trunc(to_number(SmallA.StringKey))) FROM SmallA"; //$NON-NLS-1$
     
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }
@@ -503,9 +487,280 @@
         String input = "SELECT char(CONVERT(stringkey, INTEGER)), lcase(stringkey), ucase(stringkey), ifnull(stringkey, 'x') FROM bqt1.smalla"; //$NON-NLS-1$
         String output = "SELECT chr(trunc(to_number(SmallA.StringKey))), lower(SmallA.StringKey), upper(SmallA.StringKey), nvl(SmallA.StringKey, 'x') FROM SmallA"; //$NON-NLS-1$
         
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, UDF,
                 input, output, 
                 TRANSLATOR);
     }    
+    
+    private String getTestVDB() {
+        return UnitTestUtil.getTestDataPath() + "/PartsSupplierOracle.vdb"; //$NON-NLS-1$
+    }
+    
+    private void helpTestVisitor(String vdb, String input, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
+        helpTestVisitor(vdb, input, EMPTY_CONTEXT, dbmsTimeZone, expectedOutput, false);
+    }
 
+    private void helpTestVisitor(String vdb, String input, String dbmsTimeZone, String expectedOutput, boolean correctNaming) throws ConnectorException {
+        helpTestVisitor(vdb, input, EMPTY_CONTEXT, dbmsTimeZone, expectedOutput, correctNaming);
+    }
+
+    private void helpTestVisitor(String vdb, String input, ExecutionContext context, String dbmsTimeZone, String expectedOutput, boolean correctNaming) throws ConnectorException {
+        // Convert from sql to objects
+        TranslationUtility util = new TranslationUtility(vdb);
+        Command obj =  util.parseCommand(input, correctNaming, true);        
+		this.helpTestVisitor(obj, context, dbmsTimeZone, expectedOutput);
+    }
+
+    /** Helper method takes a QueryMetadataInterface impl instead of a VDB filename 
+     * @throws ConnectorException 
+     */
+    private void helpTestVisitor(QueryMetadataInterface metadata, String input, ExecutionContext context, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
+        // Convert from sql to objects
+        CommandBuilder commandBuilder = new CommandBuilder(metadata);
+        Command obj = commandBuilder.getCommand(input);
+		this.helpTestVisitor(obj, context, dbmsTimeZone, expectedOutput);
+    }
+    
+    private void helpTestVisitor(Command obj, ExecutionContext context, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
+        OracleSQLTranslator translator = new OracleSQLTranslator();
+        Properties p = new Properties();
+        if (dbmsTimeZone != null) {
+        	p.setProperty(JDBCPropertyNames.DATABASE_TIME_ZONE, dbmsTimeZone);
+        }
+        translator.initialize(new JDBCManagedConnectionFactory());
+        // Convert back to SQL
+        TranslatedCommand tc = new TranslatedCommand(context, translator);
+        tc.translateCommand(obj);
+        
+        // Check stuff
+        assertEquals("Did not get correct sql", expectedOutput, tc.getSql());             //$NON-NLS-1$
+    }
+    
+    /** defect 21775 */
+    @Test public void testDateStuff() throws Exception {
+        String input = "SELECT ((CASE WHEN month(datevalue) < 10 THEN ('0' || convert(month(datevalue), string)) ELSE convert(month(datevalue), string) END || CASE WHEN dayofmonth(datevalue) < 10 THEN ('0' || convert(dayofmonth(datevalue), string)) ELSE convert(dayofmonth(datevalue), string) END) || convert(year(datevalue), string)), SUM(intkey) FROM bqt1.SMALLA GROUP BY datevalue"; //$NON-NLS-1$
+        String output = "SELECT CASE WHEN CASE WHEN CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END IS NULL OR CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END IS NULL THEN NULL ELSE concat(CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END, CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('!
 0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END) END IS NULL OR to_char(EXTRACT(YEAR FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat(CASE WHEN CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END IS NULL OR CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END IS NULL THEN NULL ELSE concat(CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.Da!
 teValue)) END, CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < !
 10 THEN 
CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END) END, to_char(EXTRACT(YEAR FROM SmallA.DateValue))) END, SUM(SmallA.IntKey) FROM SmallA GROUP BY SmallA.DateValue"; //$NON-NLS-1$
+        
+        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
+                        input, 
+                        EMPTY_CONTEXT, null, output);
+    }
+    
+    @Test public void testAliasedGroup() throws Exception {
+        helpTestVisitor(getTestVDB(),
+            "select y.part_name from parts as y", //$NON-NLS-1$
+            null,
+            "SELECT y.PART_NAME FROM PARTS y"); //$NON-NLS-1$
+    }
+    
+    @Test public void testDateLiteral() throws Exception {
+        helpTestVisitor(getTestVDB(),
+            "select {d '2002-12-31'} FROM parts", //$NON-NLS-1$
+            null,
+            "SELECT {d '2002-12-31'} FROM PARTS"); //$NON-NLS-1$
+    }
+
+    @Test public void testTimeLiteral() throws Exception {
+        helpTestVisitor(getTestVDB(),
+            "select {t '13:59:59'} FROM parts", //$NON-NLS-1$
+            null,
+            "SELECT {ts '1970-01-01 13:59:59'} FROM PARTS"); //$NON-NLS-1$
+    }
+
+    @Test public void testTimestampLiteral() throws Exception {
+        helpTestVisitor(getTestVDB(),
+            "select {ts '2002-12-31 13:59:59'} FROM parts", //$NON-NLS-1$
+            null,
+            "SELECT {ts '2002-12-31 13:59:59.0'} FROM PARTS"); //$NON-NLS-1$
+    }
+
+    @Test public void testUnionOrderByWithThreeBranches() throws Exception {
+        helpTestVisitor(getTestVDB(),
+                        "select part_id id FROM parts UNION ALL select part_name FROM parts UNION ALL select part_id FROM parts ORDER BY id", //$NON-NLS-1$
+                        null,
+                        "SELECT g_2.PART_ID AS c_0 FROM PARTS g_2 UNION ALL SELECT g_1.PART_NAME AS c_0 FROM PARTS g_1 UNION ALL SELECT g_0.PART_ID AS c_0 FROM PARTS g_0 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
+                        true); 
+    }
+    
+    @Test public void testUnionOrderBy() throws Exception {
+        helpTestVisitor(getTestVDB(),
+                        "select part_id FROM parts UNION ALL select part_name FROM parts ORDER BY part_id", //$NON-NLS-1$
+                        null,
+                        "SELECT g_1.PART_ID AS c_0 FROM PARTS g_1 UNION ALL SELECT g_0.PART_NAME AS c_0 FROM PARTS g_0 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
+                        true); 
+    }
+
+    @Test public void testUnionOrderBy2() throws Exception {
+        helpTestVisitor(getTestVDB(),
+                        "select part_id as p FROM parts UNION ALL select part_name FROM parts ORDER BY p", //$NON-NLS-1$
+                        null,
+                        "SELECT PARTS.PART_ID AS p FROM PARTS UNION ALL SELECT PARTS.PART_NAME FROM PARTS ORDER BY p NULLS FIRST"); //$NON-NLS-1$
+    }
+
+    @Test public void testUpdateWithFunction() throws Exception {
+        String input = "UPDATE bqt1.smalla SET intkey = intkey + 1"; //$NON-NLS-1$
+        String output = "UPDATE SmallA SET IntKey = (SmallA.IntKey + 1)"; //$NON-NLS-1$
+        
+        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
+                input, 
+                EMPTY_CONTEXT, null, output);
+    }
+    
+
+    /**
+     * Oracle's DUAL table is a pseudo-table; element names cannot be 
+     * fully qualified since the table doesn't really exist nor contain
+     * any columns.  But this requires modeling the DUAL table in 
+     * MM as if it were a real physical table, and also modeling any
+     * columns in the table.  Case 3742
+     * 
+     * @since 4.3
+     */
+    @Test public void testDUAL() throws Exception {
+        String input = "SELECT something FROM DUAL"; //$NON-NLS-1$
+        String output = "SELECT something FROM DUAL"; //$NON-NLS-1$
+               
+        helpTestVisitor(getOracleSpecificMetadata(),
+            input, 
+            EMPTY_CONTEXT,
+            null,
+            output);
+    }
+
+    /**
+     * Test Oracle's rownum pseudo-column.  Not a real column, so it can't
+     * be fully-qualified with a table name.  MM requires this column to be
+     * modeled in any table which the user wants to use rownum with.
+     * Case 3739
+     * 
+     * @since 4.3
+     */
+    @Test public void testROWNUM() throws Exception {
+        String input = "SELECT part_name, rownum FROM parts"; //$NON-NLS-1$
+        String output = "SELECT PARTS.PART_NAME, ROWNUM FROM PARTS"; //$NON-NLS-1$
+               
+        helpTestVisitor(getTestVDB(),
+            input, 
+            null,
+            output);        
+    }
+    
+    /**
+     * Test Oracle's rownum pseudo-column.  Not a real column, so it can't
+     * be fully-qualified with a table name.  MM requires this column to be
+     * modeled in any table which the user wants to use rownum with.  Case 3739
+     * 
+     * @since 4.3
+     */
+    @Test public void testROWNUM2() throws Exception {
+        String input = "SELECT part_name FROM parts where rownum < 100"; //$NON-NLS-1$
+        String output = "SELECT PARTS.PART_NAME FROM PARTS WHERE ROWNUM < 100"; //$NON-NLS-1$
+               
+        helpTestVisitor(getTestVDB(),
+            input, 
+            null,
+            output);            }    
+    
+    /**
+     * Case 3744.  Test that an Oracle-specific db hint, delivered as a String via command
+     * payload, is added to the translated SQL.
+     * 
+     * @since 4.3
+     */
+    @Test public void testOracleCommentPayload() throws Exception {
+        String input = "SELECT part_name, rownum FROM parts"; //$NON-NLS-1$
+        String output = "SELECT /*+ ALL_ROWS */ PARTS.PART_NAME, ROWNUM FROM PARTS"; //$NON-NLS-1$
+               
+        String hint = "/*+ ALL_ROWS */"; //$NON-NLS-1$
+        ExecutionContext context = new ExecutionContextImpl(null, 1, hint, null, "", null, null, null); //$NON-NLS-1$
+        
+        helpTestVisitor(getTestVDB(),
+            input, 
+            context,
+            null,
+            output,
+            false);        
+    }
+    
+    /**
+     * reproducing this case relies on the name in source for the table being different from
+     * the name
+     */
+    @Test public void testCase3845() throws Exception {
+        
+        String input = "SELECT (DoubleNum * 1.0) FROM BQT1.Smalla"; //$NON-NLS-1$
+        String output = "SELECT (SmallishA.DoubleNum * 1.0) FROM SmallishA"; //$NON-NLS-1$
+
+        QueryMetadataInterface metadata = getOracleSpecificMetadata();
+
+        helpTestVisitor(metadata, input, EMPTY_CONTEXT, null, output);
+    }
+    
+    /** create fake BQT metadata to test this case, name in source is important */
+    private QueryMetadataInterface getOracleSpecificMetadata() { 
+    	MetadataStore metadataStore = new MetadataStore();
+    	Schema foo = RealMetadataFactory.createPhysicalModel("BQT1", metadataStore); //$NON-NLS-1$
+        Table table = RealMetadataFactory.createPhysicalGroup("SmallA", foo); //$NON-NLS-1$
+        Table dual = RealMetadataFactory.createPhysicalGroup("DUAL", foo); //$NON-NLS-1$
+        table.setNameInSource("SmallishA");//$NON-NLS-1$
+        String[] elemNames = new String[] {
+            "DoubleNum",  //$NON-NLS-1$ 
+            "ID", //$NON-NLS-1$
+        };
+        String[] elemTypes = new String[] {  
+            DataTypeManager.DefaultDataTypes.DOUBLE,
+            DataTypeManager.DefaultDataTypes.INTEGER,
+        };
+        List<Column> cols = RealMetadataFactory.createElements(table, elemNames, elemTypes);
+        cols.get(1).setAutoIncremented(true);
+        cols.get(1).setNameInSource("ID:SEQUENCE=MYSEQUENCE.nextVal"); //$NON-NLS-1$
+        RealMetadataFactory.createElements(dual, new String[] {"something"}, new String[] {DataTypeManager.DefaultDataTypes.STRING}); //$NON-NLS-1$
+        
+        CompositeMetadataStore store = new CompositeMetadataStore(metadataStore);
+        return new TransformationMetadata(null, store, null, null);
+    }
+
+	public void helpTestVisitor(String vdb, String input, String expectedOutput) throws ConnectorException {
+		helpTestVisitor(vdb, input, null, expectedOutput);
+	}
+
+    @Test public void testLimitWithNestedInlineView() throws Exception {
+        String input = "select max(intkey), stringkey from (select intkey, stringkey from bqt1.smalla order by intkey limit 100) x group by stringkey"; //$NON-NLS-1$
+        String output = "SELECT MAX(x.intkey), x.stringkey FROM (SELECT * FROM (SELECT SmallA.IntKey, SmallA.StringKey FROM SmallA ORDER BY intkey NULLS FIRST) WHERE ROWNUM <= 100) x GROUP BY x.stringkey"; //$NON-NLS-1$
+               
+        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
+                input, 
+                EMPTY_CONTEXT, null, output);        
+    }
+    
+    @Test public void testExceptAsMinus() throws Exception {
+        String input = "select intkey, intnum from bqt1.smalla except select intnum, intkey from bqt1.smallb"; //$NON-NLS-1$
+        String output = "SELECT SmallA.IntKey, SmallA.IntNum FROM SmallA MINUS SELECT SmallB.IntNum, SmallB.IntKey FROM SmallB"; //$NON-NLS-1$
+               
+        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
+                input, 
+                EMPTY_CONTEXT, null, output);        
+    }
+    
+    @Test public void testConcat() throws Exception {
+        String sql = "select concat(stringnum, stringkey) from BQT1.Smalla"; //$NON-NLS-1$       
+        String expected = "SELECT CASE WHEN SmallA.StringNum IS NULL OR SmallA.StringKey IS NULL THEN NULL ELSE concat(SmallA.StringNum, SmallA.StringKey) END FROM SmallA"; //$NON-NLS-1$
+        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
+    }
+    
+    @Test public void testConcat_withLiteral() throws Exception {
+        String sql = "select stringnum || '1' from BQT1.Smalla"; //$NON-NLS-1$       
+        String expected = "SELECT CASE WHEN SmallA.StringNum IS NULL THEN NULL ELSE concat(SmallA.StringNum, '1') END FROM SmallA"; //$NON-NLS-1$
+        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
+    }
+    
+    @Test public void testRowLimitWithUnionOrderBy() throws Exception {
+        String input = "(select intkey from bqt1.smalla limit 50, 100) union select intnum from bqt1.smalla order by intkey"; //$NON-NLS-1$
+        String output = "SELECT c_0 FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (SELECT g_1.IntKey AS c_0 FROM SmallA g_1) VIEW_FOR_LIMIT WHERE ROWNUM <= 150) WHERE ROWNUM_ > 50 UNION SELECT g_0.IntNum AS c_0 FROM SmallA g_0 ORDER BY c_0 NULLS FIRST"; //$NON-NLS-1$
+               
+        CommandBuilder commandBuilder = new CommandBuilder(FakeMetadataFactory.exampleBQTCached());
+        Command obj = commandBuilder.getCommand(input, true, true);
+		this.helpTestVisitor(obj, EMPTY_CONTEXT, null, output);
+    }
+
 }

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestSubstringFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestSubstringFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestSubstringFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -23,24 +23,21 @@
 package org.teiid.connector.jdbc.oracle;
 
 import java.util.Arrays;
-import java.util.Properties;
 
 import junit.framework.TestCase;
 
 import org.teiid.connector.api.TypeFacility;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
 
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
-
 /**
  */
 public class TestSubstringFunctionModifier extends TestCase {
 
-    private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
+    private static final LanguageFactory LANG_FACTORY = new LanguageFactory();
 
 
     /**
@@ -51,12 +48,12 @@
         super(name);
     }
 
-    public void helpTestMod(IExpression[] args, String expectedStr) throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("substring",  //$NON-NLS-1$
+    public void helpTestMod(Expression[] args, String expectedStr) throws Exception {
+        Function func = LANG_FACTORY.createFunction("substring",  //$NON-NLS-1$
             Arrays.asList(args), TypeFacility.RUNTIME_TYPES.STRING);
         
         OracleSQLTranslator trans = new OracleSQLTranslator();
-        trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        trans.initialize(new JDBCManagedConnectionFactory());
 
         SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor(); 
         sqlVisitor.append(func);  
@@ -65,7 +62,7 @@
     }
 
     public void testTwoArgs() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
             LANG_FACTORY.createLiteral("a.b.c", String.class), //$NON-NLS-1$
             LANG_FACTORY.createLiteral(new Integer(1), Integer.class)           
         }; 
@@ -73,7 +70,7 @@
     }
 
     public void testThreeArgsWithConstant() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
             LANG_FACTORY.createLiteral("a.b.c", String.class), //$NON-NLS-1$
             LANG_FACTORY.createLiteral(new Integer(3), Integer.class),
             LANG_FACTORY.createLiteral(new Integer(1), Integer.class) 
@@ -82,16 +79,16 @@
     }
 
     public void testThreeArgsWithElement() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
             LANG_FACTORY.createLiteral("a.b.c", String.class), //$NON-NLS-1$
-            LANG_FACTORY.createElement("e1", null, null, Integer.class), //$NON-NLS-1$
+            LANG_FACTORY.createColumnReference("e1", null, null, Integer.class), //$NON-NLS-1$
             LANG_FACTORY.createLiteral(new Integer(1), Integer.class) 
         }; 
         helpTestMod(args, "substr('a.b.c', e1, 1)"); //$NON-NLS-1$
     }
 
     public void testThreeArgsWithNull() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
             LANG_FACTORY.createLiteral("a.b.c", String.class), //$NON-NLS-1$
             LANG_FACTORY.createLiteral(null, Integer.class),
             LANG_FACTORY.createLiteral(new Integer(5), Integer.class) 

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/postgresql/TestPostgreSQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/postgresql/TestPostgreSQLTranslator.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/postgresql/TestPostgreSQLTranslator.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -22,14 +22,11 @@
 
 package org.teiid.connector.jdbc.postgresql;
 
-import java.util.Properties;
-
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.TranslationHelper;
-
-import com.metamatrix.cdk.api.EnvironmentUtility;
 
 public class TestPostgreSQLTranslator {
 
@@ -37,7 +34,7 @@
 
     @BeforeClass public static void setupOnce() throws Exception {
         TRANSLATOR = new PostgreSQLTranslator();        
-        TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        TRANSLATOR.initialize(new JDBCManagedConnectionFactory());
     }
     
     public String getTestVDB() {

Copied: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sqlserver/TestSqlServerConversionVisitor.class (from rev 1900, branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sqlserver/TestSqlServerConversionVisitor.class)
===================================================================
(Binary files differ)

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sqlserver/TestSqlServerConversionVisitor.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sqlserver/TestSqlServerConversionVisitor.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sqlserver/TestSqlServerConversionVisitor.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -23,22 +23,24 @@
 package org.teiid.connector.jdbc.sqlserver;
 
 import java.util.List;
-import java.util.Properties;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.TranslationHelper;
-import org.teiid.connector.language.ICommand;
+import org.teiid.connector.language.Command;
+import org.teiid.connector.metadata.runtime.Column;
+import org.teiid.connector.metadata.runtime.MetadataStore;
+import org.teiid.connector.metadata.runtime.Schema;
+import org.teiid.connector.metadata.runtime.Table;
+import org.teiid.metadata.CompositeMetadataStore;
+import org.teiid.metadata.TransformationMetadata;
 
-import com.metamatrix.cdk.api.EnvironmentUtility;
 import com.metamatrix.cdk.api.TranslationUtility;
 import com.metamatrix.common.types.DataTypeManager;
 import com.metamatrix.query.metadata.QueryMetadataInterface;
-import com.metamatrix.query.unittest.FakeMetadataFacade;
-import com.metamatrix.query.unittest.FakeMetadataFactory;
-import com.metamatrix.query.unittest.FakeMetadataObject;
-import com.metamatrix.query.unittest.FakeMetadataStore;
+import com.metamatrix.query.unittest.RealMetadataFactory;
 
 /**
  */
@@ -48,7 +50,7 @@
     
     @BeforeClass
     public static void setup() throws ConnectorException {
-        trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        trans.initialize(new JDBCManagedConnectionFactory());
     }
 
     public String getTestVDB() {
@@ -141,31 +143,26 @@
             output);        
     }
     
-    @Test public void testUniqueidentifier() throws Exception { 
-        FakeMetadataObject ldapModel = FakeMetadataFactory.createPhysicalModel("foo"); //$NON-NLS-1$
-        FakeMetadataObject table = FakeMetadataFactory.createPhysicalGroup("bar", ldapModel); //$NON-NLS-1$
+    @Test public void testUniqueidentifier() throws Exception {
+    	MetadataStore metadataStore = new MetadataStore();
+    	Schema foo = RealMetadataFactory.createPhysicalModel("foo", metadataStore); //$NON-NLS-1$
+        Table table = RealMetadataFactory.createPhysicalGroup("bar", foo); //$NON-NLS-1$
         String[] elemNames = new String[] {
             "x"  //$NON-NLS-1$ 
         };
         String[] elemTypes = new String[] {  
             DataTypeManager.DefaultDataTypes.STRING
         };
+        List<Column> cols =RealMetadataFactory.createElements(table, elemNames, elemTypes);
         
-        List cols = FakeMetadataFactory.createElements(table, elemNames, elemTypes);
+        Column obj = cols.get(0);
+        obj.setNativeType("uniqueidentifier"); //$NON-NLS-1$
         
-        FakeMetadataObject obj = (FakeMetadataObject) cols.get(0);
-        obj.putProperty(FakeMetadataObject.Props.NATIVE_TYPE, "uniqueidentifier"); //$NON-NLS-1$
+        CompositeMetadataStore store = new CompositeMetadataStore(metadataStore);
+        QueryMetadataInterface metadata = new TransformationMetadata(null, store, null, null);
         
-        FakeMetadataStore store = new FakeMetadataStore();
-        store.addObject(ldapModel);
-        store.addObject(table);     
-        store.addObjects(cols);
-        
-        // Create the facade from the store
-        QueryMetadataInterface metadata = new FakeMetadataFacade(store);
-        
         TranslationUtility tu = new TranslationUtility(metadata);
-        ICommand command = tu.parseCommand("select max(x) from bar"); //$NON-NLS-1$
+        Command command = tu.parseCommand("select max(x) from bar"); //$NON-NLS-1$
         TranslationHelper.helpTestVisitor("SELECT MAX(cast(bar.x as char(36))) FROM bar", trans, command); //$NON-NLS-1$
         
         command = tu.parseCommand("select * from (select max(x) from bar) x"); //$NON-NLS-1$

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseConvertModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseConvertModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -27,19 +27,17 @@
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.sql.Timestamp;
-import java.util.Properties;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
+import org.teiid.connector.language.Literal;
 
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
 import com.metamatrix.common.types.DataTypeManager;
 import com.metamatrix.query.unittest.TimestampUtil;
 
@@ -47,27 +45,27 @@
  */
 public class TestSybaseConvertModifier {
 
-    private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
+    private static final LanguageFactory LANG_FACTORY = new LanguageFactory();
     private static SybaseSQLTranslator trans = new SybaseSQLTranslator();
     
     @BeforeClass
     public static void setup() throws ConnectorException {
-        trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        trans.initialize(new JDBCManagedConnectionFactory());
     }
     
-    public String helpGetString(IExpression expr) throws Exception {
+    public String helpGetString(Expression expr) throws Exception {
         SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor(); 
         sqlVisitor.append(expr);  
         return sqlVisitor.toString();        
     }
 
-    private void helpGetString1(IFunction func, String expectedStr) throws Exception {
+    private void helpGetString1(Function func, String expectedStr) throws Exception {
         assertEquals(expectedStr, helpGetString(func)); 
     }
     
-    public void helpTest(IExpression srcExpression, String tgtType, String expectedExpression) throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+    public void helpTest(Expression srcExpression, String tgtType, String expectedExpression) throws Exception {
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 srcExpression,
                 LANG_FACTORY.createLiteral(tgtType, String.class)},
             DataTypeManager.getDataTypeClass(tgtType));
@@ -78,8 +76,8 @@
     
     // original test -- this is not a drop one anymore
     @Test public void testModDrop() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral("5", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("integer", String.class)     //$NON-NLS-1$
             },
@@ -91,8 +89,8 @@
     /********************Beginning of cast(date AS INPUT) ******************/
     @Test public void testStringToDate() throws Exception {
         String dateStr = "2003-12-31"; //$NON-NLS-1$
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(dateStr, String.class), 
                 LANG_FACTORY.createLiteral("date", String.class)}, //$NON-NLS-1$
             java.sql.Date.class);
@@ -101,9 +99,9 @@
     }
     
     @Test public void testTimestampToDate() throws Exception {
-        ILiteral c = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(89, 2, 3, 7, 8, 12, 99999), Timestamp.class); 
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Literal c = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(89, 2, 3, 7, 8, 12, 99999), Timestamp.class); 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 c, 
                 LANG_FACTORY.createLiteral("date", String.class)}, //$NON-NLS-1$
             java.sql.Date.class);
@@ -115,8 +113,8 @@
     /********************Beginning of cast(time AS INPUT) ******************/
     @Test public void testStringToTime() throws Exception {
         String timeStr = "12:08:07"; //$NON-NLS-1$
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(timeStr, String.class), 
                 LANG_FACTORY.createLiteral("time", String.class)}, //$NON-NLS-1$
             java.sql.Time.class);
@@ -125,9 +123,9 @@
     }
     
     @Test public void testTimestampToTime() throws Exception {
-        ILiteral c = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(89, 2, 3, 7, 8, 12, 99999), Timestamp.class); 
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Literal c = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(89, 2, 3, 7, 8, 12, 99999), Timestamp.class); 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 c, 
                 LANG_FACTORY.createLiteral("time", String.class)}, //$NON-NLS-1$
             java.sql.Time.class);
@@ -139,8 +137,8 @@
     /********************Beginning of cast(timestamp AS INPUT) ******************/
     @Test public void testStringToTimestamp() throws Exception {
         String timestampStr = "1989-07-09 12:08:07"; //$NON-NLS-1$
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(timestampStr, String.class), 
                 LANG_FACTORY.createLiteral("timestamp", String.class)}, //$NON-NLS-1$
             java.sql.Timestamp.class);
@@ -149,8 +147,8 @@
     }
     
     @Test public void testTimeToTimestamp() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(TimestampUtil.createTime(12, 2, 3), java.sql.Time.class), 
                 LANG_FACTORY.createLiteral("timestamp", String.class)}, //$NON-NLS-1$
             java.sql.Timestamp.class);
@@ -159,8 +157,8 @@
     }
         
     @Test public void testDateToTimestamp() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(TimestampUtil.createDate(89, 2, 3), java.sql.Date.class), 
                 LANG_FACTORY.createLiteral("timestamp", String.class)}, //$NON-NLS-1$
             java.sql.Timestamp.class);
@@ -171,8 +169,8 @@
 
     /*****************Beginning of cast(string AS input)******************/
     @Test public void testBooleanToStringa() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class),
                 LANG_FACTORY.createLiteral("string", String.class)}, //$NON-NLS-1$
             String.class);
@@ -182,8 +180,8 @@
     
     @Test public void testTimestampToString() throws Exception {
         Timestamp ts = TimestampUtil.createTimestamp(103, 10, 1, 12, 5, 2, 0);
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(ts, Timestamp.class),
                 LANG_FACTORY.createLiteral("string", String.class)}, //$NON-NLS-1$
             String.class);
@@ -193,8 +191,8 @@
     
     @Test public void testDateToString() throws Exception {
         java.sql.Date d = TimestampUtil.createDate(103, 10, 1);
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(d, java.sql.Date.class),
                 LANG_FACTORY.createLiteral("string", String.class)}, //$NON-NLS-1$
             String.class);
@@ -204,8 +202,8 @@
     
     @Test public void testTimeToString() throws Exception {
         java.sql.Time t = TimestampUtil.createTime(3, 10, 1);
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(t, java.sql.Time.class),
                 LANG_FACTORY.createLiteral("string", String.class)}, //$NON-NLS-1$
             String.class);
@@ -215,8 +213,8 @@
     
     @Test public void testBigDecimalToString() throws Exception {
         java.math.BigDecimal m = new java.math.BigDecimal("-123124534.3"); //$NON-NLS-1$
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(m, java.math.BigDecimal.class),
                 LANG_FACTORY.createLiteral("string", String.class)}, //$NON-NLS-1$
             String.class);
@@ -227,8 +225,8 @@
     
     /***************** Beginning of cast(char AS input) ************/
     @Test public void testStringToChar() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral("12", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("char", Character.class)}, //$NON-NLS-1$
         Character.class);
@@ -239,8 +237,8 @@
      
     /***************** Beginning of cast(boolean AS input) ************/
     @Test public void testStringToBoolean() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral("true", String.class),  //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
             Boolean.class);
@@ -249,8 +247,8 @@
     } 
     
     @Test public void testByteToBoolean() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class),  
                 LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
             Boolean.class);
@@ -259,8 +257,8 @@
     } 
     
     @Test public void testShortToBoolean() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Short((short) 0), Short.class),  
                 LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
             Boolean.class);
@@ -269,8 +267,8 @@
     } 
     
     @Test public void testIntegerToBoolean() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Integer(1), Integer.class),  
                 LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
             Boolean.class);
@@ -279,8 +277,8 @@
     } 
     
     @Test public void testLongToBoolean() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Long(1), Long.class),  
                 LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
             Boolean.class);
@@ -289,8 +287,8 @@
     } 
     
     @Test public void testBigIntegerToBoolean() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new java.math.BigInteger("1"), java.math.BigInteger.class),  //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
             Boolean.class);
@@ -299,8 +297,8 @@
     } 
     
     @Test public void testFloatToBoolean() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Float((float)1.0), Float.class),  
                 LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
             Boolean.class);
@@ -309,8 +307,8 @@
     } 
     
     @Test public void testDoubleToBoolean() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Double(1.0), Double.class),  
                 LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
             Boolean.class);
@@ -319,8 +317,8 @@
     } 
     
     @Test public void testBigDecimalToBoolean() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new java.math.BigDecimal("1.0"), java.math.BigDecimal.class),  //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
             Boolean.class);
@@ -333,8 +331,8 @@
     
     /***************** Beginning of cast(byte AS input) ************/
     @Test public void testStringToByte() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral("12", String.class),  //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("byte", Byte.class)}, //$NON-NLS-1$
             Byte.class);
@@ -343,8 +341,8 @@
     } 
     
     @Test public void testBooleanToBytea() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class),
                 LANG_FACTORY.createLiteral("byte", Byte.class)}, //$NON-NLS-1$
             Byte.class);
@@ -353,8 +351,8 @@
     }  
     
     @Test public void testShortToByte() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Short((short) 123), Short.class),
                 LANG_FACTORY.createLiteral("byte",  Byte.class)}, //$NON-NLS-1$
             Byte.class);
@@ -363,8 +361,8 @@
     } 
 
     @Test public void testIntegerToByte() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Integer(1232321), Integer.class),
                 LANG_FACTORY.createLiteral("byte",  Byte.class)}, //$NON-NLS-1$
             Byte.class);
@@ -373,8 +371,8 @@
     } 
     
     @Test public void testLongToByte() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Long(1231232341), Long.class),
                 LANG_FACTORY.createLiteral("byte",  Byte.class)}, //$NON-NLS-1$
             Byte.class);
@@ -383,8 +381,8 @@
     } 
     
     @Test public void testBigIntegerToByte() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new java.math.BigInteger("123"), java.math.BigInteger.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("byte",  Byte.class)}, //$NON-NLS-1$
             Byte.class);
@@ -393,8 +391,8 @@
     } 
     
     @Test public void testFloatToByte() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Float((float) 123.0), Float.class),
                 LANG_FACTORY.createLiteral("byte",  Byte.class)}, //$NON-NLS-1$
             Byte.class);
@@ -403,8 +401,8 @@
     } 
     
     @Test public void testDoubleToByte() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Double(1.0), Double.class),
                 LANG_FACTORY.createLiteral("byte",  Byte.class)}, //$NON-NLS-1$
             Byte.class);
@@ -413,8 +411,8 @@
     } 
     
     @Test public void testBigDecimalToByte() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new java.math.BigDecimal("12.3"), java.math.BigDecimal.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("byte",  Byte.class)}, //$NON-NLS-1$
             Byte.class);
@@ -426,8 +424,8 @@
 
     /*****************Beginning of cast(short AS input)************/
     @Test public void testStringToShort() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral("123", String.class),  //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("short", Short.class)}, //$NON-NLS-1$
             Short.class);
@@ -436,8 +434,8 @@
     }    
     
     @Test public void testBooleanToShorta() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class),
                 LANG_FACTORY.createLiteral("short", Short.class)}, //$NON-NLS-1$
             Short.class);
@@ -446,8 +444,8 @@
     }  
     
     @Test public void testByteToShort() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Byte((byte) 12), Byte.class),
                 LANG_FACTORY.createLiteral("short",  Short.class)}, //$NON-NLS-1$
             Short.class);
@@ -456,8 +454,8 @@
     } 
 
     @Test public void testIntegerToShort() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Integer(1232321), Integer.class),
                 LANG_FACTORY.createLiteral("short",  Short.class)}, //$NON-NLS-1$
             Short.class);
@@ -466,8 +464,8 @@
     } 
     
     @Test public void testLongToShort() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Long(1231232341), Long.class),
                 LANG_FACTORY.createLiteral("short",  Short.class)}, //$NON-NLS-1$
             Short.class);
@@ -476,8 +474,8 @@
     } 
     
     @Test public void testBigIntegerToShort() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new java.math.BigInteger("123"), java.math.BigInteger.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("short",  Short.class)}, //$NON-NLS-1$
             Short.class);
@@ -486,8 +484,8 @@
     } 
     
     @Test public void testFloatToShort() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Float((float) 123.0), Float.class),
                 LANG_FACTORY.createLiteral("short",  Short.class)}, //$NON-NLS-1$
             Short.class);
@@ -496,8 +494,8 @@
     } 
     
     @Test public void testDoubleToShort() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Double(1.0), Double.class),
                 LANG_FACTORY.createLiteral("short",  Short.class)}, //$NON-NLS-1$
             Short.class);
@@ -506,8 +504,8 @@
     } 
     
     @Test public void testBigDecimalToShort() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new java.math.BigDecimal("12.3"), java.math.BigDecimal.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("short",  Short.class)}, //$NON-NLS-1$
             Short.class);
@@ -518,8 +516,8 @@
     
     /***************** Beginning of cast(integer AS input) ************/
     @Test public void testStringToInteger() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral("12332", String.class),  //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
             Integer.class);
@@ -528,8 +526,8 @@
     } 
     
     @Test public void testBooleanToIntegera() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class),
                 LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
             Integer.class);
@@ -538,8 +536,8 @@
     }  
     
     @Test public void testBooleanToIntegerb() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class),
                 LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
             Integer.class);
@@ -548,8 +546,8 @@
     } 
     
     @Test public void testByteToInteger() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Byte((byte)12), Byte.class),
                 LANG_FACTORY.createLiteral("integer",  Integer.class)}, //$NON-NLS-1$
             Integer.class);
@@ -558,8 +556,8 @@
     } 
     
     @Test public void testShortToInteger() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Short((short)1243 ), Short.class),
                 LANG_FACTORY.createLiteral("integer",  Integer.class)}, //$NON-NLS-1$
             Integer.class);
@@ -568,8 +566,8 @@
     } 
     
     @Test public void testLongToInteger() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Long(1231232341), Long.class),
                 LANG_FACTORY.createLiteral("integer",  Integer.class)}, //$NON-NLS-1$
             Integer.class);
@@ -578,8 +576,8 @@
     } 
     
     @Test public void testBigIntegerToInteger() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new java.math.BigInteger("123"), java.math.BigInteger.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("integer",  Integer.class)}, //$NON-NLS-1$
             Integer.class);
@@ -588,8 +586,8 @@
     } 
     
     @Test public void testFloatToInteger() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Float((float) 123.0), Float.class),
                 LANG_FACTORY.createLiteral("integer",  Integer.class)}, //$NON-NLS-1$
             Integer.class);
@@ -598,8 +596,8 @@
     } 
     
     @Test public void testDoubleToInteger() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new Double(1.0), Double.class),
                 LANG_FACTORY.createLiteral("integer",  Integer.class)}, //$NON-NLS-1$
             Integer.class);
@@ -608,8 +606,8 @@
     } 
     
     @Test public void testBigDecimalToInteger() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral(new java.math.BigDecimal("12.3"), java.math.BigDecimal.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("integer",  Integer.class)}, //$NON-NLS-1$
             Integer.class);
@@ -621,8 +619,8 @@
     
     /***************** Beginning of cast(long AS input) ************/
     @Test public void testStringToLong() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral("12332131413", String.class),  //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("long", Long.class)}, //$NON-NLS-1$
             Long.class);
@@ -631,8 +629,8 @@
     } 
     
     @Test public void testBooleanToLonga() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
-            new IExpression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), LANG_FACTORY.createLiteral("long", Long.class)}, //$NON-NLS-1$
+        Function func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
+            new Expression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), LANG_FACTORY.createLiteral("long", Long.class)}, //$NON-NLS-1$
             Long.class);
 
         helpGetString1(func, "cast(1 AS numeric(19,0))"); //$NON-NLS-1$
@@ -642,8 +640,8 @@
     
     /***************** Beginning of cast(biginteger AS input) ************/
     @Test public void testStringToBigInteger() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral("12323143241414", String.class),  //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("biginteger", java.math.BigInteger.class)}, //$NON-NLS-1$
             java.math.BigInteger.class);
@@ -652,8 +650,8 @@
     } 
     
     @Test public void testBooleanToBigIntegera() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
-            new IExpression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), LANG_FACTORY.createLiteral("biginteger", java.math.BigInteger.class)}, //$NON-NLS-1$
+        Function func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
+            new Expression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), LANG_FACTORY.createLiteral("biginteger", java.math.BigInteger.class)}, //$NON-NLS-1$
             BigInteger.class);
 
         helpGetString1(func, "cast(1 AS numeric(38, 0))"); //$NON-NLS-1$
@@ -663,8 +661,8 @@
     
     /***************** Beginning of cast(float AS input) ************/
     @Test public void testStringToFloat() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral("123", String.class),  //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("float", Float.class)}, //$NON-NLS-1$
             Float.class);
@@ -673,8 +671,8 @@
     } 
     
     @Test public void testBooleanToFloata() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
-            new IExpression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), 
+        Function func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
+            new Expression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), 
                 LANG_FACTORY.createLiteral("float", Float.class)}, //$NON-NLS-1$
             Float.class);
 
@@ -682,8 +680,8 @@
     }
 
     @Test public void testBooleanToFloatb() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
-            new IExpression[] { LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), 
+        Function func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
+            new Expression[] { LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), 
                 LANG_FACTORY.createLiteral("float", Float.class)}, //$NON-NLS-1$
             Float.class);
 
@@ -694,8 +692,8 @@
     
     /***************** Beginning of cast(double AS input) ************/
     @Test public void testStringToDouble() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral("123", String.class),  //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("double", Double.class)}, //$NON-NLS-1$
             Double.class);
@@ -704,8 +702,8 @@
     } 
     
     @Test public void testBooleanToDoublea() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
-            new IExpression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), 
+        Function func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
+            new Expression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), 
                 LANG_FACTORY.createLiteral("double", Double.class)}, //$NON-NLS-1$
             Double.class);
 
@@ -713,8 +711,8 @@
     }
 
     @Test public void testBooleanToDoubleb() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
-            new IExpression[] { LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), 
+        Function func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
+            new Expression[] { LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), 
                 LANG_FACTORY.createLiteral("double", Double.class)}, //$NON-NLS-1$
             Double.class);
 
@@ -725,8 +723,8 @@
     
     /***************** Beginning of cast(bigdecimal AS input) ************/
     @Test public void testStringToBigDecimal() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
-            new IExpression[] { 
+        Function func = LANG_FACTORY.createFunction("convert",  //$NON-NLS-1$
+            new Expression[] { 
                 LANG_FACTORY.createLiteral("123", String.class),  //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("bigdecimal", java.math.BigDecimal.class)}, //$NON-NLS-1$
             java.math.BigDecimal.class);
@@ -735,8 +733,8 @@
     } 
 
     @Test public void testBooleanToBigDecimala() throws Exception {
-        IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
-            new IExpression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), 
+        Function func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
+            new Expression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), 
                 LANG_FACTORY.createLiteral("bigdecimal", java.math.BigDecimal.class)}, //$NON-NLS-1$
             java.math.BigDecimal.class);
 

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseSQLConversionVisitor.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseSQLConversionVisitor.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseSQLConversionVisitor.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -22,19 +22,18 @@
 
 package org.teiid.connector.jdbc.sybase;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.*;
 
-import java.util.Properties;
-
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.mockito.Mockito;
 import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.api.ExecutionContext;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
 import org.teiid.connector.jdbc.TranslationHelper;
 import org.teiid.connector.jdbc.translator.TranslatedCommand;
-import org.teiid.connector.language.ICommand;
+import org.teiid.connector.language.Command;
 
-import com.metamatrix.cdk.api.EnvironmentUtility;
-
 /**
  */
 public class TestSybaseSQLConversionVisitor {
@@ -43,7 +42,7 @@
     
     @BeforeClass
     public static void setup() throws ConnectorException {
-        trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        trans.initialize(new JDBCManagedConnectionFactory());
     }
 
     public String getTestVDB() {
@@ -56,9 +55,9 @@
     
     public void helpTestVisitor(String vdb, String input, String expectedOutput) {
         // Convert from sql to objects
-        ICommand obj = TranslationHelper.helpTranslate(vdb, input);
+        Command obj = TranslationHelper.helpTranslate(vdb, input);
         
-        TranslatedCommand tc = new TranslatedCommand(EnvironmentUtility.createSecurityContext("user"), trans); //$NON-NLS-1$
+        TranslatedCommand tc = new TranslatedCommand(Mockito.mock(ExecutionContext.class), trans);
 		try {
 			tc.translateCommand(obj);
 		} catch (ConnectorException e) {

Deleted: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -1,79 +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.jdbc.translator;
-
-import java.sql.Timestamp;
-import java.util.Arrays;
-import java.util.List;
-
-import org.teiid.connector.jdbc.translator.EscapeSyntaxModifier;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.visitor.util.SQLReservedWords;
-
-import junit.framework.TestCase;
-
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.query.unittest.TimestampUtil;
-
-/**
- */
-public class TestEscapeSyntaxModifier extends TestCase {
-
-    /**
-     * Constructor for TestDropFunctionModifier.
-     * @param name
-     */
-    public TestEscapeSyntaxModifier(String name) {
-        super(name);
-    }
-
-    public void testEscape() {
-        ILiteral arg1 = CommandBuilder.getLanuageFactory().createLiteral("arg1", String.class); //$NON-NLS-1$
-        ILiteral arg2 = CommandBuilder.getLanuageFactory().createLiteral("arg2", String.class);//$NON-NLS-1$
-        IFunction func = CommandBuilder.getLanuageFactory().createFunction("concat", Arrays.asList( arg1, arg2), Integer.class); //$NON-NLS-1$
-                
-        helpTest(func, "{fn concat('arg1', 'arg2')}");
-    }
-    
-    public void testTimestampAdd() {
-        ILiteral arg1 = CommandBuilder.getLanuageFactory().createLiteral(SQLReservedWords.SQL_TSI_HOUR, String.class); 
-        ILiteral arg2 = CommandBuilder.getLanuageFactory().createLiteral(Integer.valueOf(1), Integer.class);
-        ILiteral arg3 = CommandBuilder.getLanuageFactory().createLiteral(TimestampUtil.createTimestamp(0, 0, 0, 0, 0, 0, 0), Timestamp.class);
-        IFunction func = CommandBuilder.getLanuageFactory().createFunction("timestampadd", Arrays.asList( arg1, arg2, arg3), Timestamp.class); //$NON-NLS-1$
-                
-        helpTest(func, "{fn timestampadd(SQL_TSI_HOUR, 1, {ts '1899-12-31 00:00:00.0'})}");
-    }
-
-	private void helpTest(IFunction func, String expected) {
-        EscapeSyntaxModifier mod = new EscapeSyntaxModifier();
-
-        List parts = mod.translate(func);
-        StringBuffer sb = new StringBuffer();
-        for (Object object : parts) {
-			sb.append(object);
-		}
-        assertEquals(expected, sb.toString());
-	}
-    
-}

Copied: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java (from rev 1900, branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java)
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java	                        (rev 0)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestEscapeSyntaxModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -0,0 +1,79 @@
+/*
+ * 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.jdbc.translator;
+
+import java.sql.Timestamp;
+import java.util.Arrays;
+import java.util.List;
+
+import org.teiid.connector.jdbc.translator.EscapeSyntaxModifier;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.SQLReservedWords;
+
+import junit.framework.TestCase;
+
+import com.metamatrix.cdk.CommandBuilder;
+import com.metamatrix.query.unittest.TimestampUtil;
+
+/**
+ */
+public class TestEscapeSyntaxModifier extends TestCase {
+
+    /**
+     * Constructor for TestDropFunctionModifier.
+     * @param name
+     */
+    public TestEscapeSyntaxModifier(String name) {
+        super(name);
+    }
+
+    public void testEscape() {
+        Literal arg1 = CommandBuilder.getLanuageFactory().createLiteral("arg1", String.class); //$NON-NLS-1$
+        Literal arg2 = CommandBuilder.getLanuageFactory().createLiteral("arg2", String.class);//$NON-NLS-1$
+        Function func = CommandBuilder.getLanuageFactory().createFunction("concat", Arrays.asList( arg1, arg2), Integer.class); //$NON-NLS-1$
+                
+        helpTest(func, "{fn concat('arg1', 'arg2')}");
+    }
+    
+    public void testTimestampAdd() {
+        Literal arg1 = CommandBuilder.getLanuageFactory().createLiteral(SQLReservedWords.SQL_TSI_HOUR, String.class); 
+        Literal arg2 = CommandBuilder.getLanuageFactory().createLiteral(Integer.valueOf(1), Integer.class);
+        Literal arg3 = CommandBuilder.getLanuageFactory().createLiteral(TimestampUtil.createTimestamp(0, 0, 0, 0, 0, 0, 0), Timestamp.class);
+        Function func = CommandBuilder.getLanuageFactory().createFunction("timestampadd", Arrays.asList( arg1, arg2, arg3), Timestamp.class); //$NON-NLS-1$
+                
+        helpTest(func, "{fn timestampadd(SQL_TSI_HOUR, 1, {ts '1899-12-31 00:00:00.0'})}");
+    }
+
+	private void helpTest(Function func, String expected) {
+        EscapeSyntaxModifier mod = new EscapeSyntaxModifier();
+
+        List parts = mod.translate(func);
+        StringBuffer sb = new StringBuffer();
+        for (Object object : parts) {
+			sb.append(object);
+		}
+        assertEquals(expected, sb.toString());
+	}
+    
+}

Copied: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestExtractFunctionModifier.class (from rev 1900, branches/JCA/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestExtractFunctionModifier.class)
===================================================================
(Binary files differ)

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestExtractFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestExtractFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestExtractFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -24,28 +24,26 @@
 
 import java.sql.Timestamp;
 import java.util.Arrays;
-import java.util.Properties;
 
 import junit.framework.TestCase;
 
 import org.teiid.connector.api.SourceSystemFunctions;
 import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.language.IElement;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.IGroup;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
+import org.teiid.connector.language.ColumnReference;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
+import org.teiid.connector.language.Literal;
+import org.teiid.connector.language.NamedTable;
 
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
 import com.metamatrix.query.unittest.TimestampUtil;
 
 /**
  */
 public class TestExtractFunctionModifier extends TestCase {
 
-    private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
+    private static final LanguageFactory LANG_FACTORY = new LanguageFactory();
 
     /**
      * Constructor for TestMonthFunctionModifier.
@@ -55,15 +53,15 @@
         super(name);
     }
 
-    public void helpTestMod(IExpression c, String expectedStr, String target) throws Exception {
-        IFunction func = LANG_FACTORY.createFunction(target, 
+    public void helpTestMod(Expression c, String expectedStr, String target) throws Exception {
+        Function func = LANG_FACTORY.createFunction(target, 
             Arrays.asList(c),
             Integer.class);
         
         ExtractFunctionModifier mod = new ExtractFunctionModifier ();
         Translator trans = new Translator();
         trans.registerFunctionModifier(target, mod);
-        trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        trans.initialize(new JDBCManagedConnectionFactory());
         
         SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor(); 
 
@@ -71,45 +69,45 @@
         assertEquals(expectedStr, sqlVisitor.toString());
     }
     public void test1() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
         helpTestMod(arg1, "EXTRACT(MONTH FROM {d '2004-01-21'})" , "month");   //$NON-NLS-1$ //$NON-NLS-2$
     }
     
     public void test2() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 17, 5, 0, 0), Timestamp.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 17, 5, 0, 0), Timestamp.class);
         helpTestMod(arg1, "EXTRACT(MONTH FROM {ts '2004-01-21 17:05:00.0'})", "month"); //$NON-NLS-1$ //$NON-NLS-2$
     }
     
     public void test3() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
         helpTestMod(arg1, "EXTRACT(YEAR FROM {d '2004-01-21'})", "year"); //$NON-NLS-1$ //$NON-NLS-2$
     }
 
     public void test4() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 17, 5, 0, 0), Timestamp.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 17, 5, 0, 0), Timestamp.class);
         helpTestMod(arg1, "EXTRACT(YEAR FROM {ts '2004-01-21 17:05:00.0'})", "year"); //$NON-NLS-1$ //$NON-NLS-2$
     }
     
     public void test5() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
         helpTestMod(arg1, "EXTRACT(DAY FROM {d '2004-01-21'})", "dayofmonth"); //$NON-NLS-1$ //$NON-NLS-2$
     }
 
     public void test6() throws Exception {
-        ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 17, 5, 0, 0), Timestamp.class);
+        Literal arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 17, 5, 0, 0), Timestamp.class);
         helpTestMod(arg1, "EXTRACT(DAY FROM {ts '2004-01-21 17:05:00.0'})", "dayofmonth"); //$NON-NLS-1$ //$NON-NLS-2$
     }    
 
     public void test11() throws Exception {
-        IGroup group = LANG_FACTORY.createGroup(null, "group", null); //$NON-NLS-1$
-        IElement elem = LANG_FACTORY.createElement("col", group, null, TypeFacility.RUNTIME_TYPES.DATE); //$NON-NLS-1$
-        helpTestMod(elem, "EXTRACT(DAY FROM col)", "dayofmonth"); //$NON-NLS-1$ //$NON-NLS-2$
+        NamedTable group = LANG_FACTORY.createNamedTable("group", null, null); //$NON-NLS-1$
+        ColumnReference elem = LANG_FACTORY.createColumnReference("col", group, null, TypeFacility.RUNTIME_TYPES.DATE); //$NON-NLS-1$
+        helpTestMod(elem, "EXTRACT(DAY FROM group.col)", "dayofmonth"); //$NON-NLS-1$ //$NON-NLS-2$
     }
     
     public void test12() throws Exception {
-        IGroup group = LANG_FACTORY.createGroup(null, "group", null); //$NON-NLS-1$
-        IElement elem = LANG_FACTORY.createElement("col", group, null, TypeFacility.RUNTIME_TYPES.DATE); //$NON-NLS-1$
-        helpTestMod(elem, "(EXTRACT(DOW FROM col) + 1)", SourceSystemFunctions.DAYOFWEEK); //$NON-NLS-1$
+        NamedTable group = LANG_FACTORY.createNamedTable("group", null, null); //$NON-NLS-1$
+        ColumnReference elem = LANG_FACTORY.createColumnReference("col", group, null, TypeFacility.RUNTIME_TYPES.DATE); //$NON-NLS-1$
+        helpTestMod(elem, "(EXTRACT(DOW FROM group.col) + 1)", SourceSystemFunctions.DAYOFWEEK); //$NON-NLS-1$
     }
     
 }

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLocateFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLocateFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLocateFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -25,26 +25,22 @@
 import static org.junit.Assert.*;
 
 import java.util.Arrays;
-import java.util.Properties;
 
 import org.junit.Test;
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.SourceSystemFunctions;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
 
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
-
 /**
  * Test <code>LOCATEFunctionModifier</code> by invoking its methods with varying 
  * parameters to validate it performs as designed and expected. 
  */
 public class TestLocateFunctionModifier {
 
-    private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
+    private static final LanguageFactory LANG_FACTORY = new LanguageFactory();
 
     /**
      * Create an expression containing a LOCATE function using <code>args</code> 
@@ -57,7 +53,7 @@
      * @return On success, the modified expression.
      * @throws Exception
      */
-    public void helpTestLocate(IExpression[] args, String expectedStr) throws Exception {
+    public void helpTestLocate(Expression[] args, String expectedStr) throws Exception {
     	this.helpTestLocate(LocateFunctionModifier.LOCATE, false, args, expectedStr);
     }
 
@@ -80,16 +76,16 @@
      * @return On success, the modified expression.
      * @throws Exception
      */
-    public void helpTestLocate(final String locateFunctionName, final boolean parameterOrder, IExpression[] args, String expectedStr) throws Exception {
-    	IExpression param1 = null;
-    	IExpression param2 = null;
-    	IExpression param3 = null;
+    public void helpTestLocate(final String locateFunctionName, final boolean parameterOrder, Expression[] args, String expectedStr) throws Exception {
+    	Expression param1 = null;
+    	Expression param2 = null;
+    	Expression param3 = null;
     	
     	if (args.length > 0 ) param1 = args[0];
     	if (args.length > 1 ) param2 = args[1];
     	if (args.length > 2 ) param3 = args[2];
     	
-    	IFunction func = null;
+    	Function func = null;
     	
     	if (param3 != null) {
     		func = LANG_FACTORY.createFunction(SourceSystemFunctions.LOCATE,
@@ -101,14 +97,14 @@
 
     	Translator trans = new Translator() {
 			@Override
-			public void initialize(ConnectorEnvironment env)
+			public void initialize(JDBCManagedConnectionFactory env)
 					throws ConnectorException {
 				super.initialize(env);
 				registerFunctionModifier(SourceSystemFunctions.LOCATE, new LocateFunctionModifier(getLanguageFactory(), locateFunctionName, parameterOrder));
 			}
     	};
     	
-        trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        trans.initialize(new JDBCManagedConnectionFactory());
 
         SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor(); 
         sqlVisitor.append(func);  
@@ -117,7 +113,7 @@
     }
 
     /**
-     * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call 
+     * Test {@link LocateFunctionModifier#modify(Function)} to validate a call 
      * to LOCATE(search_str, source_str) using constants for both parameters 
      * returns LOCATE(search_str, source_str). 
      * <p>
@@ -127,7 +123,7 @@
      * @throws Exception
      */
     @Test public void testModifySimple() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("abcdefg", String.class) //$NON-NLS-1$
         };
@@ -136,7 +132,7 @@
     }
 
     /**
-     * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call 
+     * Test {@link LocateFunctionModifier#modify(Function)} to validate a call 
      * to LOCATE(search_str, source_str) using constants for both parameters 
      * returns locate(search_str, source_str). 
      * <p>
@@ -146,7 +142,7 @@
      * @throws Exception
      */
     @Test public void testModifySimple2() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("abcdefg", String.class) //$NON-NLS-1$
         };
@@ -155,7 +151,7 @@
     }
 
     /**
-     * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call 
+     * Test {@link LocateFunctionModifier#modify(Function)} to validate a call 
      * to LOCATE(search_str, source_str) using constants for both parameters 
      * returns INSTR(source_str, search_str). 
      * <p>
@@ -165,7 +161,7 @@
      * @throws Exception
      */
     @Test public void testModifySimple3() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("abcdefg", String.class) //$NON-NLS-1$
         };
@@ -174,7 +170,7 @@
     }
 
     /**
-     * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call 
+     * Test {@link LocateFunctionModifier#modify(Function)} to validate a call 
      * to LOCATE(search_str, source_str) using constants for both parameters 
      * returns locate(search_str, source_str). 
      * <p>
@@ -184,7 +180,7 @@
      * @throws Exception
      */
     @Test public void testModifySimple4() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("abcdefg", String.class) //$NON-NLS-1$
         };
@@ -193,7 +189,7 @@
     }
 
     /**
-     * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call 
+     * Test {@link LocateFunctionModifier#modify(Function)} to validate a call 
      * to LOCATE(search_str, source_str, 1) using constants for all parameters 
      * returns INSTR(source_str, search_str, 1). 
      * <p>
@@ -203,7 +199,7 @@
      * @throws Exception
      */
     @Test public void testModifyWithStartIndex() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral(1, Integer.class)
@@ -213,7 +209,7 @@
     }
 
     /**
-     * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call 
+     * Test {@link LocateFunctionModifier#modify(Function)} to validate a call 
      * to LOCATE(search_str, source_str, 4) using constants for all parameters 
      * returns LOCATE(search_str, source_str, 5). 
      * <p>
@@ -223,7 +219,7 @@
      * @throws Exception
      */
     @Test public void testModifyWithStartIndex2() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral(4, Integer.class)
@@ -233,7 +229,7 @@
     }
 
     /**
-     * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call 
+     * Test {@link LocateFunctionModifier#modify(Function)} to validate a call 
      * to LOCATE(search_str, source_str, -5) using constants for all parameters 
      * returns LOCATE(search_str, source_str, 1). 
      * <p>
@@ -243,7 +239,7 @@
      * @throws Exception
      */
     @Test public void testModifyWithStartIndex3() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral(-5, Integer.class)
@@ -253,7 +249,7 @@
     }
 
     /**
-     * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call 
+     * Test {@link LocateFunctionModifier#modify(Function)} to validate a call 
      * to LOCATE(search_str, source_str, null) using constants for all parameters 
      * returns LOCATE(search_str, source_str, NULL). 
      * <p>
@@ -263,7 +259,7 @@
      * @throws Exception
      */
     @Test public void testModifyWithStartIndex4() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral(null, Integer.class)
@@ -273,7 +269,7 @@
     }
 
     /**
-     * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call 
+     * Test {@link LocateFunctionModifier#modify(Function)} to validate a call 
      * to LOCATE(search_str, source_str, e1) using an element for start index 
      * parameter returns INSTR(source_str, search_str, CASE WHEN e1 < 1 THEN 1 ELSE e1 END). 
      * <p>
@@ -283,17 +279,17 @@
      * @throws Exception
      */
     @Test public void testModifyWithElementStartIndex() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
-                LANG_FACTORY.createElement("e1", null, null, Integer.class) //$NON-NLS-1$
+                LANG_FACTORY.createColumnReference("e1", null, null, Integer.class) //$NON-NLS-1$
         };
         // INSTR / SOURCE_SEARCH_INDEX
         helpTestLocate("INSTR", true, args, "INSTR('abcdefg', 'a', CASE WHEN e1 < 1 THEN 1 ELSE e1 END)"); //$NON-NLS-1$ //$NON-NLS-2$
     }
 
     /**
-     * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call 
+     * Test {@link LocateFunctionModifier#modify(Function)} to validate a call 
      * to LOCATE(search_str, source_str, e1) using an element for start index 
      * parameter returns LOCATE(search_str, source_str, CASE WHEN e1 < 0 THEN 0 ELSE e1 END). 
      * <p>
@@ -303,10 +299,10 @@
      * @throws Exception
      */
     @Test public void testModifyWithElementStartIndex2() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
-                LANG_FACTORY.createElement("e1", null, null, Integer.class) //$NON-NLS-1$
+                LANG_FACTORY.createColumnReference("e1", null, null, Integer.class) //$NON-NLS-1$
         };
         // default / default
         helpTestLocate(args, "LOCATE('a', 'abcdefg', CASE WHEN e1 < 1 THEN 1 ELSE e1 END)"); //$NON-NLS-1$

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestModFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestModFunctionModifier.java	2010-03-05 15:12:25 UTC (rev 1917)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestModFunctionModifier.java	2010-03-05 15:27:12 UTC (rev 1918)
@@ -25,19 +25,17 @@
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Arrays;
-import java.util.Properties;
 
 import junit.framework.TestCase;
 
-import org.teiid.connector.api.ConnectorEnvironment;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.SourceSystemFunctions;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
+import org.teiid.connector.jdbc.JDBCManagedConnectionFactory;
+import org.teiid.connector.language.Expression;
+import org.teiid.connector.language.Function;
+import org.teiid.connector.language.LanguageFactory;
 
 import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
 
 /**
  * Test <code>ModFunctionModifier</code> by invoking its methods with varying 
@@ -45,7 +43,7 @@
  */
 public class TestModFunctionModifier extends TestCase {
 
-    private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
+    private static final LanguageFactory LANG_FACTORY = new LanguageFactory();
 
     /**
      * Constructor for TestModFunctionModifier.
@@ -67,7 +65,7 @@
      * @return On success, the modified expression.
      * @throws Exception
      */
-    public void helpTestMod(IExpression[] args, String expectedStr) throws Exception {
+    public void helpTestMod(Expression[] args, String expectedStr) throws Exception {
     	this.helpTestMod("MOD", args, expectedStr); //$NON-NLS-1$
     }
 
@@ -85,23 +83,23 @@
      * @return On success, the modified expression.
      * @throws Exception
      */
-    public void helpTestMod(final String modFunctionName, IExpression[] args, String expectedStr) throws Exception {
-    	IExpression param1 = args[0];
-    	IExpression param2 = args[1];
+    public void helpTestMod(final String modFunctionName, Expression[] args, String expectedStr) throws Exception {
+    	Expression param1 = args[0];
+    	Expression param2 = args[1];
     	
-    	IFunction func = LANG_FACTORY.createFunction(modFunctionName,
+    	Function func = LANG_FACTORY.createFunction(modFunctionName,
             Arrays.asList(param1, param2), param1.getType());
 
     	Translator trans = new Translator() {
 			@Override
-			public void initialize(ConnectorEnvironment env)
+			public void initialize(JDBCManagedConnectionFactory env)
 					throws ConnectorException {
 				super.initialize(env);
 				registerFunctionModifier(SourceSystemFunctions.MOD, new ModFunctionModifier(modFunctionName, getLanguageFactory()));
 			}
     	};
     	
-        trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+        trans.initialize(new JDBCManagedConnectionFactory());
 
         SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor(); 
         sqlVisitor.append(func);  
@@ -110,7 +108,7 @@
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * MOD(x,y) using {@link Integer} constants for both parameters returns 
      * MOD(x,y).  {@link ModFunctionModifier} will be constructed without 
      * specifying a function name or a supported type list.
@@ -118,7 +116,7 @@
      * @throws Exception
      */
     public void testTwoIntConst() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral(new Integer(10), Integer.class),
                 LANG_FACTORY.createLiteral(new Integer(6), Integer.class)           
         };
@@ -127,7 +125,7 @@
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * MOD(x,y) using {@link Integer} constants for both parameters returns 
      * MOD(x,y).  {@link ModFunctionModifier} will be constructed with a 
      * function name of "MOD" but without a supported type list.
@@ -135,7 +133,7 @@
      * @throws Exception
      */
     public void testTwoIntConst2() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral(new Integer(10), Integer.class),
                 LANG_FACTORY.createLiteral(new Integer(6), Integer.class)           
         };
@@ -144,7 +142,7 @@
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * x % y using {@link Integer} constants for both parameters returns (x % y).  
      * {@link ModFunctionModifier} will be constructed with a function name of 
      * "%" and no supported type list. 
@@ -152,7 +150,7 @@
      * @throws Exception
      */
     public void testTwoIntConst5() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
         		LANG_FACTORY.createLiteral(new Integer(10), Integer.class),
                 LANG_FACTORY.createLiteral(new Integer(6), Integer.class)           
         };
@@ -160,7 +158,7 @@
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * MOD(x,y) using {@link Long} constants for both parameters returns 
      * MOD(x,y).  {@link ModFunctionModifier} will be constructed without 
      * specifying a function name or a supported type list.
@@ -168,7 +166,7 @@
      * @throws Exception
      */
     public void testTwoLongConst() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral(new Long(10), Long.class),
                 LANG_FACTORY.createLiteral(new Long(6), Long.class)           
         };
@@ -176,7 +174,7 @@
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * MOD(x,y) using {@link Long} constants for both parameters returns 
      * MOD(x,y).  {@link ModFunctionModifier} will be constructed with a 
      * function name of "MOD" but without a supported type list.
@@ -184,7 +182,7 @@
      * @throws Exception
      */
     public void testTwoLongConst2() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral(new Long(10), Long.class),
                 LANG_FACTORY.createLiteral(new Long(6), Long.class)           
         };
@@ -192,7 +190,7 @@
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * x % y using {@link Long} constants for both parameters returns (x % y).  
      * {@link ModFunctionModifier} will be constructed with a function name of 
      * "%" and no supported type list. 
@@ -200,7 +198,7 @@
      * @throws Exception
      */
     public void testTwoLongConst5() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral(new Long(10), Long.class),
                 LANG_FACTORY.createLiteral(new Long(6), Long.class)           
         };
@@ -208,7 +206,7 @@
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * MOD(x,y) using {@link Float} constants for both parameters returns 
      * (x - (TRUNC((x / y), 0) * y)).  {@link ModFunctionModifier} will be 
      * constructed without specifying a function name or a supported type list.
@@ -216,7 +214,7 @@
      * @throws Exception
      */
     public void testTwoFloatConst() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral(new Float(10), Float.class),
                 LANG_FACTORY.createLiteral(new Float(6), Float.class)           
         };
@@ -224,7 +222,7 @@
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * MOD(x,y) using {@link BigInteger} constants for both parameters returns 
      * (x - (TRUNC((x / y), 0) * y)).  {@link ModFunctionModifier} will be 
      * constructed without specifying a function name or a supported type list.
@@ -232,7 +230,7 @@
      * @throws Exception
      */
     public void testTwoBigIntConst() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral(new BigInteger("10"), BigInteger.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral(new BigInteger("6"), BigInteger.class) //$NON-NLS-1$
         };
@@ -240,7 +238,7 @@
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * MOD(x,y) using {@link BigDecimal} constants for both parameters returns 
      * (x - (TRUNC((x / y), 0) * y)).  {@link ModFunctionModifier} will be 
      * constructed without specifying a function name or a supported type list.
@@ -248,7 +246,7 @@
      * @throws Exception
      */
     public void testTwoBigDecConst() throws Exception {
-        IExpression[] args = new IExpression[] {
+        Expression[] args = new Expression[] {
                 LANG_FACTORY.createLiteral(new BigDecimal("10"), BigDecimal.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral(new BigDecimal("6"), BigDecimal.class) //$NON-NLS-1$
         };
@@ -256,7 +254,7 @@
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * MOD(e1,y) using a {@link Integer} element and a {@link Integer} constant 
      * for parameters returns MOD(e1,y).  {@link ModFunctionModifier} will be 
      * constructed without specifying a function name or a supported type list.
@@ -264,15 +262,15 @@
      * @throws Exception
      */
     public void testOneIntElemOneIntConst() throws Exception {
-        IExpression[] args = new IExpression[] {
-                LANG_FACTORY.createElement("e1", null, null, Integer.class), //$NON-NLS-1$
+        Expression[] args = new Expression[] {
+                LANG_FACTORY.createColumnReference("e1", null, null, Integer.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
         };
         helpTestMod(args, "MOD(e1, 6)"); //$NON-NLS-1$
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * MOD(e1,y) using a {@link Integer} element and a {@link Integer} constant 
      * for parameters returns MOD(e1,y).  {@link ModFunctionModifier} will be 
      * constructed with a function name of "MOD" but without a supported type 
@@ -281,8 +279,8 @@
      * @throws Exception
      */
     public void testOneIntElemOneIntConst2() throws Exception {
-        IExpression[] args = new IExpression[] {
-                LANG_FACTORY.createElement("e1", null, null, Integer.class), //$NON-NLS-1$
+        Expression[] args = new Expression[] {
+                LANG_FACTORY.createColumnReference("e1", null, null, Integer.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
         };
         // mod / default 
@@ -290,7 +288,7 @@
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * e1 % y using a {@link Integer} element and a {@link Integer} constant for 
      * parameters returns (e1 % y).  {@link ModFunctionModifier} will be 
      * constructed with a function name of "%" and no supported type list. 
@@ -298,8 +296,8 @@
      * @throws Exception
      */
     public void testOneIntElemOneIntConst5() throws Exception {
-        IExpression[] args = new IExpression[] {
-                LANG_FACTORY.createElement("e1", null, null, Integer.class), //$NON-NLS-1$
+        Expression[] args = new Expression[] {
+                LANG_FACTORY.createColumnReference("e1", null, null, Integer.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
         };
         // % / default 
@@ -307,7 +305,7 @@
     }
 
     /**
-     * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to 
+     * Test {@link ModFunctionModifier#modify(Function)} to validate a call to 
      * MOD(e1,y) using a {@link BigDecimal} element and a {@link BigDecimal} 
      * constant for parameters returns (e1 - (TRUNC((e1 / y), 0) * y)).  
      * {@link ModFunctionModifier} will be constructed without specifying a 
@@ -316,8 +314,8 @@
      * @throws Exception
      */
     public void testOneBigDecElemOneBigDecConst() throws Exception {
-        IExpression[] args = new IExpression[] {
-                LANG_FACTORY.createElement("e1", null, null, BigDecimal.class), //$NON-NLS-1$
+        Expression[] args = new Expression[] {
+                LANG_FACTORY.createColumnReference("e1", null, null, BigDecimal.class), //$NON-NLS-1$
                 LANG_FACTORY.createLiteral(new BigDecimal(6), BigDecimal.class)
         };
         // default / default

Copied: trunk/connectors/connector-jdbc/src/test/resources/PartsSupplier.vdb (from rev 1900, branches/JCA/connectors/connector-jdbc/src/test/resources/PartsSupplier.vdb)
===================================================================
(Binary files differ)



More information about the teiid-commits mailing list