[teiid-commits] teiid SVN: r494 - in trunk: connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc and 15 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Tue Feb 24 22:49:49 EST 2009


Author: shawkins
Date: 2009-02-24 22:49:48 -0500 (Tue, 24 Feb 2009)
New Revision: 494

Added:
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCConnector.java
Modified:
   trunk/connector-api/src/main/java/com/metamatrix/connector/visitor/util/SQLStringVisitor.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/derby/DerbyConvertModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLConvertModifier.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/OracleConvertModifier.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/postgresql/PostgreSQLConvertModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/ModFunctionModifier.java
   trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/BasicFunctionModifier.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/Translator.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/TestDerbyConvertModifier.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/extension/impl/TestEscapeSyntaxModifier.java
   trunk/connectors/sandbox/connector-oracle-spatial/src/main/java/com/metamatrix/connector/jdbc/oracle/spatial/NnDistanceFunctionModifier.java
   trunk/connectors/sandbox/connector-oracle-spatial/src/main/java/com/metamatrix/connector/jdbc/oracle/spatial/OracleSpatialFunctionModifier.java
   trunk/server/src/main/java/com/metamatrix/metadata/runtime/spi/jdbc/JDBCConnector.java
   trunk/test-integration/src/test/java/com/metamatrix/cdk/api/TestTranslationUtility.java
   trunk/test-integration/src/test/java/com/metamatrix/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java
   trunk/test-integration/src/test/java/com/metamatrix/data/visitor/util/TestSQLStringVisitor.java
Log:
TEIID-164 fixes from rewiring integration tests

Modified: trunk/connector-api/src/main/java/com/metamatrix/connector/visitor/util/SQLStringVisitor.java
===================================================================
--- trunk/connector-api/src/main/java/com/metamatrix/connector/visitor/util/SQLStringVisitor.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connector-api/src/main/java/com/metamatrix/connector/visitor/util/SQLStringVisitor.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -437,12 +437,9 @@
                 buffer.append(((ILiteral)args.get(0)).getValue());
 
                 for(int i=1; i<args.size(); i++) {
-                    append(args.get(i));
-                    if(i < (args.size()-1)) {
-                        buffer.append(SPACE);
-                        buffer.append(name);
-                        buffer.append(SPACE);
-                    }
+                	buffer.append(COMMA); 
+                    buffer.append(SPACE);
+                	append(args.get(i));
                 }
             }
             buffer.append(RPAREN);

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	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCConnector.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -102,7 +102,7 @@
         
         logger.logInfo(JDBCPlugin.Util.getString("JDBCConnector.JDBCConnector_initialized._1")); //$NON-NLS-1$
         
-        capabilities = createCapabilities(environment, Thread.currentThread().getContextClassLoader());
+        capabilities = createCapabilities(environment.getProperties(), Thread.currentThread().getContextClassLoader());
 
         Properties connectionProps = environment.getProperties();
 
@@ -129,6 +129,8 @@
         }
         sqlTranslator.initialize(environment);
         
+        createDataSources(dataSourceClassName, connectionProps);
+        
         if (areAdminConnectionsAllowed()) {
         	testConnection();
         }
@@ -232,14 +234,14 @@
 		return capabilities;
 	}
 
