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$
+ }
}