-	static ConnectorCapabilities createCapabilities(ConnectorEnvironment environment, ClassLoader loader)
+	static ConnectorCapabilities createCapabilities(Properties p, ClassLoader loader)
 		throws ConnectorException {
 		//create Capabilities
-		String className = environment.getProperties().getProperty(JDBCPropertyNames.EXT_CAPABILITY_CLASS, JDBCCapabilities.class.getName());  
+		String className = p.getProperty(JDBCPropertyNames.EXT_CAPABILITY_CLASS, JDBCCapabilities.class.getName());  
 		try {
 		    ConnectorCapabilities result = (ConnectorCapabilities)ReflectionHelper.create(className, null, loader);
 		    if(result instanceof JDBCCapabilities) {
-		        String setCriteriaBatchSize = environment.getProperties().getProperty(JDBCPropertyNames.SET_CRITERIA_BATCH_SIZE);
+		        String setCriteriaBatchSize = p.getProperty(JDBCPropertyNames.SET_CRITERIA_BATCH_SIZE);
 		        if(setCriteriaBatchSize != null) {
 		            int maxInCriteriaSize = Integer.parseInt(setCriteriaBatchSize);
 		            if(maxInCriteriaSize > 0) {
@@ -277,13 +279,21 @@
     					Object[] args) throws Throwable {
     				if (method.getName().equals("getConnection")) {
     					Properties p = new Properties();
-    					if (args.length == 2) {
-    						p.put("user", args[0]);
-    						p.put("password", args[1]);
+    					String user = null;
+    					String password = null;
+    					if (args != null && args.length == 2) {
+    						user = (String)args[0];
+    						password = (String)args[1];
     					} else {
-    						p.put("user", connectionProps.getProperty(JDBCPropertyNames.USERNAME));
-    						p.put("password", connectionProps.getProperty(JDBCPropertyNames.PASSWORD));
+    						user = connectionProps.getProperty(JDBCPropertyNames.USERNAME);
+    						password = connectionProps.getProperty(JDBCPropertyNames.PASSWORD);
     					}
+    					if (user != null) {
+    						p.put("user", user);
+    					}
+    					if (password != null) {
+    						p.put("password", password);
+    					}
     					return driver.connect(url, p);
     				} 
     				throw new UnsupportedOperationException("Driver DataSource proxy only provides Connections");

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbyConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbyConvertModifier.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbyConvertModifier.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -46,25 +46,6 @@
         this.langFactory = langFactory;
     }
 
-    /** 
-     * @see org.teiid.connector.jdbc.translator.BasicFunctionModifier#translate(com.metamatrix.connector.language.IFunction)
-     * @since 5.0
-     */
-    public List translate(IFunction function) {
-        // For anything that doesn't get modified to some other function, translate the convert(expr, type)
-        // to cast(expr as type).
-        
-        List parts = new ArrayList();
-        parts.add("cast("); //$NON-NLS-1$
-        parts.add(function.getParameters().get(0));
-        parts.add(" as ");         //$NON-NLS-1$
-        ILiteral type = (ILiteral) function.getParameters().get(1);        
-        parts.add(type.getValue());
-        parts.add(")"); //$NON-NLS-1$
-        
-        return parts;
-    }
-    
     public IExpression modify(IFunction function) {
         List<IExpression> args = function.getParameters();
         Class sourceType = args.get(0).getType();
@@ -252,11 +233,11 @@
 
             // BEFORE: convert(string_expr, float)
             // AFTER:  cast(cast(string_expr as decimal) as float)
-            IFunction inner = langFactory.createFunction("convert",  //$NON-NLS-1$
+            IFunction inner = langFactory.createFunction("cast",  //$NON-NLS-1$
                 Arrays.asList( expression, langFactory.createLiteral("decimal", TypeFacility.RUNTIME_TYPES.STRING) ),  //$NON-NLS-1$
                 TypeFacility.RUNTIME_TYPES.BIG_DECIMAL);
 
-            IFunction outer = langFactory.createFunction("convert",  //$NON-NLS-1$
+            IFunction outer = langFactory.createFunction("cast",  //$NON-NLS-1$
                 Arrays.asList( inner, langFactory.createLiteral("float", TypeFacility.RUNTIME_TYPES.STRING) ),  //$NON-NLS-1$
                 TypeFacility.RUNTIME_TYPES.FLOAT);
 
@@ -267,7 +248,7 @@
         
             // BEFORE: convert(num_expr, float)
             // AFTER:  cast(num_expr as float)
-            return langFactory.createFunction("convert",  //$NON-NLS-1$
+            return langFactory.createFunction("cast",  //$NON-NLS-1$
                 Arrays.asList( expression, langFactory.createLiteral("float", TypeFacility.RUNTIME_TYPES.STRING) ),  //$NON-NLS-1$
                 TypeFacility.RUNTIME_TYPES.FLOAT);
         }
@@ -281,11 +262,11 @@
         if(sourceType.equals(TypeFacility.RUNTIME_TYPES.STRING)){
             // BEFORE: convert(string_expr, double)
             // AFTER:  cast(cast(string_expr as decimal) as double)
-            IFunction inner = langFactory.createFunction("convert",  //$NON-NLS-1$
+            IFunction inner = langFactory.createFunction("cast",  //$NON-NLS-1$
                 Arrays.asList( expression, langFactory.createLiteral("decimal", TypeFacility.RUNTIME_TYPES.STRING) ),  //$NON-NLS-1$
                 TypeFacility.RUNTIME_TYPES.BIG_DECIMAL);
 
-            return langFactory.createFunction("convert",  //$NON-NLS-1$
+            return langFactory.createFunction("cast",  //$NON-NLS-1$
                 Arrays.asList( inner, langFactory.createLiteral("double", TypeFacility.RUNTIME_TYPES.STRING) ),  //$NON-NLS-1$
                 TypeFacility.RUNTIME_TYPES.DOUBLE);
         }
@@ -299,7 +280,7 @@
         if(sourceType.equals(TypeFacility.RUNTIME_TYPES.STRING)){
             // BEFORE: convert(string_expr, bigdecimal)
             // AFTER:  cast(string_expr as decimal)
-            return langFactory.createFunction("convert",  //$NON-NLS-1$
+            return langFactory.createFunction("cast",  //$NON-NLS-1$
                 Arrays.asList( expression, langFactory.createLiteral("decimal", TypeFacility.RUNTIME_TYPES.STRING) ),  //$NON-NLS-1$
                 TypeFacility.RUNTIME_TYPES.BIG_DECIMAL);
         }

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLConvertModifier.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLConvertModifier.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -29,7 +29,6 @@
 import org.teiid.connector.jdbc.translator.DropFunctionModifier;
 
 import com.metamatrix.connector.language.ICompareCriteria;
-import com.metamatrix.connector.language.ICriteria;
 import com.metamatrix.connector.language.IExpression;
 import com.metamatrix.connector.language.IFunction;
 import com.metamatrix.connector.language.ILanguageFactory;
@@ -50,10 +49,6 @@
         this.langFactory = langFactory;
     }
 
-    public List translate(IFunction function) {
-        return null;
-    }
-
     public IExpression modify(IFunction function) {
         List<IExpression> args = function.getParameters();
 

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	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -58,7 +58,7 @@
     /** 
      * @see org.teiid.connector.jdbc.translator.BasicFunctionModifier#modify(com.metamatrix.connector.language.IFunction)
      */
-    public IExpression modify(IFunction function) {
+    public IExpression modify(IFunction function) {
         List when = new ArrayList();
         IExpression a = function.getParameters().get(0);
         IExpression b = function.getParameters().get(1);
@@ -98,7 +98,7 @@
     	if (expr instanceof IFunction) {
     		IFunction function = (IFunction)expr;
     		if (function.getName().equalsIgnoreCase("NVL") || function.getName().equalsIgnoreCase(SourceSystemFunctions.IFNULL)) { //$NON-NLS-1$
-    			return isNotNull(function.getParameters().get(0));
+    			return isNotNull(function.getParameters().get(1));
     		}
     	}
     	return false;
@@ -112,10 +112,4 @@
     	return false;
     }
         
-    /** 
-     * @see org.teiid.connector.jdbc.translator.BasicFunctionModifier#translate(com.metamatrix.connector.language.IFunction)
-     */
-    public List translate(IFunction function) {
-        return null; //allow default translation
-    }
 }

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleConvertModifier.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleConvertModifier.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -45,15 +45,6 @@
         this.langFactory = langFactory;
     }
 
-    /**
-     * Intentionally return null, rely on the SQLStringVisitor being used by caller
-     * (Oracle or Oracle8 SQLConversionVisitor (SQLConversionVisitor))
-     * @see org.teiid.connector.jdbc.translator.FunctionModifier#translate(com.metamatrix.connector.language.IFunction)
-     */
-    public List translate(IFunction function) {
-        return null;
-    }    
-    
     public IExpression modify(IFunction function) {
         List<IExpression> args = function.getParameters();
         IExpression modified = null;

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	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -156,7 +156,7 @@
 		limitQuery.append(queryCommand);
 		if (limit.getRowOffset() > 0) {
 			limitQuery.append(") VIEW_FOR_LIMIT WHERE ROWNUM <= ").append(
-					limit.getRowLimit()).append(") WHERE ROWNUM_ > ").append(
+					limit.getRowLimit() + limit.getRowOffset()).append(") WHERE ROWNUM_ > ").append(
 					limit.getRowOffset());
 		} else {
 			limitQuery.append(") WHERE ROWNUM <= ").append(

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLConvertModifier.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLConvertModifier.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -47,10 +47,6 @@
         this.langFactory = langFactory;
     }
 
-    public List translate(IFunction function) {
-        return null;
-    }    
-    
     public IExpression modify(IFunction function) {
         List<IExpression> args = function.getParameters();
 

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/ModFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/ModFunctionModifier.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/ModFunctionModifier.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -61,9 +61,4 @@
 		return langFactory.createFunction("-", minusArgs, minusArgs.get(0).getType()); //$NON-NLS-1$
 	}
 	
-	@Override
-	public List translate(IFunction function) {
-		return null;
-	}
-
 }

Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/BasicFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/BasicFunctionModifier.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/BasicFunctionModifier.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -24,10 +24,9 @@
  */
 package org.teiid.connector.jdbc.translator;
 
-import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.HashMap;
 
 import com.metamatrix.connector.api.TypeFacility;
 import com.metamatrix.connector.language.IExpression;
@@ -95,22 +94,7 @@
      * @see org.teiid.connector.jdbc.translator.FunctionModifier#translate(com.metamatrix.connector.language.IFunction)
      */
     public List translate(IFunction function) {
-        List objs = new ArrayList();
-        objs.add(function.getName());
-        objs.add("("); //$NON-NLS-1$
-        List<IExpression> params = function.getParameters();
-        if(params.size() > 0) { 
-            objs.add(params.get(0));
-            if(params.size() > 1) {
-                for(int i=1; i<params.size(); i++) {
-                    objs.add(", "); //$NON-NLS-1$
-                    objs.add(params.get(i));
-                }
-            }
-        }
-        objs.add(")"); //$NON-NLS-1$
-
-        return objs;
+        return null;
     }
 
 }

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	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/EscapeSyntaxModifier.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -43,12 +43,11 @@
      * @since 5.0
      */
     public List translate(IFunction function) {
-        List normalParts = super.translate(function);
-        List wrappedParts = new ArrayList(normalParts.size() + 2);
-        wrappedParts.add("{fn "); //$NON-NLS-1$
-        wrappedParts.addAll(normalParts);
-        wrappedParts.add("}"); //$NON-NLS-1$
-        return wrappedParts;
+    	List objs = new ArrayList();
+        objs.add("{fn "); //$NON-NLS-1$
+        objs.add(function);
+        objs.add("}"); //$NON-NLS-1$
+        return objs;
     }
 
 }

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	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/Translator.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -635,25 +635,13 @@
                     return new Float(value);
                 }
                 case TIME_CODE: {
-                    try {
-                        return results.getTime(parameterIndex, getDatabaseCalendar());
-                    } catch (SQLException e) {
-                        //ignore
-                    }
+                    return results.getTime(parameterIndex, getDatabaseCalendar());
                 }
                 case DATE_CODE: {
-                    try {
-                        return results.getDate(parameterIndex, getDatabaseCalendar());
-                    } catch (SQLException e) {
-                        //ignore
-                    }
+                    return results.getDate(parameterIndex, getDatabaseCalendar());
                 }
                 case TIMESTAMP_CODE: {
-                    try {
-                        return results.getTimestamp(parameterIndex, getDatabaseCalendar());
-                    } catch (SQLException e) {
-                        //ignore
-                    }
+                    return results.getTimestamp(parameterIndex, getDatabaseCalendar());
                 }
     			case BLOB_CODE: {
     				try {

Added: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCConnector.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCConnector.java	                        (rev 0)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCConnector.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -0,0 +1,57 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.connector.jdbc;
+
+import java.util.Properties;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.metamatrix.connector.api.ConnectorCapabilities;
+
+public class TestJDBCConnector {
+
+    public void helpTestMaxIn(int setting, int expected) throws Exception {
+        Properties connProps = new Properties();
+        connProps.setProperty(JDBCPropertyNames.SET_CRITERIA_BATCH_SIZE, String.valueOf(setting)); 
+        connProps.setProperty(JDBCPropertyNames.EXT_CAPABILITY_CLASS, SimpleCapabilities.class.getName()); 
+        ConnectorCapabilities caps = JDBCConnector.createCapabilities(connProps, this.getClass().getClassLoader());
+        int maxIn = caps.getMaxInCriteriaSize();
+        Assert.assertEquals(expected, maxIn);
+    }
+
+    @Test
+    public void test1() throws Exception {
+        helpTestMaxIn(-1, 250);
+    }
+
+    @Test
+    public void test2() throws Exception {
+        helpTestMaxIn(0, 250);
+    }
+
+    @Test
+    public void test3() throws Exception {
+        helpTestMaxIn(1, 1);
+    }	
+}


Property changes on: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/TestJDBCConnector.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

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	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2SqlTranslator.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -22,14 +22,14 @@
 
 package org.teiid.connector.jdbc.db2;
 
-import java.util.Map;
+import static org.junit.Assert.assertEquals;
+
 import java.util.Properties;
 
-import org.teiid.connector.jdbc.db2.DB2SQLTranslator;
+import org.junit.BeforeClass;
+import org.junit.Test;
 import org.teiid.connector.jdbc.translator.TranslatedCommand;
 
-import junit.framework.TestCase;
-
 import com.metamatrix.cdk.api.EnvironmentUtility;
 import com.metamatrix.cdk.api.TranslationUtility;
 import com.metamatrix.cdk.unittest.FakeTranslationFactory;
@@ -40,34 +40,21 @@
 
 /**
  */
-public class TestDB2SqlTranslator extends TestCase {
+public class TestDB2SqlTranslator {
 
-    private static Map MODIFIERS;
     private static DB2SQLTranslator TRANSLATOR; 
 
-    static {
-        try {
-            TRANSLATOR = new DB2SQLTranslator();        
-            TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
-            MODIFIERS = TRANSLATOR.getFunctionModifiers();
-        } catch(ConnectorException e) {
-            e.printStackTrace();    
-        }
+    @BeforeClass
+    public static void setUp() throws ConnectorException {
+        TRANSLATOR = new DB2SQLTranslator();        
+        TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
     }
-
-    /**
-     * Constructor for TestSqlServerConversionVisitor.
-     * @param name
-     */
-    public TestDB2SqlTranslator(String name) {
-        super(name);
-    }
     
     public String getTestVDB() {
         return UnitTestUtil.getTestDataPath() + "/PartsSupplier.vdb"; //$NON-NLS-1$
     }
     
-    public void helpTestVisitor(TranslationUtility util, String input, Map modifiers,  String expectedOutput) throws ConnectorException {
+    public void helpTestVisitor(TranslationUtility util, String input, String expectedOutput) throws ConnectorException {
         // Convert from sql to objects
         ICommand obj = util.parseCommand(input);
         
@@ -78,24 +65,46 @@
         
         assertEquals("Did not get correct sql", expectedOutput, tc.getSql());             //$NON-NLS-1$
     }
-            
+
+    @Test
     public void testRowLimit() throws Exception {
         String input = "select intkey from bqt1.smalla limit 100"; //$NON-NLS-1$
         String output = "SELECT SmallA.IntKey FROM SmallA FETCH FIRST 100 ROWS ONLY";  //$NON-NLS-1$
 
         helpTestVisitor(FakeTranslationFactory.getInstance().getBQTTranslationUtility(),
             input, 
-            MODIFIERS,
             output);
     }
     
+    @Test
     public void testCrossJoin() throws Exception{
         String input = "SELECT bqt1.smalla.stringkey FROM bqt1.smalla cross join bqt1.smallb"; //$NON-NLS-1$
         String output = "SELECT SmallA.StringKey FROM SmallA INNER JOIN SmallB ON 1 = 1";  //$NON-NLS-1$
 
         helpTestVisitor(FakeTranslationFactory.getInstance().getBQTTranslationUtility(),
             input, 
-            MODIFIERS,
             output);
     }
+    
+    @Test
+    public void testConcat2_useLiteral() throws Exception {
+        String input = "select concat2(stringnum,'_xx') from BQT1.Smalla"; //$NON-NLS-1$
+        String output = "SELECT concat(coalesce(SmallA.StringNum, ''), '_xx') FROM SmallA";  //$NON-NLS-1$
+        
+        helpTestVisitor(FakeTranslationFactory.getInstance().getBQTTranslationUtility(),
+                input, 
+                output);
+
+    }
+
+    @Test
+    public void testConcat2() throws Exception {
+        String input = "select concat2(stringnum, stringnum) from BQT1.Smalla"; //$NON-NLS-1$       
+        String output = "SELECT CASE WHEN SmallA.StringNum IS NULL THEN NULL ELSE concat(coalesce(SmallA.StringNum, ''), coalesce(SmallA.StringNum, '')) END FROM SmallA";  //$NON-NLS-1$
+        
+        helpTestVisitor(FakeTranslationFactory.getInstance().getBQTTranslationUtility(),
+                input, 
+                output);
+    }    
+
 }

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/derby/TestDerbyConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/derby/TestDerbyConvertModifier.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/derby/TestDerbyConvertModifier.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -111,11 +111,11 @@
     }
 
     public void testStringToFloat() throws Exception {
-        helpTest(LANG_FACTORY.createLiteral("5", String.class), "float", "cast(cast('5' as decimal) as float)");//$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+        helpTest(LANG_FACTORY.createLiteral("5", String.class), "float", "cast(cast('5' AS decimal) AS float)");//$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
     }
 
     public void testStringToDouble() throws Exception {
-        helpTest(LANG_FACTORY.createLiteral("5", String.class), "double", "cast(cast('5' as decimal) as double)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        helpTest(LANG_FACTORY.createLiteral("5", String.class), "double", "cast(cast('5' AS decimal) AS double)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
     }
 
     public void testStringToDate() throws Exception {
@@ -131,7 +131,7 @@
     }
 
     public void testStringToBigDecimal() throws Exception {
-        helpTest(LANG_FACTORY.createLiteral("5", String.class), "bigdecimal", "cast('5' as decimal)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        helpTest(LANG_FACTORY.createLiteral("5", String.class), "bigdecimal", "cast('5' AS decimal)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
     }
 
     // Source = CHAR
@@ -437,7 +437,7 @@
     }
 
     public void testDoubleToFloat() throws Exception {
-        helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "float", "cast(1.2 as float)"); //$NON-NLS-1$ //$NON-NLS-2$
+        helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "float", "cast(1.2 AS float)"); //$NON-NLS-1$ //$NON-NLS-2$
     }
 
     public void testDoubleToBigDecimal() throws Exception {
@@ -475,7 +475,7 @@
     }
 
     public void testBigDecimalToFloat() throws Exception {
-        helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "float", "cast(1.0 as float)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "float", "cast(1.0 AS float)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
     }
 
     public void testBigDecimalToDoublel() throws Exception {

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/extension/impl/TestEscapeSyntaxModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/extension/impl/TestEscapeSyntaxModifier.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/extension/impl/TestEscapeSyntaxModifier.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -22,6 +22,7 @@
 
 package org.teiid.connector.jdbc.extension.impl;
 
+import java.sql.Timestamp;
 import java.util.Arrays;
 import java.util.List;
 
@@ -32,6 +33,8 @@
 import com.metamatrix.cdk.CommandBuilder;
 import com.metamatrix.connector.language.IFunction;
 import com.metamatrix.connector.language.ILiteral;
+import com.metamatrix.connector.visitor.util.SQLReservedWords;
+import com.metamatrix.query.unittest.TimestampUtil;
 
 /**
  */
@@ -46,17 +49,32 @@
     }
 
     public void testEscape() {
-        EscapeSyntaxModifier mod = new EscapeSyntaxModifier();
-    
         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$
                 
-        func = (IFunction) mod.modify(func);
-        List parts = mod.translate(func);
-        
-        List expected = Arrays.asList(new Object[] { "{fn ", "concat", "(", arg1, ", ", arg2, ")", "}"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
-        assertEquals(expected, parts);
+        helpTest(func, "{fn concat('arg1', 'arg2')}");
     }
     
+    public void testTimestampAdd() {
+        ILiteral arg1 = CommandBuilder.getLanuageFactory().createLiteral(SQLReservedWords.SQL_TSI_HOUR, String.class); //$NON-NLS-1$
+        ILiteral arg2 = CommandBuilder.getLanuageFactory().createLiteral(Integer.valueOf(1), Integer.class);//$NON-NLS-1$
+        ILiteral arg3 = CommandBuilder.getLanuageFactory().createLiteral(TimestampUtil.createTimestamp(0, 0, 0, 0, 0, 0, 0), Timestamp.class);//$NON-NLS-1$
+        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();
+
+		func = (IFunction) mod.modify(func);
+        List parts = mod.translate(func);
+        StringBuffer sb = new StringBuffer();
+        for (Object object : parts) {
+			sb.append(object);
+		}
+        assertEquals(expected, sb.toString());
+	}
+    
 }

Modified: trunk/connectors/sandbox/connector-oracle-spatial/src/main/java/com/metamatrix/connector/jdbc/oracle/spatial/NnDistanceFunctionModifier.java
===================================================================
--- trunk/connectors/sandbox/connector-oracle-spatial/src/main/java/com/metamatrix/connector/jdbc/oracle/spatial/NnDistanceFunctionModifier.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/sandbox/connector-oracle-spatial/src/main/java/com/metamatrix/connector/jdbc/oracle/spatial/NnDistanceFunctionModifier.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -38,7 +38,4 @@
         return function;
     }
 
-    public List translate(IFunction function) {
-        return super.translate(function);
-    }
 }

Modified: trunk/connectors/sandbox/connector-oracle-spatial/src/main/java/com/metamatrix/connector/jdbc/oracle/spatial/OracleSpatialFunctionModifier.java
===================================================================
--- trunk/connectors/sandbox/connector-oracle-spatial/src/main/java/com/metamatrix/connector/jdbc/oracle/spatial/OracleSpatialFunctionModifier.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/connectors/sandbox/connector-oracle-spatial/src/main/java/com/metamatrix/connector/jdbc/oracle/spatial/OracleSpatialFunctionModifier.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -27,19 +27,10 @@
 import org.teiid.connector.jdbc.translator.BasicFunctionModifier;
 
 import com.metamatrix.connector.language.IExpression;
-import com.metamatrix.connector.language.IFunction;
 import com.metamatrix.connector.language.ILiteral;
 
 public class OracleSpatialFunctionModifier extends BasicFunctionModifier {
 
-    public IExpression modify(IFunction function) {
-        return super.modify(function);
-    }
-
-    public List translate(IFunction function) {
-        return super.translate(function);
-    }
-
     protected void addParamWithConversion(List objs,
                                           IExpression expression) {
         if ((expression instanceof ILiteral) && (((ILiteral)expression).getType() == String.class))

Modified: trunk/server/src/main/java/com/metamatrix/metadata/runtime/spi/jdbc/JDBCConnector.java
===================================================================
--- trunk/server/src/main/java/com/metamatrix/metadata/runtime/spi/jdbc/JDBCConnector.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/server/src/main/java/com/metamatrix/metadata/runtime/spi/jdbc/JDBCConnector.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -27,7 +27,6 @@
 import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 
 import com.metamatrix.common.connection.BaseTransaction;

Modified: trunk/test-integration/src/test/java/com/metamatrix/cdk/api/TestTranslationUtility.java
===================================================================
--- trunk/test-integration/src/test/java/com/metamatrix/cdk/api/TestTranslationUtility.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/test-integration/src/test/java/com/metamatrix/cdk/api/TestTranslationUtility.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -81,7 +81,6 @@
 
     public void testGetRMD() throws Exception {
         TranslationUtility util = new TranslationUtility(getTestVDB());
-        RuntimeMetadata rmd = util.createRuntimeMetadata();
         
         // Translate command to get some ids
         IQuery query = (IQuery) util.parseCommand("select * from partssupplier.parts"); //$NON-NLS-1$

Modified: trunk/test-integration/src/test/java/com/metamatrix/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java
===================================================================
--- trunk/test-integration/src/test/java/com/metamatrix/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/test-integration/src/test/java/com/metamatrix/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -22,18 +22,14 @@
 
 package com.metamatrix.connector.jdbc.oracle;
 
-import java.util.Map;
 import java.util.Properties;
 
+import junit.framework.TestCase;
+
 import org.teiid.connector.jdbc.JDBCPropertyNames;
-import org.teiid.connector.jdbc.oracle.ExtractFunctionModifier;
 import org.teiid.connector.jdbc.oracle.OracleSQLTranslator;
-import org.teiid.connector.jdbc.translator.FunctionReplacementVisitor;
-import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
 import org.teiid.connector.jdbc.translator.TranslatedCommand;
 
-import junit.framework.TestCase;
-
 import com.metamatrix.cdk.CommandBuilder;
 import com.metamatrix.cdk.api.EnvironmentUtility;
 import com.metamatrix.cdk.api.TranslationUtility;
@@ -43,7 +39,6 @@
 import com.metamatrix.connector.language.ICommand;
 import com.metamatrix.connector.metadata.runtime.RuntimeMetadata;
 import com.metamatrix.core.util.UnitTestUtil;
-import com.metamatrix.dqp.internal.datamgr.impl.ConnectorEnvironmentImpl;
 import com.metamatrix.dqp.internal.datamgr.impl.ExecutionContextImpl;
 import com.metamatrix.dqp.internal.datamgr.impl.FakeExecutionContextImpl;
 import com.metamatrix.dqp.internal.datamgr.metadata.RuntimeMetadataImpl;
@@ -56,24 +51,8 @@
 /**
  */
 public class TestOracleSQLConversionVisitor extends TestCase {
-    private static Map MODIFIERS;
     private static ExecutionContext EMPTY_CONTEXT = new FakeExecutionContextImpl();
     
-    static {
-        OracleSQLTranslator trans = new OracleSQLTranslator();
-        
-        try {
-            trans.initialize(new ConnectorEnvironmentImpl(new Properties(), null, null));
-        } catch(ConnectorException e) {
-            e.printStackTrace();
-        }
-        
-        MODIFIERS = trans.getFunctionModifiers();
-        
-        ExtractFunctionModifier extractMod = new ExtractFunctionModifier ("month"); //$NON-NLS-1$
-        MODIFIERS.put("extract", extractMod);  //$NON-NLS-1$
-    }
-
     /**
      * Constructor for TestOracleSQLConversionVisitor.
      * @param name
@@ -86,37 +65,36 @@
         return UnitTestUtil.getTestDataPath() + "/PartsSupplierOracle.vdb"; //$NON-NLS-1$
     }
     
-    private void helpTestVisitor(String vdb, String input, Map modifiers, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
-        helpTestVisitor(vdb, input, modifiers, EMPTY_CONTEXT, dbmsTimeZone, expectedOutput, false);
+    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, Map modifiers, String dbmsTimeZone, String expectedOutput, boolean correctNaming) throws ConnectorException {
-        helpTestVisitor(vdb, input, modifiers, EMPTY_CONTEXT, dbmsTimeZone, expectedOutput, correctNaming);
+    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, Map modifiers, ExecutionContext context, String dbmsTimeZone, String expectedOutput, boolean correctNaming) throws ConnectorException {
+    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, util.createRuntimeMetadata(), modifiers, context, dbmsTimeZone, expectedOutput);
+		this.helpTestVisitor(obj, util.createRuntimeMetadata(), context, dbmsTimeZone, expectedOutput);
     }
 
     /** Helper method takes a QueryMetadataInterface impl instead of a VDB filename 
      * @throws ConnectorException 
      */
-    private void helpTestVisitor(QueryMetadataInterface metadata, String input, Map modifiers, ExecutionContext context, String dbmsTimeZone, String expectedOutput) 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);
         RuntimeMetadata runtimeMetadata = new RuntimeMetadataImpl(metadata);
-		this.helpTestVisitor(obj, runtimeMetadata, modifiers, context, dbmsTimeZone, expectedOutput);
+		this.helpTestVisitor(obj, runtimeMetadata, context, dbmsTimeZone, expectedOutput);
     }
     
-    private void helpTestVisitor(ICommand obj, RuntimeMetadata metadata, Map modifiers, ExecutionContext context, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
+    private void helpTestVisitor(ICommand obj, RuntimeMetadata metadata, ExecutionContext context, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
 
         
         // Apply function replacement
-        FunctionReplacementVisitor funcVisitor = new FunctionReplacementVisitor(modifiers);
         OracleSQLTranslator translator = new OracleSQLTranslator();
         Properties p = new Properties();
         if (dbmsTimeZone != null) {
@@ -124,9 +102,7 @@
         }
         translator.initialize(EnvironmentUtility.createEnvironment(p, false));
         // Convert back to SQL
-        SQLConversionVisitor sqlVisitor = translator.getSQLConversionVisitor();      
-        sqlVisitor.setExecutionContext(context);
-        TranslatedCommand tc = new TranslatedCommand(context, translator, sqlVisitor, funcVisitor);
+        TranslatedCommand tc = new TranslatedCommand(context, translator);
         tc.translateCommand(obj);
         
         // Check stuff
@@ -144,19 +120,17 @@
         
         helpTestVisitor(getTestVDB(),
                         input, 
-                        MODIFIERS, null,
-                        output);
+                        null, output);
     }
     
-    /** defect 21775 */
+    /** defect 21775 */
     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.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, 
-                        MODIFIERS, EMPTY_CONTEXT, null,
-                        output);
+                        EMPTY_CONTEXT, null, output);
     }
     
     /**
@@ -171,8 +145,7 @@
         
         helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
                 input, 
-                MODIFIERS, EMPTY_CONTEXT, null,
-                output);
+                EMPTY_CONTEXT, null, output);
     }
     
     public void testCharFunction() throws Exception {
@@ -181,7 +154,6 @@
         
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }    
@@ -192,7 +164,6 @@
     
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }
@@ -203,7 +174,6 @@
     
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }
@@ -214,7 +184,6 @@
     
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }
@@ -225,7 +194,6 @@
     
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }
@@ -236,7 +204,6 @@
     
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }
@@ -248,7 +215,6 @@
     
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }
@@ -259,7 +225,6 @@
     
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }
@@ -271,7 +236,6 @@
         
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }
@@ -282,7 +246,6 @@
         String output = "SELECT to_date(PARTS.PART_ID, 'YYYY-MM-DD') FROM PARTS";  //$NON-NLS-1$
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }
@@ -294,7 +257,6 @@
     
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }
@@ -306,7 +268,6 @@
                
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }
@@ -317,14 +278,12 @@
                
         helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
                 input, 
-                MODIFIERS, EMPTY_CONTEXT, null,
-                output);
+                EMPTY_CONTEXT, null, output);
     }
 
     public void testAliasedGroup() throws Exception {
         helpTestVisitor(getTestVDB(),
             "select y.part_name from parts as y", //$NON-NLS-1$
-            MODIFIERS,
             null,
             "SELECT y.PART_NAME FROM PARTS y"); //$NON-NLS-1$
     }
@@ -332,7 +291,6 @@
     public void testDateLiteral() throws Exception {
         helpTestVisitor(getTestVDB(),
             "select {d'2002-12-31'} FROM parts", //$NON-NLS-1$
-            MODIFIERS,
             null,
             "SELECT {d'2002-12-31'} FROM PARTS"); //$NON-NLS-1$
     }
@@ -340,7 +298,6 @@
     public void testTimeLiteral() throws Exception {
         helpTestVisitor(getTestVDB(),
             "select {t'13:59:59'} FROM parts", //$NON-NLS-1$
-            MODIFIERS,
             null,
             "SELECT {ts'1970-01-01 13:59:59'} FROM PARTS"); //$NON-NLS-1$
     }
@@ -348,7 +305,6 @@
     public void testTimestampLiteral() throws Exception {
         helpTestVisitor(getTestVDB(),
             "select {ts'2002-12-31 13:59:59'} FROM parts", //$NON-NLS-1$
-            MODIFIERS,
             null,
             "SELECT {ts'2002-12-31 13:59:59.0'} FROM PARTS"); //$NON-NLS-1$
     }
@@ -356,23 +312,22 @@
     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$
-                        MODIFIERS,
                         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", true); //$NON-NLS-1$
+                        "(SELECT g_2.PART_ID AS c_0 FROM PARTS g_2 UNION ALL SELECT g_1.PART_NAME AS c_0 FROM PARTS g_1) UNION ALL SELECT g_0.PART_ID AS c_0 FROM PARTS g_0 ORDER BY c_0",
+                        true); //$NON-NLS-1$
     }
     
     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$
-                        MODIFIERS,
                         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", true); //$NON-NLS-1$
+                        "SELECT g_1.PART_ID AS c_0 FROM PARTS g_1 UNION ALL SELECT g_0.PART_NAME AS c_0 FROM PARTS g_0 ORDER BY c_0",
+                        true); //$NON-NLS-1$
     }
 
     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$
-                        MODIFIERS,
                         null,
                         "SELECT PARTS.PART_ID AS p FROM PARTS UNION ALL SELECT PARTS.PART_NAME FROM PARTS ORDER BY p"); //$NON-NLS-1$
     }
@@ -383,8 +338,7 @@
         
         helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
                 input, 
-                MODIFIERS, EMPTY_CONTEXT, null,
-                output);
+                EMPTY_CONTEXT, null, output);
     }
     
 
@@ -403,7 +357,6 @@
                
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);
     }
@@ -422,7 +375,6 @@
                
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);        
     }
@@ -440,7 +392,6 @@
                
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             null,
             output);        
     }    
@@ -460,10 +411,10 @@
         
         helpTestVisitor(getTestVDB(),
             input, 
-            MODIFIERS,
             context,
             null,
-            output, false);        
+            output,
+            false);        
     }
     
     /**
@@ -477,7 +428,7 @@
 
         FakeMetadataFacade metadata = exampleCase3845();
 
-        helpTestVisitor(metadata, input, MODIFIERS, EMPTY_CONTEXT, null, output);
+        helpTestVisitor(metadata, input, EMPTY_CONTEXT, null, output);
     }
     
     /** create fake BQT metadata to test this case, name in source is important */
@@ -496,7 +447,7 @@
     }
 
 	public void helpTestVisitor(String vdb, String input, String expectedOutput) throws ConnectorException {
-		helpTestVisitor(vdb, input, MODIFIERS, null, expectedOutput);
+		helpTestVisitor(vdb, input, null, expectedOutput);
 	}
 
     public void testRowLimit2() throws Exception {
@@ -505,18 +456,16 @@
                
         helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
                 input, 
-                MODIFIERS, EMPTY_CONTEXT, null,
-                output);        
+                EMPTY_CONTEXT, null, output);        
     }
     
     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 <= 100) WHERE ROWNUM_ > 50"; //$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, 
-                MODIFIERS, EMPTY_CONTEXT, null,
-                output);        
+                EMPTY_CONTEXT, null, output);        
     }
             
     public void testLimitWithNestedInlineView() throws Exception {
@@ -525,8 +474,7 @@
                
         helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
                 input, 
-                MODIFIERS, EMPTY_CONTEXT, null,
-                output);        
+                EMPTY_CONTEXT, null, output);        
     }
     
     public void testExceptAsMinus() throws Exception {
@@ -535,8 +483,31 @@
                
         helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
                 input, 
-                MODIFIERS, EMPTY_CONTEXT, null,
-                output);        
+                EMPTY_CONTEXT, null, output);        
+    }
+    
+    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);
+    }
+
+    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";
+        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
+    }
+    
+    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";
+        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
+    }
+    
+    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";
+        helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
     }
 
 }

Modified: trunk/test-integration/src/test/java/com/metamatrix/data/visitor/util/TestSQLStringVisitor.java
===================================================================
--- trunk/test-integration/src/test/java/com/metamatrix/data/visitor/util/TestSQLStringVisitor.java	2009-02-24 21:55:33 UTC (rev 493)
+++ trunk/test-integration/src/test/java/com/metamatrix/data/visitor/util/TestSQLStringVisitor.java	2009-02-25 03:49:48 UTC (rev 494)
@@ -30,13 +30,16 @@
 
 import junit.framework.TestCase;
 
+import com.metamatrix.cdk.unittest.FakeTranslationFactory;
 import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.connector.language.ICommand;
 import com.metamatrix.connector.language.IElement;
 import com.metamatrix.connector.language.IExpression;
 import com.metamatrix.connector.language.IFunction;
 import com.metamatrix.connector.language.IGroup;
 import com.metamatrix.connector.language.ILanguageObject;
 import com.metamatrix.connector.metadata.runtime.RuntimeMetadata;
+import com.metamatrix.connector.visitor.util.SQLReservedWords;
 import com.metamatrix.connector.visitor.util.SQLStringVisitor;
 import com.metamatrix.dqp.internal.datamgr.language.AggregateImpl;
 import com.metamatrix.dqp.internal.datamgr.language.ElementImpl;
@@ -445,4 +448,11 @@
         String expected = "EXEC sq3(, x, 1)"; //$NON-NLS-1$
         assertEquals(expected, getString(TestProcedureImpl.example()));
     }
+    
+    public void testTimestampAddFunction() throws Exception {
+    	String sql = "select timestampadd(" +SQLReservedWords.SQL_TSI_DAY+ ", 2, timestampvalue) from bqt1.smalla"; //$NON-NLS-1$
+    	
+    	ICommand command = FakeTranslationFactory.getInstance().getBQTTranslationUtility().parseCommand(sql);
+    	assertEquals("SELECT timestampadd(SQL_TSI_DAY, 2, SmallA.TimestampValue) FROM SmallA", command.toString()); //$NON-NLS-1$
+    }
 }




More information about the teiid-commits mailing list