teiid SVN: r1299 - in trunk: common-core/src/main/java/com/metamatrix/common/types/basic and 10 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2009-08-31 18:18:33 -0400 (Mon, 31 Aug 2009)
New Revision: 1299
Removed:
trunk/common-core/src/main/java/com/metamatrix/common/types/AbstractTransform.java
Modified:
trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java
trunk/common-core/src/main/java/com/metamatrix/common/types/Transform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/AnyToObjectTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/AnyToStringTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/BigDecimalToBigIntegerTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/BigIntegerToBigDecimalTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/BooleanToNumberTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/ClobToStringTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/DateToTimestampTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FixedNumberToBigDecimalTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FixedNumberToBigIntegerTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FloatingNumberToBigDecimalTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FloatingNumberToBigIntegerTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NullToAnyTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToBooleanTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToByteTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToDoubleTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToFloatTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToIntegerTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToLongTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToShortTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/ObjectToAnyTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/SQLXMLToStringTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBigDecimalTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBigIntegerTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBooleanTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToByteTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToCharacterTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToClobTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToDateTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToDoubleTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToFloatTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToIntegerTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToLongTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToSQLXMLTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToShortTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToTimeTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToTimestampTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/TimeToTimestampTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/TimestampToDateTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/TimestampToTimeTransform.java
trunk/common-core/src/main/resources/com/metamatrix/core/i18n.properties
trunk/common-core/src/test/java/com/metamatrix/common/types/TestDataTypeManager.java
trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestStringToXmlTransform.java
trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestTransforms.java
trunk/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml
trunk/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java
trunk/engine/src/main/java/com/metamatrix/query/function/source/SystemSource.java
trunk/engine/src/main/java/com/metamatrix/query/processor/xml/XMLValueTranslator.java
trunk/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java
trunk/engine/src/test/java/com/metamatrix/query/function/TestFunction.java
trunk/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java
Log:
TEIID-813 TEIID-811 TEIID-745 TEIID-744 reverting changes to parseXXX functions, adding range checks for numeric conversions and removing overly optimistic rewriter optimizations
Deleted: trunk/common-core/src/main/java/com/metamatrix/common/types/AbstractTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/AbstractTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/AbstractTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -1,133 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package com.metamatrix.common.types;
-
-import com.metamatrix.core.util.HashCodeUtil;
-
-/**
- * This fills in most of the details of a Transform and provides additional
- * helpful methods as well. Transform writers should only need to fill in
- * getSourceType(), getTargetType(), and transform().
- */
-public abstract class AbstractTransform implements Transform {
-
- /**
- * This method transforms a value of the source type into a value
- * of the target type.
- * @param value Incoming value of source type
- * @return Outgoing value of target type
- * @throws TransformationException if value is an incorrect input type or
- * the transformation fails
- */
- public abstract Object transform(Object value) throws TransformationException;
-
- /**
- * Type of the incoming value.
- * @return Source type
- */
- public abstract Class getSourceType();
-
- /**
- * Name of the source type.
- * @return Name of source type
- */
- public String getSourceTypeName() {
- return DataTypeManager.getDataTypeName(getSourceType());
- }
-
- /**
- * Type of the outgoing value.
- * @return Target type
- */
- public abstract Class getTargetType();
-
- /**
- * Name of the target type.
- * @return Name of target type
- */
- public String getTargetTypeName() {
- return DataTypeManager.getDataTypeName(getTargetType());
- }
-
- /**
- * Get nice display name for GUIs.
- * @return Display name
- */
- public String getDisplayName() {
- return getSourceTypeName() + " to " + getTargetTypeName(); //$NON-NLS-1$
- }
-
- /**
- * Get description.
- * @return Description of transform
- */
- public String getDescription() {
- return getDisplayName();
- }
-
- /**
- * Flag if the transformation from source to target is
- * a narrowing transformation that may lose information.
- * This class returns false by default. This method should
- * be overridden if the transform is a narrowing transform.
- * @return False unless overridden.
- */
- public boolean isNarrowing() {
- return false;
- }
-
- /**
- * Override Object.toString() to do getDisplayName() version.
- * @return String representation of object
- */
- public String toString() {
- return getDisplayName();
- }
-
- /**
- * Override Object.hashCode() to build a hash based on types.
- * @return Hash code
- */
- public int hashCode() {
- return HashCodeUtil.hashCode( getSourceTypeName().hashCode(), getTargetTypeName().hashCode() );
- }
-
- /**
- * Override Object.equals() to build an equals based on src and tgt types.
- * @param obj Other object
- * @return True if obj==this
- */
- public boolean equals(Object obj) {
- if(this == obj) {
- return true;
- }
-
- if(! this.getClass().isInstance(obj)) {
- return false;
- }
-
- Transform other = (Transform) obj;
- return other.getSourceType() == this.getSourceType() &&
- other.getTargetType() == this.getTargetType();
- }
-}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -26,7 +26,12 @@
import java.math.BigInteger;
import java.sql.Blob;
import java.sql.Clob;
+//## JDBC4.0-begin ##
import java.sql.SQLXML;
+//## JDBC4.0-end ##
+/*## JDBC3.0-JDK1.5-begin ##
+import com.metamatrix.core.jdbc.SQLXML;
+## JDBC3.0-JDK1.5-end ##*/
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.Collections;
@@ -322,104 +327,6 @@
}
/**
- * Get the preferred data value transformation between the firstType and the
- * secondType. The transform returned may be either from the firstType to
- * secondType or from secondType to firstType.
- *
- * @param firstType
- * First value type
- * @param secondType
- * Second value type
- * @return The preferred transform if one exists, null otherwise
- */
- public static Transform getPreferredTransform(Class firstType,
- Class secondType) {
- if (firstType == null || secondType == null) {
- throw new IllegalArgumentException(CorePlugin.Util.getString(
- ErrorMessageKeys.TYPES_ERR_0002, firstType, secondType));
- }
-
- // Get transforms
- String firstName = DataTypeManager.getDataTypeName(firstType);
- String secondName = DataTypeManager.getDataTypeName(secondType);
-
- return DataTypeManager.getPreferredTransformHelper(firstName,
- secondName);
- }
-
- /**
- * Get the preferred data value transformation between the firstType and the
- * secondType. The transform returned may be either from the firstType to
- * secondType or from secondType to firstType.
- *
- * @param firstTypeName
- * First value type
- * @param secondTypeName
- * Second value type
- * @return The preferred transform if one exists, null otherwise
- */
- public static Transform getPreferredTransform(String firstTypeName,
- String secondTypeName) {
- if (firstTypeName == null || secondTypeName == null) {
- throw new IllegalArgumentException(CorePlugin.Util.getString(
- ErrorMessageKeys.TYPES_ERR_0003, firstTypeName,
- secondTypeName));
- }
-
- return DataTypeManager.getPreferredTransformHelper(firstTypeName,
- secondTypeName);
- }
-
- /**
- * Get the preferred data value transformation between the firstType and the
- * secondType. The transform returned may be either from the firstType to
- * secondType or from secondType to firstType.
- *
- * @param firstName
- * First value type name
- * @param secondName
- * Second value type name
- * @return The preferred transform if one exists, null otherwise
- */
- private static Transform getPreferredTransformHelper(String firstTypeName,
- String secondTypeName) {
- // Return null for identity transform
- if (firstTypeName.equals(secondTypeName)) {
- return null;
- }
-
- Transform t1 = getTransformFromMaps(firstTypeName, secondTypeName);
- Transform t2 = getTransformFromMaps(secondTypeName, firstTypeName);
-
- // Check for null transforms
- if (t1 == null) {
- // Can't choose t1 so return t2, which may be null, which is correct
- return t2;
- } else if (t2 == null) {
- // Both transforms are null
- return null;
- }
-
- // We know both transforms are non-null now
- // Rules for choosing:
- // 1) Cast away from a string (string to float instead of float to
- // string)
- // 2) Choose a non-narrowing over narrowing
- // 3) Choose t1 arbitrarily
- if (firstTypeName.equals(DataTypeManager.DefaultDataClasses.STRING.getName())) {
- return t1;
- } else if (secondTypeName.equals(DataTypeManager.DefaultDataClasses.STRING.getName())) {
- return t2;
- } else if (!t1.isNarrowing() && t2.isNarrowing()) {
- return t1;
- } else if (t1.isNarrowing() && !t2.isNarrowing()) {
- return t2;
- } else {
- return t1;
- }
- }
-
- /**
* Does a transformation exist between the source and target type?
*
* @param sourceType
@@ -663,7 +570,7 @@
DataTypeManager.addTransform(new NumberToIntegerTransform(
DefaultDataClasses.DOUBLE, true));
DataTypeManager.addTransform(new NumberToLongTransform(
- DefaultDataClasses.DOUBLE, true));
+ DefaultDataClasses.DOUBLE, false)); //lossy, but not narrowing
DataTypeManager.addTransform(new NumberToShortTransform(
DefaultDataClasses.DOUBLE, true));
DataTypeManager.addTransform(new AnyToStringTransform(DefaultDataClasses.DOUBLE));
@@ -678,7 +585,7 @@
DataTypeManager.addTransform(new NumberToIntegerTransform(
DefaultDataClasses.FLOAT, true));
DataTypeManager.addTransform(new NumberToLongTransform(
- DefaultDataClasses.FLOAT, true));
+ DefaultDataClasses.FLOAT, false)); //lossy, but not narrowing
DataTypeManager.addTransform(new NumberToShortTransform(
DefaultDataClasses.FLOAT, true));
DataTypeManager.addTransform(new AnyToStringTransform(DefaultDataClasses.FLOAT));
@@ -691,7 +598,7 @@
DataTypeManager.addTransform(new NumberToDoubleTransform(
DefaultDataClasses.INTEGER, false));
DataTypeManager.addTransform(new NumberToFloatTransform(
- DefaultDataClasses.INTEGER, false));
+ DefaultDataClasses.INTEGER, false)); //lossy, but not narrowing
DataTypeManager.addTransform(new NumberToLongTransform(
DefaultDataClasses.INTEGER, false));
DataTypeManager.addTransform(new NumberToShortTransform(
@@ -704,9 +611,9 @@
DataTypeManager.addTransform(new NumberToByteTransform(
DefaultDataClasses.LONG));
DataTypeManager.addTransform(new NumberToDoubleTransform(
- DefaultDataClasses.LONG, true));
+ DefaultDataClasses.LONG, false)); //lossy, but not narrowing
DataTypeManager.addTransform(new NumberToFloatTransform(
- DefaultDataClasses.LONG, true));
+ DefaultDataClasses.LONG, false)); //lossy, but not narrowing
DataTypeManager.addTransform(new NumberToIntegerTransform(
DefaultDataClasses.LONG, true));
DataTypeManager.addTransform(new NumberToShortTransform(
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/Transform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/Transform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/Transform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,14 +22,17 @@
package com.metamatrix.common.types;
+import com.metamatrix.core.CorePlugin;
+import com.metamatrix.core.util.HashCodeUtil;
+
/**
* This interface represents the transformation from one data type to
* another. For instance, from java.lang.String to java.lang.Integer
* where java.lang.String is the the source type, "java.lang.String"
* is the source name, etc.
*/
-public interface Transform {
-
+public abstract class Transform {
+
/**
* This method transforms a value of the source type into a value
* of the target type.
@@ -38,49 +41,111 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException;
+ public Object transform(Object value) throws TransformationException {
+ if (value == null) {
+ return null;
+ }
+ return transformDirect(value);
+ }
+
+
+ protected abstract Object transformDirect(Object value) throws TransformationException;
/**
* Type of the incoming value.
* @return Source type
*/
- public Class getSourceType();
+ public abstract Class getSourceType();
/**
* Name of the source type.
* @return Name of source type
*/
- public String getSourceTypeName();
+ public String getSourceTypeName() {
+ return DataTypeManager.getDataTypeName(getSourceType());
+ }
/**
* Type of the outgoing value.
* @return Target type
*/
- public Class getTargetType();
+ public abstract Class getTargetType();
/**
* Name of the target type.
* @return Name of target type
*/
- public String getTargetTypeName();
+ public String getTargetTypeName() {
+ return DataTypeManager.getDataTypeName(getTargetType());
+ }
/**
* Get nice display name for GUIs.
* @return Display name
*/
- public String getDisplayName();
+ public String getDisplayName() {
+ return getSourceTypeName() + " to " + getTargetTypeName(); //$NON-NLS-1$
+ }
/**
* Get description.
* @return Description of transform
*/
- public String getDescription();
+ public String getDescription() {
+ return getDisplayName();
+ }
/**
- * Flag if the transformation from source to target is
+ * Flag if the transformation from source to target is
* a narrowing transformation that may lose information.
- * @return True if transformation is narrowing
+ * This class returns false by default. This method should
+ * be overridden if the transform is a narrowing transform.
+ * @return False unless overridden.
*/
- public boolean isNarrowing();
+ public boolean isNarrowing() {
+ return false;
+ }
+ /**
+ * Override Object.toString() to do getDisplayName() version.
+ * @return String representation of object
+ */
+ public String toString() {
+ return getDisplayName();
+ }
+
+ /**
+ * Override Object.hashCode() to build a hash based on types.
+ * @return Hash code
+ */
+ public int hashCode() {
+ return HashCodeUtil.hashCode( getSourceTypeName().hashCode(), getTargetTypeName().hashCode() );
+ }
+
+ /**
+ * Override Object.equals() to build an equals based on src and tgt types.
+ * @param obj Other object
+ * @return True if obj==this
+ */
+ public boolean equals(Object obj) {
+ if(this == obj) {
+ return true;
+ }
+
+ if(! this.getClass().isInstance(obj)) {
+ return false;
+ }
+
+ Transform other = (Transform) obj;
+ return other.getSourceType() == this.getSourceType() &&
+ other.getTargetType() == this.getTargetType();
+ }
+
+ protected void checkValueRange(Object value, Number min, Number max)
+ throws TransformationException {
+ if (((Comparable)value).compareTo(DataTypeManager.transformValue(min, getSourceType())) < 0 || ((Comparable)value).compareTo(DataTypeManager.transformValue(max, getSourceType())) > 0) {
+ throw new TransformationException(CorePlugin.Util.getString("transform.value_out_of_range", value, getSourceType().getSimpleName(), getTargetType().getSimpleName())); //$NON-NLS-1$
+ }
+ }
+
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/AnyToObjectTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/AnyToObjectTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/AnyToObjectTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,11 +22,11 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class AnyToObjectTransform extends AbstractTransform {
+public class AnyToObjectTransform extends Transform {
private Class<?> sourceType;
@@ -47,7 +47,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
+ public Object transformDirect(Object value) throws TransformationException {
return value;
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/AnyToStringTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/AnyToStringTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/AnyToStringTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,13 +22,15 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.*;
+import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.common.types.Transform;
+import com.metamatrix.common.types.TransformationException;
/**
* This class can be subclassed to do a simple anything-->String by
* just calling toString(). Just extend and implement getSouceType().
*/
-public class AnyToStringTransform extends AbstractTransform {
+public class AnyToStringTransform extends Transform {
private Class<?> sourceType;
@@ -60,11 +62,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return null;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
String result = value.toString();
if (result != null && result.length() > DataTypeManager.MAX_STRING_LENGTH) {
return result.substring(0, DataTypeManager.MAX_STRING_LENGTH);
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/BigDecimalToBigIntegerTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/BigDecimalToBigIntegerTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/BigDecimalToBigIntegerTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -25,10 +25,10 @@
import java.math.BigDecimal;
import java.math.BigInteger;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class BigDecimalToBigIntegerTransform extends AbstractTransform {
+public class BigDecimalToBigIntegerTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -38,11 +38,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
return ((BigDecimal) value).toBigInteger();
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/BigIntegerToBigDecimalTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/BigIntegerToBigDecimalTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/BigIntegerToBigDecimalTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -25,10 +25,10 @@
import java.math.BigDecimal;
import java.math.BigInteger;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class BigIntegerToBigDecimalTransform extends AbstractTransform {
+public class BigIntegerToBigDecimalTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -38,11 +38,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
return new BigDecimal((BigInteger) value);
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/BooleanToNumberTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/BooleanToNumberTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/BooleanToNumberTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,11 +22,11 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class BooleanToNumberTransform extends AbstractTransform {
+public class BooleanToNumberTransform extends Transform {
private Object trueVal;
private Object falseVal;
@@ -49,10 +49,7 @@
}
@Override
- public Object transform(Object value) throws TransformationException {
- if (value == null) {
- return null;
- }
+ public Object transformDirect(Object value) throws TransformationException {
return value.equals(Boolean.TRUE)?trueVal:falseVal;
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/ClobToStringTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/ClobToStringTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/ClobToStringTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -46,11 +46,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
ClobType source = (ClobType)value;
try {
@@ -73,7 +69,7 @@
}
/**
- * @see com.metamatrix.common.types.AbstractTransform#isNarrowing()
+ * @see com.metamatrix.common.types.Transform#isNarrowing()
*/
public boolean isNarrowing() {
return true;
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/DateToTimestampTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/DateToTimestampTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/DateToTimestampTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -24,10 +24,10 @@
import java.sql.Timestamp;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class DateToTimestampTransform extends AbstractTransform {
+public class DateToTimestampTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -37,11 +37,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
return new Timestamp( ((java.sql.Date) value).getTime() );
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FixedNumberToBigDecimalTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FixedNumberToBigDecimalTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FixedNumberToBigDecimalTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -24,11 +24,11 @@
import java.math.BigDecimal;
-import com.metamatrix.common.types.AbstractTransform;
import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class FixedNumberToBigDecimalTransform extends AbstractTransform {
+public class FixedNumberToBigDecimalTransform extends Transform {
private Class<?> sourceType;
@@ -44,11 +44,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
return BigDecimal.valueOf(((Number)value).longValue());
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FixedNumberToBigIntegerTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FixedNumberToBigIntegerTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FixedNumberToBigIntegerTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -24,11 +24,11 @@
import java.math.BigInteger;
-import com.metamatrix.common.types.AbstractTransform;
import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class FixedNumberToBigIntegerTransform extends AbstractTransform {
+public class FixedNumberToBigIntegerTransform extends Transform {
private Class<?> sourceType;
@@ -44,11 +44,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
return BigInteger.valueOf(((Number)value).longValue());
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FloatingNumberToBigDecimalTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FloatingNumberToBigDecimalTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FloatingNumberToBigDecimalTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -24,11 +24,11 @@
import java.math.BigDecimal;
-import com.metamatrix.common.types.AbstractTransform;
import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class FloatingNumberToBigDecimalTransform extends AbstractTransform {
+public class FloatingNumberToBigDecimalTransform extends Transform {
private Class<?> sourceType;
@@ -44,11 +44,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
return BigDecimal.valueOf(((Number)value).doubleValue());
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FloatingNumberToBigIntegerTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FloatingNumberToBigIntegerTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/FloatingNumberToBigIntegerTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,13 +22,13 @@
package com.metamatrix.common.types.basic;
-import java.math.BigInteger;
+import java.math.BigDecimal;
-import com.metamatrix.common.types.AbstractTransform;
import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class FloatingNumberToBigIntegerTransform extends AbstractTransform {
+public class FloatingNumberToBigIntegerTransform extends Transform {
private Class<?> sourceType;
@@ -44,17 +44,8 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
- String doubleString = String.valueOf(value);
- int index = doubleString.lastIndexOf("."); //$NON-NLS-1$
- if(index >= 0) {
- return new BigInteger(doubleString.substring(0, index));
- }
- return new BigInteger(doubleString);
+ public Object transformDirect(Object value) throws TransformationException {
+ return BigDecimal.valueOf(((Number)value).doubleValue()).toBigInteger();
}
/**
@@ -73,11 +64,7 @@
return DataTypeManager.DefaultDataClasses.BIG_INTEGER;
}
- /**
- * Flag if the transformation from source to target is
- * a narrowing transformation that may lose information.
- * @return True - this transformation is narrowing
- */
+ @Override
public boolean isNarrowing() {
return true;
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NullToAnyTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NullToAnyTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NullToAnyTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,17 +22,17 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
import com.metamatrix.common.types.NullType;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-import com.metamatrix.core.CorePlugin;
+import com.metamatrix.core.util.Assertion;
/**
* This class can do a simple null-->anything.
* Incoming value must be null and outgoing value is the same.
* This is purely for type purposes.
*/
-public class NullToAnyTransform extends AbstractTransform {
+public class NullToAnyTransform extends Transform {
private Class<?> targetType;
@@ -64,12 +64,9 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return null;
- }
- Object[] params = new Object[] { getSourceType(), value, value.getClass().getName()};
- throw new TransformationException(CorePlugin.Util.getString("NullToAnyTransform.Invalid_value", params)); //$NON-NLS-1$
+ public Object transformDirect(Object value) throws TransformationException {
+ Assertion.isNull(value);
+ return null;
}
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToBooleanTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToBooleanTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToBooleanTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,11 +22,11 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class NumberToBooleanTransform extends AbstractTransform {
+public class NumberToBooleanTransform extends Transform {
private Comparable falseVal;
private Class<?> sourceType;
@@ -47,10 +47,7 @@
}
@Override
- public Object transform(Object value) throws TransformationException {
- if (value == null) {
- return null;
- }
+ public Object transformDirect(Object value) throws TransformationException {
if (falseVal.compareTo(value) == 0) {
return Boolean.FALSE;
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToByteTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToByteTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToByteTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,11 +22,11 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class NumberToByteTransform extends AbstractTransform {
+public class NumberToByteTransform extends Transform {
private Class<?> sourceType;
@@ -47,10 +47,8 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if (value == null) {
- return null;
- }
+ public Object transformDirect(Object value) throws TransformationException {
+ checkValueRange(value, Byte.MIN_VALUE, Byte.MAX_VALUE);
return Byte.valueOf(((Number)value).byteValue());
}
@@ -61,10 +59,5 @@
public Class<?> getTargetType() {
return DataTypeManager.DefaultDataClasses.BYTE;
}
-
- @Override
- public boolean isNarrowing() {
- return true;
- }
-
+
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToDoubleTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToDoubleTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToDoubleTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,11 +22,11 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.common.types.TransformationException;
-public class NumberToDoubleTransform extends AbstractTransform {
+public class NumberToDoubleTransform extends Transform {
private Class<?> sourceType;
private boolean isNarrowing;
@@ -49,9 +49,9 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if (value == null) {
- return null;
+ public Object transformDirect(Object value) throws TransformationException {
+ if (isNarrowing) {
+ checkValueRange(value, -Double.MAX_VALUE, Double.MAX_VALUE);
}
return Double.valueOf(((Number)value).doubleValue());
}
@@ -64,9 +64,4 @@
return DataTypeManager.DefaultDataClasses.DOUBLE;
}
- @Override
- public boolean isNarrowing() {
- return isNarrowing;
- }
-
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToFloatTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToFloatTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToFloatTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,11 +22,11 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.common.types.TransformationException;
-public class NumberToFloatTransform extends AbstractTransform {
+public class NumberToFloatTransform extends Transform {
private Class<?> sourceType;
private boolean isNarrowing;
@@ -49,9 +49,9 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if (value == null) {
- return null;
+ public Object transformDirect(Object value) throws TransformationException {
+ if (isNarrowing) {
+ checkValueRange(value, -Float.MAX_VALUE, Float.MAX_VALUE);
}
return Float.valueOf(((Number)value).floatValue());
}
@@ -64,9 +64,4 @@
return DataTypeManager.DefaultDataClasses.FLOAT;
}
- @Override
- public boolean isNarrowing() {
- return isNarrowing;
- }
-
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToIntegerTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToIntegerTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToIntegerTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,11 +22,11 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.common.types.TransformationException;
-public class NumberToIntegerTransform extends AbstractTransform {
+public class NumberToIntegerTransform extends Transform {
private Class<?> sourceType;
private boolean isNarrowing;
@@ -49,9 +49,9 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if (value == null) {
- return null;
+ public Object transformDirect(Object value) throws TransformationException {
+ if (isNarrowing) {
+ checkValueRange(value, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
return Integer.valueOf(((Number)value).intValue());
}
@@ -64,9 +64,4 @@
return DataTypeManager.DefaultDataClasses.INTEGER;
}
- @Override
- public boolean isNarrowing() {
- return isNarrowing;
- }
-
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToLongTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToLongTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToLongTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,11 +22,11 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.common.types.TransformationException;
-public class NumberToLongTransform extends AbstractTransform {
+public class NumberToLongTransform extends Transform {
private Class<?> sourceType;
private boolean isNarrowing;
@@ -49,9 +49,9 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if (value == null) {
- return null;
+ public Object transformDirect(Object value) throws TransformationException {
+ if (isNarrowing) {
+ checkValueRange(value, Long.MIN_VALUE, Long.MAX_VALUE);
}
return Long.valueOf(((Number)value).longValue());
}
@@ -64,9 +64,4 @@
return DataTypeManager.DefaultDataClasses.LONG;
}
- @Override
- public boolean isNarrowing() {
- return isNarrowing;
- }
-
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToShortTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToShortTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToShortTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,11 +22,11 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.common.types.TransformationException;
-public class NumberToShortTransform extends AbstractTransform {
+public class NumberToShortTransform extends Transform {
private Class<?> sourceType;
private boolean isNarrowing;
@@ -49,9 +49,9 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if (value == null) {
- return null;
+ public Object transformDirect(Object value) throws TransformationException {
+ if (isNarrowing) {
+ checkValueRange(value, Short.MIN_VALUE, Short.MAX_VALUE);
}
return Short.valueOf(((Number)value).shortValue());
}
@@ -64,9 +64,4 @@
return DataTypeManager.DefaultDataClasses.SHORT;
}
- @Override
- public boolean isNarrowing() {
- return isNarrowing;
- }
-
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/ObjectToAnyTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/ObjectToAnyTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/ObjectToAnyTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,13 +22,12 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
-import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.common.types.Transform;
+import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.core.CorePlugin;
-public class ObjectToAnyTransform extends AbstractTransform {
+public class ObjectToAnyTransform extends Transform {
private Class targetClass;
@@ -48,8 +47,8 @@
return targetClass;
}
- public Object transform(Object value) throws TransformationException {
- if(value == null || targetClass.isAssignableFrom(value.getClass())) {
+ public Object transformDirect(Object value) throws TransformationException {
+ if(targetClass.isAssignableFrom(value.getClass())) {
return value;
}
@@ -69,7 +68,7 @@
}
/**
- * @see com.metamatrix.common.types.AbstractTransform#isNarrowing()
+ * @see com.metamatrix.common.types.Transform#isNarrowing()
*/
public boolean isNarrowing() {
return true;
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/SQLXMLToStringTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/SQLXMLToStringTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/SQLXMLToStringTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -45,11 +45,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
XMLType source = (XMLType)value;
try {
@@ -64,7 +60,7 @@
}
/**
- * @see com.metamatrix.common.types.AbstractTransform#isNarrowing()
+ * @see com.metamatrix.common.types.Transform#isNarrowing()
*/
public boolean isNarrowing() {
return true;
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBigDecimalTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBigDecimalTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBigDecimalTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -24,12 +24,12 @@
import java.math.BigDecimal;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.core.CorePlugin;
import com.metamatrix.core.ErrorMessageKeys;
-public class StringToBigDecimalTransform extends AbstractTransform {
+public class StringToBigDecimalTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -39,11 +39,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
try {
return new BigDecimal(((String)value).trim());
} catch(NumberFormatException e) {
@@ -66,5 +62,10 @@
public Class getTargetType() {
return BigDecimal.class;
}
-
+
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
+
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBigIntegerTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBigIntegerTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBigIntegerTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -24,12 +24,12 @@
import java.math.BigInteger;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.core.CorePlugin;
import com.metamatrix.core.ErrorMessageKeys;
-public class StringToBigIntegerTransform extends AbstractTransform {
+public class StringToBigIntegerTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -39,11 +39,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
try {
return new BigInteger(((String)value).trim());
} catch(NumberFormatException e) {
@@ -66,5 +62,10 @@
public Class getTargetType() {
return BigInteger.class;
}
+
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBooleanTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBooleanTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBooleanTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -26,11 +26,11 @@
import java.util.HashSet;
import java.util.Set;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.common.types.DataTypeManager.DefaultDataClasses;
-public class StringToBooleanTransform extends AbstractTransform {
+public class StringToBooleanTransform extends Transform {
private static final Set<String> FALSE = new HashSet<String>(Arrays.asList("0", "false")); //$NON-NLS-1$ //$NON-NLS-2$
@@ -42,10 +42,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
+ public Object transformDirect(Object value) throws TransformationException {
String str = ((String)value).trim().toLowerCase();
if (FALSE.contains(str)) {
return Boolean.FALSE;
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToByteTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToByteTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToByteTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,12 +22,12 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.core.CorePlugin;
import com.metamatrix.core.ErrorMessageKeys;
-public class StringToByteTransform extends AbstractTransform {
+public class StringToByteTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -37,11 +37,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
try {
return Byte.valueOf(((String)value).trim());
} catch(NumberFormatException e) {
@@ -64,5 +60,10 @@
public Class getTargetType() {
return Byte.class;
}
+
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToCharacterTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToCharacterTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToCharacterTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,10 +22,10 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class StringToCharacterTransform extends AbstractTransform {
+public class StringToCharacterTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -35,11 +35,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
String s = (String) value;
if (s.length() == 0) {
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToClobTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToClobTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToClobTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,11 +22,11 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.ClobType;
import com.metamatrix.common.types.TransformationException;
-public class StringToClobTransform extends AbstractTransform {
+public class StringToClobTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -36,11 +36,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if (value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
String contents = (String)value;
return new ClobType(ClobType.createClob(contents.toCharArray()));
}
@@ -60,5 +56,5 @@
public Class getTargetType() {
return ClobType.class;
}
-
+
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToDateTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToDateTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToDateTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -24,12 +24,12 @@
import java.sql.Date;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.core.CorePlugin;
import com.metamatrix.core.ErrorMessageKeys;
-public class StringToDateTransform extends AbstractTransform {
+public class StringToDateTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -39,10 +39,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
+ public Object transformDirect(Object value) throws TransformationException {
value = ((String) value).trim();
Date result = null;
try {
@@ -71,5 +68,10 @@
public Class getTargetType() {
return Date.class;
}
+
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToDoubleTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToDoubleTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToDoubleTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,12 +22,12 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.core.CorePlugin;
import com.metamatrix.core.ErrorMessageKeys;
-public class StringToDoubleTransform extends AbstractTransform {
+public class StringToDoubleTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -37,11 +37,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
try {
return Double.valueOf((String)value);
} catch(NumberFormatException e) {
@@ -65,4 +61,9 @@
return Double.class;
}
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
+
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToFloatTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToFloatTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToFloatTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,12 +22,12 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.core.CorePlugin;
import com.metamatrix.core.ErrorMessageKeys;
-public class StringToFloatTransform extends AbstractTransform {
+public class StringToFloatTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -37,11 +37,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
try {
return Float.valueOf((String)value);
} catch(NumberFormatException e) {
@@ -64,5 +60,10 @@
public Class getTargetType() {
return Float.class;
}
+
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToIntegerTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToIntegerTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToIntegerTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,12 +22,12 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.core.CorePlugin;
import com.metamatrix.core.ErrorMessageKeys;
-public class StringToIntegerTransform extends AbstractTransform {
+public class StringToIntegerTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -37,11 +37,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
try {
return Integer.valueOf(((String)value).trim());
} catch(NumberFormatException e) {
@@ -64,5 +60,10 @@
public Class getTargetType() {
return Integer.class;
}
+
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToLongTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToLongTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToLongTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,12 +22,12 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.core.CorePlugin;
import com.metamatrix.core.ErrorMessageKeys;
-public class StringToLongTransform extends AbstractTransform {
+public class StringToLongTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -37,11 +37,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
try {
return Long.valueOf(((String)value).trim());
} catch(NumberFormatException e) {
@@ -64,5 +60,10 @@
public Class getTargetType() {
return Long.class;
}
+
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToSQLXMLTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToSQLXMLTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToSQLXMLTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -31,13 +31,13 @@
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.SQLXMLImpl;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.common.types.XMLType;
import com.metamatrix.core.CorePlugin;
-public class StringToSQLXMLTransform extends AbstractTransform {
+public class StringToSQLXMLTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -47,11 +47,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if (value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
String xml = (String)value;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try{
@@ -79,5 +75,5 @@
public Class getTargetType() {
return XMLType.class;
}
-
+
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToShortTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToShortTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToShortTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -22,12 +22,12 @@
package com.metamatrix.common.types.basic;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.core.CorePlugin;
import com.metamatrix.core.ErrorMessageKeys;
-public class StringToShortTransform extends AbstractTransform {
+public class StringToShortTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -37,11 +37,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
try {
return Short.valueOf(((String)value).trim());
} catch(NumberFormatException e) {
@@ -64,5 +60,10 @@
public Class getTargetType() {
return Short.class;
}
+
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToTimeTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToTimeTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToTimeTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -24,12 +24,12 @@
import java.sql.Time;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.core.CorePlugin;
import com.metamatrix.core.ErrorMessageKeys;
-public class StringToTimeTransform extends AbstractTransform {
+public class StringToTimeTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -39,10 +39,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
+ public Object transformDirect(Object value) throws TransformationException {
value = ((String) value).trim();
Time result = null;
try {
@@ -71,5 +68,10 @@
public Class getTargetType() {
return Time.class;
}
+
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToTimestampTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToTimestampTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToTimestampTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -24,12 +24,12 @@
import java.sql.Timestamp;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.core.CorePlugin;
import com.metamatrix.core.ErrorMessageKeys;
-public class StringToTimestampTransform extends AbstractTransform {
+public class StringToTimestampTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -39,10 +39,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
+ public Object transformDirect(Object value) throws TransformationException {
value = ((String) value).trim();
Timestamp result = null;
try {
@@ -72,5 +69,10 @@
public Class getTargetType() {
return Timestamp.class;
}
+
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/TimeToTimestampTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/TimeToTimestampTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/TimeToTimestampTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -24,10 +24,10 @@
import java.sql.Timestamp;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
-public class TimeToTimestampTransform extends AbstractTransform {
+public class TimeToTimestampTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -37,11 +37,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
return new Timestamp( ((java.sql.Time) value).getTime() );
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/TimestampToDateTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/TimestampToDateTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/TimestampToDateTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -25,11 +25,11 @@
import java.sql.Timestamp;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.common.util.TimestampWithTimezone;
-public class TimestampToDateTransform extends AbstractTransform {
+public class TimestampToDateTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -39,11 +39,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
return TimestampWithTimezone.createDate((Timestamp)value);
}
@@ -64,7 +60,7 @@
}
/**
- * @see com.metamatrix.common.types.AbstractTransform#isNarrowing()
+ * @see com.metamatrix.common.types.Transform#isNarrowing()
*/
public boolean isNarrowing() {
return true;
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/TimestampToTimeTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/TimestampToTimeTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/TimestampToTimeTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -24,11 +24,11 @@
import java.sql.Timestamp;
-import com.metamatrix.common.types.AbstractTransform;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.common.util.TimestampWithTimezone;
-public class TimestampToTimeTransform extends AbstractTransform {
+public class TimestampToTimeTransform extends Transform {
/**
* This method transforms a value of the source type into a value
@@ -38,11 +38,7 @@
* @throws TransformationException if value is an incorrect input type or
* the transformation fails
*/
- public Object transform(Object value) throws TransformationException {
- if(value == null) {
- return value;
- }
-
+ public Object transformDirect(Object value) throws TransformationException {
return TimestampWithTimezone.createTime((Timestamp)value);
}
@@ -63,7 +59,7 @@
}
/**
- * @see com.metamatrix.common.types.AbstractTransform#isNarrowing()
+ * @see com.metamatrix.common.types.Transform#isNarrowing()
*/
public boolean isNarrowing() {
return true;
Modified: trunk/common-core/src/main/resources/com/metamatrix/core/i18n.properties
===================================================================
--- trunk/common-core/src/main/resources/com/metamatrix/core/i18n.properties 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/main/resources/com/metamatrix/core/i18n.properties 2009-08-31 22:18:33 UTC (rev 1299)
@@ -400,4 +400,5 @@
ExceptionHolder.converted_exception=Remote exception: {0} ... Original type hierarchy {1}.
PropertiesUtils.failed_to_resolve_property=failed to completely resolve the property value for key {0}
-transform.invalid_string_for_date=The string representation ''{0}'' of a {1} value is not valid.
\ No newline at end of file
+transform.invalid_string_for_date=The string representation ''{0}'' of a {1} value is not valid.
+transform.value_out_of_range=The {1} value ''{0}'' is outside the of range for {2}
\ No newline at end of file
Modified: trunk/common-core/src/test/java/com/metamatrix/common/types/TestDataTypeManager.java
===================================================================
--- trunk/common-core/src/test/java/com/metamatrix/common/types/TestDataTypeManager.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/test/java/com/metamatrix/common/types/TestDataTypeManager.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -161,11 +161,11 @@
}
public void testTimeConversions() {
- Transform t = DataTypeManager.getPreferredTransform(DataTypeManager.DefaultDataTypes.TIMESTAMP, DataTypeManager.DefaultDataTypes.DATE);
+ Transform t = DataTypeManager.getTransform(DataTypeManager.DefaultDataTypes.TIMESTAMP, DataTypeManager.DefaultDataTypes.DATE);
- assertEquals(DataTypeManager.DefaultDataClasses.TIMESTAMP, t.getTargetType());
+ assertEquals(DataTypeManager.DefaultDataClasses.DATE, t.getTargetType());
- t = DataTypeManager.getPreferredTransform(DataTypeManager.DefaultDataTypes.TIME, DataTypeManager.DefaultDataTypes.TIMESTAMP);
+ t = DataTypeManager.getTransform(DataTypeManager.DefaultDataTypes.TIME, DataTypeManager.DefaultDataTypes.TIMESTAMP);
assertEquals(DataTypeManager.DefaultDataClasses.TIMESTAMP, t.getTargetType());
}
Modified: trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestStringToXmlTransform.java
===================================================================
--- trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestStringToXmlTransform.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestStringToXmlTransform.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -45,7 +45,7 @@
StringToSQLXMLTransform transform = new StringToSQLXMLTransform();
- SQLXML xmlValue = (SQLXML)transform.transform(xml);
+ SQLXML xmlValue = (SQLXML)transform.transformDirect(xml);
assertEquals(xml, xmlValue.getString());
}
@@ -58,7 +58,7 @@
StringToSQLXMLTransform transform = new StringToSQLXMLTransform();
try {
- transform.transform(xml);
+ transform.transformDirect(xml);
fail("exception expected"); //$NON-NLS-1$
} catch (TransformationException e) {
}
Modified: trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestTransforms.java
===================================================================
--- trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestTransforms.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestTransforms.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -219,7 +219,7 @@
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; //$NON-NLS-1$
expected += xml.substring(0, DataTypeManager.MAX_STRING_LENGTH - expected.length());
- helpTestTransform(new StringToSQLXMLTransform().transform(xml.toString()), expected);
+ helpTestTransform(new StringToSQLXMLTransform().transformDirect(xml.toString()), expected);
}
@Test public void testStringToTimestampOutOfRange() throws Exception {
@@ -234,4 +234,18 @@
helpTestTransform(" 1 ", Long.valueOf(1)); //$NON-NLS-1$
}
+ @Test public void testEngineeringNotationFloatToBigInteger() throws Exception {
+ helpTestTransform(Float.MIN_VALUE, new BigDecimal(Float.MIN_VALUE).toBigInteger());
+ }
+
+ @Test public void testRangeCheck() throws Exception {
+ helpTransformException(300, DataTypeManager.DefaultDataClasses.BYTE, "The Integer value '300' is outside the of range for Byte"); //$NON-NLS-1$
+ }
+
+ @Test public void testRangeCheck1() throws Exception {
+ helpTransformException(new Double("1E11"), DataTypeManager.DefaultDataClasses.INTEGER, "The Double value '100,000,000,000' is outside the of range for Integer"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+
+
}
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml 2009-08-31 22:18:33 UTC (rev 1299)
@@ -505,8 +505,7 @@
numeric string formats by visiting the Sun Java Web site at the
following
<ulink
- url="http://java.sun.com/javase/6/docs/api/java/text/DecimalFormat.html">URL for Sun Java</ulink>
- . In addition to the Java conventions, parse strings have leading and trailing whitespace removed automatically and cannot contain characters after a valid parse prefix.
+ url="http://java.sun.com/javase/6/docs/api/java/text/DecimalFormat.html">URL for Sun Java</ulink>.
</para>
<para>For example, you could use these function calls, with the
formatting string that adheres to the java.text.DecimalFormat
@@ -1045,8 +1044,7 @@
defines formats by visiting the Sun Java Web site
at the following
<ulink
- url="http://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.html">URL for Sun Java</ulink>
- . In addition to the Java conventions, parse strings have leading and trailing whitespace removed automatically and cannot contain characters after a valid parse prefix.
+ url="http://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.html">URL for Sun Java</ulink>.
</para>
<informaltable frame="all">
<tgroup cols="3">
Modified: trunk/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -29,7 +29,7 @@
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.DecimalFormat;
-import java.text.ParsePosition;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
@@ -1032,51 +1032,27 @@
}
// ================== Format date/time/timestamp TO String ==================
- public static Object formatDate(Object date, Object format)
+ public static String format(Date date, String format)
throws FunctionExecutionException {
try {
- SimpleDateFormat sdf = new SimpleDateFormat((String)format);
- return sdf.format((Date)date);
+ SimpleDateFormat sdf = new SimpleDateFormat(format);
+ return sdf.format(date);
} catch (IllegalArgumentException iae) {
throw new FunctionExecutionException(ErrorMessageKeys.FUNCTION_0042, QueryPlugin.Util.getString(ErrorMessageKeys.FUNCTION_0042 ,
iae.getMessage()));
}
}
- public static Object formatTime(Object time, Object format)
- throws FunctionExecutionException {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat((String)format);
- return sdf.format((Time)time);
- } catch (IllegalArgumentException iae) {
- throw new FunctionExecutionException(ErrorMessageKeys.FUNCTION_0042, QueryPlugin.Util.getString(ErrorMessageKeys.FUNCTION_0042 ,
- iae.getMessage()));
- }
- }
-
- public static Object formatTimestamp(Object timestamp, Object format)
- throws FunctionExecutionException {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat((String)format);
- return sdf.format((Timestamp) timestamp);
- } catch (IllegalArgumentException iae) {
- throw new FunctionExecutionException(ErrorMessageKeys.FUNCTION_0042, QueryPlugin.Util.getString(ErrorMessageKeys.FUNCTION_0042 ,
- iae.getMessage()));
- }
- }
-
// ================== Parse String TO date/time/timestamp ==================
private static Date parseDateHelper(String date, String format)
throws FunctionExecutionException {
- date = date.trim();
DateFormat df = new SimpleDateFormat(format);
- df.setLenient(false);
- ParsePosition pp = new ParsePosition(0);
- Date parsedDate = df.parse(date, pp);
- if (parsedDate == null || pp.getIndex() < date.length()) {
- throw new FunctionExecutionException(ErrorMessageKeys.FUNCTION_0043, QueryPlugin.Util.getString(ErrorMessageKeys.FUNCTION_0043, date, format));
+ try {
+ return df.parse(date);
+ } catch (ParseException e) {
+ throw new FunctionExecutionException(ErrorMessageKeys.FUNCTION_0043, QueryPlugin.Util.getString(ErrorMessageKeys.FUNCTION_0043 ,
+ date, format));
}
- return parsedDate;
}
public static Date parseDate(String date, String format)
@@ -1095,35 +1071,17 @@
}
// ================== Format number TO String ==================
- public static Object formatInteger(Object integerNum, Object format)
- throws FunctionExecutionException {
- return formatNumberHelper(integerNum, format);
+ public static String format(Number number, String format)
+ throws FunctionExecutionException {
+ try {
+ DecimalFormat df = new DecimalFormat(format);
+ return df.format(number);
+ } catch (IllegalArgumentException iae) {
+ throw new FunctionExecutionException(ErrorMessageKeys.FUNCTION_0042, QueryPlugin.Util.getString(ErrorMessageKeys.FUNCTION_0042 ,
+ iae.getMessage()));
+ }
}
- public static Object formatLong(Object longNum, Object format)
- throws FunctionExecutionException {
- return formatNumberHelper(longNum, format);
- }
-
- public static Object formatDouble(Object doubleNum, Object format)
- throws FunctionExecutionException {
- return formatNumberHelper(doubleNum, format);
- }
-
- public static Object formatFloat(Object floatNum, Object format)
- throws FunctionExecutionException {
- return formatNumberHelper(floatNum, format);
- }
- public static Object formatBigInteger(Object bigIntegerNum, Object format)
- throws FunctionExecutionException {
- return formatNumberHelper(bigIntegerNum, format);
- }
-
- public static Object formatBigDecimal(Object bigDecimalNum, Object format)
- throws FunctionExecutionException {
- return formatNumberHelper(bigDecimalNum, format);
- }
-
// ================== Parse String TO numbers ==================
public static Object parseInteger(String number, String format)
throws FunctionExecutionException {
@@ -1162,32 +1120,16 @@
}
// ============== Helper Function for format/parse numbers ==================
- public static String formatNumberHelper(Object number, Object format)
- throws FunctionExecutionException {
- if (number == null || format == null) {
- return null;
- }
- try {
- DecimalFormat df = new DecimalFormat((String)format);
- return df.format(number);
- } catch (IllegalArgumentException iae) {
- throw new FunctionExecutionException(ErrorMessageKeys.FUNCTION_0042, QueryPlugin.Util.getString(ErrorMessageKeys.FUNCTION_0042 ,
- iae.getMessage()));
- }
- }
-
private static Number parseNumberHelper(String number, String format)
throws FunctionExecutionException {
- number = number.trim();
DecimalFormat df= new DecimalFormat(format);
- ParsePosition pp = new ParsePosition(0);
- Number num = df.parse(number, pp);
- if (num == null || pp.getIndex() < number.length()) {
+ try {
+ return df.parse(number);
+ } catch (ParseException e) {
throw new FunctionExecutionException(ErrorMessageKeys.FUNCTION_0043, QueryPlugin.Util.getString(ErrorMessageKeys.FUNCTION_0043 ,
number,format));
}
- return num;
}
// ================== Function - ACOS =====================
Modified: trunk/engine/src/main/java/com/metamatrix/query/function/source/SystemSource.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/function/source/SystemSource.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/engine/src/main/java/com/metamatrix/query/function/source/SystemSource.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -160,9 +160,9 @@
addIfNullFunctions();
// format
- addFormatTimeFunction(SourceSystemFunctions.FORMATTIME, QueryPlugin.Util.getString("SystemSource.Formattime_desc"), "formatTime", QueryPlugin.Util.getString("SystemSource.Formattime_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- addFormatDateFunction(SourceSystemFunctions.FORMATDATE, QueryPlugin.Util.getString("SystemSource.Formatdate_desc"), "formatDate", QueryPlugin.Util.getString("SystemSource.Formatdate_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- addFormatTimestampFunction(SourceSystemFunctions.FORMATTIMESTAMP, QueryPlugin.Util.getString("SystemSource.Formattimestamp_desc"), "formatTimestamp", QueryPlugin.Util.getString("SystemSource.Formattimestamp_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ addFormatTimeFunction(SourceSystemFunctions.FORMATTIME, QueryPlugin.Util.getString("SystemSource.Formattime_desc"), "format", QueryPlugin.Util.getString("SystemSource.Formattime_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ addFormatDateFunction(SourceSystemFunctions.FORMATDATE, QueryPlugin.Util.getString("SystemSource.Formatdate_desc"), "format", QueryPlugin.Util.getString("SystemSource.Formatdate_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ addFormatTimestampFunction(SourceSystemFunctions.FORMATTIMESTAMP, QueryPlugin.Util.getString("SystemSource.Formattimestamp_desc"), "format", QueryPlugin.Util.getString("SystemSource.Formattimestamp_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
addFormatNumberFunctions();
@@ -195,12 +195,12 @@
}
private void addFormatNumberFunctions() {
- addFormatNumberFunction(SourceSystemFunctions.FORMATINTEGER, QueryPlugin.Util.getString("SystemSource.Formatinteger_desc"), "formatInteger", "integer", DataTypeManager.DefaultDataTypes.INTEGER, QueryPlugin.Util.getString("SystemSource.Formatinteger_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- addFormatNumberFunction(SourceSystemFunctions.FORMATLONG, QueryPlugin.Util.getString("SystemSource.Formatlong_desc"), "formatLong", "long", DataTypeManager.DefaultDataTypes.LONG, QueryPlugin.Util.getString("SystemSource.Formatlong_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- addFormatNumberFunction(SourceSystemFunctions.FORMATDOUBLE, QueryPlugin.Util.getString("SystemSource.Formatdouble_desc"), "formatDouble", "double", DataTypeManager.DefaultDataTypes.DOUBLE, QueryPlugin.Util.getString("SystemSource.Formatdouble_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- addFormatNumberFunction(SourceSystemFunctions.FORMATFLOAT, QueryPlugin.Util.getString("SystemSource.Formatfloat_desc"), "formatFloat", "float", DataTypeManager.DefaultDataTypes.FLOAT, QueryPlugin.Util.getString("SystemSource.Formatfloat_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- addFormatNumberFunction(SourceSystemFunctions.FORMATBIGINTEGER, QueryPlugin.Util.getString("SystemSource.Formatbiginteger_desc"), "formatBigInteger", "biginteger", DataTypeManager.DefaultDataTypes.BIG_INTEGER, QueryPlugin.Util.getString("SystemSource.Formatbiginteger_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- addFormatNumberFunction(SourceSystemFunctions.FORMATBIGDECIMAL, QueryPlugin.Util.getString("SystemSource.Formatbigdecimal_desc"), "formatBigDecimal", "bigdecimal", DataTypeManager.DefaultDataTypes.BIG_DECIMAL, QueryPlugin.Util.getString("SystemSource.Formatbigdecimal_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ addFormatNumberFunction(SourceSystemFunctions.FORMATINTEGER, QueryPlugin.Util.getString("SystemSource.Formatinteger_desc"), "format", "integer", DataTypeManager.DefaultDataTypes.INTEGER, QueryPlugin.Util.getString("SystemSource.Formatinteger_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ addFormatNumberFunction(SourceSystemFunctions.FORMATLONG, QueryPlugin.Util.getString("SystemSource.Formatlong_desc"), "format", "long", DataTypeManager.DefaultDataTypes.LONG, QueryPlugin.Util.getString("SystemSource.Formatlong_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ addFormatNumberFunction(SourceSystemFunctions.FORMATDOUBLE, QueryPlugin.Util.getString("SystemSource.Formatdouble_desc"), "format", "double", DataTypeManager.DefaultDataTypes.DOUBLE, QueryPlugin.Util.getString("SystemSource.Formatdouble_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ addFormatNumberFunction(SourceSystemFunctions.FORMATFLOAT, QueryPlugin.Util.getString("SystemSource.Formatfloat_desc"), "format", "float", DataTypeManager.DefaultDataTypes.FLOAT, QueryPlugin.Util.getString("SystemSource.Formatfloat_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ addFormatNumberFunction(SourceSystemFunctions.FORMATBIGINTEGER, QueryPlugin.Util.getString("SystemSource.Formatbiginteger_desc"), "format", "biginteger", DataTypeManager.DefaultDataTypes.BIG_INTEGER, QueryPlugin.Util.getString("SystemSource.Formatbiginteger_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ addFormatNumberFunction(SourceSystemFunctions.FORMATBIGDECIMAL, QueryPlugin.Util.getString("SystemSource.Formatbigdecimal_desc"), "format", "bigdecimal", DataTypeManager.DefaultDataTypes.BIG_DECIMAL, QueryPlugin.Util.getString("SystemSource.Formatbigdecimal_result_desc")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
private void addParseNumberFunctions() {
Modified: trunk/engine/src/main/java/com/metamatrix/query/processor/xml/XMLValueTranslator.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/processor/xml/XMLValueTranslator.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/engine/src/main/java/com/metamatrix/query/processor/xml/XMLValueTranslator.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -146,10 +146,10 @@
valueStr = bigIntegerTogMonth((BigInteger)value);
break;
case GMONTHDAY_CODE:
- valueStr = (String)FunctionMethods.formatTimestamp(value, GMONTHDAY_FORMAT);
+ valueStr = FunctionMethods.format((Timestamp)value, GMONTHDAY_FORMAT);
break;
case GYEAR_CODE:
- valueStr = (String)FunctionMethods.formatBigInteger(value, GYEAR_FORMAT);
+ valueStr = FunctionMethods.format((BigInteger)value, GYEAR_FORMAT);
break;
case GYEARMONTH_CODE:
valueStr = timestampTogYearMonth(value);
@@ -178,7 +178,7 @@
private static String timestampTogYearMonth(Object value) throws FunctionExecutionException {
String valueStr;
Timestamp time = (Timestamp)value;
- valueStr = (String)FunctionMethods.formatTimestamp(value, GYEARMONTH_FORMAT);
+ valueStr = (String)FunctionMethods.format(time, GYEARMONTH_FORMAT);
if (time.getTime() < YEAR_ZERO) {
valueStr = "-" + valueStr; //$NON-NLS-1$
}
@@ -190,7 +190,7 @@
* with a trailing string for nanoseconds (without right zeros).
*/
static String timestampToDateTime(Timestamp time) throws FunctionExecutionException {
- String result = (String)FunctionMethods.formatTimestamp(time, DATETIME_FORMAT);
+ String result = (String)FunctionMethods.format(time, DATETIME_FORMAT);
int nanos = time.getNanos();
if (nanos == 0) {
return result;
Modified: trunk/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -54,6 +54,7 @@
import com.metamatrix.api.exception.query.QueryValidatorException;
import com.metamatrix.common.buffer.BlockedException;
import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.common.types.Transform;
import com.metamatrix.common.util.TimestampWithTimezone;
import com.metamatrix.core.MetaMatrixRuntimeException;
import com.metamatrix.core.util.Assertion;
@@ -164,10 +165,6 @@
public static final CompareCriteria FALSE_CRITERIA = new CompareCriteria(new Constant(new Integer(1), DataTypeManager.DefaultDataClasses.INTEGER), CompareCriteria.EQ, new Constant(new Integer(0), DataTypeManager.DefaultDataClasses.INTEGER));
public static final CompareCriteria UNKNOWN_CRITERIA = new CompareCriteria(new Constant(null, DataTypeManager.DefaultDataClasses.STRING), CompareCriteria.NE, new Constant(null, DataTypeManager.DefaultDataClasses.STRING));
- private final static Timestamp EXAMPLE_TIMESTAMP = Timestamp.valueOf("2001-02-03 13:04:05.01"); //$NON-NLS-1$
- private final static Time EXAMPLE_TIME = Time.valueOf("13:04:05"); //$NON-NLS-1$
- private final static Date EXAMPLE_DATE = Date.valueOf("2001-02-03"); //$NON-NLS-1$
-
private static final Map<String, String> ALIASED_FUNCTIONS = new HashMap<String, String>();
static {
@@ -1312,15 +1309,10 @@
if(isSimpleMathematicalFunction(leftFunction)) {
return simplifyMathematicalCriteria(criteria);
}
- if(criteria.getOperator() == CompareCriteria.EQ || criteria.getOperator() == CompareCriteria.NE) {
- if(criteria.getRightExpression() instanceof Constant && (FunctionLibrary.isConvert(leftFunction))) {
-
- return simplifyConvertFunction(criteria);
-
- }
- return simplifyParseFormatFunction(criteria);
+ if (FunctionLibrary.isConvert(leftFunction)) {
+ return simplifyConvertFunction(criteria);
}
- return criteria;
+ return simplifyParseFormatFunction(criteria);
}
private boolean isSimpleMathematicalFunction(Function function) {
@@ -1489,22 +1481,38 @@
*/
private Criteria simplifyConvertFunction(CompareCriteria crit) throws QueryValidatorException {
Function leftFunction = (Function) crit.getLeftExpression();
- Constant rightConstant = (Constant) crit.getRightExpression();
Expression leftExpr = leftFunction.getArgs()[0];
+ if (leftExpr.getType() == crit.getRightExpression().getType()) {
+ crit.setLeftExpression(leftExpr);
+ return crit;
+ }
+ if(!(crit.getRightExpression() instanceof Constant)
+ //TODO: this can be relaxed for order preserving operations
+ || !(crit.getOperator() == CompareCriteria.EQ || crit.getOperator() == CompareCriteria.NE)) {
+ return crit;
+ }
+
+ Constant rightConstant = (Constant) crit.getRightExpression();
String leftExprTypeName = DataTypeManager.getDataTypeName(leftExpr.getType());
-
+
Constant result = null;
try {
result = ResolverUtil.convertConstant(DataTypeManager.getDataTypeName(rightConstant.getType()), leftExprTypeName, rightConstant);
+ Constant other = ResolverUtil.convertConstant(leftExprTypeName, DataTypeManager.getDataTypeName(rightConstant.getType()), result);
+ if (((Comparable)rightConstant.getValue()).compareTo(other.getValue()) != 0) {
+ return getSimpliedCriteria(crit, leftExpr, crit.getOperator() != CompareCriteria.EQ, true);
+ }
} catch(QueryResolverException e) {
-
- }
-
- if (result == null) {
return getSimpliedCriteria(crit, leftExpr, crit.getOperator() != CompareCriteria.EQ, true);
}
+ Transform transform = DataTypeManager.getTransform(leftExpr.getType(), crit.getRightExpression().getType());
+
+ if (transform.isNarrowing()) {
+ return crit;
+ }
+
crit.setRightExpression(result);
crit.setLeftExpression(leftExpr);
@@ -1586,7 +1594,12 @@
}
private Criteria simplifyParseFormatFunction(CompareCriteria crit) throws QueryValidatorException {
- Function leftFunction = (Function) crit.getLeftExpression();
+ //TODO: this can be relaxed for order preserving operations
+ if(!(crit.getOperator() == CompareCriteria.EQ || crit.getOperator() == CompareCriteria.NE)) {
+ return crit;
+ }
+ boolean isFormat = false;
+ Function leftFunction = (Function) crit.getLeftExpression();
String funcName = leftFunction.getName().toLowerCase();
String inverseFunction = null;
if(funcName.startsWith("parse")) { //$NON-NLS-1$
@@ -1595,97 +1608,44 @@
} else if(funcName.startsWith("format")) { //$NON-NLS-1$
String type = funcName.substring(6);
inverseFunction = "parse" + type; //$NON-NLS-1$
+ isFormat = true;
} else {
return crit;
}
Expression rightExpr = crit.getRightExpression();
+ if (!(rightExpr instanceof Constant)) {
+ return crit;
+ }
Expression leftExpr = leftFunction.getArgs()[0];
Expression formatExpr = leftFunction.getArgs()[1];
if(!(formatExpr instanceof Constant)) {
return crit;
}
+ String format = (String)((Constant)formatExpr).getValue();
FunctionLibrary funcLib = FunctionLibraryManager.getFunctionLibrary();
FunctionDescriptor descriptor = funcLib.findFunction(inverseFunction, new Class[] { rightExpr.getType(), formatExpr.getType() });
if(descriptor == null){
return crit;
}
- String format = (String)((Constant)formatExpr).getValue();
- try {
- /*
- * The following is a hack at fixing defect 23792. Our strategy of always inverting parse and format functions was wrong in
- * many cases, so this code will catch many circumstances that were missed before.
- */
- Expression dateExpression = null;
- FunctionDescriptor forwardFunction = null;
- FunctionDescriptor reverseFunction = null;
- boolean parseFunction = false;
- boolean checkExpression = true;
-
- if (java.util.Date.class.isAssignableFrom(leftExpr.getType())) {
- dateExpression = leftExpr;
- forwardFunction = leftFunction.getFunctionDescriptor();
- reverseFunction = descriptor;
- } else if (java.util.Date.class.isAssignableFrom(rightExpr.getType())) {
- dateExpression = rightExpr;
- forwardFunction = descriptor;
- reverseFunction = leftFunction.getFunctionDescriptor();
- parseFunction = true;
- }
-
- if (dateExpression != null) {
- Object example = EXAMPLE_TIMESTAMP;
- if (DataTypeManager.DefaultDataClasses.DATE.equals(dateExpression.getType())) {
- example = EXAMPLE_DATE;
- } else if (DataTypeManager.DefaultDataClasses.TIME.equals(dateExpression.getType())) {
- example = EXAMPLE_TIME;
- }
- if (parseFunction) {
- if (rightExpr instanceof Constant) {
- example = ((Constant)rightExpr).getValue();
- } else {
- checkExpression = false;
- }
- }
- if (checkExpression) {
- Object result = funcLib.invokeFunction(forwardFunction, new Object[] {example, format});
- result = funcLib.invokeFunction(reverseFunction, new Object[] { result, format } );
- if (!example.equals(result)) {
- if (parseFunction) {
- return getSimpliedCriteria(crit, leftExpr, crit.getOperator() != CompareCriteria.EQ, true);
- }
- //the format is loosing information, so it must not be invertable
- return crit;
- }
- }
- }
- } catch(InvalidFunctionException e) {
+ Object value = ((Constant)rightExpr).getValue();
+ try {
+ Object result = funcLib.invokeFunction(descriptor, new Object[] {((Constant)rightExpr).getValue(), format});
+ result = funcLib.invokeFunction(leftFunction.getFunctionDescriptor(), new Object[] { result, format } );
+ if (((Comparable)value).compareTo(result) != 0) {
+ return getSimpliedCriteria(crit, leftExpr, crit.getOperator() != CompareCriteria.EQ, true);
+ }
+ } catch(InvalidFunctionException e) {
String errorMsg = QueryExecPlugin.Util.getString("QueryRewriter.criteriaError", crit); //$NON-NLS-1$
throw new QueryValidatorException(e, errorMsg);
- } catch(FunctionExecutionException e) {
- String errorMsg = QueryExecPlugin.Util.getString("QueryRewriter.criteriaError", crit); //$NON-NLS-1$
- throw new QueryValidatorException(e, errorMsg);
- }
- try {
- if (rightExpr instanceof Constant) {
- Object result = funcLib.invokeFunction(
- descriptor, new Object[] { ((Constant)rightExpr).getValue(), format } );
- crit.setRightExpression(new Constant(result, descriptor.getReturnType()));
- crit.setLeftExpression(leftExpr);
- } else {
- Function conversion = new Function(descriptor.getName(), new Expression[] { rightExpr, formatExpr });
- conversion.setType(leftExpr.getType());
- conversion.setFunctionDescriptor(descriptor);
-
- crit.setRightExpression(conversion);
- crit.setLeftExpression(leftExpr);
- }
- } catch(InvalidFunctionException e) {
- String errorMsg = QueryExecPlugin.Util.getString("QueryRewriter.criteriaError", crit); //$NON-NLS-1$
- throw new QueryValidatorException(e, errorMsg);
- } catch(FunctionExecutionException e) {
+ } catch(FunctionExecutionException e) {
//Not all numeric formats are invertable, so just return the criteria as it may still be valid
return crit;
}
+ //parseFunctions are all potentially narrowing
+ if (!isFormat) {
+ return crit;
+ }
+ //TODO: if format is not lossy, then invert the function
return crit;
}
@@ -1720,16 +1680,12 @@
if(leftExpr instanceof Function && rightExpr instanceof Constant) {
tsCreateFunction = (Function) leftExpr;
timestampConstant = (Constant) rightExpr;
- } else if(leftExpr instanceof Constant && rightExpr instanceof Function) {
- tsCreateFunction = (Function) rightExpr;
- timestampConstant = (Constant) leftExpr;
} else {
return criteria;
}
// Verify data type of constant and that constant has a value
- if(! timestampConstant.getType().equals(DataTypeManager.DefaultDataClasses.TIMESTAMP) ||
- timestampConstant.getValue() == null) {
+ if(! timestampConstant.getType().equals(DataTypeManager.DefaultDataClasses.TIMESTAMP)) {
return criteria;
}
@@ -1754,12 +1710,12 @@
return compCrit;
}
- /*
+ /**
* This method also applies the same simplification for Case 1829. This is conceptually
* the same thing but done using the timestampCreate system function.
*
- * TIMESTAMPCREATE(rpcolli_physical.RPCOLLI.Table_B.date_field, rpcolli_physical.RPCOLLI.Table_B.time_field)
- * = {ts'1969-09-20 18:30:45.0'}
+ * formatDate(rpcolli_physical.RPCOLLI.Table_B.date_field, 'yyyy-MM-dd')
+ * || formatTime(rpcolli_physical.RPCOLLI.Table_B.time_field, ' HH:mm:ss') = '1969-09-20 18:30:45'
*
* -------------
*
@@ -1786,16 +1742,12 @@
if(leftExpr instanceof Function && rightExpr instanceof Constant) {
concatFunction = (Function) leftExpr;
timestampConstant = (Constant) rightExpr;
- } else if(leftExpr instanceof Constant && rightExpr instanceof Function) {
- concatFunction = (Function) rightExpr;
- timestampConstant = (Constant) leftExpr;
} else {
return criteria;
}
// Verify data type of string constant and that constant has a value
- if(! timestampConstant.getType().equals(DataTypeManager.DefaultDataClasses.STRING) ||
- timestampConstant.getValue() == null) {
+ if(! timestampConstant.getType().equals(DataTypeManager.DefaultDataClasses.STRING)) {
return criteria;
}
@@ -1823,13 +1775,7 @@
// Verify length of combined date/time constants == timestamp constant
String dateFormat = (String) ((Constant)formatDateFunction.getArgs()[1]).getValue();
String timeFormat = (String) ((Constant)formatTimeFunction.getArgs()[1]).getValue();
- if(dateFormat == null || timeFormat == null) {
- return criteria;
- }
String timestampValue = (String) timestampConstant.getValue();
- if(timestampValue.length() != dateFormat.length() + timeFormat.length()) {
- return criteria;
- }
// Passed all the checks, so build the optimized version
try {
Modified: trunk/engine/src/test/java/com/metamatrix/query/function/TestFunction.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/function/TestFunction.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/engine/src/test/java/com/metamatrix/query/function/TestFunction.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -1158,12 +1158,12 @@
assertEquals(systemProperty+"_lowercase", FunctionMethods.env(context, systemProperty.toUpperCase())); //$NON-NLS-1$
}
- @Test(expected=FunctionExecutionException.class) public void testParseIntStrictness() throws Exception {
- FunctionMethods.parseInteger("1 a", "#"); //$NON-NLS-1$ //$NON-NLS-2$
+ public void testParseIntStrictness() throws Exception {
+ assertEquals(Integer.valueOf(1), FunctionMethods.parseInteger("a 1 a", "#")); //$NON-NLS-1$ //$NON-NLS-2$
}
- @Test(expected=FunctionExecutionException.class) public void testParseDateStrictness() throws Exception {
- FunctionMethods.parseDate("2007-13-01", "yyyy-MM-dd"); //$NON-NLS-1$ //$NON-NLS-2$
+ public void testParseDateStrictness() throws Exception {
+ assertEquals(TimestampUtil.createDate(2007, 1, 1), FunctionMethods.parseDate(" 2007-13-01", "yyyy-MM")); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testParseTimeWhitespace() throws Exception {
Modified: trunk/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java 2009-08-31 22:02:02 UTC (rev 1298)
+++ trunk/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java 2009-08-31 22:18:33 UTC (rev 1299)
@@ -26,12 +26,12 @@
import java.util.Arrays;
import java.util.Collections;
-import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import java.util.TimeZone;
+import org.junit.Ignore;
import org.junit.Test;
import com.metamatrix.api.exception.MetaMatrixComponentException;
@@ -265,7 +265,8 @@
@Test public void testRewriteCrit5() {
helpTestRewriteCriteria("pm1.g1.e1 in ('a')", "pm1.g1.e1 = 'a'"); //$NON-NLS-1$ //$NON-NLS-2$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit6() {
helpTestRewriteCriteria("1 = convert(pm1.g1.e1,integer) + 10", "pm1.g1.e1 = '-9'"); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -389,12 +390,14 @@
@Test public void testRewriteCritExpr_unhandled2() {
helpTestRewriteCriteria("5 - pm1.g1.e2 <= 10", "5 - pm1.g1.e2 <= 10"); //$NON-NLS-1$ //$NON-NLS-2$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit_parseDate() {
helpTestRewriteCriteria("PARSEDATE(pm3.g1.e1, 'yyyyMMdd') = {d'2003-05-01'}", //$NON-NLS-1$
"pm3.g1.e1 = '20030501'" ); //$NON-NLS-1$
}
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit_parseDate1() {
helpTestRewriteCriteria("PARSEDATE(pm3.g1.e1, 'yyyyMM') = {d'2003-05-01'}", //$NON-NLS-1$
"pm3.g1.e1 = '200305'" ); //$NON-NLS-1$
@@ -404,7 +407,8 @@
helpTestRewriteCriteria("PARSEDATE(pm3.g1.e1, 'yyyyMM') = {d'2003-05-02'}", //$NON-NLS-1$
"1 = 0" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="Should be moved to the validator")
@Test public void testRewriteCrit_invalidParseDate() {
QueryMetadataInterface metadata = FakeMetadataFactory.example1Cached();
Criteria origCrit = parseCriteria("PARSEDATE(pm3.g1.e1, '''') = {d'2003-05-01'}", metadata); //$NON-NLS-1$
@@ -416,7 +420,8 @@
assertEquals("Error Code:ERR.015.001.0003 Message:Error simplifying criteria: PARSEDATE(pm3.g1.e1, '''') = {d'2003-05-01'}", e.getMessage()); //$NON-NLS-1$
}
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit_parseTime() {
helpTestRewriteCriteria("PARSETIME(pm3.g1.e1, 'HH mm ss') = {t'13:25:04'}", //$NON-NLS-1$
"pm3.g1.e1 = '13 25 04'" ); //$NON-NLS-1$
@@ -426,7 +431,8 @@
helpTestRewriteCriteria("PARSETimestamp(pm3.g1.e1, 'yyyy dd mm') = {ts'2003-05-01 13:25:04.5'}", //$NON-NLS-1$
"1 = 0" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit_parseTimestamp1() {
helpTestRewriteCriteria("PARSETimestamp(pm3.g1.e1, 'yyyy dd mm') = {ts'2003-01-01 00:25:00.0'}", //$NON-NLS-1$
"pm3.g1.e1 = '2003 01 25'" ); //$NON-NLS-1$
@@ -441,7 +447,8 @@
helpTestRewriteCriteria("PARSETimestamp(pm3.g1.e1, 'yyyy dd mm') <> {ts'2003-05-01 13:25:04.5'}", //$NON-NLS-1$
"pm3.g1.e1 is not null" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit_parseTimestamp4() {
helpTestRewriteCriteria("PARSETimestamp(CONVERT(pm3.g1.e2, string), 'yyyy-MM-dd') = {ts'2003-05-01 00:00:00.0'}", //$NON-NLS-1$
"pm3.g1.e2 = {d'2003-05-01'}" ); //$NON-NLS-1$
@@ -452,6 +459,7 @@
"PARSETimestamp(pm3.g1.e1, 'yyyy dd mm') > {ts'2003-05-01 13:25:04.5'}" ); //$NON-NLS-1$
}
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit_parseTimestamp_decompose() {
helpTestRewriteCriteria("PARSETIMESTAMP(CONCAT(FORMATDATE(pm3.g1.e2, 'yyyyMMdd'), FORMATTIME(pm3.g1.e3, 'HHmmss')), 'yyyyMMddHHmmss') = PARSETIMESTAMP('19690920183045', 'yyyyMMddHHmmss')", //$NON-NLS-1$
"(pm3.g1.e2 = {d'1969-09-20'}) AND (pm3.g1.e3 = {t'18:30:45'})" ); //$NON-NLS-1$
@@ -461,42 +469,50 @@
helpTestRewriteCriteria("timestampCreate(pm3.g1.e2, pm3.g1.e3) = PARSETIMESTAMP('19690920183045', 'yyyyMMddHHmmss')", //$NON-NLS-1$
"(pm3.g1.e2 = {d'1969-09-20'}) AND (pm3.g1.e3 = {t'18:30:45'})" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit_parseInteger() {
helpTestRewriteCriteria("parseInteger(pm1.g1.e1, '#,##0') = 1234", //$NON-NLS-1$
"pm1.g1.e1 = '1,234'" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit_parseLong() {
helpTestRewriteCriteria("parseLong(pm1.g1.e1, '#,##0') = convert(1234, long)", //$NON-NLS-1$
"pm1.g1.e1 = '1,234'" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit_parseBigInteger() {
helpTestRewriteCriteria("parseBigInteger(pm1.g1.e1, '#,##0') = convert(1234, biginteger)", //$NON-NLS-1$
"pm1.g1.e1 = '1,234'" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit_parseFloat() {
- helpTestRewriteCriteria("parseFloat(pm1.g1.e1, '#,##0.###') = convert(1234.1234, float)", //$NON-NLS-1$
+ helpTestRewriteCriteria("parseFloat(pm1.g1.e1, '#,##0.###') = convert(1234.123, float)", //$NON-NLS-1$
"pm1.g1.e1 = '1,234.123'" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit_parseDouble() {
helpTestRewriteCriteria("parseDouble(pm1.g1.e1, '$#,##0.00') = convert(1234.5, double)", //$NON-NLS-1$
"pm1.g1.e1 = '$1,234.50'" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCrit_parseBigDecimal() {
helpTestRewriteCriteria("parseBigDecimal(pm1.g1.e1, '#,##0.###') = convert(1234.1234, bigdecimal)", //$NON-NLS-1$
"pm1.g1.e1 = '1,234.123'" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="Cannot deterime if the format is narrowing")
@Test public void testRewriteCrit_formatDate() {
helpTestRewriteCriteria("formatDate(pm3.g1.e2, 'yyyyMMdd') = '20030501'", //$NON-NLS-1$
"pm3.g1.e2 = {d'2003-05-01'}" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="Cannot deterime if the format is narrowing")
@Test public void testRewriteCrit_formatTime() {
helpTestRewriteCriteria("formatTime(pm3.g1.e3, 'HH mm ss') = '13 25 04'", //$NON-NLS-1$
"pm3.g1.e3 = {t'13:25:04'}" ); //$NON-NLS-1$
@@ -506,12 +522,14 @@
helpTestRewriteCriteria("formatTimestamp(pm3.g1.e4, 'MM dd, yyyy - HH:mm:ss') = '05 01, 1974 - 07:00:00'", //$NON-NLS-1$
"formatTimestamp(pm3.g1.e4, 'MM dd, yyyy - HH:mm:ss') = '05 01, 1974 - 07:00:00'" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="Cannot deterime if the format is narrowing")
@Test public void testRewriteCrit_formatTimestamp1() {
helpTestRewriteCriteria("formatTimestamp(pm3.g1.e4, 'MM dd, yyyy - HH:mm:ss.S') = '05 01, 1974 - 07:00:00.0'", //$NON-NLS-1$
"pm3.g1.e4 = {ts'1974-05-01 07:00:00.0'}" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="Cannot deterime if the format is narrowing")
@Test public void testRewriteCrit_formatInteger() {
helpTestRewriteCriteria("formatInteger(pm1.g1.e2, '#,##0') = '1,234'", //$NON-NLS-1$
"pm1.g1.e2 = 1234" ); //$NON-NLS-1$
@@ -521,17 +539,20 @@
helpTestRewriteCriteria("formatInteger(pm1.g1.e2, '#5') = '105'", //$NON-NLS-1$
"formatInteger(pm1.g1.e2, '#5') = '105'" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="Cannot deterime if the format is narrowing")
@Test public void testRewriteCrit_formatLong() {
helpTestRewriteCriteria("formatLong(convert(pm1.g1.e2, long), '#,##0') = '1,234,567,890,123'", //$NON-NLS-1$
"1 = 0" ); //$NON-NLS-1$
}
+ @Ignore(value="Cannot deterime if the format is narrowing")
@Test public void testRewriteCrit_formatLong1() {
helpTestRewriteCriteria("formatLong(convert(pm1.g1.e2, long), '#,##0') = '1,234,567,890'", //$NON-NLS-1$
"pm1.g1.e2 = 1234567890" ); //$NON-NLS-1$
}
-
+
+ @Ignore(value="Cannot deterime if the format is narrowing")
@Test public void testRewriteCrit_formatTimestampInvert() {
String original = "formatTimestamp(pm3.g1.e4, 'MM dd, yyyy - HH:mm:ss.S') = ?"; //$NON-NLS-1$
String expected = "pm3.g1.e4 = parseTimestamp(?, 'MM dd, yyyy - HH:mm:ss.S')"; //$NON-NLS-1$
@@ -545,7 +566,8 @@
helpTestRewriteCriteria(original, expected);
}
-
+
+ @Ignore(value="Cannot deterime if the format is narrowing")
@Test public void testRewriteCrit_formatBigInteger() throws Exception {
String original = "formatBigInteger(convert(pm1.g1.e2, biginteger), '#,##0') = '1,234,567,890'"; //$NON-NLS-1$
String expected = "pm1.g1.e2 = 1234567890"; //$NON-NLS-1$
@@ -558,7 +580,8 @@
Criteria actual = QueryRewriter.rewriteCriteria(origCrit, null, null, null);
assertEquals("Did not rewrite correctly: ", expectedCrit, actual); //$NON-NLS-1$
}
-
+
+ @Ignore(value="Cannot deterime if the format is narrowing")
@Test public void testRewriteCrit_formatFloat() throws Exception {
String original = "formatFloat(convert(pm1.g1.e4, float), '#,##0.###') = '1,234.123'"; //$NON-NLS-1$
String expected = "pm1.g1.e4 = 1234.123046875"; //$NON-NLS-1$
@@ -570,7 +593,8 @@
Criteria actual = QueryRewriter.rewriteCriteria(origCrit, null, null, null);
assertEquals("Did not rewrite correctly: ", expected, actual.toString()); //$NON-NLS-1$
}
-
+
+ @Ignore(value="Cannot deterime if the format is narrowing")
@Test public void testRewriteCrit_formatDouble() throws Exception {
String original = "formatDouble(convert(pm1.g1.e4, double), '$#,##0.00') = '$1,234.50'"; //$NON-NLS-1$
String expected = "pm1.g1.e4 = '1234.5'"; //$NON-NLS-1$
@@ -584,9 +608,10 @@
Criteria actual = QueryRewriter.rewriteCriteria(origCrit, null, null, null);
assertEquals("Did not rewrite correctly: ", expectedCrit, actual); //$NON-NLS-1$
}
-
+
+ @Ignore(value="Cannot deterime if the format is narrowing")
@Test public void testRewriteCrit_formatBigDecimal() throws Exception {
- String original = "formatBigDecimal(convert(pm1.g1.e4, bigdecimal), '#,##0.###') = convert(1234.5, bigdecimal)"; //$NON-NLS-1$
+ String original = "formatBigDecimal(convert(pm1.g1.e4, bigdecimal), '#,##0.###') = '1,234.5'"; //$NON-NLS-1$
String expected = "pm1.g1.e4 = 1234.5"; //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
@@ -1101,7 +1126,7 @@
String rewritProc = "CREATE PROCEDURE\n"; //$NON-NLS-1$
rewritProc = rewritProc + "BEGIN\n"; //$NON-NLS-1$
rewritProc = rewritProc + "DECLARE integer var1;\n"; //$NON-NLS-1$
- rewritProc = rewritProc + "SELECT pm1.g1.e2 FROM pm1.g1 WHERE (CONCAT(e1, 'z') = CONCAT(CONCAT(e1, 'z'), 'y')) AND (CONCAT(e1, 'k') = '1');\n"; //$NON-NLS-1$
+ rewritProc = rewritProc + "SELECT pm1.g1.e2 FROM pm1.g1 WHERE (CONCAT(e1, 'z') = CONCAT(CONCAT(e1, 'z'), 'y')) AND (convert(CONCAT(e1, 'k'), integer) = 1);\n"; //$NON-NLS-1$
rewritProc = rewritProc + "END"; //$NON-NLS-1$
String procReturned = this.getReWrittenProcedure(procedure, userQuery,
@@ -1490,11 +1515,9 @@
// rewrite
Command rewriteCommand = QueryRewriter.rewrite(command, null, null, null);
- List parameters = ((StoredProcedure)rewriteCommand).getParameters();
-
- Iterator iter = parameters.iterator();
- while(iter.hasNext()){
- SPParameter param = (SPParameter)iter.next();
+ List<SPParameter> parameters = ((StoredProcedure)rewriteCommand).getParameters();
+
+ for (SPParameter param : parameters) {
if(param.getParameterType() == ParameterInfo.IN || param.getParameterType() == ParameterInfo.INOUT){
assertTrue(param.getExpression() instanceof Constant);
}
@@ -1569,8 +1592,6 @@
@Test public void testRewriteCase1954b() throws Exception{
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
- // Have to hand-build the criteria, because 3.0 gets parsed as a Float by default
- // pm1.g1.e4 = 3.0
CompareCriteria expected = new CompareCriteria();
ElementSymbol leftElement = new ElementSymbol("pm1.g1.e4"); //$NON-NLS-1$
Constant constant = new Constant(new Double(3.0), DataTypeManager.DefaultDataClasses.DOUBLE);
@@ -1579,13 +1600,14 @@
// resolve against metadata
QueryResolver.resolveCriteria(expected, metadata);
- helpTestRewriteCriteria("convert(pm1.g1.e4, string) = '3'", expected, metadata); //$NON-NLS-1$
+ helpTestRewriteCriteria("convert(pm1.g1.e4, string) = '3.0'", expected, metadata); //$NON-NLS-1$
}
@Test public void testRewriteCase1954c() {
helpTestRewriteCriteria("convert(pm1.g1.e1, string) = 'x'", "pm1.g1.e1 = 'x'"); //$NON-NLS-1$ //$NON-NLS-2$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteCase1954d() {
helpTestRewriteCriteria("convert(pm1.g1.e1, timestamp) = {ts '2005-01-03 00:00:00.0'}", "pm1.g1.e1 = '2005-01-03 00:00:00.0'"); //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -1743,11 +1765,13 @@
assertEquals("SELECT e1, e2 FROM pm1.g1 WHERE e1 = '1'", rewriteCommand.toString()); //$NON-NLS-1$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteNestedFunctions() {
helpTestRewriteCommand("SELECT e1 FROM pm1.g1 where convert(parsedate(e1, 'yyyy-MM-dd'), string) = '2006-07-01'", "SELECT e1 FROM pm1.g1 WHERE e1 = '2006-07-01'"); //$NON-NLS-1$ //$NON-NLS-2$
}
-
+
+ @Ignore(value="It's not generally possible to invert a narrowing conversion")
@Test public void testRewriteWithReference() {
helpTestRewriteCommand("SELECT e1 FROM pm1.g1 where parsetimestamp(e1, 'yyyy-MM-dd') != ?", "SELECT e1 FROM pm1.g1 WHERE e1 <> formattimestamp(?, 'yyyy-MM-dd')"); //$NON-NLS-1$ //$NON-NLS-2$
}
15 years, 4 months
teiid SVN: r1298 - trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2009-08-31 18:02:02 -0400 (Mon, 31 Aug 2009)
New Revision: 1298
Modified:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbyCapabilities.java
Log:
TEIID-486 sign support isn't in derby until 10.4
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbyCapabilities.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbyCapabilities.java 2009-08-31 19:41:28 UTC (rev 1297)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbyCapabilities.java 2009-08-31 22:02:02 UTC (rev 1298)
@@ -74,8 +74,10 @@
supportedFunctions.add("PI"); //$NON-NLS-1$
//supportedFunctions.add("POWER"); //$NON-NLS-1$
supportedFunctions.add("RADIANS"); //$NON-NLS-1$
- //supportedFunctions.add("ROUND"); //$NON-NLS-1$
- supportedFunctions.add("SIGN"); //$NON-NLS-1$
+ //supportedFunctions.add("ROUND"); //$NON-NLS-1$
+ if (version.compareTo(TEN_4) >= 0) {
+ supportedFunctions.add("SIGN"); //$NON-NLS-1$
+ }
supportedFunctions.add("SIN"); //$NON-NLS-1$
}
supportedFunctions.add("SQRT"); //$NON-NLS-1$
15 years, 4 months
teiid SVN: r1297 - in trunk: test-integration/src/test/java/com/metamatrix/server/integration and 1 other directories.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2009-08-31 15:41:28 -0400 (Mon, 31 Aug 2009)
New Revision: 1297
Added:
trunk/test-integration/src/test/resources/admin/admin-roles.properties
trunk/test-integration/src/test/resources/admin/dqp-membership.properties
trunk/test-integration/src/test/resources/admin/groups.properties
trunk/test-integration/src/test/resources/admin/membership-file.properties
trunk/test-integration/src/test/resources/admin/users.properties
Modified:
trunk/client-jdbc/src/test/java/com/metamatrix/jdbc/api/AbstractMMQueryTestCase.java
trunk/test-integration/src/test/java/com/metamatrix/server/integration/TestAdminApi.java
Log:
TEIID-779, TEIID-697
Modified: trunk/client-jdbc/src/test/java/com/metamatrix/jdbc/api/AbstractMMQueryTestCase.java
===================================================================
--- trunk/client-jdbc/src/test/java/com/metamatrix/jdbc/api/AbstractMMQueryTestCase.java 2009-08-31 17:25:36 UTC (rev 1296)
+++ trunk/client-jdbc/src/test/java/com/metamatrix/jdbc/api/AbstractMMQueryTestCase.java 2009-08-31 19:41:28 UTC (rev 1297)
@@ -69,7 +69,7 @@
}
public static com.metamatrix.jdbc.api.Connection createConnection(String vdb, String propsFile, String addtionalStuff) throws SQLException {
- String url = "jdbc:metamatrix:"+vdb+"@" + propsFile+addtionalStuff; //$NON-NLS-1$ //$NON-NLS-2$
+ String url = "jdbc:teiid:"+vdb+"@" + propsFile+addtionalStuff; //$NON-NLS-1$ //$NON-NLS-2$
return (com.metamatrix.jdbc.api.Connection)DriverManager.getConnection(url);
}
Modified: trunk/test-integration/src/test/java/com/metamatrix/server/integration/TestAdminApi.java
===================================================================
--- trunk/test-integration/src/test/java/com/metamatrix/server/integration/TestAdminApi.java 2009-08-31 17:25:36 UTC (rev 1296)
+++ trunk/test-integration/src/test/java/com/metamatrix/server/integration/TestAdminApi.java 2009-08-31 19:41:28 UTC (rev 1297)
@@ -32,6 +32,8 @@
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
import java.util.Properties;
import org.junit.Before;
@@ -43,9 +45,11 @@
import org.teiid.adminapi.ConnectorType;
import org.teiid.adminapi.EmbeddedLogger;
import org.teiid.adminapi.ExtensionModule;
+import org.teiid.adminapi.Group;
import org.teiid.adminapi.LogConfiguration;
import org.teiid.adminapi.ProcessObject;
import org.teiid.adminapi.PropertyDefinition;
+import org.teiid.adminapi.Role;
import org.teiid.adminapi.VDB;
import org.teiid.runtime.adminapi.Util;
@@ -59,6 +63,7 @@
private static final String STAR = "*"; //$NON-NLS-1$
private static final String PROPS_FILE = UnitTestUtil.getTestDataPath()+"/admin/dqp.properties;user=admin;password=teiid"; //$NON-NLS-1$
+ private static final String MEMBERSHIP_PROPS_FILE = UnitTestUtil.getTestDataPath()+"/admin/dqp-membership.properties"; //$NON-NLS-1$
private static final String BQT = "BQT"; //$NON-NLS-1$
private static final String ADMIN = "admin"; //$NON-NLS-1$
private static final String VDB_NAME = "TestEmpty"; //$NON-NLS-1$
@@ -1040,8 +1045,84 @@
closeConnection();
}
+
+ @Test public void testGetRolesForGroup() throws Exception {
+ getConnection(ADMIN, MEMBERSHIP_PROPS_FILE, ";user=admin;password=teiid"); //$NON-NLS-1$
+ cleanDeploy();
+ Collection<Role> r = getAdmin().getRolesForGroup("group1@file");//$NON-NLS-1$
+ assertTrue(!r.isEmpty());
+ assertEquals(Role.ADMIN_SYSTEM, r.iterator().next().getIdentifier());
+
+ try {
+ r = getAdmin().getRolesForGroup("unknown");//$NON-NLS-1$
+ fail("must have failed to fetch the group"); //$NON-NLS-1$
+ }catch(Exception e) {
+
+ }
+ assertTrue(!r.isEmpty());
+
+ closeConnection();
+ }
+
+ @Test public void testGetGroupsForUser() throws Exception {
+ getConnection(ADMIN, MEMBERSHIP_PROPS_FILE, ";user=admin;password=teiid"); //$NON-NLS-1$
+ cleanDeploy();
+
+ Collection<Group> g = getAdmin().getGroupsForUser("paul@file"); //$NON-NLS-1$
+ assertEquals(2, g.size());
+ Iterator<Group> i = g.iterator();
+ assertEquals("group4@file", i.next().getIdentifier()); //$NON-NLS-1$
+ assertEquals("group1@file", i.next().getIdentifier()); //$NON-NLS-1$
+
+ // with out the @file
+ g = getAdmin().getGroupsForUser("paul"); //$NON-NLS-1$
+ assertEquals(2, g.size());
+
+ try {
+ g = getAdmin().getGroupsForUser("unknown");//$NON-NLS-1$
+ fail("should failed to resolve the unknown user"); //$NON-NLS-1$
+ }catch(Exception e) {
+ }
+
+ closeConnection();
+ }
+ @Test public void testGetGroups() throws Exception {
+ getConnection(ADMIN, MEMBERSHIP_PROPS_FILE, ";user=admin;password=teiid"); //$NON-NLS-1$
+ cleanDeploy();
+
+ Collection<Group> g = getAdmin().getGroups("*"); //$NON-NLS-1$
+ assertEquals(4, g.size());
+
+ closeConnection();
+ }
+
+ @Test public void testGetDomainNames() throws Exception {
+ getConnection(ADMIN, MEMBERSHIP_PROPS_FILE, ";user=admin;password=teiid"); //$NON-NLS-1$
+ cleanDeploy();
+
+ List<String> g = getAdmin().getDomainNames();
+ assertEquals(1, g.size());
+ assertEquals("file", g.get(0)); //$NON-NLS-1$
+ closeConnection();
+ }
+
+ @Test public void testGetGroupsForDomain() throws Exception {
+ getConnection(ADMIN, MEMBERSHIP_PROPS_FILE, ";user=admin;password=teiid"); //$NON-NLS-1$
+ cleanDeploy();
+
+ Collection<Group> g = getAdmin().getGroupsForDomain("file"); //$NON-NLS-1$
+ assertEquals(4, g.size());
+
+ g = getAdmin().getGroupsForDomain("unknown"); //$NON-NLS-1$
+ assertEquals(0, g.size());
+
+ closeConnection();
+ }
+
+
+
VDB addVDB(String name, String vdbFile) {
try {
return getAdmin().addVDB(name, Util.getBinaryFile(vdbFile), new AdminOptions(AdminOptions.OnConflict.IGNORE));
Added: trunk/test-integration/src/test/resources/admin/admin-roles.properties
===================================================================
--- trunk/test-integration/src/test/resources/admin/admin-roles.properties (rev 0)
+++ trunk/test-integration/src/test/resources/admin/admin-roles.properties 2009-08-31 19:41:28 UTC (rev 1297)
@@ -0,0 +1,18 @@
+# This file defines admin role grants for each user "group" in the system.
+# based on the this permission the user will be able to call the admin
+# function calls into the system. The following format needs to be used
+# define the permissions
+
+# role1 = groupA,groupB
+# role2 = groupB,groupC
+
+# for group names check your membership provider configuration.
+
+# This role grants full permissions to any configuration, runtime-management and monitoring of the system
+Admin.SystemAdmin=group1@file,group4@file
+
+# This role grants runtime-management and monitoring of the system
+Admin.ProductAdmin=group2@file
+
+# This role grants only monitoring of the system.
+Admin.ReadOnlyAdmin=group3@file
Property changes on: trunk/test-integration/src/test/resources/admin/admin-roles.properties
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/test-integration/src/test/resources/admin/dqp-membership.properties
===================================================================
--- trunk/test-integration/src/test/resources/admin/dqp-membership.properties (rev 0)
+++ trunk/test-integration/src/test/resources/admin/dqp-membership.properties 2009-08-31 19:41:28 UTC (rev 1297)
@@ -0,0 +1,21 @@
+dqp.configFile=../../../../target/scratch/configuration.xml
+dqp.buffer.usedisk=false
+xa.enable_recovery=false
+dqp.deploydir=../../../../target/scratch
+dqp.workdir=../../../../target/scratch/work
+
+membership.enabled=true
+membership.superUser=admin
+membership.superUserPassword=teiid
+membership.DomainOrder=file
+
+file.activate=true
+file.AuthDomainClass=com.metamatrix.platform.security.membership.spi.file.FileMembershipDomain
+file.propertiesFile=membership-file.properties
+
+auth.check_entitlements=false
+auth.adminRolesFile=./admin-roles.properties
+
+dqp.userDefinedFunctionsFile=extensionjar:FunctionDefinitions.xmi
+processName=localhost
+dqp.extensions=../../../../target/scratch/extensions/;./extensions
\ No newline at end of file
Property changes on: trunk/test-integration/src/test/resources/admin/dqp-membership.properties
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/test-integration/src/test/resources/admin/groups.properties
===================================================================
--- trunk/test-integration/src/test/resources/admin/groups.properties (rev 0)
+++ trunk/test-integration/src/test/resources/admin/groups.properties 2009-08-31 19:41:28 UTC (rev 1297)
@@ -0,0 +1,4 @@
+group1=paul
+group2=ramesh
+group3=steve
+group4=bob,paul
Property changes on: trunk/test-integration/src/test/resources/admin/groups.properties
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/test-integration/src/test/resources/admin/membership-file.properties
===================================================================
--- trunk/test-integration/src/test/resources/admin/membership-file.properties (rev 0)
+++ trunk/test-integration/src/test/resources/admin/membership-file.properties 2009-08-31 19:41:28 UTC (rev 1297)
@@ -0,0 +1,11 @@
+#File based membership domain configuration properties
+
+#Location of the properties file containing user name and password entries.
+usersFile=users.properties
+
+#Location of the properties file containing group assignments
+groupsFile=groups.properties
+
+#Check passwords against the users file.
+checkPassword=true
+
Property changes on: trunk/test-integration/src/test/resources/admin/membership-file.properties
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/test-integration/src/test/resources/admin/users.properties
===================================================================
--- trunk/test-integration/src/test/resources/admin/users.properties (rev 0)
+++ trunk/test-integration/src/test/resources/admin/users.properties 2009-08-31 19:41:28 UTC (rev 1297)
@@ -0,0 +1,5 @@
+john=mm
+paul=mm
+ramesh=mm
+steve=mm
+bob=mm
Property changes on: trunk/test-integration/src/test/resources/admin/users.properties
___________________________________________________________________
Name: svn:mime-type
+ text/plain
15 years, 4 months
teiid SVN: r1296 - trunk/documentation/reference/src/main/docbook/en-US/content.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2009-08-31 13:25:36 -0400 (Mon, 31 Aug 2009)
New Revision: 1296
Modified:
trunk/documentation/reference/src/main/docbook/en-US/content/datatypes.xml
Log:
fixing boolean datatype conversion section
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/datatypes.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/datatypes.xml 2009-08-31 02:03:54 UTC (rev 1295)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/datatypes.xml 2009-08-31 17:25:36 UTC (rev 1296)
@@ -44,7 +44,7 @@
</row>
<row>
<entry>boolean</entry>
- <entry>a single bit, or Boolean, that can true, false, or null (unknown)
+ <entry>a single bit, or Boolean, that can be true, false, or null (unknown)
</entry>
<entry>java.lang.Boolean</entry>
<entry>BIT</entry>
@@ -385,7 +385,7 @@
<entry>true</entry>
</row>
<row>
- <entry morerows="2">Numeric</entry>
+ <entry morerows="1">Numeric</entry>
<entry>0</entry>
<entry>false</entry>
</row>
15 years, 4 months
teiid SVN: r1295 - trunk/common-core/src/test/java/com/metamatrix/common/types/basic.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2009-08-30 22:03:54 -0400 (Sun, 30 Aug 2009)
New Revision: 1295
Modified:
trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestTransforms.java
Log:
fixing unit test assertion
Modified: trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestTransforms.java
===================================================================
--- trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestTransforms.java 2009-08-30 22:19:06 UTC (rev 1294)
+++ trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestTransforms.java 2009-08-31 02:03:54 UTC (rev 1295)
@@ -60,11 +60,12 @@
Transform transform = DataTypeManager.getTransform(DataTypeManager.getDataTypeClass(src), expectedValue.getClass());
Object result = transform.transform(value);
assertTrue(expectedValue.getClass().isAssignableFrom(result.getClass()));
+ assertFalse("Expected exception for " +src+ " to " + target, //$NON-NLS-1$ //$NON-NLS-2$
+ isException(DataTypeManager.getDataTypeName(value.getClass()), target,value));
} catch (TransformationException e) {
if (!isException(DataTypeManager.getDataTypeName(value.getClass()), target,value)) {
throw e;
}
- fail("Expected exception for " +src+ " to " + target); //$NON-NLS-1$ //$NON-NLS-2$
}
}
15 years, 4 months
teiid SVN: r1294 - in trunk: common-core/src/main/java/com/metamatrix/common/types/basic and 30 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2009-08-30 18:19:06 -0400 (Sun, 30 Aug 2009)
New Revision: 1294
Added:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SubstringFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ConvertModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ModFunctionModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLocateFunctionModifier.java
trunk/connectors/connector-jdbc/src/test/resources/PartsSupplierOracle.vdb
Removed:
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2ConvertModifier.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/OracleConvertModifier.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/sybase/SybaseConvertModifier.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/BindValueVisitor.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/DropFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ModFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ReplacementVisitor.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SubstringFunctionModifier.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/TestDropFunctionModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLOCATEFunctionModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/util/
trunk/test-integration/src/test/java/com/metamatrix/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java
trunk/test-integration/src/test/resources/PartsSupplierOracle.vdb
Modified:
trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToBooleanTransform.java
trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBooleanTransform.java
trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestTransforms.java
trunk/connector-api/src/main/java/org/teiid/connector/api/TypeFacility.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2SQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbySQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/informix/InformixSQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/BitFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/DayWeekQuarterFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/LeftOrRightFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/Log10FunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/MonthOrDayNameFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSpatialFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/LocateFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerCapabilities.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerSQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseCapabilities.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseSQLTranslator.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/AliasModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/EscapeSyntaxModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/FunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/TranslatedCommand.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/Translator.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2ConvertModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2SqlTranslator.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/derby/TestDerbySQLTranslator.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/extension/impl/TestEscapeSyntaxModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestDayWeekQuarterFunctionModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLeftOrRightFunctionModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLog10FunctionModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestMonthOrDayNameFunctionModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleConvertModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleTranslator.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestSubstringFunctionModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/postgresql/TestPostgreSQLTranslator.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sqlserver/TestSqlServerConversionVisitor.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseConvertModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseSQLConversionVisitor.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestExtractFunctionModifier.java
trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestModFunctionModifier.java
trunk/documentation/reference/src/main/docbook/en-US/content/datatypes.xml
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/impl/ConnectorWorkItem.java
trunk/engine/src/test/java/com/metamatrix/query/function/TestFunction.java
trunk/engine/src/test/java/com/metamatrix/query/parser/TestParser.java
trunk/engine/src/test/java/com/metamatrix/query/resolver/TestResolver.java
trunk/test-integration/src/test/java/com/metamatrix/connector/jdbc/extension/TestSQLConversionVisitor.java
Log:
TEIID-806 TEIID-794 TEIID-741 TEIID-486 TEIID-799 simplifying functionmodifier, combining the modfunctionmodifier impls, updating all convert modifiers to better represent teiid type handling (especially char and boolean)
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -579,7 +579,7 @@
static void loadBasicTransforms() {
DataTypeManager
.addTransform(new com.metamatrix.common.types.basic.BigDecimalToBigIntegerTransform());
- DataTypeManager.addTransform(new NumberToBooleanTransform(BigDecimal.valueOf(1), BigDecimal.valueOf(0)));
+ DataTypeManager.addTransform(new NumberToBooleanTransform(BigDecimal.valueOf(0)));
DataTypeManager.addTransform(new NumberToByteTransform(
DefaultDataClasses.BIG_DECIMAL));
DataTypeManager.addTransform(new NumberToDoubleTransform(
@@ -596,7 +596,7 @@
DataTypeManager
.addTransform(new com.metamatrix.common.types.basic.BigIntegerToBigDecimalTransform());
- DataTypeManager.addTransform(new NumberToBooleanTransform(BigInteger.valueOf(1), BigInteger.valueOf(0)));
+ DataTypeManager.addTransform(new NumberToBooleanTransform(BigInteger.valueOf(0)));
DataTypeManager.addTransform(new NumberToByteTransform(
DefaultDataClasses.BIG_INTEGER));
DataTypeManager.addTransform(new NumberToDoubleTransform(
@@ -631,7 +631,7 @@
DataTypeManager.addTransform(new FixedNumberToBigDecimalTransform(DefaultDataClasses.BYTE));
DataTypeManager.addTransform(new FixedNumberToBigIntegerTransform(DefaultDataClasses.BYTE));
- DataTypeManager.addTransform(new NumberToBooleanTransform(Byte.valueOf((byte)1), Byte.valueOf((byte)0)));
+ DataTypeManager.addTransform(new NumberToBooleanTransform(Byte.valueOf((byte)0)));
DataTypeManager.addTransform(new NumberToDoubleTransform(
DefaultDataClasses.BYTE, false));
DataTypeManager.addTransform(new NumberToFloatTransform(
@@ -655,7 +655,7 @@
DataTypeManager.addTransform(new FloatingNumberToBigDecimalTransform(DefaultDataClasses.DOUBLE));
DataTypeManager.addTransform(new FloatingNumberToBigIntegerTransform(DefaultDataClasses.DOUBLE));
- DataTypeManager.addTransform(new NumberToBooleanTransform(Double.valueOf(1), Double.valueOf(0)));
+ DataTypeManager.addTransform(new NumberToBooleanTransform(Double.valueOf(0)));
DataTypeManager.addTransform(new NumberToByteTransform(
DefaultDataClasses.DOUBLE));
DataTypeManager.addTransform(new NumberToFloatTransform(
@@ -670,7 +670,7 @@
DataTypeManager.addTransform(new FloatingNumberToBigDecimalTransform(DefaultDataClasses.FLOAT));
DataTypeManager.addTransform(new FloatingNumberToBigIntegerTransform(DefaultDataClasses.FLOAT));
- DataTypeManager.addTransform(new NumberToBooleanTransform(Float.valueOf(1), Float.valueOf(0)));
+ DataTypeManager.addTransform(new NumberToBooleanTransform(Float.valueOf(0)));
DataTypeManager.addTransform(new NumberToByteTransform(
DefaultDataClasses.FLOAT));
DataTypeManager.addTransform(new NumberToDoubleTransform(
@@ -685,7 +685,7 @@
DataTypeManager.addTransform(new FixedNumberToBigDecimalTransform(DefaultDataClasses.INTEGER));
DataTypeManager.addTransform(new FixedNumberToBigIntegerTransform(DefaultDataClasses.INTEGER));
- DataTypeManager.addTransform(new NumberToBooleanTransform(Integer.valueOf(1), Integer.valueOf(0)));
+ DataTypeManager.addTransform(new NumberToBooleanTransform(Integer.valueOf(0)));
DataTypeManager.addTransform(new NumberToByteTransform(
DefaultDataClasses.INTEGER));
DataTypeManager.addTransform(new NumberToDoubleTransform(
@@ -700,7 +700,7 @@
DataTypeManager.addTransform(new FixedNumberToBigDecimalTransform(DefaultDataClasses.LONG));
DataTypeManager.addTransform(new FixedNumberToBigIntegerTransform(DefaultDataClasses.LONG));
- DataTypeManager.addTransform(new NumberToBooleanTransform(Long.valueOf(1), Long.valueOf(0)));
+ DataTypeManager.addTransform(new NumberToBooleanTransform(Long.valueOf(0)));
DataTypeManager.addTransform(new NumberToByteTransform(
DefaultDataClasses.LONG));
DataTypeManager.addTransform(new NumberToDoubleTransform(
@@ -715,7 +715,7 @@
DataTypeManager.addTransform(new FixedNumberToBigDecimalTransform(DefaultDataClasses.SHORT));
DataTypeManager.addTransform(new FixedNumberToBigIntegerTransform(DefaultDataClasses.SHORT));
- DataTypeManager.addTransform(new NumberToBooleanTransform(Short.valueOf((short)1), Short.valueOf((short)0)));
+ DataTypeManager.addTransform(new NumberToBooleanTransform(Short.valueOf((short)0)));
DataTypeManager.addTransform(new NumberToByteTransform(
DefaultDataClasses.SHORT));
DataTypeManager.addTransform(new NumberToDoubleTransform(
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToBooleanTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToBooleanTransform.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToBooleanTransform.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -25,28 +25,24 @@
import com.metamatrix.common.types.AbstractTransform;
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.common.types.TransformationException;
-import com.metamatrix.core.CorePlugin;
-import com.metamatrix.core.ErrorMessageKeys;
public class NumberToBooleanTransform extends AbstractTransform {
- private Object trueVal;
- private Object falseVal;
+ private Comparable falseVal;
private Class<?> sourceType;
- public NumberToBooleanTransform(Object trueVal, Object falseVal) {
- this.trueVal = trueVal;
+ public NumberToBooleanTransform(Comparable falseVal) {
this.falseVal = falseVal;
- this.sourceType = trueVal.getClass();
+ this.sourceType = falseVal.getClass();
}
@Override
- public Class getSourceType() {
+ public Class<?> getSourceType() {
return sourceType;
}
@Override
- public Class getTargetType() {
+ public Class<?> getTargetType() {
return DataTypeManager.DefaultDataClasses.BOOLEAN;
}
@@ -55,13 +51,15 @@
if (value == null) {
return null;
}
- if (value.equals(trueVal)) {
- return Boolean.TRUE;
- }
- if (value.equals(falseVal)) {
+ if (falseVal.compareTo(value) == 0) {
return Boolean.FALSE;
}
- throw new TransformationException(ErrorMessageKeys.TYPES_ERR_0013, CorePlugin.Util.getString(ErrorMessageKeys.TYPES_ERR_0013, sourceType.getSimpleName(), value));
+ return Boolean.TRUE;
}
+
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
}
Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBooleanTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBooleanTransform.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToBooleanTransform.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -29,13 +29,10 @@
import com.metamatrix.common.types.AbstractTransform;
import com.metamatrix.common.types.TransformationException;
import com.metamatrix.common.types.DataTypeManager.DefaultDataClasses;
-import com.metamatrix.core.CorePlugin;
-import com.metamatrix.core.ErrorMessageKeys;
public class StringToBooleanTransform extends AbstractTransform {
- private static final Set<String> TRUE = new HashSet<String>(Arrays.asList("1", "TRUE")); //$NON-NLS-1$ //$NON-NLS-2$
- private static final Set<String> FALSE = new HashSet<String>(Arrays.asList("0", "FALSE")); //$NON-NLS-1$ //$NON-NLS-2$
+ private static final Set<String> FALSE = new HashSet<String>(Arrays.asList("0", "false")); //$NON-NLS-1$ //$NON-NLS-2$
/**
* This method transforms a value of the source type into a value
@@ -49,17 +46,14 @@
if(value == null) {
return value;
}
- String str = ((String)value).trim().toUpperCase();
- if (TRUE.contains(str)) {
- return Boolean.TRUE;
- }
+ String str = ((String)value).trim().toLowerCase();
if (FALSE.contains(str)) {
return Boolean.FALSE;
}
- if ("UNKNOWN".equals(str)) { //$NON-NLS-1$
+ if ("unknown".equals(str)) { //$NON-NLS-1$
return null;
}
- throw new TransformationException(ErrorMessageKeys.TYPES_ERR_0013, CorePlugin.Util.getString(ErrorMessageKeys.TYPES_ERR_0013, getSourceType().getSimpleName(), value));
+ return Boolean.TRUE;
}
/**
@@ -78,4 +72,9 @@
return DefaultDataClasses.BOOLEAN;
}
+ @Override
+ public boolean isNarrowing() {
+ return true;
+ }
+
}
Modified: trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestTransforms.java
===================================================================
--- trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestTransforms.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/common-core/src/test/java/com/metamatrix/common/types/basic/TestTransforms.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -59,18 +59,15 @@
try {
Transform transform = DataTypeManager.getTransform(DataTypeManager.getDataTypeClass(src), expectedValue.getClass());
Object result = transform.transform(value);
- assertTrue(expectedValue.getClass().isAssignableFrom(result.getClass()));
+ assertTrue(expectedValue.getClass().isAssignableFrom(result.getClass()));
} catch (TransformationException e) {
if (!isException(DataTypeManager.getDataTypeName(value.getClass()), target,value)) {
throw e;
- }
+ }
+ fail("Expected exception for " +src+ " to " + target); //$NON-NLS-1$ //$NON-NLS-2$
}
}
- private static void helpTransformException(Object value, Class<?> target) {
- helpTransformException(value, target, null);
- }
-
private static void helpTransformException(Object value, Class<?> target, String msg) {
try {
Transform transform = DataTypeManager.getTransform(value.getClass(), target);
@@ -92,39 +89,45 @@
helpTestTransform(new String("0"), Boolean.FALSE); //$NON-NLS-1$
helpTestTransform(new String("true"), Boolean.TRUE); //$NON-NLS-1$
helpTestTransform(new String("false"), Boolean.FALSE); //$NON-NLS-1$
- helpTransformException(new String("foo"), DataTypeManager.DefaultDataClasses.BOOLEAN); //$NON-NLS-1$
+ helpTestTransform(new String("foo"), Boolean.TRUE); //$NON-NLS-1$
}
@Test public void testByte2Boolean() throws TransformationException {
helpTestTransform(new Byte((byte)1), Boolean.TRUE);
helpTestTransform(new Byte((byte)0), Boolean.FALSE);
- helpTransformException(new Byte((byte)12), DataTypeManager.DefaultDataClasses.BOOLEAN);
+ helpTestTransform(new Byte((byte)12), Boolean.TRUE);
}
@Test public void testShort2Boolean() throws TransformationException {
helpTestTransform(new Short((short)1), Boolean.TRUE);
helpTestTransform(new Short((short)0), Boolean.FALSE);
- helpTransformException(new Short((short)12), DataTypeManager.DefaultDataClasses.BOOLEAN);
+ helpTestTransform(new Short((short)12), Boolean.TRUE);
}
@Test public void testInteger2Boolean() throws TransformationException {
helpTestTransform(new Integer(1), Boolean.TRUE);
helpTestTransform(new Integer(0), Boolean.FALSE);
- helpTransformException(new Integer(12), DataTypeManager.DefaultDataClasses.BOOLEAN);
+ helpTestTransform(new Integer(12), Boolean.TRUE);
}
@Test public void testLong2Boolean() throws TransformationException {
helpTestTransform(new Long(1), Boolean.TRUE);
helpTestTransform(new Long(0), Boolean.FALSE);
- helpTransformException(new Long(12), DataTypeManager.DefaultDataClasses.BOOLEAN);
+ helpTestTransform(new Long(12), Boolean.TRUE);
}
@Test public void testBigInteger2Boolean() throws TransformationException {
helpTestTransform(new BigInteger("1"), Boolean.TRUE); //$NON-NLS-1$
helpTestTransform(new BigInteger("0"), Boolean.FALSE); //$NON-NLS-1$
- helpTransformException(new BigInteger("12"), DataTypeManager.DefaultDataClasses.BOOLEAN); //$NON-NLS-1$
+ helpTestTransform(new BigInteger("12"), Boolean.TRUE); //$NON-NLS-1$
}
+ @Test public void testBigDecimal2Boolean() throws TransformationException {
+ helpTestTransform(new BigDecimal("1"), Boolean.TRUE); //$NON-NLS-1$
+ helpTestTransform(new BigDecimal("0"), Boolean.FALSE); //$NON-NLS-1$
+ helpTestTransform(new BigDecimal("0.00"), Boolean.FALSE); //$NON-NLS-1$
+ }
+
static Object[][] testData = {
/*string-0*/ {"1", "0", "123"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
/*char-1*/ {new Character('1'), new Character('0'), new Character('1')},
@@ -149,20 +152,10 @@
private String[] dataTypes = TestDataTypeManager.dataTypes;
private char[][] conversions = TestDataTypeManager.conversions;
private static boolean isException(String src, String tgt, Object source) {
- return (src.equals(DataTypeManager.DefaultDataTypes.STRING) && tgt.equals(DataTypeManager.DefaultDataTypes.BOOLEAN) && source == testData[0][2])
- || (src.equals(DataTypeManager.DefaultDataTypes.STRING) && tgt.equals(DataTypeManager.DefaultDataTypes.XML))
- || (src.equals(DataTypeManager.DefaultDataTypes.STRING) && tgt.equals(DataTypeManager.DefaultDataTypes.CHAR))
+ return (src.equals(DataTypeManager.DefaultDataTypes.STRING) && tgt.equals(DataTypeManager.DefaultDataTypes.XML))
|| (src.equals(DataTypeManager.DefaultDataTypes.STRING) && tgt.equals(DataTypeManager.DefaultDataTypes.TIME))
|| (src.equals(DataTypeManager.DefaultDataTypes.STRING) && tgt.equals(DataTypeManager.DefaultDataTypes.TIMESTAMP))
- || (src.equals(DataTypeManager.DefaultDataTypes.STRING) && tgt.equals(DataTypeManager.DefaultDataTypes.DATE))
- || (src.equals(DataTypeManager.DefaultDataTypes.BYTE) && tgt.equals(DataTypeManager.DefaultDataTypes.BOOLEAN) && source == testData[3][2])
- || (src.equals(DataTypeManager.DefaultDataTypes.SHORT) && tgt.equals(DataTypeManager.DefaultDataTypes.BOOLEAN) && source == testData[4][2])
- || (src.equals(DataTypeManager.DefaultDataTypes.INTEGER) && tgt.equals(DataTypeManager.DefaultDataTypes.BOOLEAN) && source == testData[5][2])
- || (src.equals(DataTypeManager.DefaultDataTypes.LONG) && tgt.equals(DataTypeManager.DefaultDataTypes.BOOLEAN) && source == testData[6][2])
- || (src.equals(DataTypeManager.DefaultDataTypes.BIG_INTEGER) && tgt.equals(DataTypeManager.DefaultDataTypes.BOOLEAN) && source == testData[7][2])
- || (src.equals(DataTypeManager.DefaultDataTypes.FLOAT) && tgt.equals(DataTypeManager.DefaultDataTypes.BOOLEAN) && source == testData[8][2])
- || (src.equals(DataTypeManager.DefaultDataTypes.DOUBLE) && tgt.equals(DataTypeManager.DefaultDataTypes.BOOLEAN) && source == testData[9][2])
- || (src.equals(DataTypeManager.DefaultDataTypes.BIG_DECIMAL) && tgt.equals(DataTypeManager.DefaultDataTypes.BOOLEAN) && source == testData[10][2]);
+ || (src.equals(DataTypeManager.DefaultDataTypes.STRING) && tgt.equals(DataTypeManager.DefaultDataTypes.DATE));
}
@Test public void testAllConversions() throws TransformationException {
Modified: trunk/connector-api/src/main/java/org/teiid/connector/api/TypeFacility.java
===================================================================
--- trunk/connector-api/src/main/java/org/teiid/connector/api/TypeFacility.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connector-api/src/main/java/org/teiid/connector/api/TypeFacility.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -83,6 +83,13 @@
}
/**
+ * Get the String constant for the given type class
+ */
+ public static String getDataTypeName(Class<?> type) {
+ return DataTypeManager.getDataTypeName(type);
+ }
+
+ /**
* Get the SQL type for the given runtime type Class constant
* @param type
* @return
Deleted: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2ConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2ConvertModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2ConvertModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,337 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.db2;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.jdbc.translator.BasicFunctionModifier;
-import org.teiid.connector.jdbc.translator.DropFunctionModifier;
-import org.teiid.connector.language.ICompareCriteria;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.language.ICompareCriteria.Operator;
-
-
-/**
- */
-public class DB2ConvertModifier extends BasicFunctionModifier {
-
- private static DropFunctionModifier DROP_MODIFIER = new DropFunctionModifier();
-
- private ILanguageFactory langFactory;
-
- public DB2ConvertModifier(ILanguageFactory langFactory) {
- this.langFactory = langFactory;
- }
-
- public IExpression modify(IFunction function) {
- List<IExpression> args = function.getParameters();
- Class sourceType = args.get(0).getType();
- String targetTypeString = getTargetType(args.get(1));
- Class targetType = TypeFacility.getDataTypeClass(targetTypeString);
- IExpression returnExpr = null;
-
- if(targetType != null) {
-
- // targetType is always lower-case due to getTargetType implementation
- if(targetType.equals(TypeFacility.RUNTIME_TYPES.STRING)) {
- returnExpr = convertToString(args.get(0), sourceType);
-
- } else if(targetType.equals(TypeFacility.RUNTIME_TYPES.TIMESTAMP)) {
- returnExpr = convertToTimestamp(args.get(0), sourceType);
-
- } else if(targetType.equals(TypeFacility.RUNTIME_TYPES.DATE)) {
- returnExpr = convertToDate(args.get(0), sourceType);
-
- } else if(targetType.equals(TypeFacility.RUNTIME_TYPES.TIME)) {
- returnExpr = convertToTime(args.get(0), sourceType);
-
- } else if(targetType.equals(TypeFacility.RUNTIME_TYPES.BOOLEAN) ||
- targetType.equals(TypeFacility.RUNTIME_TYPES.BYTE) ||
- targetType.equals(TypeFacility.RUNTIME_TYPES.SHORT)) {
- returnExpr = convertToSmallInt(args.get(0), sourceType, targetType);
-
- } else if(targetType.equals(TypeFacility.RUNTIME_TYPES.INTEGER)) {
- returnExpr = convertToInteger(args.get(0), sourceType);
-
- } else if(targetType.equals(TypeFacility.RUNTIME_TYPES.LONG) ||
- targetType.equals(TypeFacility.RUNTIME_TYPES.BIG_INTEGER)) {
- returnExpr = convertToBigInt(args.get(0), sourceType);
-
- } else if(targetType.equals(TypeFacility.RUNTIME_TYPES.FLOAT)) {
- returnExpr = convertToReal(args.get(0), sourceType);
-
- } else if(targetType.equals(TypeFacility.RUNTIME_TYPES.DOUBLE)) {
- returnExpr = convertToDouble(args.get(0), sourceType);
-
- } else if(targetType.equals(TypeFacility.RUNTIME_TYPES.BIG_DECIMAL)) {
- returnExpr = convertToBigDecimal(args.get(0), sourceType);
-
- } else if(targetType.equals(TypeFacility.RUNTIME_TYPES.CHAR)) {
- returnExpr = convertToChar(args.get(0), sourceType);
- }
-
- if(returnExpr != null) {
- return returnExpr;
- }
- }
-
- // Last resort - just drop the convert and let the db figure it out
- return DROP_MODIFIER.modify(function);
- }
-
- /**
- * @param expression
- * @return
- * @since 4.2
- */
- private String getTargetType(IExpression expression) {
- if(expression != null && expression instanceof ILiteral) {
- String target = (String) ((ILiteral)expression).getValue();
- return target.toLowerCase();
- }
-
- return null;
- }
-
-
- /**
- * @param expression
- * @param sourceType
- * @return
- * @since 4.2
- */
- private IExpression convertToString(IExpression expression,
- Class sourceType) {
- if(sourceType.equals(TypeFacility.RUNTIME_TYPES.BOOLEAN)) {
- // BEFORE: convert(booleanExpression, string)
- // AFTER: CASE WHEN booleanExpression = 0 THEN 'false' ELSE 'true' END
-
- ILiteral literalZero = this.langFactory.createLiteral(new Integer(0), TypeFacility.RUNTIME_TYPES.INTEGER);
- ICompareCriteria when = this.langFactory.createCompareCriteria(Operator.EQ, expression, literalZero);
- List whens = new ArrayList(1);
- whens.add(when);
-
- ILiteral literalFalse = this.langFactory.createLiteral("false", TypeFacility.RUNTIME_TYPES.STRING); //$NON-NLS-1$
- List thens = new ArrayList(1);
- thens.add(literalFalse);
-
- ILiteral literalTrue = this.langFactory.createLiteral("true", TypeFacility.RUNTIME_TYPES.STRING); //$NON-NLS-1$
-
- return this.langFactory.createSearchedCaseExpression(whens, thens, literalTrue, TypeFacility.RUNTIME_TYPES.STRING);
-
- } else if(sourceType.equals(TypeFacility.RUNTIME_TYPES.CHAR)) {
- // Drop convert entirely for char
- return null;
-
- } else {
- // BEFORE: convert(EXPR, string)
- // AFTER: char(EXPR)
- return wrapNewFunction(expression, "char", TypeFacility.RUNTIME_TYPES.STRING); //$NON-NLS-1$
- }
- }
-
- private IExpression convertToChar(IExpression expression,
- Class sourceType) {
- if(sourceType.equals(TypeFacility.RUNTIME_TYPES.STRING)) {
- ILiteral literalOne = this.langFactory.createLiteral(new Integer(1), TypeFacility.RUNTIME_TYPES.INTEGER);
- return this.langFactory.createFunction("char", Arrays.asList(expression, literalOne), TypeFacility.RUNTIME_TYPES.CHAR); //$NON-NLS-1$
- }
-
- return null;
- }
-
- private IExpression convertToSmallInt(IExpression expression,
- Class sourceType, Class targetType) {
-
- if(sourceType.equals(TypeFacility.RUNTIME_TYPES.STRING) && targetType.equals(TypeFacility.RUNTIME_TYPES.BOOLEAN)) {
- // BEFORE: convert(stringExpression, boolean)
- // AFTER: CASE WHEN stringExpression = 'true' THEN 1 ELSE 0 END
- ILiteral literalTrue = this.langFactory.createLiteral("true", TypeFacility.RUNTIME_TYPES.STRING); //$NON-NLS-1$
- ICompareCriteria when = this.langFactory.createCompareCriteria(Operator.EQ, expression, literalTrue);
- List whens = new ArrayList(1);
- whens.add(when);
-
- ILiteral literalOne = this.langFactory.createLiteral(new Integer(1), TypeFacility.RUNTIME_TYPES.INTEGER);
- List thens = new ArrayList(1);
- thens.add(literalOne);
-
- ILiteral literalZero = this.langFactory.createLiteral(new Integer(0), TypeFacility.RUNTIME_TYPES.INTEGER);
-
- return this.langFactory.createSearchedCaseExpression(whens, thens, literalZero, TypeFacility.RUNTIME_TYPES.STRING);
-
- } else if(sourceType.equals(TypeFacility.RUNTIME_TYPES.BOOLEAN) ||
- sourceType.equals(TypeFacility.RUNTIME_TYPES.BYTE) ||
- sourceType.equals(TypeFacility.RUNTIME_TYPES.SHORT)){
-
- // Just drop these
- return null;
- }
-
- // BEFORE: convert(expression, [boolean,byte,short])
- // AFTER: smallint(expression)
- return wrapNewFunction(expression, "smallint", targetType); //$NON-NLS-1$
- }
-
- private IExpression convertToInteger(IExpression expression, Class sourceType) {
-
- if(sourceType.equals(TypeFacility.RUNTIME_TYPES.BOOLEAN) ||
- sourceType.equals(TypeFacility.RUNTIME_TYPES.BYTE) ||
- sourceType.equals(TypeFacility.RUNTIME_TYPES.SHORT)){
-
- // Just drop these
- return null;
- }
-
- // BEFORE: convert(expression, integer)
- // AFTER: integer(expression)
- return wrapNewFunction(expression, "integer", TypeFacility.RUNTIME_TYPES.INTEGER); //$NON-NLS-1$
- }
-
- private IExpression convertToBigInt(IExpression expression, Class sourceType) {
-
- if(sourceType.equals(TypeFacility.RUNTIME_TYPES.STRING) ||
- sourceType.equals(TypeFacility.RUNTIME_TYPES.FLOAT) ||
- sourceType.equals(TypeFacility.RUNTIME_TYPES.DOUBLE) ||
- sourceType.equals(TypeFacility.RUNTIME_TYPES.BIG_DECIMAL)){
-
- // BEFORE: convert(expression, [long, biginteger])
- // AFTER: bigint(expression)
- return wrapNewFunction(expression, "bigint", TypeFacility.RUNTIME_TYPES.LONG); //$NON-NLS-1$
-
- }
-
- // Just drop anything else
- return null;
- }
-
- protected IExpression convertToReal(IExpression expression, Class sourceType) {
-
- if(sourceType.equals(TypeFacility.RUNTIME_TYPES.STRING) ||
- sourceType.equals(TypeFacility.RUNTIME_TYPES.DOUBLE) ||
- sourceType.equals(TypeFacility.RUNTIME_TYPES.BIG_DECIMAL)){
-
- // BEFORE: convert(expression, [double, bigdecimal])
- // AFTER: real(expression)
- return wrapNewFunction(expression, "real", TypeFacility.RUNTIME_TYPES.FLOAT); //$NON-NLS-1$
-
- }
-
- // Just drop anything else
- return null;
- }
-
- protected IExpression convertToDouble(IExpression expression, Class sourceType) {
-
- if(sourceType.equals(TypeFacility.RUNTIME_TYPES.STRING)){
-
- // BEFORE: convert(expression, double)
- // AFTER: double(expression)
- return wrapNewFunction(expression, "double", TypeFacility.RUNTIME_TYPES.DOUBLE); //$NON-NLS-1$
-
- }
-
- // Just drop anything else
- return null;
- }
-
- protected IExpression convertToBigDecimal(IExpression expression, Class sourceType) {
-
- if(sourceType.equals(TypeFacility.RUNTIME_TYPES.STRING)){
-
- // BEFORE: convert(expression, bigdecimal)
- // AFTER: decimal(expression)
- return wrapNewFunction(expression, "decimal", TypeFacility.RUNTIME_TYPES.BIG_DECIMAL); //$NON-NLS-1$
-
- }
-
- // Just drop anything else
- return null;
- }
-
- /**
- * @param expression
- * @param sourceType
- * @return
- * @since 4.2
- */
- private IExpression convertToDate(IExpression expression,
- Class sourceType) {
-
- // BEFORE: convert(EXPR, date)
- // AFTER: date(EXPR)
- return wrapNewFunction(expression, "date", TypeFacility.RUNTIME_TYPES.DATE); //$NON-NLS-1$
- }
-
- private IExpression convertToTime(IExpression expression, Class sourceType) {
-
- // BEFORE: convert(EXPR, time)
- // AFTER: time(EXPR)
- return wrapNewFunction(expression, "time", TypeFacility.RUNTIME_TYPES.DATE); //$NON-NLS-1$
- }
-
- private IExpression convertToTimestamp(IExpression expression,
- Class sourceType) {
-
- if(sourceType.equals(TypeFacility.RUNTIME_TYPES.STRING)) {
- // BEFORE: convert(EXPR, timestamp)
- // AFTER: timestamp(expr)
- return wrapNewFunction(expression, "timestamp", TypeFacility.RUNTIME_TYPES.TIMESTAMP); //$NON-NLS-1$
-
- } else if(sourceType.equals(TypeFacility.RUNTIME_TYPES.DATE)) {
- // BEFORE: convert(EXPR, timestamp)
- // AFTER: timestamp(EXPR, '00:00:00')
- ILiteral timeString = this.langFactory.createLiteral("00:00:00", TypeFacility.RUNTIME_TYPES.STRING); //$NON-NLS-1$
- return this.langFactory.createFunction("timestamp", Arrays.asList(expression, timeString), TypeFacility.RUNTIME_TYPES.TIMESTAMP); //$NON-NLS-1$
-
- } else if(sourceType.equals(TypeFacility.RUNTIME_TYPES.TIME)) {
- // BEFORE: convert(EXPR, timestamp)
- // AFTER: timestamp('1970-01-01', EXPR)
- ILiteral dateString = this.langFactory.createLiteral("1970-01-01", TypeFacility.RUNTIME_TYPES.STRING); //$NON-NLS-1$
- return this.langFactory.createFunction("timestamp", Arrays.asList(dateString, expression), TypeFacility.RUNTIME_TYPES.TIMESTAMP); //$NON-NLS-1$
- }
-
- return null;
- }
-
- /**
- * @param expression
- * @param functionName
- * @param outputType
- * @return
- * @since 4.2
- */
- private IFunction wrapNewFunction(IExpression expression,
- String functionName,
- Class outputType) {
- return langFactory.createFunction(functionName,
- Arrays.asList(expression),
- outputType);
- }
-
-}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2SQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2SQLTranslator.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2SQLTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -22,7 +22,6 @@
package org.teiid.connector.jdbc.db2;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -32,41 +31,89 @@
import org.teiid.connector.api.ExecutionContext;
import org.teiid.connector.api.SourceSystemFunctions;
import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.api.TypeFacility.RUNTIME_TYPES;
import org.teiid.connector.jdbc.translator.AliasModifier;
+import org.teiid.connector.jdbc.translator.ConvertModifier;
+import org.teiid.connector.jdbc.translator.FunctionModifier;
import org.teiid.connector.jdbc.translator.LocateFunctionModifier;
import org.teiid.connector.jdbc.translator.ModFunctionModifier;
import org.teiid.connector.jdbc.translator.Translator;
-import org.teiid.connector.language.ICommand;
import org.teiid.connector.language.IExpression;
+import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.IJoin;
+import org.teiid.connector.language.ILanguageObject;
import org.teiid.connector.language.ILimit;
import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.language.IQuery;
-import org.teiid.connector.language.ISelect;
import org.teiid.connector.language.ISelectSymbol;
import org.teiid.connector.language.ICompareCriteria.Operator;
import org.teiid.connector.language.IJoin.JoinType;
-import org.teiid.connector.visitor.framework.HierarchyVisitor;
-
public class DB2SQLTranslator extends Translator {
+ private final class NullHandlingFormatModifier extends
+ ConvertModifier.FormatModifier {
+ private NullHandlingFormatModifier(String alias) {
+ super(alias);
+ }
+
+ @Override
+ public List<?> translate(IFunction function) {
+ IExpression arg = function.getParameters().get(0);
+ if (arg instanceof ILiteral && ((ILiteral)arg).getValue() == null) {
+ ((ILiteral)function.getParameters().get(1)).setValue(this.alias);
+ return null;
+ }
+ return super.translate(function);
+ }
+ }
+
@Override
public void initialize(ConnectorEnvironment env) throws ConnectorException {
super.initialize(env);
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new DB2ConvertModifier(getLanguageFactory()));
registerFunctionModifier(SourceSystemFunctions.CHAR, new AliasModifier("chr")); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new AliasModifier("day")); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.IFNULL, new AliasModifier("coalesce")); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.LOCATE, new LocateFunctionModifier(getLanguageFactory()));
registerFunctionModifier(SourceSystemFunctions.SUBSTRING, new AliasModifier("substr")); //$NON-NLS-1$
- List<Class<?>> supportedModTypes = new ArrayList<Class<?>>(3);
- supportedModTypes.add(RUNTIME_TYPES.SHORT);
- supportedModTypes.add(RUNTIME_TYPES.INTEGER);
- supportedModTypes.add(RUNTIME_TYPES.LONG);
- registerFunctionModifier(SourceSystemFunctions.MOD, new ModFunctionModifier(getLanguageFactory(), "MOD", supportedModTypes)); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.MOD, new ModFunctionModifier("MOD", getLanguageFactory())); //$NON-NLS-1$
+
+ //add in type conversion
+ ConvertModifier convertModifier = new ConvertModifier();
+ convertModifier.addTypeMapping("real", FunctionModifier.FLOAT); //$NON-NLS-1$
+ convertModifier.addTypeMapping("numeric(31,0)", FunctionModifier.BIGINTEGER); //$NON-NLS-1$
+ convertModifier.addTypeMapping("numeric(31,12)", FunctionModifier.BIGDECIMAL); //$NON-NLS-1$
+ convertModifier.addTypeMapping("char(1)", FunctionModifier.CHAR); //$NON-NLS-1$
+ convertModifier.addTypeMapping("blob", FunctionModifier.BLOB, FunctionModifier.OBJECT); //$NON-NLS-1$
+ convertModifier.addTypeMapping("clob", FunctionModifier.CLOB, FunctionModifier.XML); //$NON-NLS-1$
+ convertModifier.addConvert(FunctionModifier.TIME, FunctionModifier.TIMESTAMP, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ return Arrays.asList("timestamp('1970-01-01', ", function.getParameters().get(0), ")"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ });
+ convertModifier.addConvert(FunctionModifier.DATE, FunctionModifier.TIMESTAMP, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ return Arrays.asList("timestamp(",function.getParameters().get(0), ", '00:00:00')"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ });
+ //the next convert is not strictly necessary for db2, but it also works for derby
+ convertModifier.addConvert(FunctionModifier.STRING, FunctionModifier.FLOAT, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ return Arrays.asList("cast(double(", function.getParameters().get(0), ") as real)"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ });
+ convertModifier.addTypeConversion(new NullHandlingFormatModifier("char"), FunctionModifier.STRING); //$NON-NLS-1$
+ convertModifier.addTypeConversion(new NullHandlingFormatModifier("smallint"), FunctionModifier.BYTE, FunctionModifier.SHORT); //$NON-NLS-1$
+ convertModifier.addTypeConversion(new NullHandlingFormatModifier("integer"), FunctionModifier.INTEGER); //$NON-NLS-1$
+ convertModifier.addTypeConversion(new NullHandlingFormatModifier("bigint"), FunctionModifier.LONG); //$NON-NLS-1$
+ convertModifier.addTypeConversion(new NullHandlingFormatModifier("double"), FunctionModifier.DOUBLE); //$NON-NLS-1$
+ convertModifier.addTypeConversion(new NullHandlingFormatModifier("date"), FunctionModifier.DATE); //$NON-NLS-1$
+ convertModifier.addTypeConversion(new NullHandlingFormatModifier("time"), FunctionModifier.TIME); //$NON-NLS-1$
+ convertModifier.addTypeConversion(new NullHandlingFormatModifier("timestamp"), FunctionModifier.TIMESTAMP); //$NON-NLS-1$
+ convertModifier.addNumericBooleanConversions();
+ registerFunctionModifier(SourceSystemFunctions.CONVERT, convertModifier);
}
@SuppressWarnings("unchecked")
@@ -76,33 +123,27 @@
}
@Override
- public ICommand modifyCommand(ICommand command, ExecutionContext context) {
- if (command instanceof IQuery) {
- HierarchyVisitor hierarchyVisitor = new HierarchyVisitor(false) {
- @Override
- public void visit(IJoin obj) {
- if (obj.getJoinType() != JoinType.CROSS_JOIN) {
- return;
- }
- ILiteral one = getLanguageFactory().createLiteral(1, TypeFacility.RUNTIME_TYPES.INTEGER);
- obj.getCriteria().add(getLanguageFactory().createCompareCriteria(Operator.EQ, one, one));
- obj.setJoinType(JoinType.INNER_JOIN);
+ public List<?> translate(ILanguageObject obj, ExecutionContext context) {
+ //DB2 doesn't support cross join
+ if (obj instanceof IJoin) {
+ IJoin join = (IJoin)obj;
+ if (join.getJoinType() == JoinType.CROSS_JOIN) {
+ ILiteral one = getLanguageFactory().createLiteral(1, TypeFacility.RUNTIME_TYPES.INTEGER);
+ join.getCriteria().add(getLanguageFactory().createCompareCriteria(Operator.EQ, one, one));
+ join.setJoinType(JoinType.INNER_JOIN);
+ }
+ }
+ //DB2 needs projected nulls wrapped in casts
+ if (obj instanceof ISelectSymbol) {
+ ISelectSymbol selectSymbol = (ISelectSymbol)obj;
+ if (selectSymbol.getExpression() instanceof ILiteral) {
+ ILiteral literal = (ILiteral)selectSymbol.getExpression();
+ if (literal.getValue() == null) {
+ selectSymbol.setExpression(ConvertModifier.createConvertFunction(getLanguageFactory(), literal, TypeFacility.getDataTypeName(literal.getType())));
}
- };
-
- command.acceptVisitor(hierarchyVisitor);
-
- ISelect select = ((IQuery)command).getSelect();
- for (ISelectSymbol selectSymbol : select.getSelectSymbols()) {
- if (selectSymbol.getExpression() instanceof ILiteral) {
- ILiteral literal = (ILiteral)selectSymbol.getExpression();
- if (literal.getValue() == null) {
- selectSymbol.setExpression(createCastToExprType(literal));
- }
- }
}
}
- return command;
+ return super.translate(obj, context);
}
@Override
@@ -115,67 +156,6 @@
return DB2Capabilities.class;
}
- /**
- * Create and return an expression to cast <code>expr</code> to <code>expr</code>'s
- * type.
- * <p>
- * If a compatible type is not found, <code>expr</code> is returned unmodified.
- * <p>
- * <em>WARNING</em>: This method currently returns the smallest type associated with
- * the run-time type. So, all <code>String</code> expressions, regardless of
- * their value's length are returned as CHAR.
- * <p>
- * For example, if <code>expr</code> is "e1" of type <code>String</code> the
- * returned expression would be "CAST(expr AS CHAR)".
- *
- * @param expr
- * @return
- */
- private IExpression createCastToExprType(IExpression expr) {
- String typeName = null;
- if ( RUNTIME_TYPES.STRING.equals(expr.getType()) ) {
- typeName = "CHAR"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.BOOLEAN.equals(expr.getType()) ) {
- typeName = "SMALLINT"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.BYTE.equals(expr.getType()) ) {
- typeName = "SMALLINT"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.SHORT.equals(expr.getType()) ) {
- typeName = "SMALLINT"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.CHAR.equals(expr.getType()) ) {
- typeName = "CHAR"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.INTEGER.equals(expr.getType()) ) {
- typeName = "INTEGER"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.LONG.equals(expr.getType()) ) {
- typeName = "BIGINT"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.BIG_INTEGER.equals(expr.getType()) ) {
- typeName = "BIGINT"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.FLOAT.equals(expr.getType()) ) {
- typeName = "REAL"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.DOUBLE.equals(expr.getType()) ) {
- typeName = "DOUBLE"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.BIG_DECIMAL.equals(expr.getType()) ) {
- typeName = "DECIMAL"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.DATE.equals(expr.getType()) ) {
- typeName = "DATE"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.TIME.equals(expr.getType()) ) {
- typeName = "TIME"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.TIMESTAMP.equals(expr.getType()) ) {
- typeName = "TIMESTAMP"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.OBJECT.equals(expr.getType()) ) {
- typeName = "BLOB"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.BLOB.equals(expr.getType()) ) {
- typeName = "BLOB"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.CLOB.equals(expr.getType()) ) {
- typeName = "CLOB"; //$NON-NLS-1$
- } else if ( RUNTIME_TYPES.XML.equals(expr.getType()) ) {
- typeName = "CLOB"; //$NON-NLS-1$
- }
- if ( typeName != null ) {
- return getLanguageFactory().createFunction("CAST", Arrays.asList(expr, getLanguageFactory().createLiteral(typeName, String.class)), expr.getType()); //$NON-NLS-1$
- }
- return expr;
- }
-
@Override
public NullOrder getDefaultNullOrder() {
return NullOrder.HIGH;
Deleted: 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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbyConvertModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,110 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.derby;
-
-import java.util.Arrays;
-
-import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.jdbc.db2.DB2ConvertModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-
-
-/**
- */
-public class DerbyConvertModifier extends DB2ConvertModifier {
-
- private ILanguageFactory langFactory;
-
- public DerbyConvertModifier(ILanguageFactory langFactory) {
- super(langFactory);
- this.langFactory = langFactory;
- }
-
- @Override
- protected IExpression convertToReal(IExpression expression, Class sourceType) {
-
- if(sourceType.equals(TypeFacility.RUNTIME_TYPES.STRING)){
-
- // BEFORE: convert(string_expr, float)
- // AFTER: cast(cast(string_expr as decimal) as float)
- 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("cast", //$NON-NLS-1$
- Arrays.asList( inner, langFactory.createLiteral("float", TypeFacility.RUNTIME_TYPES.STRING) ), //$NON-NLS-1$
- TypeFacility.RUNTIME_TYPES.FLOAT);
-
- return outer;
-
- } else if(sourceType.equals(TypeFacility.RUNTIME_TYPES.DOUBLE) ||
- sourceType.equals(TypeFacility.RUNTIME_TYPES.BIG_DECIMAL)) {
-
- // BEFORE: convert(num_expr, float)
- // AFTER: cast(num_expr as float)
- return langFactory.createFunction("cast", //$NON-NLS-1$
- Arrays.asList( expression, langFactory.createLiteral("float", TypeFacility.RUNTIME_TYPES.STRING) ), //$NON-NLS-1$
- TypeFacility.RUNTIME_TYPES.FLOAT);
- }
-
- // Just drop anything else
- return null;
- }
-
- @Override
- protected IExpression convertToDouble(IExpression expression, Class sourceType) {
-
- 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("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("cast", //$NON-NLS-1$
- Arrays.asList( inner, langFactory.createLiteral("double", TypeFacility.RUNTIME_TYPES.STRING) ), //$NON-NLS-1$
- TypeFacility.RUNTIME_TYPES.DOUBLE);
- }
-
- // Just drop anything else
- return null;
- }
-
- @Override
- protected IExpression convertToBigDecimal(IExpression expression, Class sourceType) {
-
- if(sourceType.equals(TypeFacility.RUNTIME_TYPES.STRING)){
- // BEFORE: convert(string_expr, bigdecimal)
- // AFTER: cast(string_expr as decimal)
- 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);
- }
-
- // Just drop anything else
- return null;
- }
-
-}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbySQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbySQLTranslator.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbySQLTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -49,7 +49,6 @@
//overrides of db2 functions
registerFunctionModifier(SourceSystemFunctions.CONCAT, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new DerbyConvertModifier(getLanguageFactory()));
}
@Override
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/informix/InformixSQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/informix/InformixSQLTranslator.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/informix/InformixSQLTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -28,7 +28,7 @@
import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.SourceSystemFunctions;
-import org.teiid.connector.jdbc.translator.DropFunctionModifier;
+import org.teiid.connector.jdbc.translator.ConvertModifier;
import org.teiid.connector.jdbc.translator.Translator;
@@ -39,7 +39,7 @@
@Override
public void initialize(ConnectorEnvironment env) throws ConnectorException {
super.initialize(env);
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new DropFunctionModifier());
+ registerFunctionModifier(SourceSystemFunctions.CONVERT, new ConvertModifier());
}
@Override
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/BitFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/BitFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/BitFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -22,10 +22,12 @@
package org.teiid.connector.jdbc.mysql;
-import org.teiid.connector.api.SourceSystemFunctions;
+import java.util.Arrays;
+import java.util.List;
+
import org.teiid.connector.api.TypeFacility;
import org.teiid.connector.jdbc.translator.AliasModifier;
-import org.teiid.connector.language.IExpression;
+import org.teiid.connector.jdbc.translator.ConvertModifier;
import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.ILanguageFactory;
@@ -41,9 +43,9 @@
* Wrap the renamed function in a convert back to integer
*/
@Override
- public IExpression modify(IFunction function) {
- return langFactory.createFunction(SourceSystemFunctions.CONVERT,
- new IExpression[] {super.modify(function), langFactory.createLiteral(MySQLConvertModifier.SIGNED_INTEGER, TypeFacility.RUNTIME_TYPES.STRING)}, TypeFacility.RUNTIME_TYPES.INTEGER);
- }
+ public List<?> translate(IFunction function) {
+ modify(function);
+ return Arrays.asList(ConvertModifier.createConvertFunction(langFactory, function, TypeFacility.RUNTIME_NAMES.INTEGER));
+ }
}
Deleted: 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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLConvertModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,182 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.mysql;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.teiid.connector.jdbc.translator.BasicFunctionModifier;
-import org.teiid.connector.jdbc.translator.DropFunctionModifier;
-import org.teiid.connector.language.ICompareCriteria;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.language.ICompareCriteria.Operator;
-
-
-
-/**
- * @since 4.3
- */
-class MySQLConvertModifier extends BasicFunctionModifier {
-
- public static final String SIGNED_INTEGER = "SIGNED INTEGER"; //$NON-NLS-1$
-
- private static DropFunctionModifier DROP_MODIFIER = new DropFunctionModifier();
-
- private ILanguageFactory langFactory;
-
- MySQLConvertModifier(ILanguageFactory langFactory) {
- this.langFactory = langFactory;
- }
-
- public IExpression modify(IFunction function) {
- List<IExpression> args = function.getParameters();
-
- if (args.get(0) != null && args.get(0) instanceof ILiteral && ((ILiteral)args.get(0)).getValue() == null ) {
- if (args.get(1) != null && args.get(1) instanceof ILiteral) {
- // This is a convert(null, ...) or cast(null as ...)
- return DROP_MODIFIER.modify(function);
- }
- }
-
- if (args.get(1) != null && args.get(1) instanceof ILiteral) {
- String target = ((String)((ILiteral)args.get(1)).getValue()).toLowerCase();
- if (target.equals("string")) { //$NON-NLS-1$
- return convertToString(function);
- } else if (target.equals("byte") || //$NON-NLS-1$
- target.equals("short") || //$NON-NLS-1$
- target.equals("integer")) { //$NON-NLS-1$
- return convertToNativeType(function, SIGNED_INTEGER);
- } else if (target.equals("long") || //$NON-NLS-1$
- target.equals("biginteger")) { //$NON-NLS-1$
- return convertToNativeType(function, "SIGNED"); //$NON-NLS-1$
- } else if (target.equals("float") || //$NON-NLS-1$
- target.equals("double") || //$NON-NLS-1$
- target.equals("bigdecimal")) { //$NON-NLS-1$
- return convertToNumeric(function);
- } else if (target.equals("date")) { //$NON-NLS-1$
- return convertToDateTime("DATE", args.get(0), java.sql.Date.class); //$NON-NLS-1$
- } else if (target.equals("time")) { //$NON-NLS-1$
- return convertToDateTime("TIME", args.get(0), java.sql.Time.class); //$NON-NLS-1$
- } else if (target.equals("timestamp")) { //$NON-NLS-1$
- return convertToDateTime("TIMESTAMP", args.get(0), java.sql.Timestamp.class); //$NON-NLS-1$
- } else if (target.equals("char")) { //$NON-NLS-1$
- return convertToNativeType(function, "CHAR (1)"); //$NON-NLS-1$
- } else if (target.equals("boolean")) { //$NON-NLS-1$
- return convertToBoolean(function);
- }
- }
- return DROP_MODIFIER.modify(function);
- }
-
- private IExpression convertToString(IFunction function) {
- int srcCode = getSrcCode(function);
- switch(srcCode) {
- case BOOLEAN:
- // convert(booleanSrc, string) --> CASE WHEN booleanSrc THEN '1' ELSE '0' END
- List<ICompareCriteria> when = Arrays.asList(langFactory.createCompareCriteria(Operator.EQ, function.getParameters().get(0), langFactory.createLiteral(Boolean.TRUE, Boolean.class)));
- List<ILiteral> then = Arrays.asList(langFactory.createLiteral("1", String.class)); //$NON-NLS-1$
- IExpression elseExpr = langFactory.createLiteral("0", String.class); //$NON-NLS-1$
- return langFactory.createSearchedCaseExpression(when, then, elseExpr, String.class);
- case BYTE:
- case SHORT:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- // convert(src, string) --> convert(src, CHAR)
- return convertToNativeType(function, "CHAR"); //$NON-NLS-1$
- case DATE:
- // convert (dateSrc, string) --> date_format(dateSrc, '%Y-%m-%d')
- return convertDateTimeToString(function, "%Y-%m-%d"); //$NON-NLS-1$
- case TIME:
- // convert (timeSrc, string) --> date_format(timeSrc, '%H:%i:%S')
- return convertDateTimeToString(function, "%H:%i:%S"); //$NON-NLS-1$
- case TIMESTAMP:
- // convert (tsSrc, string) --> date_format(tsSrc, '%Y-%m-%d %H:%i:%S.%f')
- return convertDateTimeToString(function, "%Y-%m-%d %H:%i:%S.%f"); //$NON-NLS-1$
- default:
- return DROP_MODIFIER.modify(function);
- }
- }
-
- private IExpression convertToNativeType(IFunction function, String targetType) {
- List<IExpression> args = function.getParameters();
- function.setName("convert"); //$NON-NLS-1$
- args.set(1, langFactory.createLiteral(targetType, String.class));
- return function;
- }
-
- /**
- * In version 5.1 and after, we can simple use convert(x, DECIMAL), but for backward compatibility we must do (x + 0.0)
- * @param function
- * @return
- * @since 4.3
- */
- private IExpression convertToNumeric(IFunction function) {
- // convert(x, float/double/bigdecimal) --> (x + 0.0)
- return langFactory.createFunction("+", //$NON-NLS-1$
- Arrays.asList(function.getParameters().get(0),
- langFactory.createLiteral(new Double(0.0), Double.class)),
- Double.class);
- }
-
- private IExpression convertToDateTime(String functionName, IExpression value, Class targetType) {
- return langFactory.createFunction(functionName,
- Arrays.asList(value),
- targetType);
- }
-
- private IExpression convertToBoolean(IFunction function) {
- int srcCode = getSrcCode(function);
- switch(srcCode) {
- case STRING:
- // convert(src, boolean) --> CASE src WHEN 'true' THEN 1 ELSE 0 END
- // convert(booleanSrc, string) --> CASE WHEN booleanSrc THEN '1' ELSE '0' END
- List<ICompareCriteria> when = Arrays.asList(langFactory.createCompareCriteria(Operator.EQ, function.getParameters().get(0), langFactory.createLiteral("true", String.class)));
- List<ILiteral> then = Arrays.asList(langFactory.createLiteral(Integer.valueOf(1), Integer.class)); //$NON-NLS-1$
- IExpression elseExpr = langFactory.createLiteral(Integer.valueOf(0), Integer.class); //$NON-NLS-1$
- return langFactory.createSearchedCaseExpression(when, then, elseExpr, String.class);
- default:
- return DROP_MODIFIER.modify(function);
- }
- }
-
- private IFunction convertDateTimeToString(IFunction function, String format) {
- // convert (date, string) --> date_format(date, format)
- List<IExpression> args = function.getParameters();
- function.setName("date_format"); //$NON-NLS-1$
- args.set(1, langFactory.createLiteral(format, String.class));
- return function;
- }
-
- private int getSrcCode(IFunction function) {
- List<IExpression> args = function.getParameters();
- Class srcType = args.get(0).getType();
- return ((Integer) typeMap.get(srcType)).intValue();
- }
-}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLTranslator.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mysql/MySQLTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -28,30 +28,57 @@
import java.sql.Statement;
import java.sql.Time;
import java.sql.Timestamp;
+import java.util.Arrays;
+import java.util.List;
import org.teiid.connector.api.ConnectorCapabilities;
import org.teiid.connector.api.ConnectorEnvironment;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.jdbc.translator.ConvertModifier;
+import org.teiid.connector.jdbc.translator.FunctionModifier;
import org.teiid.connector.jdbc.translator.LocateFunctionModifier;
import org.teiid.connector.jdbc.translator.Translator;
+import org.teiid.connector.language.IFunction;
-
-
/**
* @since 4.3
*/
public class MySQLTranslator extends Translator {
-
+
@Override
public void initialize(ConnectorEnvironment env) throws ConnectorException {
super.initialize(env);
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new MySQLConvertModifier(getLanguageFactory()));
registerFunctionModifier(SourceSystemFunctions.BITAND, new BitFunctionModifier("&", getLanguageFactory())); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.BITNOT, new BitFunctionModifier("~", getLanguageFactory())); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.BITOR, new BitFunctionModifier("|", getLanguageFactory())); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.BITXOR, new BitFunctionModifier("^", getLanguageFactory())); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.LOCATE, new LocateFunctionModifier(getLanguageFactory()));
+
+ //add in type conversion
+ ConvertModifier convertModifier = new ConvertModifier();
+ convertModifier.addTypeMapping("signed", FunctionModifier.BYTE, FunctionModifier.SHORT, FunctionModifier.INTEGER, FunctionModifier.LONG); //$NON-NLS-1$
+ //char(n) assume 4.1 or later
+ convertModifier.addTypeMapping("char(1)", FunctionModifier.CHAR); //$NON-NLS-1$
+ convertModifier.addTypeMapping("char", FunctionModifier.STRING); //$NON-NLS-1$
+ convertModifier.addTypeMapping("date", FunctionModifier.DATE); //$NON-NLS-1$
+ convertModifier.addTypeMapping("time", FunctionModifier.TIME); //$NON-NLS-1$
+ convertModifier.addTypeMapping("timestamp", FunctionModifier.TIMESTAMP); //$NON-NLS-1$
+ convertModifier.addConvert(FunctionModifier.STRING, FunctionModifier.DATE, new ConvertModifier.FormatModifier("DATE")); //$NON-NLS-1$
+ convertModifier.addConvert(FunctionModifier.STRING, FunctionModifier.TIME, new ConvertModifier.FormatModifier("TIME")); //$NON-NLS-1$
+ convertModifier.addConvert(FunctionModifier.STRING, FunctionModifier.TIMESTAMP, new ConvertModifier.FormatModifier("TIMESTAMP")); //$NON-NLS-1$
+ convertModifier.addConvert(FunctionModifier.DATE, FunctionModifier.STRING, new ConvertModifier.FormatModifier("date_format", "%Y-%m-%d")); //$NON-NLS-1$ //$NON-NLS-2$
+ convertModifier.addConvert(FunctionModifier.TIME, FunctionModifier.STRING, new ConvertModifier.FormatModifier("date_format", "%H:%i:%S")); //$NON-NLS-1$ //$NON-NLS-2$
+ convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.STRING, new ConvertModifier.FormatModifier("date_format", "%Y-%m-%d %H:%i:%S.%f")); //$NON-NLS-1$ //$NON-NLS-2$
+ convertModifier.addTypeConversion(new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ return Arrays.asList(function.getParameters().get(0), " + 0.0"); //$NON-NLS-1$
+ }
+ }, FunctionModifier.BIGDECIMAL, FunctionModifier.BIGINTEGER, FunctionModifier.FLOAT, FunctionModifier.DOUBLE);
+ convertModifier.addNumericBooleanConversions();
+ convertModifier.setWideningNumericImplicit(true);
+ registerFunctionModifier(SourceSystemFunctions.CONVERT, convertModifier);
}
@Override
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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/ConcatFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -22,13 +22,13 @@
package org.teiid.connector.jdbc.oracle;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import org.teiid.connector.api.SourceSystemFunctions;
import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.jdbc.translator.BasicFunctionModifier;
+import org.teiid.connector.jdbc.translator.FunctionModifier;
import org.teiid.connector.language.ICriteria;
import org.teiid.connector.language.IExpression;
import org.teiid.connector.language.IFunction;
@@ -44,7 +44,7 @@
* CONCAT(a, b) ==> CASE WHEN (a is NULL OR b is NULL) THEN NULL ELSE CONCAT(a, b)
* </code>
*/
-public class ConcatFunctionModifier extends BasicFunctionModifier {
+public class ConcatFunctionModifier extends FunctionModifier {
private ILanguageFactory langFactory;
/**
@@ -52,25 +52,23 @@
*/
public ConcatFunctionModifier(ILanguageFactory langFactory) {
this.langFactory = langFactory;
- }
-
- /**
- * @see org.teiid.connector.jdbc.translator.BasicFunctionModifier#modify(org.teiid.connector.language.IFunction)
- */
- public IExpression modify(IFunction function) {
- List when = new ArrayList();
+ }
+
+ @Override
+ public List<?> translate(IFunction function) {
+ List when = new ArrayList();
IExpression a = function.getParameters().get(0);
IExpression b = function.getParameters().get(1);
List crits = new ArrayList();
ILiteral nullValue = langFactory.createLiteral(null, TypeFacility.RUNTIME_TYPES.STRING);
if (isNull(a)) {
- return nullValue;
+ return Arrays.asList(nullValue);
} else if (!isNotNull(a)) {
crits.add(langFactory.createIsNullCriteria(a, false));
}
if (isNull(b)) {
- return nullValue;
+ return Arrays.asList(nullValue);
} else if (!isNotNull(b)) {
crits.add(langFactory.createIsNullCriteria(b, false));
}
@@ -78,7 +76,7 @@
ICriteria crit = null;
if (crits.isEmpty()) {
- return function;
+ return null;
} else if (crits.size() == 1) {
crit = (ICriteria)crits.get(0);
} else {
@@ -86,7 +84,7 @@
}
when.add(crit);
List then = Arrays.asList(new IExpression[] {nullValue});
- return langFactory.createSearchedCaseExpression(when, then, function, TypeFacility.RUNTIME_TYPES.STRING);
+ return Arrays.asList(langFactory.createSearchedCaseExpression(when, then, function, TypeFacility.RUNTIME_TYPES.STRING));
}
private boolean isNotNull(IExpression expr) {
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/DayWeekQuarterFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/DayWeekQuarterFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/DayWeekQuarterFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -25,9 +25,8 @@
import java.util.Arrays;
import java.util.List;
-import org.teiid.connector.jdbc.translator.BasicFunctionModifier;
import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.*;
+import org.teiid.connector.language.IFunction;
/**
@@ -38,32 +37,16 @@
* 4) week
* 5) quarter
*/
-public class DayWeekQuarterFunctionModifier extends BasicFunctionModifier implements FunctionModifier {
- private ILanguageFactory langFactory;
+public class DayWeekQuarterFunctionModifier extends FunctionModifier {
private String format;
- public DayWeekQuarterFunctionModifier(ILanguageFactory langFactory, String format) {
- this.langFactory = langFactory;
+ public DayWeekQuarterFunctionModifier(String format) {
this.format = format;
}
- /*
- * @see com.metamatrix.connector.jdbc.extension.FunctionModifier#modify(com.metamatrix.data.language.IFunction)
- */
- public IExpression modify(IFunction function) {
- List<IExpression> args = function.getParameters();
-
- IFunction inner = langFactory.createFunction("TO_CHAR", //$NON-NLS-1$
- Arrays.asList(
- args.get(0),
- langFactory.createLiteral(format, String.class)),
- String.class);
-
- IFunction outer = langFactory.createFunction("TO_NUMBER", //$NON-NLS-1$
- Arrays.asList(inner),
- Integer.class);
-
- return outer;
+ @Override
+ public List<?> translate(IFunction function) {
+ return Arrays.asList("to_number(TO_CHAR(",function.getParameters().get(0), ", '", format,"'))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/LeftOrRightFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/LeftOrRightFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/LeftOrRightFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -26,26 +26,25 @@
import java.util.List;
import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.jdbc.translator.BasicFunctionModifier;
import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.*;
+import org.teiid.connector.language.IExpression;
+import org.teiid.connector.language.IFunction;
+import org.teiid.connector.language.ILanguageFactory;
/**
* Convert left(string, count) --> substr(string, 1, count)
* or right(string, count) --> substr(string, -1 * count) - we lack a way to express a unary negation
*/
-public class LeftOrRightFunctionModifier extends BasicFunctionModifier implements FunctionModifier {
+public class LeftOrRightFunctionModifier extends FunctionModifier {
private ILanguageFactory langFactory;
public LeftOrRightFunctionModifier(ILanguageFactory langFactory) {
this.langFactory = langFactory;
}
- /*
- * @see com.metamatrix.connector.jdbc.extension.FunctionModifier#modify(com.metamatrix.data.language.IFunction)
- */
- public IExpression modify(IFunction function) {
+ @Override
+ public List<?> translate(IFunction function) {
List<IExpression> args = function.getParameters();
IFunction func = null;
@@ -68,6 +67,6 @@
String.class);
}
- return func;
+ return Arrays.asList(func);
}
}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/Log10FunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/Log10FunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/Log10FunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -24,12 +24,14 @@
import java.util.List;
-import org.teiid.connector.jdbc.translator.BasicFunctionModifier;
+import org.teiid.connector.api.TypeFacility;
import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.*;
+import org.teiid.connector.language.IExpression;
+import org.teiid.connector.language.IFunction;
+import org.teiid.connector.language.ILanguageFactory;
-public class Log10FunctionModifier extends BasicFunctionModifier implements FunctionModifier {
+public class Log10FunctionModifier extends FunctionModifier {
private ILanguageFactory languageFactory;
@@ -37,13 +39,14 @@
this.languageFactory = languageFactory;
}
- public IExpression modify(IFunction function) {
+ @Override
+ public List<?> translate(IFunction function) {
function.setName("log"); //$NON-NLS-1$
List<IExpression> args = function.getParameters();
args.add(args.get(0));
- args.set(0, languageFactory.createLiteral(new Integer(10), Integer.class));
- return function;
+ args.set(0, languageFactory.createLiteral(new Integer(10), TypeFacility.RUNTIME_TYPES.INTEGER));
+ return null;
}
}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/MonthOrDayNameFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/MonthOrDayNameFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/MonthOrDayNameFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -25,7 +25,8 @@
import java.util.Arrays;
import java.util.List;
-import org.teiid.connector.jdbc.translator.BasicFunctionModifier;
+import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.api.TypeFacility;
import org.teiid.connector.jdbc.translator.FunctionModifier;
import org.teiid.connector.language.IExpression;
import org.teiid.connector.language.IFunction;
@@ -36,7 +37,7 @@
* Convert the MONTHNAME etc. function into an equivalent Oracle function.
* Format: to_char(timestampvalue/dayvalue, 'Month'/'Day')
*/
-public class MonthOrDayNameFunctionModifier extends BasicFunctionModifier implements FunctionModifier {
+public class MonthOrDayNameFunctionModifier extends FunctionModifier {
private ILanguageFactory langFactory;
private String format;
@@ -45,22 +46,20 @@
this.format = format;
}
- /*
- * @see com.metamatrix.connector.jdbc.extension.FunctionModifier#modify(com.metamatrix.data.language.IFunction)
- */
- public IExpression modify(IFunction function) {
+ @Override
+ public List<?> translate(IFunction function) {
List<IExpression> args = function.getParameters();
IFunction func = langFactory.createFunction("TO_CHAR", //$NON-NLS-1$
Arrays.asList(
args.get(0),
- langFactory.createLiteral(format, String.class)),
- String.class);
+ langFactory.createLiteral(format, TypeFacility.RUNTIME_TYPES.STRING)),
+ TypeFacility.RUNTIME_TYPES.STRING);
// For some reason, these values have trailing spaces
- IFunction trimFunc = langFactory.createFunction("RTRIM", //$NON-NLS-1$
- Arrays.asList( func ), String.class);
+ IFunction trimFunc = langFactory.createFunction(SourceSystemFunctions.RTRIM,
+ Arrays.asList( func ), TypeFacility.RUNTIME_TYPES.STRING);
- return trimFunc;
+ return Arrays.asList(trimFunc);
}
}
Deleted: 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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleConvertModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,532 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.oracle;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.teiid.connector.api.ConnectorLogger;
-import org.teiid.connector.jdbc.translator.BasicFunctionModifier;
-import org.teiid.connector.jdbc.translator.DropFunctionModifier;
-import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
-
-
-/**
- */
-public class OracleConvertModifier extends BasicFunctionModifier implements FunctionModifier {
- private static DropFunctionModifier DROP_MODIFIER = new DropFunctionModifier();
- private ILanguageFactory langFactory;
-
- public OracleConvertModifier(ILanguageFactory langFactory, ConnectorLogger logger) {
- this.langFactory = langFactory;
- }
-
- public IExpression modify(IFunction function) {
- List<IExpression> args = function.getParameters();
- IExpression modified = null;
-
- String target = ((String)((ILiteral)args.get(1)).getValue()).toLowerCase();
- if (target.equals("string")) { //$NON-NLS-1$
- modified = convertToString(function);
- } else if (target.equals("short")) { //$NON-NLS-1$
- modified = convertToShort(function);
- } else if (target.equals("integer")) { //$NON-NLS-1$
- modified = convertToInteger(function);
- } else if (target.equals("long")) { //$NON-NLS-1$
- modified = convertToLong(function);
- } else if (target.equals("biginteger")) { //$NON-NLS-1$
- modified = convertToBigInteger(function);
- } else if (target.equals("float")) { //$NON-NLS-1$
- modified = convertToFloat(function);
- } else if (target.equals("double")) { //$NON-NLS-1$
- modified = convertToDouble(function);
- } else if (target.equals("bigdecimal")) { //$NON-NLS-1$
- modified = convertToBigDecimal(function);
- } else if (target.equals("date")) { //$NON-NLS-1$
- modified = convertToDate(function);
- } else if (target.equals("time")) { //$NON-NLS-1$
- modified = convertToTime(function);
- } else if (target.equals("timestamp")) { //$NON-NLS-1$
- modified = convertToTimestamp(function);
- } else if (target.equals("char")) { //$NON-NLS-1$
- modified = convertToChar(function);
- } else if (target.equals("boolean")) { //$NON-NLS-1$
- modified = convertToBoolean(function);
- } else if (target.equals("byte")) { //$NON-NLS-1$
- modified = convertToByte(function);
- } else {
- modified = DROP_MODIFIER.modify(function);
- }
- return modified;
- }
-
- private IExpression convertToDate(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class srcType = args.get(0).getType();
- int srcCode = getSrcCode(srcType);
-
- switch(srcCode) {
- case STRING:
- // convert(STRING, date) --> to_date(STRING, format)
- String format = "YYYY-MM-DD"; //$NON-NLS-1$
- convert = dateTypeHelper("to_date", Arrays.asList(args.get(0), //$NON-NLS-1$
- langFactory.createLiteral(format, String.class)), java.sql.Date.class);
- break;
- case TIMESTAMP:
- // convert(TSELEMENT, date) --> trunc(TSELEMENT)
- convert = dateTypeHelper("trunc", Arrays.asList(args.get(0)), java.sql.Date.class); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- /**
- * TODO: need to remove the prepend 1970-01-01 and the {ts''}
- * @param function
- * @return IExpression
- */
- private IExpression convertToTime(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class srcType = args.get(0).getType();
- String format = "YYYY-MM-DD HH24:MI:SS"; //$NON-NLS-1$
-
- int srcCode = getSrcCode(srcType);
- switch(srcCode) {
- case STRING:
- //convert(STRING, time) --> to_date('1970-01-01 ' || to_char(timevalue, 'HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS')
- IFunction inner0 = langFactory.createFunction("to_char", //$NON-NLS-1$
- Arrays.asList(
- args.get(0),
- langFactory.createLiteral("HH24:MI:SS", String.class)), //$NON-NLS-1$
- String.class);
-
- IExpression prependedPart0 = langFactory.createFunction("||", //$NON-NLS-1$
- Arrays.asList(
- langFactory.createLiteral("1970-01-01 ", String.class), //$NON-NLS-1$
- inner0),
- String.class);
-
- convert = langFactory.createFunction("to_date", //$NON-NLS-1$
- Arrays.asList(prependedPart0,
- langFactory.createLiteral(format, String.class)),
- java.sql.Time.class);
- break;
- case TIMESTAMP:
- // convert(timestamp, time)
- // --> to_date(('1970-01-01 ' || to_char(timestampvalue, 'HH24:MI:SS'))),
- // 'YYYY-MM-DD HH24:MI:SS')
- IFunction inner = langFactory.createFunction("to_char", //$NON-NLS-1$
- Arrays.asList(
- args.get(0),
- langFactory.createLiteral("HH24:MI:SS", String.class)), //$NON-NLS-1$
- String.class);
-
- IExpression prependedPart = langFactory.createFunction("||", //$NON-NLS-1$
- Arrays.asList(
- langFactory.createLiteral("1970-01-01 ", String.class), //$NON-NLS-1$
- inner),
- String.class);
-
- convert = langFactory.createFunction("to_date", //$NON-NLS-1$
- Arrays.asList(prependedPart,
- langFactory.createLiteral(format, String.class)),
- java.sql.Time.class);
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToTimestamp(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class srcType = args.get(0).getType();
- int srcCode = getSrcCode(srcType);
- switch(srcCode) {
- case STRING:
- // convert(STRING, timestamp) --> to_date(timestampvalue, 'YYYY-MM-DD HH24:MI:SS.FF')))
- String format = "YYYY-MM-DD HH24:MI:SS.FF"; //$NON-NLS-1$
- convert = dateTypeHelper("to_timestamp", Arrays.asList(args.get(0), //$NON-NLS-1$
- langFactory.createLiteral(format, String.class)), java.sql.Timestamp.class);
- break;
- case TIME:
- case DATE:
- convert = dateTypeHelper("cast", Arrays.asList(args.get(0), //$NON-NLS-1$
- langFactory.createLiteral("timestamp", String.class)), java.sql.Timestamp.class); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToChar(IFunction function) {
- // two cases:
- // 1) 2-byte: convert(string, char) --> cast(stringkey AS char(2))
- // 2) single bit: just drop
- // TODO: case 1)
- return DROP_MODIFIER.modify(function);
- }
-
- private IExpression convertToString(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- String format = null;
-
- int srcCode = getSrcCode(function);
- switch(srcCode) { // convert(input, string) --> to_char(input)
- case BOOLEAN:
- convert = langFactory.createFunction("decode", Arrays.asList( //$NON-NLS-1$
- args.get(0),
- langFactory.createLiteral(new Integer(0), Integer.class),
- langFactory.createLiteral("false", String.class), //$NON-NLS-1$
- langFactory.createLiteral(new Integer(1), Integer.class),
- langFactory.createLiteral("true", String.class) ), //$NON-NLS-1$
- String.class);
-
- break;
- case BYTE:
- case SHORT:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- convert = createStringFunction(args.get(0));
- break;
- // convert(input, string) --> to_char(input, format)
- case DATE:
- format = "YYYY-MM-DD"; //$NON-NLS-1$
- convert = createStringFunction(args.get(0), format);
- break;
- case TIME:
- format = "HH24:MI:SS"; //$NON-NLS-1$
- convert = createStringFunction(args.get(0), format);
- break;
- case TIMESTAMP:
- convert = createStringFunction(args.get(0), "YYYY-MM-DD HH24:MI:SS.FF"); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToBoolean(IFunction function) {
- IExpression convert = null;
- int srcCode = getSrcCode(function);
- switch(srcCode) {
- case STRING:
- // convert(src, boolean) --> decode(string, 'true', 1, 'false', 0)
- convert = booleanHelper(function);
- break;
- case BYTE:
- case SHORT:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToByte(IFunction function) {
- IExpression convert = null;
- int srcCode = getSrcCode(function);
-
- switch(srcCode) {
- case STRING:
- convert = stringSrcHelper(function);
- break;
- case BOOLEAN:
- case SHORT:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToShort(IFunction function) {
- IExpression convert = null;
- int srcCode = getSrcCode(function);
-
- switch(srcCode) {
- case STRING:
- convert = stringSrcHelper(function);
- break;
- case BOOLEAN:
- case BYTE:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToInteger(IFunction function) {
- IExpression convert = null;
- int srcCode = getSrcCode(function);
-
- switch(srcCode) {
- case STRING:
- convert = stringSrcHelper(function);
- break;
- case BOOLEAN:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToLong(IFunction function) {
- IExpression convert = null;
- int srcCode = getSrcCode(function);
-
- switch(srcCode) {
- case STRING:
- convert = stringSrcHelper(function);
- break;
- case BOOLEAN:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToBigInteger(IFunction function) {
- IExpression convert = null;
- int srcCode = getSrcCode(function);
-
- switch(srcCode) {
- case STRING:
- convert = stringSrcHelper(function);
- break;
- case BOOLEAN:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToFloat(IFunction function) {
- IExpression convert = null;
- int srcCode = getSrcCode(function);
-
- switch(srcCode) {
- case STRING:
- convert = stringSrcHelper(function);
- break;
- case BOOLEAN:
- case DOUBLE:
- case BIGDECIMAL:
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToDouble(IFunction function) {
- IExpression convert = null;
- int srcCode = getSrcCode(function);
-
- switch(srcCode) {
- case STRING:
- convert = stringSrcHelper(function);
- break;
- case BOOLEAN:
- case BIGDECIMAL:
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToBigDecimal(IFunction function) {
- IExpression convert = null;
- int srcCode = getSrcCode(function);
-
- switch(srcCode) {
- case STRING:
- convert = stringSrcHelper(function);
- break;
- case BOOLEAN:
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IFunction dateTypeHelper(String functionName, List<IExpression> args, Class target) {
- IFunction convert = langFactory.createFunction(functionName,
- args, target);
- return convert;
- }
-
- private IFunction booleanHelper(IFunction function) {
- // using decode(value, 'true', 1, 'false', 0)
- List<IExpression> args = function.getParameters();
-
- return langFactory.createFunction("decode", //$NON-NLS-1$
- Arrays.asList(
- args.get(0),
- langFactory.createLiteral("true", String.class), //$NON-NLS-1$
- langFactory.createLiteral(new Byte((byte)1), Byte.class),
- langFactory.createLiteral("false", String.class), //$NON-NLS-1$
- langFactory.createLiteral(new Byte((byte)0), Byte.class)
- ), java.lang.Boolean.class);
- }
-
- private IExpression stringSrcHelper(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- // switch the target type
- String functionName = "to_number"; //$NON-NLS-1$
- int targetCode = getTargetCode(function.getType());
- switch(targetCode) {
- case BYTE:
- convert = createFunction(functionName, args.get(0), Byte.class);
- break;
- case SHORT:
- convert = createFunction(functionName, args.get(0), Short.class);
- break;
- case INTEGER:
- convert = createFunction(functionName, args.get(0), Integer.class);
- break;
- case LONG:
- convert = createFunction(functionName, args.get(0), Long.class);
- break;
- case BIGINTEGER:
- convert = createFunction(functionName, args.get(0), java.math.BigInteger.class);
- break;
- case FLOAT:
- convert = createFunction(functionName, args.get(0), Float.class);
- break;
- case DOUBLE:
- convert = createFunction(functionName, args.get(0), Double.class);
- break;
- case BIGDECIMAL:
- convert = createFunction(functionName, args.get(0), java.math.BigDecimal.class);
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
- return convert;
- }
-
- private IFunction createFunction(String functionName, IExpression args0, Class targetClass) {
- IFunction created = langFactory.createFunction(functionName,
- Arrays.asList(args0), targetClass);
- return created;
- }
-
- private IFunction createStringFunction(IExpression args0, String format) {
- IFunction created = langFactory.createFunction("to_char", //$NON-NLS-1$
- Arrays.asList(args0, langFactory.createLiteral(format, String.class)),
- String.class);
- return created;
- }
-
- private IFunction createStringFunction(IExpression args) {
- IFunction created = langFactory.createFunction("to_char", //$NON-NLS-1$
- Arrays.asList( args ), String.class);
- return created;
- }
-
- private int getSrcCode(IFunction function) {
- List<IExpression> args = function.getParameters();
- Class srcType = args.get(0).getType();
- return ((Integer) typeMap.get(srcType)).intValue();
- }
-
- private int getSrcCode(Class source) {
- return ((Integer) typeMap.get(source)).intValue();
- }
-
- private int getTargetCode(Class target) {
- return ((Integer) typeMap.get(target)).intValue();
- }
-}
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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSQLTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -31,6 +31,7 @@
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -41,7 +42,9 @@
import org.teiid.connector.api.SourceSystemFunctions;
import org.teiid.connector.jdbc.JDBCPlugin;
import org.teiid.connector.jdbc.translator.AliasModifier;
+import org.teiid.connector.jdbc.translator.ConvertModifier;
import org.teiid.connector.jdbc.translator.ExtractFunctionModifier;
+import org.teiid.connector.jdbc.translator.FunctionModifier;
import org.teiid.connector.jdbc.translator.LocateFunctionModifier;
import org.teiid.connector.jdbc.translator.Translator;
import org.teiid.connector.language.ICommand;
@@ -84,7 +87,6 @@
registerFunctionModifier(SourceSystemFunctions.LOG, new AliasModifier("ln")); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.CEILING, new AliasModifier("ceil")); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.LOG10, new Log10FunctionModifier(getLanguageFactory()));
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new OracleConvertModifier(getLanguageFactory(), getEnvironment().getLogger()));
registerFunctionModifier(SourceSystemFunctions.HOUR, new ExtractFunctionModifier());
registerFunctionModifier(SourceSystemFunctions.YEAR, new ExtractFunctionModifier());
registerFunctionModifier(SourceSystemFunctions.MINUTE, new ExtractFunctionModifier());
@@ -93,40 +95,76 @@
registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new ExtractFunctionModifier());
registerFunctionModifier(SourceSystemFunctions.MONTHNAME, new MonthOrDayNameFunctionModifier(getLanguageFactory(), "Month"));//$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.DAYNAME, new MonthOrDayNameFunctionModifier(getLanguageFactory(), "Day"));//$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.WEEK, new DayWeekQuarterFunctionModifier(getLanguageFactory(), "WW"));//$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.QUARTER, new DayWeekQuarterFunctionModifier(getLanguageFactory(), "Q"));//$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.DAYOFWEEK, new DayWeekQuarterFunctionModifier(getLanguageFactory(), "D"));//$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.DAYOFYEAR, new DayWeekQuarterFunctionModifier(getLanguageFactory(), "DDD"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.WEEK, new DayWeekQuarterFunctionModifier("WW"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.QUARTER, new DayWeekQuarterFunctionModifier("Q"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.DAYOFWEEK, new DayWeekQuarterFunctionModifier("D"));//$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.DAYOFYEAR, new DayWeekQuarterFunctionModifier("DDD"));//$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.LOCATE, new LocateFunctionModifier(getLanguageFactory(), "INSTR", true)); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.SUBSTRING, new AliasModifier("substr"));//$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.LEFT, new LeftOrRightFunctionModifier(getLanguageFactory()));
registerFunctionModifier(SourceSystemFunctions.RIGHT, new LeftOrRightFunctionModifier(getLanguageFactory()));
registerFunctionModifier(SourceSystemFunctions.CONCAT, new ConcatFunctionModifier(getLanguageFactory()));
+
+ //spatial functions
registerFunctionModifier(RELATE, new OracleSpatialFunctionModifier());
registerFunctionModifier(NEAREST_NEIGHBOR, new OracleSpatialFunctionModifier());
registerFunctionModifier(FILTER, new OracleSpatialFunctionModifier());
registerFunctionModifier(WITHIN_DISTANCE, new OracleSpatialFunctionModifier());
+
+ //add in type conversion
+ ConvertModifier convertModifier = new ConvertModifier();
+ convertModifier.addTypeMapping("char(1)", FunctionModifier.CHAR); //$NON-NLS-1$
+ convertModifier.addTypeMapping("date", FunctionModifier.DATE, FunctionModifier.TIME); //$NON-NLS-1$
+ convertModifier.addTypeMapping("timestamp", FunctionModifier.TIMESTAMP); //$NON-NLS-1$
+ convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.TIME, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ return Arrays.asList("to_date('1970-01-01 ' || to_char(",function.getParameters().get(0),", 'HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS')"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ });
+ convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.DATE, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ return Arrays.asList("trunc(cast(",function.getParameters().get(0)," AS date))"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ });
+ convertModifier.addConvert(FunctionModifier.DATE, FunctionModifier.STRING, new ConvertModifier.FormatModifier("to_char", "YYYY-MM-DD")); //$NON-NLS-1$ //$NON-NLS-2$
+ convertModifier.addConvert(FunctionModifier.TIME, FunctionModifier.STRING, new ConvertModifier.FormatModifier("to_char", "HH24:MI:SS")); //$NON-NLS-1$ //$NON-NLS-2$
+ convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.STRING, new ConvertModifier.FormatModifier("to_char", "YYYY-MM-DD HH24:MI:SS.FF")); //$NON-NLS-1$ //$NON-NLS-2$
+ convertModifier.addConvert(FunctionModifier.STRING, FunctionModifier.DATE, new ConvertModifier.FormatModifier("to_date", "YYYY-MM-DD")); //$NON-NLS-1$ //$NON-NLS-2$
+ convertModifier.addConvert(FunctionModifier.STRING, FunctionModifier.TIME, new ConvertModifier.FormatModifier("to_date", "HH24:MI:SS")); //$NON-NLS-1$ //$NON-NLS-2$
+ convertModifier.addConvert(FunctionModifier.STRING, FunctionModifier.TIMESTAMP, new ConvertModifier.FormatModifier("to_timestamp", "YYYY-MM-DD HH24:MI:SS.FF")); //$NON-NLS-1$ //$NON-NLS-2$
+ convertModifier.addTypeConversion(new ConvertModifier.FormatModifier("to_char"), FunctionModifier.STRING); //$NON-NLS-1$
+ //NOTE: numeric handling in Oracle is split only between integral vs. floating/decimal types
+ convertModifier.addTypeConversion(new ConvertModifier.FormatModifier("to_number"), //$NON-NLS-1$
+ FunctionModifier.FLOAT, FunctionModifier.DOUBLE, FunctionModifier.BIGDECIMAL);
+ convertModifier.addTypeConversion(new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ if (Number.class.isAssignableFrom(function.getParameters().get(0).getType())) {
+ return Arrays.asList("trunc(", function.getParameters().get(0), ")"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ return Arrays.asList("trunc(to_number(", function.getParameters().get(0), "))"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ },
+ FunctionModifier.BYTE, FunctionModifier.SHORT, FunctionModifier.INTEGER, FunctionModifier.LONG, FunctionModifier.BIGINTEGER);
+ convertModifier.addNumericBooleanConversions();
+ convertModifier.setWideningNumericImplicit(true);
+ registerFunctionModifier(SourceSystemFunctions.CONVERT, convertModifier);
}
- @Override
- public ICommand modifyCommand(ICommand command, ExecutionContext context) throws ConnectorException {
- if (!(command instanceof IInsert)) {
- return command;
- }
-
+ public void handleInsertSequences(IInsert insert) throws ConnectorException {
/*
* If a missing auto_increment column is modeled with name in source indicating that an Oracle Sequence
* then pull the Sequence name out of the name in source of the column.
*/
- IInsert insert = (IInsert)command;
-
if (!(insert.getValueSource() instanceof IInsertExpressionValueSource)) {
- return command;
+ return;
}
IInsertExpressionValueSource values = (IInsertExpressionValueSource)insert.getValueSource();
List<Element> allElements = insert.getGroup().getMetadataObject().getChildren();
if (allElements.size() == values.getValues().size()) {
- return command;
+ return;
}
int index = 0;
@@ -167,11 +205,18 @@
insert.getElements().add(index, this.getLanguageFactory().createElement(element.getName(), insert.getGroup(), element, element.getJavaType()));
values.getValues().add(index, sequenceElement);
}
- return command;
}
@Override
public List<?> translateCommand(ICommand command, ExecutionContext context) {
+ if (command instanceof IInsert) {
+ try {
+ handleInsertSequences((IInsert)command);
+ } catch (ConnectorException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
if (!(command instanceof IQueryCommand)) {
return null;
}
@@ -309,7 +354,7 @@
}
@Override
- public void bindValue(PreparedStatement stmt, Object param, Class paramType, int i) throws SQLException {
+ public void bindValue(PreparedStatement stmt, Object param, Class<?> paramType, int i) throws SQLException {
if(param == null && Object.class.equals(paramType)){
//Oracle drive does not support JAVA_OBJECT type
stmt.setNull(i, Types.LONGVARBINARY);
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSpatialFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSpatialFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleSpatialFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -25,13 +25,13 @@
import java.util.ArrayList;
import java.util.List;
-import org.teiid.connector.jdbc.translator.BasicFunctionModifier;
+import org.teiid.connector.jdbc.translator.FunctionModifier;
import org.teiid.connector.language.IExpression;
import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.ILiteral;
-public class OracleSpatialFunctionModifier extends BasicFunctionModifier {
+public class OracleSpatialFunctionModifier extends FunctionModifier {
/**
* If either of the first two parameters are a Literal String, then we need to put the literal itself in the SQL
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/LocateFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/LocateFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/LocateFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -38,6 +38,7 @@
@Override
public List<?> translate(IFunction function) {
+ modify(function);
List<Object> parts = new ArrayList<Object>();
List<IExpression> params = function.getParameters();
parts.add("position("); //$NON-NLS-1$
Deleted: 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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLConvertModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,201 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.postgresql;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.List;
-
-import org.teiid.connector.jdbc.translator.BasicFunctionModifier;
-import org.teiid.connector.jdbc.translator.DropFunctionModifier;
-import org.teiid.connector.jdbc.translator.FunctionModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.language.ICompareCriteria.Operator;
-
-
-/**
- */
-class PostgreSQLConvertModifier extends BasicFunctionModifier implements FunctionModifier {
- private static DropFunctionModifier DROP_MODIFIER = new DropFunctionModifier();
- private ILanguageFactory langFactory;
-
- PostgreSQLConvertModifier(ILanguageFactory langFactory) {
- this.langFactory = langFactory;
- }
-
- public IExpression modify(IFunction function) {
- List<IExpression> args = function.getParameters();
-
- if (args.get(0) != null && args.get(0) instanceof ILiteral && ((ILiteral)args.get(0)).getValue() == null ) {
- if (args.get(1) != null && args.get(1) instanceof ILiteral) {
- // This is a convert(null, ...) or cast(null as ...)
- return DROP_MODIFIER.modify(function);
- }
- }
-
- if (args.get(1) != null && args.get(1) instanceof ILiteral) {
- String target = ((String)((ILiteral)args.get(1)).getValue()).toLowerCase();
- if (target.equals("string")) { //$NON-NLS-1$
- return convertToString(function);
- } else if (target.equals("short")) { //$NON-NLS-1$
- return createCastFunction(args.get(0), "smallint", Short.class); //$NON-NLS-1$
- } else if (target.equals("integer")) { //$NON-NLS-1$
- return createCastFunction(args.get(0), "integer", Integer.class); //$NON-NLS-1$
- } else if (target.equals("long")) { //$NON-NLS-1$
- return createCastFunction(args.get(0), "bigint", Long.class); //$NON-NLS-1$
- } else if (target.equals("biginteger")) { //$NON-NLS-1$
- return createCastFunction(args.get(0), "numeric", BigInteger.class); //$NON-NLS-1$
- } else if (target.equals("float")) { //$NON-NLS-1$
- return createCastFunction(args.get(0), "real", Float.class); //$NON-NLS-1$
- } else if (target.equals("double")) { //$NON-NLS-1$
- return createCastFunction(args.get(0), "float8", Double.class); //$NON-NLS-1$
- } else if (target.equals("bigdecimal")) { //$NON-NLS-1$
- return createCastFunction(args.get(0), "decimal", BigDecimal.class); //$NON-NLS-1$
- } else if (target.equals("date")) { //$NON-NLS-1$
- return convertToDate(function);
- } else if (target.equals("time")) { //$NON-NLS-1$
- return convertToTime(function);
- } else if (target.equals("timestamp")) { //$NON-NLS-1$
- return convertToTimestamp(function);
- } else if (target.equals("char")) { //$NON-NLS-1$
- return createCastFunction(args.get(0), "varchar", String.class); //$NON-NLS-1$
- } else if (target.equals("boolean")) { //$NON-NLS-1$
- return createCastFunction(args.get(0), "boolean", Boolean.class); //$NON-NLS-1$
- } else if (target.equals("byte")) { //$NON-NLS-1$
- return createCastFunction(args.get(0), "smallint", Byte.class); //$NON-NLS-1$
- }
- }
- return DROP_MODIFIER.modify(function);
- }
-
- private IExpression convertToDate(IFunction function) {
- List<IExpression> args = function.getParameters();
- int srcCode = getSrcCode(function);
-
- switch(srcCode) {
- case STRING:
- return createConversionFunction("to_date", args.get(0), "YYYY-MM-DD", java.sql.Date.class); //$NON-NLS-1$//$NON-NLS-2$
- case TIMESTAMP:
- return createCastFunction(args.get(0), "date", java.sql.Date.class); //$NON-NLS-1$
- default:
- return DROP_MODIFIER.modify(function);
- }
- }
-
- private IExpression convertToTime(IFunction function) {
- List<IExpression> args = function.getParameters();
-
- int srcCode = getSrcCode(function);
- switch(srcCode) {
- case STRING:
- //convert(STRING, time) --> to_timestamp('1970-01-01 ' || timevalue, 'YYYY-MM-DD HH24:MI:SS')
- IExpression prependedPart0 = langFactory.createFunction("||", //$NON-NLS-1$
- Arrays.asList(langFactory.createLiteral("1970-01-01 ", String.class), args.get(0)), //$NON-NLS-1$
- String.class);
-
- return createConversionFunction("to_timestamp", prependedPart0, "YYYY-MM-DD HH24:MI:SS", java.sql.Time.class); //$NON-NLS-1$ //$NON-NLS-2$
- case TIMESTAMP:
- return createCastFunction(args.get(0), "time", java.sql.Time.class); //$NON-NLS-1$
- default:
- return DROP_MODIFIER.modify(function);
- }
- }
-
- /**
- * This works only for Oracle 9i.
- * @param src
- * @return IFunction
- */
- private IExpression convertToTimestamp(IFunction function) {
- List<IExpression> args = function.getParameters();
- int srcCode = getSrcCode(function);
- switch(srcCode) {
- case STRING:
- // convert(STRING, timestamp) --> to_date(timestampvalue, 'YYYY-MM-DD HH24:MI:SS'))) from smalla
- return createConversionFunction("to_timestamp", args.get(0), "YYYY-MM-DD HH24:MI:SS.UF", java.sql.Timestamp.class); //$NON-NLS-1$ //$NON-NLS-2$
- case TIME:
- case DATE:
- // convert(DATE, timestamp) --> to_date(to_char(DATE, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS')
- IFunction inner = createStringFunction(args.get(0), "YYYY-MM-DD HH24:MI:SS"); //$NON-NLS-1$
-
- return createConversionFunction("to_timestamp", inner, "YYYY-MM-DD HH24:MI:SS", java.sql.Timestamp.class); //$NON-NLS-1$ //$NON-NLS-2$
- default:
- return DROP_MODIFIER.modify(function);
- }
- }
-
- private IExpression convertToString(IFunction function) {
- List<IExpression> args = function.getParameters();
-
- int srcCode = getSrcCode(function);
- switch(srcCode) {
- case BOOLEAN:
- // convert(booleanSrc, string) --> CASE WHEN booleanSrc THEN '1' ELSE '0' END
- List when = Arrays.asList(langFactory.createCompareCriteria(Operator.EQ, function.getParameters().get(0), langFactory.createLiteral(Boolean.TRUE, Boolean.class)));
- List then = Arrays.asList(langFactory.createLiteral("1", String.class)); //$NON-NLS-1$
- IExpression elseExpr = langFactory.createLiteral("0", String.class); //$NON-NLS-1$
- return langFactory.createSearchedCaseExpression(when, then, elseExpr, String.class);
- case BYTE:
- case SHORT:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- // convert(src, string) --> cast (src AS varchar)
- return createCastFunction(args.get(0), "varchar", String.class); //$NON-NLS-1$
- // convert(input, string) --> to_char(input, format)
- case DATE:
- return createStringFunction(args.get(0), "YYYY-MM-DD"); //$NON-NLS-1$
- case TIME:
- return createStringFunction(args.get(0), "HH24:MI:SS"); //$NON-NLS-1$
- case TIMESTAMP:
- return createStringFunction(args.get(0), "YYYY-MM-DD HH24:MI:SS.US"); //$NON-NLS-1$
- default:
- return DROP_MODIFIER.modify(function);
- }
- }
-
- private IFunction createStringFunction(IExpression args0, String format) {
- return createConversionFunction("to_char", args0, format, String.class); //$NON-NLS-1$
- }
-
- private IFunction createCastFunction(IExpression value, String typeName, Class targetClass) {
- return createConversionFunction("cast", value, typeName, targetClass); //$NON-NLS-1$
- }
-
- private IFunction createConversionFunction(String functionName, IExpression value, String target, Class targetClass) {
- return langFactory.createFunction(functionName, Arrays.asList(value, langFactory.createLiteral(target, String.class)), targetClass);
- }
-
- private int getSrcCode(IFunction function) {
- List<IExpression> args = function.getParameters();
- Class srcType = args.get(0).getType();
- return ((Integer) typeMap.get(srcType)).intValue();
- }
-}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -37,13 +37,17 @@
import org.teiid.connector.jdbc.oracle.LeftOrRightFunctionModifier;
import org.teiid.connector.jdbc.oracle.MonthOrDayNameFunctionModifier;
import org.teiid.connector.jdbc.translator.AliasModifier;
+import org.teiid.connector.jdbc.translator.ConvertModifier;
import org.teiid.connector.jdbc.translator.EscapeSyntaxModifier;
import org.teiid.connector.jdbc.translator.ExtractFunctionModifier;
+import org.teiid.connector.jdbc.translator.FunctionModifier;
import org.teiid.connector.jdbc.translator.Translator;
import org.teiid.connector.language.IAggregate;
-import org.teiid.connector.language.ICommand;
+import org.teiid.connector.language.IExpression;
+import org.teiid.connector.language.IFunction;
+import org.teiid.connector.language.ILanguageObject;
import org.teiid.connector.language.ILimit;
-import org.teiid.connector.visitor.framework.HierarchyVisitor;
+import org.teiid.connector.language.ILiteral;
import org.teiid.connector.visitor.util.SQLReservedWords;
@@ -87,15 +91,58 @@
registerFunctionModifier(SourceSystemFunctions.SECOND, new ExtractFunctionModifier());
registerFunctionModifier(SourceSystemFunctions.WEEK, new ExtractFunctionModifier());
registerFunctionModifier(SourceSystemFunctions.YEAR, new ExtractFunctionModifier());
-
+ registerFunctionModifier(SourceSystemFunctions.LOCATE, new LocateFunctionModifier(getLanguageFactory()));
+ registerFunctionModifier(SourceSystemFunctions.IFNULL, new AliasModifier("coalesce")); //$NON-NLS-1$
+
//specific to 8.2 client or later
registerFunctionModifier(SourceSystemFunctions.TIMESTAMPADD, new EscapeSyntaxModifier());
registerFunctionModifier(SourceSystemFunctions.TIMESTAMPDIFF, new EscapeSyntaxModifier());
-
- registerFunctionModifier(SourceSystemFunctions.IFNULL, new AliasModifier("coalesce")); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new PostgreSQLConvertModifier(getLanguageFactory()));
-
- registerFunctionModifier(SourceSystemFunctions.LOCATE, new LocateFunctionModifier(getLanguageFactory()));
+
+ //add in type conversion
+ ConvertModifier convertModifier = new ConvertModifier();
+ convertModifier.addTypeMapping("boolean", FunctionModifier.BOOLEAN); //$NON-NLS-1$
+ convertModifier.addTypeMapping("smallint", FunctionModifier.BYTE, FunctionModifier.SHORT); //$NON-NLS-1$
+ convertModifier.addTypeMapping("integer", FunctionModifier.INTEGER); //$NON-NLS-1$
+ convertModifier.addTypeMapping("bigint", FunctionModifier.LONG); //$NON-NLS-1$
+ convertModifier.addTypeMapping("real", FunctionModifier.FLOAT); //$NON-NLS-1$
+ convertModifier.addTypeMapping("float8", FunctionModifier.DOUBLE); //$NON-NLS-1$
+ convertModifier.addTypeMapping("numeric(38)", FunctionModifier.BIGINTEGER); //$NON-NLS-1$
+ convertModifier.addTypeMapping("decimal", FunctionModifier.BIGDECIMAL); //$NON-NLS-1$
+ convertModifier.addTypeMapping("char(1)", FunctionModifier.CHAR); //$NON-NLS-1$
+ convertModifier.addTypeMapping("varchar(4000)", FunctionModifier.STRING); //$NON-NLS-1$
+ convertModifier.addTypeMapping("date", FunctionModifier.DATE); //$NON-NLS-1$
+ convertModifier.addTypeMapping("time", FunctionModifier.TIME); //$NON-NLS-1$
+ convertModifier.addTypeMapping("timestamp", FunctionModifier.TIMESTAMP); //$NON-NLS-1$
+ convertModifier.addConvert(FunctionModifier.TIME, FunctionModifier.TIMESTAMP, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ return Arrays.asList(function.getParameters().get(0), " + TIMESTAMP '1970-01-01'"); //$NON-NLS-1$
+ }
+ });
+ convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.TIME, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ return Arrays.asList("cast(date_trunc('second', ", function.getParameters().get(0), ") AS time)"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ });
+ convertModifier.addConvert(FunctionModifier.DATE, FunctionModifier.STRING, new ConvertModifier.FormatModifier("to_char", "YYYY-MM-DD")); //$NON-NLS-1$ //$NON-NLS-2$
+ convertModifier.addConvert(FunctionModifier.TIME, FunctionModifier.STRING, new ConvertModifier.FormatModifier("to_char", "HH24:MI:SS")); //$NON-NLS-1$ //$NON-NLS-2$
+ convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.STRING, new ConvertModifier.FormatModifier("to_char", "YYYY-MM-DD HH24:MI:SS.UF")); //$NON-NLS-1$ //$NON-NLS-2$
+ convertModifier.addConvert(FunctionModifier.BOOLEAN, FunctionModifier.STRING, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ IExpression stringValue = function.getParameters().get(0);
+ return Arrays.asList("CASE WHEN ", stringValue, " THEN 'true' WHEN not(", stringValue, ") THEN 'false' END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ });
+ convertModifier.addSourceConversion(new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ ((ILiteral)function.getParameters().get(1)).setValue("integer"); //$NON-NLS-1$
+ return null;
+ }
+ }, FunctionModifier.BOOLEAN);
+ registerFunctionModifier(SourceSystemFunctions.CONVERT, convertModifier);
}
@Override
@@ -118,7 +165,7 @@
@Override
public String translateLiteralTimestamp(Timestamp timestampValue) {
- return "to_timestamp('" + formatDateValue(timestampValue) + "', 'YYYY-MM-DD HH24:MI:SS.US')"; //$NON-NLS-1$//$NON-NLS-2$
+ return "TIMESTAMP '" + formatDateValue(timestampValue) + "'"; //$NON-NLS-1$//$NON-NLS-2$
}
@Override
@@ -142,23 +189,18 @@
* @since 4.3
*/
@Override
- public ICommand modifyCommand(ICommand command, ExecutionContext context)
- throws ConnectorException {
- HierarchyVisitor visitor = new HierarchyVisitor() {
- @Override
- public void visit(IAggregate obj) {
- if (TypeFacility.RUNTIME_TYPES.BOOLEAN.equals(obj.getExpression().getType())) {
- if (obj.getName().equalsIgnoreCase(SQLReservedWords.MIN)) {
- obj.setName("bool_and"); //$NON-NLS-1$
- } else if (obj.getName().equalsIgnoreCase(SQLReservedWords.MAX)) {
- obj.setName("bool_or"); //$NON-NLS-1$
- }
- }
- }
- };
-
- command.acceptVisitor(visitor);
- return command;
+ public List<?> translate(ILanguageObject obj, ExecutionContext context) {
+ if (obj instanceof IAggregate) {
+ IAggregate agg = (IAggregate)obj;
+ if (TypeFacility.RUNTIME_TYPES.BOOLEAN.equals(agg.getExpression().getType())) {
+ if (agg.getName().equalsIgnoreCase(SQLReservedWords.MIN)) {
+ agg.setName("bool_and"); //$NON-NLS-1$
+ } else if (agg.getName().equalsIgnoreCase(SQLReservedWords.MAX)) {
+ agg.setName("bool_or"); //$NON-NLS-1$
+ }
+ }
+ }
+ return super.translate(obj, context);
}
@Override
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerCapabilities.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerCapabilities.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerCapabilities.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -46,7 +46,7 @@
supportedFunctions.add("ACOS"); //$NON-NLS-1$
supportedFunctions.add("ASIN"); //$NON-NLS-1$
supportedFunctions.add("ATAN"); //$NON-NLS-1$
- //supportedFunctons.add("ATAN2"); //$NON-NLS-1$
+ supportedFunctions.add("ATAN2"); //$NON-NLS-1$
supportedFunctions.add("COS"); //$NON-NLS-1$
supportedFunctions.add("COT"); //$NON-NLS-1$
supportedFunctions.add("DEGREES"); //$NON-NLS-1$
@@ -125,5 +125,14 @@
public boolean supportsRowLimit() {
return true;
- }
+ }
+
+ @Override
+ public boolean supportsIntersect() {
+ return true;
+ }
+
+ public boolean supportsExcept() {
+ return true;
+ };
}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerSQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerSQLTranslator.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerSQLTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -24,43 +24,31 @@
*/
package org.teiid.connector.jdbc.sqlserver;
+import java.util.Arrays;
+import java.util.List;
+
import org.teiid.connector.api.ConnectorCapabilities;
-import org.teiid.connector.api.ConnectorEnvironment;
-import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.api.SourceSystemFunctions;
import org.teiid.connector.jdbc.sybase.SybaseSQLTranslator;
-import org.teiid.connector.jdbc.translator.AliasModifier;
-import org.teiid.connector.jdbc.translator.EscapeSyntaxModifier;
+import org.teiid.connector.language.IFunction;
/**
* Updated to assume the use of the DataDirect, 2005 driver, or later.
*/
public class SqlServerSQLTranslator extends SybaseSQLTranslator {
-
- public void initialize(ConnectorEnvironment env) throws ConnectorException {
- super.initialize(env);
- //TEIID-31 remove mod modifier for SQL Server 2008
- registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new AliasModifier("day")); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.REPEAT, new AliasModifier("replicate")); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.DAYNAME, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.MONTHNAME, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.DAYOFWEEK, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.DAYOFYEAR, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.HOUR, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.MINUTE, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.QUARTER, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.SECOND, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.WEEK, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.TIMESTAMPADD, new EscapeSyntaxModifier());
- registerFunctionModifier(SourceSystemFunctions.TIMESTAMPDIFF, new EscapeSyntaxModifier());
- }
+
+ //TEIID-31 remove mod modifier for SQL Server 2008
+
+ @Override
+ protected List<Object> convertDateToString(IFunction function) {
+ return Arrays.asList("replace(convert(varchar, ", function.getParameters().get(0), ", 102), '.', '-')"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ @Override
+ protected List<?> convertTimestampToString(IFunction function) {
+ return Arrays.asList("convert(varchar, ", function.getParameters().get(0), ", 21)"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
@Override
- public String getLengthFunctionName() {
- return "len"; //$NON-NLS-1$
- }
-
- @Override
public Class<? extends ConnectorCapabilities> getDefaultCapabilities() {
return SqlServerCapabilities.class;
}
Deleted: 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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/ModFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,64 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.sybase;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.teiid.connector.api.TypeFacility.RUNTIME_TYPES;
-import org.teiid.connector.jdbc.translator.AliasModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-
-
-public class ModFunctionModifier extends AliasModifier {
-
- private ILanguageFactory langFactory;
-
- public ModFunctionModifier(ILanguageFactory langFactory) {
- super("%"); //$NON-NLS-1$
- this.langFactory = langFactory;
- }
-
- @Override
- public IExpression modify(IFunction function) {
- List<IExpression> expressions = function.getParameters();
- if (RUNTIME_TYPES.INTEGER.equals(expressions.get(0).getType())) {
- return super.modify(function);
- }
- //x % y => x - floor(x / y) * y
- IFunction divide = langFactory.createFunction("/", new ArrayList<IExpression>(expressions), expressions.get(0).getType()); //$NON-NLS-1$
-
- IFunction floor = langFactory.createFunction("floor", Arrays.asList(divide), divide.getType()); //$NON-NLS-1$
-
- List<IExpression> multArgs = Arrays.asList(floor, expressions.get(1));
- IFunction mult = langFactory.createFunction("*", multArgs, multArgs.get(1).getType()); //$NON-NLS-1$
-
- List<IExpression> minusArgs = Arrays.asList(expressions.get(0), mult);
-
- return langFactory.createFunction("-", minusArgs, minusArgs.get(0).getType()); //$NON-NLS-1$
- }
-
-}
Copied: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SubstringFunctionModifier.java (from rev 1286, trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SubstringFunctionModifier.java)
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SubstringFunctionModifier.java (rev 0)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SubstringFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -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.sybase;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.api.TypeFacility;
+import org.teiid.connector.jdbc.translator.FunctionModifier;
+import org.teiid.connector.language.IExpression;
+import org.teiid.connector.language.IFunction;
+import org.teiid.connector.language.ILanguageFactory;
+
+
+/**
+ * Common logic for Substring modifiers requiring 3 parameters
+ */
+public class SubstringFunctionModifier extends FunctionModifier {
+
+ private ILanguageFactory languageFactory;
+
+ public SubstringFunctionModifier(ILanguageFactory languageFactory) {
+ this.languageFactory = languageFactory;
+ }
+
+ @Override
+ public List<?> translate(IFunction function) {
+ List<IExpression> args = function.getParameters();
+
+ if(args.size() == 2) {
+ args.add(languageFactory.createFunction(SourceSystemFunctions.LENGTH, Arrays.asList(args.get(0)), TypeFacility.RUNTIME_TYPES.INTEGER));
+ }
+ return null;
+ }
+
+}
\ No newline at end of file
Property changes on: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SubstringFunctionModifier.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseCapabilities.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseCapabilities.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseCapabilities.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -45,8 +45,8 @@
/**
* @see com.metamatrix.data.ConnectorCapabilities#getSupportedFunctions()
*/
- public List getSupportedFunctions() {
- List supportedFunctions = new ArrayList();
+ public List<String> getSupportedFunctions() {
+ List<String> supportedFunctions = new ArrayList<String>();
supportedFunctions.addAll(super.getSupportedFunctions());
supportedFunctions.add("ABS"); //$NON-NLS-1$
supportedFunctions.add("ACOS"); //$NON-NLS-1$
@@ -74,12 +74,11 @@
supportedFunctions.add("CONCAT"); //$NON-NLS-1$
supportedFunctions.add("||"); //$NON-NLS-1$
supportedFunctions.add("LCASE"); //$NON-NLS-1$
-// Remove support for LEFT (Case 2486). Left is not supported by Sybase, found error when comparing
-// to 3.1 version of capabilities class. Problem found at ML during migration to 4.1
-// supportedFunctions.add("LEFT"); //$NON-NLS-1$
+ supportedFunctions.add("LEFT"); //$NON-NLS-1$
supportedFunctions.add("LENGTH"); //$NON-NLS-1$
supportedFunctions.add("LOWER"); //$NON-NLS-1$
supportedFunctions.add("LTRIM"); //$NON-NLS-1$
+ supportedFunctions.add("REPEAT"); //$NON-NLS-1$
//supportedFunctions.add("RAND"); //$NON-NLS-1$
supportedFunctions.add("RIGHT"); //$NON-NLS-1$
supportedFunctions.add("RTRIM"); //$NON-NLS-1$
@@ -87,6 +86,23 @@
supportedFunctions.add("SUBSTRING"); //$NON-NLS-1$
supportedFunctions.add("UCASE"); //$NON-NLS-1$
supportedFunctions.add("UPPER"); //$NON-NLS-1$
+ //supportedFunctons.add("CURDATE"); //$NON-NLS-1$
+ //supportedFunctons.add("CURTIME"); //$NON-NLS-1$
+ supportedFunctions.add("DAYNAME"); //$NON-NLS-1$
+ supportedFunctions.add("DAYOFMONTH"); //$NON-NLS-1$
+ supportedFunctions.add("DAYOFWEEK"); //$NON-NLS-1$
+ supportedFunctions.add("DAYOFYEAR"); //$NON-NLS-1$
+ supportedFunctions.add("HOUR"); //$NON-NLS-1$
+ supportedFunctions.add("MINUTE"); //$NON-NLS-1$
+ supportedFunctions.add("MONTH"); //$NON-NLS-1$
+ supportedFunctions.add("MONTHNAME"); //$NON-NLS-1$
+ //supportedFunctions.add("NOW"); //$NON-NLS-1$
+ supportedFunctions.add("QUARTER"); //$NON-NLS-1$
+ supportedFunctions.add("SECOND"); //$NON-NLS-1$
+ supportedFunctions.add("TIMESTAMPADD"); //$NON-NLS-1$
+ supportedFunctions.add("TIMESTAMPDIFF"); //$NON-NLS-1$
+ supportedFunctions.add("WEEK"); //$NON-NLS-1$
+ supportedFunctions.add("YEAR"); //$NON-NLS-1$
supportedFunctions.add("CAST"); //$NON-NLS-1$
supportedFunctions.add("CONVERT"); //$NON-NLS-1$
supportedFunctions.add("IFNULL"); //$NON-NLS-1$
@@ -115,12 +131,4 @@
return 50;
}
- /**
- * @see org.teiid.connector.basic.BasicConnectorCapabilities#supportsIntersect()
- */
- @Override
- public boolean supportsIntersect() {
- return true;
- }
-
}
Deleted: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseConvertModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseConvertModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,513 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.sybase;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.teiid.connector.jdbc.translator.BasicFunctionModifier;
-import org.teiid.connector.jdbc.translator.DropFunctionModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-import org.teiid.connector.language.ILiteral;
-
-
-/**
- */
-public class SybaseConvertModifier extends BasicFunctionModifier {
-
- private static DropFunctionModifier DROP_MODIFIER = new DropFunctionModifier();
- static {
- // index of expressions in convert functions in Sybase is one, not zero
- DROP_MODIFIER.setReplaceIndex(1);
- }
-
- private ILanguageFactory langFactory;
-
- public SybaseConvertModifier(ILanguageFactory langFactory) {
- this.langFactory = langFactory;
- }
-
- public IExpression modify(IFunction function) {
- List<IExpression> args = function.getParameters();
- IExpression modified = null;
-
- if (args.get(1) != null && args.get(1) instanceof ILiteral) {
- String target = ((String)((ILiteral)args.get(1)).getValue()).toLowerCase();
- if (target.equals("string")) { //$NON-NLS-1$
- modified = convertToString(function);
- } else if (target.equals("short")) { //$NON-NLS-1$
- modified = convertToShort(function);
- } else if (target.equals("integer")) { //$NON-NLS-1$
- modified = convertToInteger(function);
- } else if (target.equals("long")) { //$NON-NLS-1$
- modified = convertToLong(function);
- } else if (target.equals("biginteger")) { //$NON-NLS-1$
- modified = convertToBigInteger(function);
- } else if (target.equals("float")) { //$NON-NLS-1$
- modified = convertToFloat(function);
- } else if (target.equals("double")) { //$NON-NLS-1$
- modified = convertToDouble(function);
- } else if (target.equals("bigdecimal")) { //$NON-NLS-1$
- modified = convertToBigDecimal(function);
- } else if (target.equals("date")) { //$NON-NLS-1$
- modified = convertToDate(function);
- } else if (target.equals("time")) { //$NON-NLS-1$
- modified = convertToTime(function);
- } else if (target.equals("timestamp")) { //$NON-NLS-1$
- modified = convertToTimestamp(function);
- } else if (target.equals("char")) { //$NON-NLS-1$
- modified = convertToChar(function);
- } else if (target.equals("boolean")) { //$NON-NLS-1$
- modified = convertToBoolean(function);
- } else if (target.equals("byte")) { //$NON-NLS-1$
- modified = convertToByte(function);
- } else {
- modified = DROP_MODIFIER.modify(function);
- }
- return modified;
-
- }
- return DROP_MODIFIER.modify(function);
- }
-
- /*
- * @see com.metamatrix.connector.jdbc.extension.FunctionModifier#translate(com.metamatrix.data.language.IFunction)
- */
- public List translate(IFunction function) {
- List parts = new ArrayList();
- parts.add("convert("); //$NON-NLS-1$
-
- List<IExpression> args = function.getParameters();
-
- if(args != null && args.size() > 0) {
- ILiteral type = (ILiteral) args.get(0);
- String typeStr = type.getValue().toString();
-
- parts.add(typeStr);
-
- for(int i=1; i<args.size(); i++) {
- parts.add(", "); //$NON-NLS-1$
- parts.add(args.get(i));
- }
- }
- parts.add(")"); //$NON-NLS-1$
- return parts;
- }
-
- private IExpression convertToBoolean(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class src = args.get(0).getType();
- int srcCode = getSrcCode(src);
-
- switch(srcCode) {
- case STRING:
- //TODO: how to map the 'true' to '1' before it is translated to bit
- case BYTE:
- case SHORT:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- convert = createFunction(args.get(0), "bit", Boolean.class); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToByte(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class src = args.get(0).getType();
- int srcCode = getSrcCode(src);
-
- switch(srcCode) {
- case STRING:
- case BOOLEAN:
- case SHORT:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- convert = createFunction(args.get(0), "tinyint", String.class); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToString(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class src = args.get(0).getType();
- int srcCode = getSrcCode(src);
-
- switch(srcCode) {
- case CHAR:
- case BOOLEAN:
- case BYTE:
- case SHORT:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- convert = createFunction(args.get(0), "varchar", String.class); //$NON-NLS-1$
- break;
- case DATE: // convert(date, string) --> convert(varchar, date, 112)
- //TODO: what is the best format 111/110/101?
- convert = createFunction(args.get(0), 101, String.class);
- break;
- case TIME: // convert(time, string) --> convert(varchar, time, 108)
- convert = createFunction(args.get(0), 108, String.class);
- break;
- case TIMESTAMP: // convert(time, string) --> convert(varchar, timestamp, 109)
- convert = createFunction(args.get(0), 109, String.class);
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToShort(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class src = args.get(0).getType();
- int srcCode = getSrcCode(src);
-
- switch(srcCode) {
- case STRING:
- case BOOLEAN:
- case BYTE:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- convert = createFunction(args.get(0), "smallint", Short.class); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToInteger(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class src = args.get(0).getType();
- int srcCode = getSrcCode(src);
-
- switch(srcCode) {
- case STRING:
- case BOOLEAN:
- case BYTE:
- case SHORT:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- convert = createFunction(args.get(0), "int", Integer.class); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToLong(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class src = args.get(0).getType();
- int srcCode = getSrcCode(src);
-
- switch(srcCode) {
- case STRING:
- case BOOLEAN:
- case BYTE:
- case SHORT:
- case INTEGER:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- convert = createFunction(args.get(0), "numeric", Long.class); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToBigInteger(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class src = args.get(0).getType();
- int srcCode = getSrcCode(src);
-
- switch(srcCode) {
- case STRING:
- case BOOLEAN:
- case BYTE:
- case SHORT:
- case INTEGER:
- case LONG:
- case FLOAT:
- case DOUBLE:
- case BIGDECIMAL:
- convert = createFunction(args.get(0), "numeric", java.math.BigInteger.class); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToFloat(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class src = args.get(0).getType();
- int srcCode = getSrcCode(src);
-
- switch(srcCode) {
- case STRING:
- case BOOLEAN:
- case BYTE:
- case SHORT:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case DOUBLE:
- case BIGDECIMAL:
- convert = createFunction(args.get(0), "real", Float.class); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToDouble(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class src = args.get(0).getType();
- int srcCode = getSrcCode(src);
-
- switch(srcCode) {
- case STRING:
- case BOOLEAN:
- case BYTE:
- case SHORT:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case BIGDECIMAL:
- convert = createFunction(args.get(0), "float", Double.class); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToBigDecimal(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class src = args.get(0).getType();
- int srcCode = getSrcCode(src);
-
- switch(srcCode) {
- case STRING:
- case BOOLEAN:
- case BYTE:
- case SHORT:
- case INTEGER:
- case LONG:
- case BIGINTEGER:
- case FLOAT:
- case DOUBLE:
- convert = createFunction(args.get(0), "float", java.math.BigDecimal.class); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToChar(IFunction function) {
- List<IExpression> args = function.getParameters();
- return createFunction(args.get(0), "char", Character.class); //$NON-NLS-1$
- }
-
- private IExpression convertToDate(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class srcType = args.get(0).getType();
- int srcCode = getSrcCode(srcType);
-
- switch(srcCode) {
- case STRING:
- // convert(STRING, date) --> convert(datetime, STRING)
- convert = createFunction(args.get(0), "datetime", java.sql.Date.class); //$NON-NLS-1$
- break;
- case TIMESTAMP:
- // convert(TIMESTAMP, date) --> convert(datetime, convert(varchar, TIMESTAMP, 1/101))
- // Build inner convert
- IFunction innerConvert = langFactory.createFunction("convert", //$NON-NLS-1$
- Arrays.asList(
- langFactory.createLiteral("varchar", String.class), //$NON-NLS-1$
- args.get(0),
- langFactory.createLiteral(new Integer(109), Integer.class) ),
- String.class);
-
- // Build outer convert
- convert = langFactory.createFunction("convert", //$NON-NLS-1$
- Arrays.asList(
- langFactory.createLiteral("datetime", String.class), //$NON-NLS-1$
- innerConvert ),
- java.sql.Timestamp.class);
-
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToTime(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class srcType = args.get(0).getType();
-
- int srcCode = getSrcCode(srcType);
- switch(srcCode) {
- case STRING:
- //convert(STRING, time) --> convert(datetime, STRING)
- convert = createFunction(args.get(0), "datetime", java.sql.Time.class); //$NON-NLS-1$
- break;
- case TIMESTAMP:
- // convert(TIMESTAMP, time) --> convert(datetime, convert(varchar, TIMESTAMP, 108/8)
- // Build inner convert
- IFunction innerConvert = langFactory.createFunction("convert", //$NON-NLS-1$
- Arrays.asList(
- langFactory.createLiteral("varchar", String.class), //$NON-NLS-1$
- args.get(0),
- langFactory.createLiteral(new Integer(108), Integer.class) ),
- String.class);
-
- // Build outer convert
- convert = langFactory.createFunction("convert", //$NON-NLS-1$
- Arrays.asList(
- langFactory.createLiteral("datetime", String.class), //$NON-NLS-1$
- innerConvert ),
- java.sql.Time.class);
-
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IExpression convertToTimestamp(IFunction function) {
- IExpression convert = null;
- List<IExpression> args = function.getParameters();
- Class srcType = args.get(0).getType();
- int srcCode = getSrcCode(srcType);
- switch(srcCode) {
- case STRING:
- case TIME:
- case DATE:
- // convert(DATE/TIME/STRING, timestamp) --> convert(datetime, DATE)
- convert = createFunction(args.get(0), "datetime", java.sql.Timestamp.class); //$NON-NLS-1$
- break;
- default:
- convert = DROP_MODIFIER.modify(function);
- break;
- }
-
- return convert;
- }
-
- private IFunction createFunction(IExpression args0, String targetType, Class targetClass) {
- IFunction created = langFactory.createFunction("convert", //$NON-NLS-1$
- Arrays.asList(
- langFactory.createLiteral(targetType, String.class),
- args0),
- targetClass);
- return created;
- }
-
- private IFunction createFunction(IExpression args0, int formatNumber, Class targetClass) {
- IFunction created = langFactory.createFunction("convert", //$NON-NLS-1$
- Arrays.asList( langFactory.createLiteral("varchar", String.class), //$NON-NLS-1$
- args0,
- langFactory.createLiteral(new Integer(formatNumber), Integer.class) ),
- targetClass);
- return created;
- }
-
- private int getSrcCode(Class source) {
- return ((Integer) typeMap.get(source)).intValue();
- }
-
-}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseSQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseSQLTranslator.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseSQLTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -25,6 +25,7 @@
package org.teiid.connector.jdbc.sybase;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.teiid.connector.api.ConnectorCapabilities;
@@ -33,9 +34,13 @@
import org.teiid.connector.api.ExecutionContext;
import org.teiid.connector.api.SourceSystemFunctions;
import org.teiid.connector.jdbc.translator.AliasModifier;
-import org.teiid.connector.jdbc.translator.SubstringFunctionModifier;
+import org.teiid.connector.jdbc.translator.ConvertModifier;
+import org.teiid.connector.jdbc.translator.EscapeSyntaxModifier;
+import org.teiid.connector.jdbc.translator.FunctionModifier;
+import org.teiid.connector.jdbc.translator.ModFunctionModifier;
import org.teiid.connector.jdbc.translator.Translator;
import org.teiid.connector.language.ICommand;
+import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.ILimit;
import org.teiid.connector.language.IOrderBy;
import org.teiid.connector.language.IQueryCommand;
@@ -50,20 +55,102 @@
*/
public void initialize(ConnectorEnvironment env) throws ConnectorException {
super.initialize(env);
- registerFunctionModifier(SourceSystemFunctions.MOD, new ModFunctionModifier(getLanguageFactory()));
+ registerFunctionModifier(SourceSystemFunctions.MOD, new ModFunctionModifier("%", getLanguageFactory())); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.CONCAT, new AliasModifier("+")); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.LCASE, new AliasModifier("lower")); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.LENGTH, new AliasModifier(getLengthFunctionName()));
registerFunctionModifier(SourceSystemFunctions.IFNULL, new AliasModifier("isnull")); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.UCASE, new AliasModifier("upper")); //$NON-NLS-1$
- registerFunctionModifier(SourceSystemFunctions.SUBSTRING, new SubstringFunctionModifier(getLanguageFactory(), getLengthFunctionName()));
- registerFunctionModifier(SourceSystemFunctions.CONVERT, new SybaseConvertModifier(getLanguageFactory()));
+ registerFunctionModifier(SourceSystemFunctions.UCASE, new AliasModifier("upper")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.REPEAT, new AliasModifier("replicate")); //$NON-NLS-1$
+ registerFunctionModifier(SourceSystemFunctions.SUBSTRING, new SubstringFunctionModifier(getLanguageFactory()));
+ registerFunctionModifier(SourceSystemFunctions.DAYNAME, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.MONTHNAME, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.DAYOFWEEK, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.DAYOFYEAR, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.DAYOFMONTH, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.HOUR, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.MINUTE, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.QUARTER, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.SECOND, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.WEEK, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.TIMESTAMPADD, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.TIMESTAMPDIFF, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.LENGTH, new EscapeSyntaxModifier());
+ registerFunctionModifier(SourceSystemFunctions.ATAN2, new EscapeSyntaxModifier());
+
+ //add in type conversion
+ ConvertModifier convertModifier = new ConvertModifier();
+ //boolean isn't treated as bit, since it doesn't support null
+ //byte is treated as smallint, since tinyint is unsigned
+ convertModifier.addTypeMapping("smallint", FunctionModifier.BYTE, FunctionModifier.SHORT); //$NON-NLS-1$
+ convertModifier.addTypeMapping("int", FunctionModifier.INTEGER); //$NON-NLS-1$
+ convertModifier.addTypeMapping("numeric(19,0)", FunctionModifier.LONG); //$NON-NLS-1$
+ convertModifier.addTypeMapping("real", FunctionModifier.FLOAT); //$NON-NLS-1$
+ convertModifier.addTypeMapping("double precision", FunctionModifier.DOUBLE); //$NON-NLS-1$
+ convertModifier.addTypeMapping("numeric(38, 0)", FunctionModifier.BIGINTEGER); //$NON-NLS-1$
+ convertModifier.addTypeMapping("numeric(38, 19)", FunctionModifier.BIGDECIMAL); //$NON-NLS-1$
+ convertModifier.addTypeMapping("char(1)", FunctionModifier.CHAR); //$NON-NLS-1$
+ convertModifier.addTypeMapping("varchar(40)", FunctionModifier.STRING); //$NON-NLS-1$
+ convertModifier.addTypeMapping("datetime", FunctionModifier.DATE, FunctionModifier.TIME, FunctionModifier.TIMESTAMP); //$NON-NLS-1$
+ convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.TIME, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ List<Object> result = new ArrayList<Object>();
+ result.add("cast("); //$NON-NLS-1$
+ result.add("'1970-01-01 ' + "); //$NON-NLS-1$
+ result.addAll(convertTimeToString(function));
+ result.add(" AS datetime)"); //$NON-NLS-1$
+ return result;
+ }
+ });
+ convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.DATE, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ List<Object> result = new ArrayList<Object>();
+ result.add("cast("); //$NON-NLS-1$
+ result.addAll(convertDateToString(function));
+ result.add(" AS datetime)"); //$NON-NLS-1$
+ return result;
+ }
+ });
+ convertModifier.addConvert(FunctionModifier.TIME, FunctionModifier.STRING, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ return convertTimeToString(function);
+ }
+ });
+ convertModifier.addConvert(FunctionModifier.DATE, FunctionModifier.STRING, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ return convertDateToString(function);
+ }
+ });
+ convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.STRING, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ return convertTimestampToString(function);
+ }
+ });
+ convertModifier.addNumericBooleanConversions();
+ registerFunctionModifier(SourceSystemFunctions.CONVERT, convertModifier);
}
- public String getLengthFunctionName() {
- return "char_length"; //$NON-NLS-1$
- }
+ private List<Object> convertTimeToString(IFunction function) {
+ return Arrays.asList("convert(varchar, ", function.getParameters().get(0), ", 8)"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ protected List<Object> convertDateToString(IFunction function) {
+ return Arrays.asList("stuff(stuff(convert(varchar, ", function.getParameters().get(0), ", 102), 5, 1, '-'), 8, 1, '-')"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * Written to only support version 15
+ * @param function
+ * @return
+ */
+ protected List<?> convertTimestampToString(IFunction function) {
+ return Arrays.asList("stuff(convert(varchar, ", function.getParameters().get(0), ", 123), 11, 1, ' ')"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
@Override
public boolean useAsInGroupAlias() {
return false;
@@ -75,8 +162,8 @@
}
@Override
- public String getDefaultTimeYMD() {
- return "1900-01-01"; //$NON-NLS-1$
+ public int getTimestampNanoPrecision() {
+ return 3;
}
@Override
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/AliasModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/AliasModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/AliasModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -20,17 +20,15 @@
* 02110-1301 USA.
*/
-/*
- */
package org.teiid.connector.jdbc.translator;
+import java.util.List;
+
import org.teiid.connector.language.*;
-/**
- */
-public class AliasModifier extends BasicFunctionModifier {
+public class AliasModifier extends FunctionModifier {
// The alias to use
- private String alias;
+ protected String alias;
/**
* Constructor that takes the alias to use for functions.
@@ -40,12 +38,14 @@
this.alias = alias;
}
- /**
- * @see org.teiid.connector.jdbc.translator.FunctionModifier#modify(org.teiid.connector.language.IFunction)
- */
- public IExpression modify(IFunction function) {
- function.setName(alias);
- return function;
+ @Override
+ public List<?> translate(IFunction function) {
+ modify(function);
+ return null;
}
+ protected void modify(IFunction function) {
+ function.setName(alias);
+ }
+
}
Deleted: 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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/BasicFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,101 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-/*
- */
-package org.teiid.connector.jdbc.translator;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-
-
-/**
- */
-public abstract class BasicFunctionModifier implements FunctionModifier {
-
- /*
- * Public sharing part for the mapping between class and type in format of Map<class->Integer>.
- */
- public static final int STRING = 0;
- public static final int CHAR = 1;
- public static final int BOOLEAN = 2;
- public static final int BYTE = 3;
- public static final int SHORT = 4;
- public static final int INTEGER = 5;
- public static final int LONG = 6;
- public static final int BIGINTEGER = 7;
- public static final int FLOAT = 8;
- public static final int DOUBLE = 9;
- public static final int BIGDECIMAL = 10;
- public static final int DATE = 11;
- public static final int TIME = 12;
- public static final int TIMESTAMP = 13;
- public static final int OBJECT = 14;
- public static final int BLOB = 15;
- public static final int CLOB = 16;
- public static final int XML = 17;
-
- public static final Map typeMap = new HashMap();
-
- static {
- typeMap.put(TypeFacility.RUNTIME_TYPES.STRING, new Integer(STRING));
- typeMap.put(TypeFacility.RUNTIME_TYPES.CHAR, new Integer(CHAR));
- typeMap.put(TypeFacility.RUNTIME_TYPES.BOOLEAN, new Integer(BOOLEAN));
- typeMap.put(TypeFacility.RUNTIME_TYPES.BYTE, new Integer(BYTE));
- typeMap.put(TypeFacility.RUNTIME_TYPES.SHORT, new Integer(SHORT));
- typeMap.put(TypeFacility.RUNTIME_TYPES.INTEGER, new Integer(INTEGER));
- typeMap.put(TypeFacility.RUNTIME_TYPES.LONG, new Integer(LONG));
- typeMap.put(TypeFacility.RUNTIME_TYPES.BIG_INTEGER, new Integer(BIGINTEGER));
- typeMap.put(TypeFacility.RUNTIME_TYPES.FLOAT, new Integer(FLOAT));
- typeMap.put(TypeFacility.RUNTIME_TYPES.DOUBLE, new Integer(DOUBLE));
- typeMap.put(TypeFacility.RUNTIME_TYPES.BIG_DECIMAL, new Integer(BIGDECIMAL));
- typeMap.put(TypeFacility.RUNTIME_TYPES.DATE, new Integer(DATE));
- typeMap.put(TypeFacility.RUNTIME_TYPES.TIME, new Integer(TIME));
- typeMap.put(TypeFacility.RUNTIME_TYPES.TIMESTAMP, new Integer(TIMESTAMP));
- typeMap.put(TypeFacility.RUNTIME_TYPES.OBJECT, new Integer(OBJECT));
- typeMap.put(TypeFacility.RUNTIME_TYPES.BLOB, new Integer(BLOB));
- typeMap.put(TypeFacility.RUNTIME_TYPES.CLOB, new Integer(CLOB));
- typeMap.put(TypeFacility.RUNTIME_TYPES.XML, new Integer(XML));
- }
-
- /**
- * Subclass should override this method as needed.
- * @see org.teiid.connector.jdbc.translator.FunctionModifier#modify(org.teiid.connector.language.IFunction)
- */
- public IExpression modify(IFunction function) {
- return function;
- }
-
- /**
- * Subclass should override this method as needed.
- * @see org.teiid.connector.jdbc.translator.FunctionModifier#translate(org.teiid.connector.language.IFunction)
- */
- public List<?> translate(IFunction function) {
- return null;
- }
-
-}
Deleted: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/BindValueVisitor.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/BindValueVisitor.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/BindValueVisitor.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,136 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.translator;
-
-import org.teiid.connector.language.ICompareCriteria;
-import org.teiid.connector.language.IExistsCriteria;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.IInCriteria;
-import org.teiid.connector.language.IInlineView;
-import org.teiid.connector.language.IInsertExpressionValueSource;
-import org.teiid.connector.language.ILanguageObject;
-import org.teiid.connector.language.ILikeCriteria;
-import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.language.IScalarSubquery;
-import org.teiid.connector.language.ISearchedCaseExpression;
-import org.teiid.connector.language.ISetClause;
-import org.teiid.connector.language.ISubqueryCompareCriteria;
-import org.teiid.connector.visitor.framework.HierarchyVisitor;
-
-/**
- * This visitor will mark literals in well known locations as bindValues.
- * These values will be put in the generated SQL as ?
- * and have the corresponding value set on the PreparedStatement
- */
-final class BindValueVisitor extends HierarchyVisitor {
-
- private boolean replaceWithBinding = false;
-
- public void visit(IInlineView obj) {
- replaceWithBinding = false;
- visitNode(obj.getQuery());
- }
-
- public void visit(IScalarSubquery obj) {
- replaceWithBinding = false;
- super.visit(obj);
- }
-
- public void visit(IExistsCriteria obj) {
- replaceWithBinding = false;
- super.visit(obj);
- }
-
- public void visit(ISubqueryCompareCriteria obj) {
- replaceWithBinding = false;
- super.visit(obj);
- }
-
- /**
- * In general it is not appropriate to use bind values within a function
- * unless the particulars of the function parameters are know.
- * As needed, other visitors or modifiers can set the literals used within
- * a particular function as bind variables.
- */
- public void visit(IFunction obj) {
- replaceWithBinding = false;
- super.visit(obj);
- }
-
- public void visit(IInCriteria obj) {
- replaceWithBinding = true;
- visitNodes(obj.getRightExpressions());
- }
-
- public void visit(ILikeCriteria obj) {
- replaceWithBinding = true;
- visitNode(obj.getRightExpression());
- }
-
- /**
- * Note that this will only visit the right expression. In general most compares
- * involving literals will be something like element = literal (this is enforced as
- * much as possible by the QueryRewriter). In rare circumstances, it is possible to
- * have literal = literal (most notably null <> null). Using bind variables on
- * both sides of the operator is not supported by most databases.
- */
- public void visit(ICompareCriteria obj) {
- replaceWithBinding = true;
- visitNode(obj.getRightExpression());
- }
-
- /**
- * Will look for bind values in the when criteria.
- * The actual restriction for case statements seems to be that at least one branch must
- * not contain a bind variable.
- */
- public void visit(ISearchedCaseExpression obj) {
- for (int i = 0; i < obj.getWhenCount(); i++) {
- visitNode(obj.getWhenCriteria(i));
- }
- }
-
- @Override
- public void visit(IInsertExpressionValueSource obj) {
- replaceWithBinding = true;
- visitNodes(obj.getValues());
- }
-
- @Override
- public void visit(ISetClause obj) {
- replaceWithBinding = true;
- visitNode(obj.getValue());
- }
-
- public void visit(ILiteral obj) {
- if (replaceWithBinding || TranslatedCommand.isBindEligible(obj)) {
- obj.setBindValue(true);
- }
- }
-
- public void visitNode(ILanguageObject obj) {
- boolean replacementMode = replaceWithBinding;
- super.visitNode(obj);
- this.replaceWithBinding = replacementMode;
- }
-}
\ No newline at end of file
Added: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ConvertModifier.java (rev 0)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ConvertModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -0,0 +1,197 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.connector.jdbc.translator;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.api.TypeFacility;
+import org.teiid.connector.language.IExpression;
+import org.teiid.connector.language.IFunction;
+import org.teiid.connector.language.ILanguageFactory;
+import org.teiid.connector.language.ILiteral;
+
+/**
+ * Base class for handling the convert function.
+ * <p>Convert is by far the most complicated pushdown function since it actually
+ * represents a matrix of possible functions. Additionally not every source supports
+ * the same semantics as our conversions.</p>
+ * <p>Each instance of this class makes a best effort at handling converts for for a
+ * given source - compensating for differing string representation, the lack a time type
+ * etc.
+ * <p>The choice of conversion logic is as follows:
+ * <ul>
+ * <li>Look for a specific conversion between the source and target - {@link #addConvert(int, int, FunctionModifier)}</li>
+ * <li>Filter common implicit conversions</li>
+ * <li>Look for a general source conversion - {@link #addSourceConversion(FunctionModifier, int...)}</li>
+ * <li>Look for a general target conversion - {@link #addTypeConversion(FunctionModifier, int...)}</li>
+ * <li>Look for a type mapping, which will replace the target type with the given native type - {@link #addTypeMapping(String, int...)}</li>
+ * <li>Drop the conversion</li>
+ * </ul>
+ */
+public class ConvertModifier extends FunctionModifier {
+
+ public static class FormatModifier extends AliasModifier {
+
+ private String format;
+
+ public FormatModifier(String alias) {
+ super(alias);
+ }
+
+ public FormatModifier(String alias, String format) {
+ super(alias);
+ this.format = format;
+ }
+
+ @Override
+ public List<?> translate(IFunction function) {
+ modify(function);
+ if (format == null) {
+ function.getParameters().remove(1);
+ } else {
+ ((ILiteral)function.getParameters().get(1)).setValue(format);
+ }
+ return null;
+ }
+
+ }
+
+ private Map<Integer, String> typeMapping = new HashMap<Integer, String>();
+ private Map<Integer, FunctionModifier> typeModifier = new HashMap<Integer, FunctionModifier>();
+ private Map<Integer, FunctionModifier> sourceModifier = new HashMap<Integer, FunctionModifier>();
+ private Map<List<Integer>, FunctionModifier> specificConverts = new HashMap<List<Integer>, FunctionModifier>();
+ private boolean booleanNumeric;
+ private boolean wideningNumericImplicit;
+
+ public void addTypeConversion(FunctionModifier convert, int ... targetType) {
+ for (int i : targetType) {
+ this.typeModifier.put(i, convert);
+ }
+ }
+
+ public void addSourceConversion(FunctionModifier convert, int ... sourceType) {
+ for (int i : sourceType) {
+ this.sourceModifier.put(i, convert);
+ }
+ }
+
+ public void addTypeMapping(String nativeType, int ... targetType) {
+ for (int i : targetType) {
+ typeMapping.put(i, nativeType);
+ }
+ }
+
+ public void setWideningNumericImplicit(boolean wideningNumericImplicit) {
+ this.wideningNumericImplicit = wideningNumericImplicit;
+ }
+
+ public void addConvert(int sourceType, int targetType, FunctionModifier convert) {
+ specificConverts.put(Arrays.asList(sourceType, targetType), convert);
+ }
+
+ @Override
+ public List<?> translate(IFunction function) {
+ function.setName("cast"); //$NON-NLS-1$
+ int targetCode = getCode(function.getType());
+ List<IExpression> args = function.getParameters();
+ Class<?> srcType = args.get(0).getType();
+ int sourceCode = getCode(srcType);
+
+ List<Integer> convesionCode = Arrays.asList(sourceCode, targetCode);
+ FunctionModifier convert = specificConverts.get(convesionCode);
+ if (convert != null) {
+ return convert.translate(function);
+ }
+
+ boolean implicit = sourceCode == CHAR && targetCode == STRING;
+
+ if (targetCode >= BYTE && targetCode <= BIGDECIMAL) {
+ if (booleanNumeric && sourceCode == BOOLEAN) {
+ sourceCode = BYTE;
+ implicit = targetCode == BYTE;
+ }
+ implicit |= wideningNumericImplicit && sourceCode >= BYTE && sourceCode <= BIGDECIMAL && sourceCode < targetCode;
+ }
+
+ if (!implicit) {
+ convert = this.sourceModifier.get(sourceCode);
+ if (convert != null
+ && (!convert.equals(sourceModifier.get(targetCode)) || sourceCode == targetCode)) { //checks for implicit, but allows for dummy converts
+ return convert.translate(function);
+ }
+
+ convert = this.typeModifier.get(targetCode);
+ if (convert != null
+ && (!convert.equals(typeModifier.get(sourceCode)) || sourceCode == targetCode)) { //checks for implicit, but allows for dummy converts
+ return convert.translate(function);
+ }
+
+ String type = typeMapping.get(targetCode);
+
+ if (type != null
+ && (!type.equals(typeMapping.get(sourceCode)) || sourceCode == targetCode)) { //checks for implicit, but allows for dummy converts
+ ((ILiteral)function.getParameters().get(1)).setValue(type);
+ return null;
+ }
+ }
+
+ return Arrays.asList(function.getParameters().get(0));
+ }
+
+ public static IFunction createConvertFunction(ILanguageFactory langFactory, IExpression expr, String typeName) {
+ Class<?> type = TypeFacility.getDataTypeClass(typeName);
+ return langFactory.createFunction(SourceSystemFunctions.CONVERT,
+ new IExpression[] {expr, langFactory.createLiteral(typeName, type)}, type);
+ }
+
+ public void addNumericBooleanConversions() {
+ this.booleanNumeric = true;
+ //number -> boolean
+ this.addTypeConversion(new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ IExpression stringValue = function.getParameters().get(0);
+ return Arrays.asList("CASE WHEN ", stringValue, " = 0 THEN 0 WHEN ", stringValue, " IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ }, FunctionModifier.BOOLEAN);
+ this.addConvert(FunctionModifier.BOOLEAN, FunctionModifier.STRING, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ IExpression stringValue = function.getParameters().get(0);
+ return Arrays.asList("CASE WHEN ", stringValue, " = 0 THEN 'false' WHEN ", stringValue, " IS NOT NULL THEN 'true' END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ });
+ this.addConvert(FunctionModifier.STRING, FunctionModifier.BOOLEAN, new FunctionModifier() {
+ @Override
+ public List<?> translate(IFunction function) {
+ IExpression stringValue = function.getParameters().get(0);
+ return Arrays.asList("CASE WHEN ", stringValue, " IN ('false', '0') THEN 0 WHEN ", stringValue, " IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ });
+ }
+
+}
Property changes on: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ConvertModifier.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Deleted: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/DropFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/DropFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/DropFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,53 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.translator;
-
-import java.util.List;
-
-import org.teiid.connector.jdbc.JDBCPlugin;
-import org.teiid.connector.language.*;
-
-
-/**
- * This FunctionModifier will cause this function to be dropped by replacing the function
- * with (by default) the first argument of the function. Optionally, the replacement index
- * can be overridden. This modifier should only be used with functions having the
- * minimum or more number of arguments.
- */
-public class DropFunctionModifier extends BasicFunctionModifier {
-
- private int replaceIndex = 0;
-
- public void setReplaceIndex(int index) {
- this.replaceIndex = index;
- }
-
- public IExpression modify(IFunction function) {
- List<IExpression> args = function.getParameters();
- if(args.size() <= replaceIndex) {
- throw new IllegalArgumentException(JDBCPlugin.Util.getString("DropFunctionModifier.DropFunctionModifier_can_only_be_used_on_functions_with___1") + function); //$NON-NLS-1$
- }
-
- return args.get(replaceIndex);
- }
-}
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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/EscapeSyntaxModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -33,18 +33,14 @@
* driver can then convert to the correct database syntax for us.
* @since 5.0
*/
-public class EscapeSyntaxModifier extends BasicFunctionModifier {
+public class EscapeSyntaxModifier extends FunctionModifier {
- public EscapeSyntaxModifier() {
- super();
- }
-
/**
* @see org.teiid.connector.jdbc.translator.BasicFunctionModifier#translate(org.teiid.connector.language.IFunction)
* @since 5.0
*/
- public List translate(IFunction function) {
- List objs = new ArrayList();
+ public List<?> translate(IFunction function) {
+ List<Object> objs = new ArrayList<Object>();
objs.add("{fn "); //$NON-NLS-1$
objs.add(function);
objs.add("}"); //$NON-NLS-1$
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ExtractFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -37,7 +37,7 @@
* Convert the YEAR/MONTH/DAY etc. function into an equivalent Extract function.
* Format: EXTRACT(YEAR from Element) or EXTRACT(YEAR from DATE '2004-03-03')
*/
-public class ExtractFunctionModifier extends BasicFunctionModifier {
+public class ExtractFunctionModifier extends FunctionModifier {
public static final String YEAR = "YEAR"; //$NON-NLS-1$
public static final String QUARTER = "QUARTER"; //$NON-NLS-1$
public static final String MONTH = "MONTH"; //$NON-NLS-1$
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/FunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/FunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/FunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -24,29 +24,71 @@
*/
package org.teiid.connector.jdbc.translator;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
-import org.teiid.connector.language.IExpression;
+import org.teiid.connector.api.TypeFacility;
import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.ILanguageObject;
/**
- * Implementations of this interface are used to modify metamatrix functions
+ * Implementations of this interface are used to modify Teiid functions
* coming in to the connector into alternate datasource-specific language, if
* necessary.
*/
-public interface FunctionModifier {
-
- /**
- * Takes an IFunction and returns the datasource-specific IExpression,
- * or can possibly return the unmodified function parameter itself.
- * @param function
- * @return IExpression or unmodified function
- * @since 4.2
+public abstract class FunctionModifier {
+
+ /*
+ * Public sharing part for the mapping between class and type in format of Map<class->Integer>.
*/
- IExpression modify(IFunction function);
+ public static final int STRING = 0;
+ public static final int CHAR = 1;
+ public static final int BOOLEAN = 2;
+ public static final int BYTE = 3;
+ public static final int SHORT = 4;
+ public static final int INTEGER = 5;
+ public static final int LONG = 6;
+ public static final int BIGINTEGER = 7;
+ public static final int FLOAT = 8;
+ public static final int DOUBLE = 9;
+ public static final int BIGDECIMAL = 10;
+ public static final int DATE = 11;
+ public static final int TIME = 12;
+ public static final int TIMESTAMP = 13;
+ public static final int OBJECT = 14;
+ public static final int BLOB = 15;
+ public static final int CLOB = 16;
+ public static final int XML = 17;
+
+ private static final Map<Class<?>, Integer> typeMap = new HashMap<Class<?>, Integer>();
+ static {
+ typeMap.put(TypeFacility.RUNTIME_TYPES.STRING, new Integer(STRING));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.CHAR, new Integer(CHAR));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.BOOLEAN, new Integer(BOOLEAN));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.BYTE, new Integer(BYTE));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.SHORT, new Integer(SHORT));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.INTEGER, new Integer(INTEGER));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.LONG, new Integer(LONG));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.BIG_INTEGER, new Integer(BIGINTEGER));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.FLOAT, new Integer(FLOAT));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.DOUBLE, new Integer(DOUBLE));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.BIG_DECIMAL, new Integer(BIGDECIMAL));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.DATE, new Integer(DATE));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.TIME, new Integer(TIME));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.TIMESTAMP, new Integer(TIMESTAMP));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.OBJECT, new Integer(OBJECT));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.BLOB, new Integer(BLOB));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.CLOB, new Integer(CLOB));
+ typeMap.put(TypeFacility.RUNTIME_TYPES.XML, new Integer(XML));
+ }
+
+ public static int getCode(Class<?> source) {
+ return typeMap.get(source).intValue();
+ }
+
/**
* Return a List of translated parts ({@link ILanguageObject}s and Objects), or null
* if this FunctionModifier wishes to rely on the default translation of the
@@ -55,5 +97,6 @@
* @return List of translated parts, or null
* @since 4.2
*/
- List<?> translate(IFunction function);
+ public abstract List<?> translate(IFunction function);
+
}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/LocateFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -69,12 +69,11 @@
*
* @since 6.2
*/
-public class LocateFunctionModifier extends BasicFunctionModifier {
+public class LocateFunctionModifier extends AliasModifier {
public static String LOCATE = "LOCATE"; //$NON-NLS-1$
private ILanguageFactory langFactory;
- private String functionName = LOCATE;
private boolean sourceStringFirst;
/**
@@ -98,8 +97,8 @@
* @param sourceStringFirst
*/
public LocateFunctionModifier(ILanguageFactory langFactory, final String functionName, boolean sourceStringFirst) {
+ super(functionName);
this.langFactory = langFactory;
- this.functionName = functionName;
this.sourceStringFirst = sourceStringFirst;
}
@@ -142,8 +141,8 @@
*
* @param function the LOCATE function that may need to be modified
*/
- public IExpression modify(IFunction function) {
- function.setName(this.functionName);
+ public void modify(IFunction function) {
+ super.modify(function);
List<IExpression> args = function.getParameters();
IExpression searchStr = args.get(0);
IExpression sourceStr = args.get(1);
@@ -156,7 +155,6 @@
args.set(0, sourceStr);
args.set(1, searchStr);
}
- return function;
}
private IExpression ensurePositiveStartIndex(IExpression startIndex) {
Deleted: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ModFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ModFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ModFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,185 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.translator;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.teiid.connector.api.TypeFacility.RUNTIME_TYPES;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-
-/**
- * A modifier class that can be used to translate the scalar function
- * <code>mod(x, y)</code> to a function or expression that can be used at the
- * data source.
- * <p>
- * If the default implementation is used, a function name of MOD will be used
- * for the alias name and the expression will be unmodified if the data type
- * of the <code>x</code> parameter is one of {@link RUNTIME_TYPES#BYTE},
- * {@link RUNTIME_TYPES#SHORT}, {@link RUNTIME_TYPES#INTEGER}, or
- * {@link RUNTIME_TYPES#LONG}. If the data type is not one of these types, the
- * expression will be modified to return: <code>(x - (TRUNC((x / y), 0) * y))</code>
- *
- * @since 6.2
- */
-public class ModFunctionModifier extends AliasModifier {
-
- private static List<Class<?>> DEFAULT_TYPELIST = new ArrayList<Class<?>>(4);
- static {
- DEFAULT_TYPELIST.add(RUNTIME_TYPES.BYTE);
- DEFAULT_TYPELIST.add(RUNTIME_TYPES.SHORT);
- DEFAULT_TYPELIST.add(RUNTIME_TYPES.INTEGER);
- DEFAULT_TYPELIST.add(RUNTIME_TYPES.LONG);
- }
- private static String DEFAULT_FUNCTIONNAME = "MOD"; //$NON-NLS-1$
-
- private ILanguageFactory langFactory;
- private List<Class<?>> supTypeList;
-
- /**
- * Constructs a {@link AliasModifier} object that can be used to translate
- * the use of the scalar function MOD() to a source specific scalar function
- * or expression.
- * <p>
- * This constructor invokes {@link #MODFunctionModifier(ILanguageFactory, String, List)}
- * passing it <code>langFactory</code>, {@link #DEFAULT_FUNCTIONNAME}, and
- * {@link #DEFAULT_TYPELIST}.
- *
- * @param langFactory the language factory associated with translation
- */
- public ModFunctionModifier(ILanguageFactory langFactory) {
- this(langFactory, DEFAULT_FUNCTIONNAME, DEFAULT_TYPELIST);
- }
-
- /**
- * Constructs a {@link AliasModifier} object that can be used to translate
- * the use of the scalar function MOD() to a source specific scalar function
- * or expression.
- * <p>
- * <code>functionName</code> is used to construct the parent {@link AliasModifier}
- * and should represent the default function name or alias used by the data
- * source.
- * <p>
- * <code>supportedTypeList</code> should contain a list of <code>Class</code>
- * objects that represent the data types that the data source can support
- * with its implementation of the MOD() scalar function.
- *
- * @param langFactory the language factory associated with translation
- * @param functionName the function name or alias that should be used
- * instead of MOD
- * @param supportedTypeList a list of type classes that is supported by the
- * data source's MOD function
- */
- public ModFunctionModifier(ILanguageFactory langFactory, String functionName, List<Class<?>>supportedTypeList) {
- super(functionName);
- this.langFactory = langFactory;
- if ( supportedTypeList != null ) {
- this.supTypeList = supportedTypeList;
- } else {
- this.supTypeList = ModFunctionModifier.DEFAULT_TYPELIST;
- }
- }
-
- /**
- * Returns a version of <code>function</code> suitable for executing at the
- * data source.
- * <p>
- * If the data type of the parameters in <code>function</code> is in the
- * list of supported data types, this method simply returns <code>super.modify(function)</code>.
- * <p>
- * If the data type of the parameters in <code>function</code are not in the
- * list of supported data types, this method will return an expression that
- * is valid at the data source and will yield the same result as the original
- * MOD() scalar function. To build the expression, a call is make to
- * {@link #getQuotientExpression(IExpression)} and its result is multiplied
- * by the second parameter of <code>function</code> and that result is then
- * subtracted from the first parameter of <code>function</code>.
- * <p>
- * For example:
- * <code>mod(x, y) ---> (x - (getQuotientExpression((x / y)) * y))</code>
- *
- * @param function the MOD function that may need to be modified
- * @see org.teiid.connector.jdbc.translator.AliasModifier#modify(org.teiid.connector.language.IFunction)
- */
- @Override
- public IExpression modify(IFunction function) {
- List<IExpression> expressions = function.getParameters();
- IExpression dividend = expressions.get(0);
- IExpression divisor = expressions.get(1);
-
- // Check to see if parameters are supported by source MOD function
- if (this.supTypeList.contains(dividend.getType())) {
- return super.modify(function);
- }
-
- /*
- * Parameters are not supported by source MOD function so modify
- * MOD(<dividend>, <divisor>) --> (<dividend> - (<func_getQuotient((<dividend> / <divisor>))> * <divisor>))
- */
- // --> (<dividend> / <divisor>)
- IFunction divide = langFactory.createFunction("/", Arrays.asList(dividend, divisor), dividend.getType()); //$NON-NLS-1$
- // --> <func_getQuotient(<divide>)> -- i.e. TRUNC(<divide>, 0)
- IFunction quotient = (IFunction) this.getQuotientExpression(divide);
- // --> (<quotient> * <divisor>)
- List<IExpression> multiplyArgs = Arrays.asList(quotient, divisor);
- IFunction multiply = langFactory.createFunction("*", multiplyArgs, divisor.getType()); //$NON-NLS-1$
- // --> (<dividend> - <multiply>)
- List<IExpression> minusArgs = Arrays.asList(dividend, multiply);
- return langFactory.createFunction("-", minusArgs, dividend.getType()); //$NON-NLS-1$
- }
-
- /**
- * Return an expression that will result in the quotient of </code>division</code>.
- * Quotient should always be represented as an integer (no remainder).
- * <p>
- * <code>division</code> will represent simple division that may result in a
- * fraction. <code>division</code> should be returned within a helper
- * function or expression that will result in an integer return value (no
- * decimal or fraction).
- * <p>
- * If this method is not overriden, the result will be:
- * <p>
- * <ul>TRUNC(<code>division</code>, 0)</ul>
- * <p>
- * For the default TRUNC() function to work, the source must support it.
- * TRUNC was used instead of FLOOR because FLOOR rounds to the nearest
- * integer toward negative infinity. This would result in incorrect values
- * when performing MOD on negative float, double, etc. values.
- *
- * @param division an expression representing simple division
- * @return an expression that will extract the quotient from the
- * <code>division</code> expression
- */
- protected IExpression getQuotientExpression(IExpression division) {
- // --> TRUNC(<division>, 0)
- return langFactory.createFunction("TRUNC", Arrays.asList(division, langFactory.createLiteral(0, RUNTIME_TYPES.SHORT)), division.getType()); //$NON-NLS-1$
- }
-
- protected ILanguageFactory getLanguageFactory() {
- return this.langFactory;
- }
-
-}
Copied: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ModFunctionModifier.java (from rev 1276, 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/ModFunctionModifier.java (rev 0)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ModFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -0,0 +1,76 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.connector.jdbc.translator;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.api.TypeFacility;
+import org.teiid.connector.language.IExpression;
+import org.teiid.connector.language.IFunction;
+import org.teiid.connector.language.ILanguageFactory;
+
+/**
+ * Adds mod (remainder) support for non-integral types
+ */
+public class ModFunctionModifier extends AliasModifier {
+
+ private static Set<Class> SUPPORTED_TYPES = new HashSet<Class>(Arrays.asList(TypeFacility.RUNTIME_TYPES.INTEGER, TypeFacility.RUNTIME_TYPES.LONG));
+
+ private ILanguageFactory langFactory;
+
+ public ModFunctionModifier(String modFunction, ILanguageFactory langFactory) {
+ super(modFunction);
+ this.langFactory = langFactory;
+ }
+
+ @Override
+ public List<?> translate(IFunction function) {
+ List<IExpression> expressions = function.getParameters();
+ Class<?> type = function.getType();
+ if (SUPPORTED_TYPES.contains(type)) {
+ modify(function);
+ return null;
+ }
+ //x % y => x - sign(x) * floor(abs(x / y)) * y
+ IFunction divide = langFactory.createFunction(SourceSystemFunctions.DIVIDE_OP, new ArrayList<IExpression>(expressions), type);
+
+ IFunction abs = langFactory.createFunction(SourceSystemFunctions.ABS, Arrays.asList(divide), type);
+
+ IFunction floor = langFactory.createFunction(SourceSystemFunctions.FLOOR, Arrays.asList(abs), type);
+
+ IFunction sign = langFactory.createFunction(SourceSystemFunctions.SIGN, Arrays.asList(expressions.get(0)), type);
+
+ List<? extends IExpression> multArgs = Arrays.asList(sign, floor, langFactory.createFunction(SourceSystemFunctions.ABS, Arrays.asList(expressions.get(1)), type));
+ IFunction mult = langFactory.createFunction(SourceSystemFunctions.MULTIPLY_OP, multArgs, type);
+
+ List<IExpression> minusArgs = Arrays.asList(expressions.get(0), mult);
+
+ return Arrays.asList(langFactory.createFunction(SourceSystemFunctions.SUBTRACT_OP, minusArgs, type));
+ }
+
+}
Deleted: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ReplacementVisitor.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ReplacementVisitor.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/ReplacementVisitor.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,220 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.translator;
-
-import java.util.List;
-import java.util.Map;
-
-import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.api.ExecutionContext;
-import org.teiid.connector.language.IAggregate;
-import org.teiid.connector.language.ICompareCriteria;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.IGroupBy;
-import org.teiid.connector.language.IInCriteria;
-import org.teiid.connector.language.IInlineView;
-import org.teiid.connector.language.IInsertExpressionValueSource;
-import org.teiid.connector.language.IIsNullCriteria;
-import org.teiid.connector.language.ILikeCriteria;
-import org.teiid.connector.language.IQueryCommand;
-import org.teiid.connector.language.IScalarSubquery;
-import org.teiid.connector.language.ISearchedCaseExpression;
-import org.teiid.connector.language.ISelectSymbol;
-import org.teiid.connector.language.ISubqueryCompareCriteria;
-import org.teiid.connector.language.ISubqueryInCriteria;
-import org.teiid.connector.visitor.framework.AbstractLanguageVisitor;
-
-import com.metamatrix.core.MetaMatrixRuntimeException;
-
-/**
- */
-public class ReplacementVisitor extends AbstractLanguageVisitor {
-
- private Translator translator;
- private Map<String, FunctionModifier> functionModifiers;
- private ExecutionContext context;
-
- /**
- * Set the functon modifiers.
- * @param Map of function names to function modifiers.
- */
- public ReplacementVisitor(ExecutionContext context, Translator translator){
- this.translator = translator;
- this.functionModifiers = translator.getFunctionModifiers();
- this.context = context;
- }
-
- /*
- * @see com.metamatrix.data.visitor.LanguageObjectVisitor#visit(com.metamatrix.data.language.IAggregate)
- */
- public void visit(IAggregate obj) {
- obj.setExpression(replaceFunction(obj.getExpression()));
- }
-
- public void visit(IInlineView obj) {
- try {
- obj.setQuery((IQueryCommand)translator.modifyCommand(obj.getQuery(), context));
- } catch (ConnectorException e) {
- throw new MetaMatrixRuntimeException(e);
- }
- }
-
- /*
- * @see com.metamatrix.data.visitor.LanguageObjectVisitor#visit(com.metamatrix.data.language.ICompareCriteria)
- */
- public void visit(ICompareCriteria obj) {
- obj.setLeftExpression(replaceFunction(obj.getLeftExpression()));
- obj.setRightExpression(replaceFunction(obj.getRightExpression()));
- }
-
- /**
- * @see com.metamatrix.data.visitor.LanguageObjectVisitor#visit(org.teiid.connector.language.IFunction)
- */
- public void visit(IFunction obj) {
- List<IExpression> args = obj.getParameters();
- for(int i=0; i<args.size(); i++) {
- args.set(i, replaceFunction(args.get(i)));
- }
- }
-
- /**
- * @see org.teiid.connector.visitor.framework.HierarchyVisitor#visit(org.teiid.connector.language.IGroupBy)
- * @since 4.3
- */
- public void visit(IGroupBy obj) {
- List<IExpression> expressions = obj.getElements();
-
- for (int i=0; i<expressions.size(); i++) {
- IExpression expression = expressions.get(i);
- expressions.set(i, replaceFunction(expression));
- }
- }
-
- /*
- * @see com.metamatrix.data.visitor.LanguageObjectVisitor#visit(com.metamatrix.data.language.IInCriteria)
- */
- public void visit(IInCriteria obj) {
- obj.setLeftExpression(replaceFunction(obj.getLeftExpression()));
- List<IExpression> rightExprs = obj.getRightExpressions();
-
- for(int i=0; i<rightExprs.size(); i++) {
- IExpression expr = rightExprs.get(i);
- rightExprs.set(i, replaceFunction(expr));
- }
- }
-
- @Override
- public void visit(IInsertExpressionValueSource obj) {
- List<IExpression> values = obj.getValues();
-
- for(int i=0; i<values.size(); i++) {
- IExpression expr = values.get(i);
- values.set(i, replaceFunction(expr));
- }
- }
-
- /*
- * @see com.metamatrix.data.visitor.LanguageObjectVisitor#visit(com.metamatrix.data.language.IIsNullCriteria)
- */
- public void visit(IIsNullCriteria obj) {
- obj.setExpression(replaceFunction(obj.getExpression()));
- }
-
- /*
- * @see com.metamatrix.data.visitor.LanguageObjectVisitor#visit(com.metamatrix.data.language.ILikeCriteria)
- */
- public void visit(ILikeCriteria obj) {
- obj.setLeftExpression(replaceFunction(obj.getLeftExpression()));
- obj.setRightExpression(replaceFunction(obj.getRightExpression()));
- }
-
- /*
- * @see com.metamatrix.data.visitor.LanguageObjectVisitor#visit(com.metamatrix.data.language.ISearchedCaseExpression)
- */
- public void visit(ISearchedCaseExpression obj) {
- int whenCount = obj.getWhenCount();
- for(int i=0; i<whenCount; i++) {
- obj.setThenExpression(i, replaceFunction(obj.getThenExpression(i)));
- }
- obj.setElseExpression(replaceFunction(obj.getElseExpression()));
- }
-
- /*
- * @see com.metamatrix.data.visitor.LanguageObjectVisitor#visit(com.metamatrix.data.language.ISelectSymbol)
- */
- public void visit(ISelectSymbol obj) {
- obj.setExpression(replaceFunction(obj.getExpression()));
- }
-
- /*
- * @see com.metamatrix.data.visitor.LanguageObjectVisitor#visit(com.metamatrix.data.language.ISubqueryCompareCriteria)
- */
- public void visit(ISubqueryCompareCriteria obj) {
- try {
- obj.setQuery((IQueryCommand)translator.modifyCommand(obj.getQuery(), context));
- } catch (ConnectorException e) {
- throw new MetaMatrixRuntimeException(e);
- }
- obj.setLeftExpression(replaceFunction(obj.getLeftExpression()));
- }
-
- @Override
- public void visit(IScalarSubquery obj) {
- try {
- obj.setQuery((IQueryCommand)translator.modifyCommand(obj.getQuery(), context));
- } catch (ConnectorException e) {
- throw new MetaMatrixRuntimeException(e);
- }
- }
-
- /*
- * @see com.metamatrix.data.visitor.LanguageObjectVisitor#visit(com.metamatrix.data.language.ISubqueryInCriteria)
- */
- public void visit(ISubqueryInCriteria obj) {
- try {
- obj.setQuery((IQueryCommand)translator.modifyCommand(obj.getQuery(), context));
- } catch (ConnectorException e) {
- throw new MetaMatrixRuntimeException(e);
- }
- obj.setLeftExpression(replaceFunction(obj.getLeftExpression()));
- }
-
- private IExpression replaceFunction(IExpression expression) {
- if(functionModifiers != null && expression != null && expression instanceof IFunction){
- // Look for function modifier
- IFunction function = (IFunction) expression;
- String key = function.getName().toLowerCase();
- if(functionModifiers.containsKey(key)) {
- FunctionModifier modifier = functionModifiers.get(key);
-
- // Modify function and return it
- return modifier.modify(function);
- }
- }
-
- // Fall through and return original expression
- return expression;
- }
-
-}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SQLConversionVisitor.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -32,31 +32,33 @@
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import org.teiid.connector.api.ExecutionContext;
import org.teiid.connector.api.TypeFacility;
import org.teiid.connector.jdbc.translator.Translator.NullOrder;
import org.teiid.connector.language.ICommand;
+import org.teiid.connector.language.ICompareCriteria;
import org.teiid.connector.language.IFunction;
+import org.teiid.connector.language.IInCriteria;
+import org.teiid.connector.language.IInsertExpressionValueSource;
import org.teiid.connector.language.ILanguageObject;
-import org.teiid.connector.language.ILimit;
+import org.teiid.connector.language.ILikeCriteria;
import org.teiid.connector.language.ILiteral;
import org.teiid.connector.language.IOrderByItem;
import org.teiid.connector.language.IParameter;
import org.teiid.connector.language.IProcedure;
+import org.teiid.connector.language.ISearchedCaseExpression;
+import org.teiid.connector.language.ISelectSymbol;
+import org.teiid.connector.language.ISetClause;
import org.teiid.connector.language.IParameter.Direction;
import org.teiid.connector.language.ISetQuery.Operation;
-import org.teiid.connector.metadata.runtime.RuntimeMetadata;
import org.teiid.connector.visitor.util.SQLStringVisitor;
/**
* This visitor takes an ICommand and does DBMS-specific conversion on it
* to produce a SQL String. This class is expected to be subclassed.
- * Specialized instances of this class can be gotten from a SQL Translator
- * {@link Translator#getTranslationVisitor(RuntimeMetadata) using this method}.
*/
public class SQLConversionVisitor extends SQLStringVisitor{
@@ -74,6 +76,8 @@
private Set<ILanguageObject> recursionObjects = Collections.newSetFromMap(new IdentityHashMap<ILanguageObject, Boolean>());
+ private boolean replaceWithBinding = false;
+
public SQLConversionVisitor(Translator translator) {
this.translator = translator;
this.prepared = translator.usePreparedStatements();
@@ -81,47 +85,36 @@
@Override
public void append(ILanguageObject obj) {
- if ((obj instanceof IFunction || obj instanceof ICommand || obj instanceof ILimit) && !recursionObjects.contains(obj)) {
- recursionObjects.add(obj);
- try {
- List<?> parts = null;
- if (obj instanceof IFunction) {
- IFunction function = (IFunction)obj;
- Map<String, FunctionModifier> functionModifiers = translator.getFunctionModifiers();
- if (functionModifiers != null) {
- FunctionModifier modifier = functionModifiers.get(function.getName().toLowerCase());
- if (modifier != null) {
- parts = modifier.translate(function);
- }
- }
- } else if (obj instanceof ICommand) {
- parts = translator.translateCommand((ICommand)obj, context);
- } else if (obj instanceof ILimit) {
- parts = translator.translateLimit((ILimit)obj, context);
- }
- if (parts != null) {
- this.appendParts(parts);
- return;
- }
- } finally {
- recursionObjects.remove(obj);
- }
- }
- super.append(obj);
+ boolean replacementMode = replaceWithBinding;
+ if (obj instanceof ICommand || obj instanceof IFunction) {
+ /*
+ * In general it is not appropriate to use bind values within a function
+ * unless the particulars of the function parameters are know.
+ * As needed, other visitors or modifiers can set the literals used within
+ * a particular function as bind variables.
+ */
+ this.replaceWithBinding = false;
+ }
+ List<?> parts = null;
+ if (!recursionObjects.contains(obj)) {
+ parts = translator.translate(obj, context);
+ }
+ if (parts != null) {
+ recursionObjects.add(obj);
+ for (Object part : parts) {
+ if(part instanceof ILanguageObject) {
+ append((ILanguageObject)part);
+ } else {
+ buffer.append(part);
+ }
+ }
+ recursionObjects.remove(obj);
+ } else {
+ super.append(obj);
+ }
+ this.replaceWithBinding = replacementMode;
}
- private void appendParts(List parts) {
- Iterator iter = parts.iterator();
- while(iter.hasNext()) {
- Object part = iter.next();
- if(part instanceof ILanguageObject) {
- append((ILanguageObject)part);
- } else {
- buffer.append(part);
- }
- }
- }
-
@Override
public void visit(IOrderByItem obj) {
super.visit(obj);
@@ -203,14 +196,56 @@
* @see org.teiid.connector.visitor.util.SQLStringVisitor#visit(org.teiid.connector.language.ILiteral)
*/
public void visit(ILiteral obj) {
- if (this.prepared && obj.isBindValue()) {
+ if (this.prepared && (replaceWithBinding || TranslatedCommand.isBindEligible(obj) || obj.isBindValue())) {
buffer.append(UNDEFINED_PARAM);
preparedValues.add(obj);
} else {
translateSQLType(obj.getType(), obj.getValue(), buffer);
}
}
+
+ @Override
+ public void visit(IInCriteria obj) {
+ replaceWithBinding = true;
+ super.visit(obj);
+ }
+ @Override
+ public void visit(ILikeCriteria obj) {
+ replaceWithBinding = true;
+ super.visit(obj);
+ }
+
+ @Override
+ public void visit(ICompareCriteria obj) {
+ replaceWithBinding = true;
+ super.visit(obj);
+ }
+
+ @Override
+ public void visit(IInsertExpressionValueSource obj) {
+ replaceWithBinding = true;
+ super.visit(obj);
+ }
+
+ @Override
+ public void visit(ISetClause obj) {
+ replaceWithBinding = true;
+ super.visit(obj);
+ }
+
+ @Override
+ public void visit(ISelectSymbol obj) {
+ replaceWithBinding = false;
+ super.visit(obj);
+ }
+
+ @Override
+ public void visit(ISearchedCaseExpression obj) {
+ replaceWithBinding = false;
+ super.visit(obj);
+ }
+
/**
* Set the per-command execution context on this visitor.
* @param context ExecutionContext
@@ -323,4 +358,5 @@
protected boolean useParensForJoins() {
return translator.useParensForJoins();
}
+
}
Deleted: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SubstringFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SubstringFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/SubstringFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,58 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.translator;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-
-
-/**
- * Common logic for Substring modifiers requiring 3 parameters
- */
-public class SubstringFunctionModifier extends BasicFunctionModifier {
-
- private ILanguageFactory languageFactory;
- private String length_function;
-
- public SubstringFunctionModifier(ILanguageFactory languageFactory, String length_function) {
- this.languageFactory = languageFactory;
- this.length_function = length_function;
- }
-
- /**
- * @see org.teiid.connector.jdbc.translator.FunctionModifier#modify(com.metamatrix.query.sql.symbol.Function)
- */
- public IExpression modify(IFunction function) {
- List<IExpression> args = function.getParameters();
-
- if(args.size() == 2) {
- args.add(languageFactory.createFunction(length_function, Arrays.asList(args.get(0)), Integer.class));
- }
-
- return function;
- }
-}
\ No newline at end of file
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/TranslatedCommand.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/TranslatedCommand.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/TranslatedCommand.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -31,7 +31,6 @@
import org.teiid.connector.api.TypeFacility;
import org.teiid.connector.language.ICommand;
import org.teiid.connector.language.ILiteral;
-import org.teiid.connector.visitor.framework.DelegatingHierarchyVisitor;
import org.teiid.connector.visitor.util.CollectorVisitor;
@@ -47,8 +46,6 @@
private List preparedValues;
private SQLConversionVisitor sqlConversionVisitor;
- private ReplacementVisitor functionVisitor;
- private ExecutionContext context;
private Translator sqlTranslator;
/**
@@ -56,11 +53,9 @@
* @param visitor a SQLConversionVisitor subclass
*/
public TranslatedCommand(ExecutionContext context, Translator sqlTranslator){
- this.context = context;
this.sqlTranslator = sqlTranslator;
this.sqlConversionVisitor = sqlTranslator.getSQLConversionVisitor();
this.sqlConversionVisitor.setExecutionContext(context);
- this.functionVisitor = new ReplacementVisitor(context, sqlTranslator);
}
/**
@@ -76,14 +71,9 @@
this.prepared = this.sqlConversionVisitor.isPrepared();
}
- private String getSQL(ICommand command) throws ConnectorException {
- command = sqlTranslator.modifyCommand(command, context);
- command.acceptVisitor(new DelegatingHierarchyVisitor(null, this.functionVisitor));
-
+ private String getSQL(ICommand command) {
if (sqlTranslator.usePreparedStatements() || hasBindValue(command)) {
this.sqlConversionVisitor.setPrepared(true);
-
- command.acceptVisitor(new BindValueVisitor());
}
this.sqlConversionVisitor.append(command);
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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/translator/Translator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -49,6 +49,7 @@
import org.teiid.connector.jdbc.JDBCPlugin;
import org.teiid.connector.jdbc.JDBCPropertyNames;
import org.teiid.connector.language.ICommand;
+import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.ILanguageFactory;
import org.teiid.connector.language.ILanguageObject;
import org.teiid.connector.language.ILimit;
@@ -183,15 +184,30 @@
public final ILanguageFactory getLanguageFactory() {
return environment.getLanguageFactory();
}
-
+
/**
- * Modify the command.
+ * Return a List of translated parts ({@link ILanguageObject}s and Objects), or null
+ * if to rely on the default translation. Override with care.
* @param command
* @param context
* @return
*/
- public ICommand modifyCommand(ICommand command, ExecutionContext context) throws ConnectorException {
- return command;
+ public List<?> translate(ILanguageObject obj, ExecutionContext context) {
+ List<?> parts = null;
+ if (obj instanceof IFunction) {
+ IFunction function = (IFunction)obj;
+ if (functionModifiers != null) {
+ FunctionModifier modifier = functionModifiers.get(function.getName().toLowerCase());
+ if (modifier != null) {
+ parts = modifier.translate(function);
+ }
+ }
+ } else if (obj instanceof ICommand) {
+ parts = translateCommand((ICommand)obj, context);
+ } else if (obj instanceof ILimit) {
+ parts = translateLimit((ILimit)obj, context);
+ }
+ return parts;
}
/**
@@ -270,7 +286,7 @@
*/
public String translateLiteralTime(Time timeValue) {
if (!hasTimeType()) {
- return "{ts'"+ getDefaultTimeYMD()+ " " + formatDateValue(timeValue) + "'}"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ return "{ts'1970-01-01 " + formatDateValue(timeValue) + "'}"; //$NON-NLS-1$ //$NON-NLS-2$
}
return "{t'" + formatDateValue(timeValue) + "'}"; //$NON-NLS-1$ //$NON-NLS-2$
}
@@ -301,7 +317,7 @@
Timestamp ts = (Timestamp)dateObject;
Timestamp newTs = new Timestamp(ts.getTime());
if (getTimestampNanoPrecision() > 0) {
- int mask = 10^(9-getTimestampNanoPrecision());
+ int mask = (int)Math.pow(10, 9-getTimestampNanoPrecision());
newTs.setNanos(ts.getNanos()/mask*mask);
} else {
newTs.setNanos(0);
@@ -359,10 +375,6 @@
return true;
}
- public String getDefaultTimeYMD() {
- return "1970-01-01"; //$NON-NLS-1$
- }
-
/**
* Returns the name for a given {@link ISetQuery.Operation}
* @param operation
@@ -487,7 +499,7 @@
* @param cal
* @throws SQLException
*/
- public void bindValue(PreparedStatement stmt, Object param, Class paramType, int i) throws SQLException {
+ public void bindValue(PreparedStatement stmt, Object param, Class<?> paramType, int i) throws SQLException {
int type = TypeFacility.getSQLTypeFromRuntimeType(paramType);
if (param == null) {
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2ConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2ConvertModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2ConvertModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -28,16 +28,14 @@
import java.util.Arrays;
import java.util.Properties;
+import junit.framework.TestCase;
+
import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.jdbc.db2.DB2ConvertModifier;
-import org.teiid.connector.jdbc.db2.DB2SQLTranslator;
import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
import org.teiid.connector.language.IExpression;
import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.ILanguageFactory;
-import junit.framework.TestCase;
-
import com.metamatrix.cdk.CommandBuilder;
import com.metamatrix.cdk.api.EnvironmentUtility;
import com.metamatrix.query.unittest.TimestampUtil;
@@ -72,20 +70,17 @@
LANG_FACTORY.createLiteral(tgtType, String.class)),
TypeFacility.getDataTypeClass(tgtType));
- DB2ConvertModifier mod = new DB2ConvertModifier(LANG_FACTORY);
- IExpression expr = mod.modify(func);
-
assertEquals("Error converting from " + srcExpression.getType() + " to " + tgtType, //$NON-NLS-1$ //$NON-NLS-2$
- expectedExpression, helpGetString(expr));
+ expectedExpression, helpGetString(func));
}
// Source = STRING
public void testStringToChar() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "char", "char('5', 1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral("5", String.class), "char", "cast('5' AS char(1))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
public void testStringToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "boolean", "CASE WHEN '5' = 'true' THEN 1 ELSE 0 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral("5", String.class), "boolean", "CASE WHEN '5' IN ('false', '0') THEN 0 WHEN '5' IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
public void testStringToByte() throws Exception {
@@ -105,11 +100,11 @@
}
public void testStringToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "biginteger", "bigint('5')"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral("5", String.class), "biginteger", "cast('5' AS numeric(31,0))"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
}
public void testStringToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "float", "real('5')");//$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral("5", String.class), "float", "cast(double('5') as real)");//$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
}
public void testStringToDouble() throws Exception {
@@ -129,7 +124,7 @@
}
public void testStringToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "bigdecimal", "decimal('5')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral("5", String.class), "bigdecimal", "cast('5' AS numeric(31,12))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
// Source = CHAR
@@ -141,7 +136,7 @@
// Source = BOOLEAN
public void testBooleanToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "string", "CASE WHEN 1 = 0 THEN 'false' ELSE 'true' END"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "string", "CASE WHEN 1 = 0 THEN 'false' WHEN 1 IS NOT NULL THEN 'true' END"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testBooleanToByte() throws Exception {
@@ -153,27 +148,27 @@
}
public void testBooleanToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "integer", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "integer", "integer(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testBooleanToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "long", "bigint(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testBooleanToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "biginteger", "cast(1 AS numeric(31,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testBooleanToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "float", "cast(1 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testBooleanToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "double", "double(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testBooleanToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "bigdecimal", "cast(1 AS numeric(31,12))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = BYTE
@@ -183,7 +178,7 @@
}
public void testByteToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "boolean", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "boolean", "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testByteToShort() throws Exception {
@@ -191,27 +186,27 @@
}
public void testByteToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "integer", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "integer", "integer(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testByteToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "long", "bigint(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testByteToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "biginteger", "cast(1 AS numeric(31,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testByteToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "float", "cast(1 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testByteToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "double", "double(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testByteToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "bigdecimal", "cast(1 AS numeric(31,12))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = SHORT
@@ -221,7 +216,7 @@
}
public void testShortToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "boolean", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "boolean", "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testShortToByte() throws Exception {
@@ -229,27 +224,27 @@
}
public void testShortToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "integer", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "integer", "integer(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testShortToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "long", "bigint(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testShortToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "biginteger", "cast(1 AS numeric(31,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testShortToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "float", "cast(1 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testShortToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "double", "double(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testShortToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "bigdecimal", "cast(1 AS numeric(31,12))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = INTEGER
@@ -259,7 +254,7 @@
}
public void testIntegerToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "boolean", "smallint(1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "boolean", "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testIntegerToByte() throws Exception {
@@ -271,23 +266,23 @@
}
public void testIntegerToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "long", "bigint(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testIntegerToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "biginteger", "cast(1 AS numeric(31,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testIntegerToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "float", "cast(1 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testIntegerToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "double", "double(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testIntegerToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "bigdecimal", "cast(1 AS numeric(31,12))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = LONG
@@ -297,7 +292,7 @@
}
public void testLongToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "boolean", "smallint(1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "boolean", "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testLongToByte() throws Exception {
@@ -313,19 +308,19 @@
}
public void testLongToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "biginteger", "cast(1 AS numeric(31,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testLongToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "float", "cast(1 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testLongToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "double", "double(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testLongToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "bigdecimal", "cast(1 AS numeric(31,12))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = BIGINTEGER
@@ -335,7 +330,7 @@
}
public void testBigIntegerToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "boolean", "smallint(1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "boolean", "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
public void testBigIntegerToByte() throws Exception {
@@ -351,19 +346,19 @@
}
public void testBigIntegerToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "long", "bigint(1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
public void testBigIntegerToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "float", "cast(1 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
public void testBigIntegerToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "double", "double(1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
public void testBigIntegerToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "bigdecimal", "cast(1 AS numeric(31,12))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
// Source = FLOAT
@@ -373,7 +368,7 @@
}
public void testFloatToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "boolean", "smallint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "boolean", "CASE WHEN 1.2 = 0 THEN 0 WHEN 1.2 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testFloatToByte() throws Exception {
@@ -393,15 +388,15 @@
}
public void testFloatToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "biginteger", "bigint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "biginteger", "cast(1.2 AS numeric(31,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testFloatToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "double", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "double", "double(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testFloatToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "bigdecimal", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "bigdecimal", "cast(1.2 AS numeric(31,12))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = DOUBLE
@@ -411,7 +406,7 @@
}
public void testDoubleToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "boolean", "smallint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "boolean", "CASE WHEN 1.2 = 0 THEN 0 WHEN 1.2 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testDoubleToByte() throws Exception {
@@ -431,15 +426,15 @@
}
public void testDoubleToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "biginteger", "bigint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "biginteger", "cast(1.2 AS numeric(31,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testDoubleToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "float", "real(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "float", "cast(1.2 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void testDoubleToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "bigdecimal", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "bigdecimal", "cast(1.2 AS numeric(31,12))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = BIGDECIMAL
@@ -449,7 +444,7 @@
}
public void testBigDecimalToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "boolean", "smallint(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "boolean", "CASE WHEN 1.0 = 0 THEN 0 WHEN 1.0 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
public void testBigDecimalToByte() throws Exception {
@@ -469,15 +464,15 @@
}
public void testBigDecimalToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "biginteger", "bigint(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "biginteger", "cast(1.0 AS numeric(31,0))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
public void testBigDecimalToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "float", "real(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "float", "cast(1.0 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigDecimalToDoublel() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "double", "1.0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ public void testBigDecimalToDouble() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "double", "double(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
// Source = DATE
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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/db2/TestDB2SqlTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -110,8 +110,8 @@
@Test
public void testSelectNullLiteral() throws Exception {
- String input = "select null + 1 as x, null || 'a' from BQT1.Smalla"; //$NON-NLS-1$
- String output = "SELECT CAST(NULL AS INTEGER) AS x, CAST(NULL AS CHAR) FROM SmallA"; //$NON-NLS-1$
+ String input = "select null + 1 as x, null || 'a', char(null) from BQT1.Smalla"; //$NON-NLS-1$
+ String output = "SELECT cast(NULL AS integer) AS x, cast(NULL AS char), cast(NULL AS char(1)) FROM SmallA"; //$NON-NLS-1$
helpTestVisitor(FakeTranslationFactory.getInstance().getBQTTranslationUtility(),
input,
Deleted: 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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/derby/TestDerbyConvertModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,523 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.derby;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.sql.Timestamp;
-import java.util.Arrays;
-import java.util.Properties;
-
-import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.jdbc.derby.DerbyConvertModifier;
-import org.teiid.connector.jdbc.derby.DerbySQLTranslator;
-import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-
-import junit.framework.TestCase;
-
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
-import com.metamatrix.query.unittest.TimestampUtil;
-
-/**
- */
-public class TestDerbyConvertModifier extends TestCase {
-
- private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
-
- /**
- * Constructor for TestSybaseConvertModifier.
- * @param name
- */
- public TestDerbyConvertModifier(String name) {
- super(name);
- }
-
- public String helpGetString(IExpression expr) throws Exception {
- DerbySQLTranslator trans = new DerbySQLTranslator();
- trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
-
- SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor();
- sqlVisitor.append(expr);
-
- return sqlVisitor.toString();
- }
-
- public void helpTest(IExpression srcExpression, String tgtType, String expectedExpression) throws Exception {
- IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
- Arrays.asList(
- srcExpression,
- LANG_FACTORY.createLiteral(tgtType, String.class)),
- TypeFacility.getDataTypeClass(tgtType));
-
- DerbyConvertModifier mod = new DerbyConvertModifier(LANG_FACTORY);
- IExpression expr = mod.modify(func);
-
- assertEquals("Error converting from " + srcExpression.getType() + " to " + tgtType, //$NON-NLS-1$ //$NON-NLS-2$
- expectedExpression, helpGetString(expr));
- }
-
- // Source = STRING
-
- public void testStringToChar() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "char", "char('5', 1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testStringToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "boolean", "CASE WHEN '5' = 'true' THEN 1 ELSE 0 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testStringToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "byte", "smallint('5')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testStringToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "short", "smallint('5')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testStringToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "integer", "integer('5')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testStringToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "long", "bigint('5')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testStringToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "biginteger", "bigint('5')"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
- }
-
- 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$
- }
-
- 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$
- }
-
- public void testStringToDate() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("2004-06-29", String.class), "date", "date('2004-06-29')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testStringToTime() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("23:59:59", String.class), "time", "time('23:59:59')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testStringToTimestamp() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("2004-06-29 23:59:59.987", String.class), "timestamp", "timestamp('2004-06-29 23:59:59.987')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- 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$
- }
-
- // Source = CHAR
-
- public void testCharToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Character('5'), Character.class), "string", "'5'"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- // Source = BOOLEAN
-
- public void testBooleanToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "string", "CASE WHEN 1 = 0 THEN 'false' ELSE 'true' END"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testBooleanToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "byte", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testBooleanToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "short", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testBooleanToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "integer", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testBooleanToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testBooleanToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testBooleanToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testBooleanToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testBooleanToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- // Source = BYTE
-
- public void testByteToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "string", "char(1)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testByteToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "boolean", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testByteToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "short", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testByteToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "integer", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testByteToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testByteToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testByteToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testByteToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testByteToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- // Source = SHORT
-
- public void testShortToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "string", "char(1)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testShortToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "boolean", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testShortToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "byte", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testShortToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "integer", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testShortToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testShortToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testShortToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testShortToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testShortToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- // Source = INTEGER
-
- public void testIntegerToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "string", "char(1)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testIntegerToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "boolean", "smallint(1)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testIntegerToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "byte", "smallint(1)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testIntegerToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "short", "smallint(1)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testIntegerToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testIntegerToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testIntegerToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testIntegerToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testIntegerToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- // Source = LONG
-
- public void testLongToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "string", "char(1)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testLongToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "boolean", "smallint(1)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testLongToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "byte", "smallint(1)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testLongToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "short", "smallint(1)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testLongToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "integer", "integer(1)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testLongToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testLongToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testLongToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testLongToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- // Source = BIGINTEGER
-
- public void testBigIntegerToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "string", "char(1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigIntegerToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "boolean", "smallint(1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigIntegerToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "byte", "smallint(1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigIntegerToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "short", "smallint(1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigIntegerToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "integer", "integer(1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigIntegerToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigIntegerToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigIntegerToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigIntegerToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- // Source = FLOAT
-
- public void testFloatToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "string", "char(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testFloatToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "boolean", "smallint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testFloatToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "byte", "smallint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testFloatToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "short", "smallint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testFloatToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "integer", "integer(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testFloatToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "long", "bigint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testFloatToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "biginteger", "bigint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testFloatToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "double", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testFloatToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "bigdecimal", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- // Source = DOUBLE
-
- public void testDoubleToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "string", "char(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testDoubleToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "boolean", "smallint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testDoubleToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "byte", "smallint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testDoubleToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "short", "smallint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testDoubleToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "integer", "integer(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testDoubleToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "long", "bigint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testDoubleToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "biginteger", "bigint(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- 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$
- }
-
- public void testDoubleToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "bigdecimal", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- // Source = BIGDECIMAL
-
- public void testBigDecimalToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "string", "char(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigDecimalToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "boolean", "smallint(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigDecimalToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "byte", "smallint(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigDecimalToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "short", "smallint(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigDecimalToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "integer", "integer(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigDecimalToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "long", "bigint(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public void testBigDecimalToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "biginteger", "bigint(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- 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$
- }
-
- public void testBigDecimalToDoublel() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "double", "1.0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- // Source = DATE
-
- public void testDateToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createDate(103, 10, 1), java.sql.Date.class), "string", "char({d'2003-11-01'})"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testDateToTimestamp() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createDate(103, 10, 1), java.sql.Date.class), "timestamp", "timestamp({d'2003-11-01'}, '00:00:00')"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- // Source = TIME
-
- public void testTimeToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createTime(23, 59, 59), java.sql.Time.class), "string", "char({t'23:59:59'})"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testTimeToTimestamp() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createTime(23, 59, 59), java.sql.Time.class), "timestamp", "timestamp('1970-01-01', {t'23:59:59'})"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- // Source = TIMESTAMP
-
- public void testTimestampToString() throws Exception {
- Timestamp ts = TimestampUtil.createTimestamp(103, 10, 1, 12, 5, 2, 0);
- helpTest(LANG_FACTORY.createLiteral(ts, Timestamp.class), "string", "char({ts'2003-11-01 12:05:02.0'})"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testTimestampToDate() throws Exception {
- Timestamp ts = TimestampUtil.createTimestamp(103, 10, 1, 12, 5, 2, 0);
- helpTest(LANG_FACTORY.createLiteral(ts, Timestamp.class), "date", "date({ts'2003-11-01 12:05:02.0'})"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- public void testTimestampToTime() throws Exception {
- Timestamp ts = TimestampUtil.createTimestamp(103, 10, 1, 12, 5, 2, 0);
- helpTest(LANG_FACTORY.createLiteral(ts, Timestamp.class), "time", "time({ts'2003-11-01 12:05:02.0'})"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
-
-}
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/derby/TestDerbySQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/derby/TestDerbySQLTranslator.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/derby/TestDerbySQLTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -66,28 +66,8 @@
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,
- 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,
- output);
- }
-
- @Test
public void testConcat_useLiteral() throws Exception {
String input = "select concat(stringnum,'_xx') from BQT1.Smalla"; //$NON-NLS-1$
String output = "SELECT {fn concat(SmallA.StringNum, '_xx')} FROM SmallA"; //$NON-NLS-1$
@@ -129,133 +109,4 @@
output);
}
- @Test
- public void testSelectNullLiteral() throws Exception {
- String input = "select null + 1 as x, null || 'a' from BQT1.Smalla"; //$NON-NLS-1$
- String output = "SELECT CAST(NULL AS INTEGER) AS x, CAST(NULL AS CHAR) FROM SmallA"; //$NON-NLS-1$
-
- helpTestVisitor(FakeTranslationFactory.getInstance().getBQTTranslationUtility(),
- input,
- output);
- }
-
- /**
- * Test the translator's ability to rewrite the LOCATE() function in a form
- * suitable for the data source.
- * <p>
- * <code>SELECT locate(INTNUM, 'chimp', 1) FROM BQT1.SMALLA</code>
- *
- * @throws Exception
- */
- @Test public void testLocate() throws Exception {
- String input = "SELECT locate(INTNUM, 'chimp', 1) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT LOCATE(char(SmallA.IntNum), 'chimp', 1) FROM SmallA"; //$NON-NLS-1$
-
- MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
- input, output,
- TRANSLATOR);
- }
-
- /**
- * Test the translator's ability to rewrite the LOCATE() function in a form
- * suitable for the data source.
- * <p>
- * <code>SELECT locate(STRINGNUM, 'chimp') FROM BQT1.SMALLA</code>
- *
- * @throws Exception
- */
- @Test public void testLocate2() throws Exception {
- String input = "SELECT locate(STRINGNUM, 'chimp') FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT LOCATE(SmallA.StringNum, 'chimp') FROM SmallA"; //$NON-NLS-1$
-
- MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
- input, output,
- TRANSLATOR);
- }
-
- /**
- * Test the translator's ability to rewrite the LOCATE() function in a form
- * suitable for the data source.
- * <p>
- * <code>SELECT locate(INTNUM, '234567890', 1) FROM BQT1.SMALLA WHERE INTKEY = 26</code>
- *
- * @throws Exception
- */
- @Test public void testLocate3() throws Exception {
- String input = "SELECT locate(INTNUM, '234567890', 1) FROM BQT1.SMALLA WHERE INTKEY = 26"; //$NON-NLS-1$
- String output = "SELECT LOCATE(char(SmallA.IntNum), '234567890', 1) FROM SmallA WHERE SmallA.IntKey = 26"; //$NON-NLS-1$
-
- MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
- input, output,
- TRANSLATOR);
- }
-
- /**
- * Test the translator's ability to rewrite the LOCATE() function in a form
- * suitable for the data source.
- * <p>
- * <code>SELECT locate('c', 'chimp', 1) FROM BQT1.SMALLA</code>
- *
- * @throws Exception
- */
- @Test public void testLocate4() throws Exception {
- String input = "SELECT locate('c', 'chimp', 1) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT 1 FROM SmallA"; //$NON-NLS-1$
-
- MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
- input, output,
- TRANSLATOR);
- }
-
- /**
- * Test the translator's ability to rewrite the LOCATE() function in a form
- * suitable for the data source.
- * <p>
- * <code>SELECT locate(STRINGNUM, 'chimp', -5) FROM BQT1.SMALLA</code>
- *
- * @throws Exception
- */
- @Test public void testLocate5() throws Exception {
- String input = "SELECT locate(STRINGNUM, 'chimp', -5) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT LOCATE(SmallA.StringNum, 'chimp', 1) FROM SmallA"; //$NON-NLS-1$
-
- MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
- input, output,
- TRANSLATOR);
- }
-
- /**
- * Test the translator's ability to rewrite the LOCATE() function in a form
- * suitable for the data source.
- * <p>
- * <code>SELECT locate(STRINGNUM, 'chimp', INTNUM) FROM BQT1.SMALLA</code>
- *
- * @throws Exception
- */
- @Test public void testLocate6() throws Exception {
- String input = "SELECT locate(STRINGNUM, 'chimp', INTNUM) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT LOCATE(SmallA.StringNum, 'chimp', CASE WHEN SmallA.IntNum < 1 THEN 1 ELSE SmallA.IntNum END) FROM SmallA"; //$NON-NLS-1$
-
- MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
- input, output,
- TRANSLATOR);
- }
-
- /**
- * Test the translator's ability to rewrite the LOCATE() function in a form
- * suitable for the data source.
- * <p>
- * <code>SELECT locate(STRINGNUM, 'chimp', LOCATE(STRINGNUM, 'chimp') + 1) FROM BQT1.SMALLA</code>
- *
- * @throws Exception
- */
- @Test public void testLocate7() throws Exception {
- String input = "SELECT locate(STRINGNUM, 'chimp', LOCATE(STRINGNUM, 'chimp') + 1) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT LOCATE(SmallA.StringNum, 'chimp', CASE WHEN (LOCATE(SmallA.StringNum, 'chimp') + 1) < 1 THEN 1 ELSE (LOCATE(SmallA.StringNum, 'chimp') + 1) END) FROM SmallA"; //$NON-NLS-1$
-
- MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
- input, output,
- TRANSLATOR);
- }
-
}
Deleted: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/extension/impl/TestDropFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/extension/impl/TestDropFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/extension/impl/TestDropFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,76 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.extension.impl;
-
-import java.util.Arrays;
-
-import org.teiid.connector.jdbc.translator.DropFunctionModifier;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILiteral;
-
-import junit.framework.TestCase;
-
-import com.metamatrix.cdk.CommandBuilder;
-
-/**
- */
-public class TestDropFunctionModifier extends TestCase {
-
- /**
- * Constructor for TestDropFunctionModifier.
- * @param name
- */
- public TestDropFunctionModifier(String name) {
- super(name);
- }
-
- public void testDrop() {
- DropFunctionModifier mod = new DropFunctionModifier();
-
- ILiteral arg1 = CommandBuilder.getLanuageFactory().createLiteral(new Integer(5), Integer.class);
- ILiteral arg2 = CommandBuilder.getLanuageFactory().createLiteral("string", String.class);//$NON-NLS-1$
- IFunction func = CommandBuilder.getLanuageFactory().createFunction("convert", Arrays.asList(arg1, arg2), Integer.class); //$NON-NLS-1$
-
- IExpression output = mod.modify(func);
- assertEquals("Did not get expected function after using drop modifier", arg1, output); //$NON-NLS-1$
- }
-
- /**
- * In SQL Server convert(), the type arg is the first arg, and the column name
- * is the second arg. DropFunctionModifier needs to be able to handle the column name
- * arg being in different indices.
- */
- public void testDrop2() {
- DropFunctionModifier mod = new DropFunctionModifier();
- mod.setReplaceIndex(1);
-
- ILiteral arg1 = CommandBuilder.getLanuageFactory().createLiteral("string", String.class);//$NON-NLS-1$
- ILiteral arg2 = CommandBuilder.getLanuageFactory().createLiteral(new Integer(5), Integer.class);
- IFunction func = CommandBuilder.getLanuageFactory().createFunction("convert", Arrays.asList(arg1, arg2), Integer.class); //$NON-NLS-1$
-
- IExpression output = mod.modify(func);
- assertEquals("Did not get expected function after using drop modifier", arg2, output); //$NON-NLS-1$
- }
-
-}
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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/extension/impl/TestEscapeSyntaxModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -68,7 +68,6 @@
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) {
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -52,7 +52,7 @@
@Test public void testConversion1() throws Exception {
String input = "SELECT char(convert(PART_WEIGHT, integer) + 100) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT char((convert(PARTS.PART_WEIGHT, SIGNED INTEGER) + 100)) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT char((cast(PARTS.PART_WEIGHT AS signed) + 100)) FROM PARTS"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(getTestVDB(),
input,
@@ -61,7 +61,7 @@
@Test public void testConversion2() throws Exception {
String input = "SELECT convert(PART_WEIGHT, long) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT convert(PARTS.PART_WEIGHT, SIGNED) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(PARTS.PART_WEIGHT AS signed) FROM PARTS"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(getTestVDB(),
input,
@@ -70,7 +70,7 @@
@Test public void testConversion3() throws Exception {
String input = "SELECT convert(convert(PART_WEIGHT, long), string) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT convert(convert(PARTS.PART_WEIGHT, SIGNED), CHAR) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(cast(PARTS.PART_WEIGHT AS signed) AS char) FROM PARTS"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(getTestVDB(),
input,
@@ -111,7 +111,7 @@
}
@Test public void testConversion7() throws Exception {
String input = "SELECT convert(convert(PART_WEIGHT, integer), string) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT convert(convert(PARTS.PART_WEIGHT, SIGNED INTEGER), CHAR) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(cast(PARTS.PART_WEIGHT AS signed) AS char) FROM PARTS"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(getTestVDB(),
input,
@@ -136,7 +136,7 @@
*/
@Test public void testLocate() throws Exception {
String input = "SELECT locate(INTNUM, 'chimp', 1) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT LOCATE(convert(SmallA.IntNum, CHAR), 'chimp', 1) FROM SmallA"; //$NON-NLS-1$
+ String output = "SELECT LOCATE(cast(SmallA.IntNum AS char), 'chimp', 1) FROM SmallA"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
input, output,
@@ -170,7 +170,7 @@
*/
@Test public void testLocate3() throws Exception {
String input = "SELECT locate(INTNUM, '234567890', 1) FROM BQT1.SMALLA WHERE INTKEY = 26"; //$NON-NLS-1$
- String output = "SELECT LOCATE(convert(SmallA.IntNum, CHAR), '234567890', 1) FROM SmallA WHERE SmallA.IntKey = 26"; //$NON-NLS-1$
+ String output = "SELECT LOCATE(cast(SmallA.IntNum AS char), '234567890', 1) FROM SmallA WHERE SmallA.IntKey = 26"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
input, output,
@@ -290,7 +290,7 @@
@Test public void testBitAnd() throws Exception {
String input = "select bitand(intkey, intnum) from bqt1.smalla"; //$NON-NLS-1$
- String output = "SELECT convert((SmallA.IntKey & SmallA.IntNum), SIGNED INTEGER) FROM SmallA"; //$NON-NLS-1$
+ String output = "SELECT cast((SmallA.IntKey & SmallA.IntNum) AS signed) FROM SmallA"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
input,
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestDayWeekQuarterFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestDayWeekQuarterFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestDayWeekQuarterFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -26,16 +26,14 @@
import java.util.Arrays;
import java.util.Properties;
-import org.teiid.connector.jdbc.oracle.DayWeekQuarterFunctionModifier;
-import org.teiid.connector.jdbc.oracle.OracleSQLTranslator;
+import junit.framework.TestCase;
+
+import org.teiid.connector.api.SourceSystemFunctions;
import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
-import org.teiid.connector.language.IExpression;
import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.ILanguageFactory;
import org.teiid.connector.language.ILiteral;
-import junit.framework.TestCase;
-
import com.metamatrix.cdk.CommandBuilder;
import com.metamatrix.cdk.api.EnvironmentUtility;
import com.metamatrix.query.unittest.TimestampUtil;
@@ -54,81 +52,40 @@
super(name);
}
- public IExpression helpTestMod(ILiteral c, String format, String expectedStr) throws Exception {
- IFunction func = LANG_FACTORY.createFunction("dayweekquarter", //$NON-NLS-1$
+ public void helpTestMod(ILiteral c, String format, String expectedStr) throws Exception {
+ IFunction func = LANG_FACTORY.createFunction(format,
Arrays.asList(c),
String.class);
- DayWeekQuarterFunctionModifier mod = new DayWeekQuarterFunctionModifier (LANG_FACTORY, format);
- IExpression expr = mod.modify(func);
-
OracleSQLTranslator trans = new OracleSQLTranslator();
trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor();
- sqlVisitor.append(expr);
+ sqlVisitor.append(func);
assertEquals(expectedStr, sqlVisitor.toString());
-
- return expr;
}
public void test1() throws Exception {
ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
- helpTestMod(arg1, "DDD", //$NON-NLS-1$
- "TO_NUMBER(TO_CHAR({ts'2004-01-21 10:05:00.0'}, 'DDD'))"); //$NON-NLS-1$
+ helpTestMod(arg1, SourceSystemFunctions.DAYOFYEAR,
+ "to_number(TO_CHAR({ts'2004-01-21 10:05:00.0'}, 'DDD'))"); //$NON-NLS-1$
}
public void test2() throws Exception {
ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
- helpTestMod(arg1, "DDD", //$NON-NLS-1$
- "TO_NUMBER(TO_CHAR({d'2004-01-21'}, 'DDD'))"); //$NON-NLS-1$
+ helpTestMod(arg1, SourceSystemFunctions.DAYOFYEAR,
+ "to_number(TO_CHAR({d'2004-01-21'}, 'DDD'))"); //$NON-NLS-1$
}
- public void test3() throws Exception {
- ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
- helpTestMod(arg1, "D", //$NON-NLS-1$
- "TO_NUMBER(TO_CHAR({ts'2004-01-21 10:05:00.0'}, 'D'))"); //$NON-NLS-1$
- }
-
- public void test4() throws Exception {
- ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
- helpTestMod(arg1, "D", //$NON-NLS-1$
- "TO_NUMBER(TO_CHAR({d'2004-01-21'}, 'D'))"); //$NON-NLS-1$
- }
-
- public void test5() throws Exception {
- ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
- helpTestMod(arg1, "DD", //$NON-NLS-1$
- "TO_NUMBER(TO_CHAR({ts'2004-01-21 10:05:00.0'}, 'DD'))"); //$NON-NLS-1$
- }
-
- public void test6() throws Exception {
- ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
- helpTestMod(arg1, "DD", //$NON-NLS-1$
- "TO_NUMBER(TO_CHAR({d'2004-01-21'}, 'DD'))"); //$NON-NLS-1$
- }
-
- public void test7() throws Exception {
- ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
- helpTestMod(arg1, "WW", //$NON-NLS-1$
- "TO_NUMBER(TO_CHAR({ts'2004-01-21 10:05:00.0'}, 'WW'))"); //$NON-NLS-1$
- }
-
- public void test8() throws Exception {
- ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
- helpTestMod(arg1, "WW", //$NON-NLS-1$
- "TO_NUMBER(TO_CHAR({d'2004-01-21'}, 'WW'))"); //$NON-NLS-1$
- }
-
public void test9() throws Exception {
ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
- helpTestMod(arg1, "Q", //$NON-NLS-1$
- "TO_NUMBER(TO_CHAR({ts'2004-01-21 10:05:00.0'}, 'Q'))"); //$NON-NLS-1$
+ helpTestMod(arg1, SourceSystemFunctions.QUARTER,
+ "to_number(TO_CHAR({ts'2004-01-21 10:05:00.0'}, 'Q'))"); //$NON-NLS-1$
}
public void test10() throws Exception {
ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
- helpTestMod(arg1, "Q", //$NON-NLS-1$
- "TO_NUMBER(TO_CHAR({d'2004-01-21'}, 'Q'))"); //$NON-NLS-1$
+ helpTestMod(arg1, SourceSystemFunctions.QUARTER,
+ "to_number(TO_CHAR({d'2004-01-21'}, 'Q'))"); //$NON-NLS-1$
}
}
\ No newline at end of file
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLeftOrRightFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLeftOrRightFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLeftOrRightFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -28,7 +28,6 @@
import junit.framework.TestCase;
import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
-import org.teiid.connector.language.IExpression;
import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.ILanguageFactory;
import org.teiid.connector.language.ILiteral;
@@ -50,23 +49,17 @@
super(name);
}
- public IExpression helpTestMod(ILiteral c, ILiteral d, String target, String expectedStr) throws Exception {
+ public void helpTestMod(ILiteral c, ILiteral d, String target, String expectedStr) throws Exception {
IFunction func = LANG_FACTORY.createFunction(target,
Arrays.asList( c, d ),
String.class);
- LeftOrRightFunctionModifier mod = new LeftOrRightFunctionModifier (LANG_FACTORY);
- IExpression expr = mod.modify(func);
-
OracleSQLTranslator trans = new OracleSQLTranslator();
trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor();
- sqlVisitor.append(expr);
- //System.out.println(" expected: " + expectedStr + " \t actual: " + sqlVisitor.toString());
+ sqlVisitor.append(func);
assertEquals(expectedStr, sqlVisitor.toString());
-
- return expr;
}
public void test1() throws Exception {
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLog10FunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLog10FunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestLog10FunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -52,14 +52,11 @@
IFunction func = CommandBuilder.getLanuageFactory().createFunction("log10", Arrays.asList(arg), Double.class); //$NON-NLS-1$
Log10FunctionModifier modifier = new Log10FunctionModifier(CommandBuilder.getLanuageFactory());
- IExpression outExpr = modifier.modify(func);
+ modifier.translate(func);
- assertTrue(outExpr instanceof IFunction);
- IFunction outFunc = (IFunction) outExpr;
+ assertEquals("log", func.getName()); //$NON-NLS-1$
+ assertEquals(Double.class, func.getType());
- assertEquals("log", outFunc.getName()); //$NON-NLS-1$
- assertEquals(func.getType(), outFunc.getType());
-
List<IExpression> outArgs = func.getParameters();
assertEquals(2, outArgs.size());
assertEquals(arg, outArgs.get(1));
@@ -69,6 +66,6 @@
assertEquals(Integer.class, newArg.getType());
assertEquals(new Integer(10), newArg.getValue());
- assertEquals("log(10, 5.2)", SQLStringVisitor.getSQLString(outFunc)); //$NON-NLS-1$
+ assertEquals("log(10, 5.2)", SQLStringVisitor.getSQLString(func)); //$NON-NLS-1$
}
}
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestMonthOrDayNameFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestMonthOrDayNameFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestMonthOrDayNameFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -26,16 +26,13 @@
import java.util.Arrays;
import java.util.Properties;
-import org.teiid.connector.jdbc.oracle.MonthOrDayNameFunctionModifier;
-import org.teiid.connector.jdbc.oracle.OracleSQLTranslator;
+import junit.framework.TestCase;
+
import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
-import org.teiid.connector.language.IExpression;
import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.ILanguageFactory;
import org.teiid.connector.language.ILiteral;
-import junit.framework.TestCase;
-
import com.metamatrix.cdk.CommandBuilder;
import com.metamatrix.cdk.api.EnvironmentUtility;
import com.metamatrix.query.unittest.TimestampUtil;
@@ -54,44 +51,40 @@
super(name);
}
- public IExpression helpTestMod(ILiteral c, String format, String expectedStr) throws Exception {
+ public void helpTestMod(ILiteral c, String format, String expectedStr) throws Exception {
IFunction func = LANG_FACTORY.createFunction(format.toLowerCase()+"name", // "monthname" //$NON-NLS-1$
Arrays.asList( c ),
String.class);
- MonthOrDayNameFunctionModifier mod = new MonthOrDayNameFunctionModifier (LANG_FACTORY, format);
- IExpression expr = mod.modify(func);
-
OracleSQLTranslator trans = new OracleSQLTranslator();
trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor();
- sqlVisitor.append(expr);
+ sqlVisitor.append(func);
assertEquals(expectedStr, sqlVisitor.toString());
- return expr;
}
public void test1() throws Exception {
ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
helpTestMod(arg1, "Month", //$NON-NLS-1$
- "RTRIM(TO_CHAR({ts'2004-01-21 10:05:00.0'}, 'Month'))"); //$NON-NLS-1$
+ "rtrim(TO_CHAR({ts'2004-01-21 10:05:00.0'}, 'Month'))"); //$NON-NLS-1$
}
public void test2() throws Exception {
ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
helpTestMod(arg1, "Month", //$NON-NLS-1$
- "RTRIM(TO_CHAR({d'2004-01-21'}, 'Month'))"); //$NON-NLS-1$
+ "rtrim(TO_CHAR({d'2004-01-21'}, 'Month'))"); //$NON-NLS-1$
}
public void test3() throws Exception {
ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(104, 0, 21, 10, 5, 0, 0), Timestamp.class);
helpTestMod(arg1, "Day", //$NON-NLS-1$
- "RTRIM(TO_CHAR({ts'2004-01-21 10:05:00.0'}, 'Day'))"); //$NON-NLS-1$
+ "rtrim(TO_CHAR({ts'2004-01-21 10:05:00.0'}, 'Day'))"); //$NON-NLS-1$
}
public void test4() throws Exception {
ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
helpTestMod(arg1, "Day", //$NON-NLS-1$
- "RTRIM(TO_CHAR({d'2004-01-21'}, 'Day'))"); //$NON-NLS-1$
+ "rtrim(TO_CHAR({d'2004-01-21'}, 'Day'))"); //$NON-NLS-1$
}
}
\ No newline at end of file
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleConvertModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleConvertModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -28,39 +28,37 @@
import java.util.Arrays;
import java.util.Properties;
+import static org.junit.Assert.*;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.jdbc.oracle.OracleConvertModifier;
-import org.teiid.connector.jdbc.oracle.OracleSQLTranslator;
import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
+import org.teiid.connector.jdbc.translator.Translator;
import org.teiid.connector.language.IExpression;
import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.ILanguageFactory;
-import junit.framework.TestCase;
-
import com.metamatrix.cdk.CommandBuilder;
import com.metamatrix.cdk.api.EnvironmentUtility;
import com.metamatrix.query.unittest.TimestampUtil;
/**
*/
-public class TestOracleConvertModifier extends TestCase {
+public class TestOracleConvertModifier {
private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
-
- /**
- * Constructor for TestSybaseConvertModifier.
- * @param name
- */
- public TestOracleConvertModifier(String name) {
- super(name);
+ private static Translator TRANSLATOR = new OracleSQLTranslator();
+
+ @BeforeClass public static void oneTimeSetup() throws Exception {
+ TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
}
-
+
public String helpGetString(IExpression expr) throws Exception {
OracleSQLTranslator trans = new OracleSQLTranslator();
trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
- SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor();
+ SQLConversionVisitor sqlVisitor = TRANSLATOR.getSQLConversionVisitor();
sqlVisitor.append(expr);
return sqlVisitor.toString();
@@ -73,450 +71,447 @@
LANG_FACTORY.createLiteral(tgtType, String.class)),
TypeFacility.getDataTypeClass(tgtType));
- OracleConvertModifier mod = new OracleConvertModifier(LANG_FACTORY, null);
- IExpression expr = mod.modify(func);
-
assertEquals("Error converting from " + srcExpression.getType() + " to " + tgtType, //$NON-NLS-1$ //$NON-NLS-2$
- expectedExpression, helpGetString(expr));
+ expectedExpression, helpGetString(func));
}
// Source = STRING
- public void testStringToChar() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "char", "'5'"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testStringToChar() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral("5", String.class), "char", "cast('5' AS char(1))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "boolean", "decode('5', 'true', 1, 'false', 0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testStringToBoolean() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral("5", String.class), "boolean", "CASE WHEN '5' IN ('false', '0') THEN 0 WHEN '5' IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "byte", "to_number('5')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testStringToByte() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral("5", String.class), "byte", "trunc(to_number('5'))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "short", "to_number('5')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testStringToShort() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral("5", String.class), "short", "trunc(to_number('5'))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "integer", "to_number('5')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testStringToInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral("5", String.class), "integer", "trunc(to_number('5'))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "long", "to_number('5')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testStringToLong() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral("5", String.class), "long", "trunc(to_number('5'))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("5", String.class), "biginteger", "to_number('5')"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testStringToBigInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral("5", String.class), "biginteger", "trunc(to_number('5'))"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToFloat() throws Exception {
+ @Test public void testStringToFloat() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "float", "to_number('5')");//$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToDouble() throws Exception {
+ @Test public void testStringToDouble() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "double", "to_number('5')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToDate() throws Exception {
+ @Test public void testStringToDate() throws Exception {
helpTest(LANG_FACTORY.createLiteral("2004-06-29", String.class), "date", "to_date('2004-06-29', 'YYYY-MM-DD')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToTime() throws Exception {
- helpTest(LANG_FACTORY.createLiteral("23:59:59", String.class), "time", "to_date(('1970-01-01 ' || to_char('23:59:59', 'HH24:MI:SS')), 'YYYY-MM-DD HH24:MI:SS')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testStringToTime() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral("23:59:59", String.class), "time", "to_date('23:59:59', 'HH24:MI:SS')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToTimestamp() throws Exception {
+ @Test public void testStringToTimestamp() throws Exception {
helpTest(LANG_FACTORY.createLiteral("2004-06-29 23:59:59.987", String.class), "timestamp", "to_timestamp('2004-06-29 23:59:59.987', 'YYYY-MM-DD HH24:MI:SS.FF')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testStringToBigDecimal() throws Exception {
+ @Test public void testStringToBigDecimal() throws Exception {
helpTest(LANG_FACTORY.createLiteral("5", String.class), "bigdecimal", "to_number('5')"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
// Source = CHAR
- public void testCharToString() throws Exception {
+ @Test public void testCharToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Character('5'), Character.class), "string", "'5'"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = BOOLEAN
- public void testBooleanToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "string", "decode(1, 0, 'false', 1, 'true')"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testBooleanToString() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "string", "CASE WHEN 1 = 0 THEN 'false' WHEN 1 IS NOT NULL THEN 'true' END"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToByte() throws Exception {
+ @Test public void testBooleanToByte() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "byte", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToShort() throws Exception {
+ @Test public void testBooleanToShort() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "short", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToInteger() throws Exception {
+ @Test public void testBooleanToInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "integer", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToLong() throws Exception {
+ @Test public void testBooleanToLong() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToBigInteger() throws Exception {
+ @Test public void testBooleanToBigInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToFloat() throws Exception {
+ @Test public void testBooleanToFloat() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToDouble() throws Exception {
+ @Test public void testBooleanToDouble() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToBigDecimal() throws Exception {
+ @Test public void testBooleanToBigDecimal() throws Exception {
helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = BYTE
- public void testByteToString() throws Exception {
+ @Test public void testByteToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "string", "to_char(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "boolean", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testByteToBoolean() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "boolean", "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToShort() throws Exception {
+ @Test public void testByteToShort() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "short", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToInteger() throws Exception {
+ @Test public void testByteToInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "integer", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToLong() throws Exception {
+ @Test public void testByteToLong() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToBigInteger() throws Exception {
+ @Test public void testByteToBigInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToFloat() throws Exception {
+ @Test public void testByteToFloat() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToDouble() throws Exception {
+ @Test public void testByteToDouble() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToBigDecimal() throws Exception {
+ @Test public void testByteToBigDecimal() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = SHORT
- public void testShortToString() throws Exception {
+ @Test public void testShortToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "string", "to_char(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "boolean", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testShortToBoolean() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "boolean", "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToByte() throws Exception {
+ @Test public void testShortToByte() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "byte", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToInteger() throws Exception {
+ @Test public void testShortToInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "integer", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToLong() throws Exception {
+ @Test public void testShortToLong() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToBigInteger() throws Exception {
+ @Test public void testShortToBigInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToFloat() throws Exception {
+ @Test public void testShortToFloat() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToDouble() throws Exception {
+ @Test public void testShortToDouble() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToBigDecimal() throws Exception {
+ @Test public void testShortToBigDecimal() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = INTEGER
- public void testIntegerToString() throws Exception {
+ @Test public void testIntegerToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "string", "to_char(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "boolean", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testIntegerToBoolean() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "boolean", "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToByte() throws Exception {
+ @Test public void testIntegerToByte() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "byte", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToShort() throws Exception {
+ @Test public void testIntegerToShort() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "short", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToLong() throws Exception {
+ @Test public void testIntegerToLong() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToBigInteger() throws Exception {
+ @Test public void testIntegerToBigInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToFloat() throws Exception {
+ @Test public void testIntegerToFloat() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToDouble() throws Exception {
+ @Test public void testIntegerToDouble() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToBigDecimal() throws Exception {
+ @Test public void testIntegerToBigDecimal() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = LONG
- public void testLongToString() throws Exception {
+ @Test public void testLongToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "string", "to_char(1)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testLongToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "boolean", "1"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testLongToBoolean() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "boolean", "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testLongToByte() throws Exception {
+ @Test public void testLongToByte() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "byte", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testLongToShort() throws Exception {
+ @Test public void testLongToShort() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "short", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testLongToInteger() throws Exception {
+ @Test public void testLongToInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "integer", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testLongToBigInteger() throws Exception {
+ @Test public void testLongToBigInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "biginteger", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testLongToFloat() throws Exception {
+ @Test public void testLongToFloat() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testLongToDouble() throws Exception {
+ @Test public void testLongToDouble() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testLongToBigDecimal() throws Exception {
+ @Test public void testLongToBigDecimal() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = BIGINTEGER
- public void testBigIntegerToString() throws Exception {
+ @Test public void testBigIntegerToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "string", "to_char(1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigIntegerToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "boolean", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigIntegerToBoolean() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "boolean", "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigIntegerToByte() throws Exception {
+ @Test public void testBigIntegerToByte() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "byte", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigIntegerToShort() throws Exception {
+ @Test public void testBigIntegerToShort() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "short", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigIntegerToInteger() throws Exception {
+ @Test public void testBigIntegerToInteger() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "integer", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigIntegerToLong() throws Exception {
+ @Test public void testBigIntegerToLong() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "long", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigIntegerToFloat() throws Exception {
+ @Test public void testBigIntegerToFloat() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "float", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigIntegerToDouble() throws Exception {
+ @Test public void testBigIntegerToDouble() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "double", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigIntegerToBigDecimal() throws Exception {
+ @Test public void testBigIntegerToBigDecimal() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "bigdecimal", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
// Source = FLOAT
- public void testFloatToString() throws Exception {
+ @Test public void testFloatToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "string", "to_char(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testFloatToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "boolean", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testFloatToBoolean() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "boolean", "CASE WHEN 1.2 = 0 THEN 0 WHEN 1.2 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testFloatToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "byte", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testFloatToByte() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "byte", "trunc(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testFloatToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "short", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testFloatToShort() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "short", "trunc(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testFloatToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "integer", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testFloatToInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "integer", "trunc(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testFloatToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "long", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testFloatToLong() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "long", "trunc(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testFloatToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "biginteger", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testFloatToBigInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "biginteger", "trunc(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testFloatToDouble() throws Exception {
+ @Test public void testFloatToDouble() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "double", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testFloatToBigDecimal() throws Exception {
+ @Test public void testFloatToBigDecimal() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "bigdecimal", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = DOUBLE
- public void testDoubleToString() throws Exception {
+ @Test public void testDoubleToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "string", "to_char(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDoubleToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "boolean", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testDoubleToBoolean() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "boolean", "CASE WHEN 1.2 = 0 THEN 0 WHEN 1.2 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDoubleToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "byte", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testDoubleToByte() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "byte", "trunc(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDoubleToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "short", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testDoubleToShort() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "short", "trunc(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDoubleToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "integer", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testDoubleToInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "integer", "trunc(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDoubleToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "long", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testDoubleToLong() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "long", "trunc(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDoubleToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "biginteger", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testDoubleToBigInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "biginteger", "trunc(1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDoubleToFloat() throws Exception {
+ @Test public void testDoubleToFloat() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "float", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDoubleToBigDecimal() throws Exception {
+ @Test public void testDoubleToBigDecimal() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "bigdecimal", "1.2"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = BIGDECIMAL
- public void testBigDecimalToString() throws Exception {
+ @Test public void testBigDecimalToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "string", "to_char(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigDecimalToBoolean() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "boolean", "1.0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigDecimalToBoolean() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "boolean", "CASE WHEN 1.0 = 0 THEN 0 WHEN 1.0 IS NOT NULL THEN 1 END"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigDecimalToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "byte", "1.0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigDecimalToByte() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "byte", "trunc(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigDecimalToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "short", "1.0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigDecimalToShort() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "short", "trunc(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigDecimalToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "integer", "1.0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigDecimalToInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "integer", "trunc(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigDecimalToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "long", "1.0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigDecimalToLong() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "long", "trunc(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigDecimalToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "biginteger", "1.0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigDecimalToBigInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "biginteger", "trunc(1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigDecimalToFloat() throws Exception {
+ @Test public void testBigDecimalToFloat() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "float", "1.0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigDecimalToDoublel() throws Exception {
+ @Test public void testBigDecimalToDoublel() throws Exception {
helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "double", "1.0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
// Source = DATE
- public void testDateToString() throws Exception {
+ @Test public void testDateToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createDate(103, 10, 1), java.sql.Date.class), "string", "to_char({d'2003-11-01'}, 'YYYY-MM-DD')"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDateToTimestamp() throws Exception {
+ @Test public void testDateToTimestamp() throws Exception {
helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createDate(103, 10, 1), java.sql.Date.class), "timestamp", "cast({d'2003-11-01'} AS timestamp)"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = TIME
- public void testTimeToString() throws Exception {
+ @Test public void testTimeToString() throws Exception {
helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createTime(23, 59, 59), java.sql.Time.class), "string", "to_char({ts'1970-01-01 23:59:59'}, 'HH24:MI:SS')"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testTimeToTimestamp() throws Exception {
+ @Test public void testTimeToTimestamp() throws Exception {
helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createTime(23, 59, 59), java.sql.Time.class), "timestamp", "cast({ts'1970-01-01 23:59:59'} AS timestamp)"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = TIMESTAMP
- public void testTimestampToString() throws Exception {
+ @Test public void testTimestampToString() throws Exception {
Timestamp ts = TimestampUtil.createTimestamp(103, 10, 1, 12, 5, 2, 0);
helpTest(LANG_FACTORY.createLiteral(ts, Timestamp.class), "string", "to_char({ts'2003-11-01 12:05:02.0'}, 'YYYY-MM-DD HH24:MI:SS.FF')"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testTimestampToDate() throws Exception {
+ @Test public void testTimestampToDate() throws Exception {
Timestamp ts = TimestampUtil.createTimestamp(103, 10, 1, 12, 5, 2, 0);
- helpTest(LANG_FACTORY.createLiteral(ts, Timestamp.class), "date", "trunc({ts'2003-11-01 12:05:02.0'})"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(ts, Timestamp.class), "date", "trunc(cast({ts'2003-11-01 12:05:02.0'} AS date))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testTimestampToTime() throws Exception {
+ @Test public void testTimestampToTime() throws Exception {
Timestamp ts = TimestampUtil.createTimestamp(103, 10, 1, 12, 5, 2, 0);
- helpTest(LANG_FACTORY.createLiteral(ts, Timestamp.class), "time", "to_date(('1970-01-01 ' || to_char({ts'2003-11-01 12:05:02.0'}, 'HH24:MI:SS')), 'YYYY-MM-DD HH24:MI:SS')"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTest(LANG_FACTORY.createLiteral(ts, Timestamp.class), "time", "to_date('1970-01-01 ' || to_char({ts'2003-11-01 12:05:02.0'}, 'HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS')"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
Copied: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java (from rev 1286, trunk/test-integration/src/test/java/com/metamatrix/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java)
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java (rev 0)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -0,0 +1,348 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.connector.jdbc.oracle;
+
+import static org.junit.Assert.*;
+
+import java.util.Properties;
+
+import org.junit.Test;
+import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.api.ExecutionContext;
+import org.teiid.connector.jdbc.JDBCPropertyNames;
+import org.teiid.connector.jdbc.oracle.OracleSQLTranslator;
+import org.teiid.connector.jdbc.translator.TranslatedCommand;
+import org.teiid.connector.language.ICommand;
+import org.teiid.dqp.internal.datamgr.impl.ExecutionContextImpl;
+import org.teiid.dqp.internal.datamgr.impl.FakeExecutionContextImpl;
+
+import com.metamatrix.cdk.CommandBuilder;
+import com.metamatrix.cdk.api.EnvironmentUtility;
+import com.metamatrix.cdk.api.TranslationUtility;
+import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.core.util.UnitTestUtil;
+import com.metamatrix.query.metadata.QueryMetadataInterface;
+import com.metamatrix.query.unittest.FakeMetadataFacade;
+import com.metamatrix.query.unittest.FakeMetadataFactory;
+import com.metamatrix.query.unittest.FakeMetadataObject;
+import com.metamatrix.query.unittest.FakeMetadataStore;
+
+public class TestOracleSQLConversionVisitor {
+ private static ExecutionContext EMPTY_CONTEXT = new FakeExecutionContextImpl();
+
+ private String getTestVDB() {
+ return UnitTestUtil.getTestDataPath() + "/PartsSupplierOracle.vdb"; //$NON-NLS-1$
+ }
+
+ private void helpTestVisitor(String vdb, String input, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
+ helpTestVisitor(vdb, input, EMPTY_CONTEXT, dbmsTimeZone, expectedOutput, false);
+ }
+
+ private void helpTestVisitor(String vdb, String input, String dbmsTimeZone, String expectedOutput, boolean correctNaming) throws ConnectorException {
+ helpTestVisitor(vdb, input, EMPTY_CONTEXT, dbmsTimeZone, expectedOutput, correctNaming);
+ }
+
+ private void helpTestVisitor(String vdb, String input, ExecutionContext context, String dbmsTimeZone, String expectedOutput, boolean correctNaming) throws ConnectorException {
+ // Convert from sql to objects
+ TranslationUtility util = new TranslationUtility(vdb);
+ ICommand obj = util.parseCommand(input, correctNaming, true);
+ this.helpTestVisitor(obj, context, dbmsTimeZone, expectedOutput);
+ }
+
+ /** Helper method takes a QueryMetadataInterface impl instead of a VDB filename
+ * @throws ConnectorException
+ */
+ private void helpTestVisitor(QueryMetadataInterface metadata, String input, ExecutionContext context, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
+ // Convert from sql to objects
+ CommandBuilder commandBuilder = new CommandBuilder(metadata);
+ ICommand obj = commandBuilder.getCommand(input);
+ this.helpTestVisitor(obj, context, dbmsTimeZone, expectedOutput);
+ }
+
+ private void helpTestVisitor(ICommand obj, ExecutionContext context, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
+
+
+ // Apply function replacement
+ OracleSQLTranslator translator = new OracleSQLTranslator();
+ Properties p = new Properties();
+ if (dbmsTimeZone != null) {
+ p.setProperty(JDBCPropertyNames.DATABASE_TIME_ZONE, dbmsTimeZone);
+ }
+ translator.initialize(EnvironmentUtility.createEnvironment(p, false));
+ // Convert back to SQL
+ TranslatedCommand tc = new TranslatedCommand(context, translator);
+ tc.translateCommand(obj);
+
+ // Check stuff
+ assertEquals("Did not get correct sql", expectedOutput, tc.getSql()); //$NON-NLS-1$
+ }
+
+ /** defect 21775 */
+ @Test public void testDateStuff() throws Exception {
+ String input = "SELECT ((CASE WHEN month(datevalue) < 10 THEN ('0' || convert(month(datevalue), string)) ELSE convert(month(datevalue), string) END || CASE WHEN dayofmonth(datevalue) < 10 THEN ('0' || convert(dayofmonth(datevalue), string)) ELSE convert(dayofmonth(datevalue), string) END) || convert(year(datevalue), string)), SUM(intkey) FROM bqt1.SMALLA GROUP BY datevalue"; //$NON-NLS-1$
+ String output = "SELECT CASE WHEN (CASE WHEN (CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END IS NULL) OR (CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END IS NULL) THEN NULL ELSE concat(CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END, CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE con!
cat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END) END IS NULL) OR (to_char(EXTRACT(YEAR FROM SmallA.DateValue)) IS NULL) THEN NULL ELSE concat(CASE WHEN (CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END IS NULL) OR (CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END IS NULL) THEN NULL ELSE concat(CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FR!
OM SmallA.DateValue)) END, CASE WHEN EXTRACT(DAY FROM SmallA.D!
ateValue
) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END) END, to_char(EXTRACT(YEAR FROM SmallA.DateValue))) END, SUM(SmallA.IntKey) FROM SmallA GROUP BY SmallA.DateValue"; //$NON-NLS-1$
+
+ helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
+ input,
+ EMPTY_CONTEXT, null, output);
+ }
+
+ @Test public void testAliasedGroup() throws Exception {
+ helpTestVisitor(getTestVDB(),
+ "select y.part_name from parts as y", //$NON-NLS-1$
+ null,
+ "SELECT y.PART_NAME FROM PARTS y"); //$NON-NLS-1$
+ }
+
+ @Test public void testDateLiteral() throws Exception {
+ helpTestVisitor(getTestVDB(),
+ "select {d'2002-12-31'} FROM parts", //$NON-NLS-1$
+ null,
+ "SELECT {d'2002-12-31'} FROM PARTS"); //$NON-NLS-1$
+ }
+
+ @Test public void testTimeLiteral() throws Exception {
+ helpTestVisitor(getTestVDB(),
+ "select {t'13:59:59'} FROM parts", //$NON-NLS-1$
+ null,
+ "SELECT {ts'1970-01-01 13:59:59'} FROM PARTS"); //$NON-NLS-1$
+ }
+
+ @Test public void testTimestampLiteral() throws Exception {
+ helpTestVisitor(getTestVDB(),
+ "select {ts'2002-12-31 13:59:59'} FROM parts", //$NON-NLS-1$
+ null,
+ "SELECT {ts'2002-12-31 13:59:59.0'} FROM PARTS"); //$NON-NLS-1$
+ }
+
+ @Test public void testUnionOrderByWithThreeBranches() throws Exception {
+ helpTestVisitor(getTestVDB(),
+ "select part_id id FROM parts UNION ALL select part_name FROM parts UNION ALL select part_id FROM parts ORDER BY id", //$NON-NLS-1$
+ null,
+ "(SELECT g_2.PART_ID AS c_0 FROM PARTS g_2 UNION ALL SELECT g_1.PART_NAME AS c_0 FROM PARTS g_1) UNION ALL SELECT g_0.PART_ID AS c_0 FROM PARTS g_0 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
+ true);
+ }
+
+ @Test public void testUnionOrderBy() throws Exception {
+ helpTestVisitor(getTestVDB(),
+ "select part_id FROM parts UNION ALL select part_name FROM parts ORDER BY part_id", //$NON-NLS-1$
+ null,
+ "SELECT g_1.PART_ID AS c_0 FROM PARTS g_1 UNION ALL SELECT g_0.PART_NAME AS c_0 FROM PARTS g_0 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
+ true);
+ }
+
+ @Test public void testUnionOrderBy2() throws Exception {
+ helpTestVisitor(getTestVDB(),
+ "select part_id as p FROM parts UNION ALL select part_name FROM parts ORDER BY p", //$NON-NLS-1$
+ null,
+ "SELECT PARTS.PART_ID AS p FROM PARTS UNION ALL SELECT PARTS.PART_NAME FROM PARTS ORDER BY p NULLS FIRST"); //$NON-NLS-1$
+ }
+
+ @Test public void testUpdateWithFunction() throws Exception {
+ String input = "UPDATE bqt1.smalla SET intkey = intkey + 1"; //$NON-NLS-1$
+ String output = "UPDATE SmallA SET IntKey = (SmallA.IntKey + 1)"; //$NON-NLS-1$
+
+ helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
+ input,
+ EMPTY_CONTEXT, null, output);
+ }
+
+
+ /**
+ * Oracle's DUAL table is a pseudo-table; element names cannot be
+ * fully qualified since the table doesn't really exist nor contain
+ * any columns. But this requires modeling the DUAL table in
+ * MM as if it were a real physical table, and also modeling any
+ * columns in the table. Case 3742
+ *
+ * @since 4.3
+ */
+ @Test public void testDUAL() throws Exception {
+ String input = "SELECT something FROM DUAL"; //$NON-NLS-1$
+ String output = "SELECT something FROM DUAL"; //$NON-NLS-1$
+
+ helpTestVisitor(getTestVDB(),
+ input,
+ null,
+ output);
+ }
+
+ /**
+ * Test Oracle's rownum pseudo-column. Not a real column, so it can't
+ * be fully-qualified with a table name. MM requires this column to be
+ * modeled in any table which the user wants to use rownum with.
+ * Case 3739
+ *
+ * @since 4.3
+ */
+ @Test public void testROWNUM() throws Exception {
+ String input = "SELECT part_name, rownum FROM parts"; //$NON-NLS-1$
+ String output = "SELECT PARTS.PART_NAME, ROWNUM FROM PARTS"; //$NON-NLS-1$
+
+ helpTestVisitor(getTestVDB(),
+ input,
+ null,
+ output);
+ }
+
+ /**
+ * Test Oracle's rownum pseudo-column. Not a real column, so it can't
+ * be fully-qualified with a table name. MM requires this column to be
+ * modeled in any table which the user wants to use rownum with. Case 3739
+ *
+ * @since 4.3
+ */
+ @Test public void testROWNUM2() throws Exception {
+ String input = "SELECT part_name FROM parts where rownum < 100"; //$NON-NLS-1$
+ String output = "SELECT PARTS.PART_NAME FROM PARTS WHERE ROWNUM < 100"; //$NON-NLS-1$
+
+ helpTestVisitor(getTestVDB(),
+ input,
+ null,
+ output);
+ }
+
+ /**
+ * Case 3744. Test that an Oracle-specific db hint, delivered as a String via command
+ * payload, is added to the translated SQL.
+ *
+ * @since 4.3
+ */
+ @Test public void testOracleCommentPayload() throws Exception {
+ String input = "SELECT part_name, rownum FROM parts"; //$NON-NLS-1$
+ String output = "SELECT /*+ ALL_ROWS */ PARTS.PART_NAME, ROWNUM FROM PARTS"; //$NON-NLS-1$
+
+ String hint = "/*+ ALL_ROWS */"; //$NON-NLS-1$
+ ExecutionContext context = new ExecutionContextImpl(null, null, null, null, hint, null, "", null, null, null); //$NON-NLS-1$
+
+ helpTestVisitor(getTestVDB(),
+ input,
+ context,
+ null,
+ output,
+ false);
+ }
+
+ /**
+ * reproducing this case relies on the name in source for the table being different from
+ * the name
+ */
+ @Test public void testCase3845() throws Exception {
+
+ String input = "SELECT (DoubleNum * 1.0) FROM BQT1.Smalla"; //$NON-NLS-1$
+ String output = "SELECT (SmallishA.DoubleNum * 1.0) FROM SmallishA"; //$NON-NLS-1$
+
+ FakeMetadataFacade metadata = exampleCase3845();
+
+ helpTestVisitor(metadata, input, EMPTY_CONTEXT, null, output);
+ }
+
+ /** create fake BQT metadata to test this case, name in source is important */
+ private FakeMetadataFacade exampleCase3845() {
+ // Create models
+ FakeMetadataObject bqt1 = FakeMetadataFactory.createPhysicalModel("BQT1"); //$NON-NLS-1$
+ FakeMetadataObject bqt1SmallA = FakeMetadataFactory.createPhysicalGroup("BQT1.SmallA", bqt1); //$NON-NLS-1$
+ bqt1SmallA.putProperty(FakeMetadataObject.Props.NAME_IN_SOURCE, "SmallishA");//$NON-NLS-1$
+ FakeMetadataObject doubleNum = FakeMetadataFactory.createElement("BQT1.SmallA.DoubleNum", bqt1SmallA, DataTypeManager.DefaultDataTypes.DOUBLE, 0); //$NON-NLS-1$
+
+ FakeMetadataStore store = new FakeMetadataStore();
+ store.addObject(bqt1);
+ store.addObject(bqt1SmallA);
+ store.addObject(doubleNum);
+ return new FakeMetadataFacade(store);
+ }
+
+ public void helpTestVisitor(String vdb, String input, String expectedOutput) throws ConnectorException {
+ helpTestVisitor(vdb, input, null, expectedOutput);
+ }
+
+ @Test public void testRowLimit2() throws Exception {
+ String input = "select intkey from bqt1.smalla limit 100"; //$NON-NLS-1$
+ String output = "SELECT * FROM (SELECT SmallA.IntKey FROM SmallA) WHERE ROWNUM <= 100"; //$NON-NLS-1$
+
+ helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
+ input,
+ EMPTY_CONTEXT, null, output);
+ }
+
+ @Test public void testRowLimit3() throws Exception {
+ String input = "select intkey from bqt1.smalla limit 50, 100"; //$NON-NLS-1$
+ String output = "SELECT * FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (SELECT SmallA.IntKey FROM SmallA) VIEW_FOR_LIMIT WHERE ROWNUM <= 150) WHERE ROWNUM_ > 50"; //$NON-NLS-1$
+
+ helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
+ input,
+ EMPTY_CONTEXT, null, output);
+ }
+
+ @Test public void testLimitWithNestedInlineView() throws Exception {
+ String input = "select max(intkey), stringkey from (select intkey, stringkey from bqt1.smalla order by intkey limit 100) x group by stringkey"; //$NON-NLS-1$
+ String output = "SELECT MAX(x.intkey), x.stringkey FROM (SELECT * FROM (SELECT SmallA.IntKey, SmallA.StringKey FROM SmallA ORDER BY intkey NULLS FIRST) WHERE ROWNUM <= 100) x GROUP BY x.stringkey"; //$NON-NLS-1$
+
+ helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
+ input,
+ EMPTY_CONTEXT, null, output);
+ }
+
+ @Test public void testExceptAsMinus() throws Exception {
+ String input = "select intkey, intnum from bqt1.smalla except select intnum, intkey from bqt1.smallb"; //$NON-NLS-1$
+ String output = "SELECT SmallA.IntKey, SmallA.IntNum FROM SmallA MINUS SELECT SmallB.IntNum, SmallB.IntKey FROM SmallB"; //$NON-NLS-1$
+
+ helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
+ input,
+ EMPTY_CONTEXT, null, output);
+ }
+
+ @Test public void testConcat2_useLiteral() throws Exception {
+ String sql = "select concat2(stringnum,'_xx') from BQT1.Smalla"; //$NON-NLS-1$
+ String expected = "SELECT concat(nvl(SmallA.StringNum, ''), '_xx') FROM SmallA"; //$NON-NLS-1$
+ helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
+ }
+
+ @Test public void testConcat2() throws Exception {
+ String sql = "select concat2(stringnum, stringnum) from BQT1.Smalla"; //$NON-NLS-1$
+ String expected = "SELECT CASE WHEN SmallA.StringNum IS NULL THEN NULL ELSE concat(nvl(SmallA.StringNum, ''), nvl(SmallA.StringNum, '')) END FROM SmallA"; //$NON-NLS-1$
+ helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
+ }
+
+ @Test public void testConcat() throws Exception {
+ String sql = "select concat(stringnum, stringkey) from BQT1.Smalla"; //$NON-NLS-1$
+ String expected = "SELECT CASE WHEN (SmallA.StringNum IS NULL) OR (SmallA.StringKey IS NULL) THEN NULL ELSE concat(SmallA.StringNum, SmallA.StringKey) END FROM SmallA"; //$NON-NLS-1$
+ helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
+ }
+
+ @Test public void testConcat_withLiteral() throws Exception {
+ String sql = "select stringnum || '1' from BQT1.Smalla"; //$NON-NLS-1$
+ String expected = "SELECT CASE WHEN SmallA.StringNum IS NULL THEN NULL ELSE concat(SmallA.StringNum, '1') END FROM SmallA"; //$NON-NLS-1$
+ helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
+ }
+
+ @Test public void testRowLimitWithUnionOrderBy() throws Exception {
+ String input = "(select intkey from bqt1.smalla limit 50, 100) union select intnum from bqt1.smalla order by intkey"; //$NON-NLS-1$
+ String output = "SELECT c_0 FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (SELECT g_1.IntKey AS c_0 FROM SmallA g_1) VIEW_FOR_LIMIT WHERE ROWNUM <= 150) WHERE ROWNUM_ > 50 UNION SELECT g_0.IntNum AS c_0 FROM SmallA g_0 ORDER BY c_0 NULLS FIRST"; //$NON-NLS-1$
+
+ CommandBuilder commandBuilder = new CommandBuilder(FakeMetadataFactory.exampleBQTCached());
+ ICommand obj = commandBuilder.getCommand(input, true, true);
+ this.helpTestVisitor(obj, EMPTY_CONTEXT, null, output);
+ }
+
+}
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleTranslator.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -117,7 +117,7 @@
@Test public void testConversion1() throws Exception {
String input = "SELECT char(convert(STRINGNUM, integer) + 100) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT chr((to_number(SmallA.StringNum) + 100)) FROM SmallA"; //$NON-NLS-1$
+ String output = "SELECT chr((trunc(to_number(SmallA.StringNum)) + 100)) FROM SmallA"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
input, output,
@@ -126,7 +126,7 @@
@Test public void testConversion2() throws Exception {
String input = "SELECT convert(STRINGNUM, long) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT to_number(SmallA.StringNum) FROM SmallA"; //$NON-NLS-1$
+ String output = "SELECT trunc(to_number(SmallA.StringNum)) FROM SmallA"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
input, output,
@@ -135,7 +135,7 @@
@Test public void testConversion3() throws Exception {
String input = "SELECT convert(convert(STRINGNUM, long), string) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT to_char(to_number(SmallA.StringNum)) FROM SmallA"; //$NON-NLS-1$
+ String output = "SELECT to_char(trunc(to_number(SmallA.StringNum))) FROM SmallA"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
input, output,
@@ -144,7 +144,7 @@
@Test public void testConversion4() throws Exception {
String input = "SELECT convert(convert(TIMESTAMPVALUE, date), string) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT to_char(trunc(SmallA.TimestampValue), 'YYYY-MM-DD') FROM SmallA"; //$NON-NLS-1$
+ String output = "SELECT to_char(trunc(cast(SmallA.TimestampValue AS date)), 'YYYY-MM-DD') FROM SmallA"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
input, output,
@@ -152,7 +152,7 @@
}
@Test public void testConversion5() throws Exception {
String input = "SELECT convert(convert(TIMESTAMPVALUE, time), string) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT to_char(to_date(('1970-01-01 ' || to_char(SmallA.TimestampValue, 'HH24:MI:SS')), 'YYYY-MM-DD HH24:MI:SS'), 'HH24:MI:SS') FROM SmallA"; //$NON-NLS-1$
+ String output = "SELECT to_char(to_date('1970-01-01 ' || to_char(SmallA.TimestampValue, 'HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS'), 'HH24:MI:SS') FROM SmallA"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
input, output,
@@ -176,7 +176,7 @@
}
@Test public void testConversion7() throws Exception {
String input = "SELECT convert(convert(STRINGNUM, integer), string) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT to_char(to_number(SmallA.StringNum)) FROM SmallA"; //$NON-NLS-1$
+ String output = "SELECT to_char(trunc(to_number(SmallA.StringNum))) FROM SmallA"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
input, output,
@@ -488,5 +488,32 @@
input, output,
TRANSLATOR);
}
+
+ @Test public void testLogFunction() throws Exception {
+ String input = "SELECT log(CONVERT(stringkey, INTEGER)) FROM bqt1.smalla"; //$NON-NLS-1$
+ String output = "SELECT ln(trunc(to_number(SmallA.StringKey))) FROM SmallA"; //$NON-NLS-1$
+
+ MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
+ input, output,
+ TRANSLATOR);
+ }
+
+ @Test public void testLog10Function() throws Exception {
+ String input = "SELECT log10(CONVERT(stringkey, INTEGER)) FROM bqt1.smalla"; //$NON-NLS-1$
+ String output = "SELECT log(10, trunc(to_number(SmallA.StringKey))) FROM SmallA"; //$NON-NLS-1$
+
+ MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
+ input, output,
+ TRANSLATOR);
+ }
+
+ @Test public void testAliasedFunctions() throws Exception {
+ String input = "SELECT char(CONVERT(stringkey, INTEGER)), lcase(stringkey), ucase(stringkey), ifnull(stringkey, 'x') FROM bqt1.smalla"; //$NON-NLS-1$
+ String output = "SELECT chr(trunc(to_number(SmallA.StringKey))), lower(SmallA.StringKey), upper(SmallA.StringKey), nvl(SmallA.StringKey, 'x') FROM SmallA"; //$NON-NLS-1$
+
+ MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
+ input, output,
+ TRANSLATOR);
+ }
}
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestSubstringFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestSubstringFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestSubstringFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -25,16 +25,14 @@
import java.util.Arrays;
import java.util.Properties;
+import junit.framework.TestCase;
+
import org.teiid.connector.api.TypeFacility;
-import org.teiid.connector.jdbc.oracle.OracleSQLTranslator;
-import org.teiid.connector.jdbc.translator.FunctionModifier;
import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
import org.teiid.connector.language.IExpression;
import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.ILanguageFactory;
-import junit.framework.TestCase;
-
import com.metamatrix.cdk.CommandBuilder;
import com.metamatrix.cdk.api.EnvironmentUtility;
@@ -53,21 +51,17 @@
super(name);
}
- public IExpression helpTestMod(IExpression[] args, String expectedStr) throws Exception {
+ public void helpTestMod(IExpression[] args, String expectedStr) throws Exception {
IFunction func = LANG_FACTORY.createFunction("substring", //$NON-NLS-1$
Arrays.asList(args), TypeFacility.RUNTIME_TYPES.STRING);
OracleSQLTranslator trans = new OracleSQLTranslator();
trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
- IExpression expr = ((FunctionModifier)trans.getFunctionModifiers().get("substring")).modify(func); //$NON-NLS-1$
-
SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor();
- sqlVisitor.append(expr);
+ sqlVisitor.append(func);
assertEquals(expectedStr, sqlVisitor.toString());
-
- return expr;
}
public void testTwoArgs() throws Exception {
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/postgresql/TestPostgreSQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/postgresql/TestPostgreSQLTranslator.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/postgresql/TestPostgreSQLTranslator.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -97,7 +97,7 @@
}
@Test public void testConversion6() throws Exception {
String input = "SELECT convert(PART_WEIGHT, biginteger) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT cast(PARTS.PART_WEIGHT AS numeric) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(PARTS.PART_WEIGHT AS numeric(38)) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -118,10 +118,18 @@
helpTestVisitor(getTestVDB(),
input,
output);
+ }
+ @Test public void testConversion8a() throws Exception {
+ String input = "SELECT convert(convert(PART_WEIGHT, boolean), long) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(cast(PARTS.PART_WEIGHT AS boolean) AS integer) FROM PARTS"; //$NON-NLS-1$
+
+ helpTestVisitor(getTestVDB(),
+ input,
+ output);
}
@Test public void testConversion9() throws Exception {
String input = "SELECT convert(PART_WEIGHT, date) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT to_date(PARTS.PART_WEIGHT, 'YYYY-MM-DD') FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(PARTS.PART_WEIGHT AS date) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -129,7 +137,7 @@
}
@Test public void testConversion10() throws Exception {
String input = "SELECT convert(PART_WEIGHT, time) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT to_timestamp(('1970-01-01 ' || PARTS.PART_WEIGHT), 'YYYY-MM-DD HH24:MI:SS') FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(PARTS.PART_WEIGHT AS time) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -137,7 +145,7 @@
}
@Test public void testConversion11() throws Exception {
String input = "SELECT convert(PART_WEIGHT, timestamp) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF') FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(PARTS.PART_WEIGHT AS timestamp) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -145,7 +153,7 @@
}
@Test public void testConversion12() throws Exception {
String input = "SELECT convert(convert(PART_WEIGHT, time), string) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT to_char(to_timestamp(('1970-01-01 ' || PARTS.PART_WEIGHT), 'YYYY-MM-DD HH24:MI:SS'), 'HH24:MI:SS') FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT to_char(cast(PARTS.PART_WEIGHT AS time), 'HH24:MI:SS') FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -153,7 +161,7 @@
}
@Test public void testConversion13() throws Exception {
String input = "SELECT convert(convert(PART_WEIGHT, timestamp), string) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT to_char(to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF'), 'YYYY-MM-DD HH24:MI:SS.US') FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT to_char(cast(PARTS.PART_WEIGHT AS timestamp), 'YYYY-MM-DD HH24:MI:SS.UF') FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -161,7 +169,7 @@
}
@Test public void testConversion14() throws Exception {
String input = "SELECT convert(convert(PART_WEIGHT, date), string) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT to_char(to_date(PARTS.PART_WEIGHT, 'YYYY-MM-DD'), 'YYYY-MM-DD') FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT to_char(cast(PARTS.PART_WEIGHT AS date), 'YYYY-MM-DD') FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -169,7 +177,7 @@
}
@Test public void testConversion15() throws Exception {
String input = "SELECT convert(convert(PART_WEIGHT, timestamp), date) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT cast(to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF') AS date) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(cast(PARTS.PART_WEIGHT AS timestamp) AS date) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -177,7 +185,7 @@
}
@Test public void testConversion16() throws Exception {
String input = "SELECT convert(convert(PART_WEIGHT, timestamp), time) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT cast(to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF') AS time) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(date_trunc('second', cast(PARTS.PART_WEIGHT AS timestamp)) AS time) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -185,7 +193,7 @@
}
@Test public void testConversion17() throws Exception {
String input = "SELECT convert(convert(PART_WEIGHT, time), timestamp) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT to_timestamp(to_char(to_timestamp(('1970-01-01 ' || PARTS.PART_WEIGHT), 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(PARTS.PART_WEIGHT AS time) + TIMESTAMP '1970-01-01' FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -193,7 +201,7 @@
}
@Test public void testConversion18() throws Exception {
String input = "SELECT convert(convert(PART_WEIGHT, date), timestamp) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT to_timestamp(to_char(to_date(PARTS.PART_WEIGHT, 'YYYY-MM-DD'), 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(cast(PARTS.PART_WEIGHT AS date) AS timestamp) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -201,12 +209,12 @@
}
@Test public void testConversion19() throws Exception {
String input = "SELECT convert(convert(PART_WEIGHT, boolean), string) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT CASE WHEN cast(PARTS.PART_WEIGHT AS boolean) = TRUE THEN '1' ELSE '0' END FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT CASE WHEN cast(PARTS.PART_WEIGHT AS boolean) THEN 'true' WHEN not(cast(PARTS.PART_WEIGHT AS boolean)) THEN 'false' END FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
output);
- }
+ }
@Test public void testLog() throws Exception {
String input = "SELECT log(convert(PART_WEIGHT, double)) FROM PARTS"; //$NON-NLS-1$
@@ -242,7 +250,7 @@
@Test public void testDayOfWeek() throws Exception {
String input = "SELECT dayofweek(convert(PART_WEIGHT, timestamp)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT (EXTRACT(DOW FROM to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF')) + 1) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT (EXTRACT(DOW FROM cast(PARTS.PART_WEIGHT AS timestamp)) + 1) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -250,7 +258,7 @@
}
@Test public void testDayOfMonth() throws Exception {
String input = "SELECT dayofmonth(convert(PART_WEIGHT, timestamp)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT EXTRACT(DAY FROM to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF')) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT EXTRACT(DAY FROM cast(PARTS.PART_WEIGHT AS timestamp)) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -258,7 +266,7 @@
}
@Test public void testDayOfYear() throws Exception {
String input = "SELECT dayofyear(convert(PART_WEIGHT, timestamp)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT EXTRACT(DOY FROM to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF')) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT EXTRACT(DOY FROM cast(PARTS.PART_WEIGHT AS timestamp)) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -266,7 +274,7 @@
}
@Test public void testHour() throws Exception {
String input = "SELECT hour(convert(PART_WEIGHT, timestamp)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT EXTRACT(HOUR FROM to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF')) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT EXTRACT(HOUR FROM cast(PARTS.PART_WEIGHT AS timestamp)) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -274,7 +282,7 @@
}
@Test public void testMinute() throws Exception {
String input = "SELECT minute(convert(PART_WEIGHT, timestamp)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT EXTRACT(MINUTE FROM to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF')) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT EXTRACT(MINUTE FROM cast(PARTS.PART_WEIGHT AS timestamp)) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -282,7 +290,7 @@
}
@Test public void testMonth() throws Exception {
String input = "SELECT month(convert(PART_WEIGHT, timestamp)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT EXTRACT(MONTH FROM to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF')) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT EXTRACT(MONTH FROM cast(PARTS.PART_WEIGHT AS timestamp)) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -290,7 +298,7 @@
}
@Test public void testQuarter() throws Exception {
String input = "SELECT quarter(convert(PART_WEIGHT, timestamp)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT EXTRACT(QUARTER FROM to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF')) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT EXTRACT(QUARTER FROM cast(PARTS.PART_WEIGHT AS timestamp)) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -298,7 +306,7 @@
}
@Test public void testSecond() throws Exception {
String input = "SELECT second(convert(PART_WEIGHT, timestamp)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT EXTRACT(SECOND FROM to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF')) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT EXTRACT(SECOND FROM cast(PARTS.PART_WEIGHT AS timestamp)) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -306,7 +314,7 @@
}
@Test public void testWeek() throws Exception {
String input = "SELECT week(convert(PART_WEIGHT, timestamp)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT EXTRACT(WEEK FROM to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF')) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT EXTRACT(WEEK FROM cast(PARTS.PART_WEIGHT AS timestamp)) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -314,7 +322,7 @@
}
@Test public void testYear() throws Exception {
String input = "SELECT year(convert(PART_WEIGHT, timestamp)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT EXTRACT(YEAR FROM to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF')) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT EXTRACT(YEAR FROM cast(PARTS.PART_WEIGHT AS timestamp)) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -322,7 +330,7 @@
}
@Test public void testDayName() throws Exception {
String input = "SELECT dayname(convert(PART_WEIGHT, timestamp)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT RTRIM(TO_CHAR(to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF'), 'Day')) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT rtrim(TO_CHAR(cast(PARTS.PART_WEIGHT AS timestamp), 'Day')) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -330,7 +338,7 @@
}
@Test public void testMonthName() throws Exception {
String input = "SELECT monthname(convert(PART_WEIGHT, timestamp)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT RTRIM(TO_CHAR(to_timestamp(PARTS.PART_WEIGHT, 'YYYY-MM-DD HH24:MI:SS.UF'), 'Month')) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT rtrim(TO_CHAR(cast(PARTS.PART_WEIGHT AS timestamp), 'Month')) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -404,7 +412,7 @@
*/
@Test public void testLocate() throws Exception {
String input = "SELECT locate(INTNUM, 'chimp', 1) FROM BQT1.SMALLA"; //$NON-NLS-1$
- String output = "SELECT position(cast(SmallA.IntNum AS varchar) in substr('chimp', 1)) FROM SmallA"; //$NON-NLS-1$
+ String output = "SELECT position(cast(SmallA.IntNum AS varchar(4000)) in substr('chimp', 1)) FROM SmallA"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
input, output,
@@ -438,7 +446,7 @@
*/
@Test public void testLocate3() throws Exception {
String input = "SELECT locate(INTNUM, '234567890', 1) FROM BQT1.SMALLA WHERE INTKEY = 26"; //$NON-NLS-1$
- String output = "SELECT position(cast(SmallA.IntNum AS varchar) in substr('234567890', 1)) FROM SmallA WHERE SmallA.IntKey = 26"; //$NON-NLS-1$
+ String output = "SELECT position(cast(SmallA.IntNum AS varchar(4000)) in substr('234567890', 1)) FROM SmallA WHERE SmallA.IntKey = 26"; //$NON-NLS-1$
MetadataFactory.helpTestVisitor(MetadataFactory.BQT_VDB,
input, output,
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sqlserver/TestSqlServerConversionVisitor.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sqlserver/TestSqlServerConversionVisitor.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sqlserver/TestSqlServerConversionVisitor.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -67,7 +67,7 @@
@Test
public void testModFunction() throws Exception {
String input = "SELECT mod(CONVERT(PART_ID, INTEGER), 13) FROM parts"; //$NON-NLS-1$
- String output = "SELECT (convert(int, PARTS.PART_ID) % 13) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT (cast(PARTS.PART_ID AS int) % 13) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -87,7 +87,7 @@
@Test
public void testDayOfMonthFunction() throws Exception {
String input = "SELECT dayofmonth(convert(PARTS.PART_ID, date)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT day(convert(datetime, PARTS.PART_ID)) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT {fn dayofmonth(cast(PARTS.PART_ID AS datetime))} FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -123,5 +123,14 @@
input,
output);
}
+
+ @Test public void testConvert() throws Exception {
+ String input = "select convert(timestampvalue, date), convert(timestampvalue, string), convert(datevalue, string) from bqt1.smalla"; //$NON-NLS-1$
+ String output = "SELECT cast(replace(convert(varchar, SmallA.TimestampValue, 102), '.', '-') AS datetime), convert(varchar, SmallA.TimestampValue, 21), replace(convert(varchar, SmallA.DateValue, 102), '.', '-') FROM SmallA"; //$NON-NLS-1$
+
+ helpTestVisitor(getBQTVDB(),
+ input,
+ output);
+ }
}
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseConvertModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseConvertModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseConvertModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -6,7 +6,7 @@
*
* 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
+ * 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,
@@ -22,21 +22,22 @@
package org.teiid.connector.jdbc.sybase;
+import static org.junit.Assert.*;
+
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Timestamp;
import java.util.Properties;
-import org.teiid.connector.jdbc.sybase.SybaseConvertModifier;
-import org.teiid.connector.jdbc.sybase.SybaseSQLTranslator;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.jdbc.translator.SQLConversionVisitor;
import org.teiid.connector.language.IExpression;
import org.teiid.connector.language.IFunction;
import org.teiid.connector.language.ILanguageFactory;
import org.teiid.connector.language.ILiteral;
-import junit.framework.TestCase;
-
import com.metamatrix.cdk.CommandBuilder;
import com.metamatrix.cdk.api.EnvironmentUtility;
import com.metamatrix.common.types.DataTypeManager;
@@ -44,33 +45,24 @@
/**
*/
-public class TestSybaseConvertModifier extends TestCase {
+public class TestSybaseConvertModifier {
private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
-
- /**
- * Constructor for TestSybaseConvertModifier.
- * @param name
- */
- public TestSybaseConvertModifier(String name) {
- super(name);
+ private static SybaseSQLTranslator trans = new SybaseSQLTranslator();
+
+ @BeforeClass
+ public static void setup() throws ConnectorException {
+ trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
}
-
+
public String helpGetString(IExpression expr) throws Exception {
- SybaseSQLTranslator trans = new SybaseSQLTranslator();
- trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
-
SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor();
sqlVisitor.append(expr);
-
return sqlVisitor.toString();
}
private void helpGetString1(IFunction func, String expectedStr) throws Exception {
- SybaseConvertModifier mod = new SybaseConvertModifier(LANG_FACTORY);
- IExpression expr = mod.modify(func);
-
- assertEquals(expectedStr, helpGetString(expr));
+ assertEquals(expectedStr, helpGetString(func));
}
public void helpTest(IExpression srcExpression, String tgtType, String expectedExpression) throws Exception {
@@ -80,15 +72,12 @@
LANG_FACTORY.createLiteral(tgtType, String.class)},
DataTypeManager.getDataTypeClass(tgtType));
- SybaseConvertModifier mod = new SybaseConvertModifier(LANG_FACTORY);
- IExpression expr = mod.modify(func);
-
assertEquals("Error converting from " + DataTypeManager.getDataTypeName(srcExpression.getType()) + " to " + tgtType, //$NON-NLS-1$ //$NON-NLS-2$
- expectedExpression, helpGetString(expr));
+ expectedExpression, helpGetString(func));
}
// original test -- this is not a drop one anymore
- public void testModDrop() throws Exception {
+ @Test public void testModDrop() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral("5", String.class), //$NON-NLS-1$
@@ -96,13 +85,11 @@
},
Integer.class);
- SybaseConvertModifier mod = new SybaseConvertModifier(LANG_FACTORY);
- IExpression expr = mod.modify(func);
- assertEquals("convert(int, '5')", helpGetString(expr)); //$NON-NLS-1$
+ assertEquals("cast('5' AS int)", helpGetString(func)); //$NON-NLS-1$
}
- /********************Beginning of convert(INPUT, date) ******************/
- public void testStringToDate() throws Exception {
+ /********************Beginning of cast(date AS INPUT) ******************/
+ @Test public void testStringToDate() throws Exception {
String dateStr = "2003-12-31"; //$NON-NLS-1$
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
@@ -110,13 +97,10 @@
LANG_FACTORY.createLiteral("date", String.class)}, //$NON-NLS-1$
java.sql.Date.class);
- SybaseConvertModifier mod = new SybaseConvertModifier(LANG_FACTORY);
- IExpression expr = mod.modify(func);
-
- assertEquals("convert(datetime, '2003-12-31')", helpGetString(expr)); //$NON-NLS-1$
+ assertEquals("cast('2003-12-31' AS datetime)", helpGetString(func)); //$NON-NLS-1$
}
- public void testTimestampToDate() throws Exception {
+ @Test public void testTimestampToDate() throws Exception {
ILiteral c = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(89, 2, 3, 7, 8, 12, 99999), Timestamp.class);
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
@@ -124,12 +108,12 @@
LANG_FACTORY.createLiteral("date", String.class)}, //$NON-NLS-1$
java.sql.Date.class);
- helpGetString1(func, "convert(datetime, convert(varchar, {ts'1989-03-03 07:08:12.000099999'}, 109))"); //$NON-NLS-1$
+ helpGetString1(func, "cast(stuff(stuff(convert(varchar, {ts'1989-03-03 07:08:12.0'}, 102), 5, 1, '-'), 8, 1, '-') AS datetime)"); //$NON-NLS-1$
}
- /********************END of convert(INPUT, date) ******************/
- /********************Beginning of convert(INPUT, time) ******************/
- public void testStringToTime() throws Exception {
+ /********************END of cast(date AS INPUT) ******************/
+ /********************Beginning of cast(time AS INPUT) ******************/
+ @Test public void testStringToTime() throws Exception {
String timeStr = "12:08:07"; //$NON-NLS-1$
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
@@ -137,10 +121,10 @@
LANG_FACTORY.createLiteral("time", String.class)}, //$NON-NLS-1$
java.sql.Time.class);
- helpGetString1(func, "convert(datetime, '12:08:07')"); //$NON-NLS-1$
+ helpGetString1(func, "cast('12:08:07' AS datetime)"); //$NON-NLS-1$
}
- public void testTimestampToTime() throws Exception {
+ @Test public void testTimestampToTime() throws Exception {
ILiteral c = LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(89, 2, 3, 7, 8, 12, 99999), Timestamp.class);
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
@@ -148,12 +132,12 @@
LANG_FACTORY.createLiteral("time", String.class)}, //$NON-NLS-1$
java.sql.Time.class);
- helpGetString1(func, "convert(datetime, convert(varchar, {ts'1989-03-03 07:08:12.000099999'}, 108))"); //$NON-NLS-1$
+ helpGetString1(func, "cast('1970-01-01 ' + convert(varchar, {ts'1989-03-03 07:08:12.0'}, 8) AS datetime)"); //$NON-NLS-1$
}
- /********************END of convert(INPUT, time) ******************/
+ /********************END of cast(time AS INPUT) ******************/
- /********************Beginning of convert(INPUT, timestamp) ******************/
- public void testStringToTimestamp() throws Exception {
+ /********************Beginning of cast(timestamp AS INPUT) ******************/
+ @Test public void testStringToTimestamp() throws Exception {
String timestampStr = "1989-07-09 12:08:07"; //$NON-NLS-1$
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
@@ -161,52 +145,42 @@
LANG_FACTORY.createLiteral("timestamp", String.class)}, //$NON-NLS-1$
java.sql.Timestamp.class);
- helpGetString1(func, "convert(datetime, '1989-07-09 12:08:07')"); //$NON-NLS-1$
+ helpGetString1(func, "cast('1989-07-09 12:08:07' AS datetime)"); //$NON-NLS-1$
}
- public void testTimeToTimestamp() throws Exception {
+ @Test public void testTimeToTimestamp() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(TimestampUtil.createTime(12, 2, 3), java.sql.Time.class),
LANG_FACTORY.createLiteral("timestamp", String.class)}, //$NON-NLS-1$
java.sql.Timestamp.class);
- helpGetString1(func, "convert(datetime, {ts'1900-01-01 12:02:03'})"); //$NON-NLS-1$
+ helpGetString1(func, "{ts'1970-01-01 12:02:03'}"); //$NON-NLS-1$
}
- public void testDateToTimestamp() throws Exception {
+ @Test public void testDateToTimestamp() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(TimestampUtil.createDate(89, 2, 3), java.sql.Date.class),
LANG_FACTORY.createLiteral("timestamp", String.class)}, //$NON-NLS-1$
java.sql.Timestamp.class);
- helpGetString1(func, "convert(datetime, {d'1989-03-03'})"); //$NON-NLS-1$
+ helpGetString1(func, "{d'1989-03-03'}"); //$NON-NLS-1$
}
- /********************END of convert(INPUT, timestamp) ******************/
+ /********************END of cast(timestamp AS INPUT) ******************/
- /*****************Beginning of convert(input, string)******************/
- public void testBooleanToStringa() throws Exception {
+ /*****************Beginning of cast(string AS input)******************/
+ @Test public void testBooleanToStringa() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class),
LANG_FACTORY.createLiteral("string", String.class)}, //$NON-NLS-1$
String.class);
- helpGetString1(func, "convert(varchar, 1)"); //$NON-NLS-1$
+ helpGetString1(func, "CASE WHEN 1 = 0 THEN 'false' WHEN 1 IS NOT NULL THEN 'true' END"); //$NON-NLS-1$
}
- public void testBooleanToStringb() throws Exception {
- IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
- new IExpression[] {
- LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class),
- LANG_FACTORY.createLiteral("string", String.class)}, //$NON-NLS-1$
- String.class);
-
- helpGetString1(func, "convert(varchar, 0)"); //$NON-NLS-1$
- }
-
- public void testTimestampToString() throws Exception {
+ @Test public void testTimestampToString() throws Exception {
Timestamp ts = TimestampUtil.createTimestamp(103, 10, 1, 12, 5, 2, 0);
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
@@ -214,10 +188,10 @@
LANG_FACTORY.createLiteral("string", String.class)}, //$NON-NLS-1$
String.class);
- helpGetString1(func, "convert(varchar, {ts'2003-11-01 12:05:02.0'}, 109)"); //$NON-NLS-1$
+ helpGetString1(func, "stuff(convert(varchar, {ts'2003-11-01 12:05:02.0'}, 123), 11, 1, ' ')"); //$NON-NLS-1$
}
- public void testDateToString() throws Exception {
+ @Test public void testDateToString() throws Exception {
java.sql.Date d = TimestampUtil.createDate(103, 10, 1);
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
@@ -225,10 +199,10 @@
LANG_FACTORY.createLiteral("string", String.class)}, //$NON-NLS-1$
String.class);
- helpGetString1(func, "convert(varchar, {d'2003-11-01'}, 101)"); //$NON-NLS-1$
+ helpGetString1(func, "stuff(stuff(convert(varchar, {d'2003-11-01'}, 102), 5, 1, '-'), 8, 1, '-')"); //$NON-NLS-1$
}
- public void testTimeToString() throws Exception {
+ @Test public void testTimeToString() throws Exception {
java.sql.Time t = TimestampUtil.createTime(3, 10, 1);
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
@@ -236,10 +210,10 @@
LANG_FACTORY.createLiteral("string", String.class)}, //$NON-NLS-1$
String.class);
- helpGetString1(func, "convert(varchar, {ts'1900-01-01 03:10:01'}, 108)"); //$NON-NLS-1$
+ helpGetString1(func, "convert(varchar, {ts'1970-01-01 03:10:01'}, 8)"); //$NON-NLS-1$
}
- public void testBigDecimalToString() throws Exception {
+ @Test public void testBigDecimalToString() throws Exception {
java.math.BigDecimal m = new java.math.BigDecimal("-123124534.3"); //$NON-NLS-1$
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
@@ -247,798 +221,752 @@
LANG_FACTORY.createLiteral("string", String.class)}, //$NON-NLS-1$
String.class);
- helpGetString1(func, "convert(varchar, -123124534.3)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(-123124534.3 AS varchar(40))"); //$NON-NLS-1$
}
- /***************** End of convert(input, string)******************/
+ /***************** End of cast(string AS input)******************/
- /***************** Beginning of convert(input, char) ************/
- public void testStringToChar() throws Exception {
+ /***************** Beginning of cast(char AS input) ************/
+ @Test public void testStringToChar() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral("12", String.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("char", Character.class)}, //$NON-NLS-1$
Character.class);
- helpGetString1(func, "convert(char, '12')"); //$NON-NLS-1$
+ helpGetString1(func, "cast('12' AS char(1))"); //$NON-NLS-1$
}
- /***************** End of convert(input, char)******************/
+ /***************** End of cast(char AS input)******************/
- /***************** Beginning of convert(input, boolean) ************/
- public void testStringToBoolean() throws Exception {
+ /***************** Beginning of cast(boolean AS input) ************/
+ @Test public void testStringToBoolean() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral("true", String.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
Boolean.class);
- helpGetString1(func, "convert(bit, 'true')"); //$NON-NLS-1$
+ helpGetString1(func, "CASE WHEN 'true' IN ('false', '0') THEN 0 WHEN 'true' IS NOT NULL THEN 1 END"); //$NON-NLS-1$
}
- public void testByteToBoolean() throws Exception {
+ @Test public void testByteToBoolean() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class),
LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
Boolean.class);
- helpGetString1(func, "convert(bit, 1)"); //$NON-NLS-1$
+ helpGetString1(func, "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$
}
- public void testShortToBoolean() throws Exception {
+ @Test public void testShortToBoolean() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Short((short) 0), Short.class),
LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
Boolean.class);
- helpGetString1(func, "convert(bit, 0)"); //$NON-NLS-1$
+ helpGetString1(func, "CASE WHEN 0 = 0 THEN 0 WHEN 0 IS NOT NULL THEN 1 END"); //$NON-NLS-1$
}
- public void testIntegerToBoolean() throws Exception {
+ @Test public void testIntegerToBoolean() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Integer(1), Integer.class),
LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
Boolean.class);
- helpGetString1(func, "convert(bit, 1)"); //$NON-NLS-1$
+ helpGetString1(func, "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$
}
- public void testLongToBoolean() throws Exception {
+ @Test public void testLongToBoolean() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Long(1), Long.class),
LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
Boolean.class);
- helpGetString1(func, "convert(bit, 1)"); //$NON-NLS-1$
+ helpGetString1(func, "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$
}
- public void testBigIntegerToBoolean() throws Exception {
+ @Test public void testBigIntegerToBoolean() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new java.math.BigInteger("1"), java.math.BigInteger.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
Boolean.class);
- helpGetString1(func, "convert(bit, 1)"); //$NON-NLS-1$
+ helpGetString1(func, "CASE WHEN 1 = 0 THEN 0 WHEN 1 IS NOT NULL THEN 1 END"); //$NON-NLS-1$
}
- public void testFloatToBoolean() throws Exception {
+ @Test public void testFloatToBoolean() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Float((float)1.0), Float.class),
LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
Boolean.class);
- helpGetString1(func, "convert(bit, 1.0)"); //$NON-NLS-1$
+ helpGetString1(func, "CASE WHEN 1.0 = 0 THEN 0 WHEN 1.0 IS NOT NULL THEN 1 END"); //$NON-NLS-1$
}
- public void testDoubleToBoolean() throws Exception {
+ @Test public void testDoubleToBoolean() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Double(1.0), Double.class),
LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
Boolean.class);
- helpGetString1(func, "convert(bit, 1.0)"); //$NON-NLS-1$
+ helpGetString1(func, "CASE WHEN 1.0 = 0 THEN 0 WHEN 1.0 IS NOT NULL THEN 1 END"); //$NON-NLS-1$
}
- public void testBigDecimalToBoolean() throws Exception {
+ @Test public void testBigDecimalToBoolean() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new java.math.BigDecimal("1.0"), java.math.BigDecimal.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("boolean", Boolean.class)}, //$NON-NLS-1$
Boolean.class);
- helpGetString1(func, "convert(bit, 1.0)"); //$NON-NLS-1$
+ helpGetString1(func, "CASE WHEN 1.0 = 0 THEN 0 WHEN 1.0 IS NOT NULL THEN 1 END"); //$NON-NLS-1$
}
- /***************** End of convert(input, boolean)******************/
+ /***************** End of cast(boolean AS input)******************/
- /***************** Beginning of convert(input, byte) ************/
- public void testStringToByte() throws Exception {
+ /***************** Beginning of cast(byte AS input) ************/
+ @Test public void testStringToByte() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral("12", String.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("byte", Byte.class)}, //$NON-NLS-1$
Byte.class);
- helpGetString1(func, "convert(tinyint, '12')"); //$NON-NLS-1$
+ helpGetString1(func, "cast('12' AS smallint)"); //$NON-NLS-1$
}
- public void testBooleanToBytea() throws Exception {
+ @Test public void testBooleanToBytea() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class),
LANG_FACTORY.createLiteral("byte", Byte.class)}, //$NON-NLS-1$
Byte.class);
- helpGetString1(func, "convert(tinyint, 1)"); //$NON-NLS-1$
+ helpGetString1(func, "1"); //$NON-NLS-1$
}
- public void testBooleanToByteb() throws Exception {
+ @Test public void testShortToByte() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
- LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class),
- LANG_FACTORY.createLiteral("byte", Byte.class)}, //$NON-NLS-1$
- Byte.class);
-
- helpGetString1(func, "convert(tinyint, 0)"); //$NON-NLS-1$
- }
-
- public void testShortToByte() throws Exception {
- IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
- new IExpression[] {
LANG_FACTORY.createLiteral(new Short((short) 123), Short.class),
LANG_FACTORY.createLiteral("byte", Byte.class)}, //$NON-NLS-1$
Byte.class);
- helpGetString1(func, "convert(tinyint, 123)"); //$NON-NLS-1$
+ helpGetString1(func, "123"); //$NON-NLS-1$
}
- public void testIntegerToByte() throws Exception {
+ @Test public void testIntegerToByte() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Integer(1232321), Integer.class),
LANG_FACTORY.createLiteral("byte", Byte.class)}, //$NON-NLS-1$
Byte.class);
- helpGetString1(func, "convert(tinyint, 1232321)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1232321 AS smallint)"); //$NON-NLS-1$
}
- public void testLongToByte() throws Exception {
+ @Test public void testLongToByte() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Long(1231232341), Long.class),
LANG_FACTORY.createLiteral("byte", Byte.class)}, //$NON-NLS-1$
Byte.class);
- helpGetString1(func, "convert(tinyint, 1231232341)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1231232341 AS smallint)"); //$NON-NLS-1$
}
- public void testBigIntegerToByte() throws Exception {
+ @Test public void testBigIntegerToByte() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new java.math.BigInteger("123"), java.math.BigInteger.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("byte", Byte.class)}, //$NON-NLS-1$
Byte.class);
- helpGetString1(func, "convert(tinyint, 123)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(123 AS smallint)"); //$NON-NLS-1$
}
- public void testFloatToByte() throws Exception {
+ @Test public void testFloatToByte() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Float((float) 123.0), Float.class),
LANG_FACTORY.createLiteral("byte", Byte.class)}, //$NON-NLS-1$
Byte.class);
- helpGetString1(func, "convert(tinyint, 123.0)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(123.0 AS smallint)"); //$NON-NLS-1$
}
- public void testDoubleToByte() throws Exception {
+ @Test public void testDoubleToByte() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Double(1.0), Double.class),
LANG_FACTORY.createLiteral("byte", Byte.class)}, //$NON-NLS-1$
Byte.class);
- helpGetString1(func, "convert(tinyint, 1.0)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1.0 AS smallint)"); //$NON-NLS-1$
}
- public void testBigDecimalToByte() throws Exception {
+ @Test public void testBigDecimalToByte() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new java.math.BigDecimal("12.3"), java.math.BigDecimal.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("byte", Byte.class)}, //$NON-NLS-1$
Byte.class);
- helpGetString1(func, "convert(tinyint, 12.3)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(12.3 AS smallint)"); //$NON-NLS-1$
}
- /***************** End of convert(input, byte)******************/
+ /***************** End of cast(byte AS input)******************/
- /*****************Beginning of convert(input, short)************/
- public void testStringToShort() throws Exception {
+ /*****************Beginning of cast(short AS input)************/
+ @Test public void testStringToShort() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral("123", String.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("short", Short.class)}, //$NON-NLS-1$
Short.class);
- helpGetString1(func, "convert(smallint, '123')"); //$NON-NLS-1$
+ helpGetString1(func, "cast('123' AS smallint)"); //$NON-NLS-1$
}
- public void testBooleanToShorta() throws Exception {
+ @Test public void testBooleanToShorta() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class),
LANG_FACTORY.createLiteral("short", Short.class)}, //$NON-NLS-1$
Short.class);
- helpGetString1(func, "convert(smallint, 1)"); //$NON-NLS-1$
+ helpGetString1(func, "1"); //$NON-NLS-1$
}
- public void testBooleanToShortb() throws Exception {
+ @Test public void testByteToShort() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
- LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class),
- LANG_FACTORY.createLiteral("short", Short.class)}, //$NON-NLS-1$
- Short.class);
-
- helpGetString1(func, "convert(smallint, 0)"); //$NON-NLS-1$
- }
-
- public void testByteToShort() throws Exception {
- IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
- new IExpression[] {
LANG_FACTORY.createLiteral(new Byte((byte) 12), Byte.class),
LANG_FACTORY.createLiteral("short", Short.class)}, //$NON-NLS-1$
Short.class);
- helpGetString1(func, "convert(smallint, 12)"); //$NON-NLS-1$
+ helpGetString1(func, "12"); //$NON-NLS-1$
}
- public void testIntegerToShort() throws Exception {
+ @Test public void testIntegerToShort() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Integer(1232321), Integer.class),
LANG_FACTORY.createLiteral("short", Short.class)}, //$NON-NLS-1$
Short.class);
- helpGetString1(func, "convert(smallint, 1232321)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1232321 AS smallint)"); //$NON-NLS-1$
}
- public void testLongToShort() throws Exception {
+ @Test public void testLongToShort() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Long(1231232341), Long.class),
LANG_FACTORY.createLiteral("short", Short.class)}, //$NON-NLS-1$
Short.class);
- helpGetString1(func, "convert(smallint, 1231232341)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1231232341 AS smallint)"); //$NON-NLS-1$
}
- public void testBigIntegerToShort() throws Exception {
+ @Test public void testBigIntegerToShort() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new java.math.BigInteger("123"), java.math.BigInteger.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("short", Short.class)}, //$NON-NLS-1$
Short.class);
- helpGetString1(func, "convert(smallint, 123)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(123 AS smallint)"); //$NON-NLS-1$
}
- public void testFloatToShort() throws Exception {
+ @Test public void testFloatToShort() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Float((float) 123.0), Float.class),
LANG_FACTORY.createLiteral("short", Short.class)}, //$NON-NLS-1$
Short.class);
- helpGetString1(func, "convert(smallint, 123.0)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(123.0 AS smallint)"); //$NON-NLS-1$
}
- public void testDoubleToShort() throws Exception {
+ @Test public void testDoubleToShort() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Double(1.0), Double.class),
LANG_FACTORY.createLiteral("short", Short.class)}, //$NON-NLS-1$
Short.class);
- helpGetString1(func, "convert(smallint, 1.0)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1.0 AS smallint)"); //$NON-NLS-1$
}
- public void testBigDecimalToShort() throws Exception {
+ @Test public void testBigDecimalToShort() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new java.math.BigDecimal("12.3"), java.math.BigDecimal.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("short", Short.class)}, //$NON-NLS-1$
Short.class);
- helpGetString1(func, "convert(smallint, 12.3)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(12.3 AS smallint)"); //$NON-NLS-1$
}
- /***************** End of convert(input, short)******************/
+ /***************** End of cast(short AS input)******************/
- /***************** Beginning of convert(input, integer) ************/
- public void testStringToInteger() throws Exception {
+ /***************** Beginning of cast(integer AS input) ************/
+ @Test public void testStringToInteger() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral("12332", String.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
Integer.class);
- helpGetString1(func, "convert(int, '12332')"); //$NON-NLS-1$
+ helpGetString1(func, "cast('12332' AS int)"); //$NON-NLS-1$
}
- public void testBooleanToIntegera() throws Exception {
+ @Test public void testBooleanToIntegera() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class),
LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
Integer.class);
- helpGetString1(func, "convert(int, 1)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1 AS int)"); //$NON-NLS-1$
}
- public void testBooleanToIntegerb() throws Exception {
+ @Test public void testBooleanToIntegerb() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class),
LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
Integer.class);
- helpGetString1(func, "convert(int, 0)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(0 AS int)"); //$NON-NLS-1$
}
- public void testByteToInteger() throws Exception {
+ @Test public void testByteToInteger() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Byte((byte)12), Byte.class),
LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
Integer.class);
- helpGetString1(func, "convert(int, 12)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(12 AS int)"); //$NON-NLS-1$
}
- public void testShortToInteger() throws Exception {
+ @Test public void testShortToInteger() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Short((short)1243 ), Short.class),
LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
Integer.class);
- helpGetString1(func, "convert(int, 1243)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1243 AS int)"); //$NON-NLS-1$
}
- public void testLongToInteger() throws Exception {
+ @Test public void testLongToInteger() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Long(1231232341), Long.class),
LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
Integer.class);
- helpGetString1(func, "convert(int, 1231232341)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1231232341 AS int)"); //$NON-NLS-1$
}
- public void testBigIntegerToInteger() throws Exception {
+ @Test public void testBigIntegerToInteger() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new java.math.BigInteger("123"), java.math.BigInteger.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
Integer.class);
- helpGetString1(func, "convert(int, 123)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(123 AS int)"); //$NON-NLS-1$
}
- public void testFloatToInteger() throws Exception {
+ @Test public void testFloatToInteger() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Float((float) 123.0), Float.class),
LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
Integer.class);
- helpGetString1(func, "convert(int, 123.0)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(123.0 AS int)"); //$NON-NLS-1$
}
- public void testDoubleToInteger() throws Exception {
+ @Test public void testDoubleToInteger() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new Double(1.0), Double.class),
LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
Integer.class);
- helpGetString1(func, "convert(int, 1.0)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1.0 AS int)"); //$NON-NLS-1$
}
- public void testBigDecimalToInteger() throws Exception {
+ @Test public void testBigDecimalToInteger() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral(new java.math.BigDecimal("12.3"), java.math.BigDecimal.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("integer", Integer.class)}, //$NON-NLS-1$
Integer.class);
- helpGetString1(func, "convert(int, 12.3)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(12.3 AS int)"); //$NON-NLS-1$
}
- /***************** End of convert(input, integer)******************/
+ /***************** End of cast(integer AS input)******************/
- /***************** Beginning of convert(input, long) ************/
- public void testStringToLong() throws Exception {
+ /***************** Beginning of cast(long AS input) ************/
+ @Test public void testStringToLong() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral("12332131413", String.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("long", Long.class)}, //$NON-NLS-1$
Long.class);
- helpGetString1(func, "convert(numeric, '12332131413')"); //$NON-NLS-1$
+ helpGetString1(func, "cast('12332131413' AS numeric(19,0))"); //$NON-NLS-1$
}
- public void testBooleanToLonga() throws Exception {
+ @Test public void testBooleanToLonga() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), LANG_FACTORY.createLiteral("long", Long.class)}, //$NON-NLS-1$
- Integer.class);
-
- helpGetString1(func, "convert(numeric, 1)"); //$NON-NLS-1$
- }
-
- public void testBooleanToLongb() throws Exception {
- IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
- new IExpression[] { LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), LANG_FACTORY.createLiteral("long", Long.class)}, //$NON-NLS-1$
Long.class);
- helpGetString1(func, "convert(numeric, 0)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1 AS numeric(19,0))"); //$NON-NLS-1$
}
-
- /***************** End of convert(input, long)******************/
+
+ /***************** End of cast(long AS input)******************/
- /***************** Beginning of convert(input, biginteger) ************/
- public void testStringToBigInteger() throws Exception {
+ /***************** Beginning of cast(biginteger AS input) ************/
+ @Test public void testStringToBigInteger() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral("12323143241414", String.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("biginteger", java.math.BigInteger.class)}, //$NON-NLS-1$
java.math.BigInteger.class);
- helpGetString1(func, "convert(numeric, '12323143241414')"); //$NON-NLS-1$
+ helpGetString1(func, "cast('12323143241414' AS numeric(38, 0))"); //$NON-NLS-1$
}
- public void testBooleanToBigIntegera() throws Exception {
+ @Test public void testBooleanToBigIntegera() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), LANG_FACTORY.createLiteral("biginteger", java.math.BigInteger.class)}, //$NON-NLS-1$
- Integer.class);
+ BigInteger.class);
- helpGetString1(func, "convert(numeric, 1)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1 AS numeric(38, 0))"); //$NON-NLS-1$
}
- public void testBooleanToBigIntegerb() throws Exception {
- IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
- new IExpression[] { LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class), LANG_FACTORY.createLiteral("biginteger", java.math.BigInteger.class)}, //$NON-NLS-1$
- java.math.BigInteger.class);
-
- helpGetString1(func, "convert(numeric, 0)"); //$NON-NLS-1$
- }
+ /***************** End of cast(biginteger AS input)******************/
- /***************** End of convert(input, biginteger)******************/
-
- /***************** Beginning of convert(input, float) ************/
- public void testStringToFloat() throws Exception {
+ /***************** Beginning of cast(float AS input) ************/
+ @Test public void testStringToFloat() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral("123", String.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("float", Float.class)}, //$NON-NLS-1$
Float.class);
- helpGetString1(func, "convert(real, '123')"); //$NON-NLS-1$
+ helpGetString1(func, "cast('123' AS real)"); //$NON-NLS-1$
}
- public void testBooleanToFloata() throws Exception {
+ @Test public void testBooleanToFloata() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class),
LANG_FACTORY.createLiteral("float", Float.class)}, //$NON-NLS-1$
Float.class);
- helpGetString1(func, "convert(real, 1)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1 AS real)"); //$NON-NLS-1$
}
- public void testBooleanToFloatb() throws Exception {
+ @Test public void testBooleanToFloatb() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] { LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class),
LANG_FACTORY.createLiteral("float", Float.class)}, //$NON-NLS-1$
Float.class);
- helpGetString1(func, "convert(real, 0)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(0 AS real)"); //$NON-NLS-1$
}
- /***************** End of convert(input, float)******************/
+ /***************** End of cast(float AS input)******************/
- /***************** Beginning of convert(input, double) ************/
- public void testStringToDouble() throws Exception {
+ /***************** Beginning of cast(double AS input) ************/
+ @Test public void testStringToDouble() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral("123", String.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("double", Double.class)}, //$NON-NLS-1$
Double.class);
- helpGetString1(func, "convert(float, '123')"); //$NON-NLS-1$
+ helpGetString1(func, "cast('123' AS double precision)"); //$NON-NLS-1$
}
- public void testBooleanToDoublea() throws Exception {
+ @Test public void testBooleanToDoublea() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class),
LANG_FACTORY.createLiteral("double", Double.class)}, //$NON-NLS-1$
Double.class);
- helpGetString1(func, "convert(float, 1)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1 AS double precision)"); //$NON-NLS-1$
}
- public void testBooleanToDoubleb() throws Exception {
+ @Test public void testBooleanToDoubleb() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] { LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class),
LANG_FACTORY.createLiteral("double", Double.class)}, //$NON-NLS-1$
Double.class);
- helpGetString1(func, "convert(float, 0)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(0 AS double precision)"); //$NON-NLS-1$
}
- /***************** End of convert(input, double)******************/
+ /***************** End of cast(double AS input)******************/
- /***************** Beginning of convert(input, bigdecimal) ************/
- public void testStringToBigDecimal() throws Exception {
+ /***************** Beginning of cast(bigdecimal AS input) ************/
+ @Test public void testStringToBigDecimal() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] {
LANG_FACTORY.createLiteral("123", String.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral("bigdecimal", java.math.BigDecimal.class)}, //$NON-NLS-1$
java.math.BigDecimal.class);
- helpGetString1(func, "convert(float, '123')"); //$NON-NLS-1$
+ helpGetString1(func, "cast('123' AS numeric(38, 19))"); //$NON-NLS-1$
}
- public void testBooleanToBigDecimala() throws Exception {
+ @Test public void testBooleanToBigDecimala() throws Exception {
IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
new IExpression[] { LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class),
LANG_FACTORY.createLiteral("bigdecimal", java.math.BigDecimal.class)}, //$NON-NLS-1$
java.math.BigDecimal.class);
- helpGetString1(func, "convert(float, 1)"); //$NON-NLS-1$
+ helpGetString1(func, "cast(1 AS numeric(38, 19))"); //$NON-NLS-1$
}
- public void testBooleanToBigDecimalb() throws Exception {
- IFunction func = LANG_FACTORY.createFunction("convert", //$NON-NLS-1$
- new IExpression[] { LANG_FACTORY.createLiteral(Boolean.FALSE, Boolean.class),
- LANG_FACTORY.createLiteral("bigdecimal", java.math.BigDecimal.class)}, //$NON-NLS-1$
- java.math.BigDecimal.class);
-
- helpGetString1(func, "convert(float, 0)"); //$NON-NLS-1$
- }
-
// Source = CHAR
- public void testCharToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Character('5'), Character.class), "string", "convert(varchar, '5')"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testCharToString() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Character('5'), Character.class), "string", "'5'"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = BOOLEAN
- public void testBooleanToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "string", "convert(varchar, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testBooleanToString() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "string", "CASE WHEN 1 = 0 THEN 'false' WHEN 1 IS NOT NULL THEN 'true' END"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToByte() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "byte", "convert(tinyint, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testBooleanToByte() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "byte", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToShort() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "short", "convert(smallint, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testBooleanToShort() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "short", "1"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "integer", "convert(int, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testBooleanToInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "integer", "cast(1 AS int)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "long", "convert(numeric, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testBooleanToLong() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "long", "cast(1 AS numeric(19,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "biginteger", "convert(numeric, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testBooleanToBigInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "biginteger", "cast(1 AS numeric(38, 0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "float", "convert(real, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testBooleanToFloat() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "float", "cast(1 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "double", "convert(float, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testBooleanToDouble() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "double", "cast(1 AS double precision)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBooleanToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "bigdecimal", "convert(float, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testBooleanToBigDecimal() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(Boolean.TRUE, Boolean.class), "bigdecimal", "cast(1 AS numeric(38, 19))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = BYTE
- public void testByteToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "string", "convert(varchar, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testByteToString() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "string", "cast(1 AS varchar(40))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "long", "convert(numeric, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testByteToLong() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "long", "cast(1 AS numeric(19,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "biginteger", "convert(numeric, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testByteToBigInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "biginteger", "cast(1 AS numeric(38, 0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "float", "convert(real, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testByteToFloat() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "float", "cast(1 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "double", "convert(float, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testByteToDouble() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "double", "cast(1 AS double precision)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testByteToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "bigdecimal", "convert(float, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testByteToBigDecimal() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Byte((byte)1), Byte.class), "bigdecimal", "cast(1 AS numeric(38, 19))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = SHORT
- public void testShortToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "string", "convert(varchar, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testShortToString() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "string", "cast(1 AS varchar(40))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "long", "convert(numeric, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testShortToLong() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "long", "cast(1 AS numeric(19,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "biginteger", "convert(numeric, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testShortToBigInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "biginteger", "cast(1 AS numeric(38, 0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "float", "convert(real, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testShortToFloat() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "float", "cast(1 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "double", "convert(float, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testShortToDouble() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "double", "cast(1 AS double precision)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testShortToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "bigdecimal", "convert(float, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testShortToBigDecimal() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Short((short)1), Short.class), "bigdecimal", "cast(1 AS numeric(38, 19))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = INTEGER
- public void testIntegerToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "string", "convert(varchar, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testIntegerToString() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "string", "cast(1 AS varchar(40))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "long", "convert(numeric, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testIntegerToLong() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "long", "cast(1 AS numeric(19,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "biginteger", "convert(numeric, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testIntegerToBigInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "biginteger", "cast(1 AS numeric(38, 0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "float", "convert(real, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testIntegerToFloat() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "float", "cast(1 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "double", "convert(float, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testIntegerToDouble() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "double", "cast(1 AS double precision)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testIntegerToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "bigdecimal", "convert(float, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testIntegerToBigDecimal() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Integer(1), Integer.class), "bigdecimal", "cast(1 AS numeric(38, 19))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = LONG
- public void testLongToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "string", "convert(varchar, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testLongToString() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "string", "cast(1 AS varchar(40))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testLongToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "biginteger", "convert(numeric, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testLongToBigInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "biginteger", "cast(1 AS numeric(38, 0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testLongToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "float", "convert(real, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testLongToFloat() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "float", "cast(1 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testLongToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "double", "convert(float, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testLongToDouble() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "double", "cast(1 AS double precision)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testLongToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "bigdecimal", "convert(float, 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testLongToBigDecimal() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Long(1), Long.class), "bigdecimal", "cast(1 AS numeric(38, 19))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = BIGINTEGER
- public void testBigIntegerToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "string", "convert(varchar, 1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigIntegerToString() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "string", "cast(1 AS varchar(40))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigIntegerToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "long", "convert(numeric, 1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigIntegerToLong() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "long", "cast(1 AS numeric(19,0))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigIntegerToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "float", "convert(real, 1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigIntegerToFloat() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "float", "cast(1 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigIntegerToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "double", "convert(float, 1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigIntegerToDouble() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "double", "cast(1 AS double precision)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigIntegerToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "bigdecimal", "convert(float, 1)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigIntegerToBigDecimal() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigInteger("1"), BigInteger.class), "bigdecimal", "cast(1 AS numeric(38, 19))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
// Source = FLOAT
- public void testFloatToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "string", "convert(varchar, 1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testFloatToString() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "string", "cast(1.2 AS varchar(40))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testFloatToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "long", "convert(numeric, 1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testFloatToLong() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "long", "cast(1.2 AS numeric(19,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testFloatToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "biginteger", "convert(numeric, 1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testFloatToBigInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "biginteger", "cast(1.2 AS numeric(38, 0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testFloatToDouble() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "double", "convert(float, 1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testFloatToDouble() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "double", "cast(1.2 AS double precision)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testFloatToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "bigdecimal", "convert(float, 1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testFloatToBigDecimal() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Float(1.2f), Float.class), "bigdecimal", "cast(1.2 AS numeric(38, 19))"); //$NON-NLS-1$ //$NON-NLS-2$
}
// Source = DOUBLE
- public void testDoubleToString() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "string", "convert(varchar, 1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testDoubleToString() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "string", "cast(1.2 AS varchar(40))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDoubleToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "long", "convert(numeric, 1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testDoubleToLong() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "long", "cast(1.2 AS numeric(19,0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDoubleToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "biginteger", "convert(numeric, 1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testDoubleToBigInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "biginteger", "cast(1.2 AS numeric(38, 0))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDoubleToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "float", "convert(real, 1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testDoubleToFloat() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "float", "cast(1.2 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testDoubleToBigDecimal() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "bigdecimal", "convert(float, 1.2)"); //$NON-NLS-1$ //$NON-NLS-2$
+ @Test public void testDoubleToBigDecimal() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new Double(1.2), Double.class), "bigdecimal", "cast(1.2 AS numeric(38, 19))"); //$NON-NLS-1$ //$NON-NLS-2$
}
- public void testBigDecimalToLong() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "long", "convert(numeric, 1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigDecimalToLong() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "long", "cast(1.0 AS numeric(19,0))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigDecimalToBigInteger() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "biginteger", "convert(numeric, 1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigDecimalToBigInteger() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "biginteger", "cast(1.0 AS numeric(38, 0))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigDecimalToFloat() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "float", "convert(real, 1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigDecimalToFloat() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "float", "cast(1.0 AS real)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- public void testBigDecimalToDoublel() throws Exception {
- helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "double", "convert(float, 1.0)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ @Test public void testBigDecimalToDouble() throws Exception {
+ helpTest(LANG_FACTORY.createLiteral(new BigDecimal("1.0"), BigDecimal.class), "double", "cast(1.0 AS double precision)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
-
}
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseSQLConversionVisitor.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseSQLConversionVisitor.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/sybase/TestSybaseSQLConversionVisitor.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -58,7 +58,7 @@
// Convert from sql to objects
ICommand obj = MetadataFactory.helpTranslate(vdb, input);
- TranslatedCommand tc = new TranslatedCommand(EnvironmentUtility.createSecurityContext("user"), trans);
+ TranslatedCommand tc = new TranslatedCommand(EnvironmentUtility.createSecurityContext("user"), trans); //$NON-NLS-1$
try {
tc.translateCommand(obj);
} catch (ConnectorException e) {
@@ -71,8 +71,7 @@
@Test
public void testModFunction() {
String input = "SELECT mod(CONVERT(PART_ID, INTEGER), 13) FROM parts"; //$NON-NLS-1$
- //String output = "SELECT (PARTS.PART_ID % 13) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT (convert(int, PARTS.PART_ID) % 13) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT (cast(PARTS.PART_ID AS int) % 13) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -111,7 +110,7 @@
@Test
public void testLengthFunction() {
String input = "SELECT length(PART_NAME) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT char_length(PARTS.PART_NAME) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT {fn length(PARTS.PART_NAME)} FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -121,7 +120,7 @@
@Test
public void testSubstring2ArgFunction() {
String input = "SELECT substring(PART_NAME, 3) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT substring(PARTS.PART_NAME, 3, char_length(PARTS.PART_NAME)) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT substring(PARTS.PART_NAME, 3, {fn length(PARTS.PART_NAME)}) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -141,8 +140,7 @@
@Test
public void testConvertFunctionInteger() {
String input = "SELECT convert(PARTS.PART_ID, integer) FROM PARTS"; //$NON-NLS-1$
- //String output = "SELECT PARTS.PART_ID FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT convert(int, PARTS.PART_ID) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(PARTS.PART_ID AS int) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -152,7 +150,7 @@
@Test
public void testConvertFunctionChar() {
String input = "SELECT convert(PART_NAME, char) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT convert(char, PARTS.PART_NAME) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(PARTS.PART_NAME AS char(1)) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -162,7 +160,7 @@
@Test
public void testConvertFunctionBoolean() {
String input = "SELECT convert(PART_ID, boolean) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT convert(bit, PARTS.PART_ID) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT CASE WHEN PARTS.PART_ID IN ('false', '0') THEN 0 WHEN PARTS.PART_ID IS NOT NULL THEN 1 END FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -190,7 +188,7 @@
public void testTimeLiteral() {
helpTestVisitor(getTestVDB(),
"select {t'13:59:59'} FROM parts", //$NON-NLS-1$
- "SELECT {ts'1900-01-01 13:59:59'} FROM PARTS"); //$NON-NLS-1$
+ "SELECT {ts'1970-01-01 13:59:59'} FROM PARTS"); //$NON-NLS-1$
}
@Test
@@ -211,7 +209,7 @@
@Test
public void testConvertFunctionString() throws Exception {
String input = "SELECT convert(PARTS.PART_ID, integer) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT convert(int, PARTS.PART_ID) FROM PARTS"; //$NON-NLS-1$
+ String output = "SELECT cast(PARTS.PART_ID AS int) FROM PARTS"; //$NON-NLS-1$
helpTestVisitor(getTestVDB(),
input,
@@ -221,7 +219,7 @@
@Test
public void testNonIntMod() throws Exception {
String input = "select mod(intkey/1.5, 3) from bqt1.smalla"; //$NON-NLS-1$
- String output = "SELECT ((convert(float, SmallA.IntKey) / 1.5) - (floor(((convert(float, SmallA.IntKey) / 1.5) / 3.0)) * 3.0)) FROM SmallA"; //$NON-NLS-1$
+ String output = "SELECT ((cast(SmallA.IntKey AS double precision) / 1.5) - (sign((cast(SmallA.IntKey AS double precision) / 1.5)) * floor(abs(((cast(SmallA.IntKey AS double precision) / 1.5) / 3.0))) * abs(3.0))) FROM SmallA"; //$NON-NLS-1$
helpTestVisitor(getBQTVDB(),
input,
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestExtractFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestExtractFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestExtractFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -55,22 +55,20 @@
super(name);
}
- public IExpression helpTestMod(IExpression c, String expectedStr, String target) throws Exception {
+ public void helpTestMod(IExpression c, String expectedStr, String target) throws Exception {
IFunction func = LANG_FACTORY.createFunction(target,
Arrays.asList(c),
Integer.class);
ExtractFunctionModifier mod = new ExtractFunctionModifier ();
- IExpression expr = mod.modify(func);
Translator trans = new Translator();
trans.registerFunctionModifier(target, mod);
trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor();
- sqlVisitor.append(expr);
+ sqlVisitor.append(func);
assertEquals(expectedStr, sqlVisitor.toString());
- return expr;
}
public void test1() throws Exception {
ILiteral arg1 = LANG_FACTORY.createLiteral(TimestampUtil.createDate(104, 0, 21), java.sql.Date.class);
Deleted: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLOCATEFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLOCATEFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLOCATEFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,319 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.connector.jdbc.translator;
-
-import static org.junit.Assert.*;
-
-import java.util.Arrays;
-import java.util.Properties;
-
-import org.junit.Test;
-import org.teiid.connector.api.ConnectorEnvironment;
-import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.api.SourceSystemFunctions;
-import org.teiid.connector.language.IExpression;
-import org.teiid.connector.language.IFunction;
-import org.teiid.connector.language.ILanguageFactory;
-
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
-
-/**
- * Test <code>LOCATEFunctionModifier</code> by invoking its methods with varying
- * parameters to validate it performs as designed and expected.
- */
-public class TestLOCATEFunctionModifier {
-
- private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
-
- /**
- * Create an expression containing a LOCATE function using <code>args</code>
- * and pass it to the <code>Translator</code>'s LOCATE function modifier and
- * compare the resulting expression to <code>expectedStr</code>.
- *
- * @param args An array of <code>IExpression</code>'s to use as the
- * arguments to the LOCATE() function
- * @param expectedStr A string representing the modified expression
- * @return On success, the modified expression.
- * @throws Exception
- */
- public IExpression helpTestLocate(IExpression[] args, String expectedStr) throws Exception {
- return this.helpTestLocate(LocateFunctionModifier.LOCATE, false, args, expectedStr);
- }
-
- /**
- * Create an expression containing a LOCATE function using a function name of
- * <code>locateFunctionName</code> with the parameter order of
- * <code>parameterOrder</code> and a string index base of
- * <code>stringIndexBase</code> and uses the arguments <code>args</code> and
- * pass it to the <code>Translator</code>'s LOCATE function modifier and
- * compare the resulting expression to <code>expectedStr</code>.
- *
- * @param locateFunctionName the name to use for the function modifier
- * @param parameterOrder an <code>enum</code> value as defined by
- * {@link ParameterOrder} which represents the parameter order to use
- * for the modified LOCATE() function
- * @param stringIndexBase the string index that represents the first character of a string
- * @param args an array of <code>IExpression</code>'s to use as the
- * arguments to the LOCATE() function
- * @param expectedStr A string representing the modified expression
- * @return On success, the modified expression.
- * @throws Exception
- */
- public IExpression helpTestLocate(final String locateFunctionName, final boolean parameterOrder, IExpression[] args, String expectedStr) throws Exception {
- IExpression param1 = null;
- IExpression param2 = null;
- IExpression param3 = null;
-
- if (args.length > 0 ) param1 = args[0];
- if (args.length > 1 ) param2 = args[1];
- if (args.length > 2 ) param3 = args[2];
-
- IFunction func = null;
-
- if (param3 != null) {
- func = LANG_FACTORY.createFunction(SourceSystemFunctions.LOCATE,
- Arrays.asList(param1, param2, param3), Integer.class);
- } else {
- func = LANG_FACTORY.createFunction(SourceSystemFunctions.LOCATE,
- Arrays.asList(param1, param2), Integer.class);
- }
-
- Translator trans = new Translator() {
- @Override
- public void initialize(ConnectorEnvironment env)
- throws ConnectorException {
- super.initialize(env);
- registerFunctionModifier(SourceSystemFunctions.LOCATE, new LocateFunctionModifier(getLanguageFactory(), locateFunctionName, parameterOrder));
- }
- };
-
- trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
-
- IExpression expr = trans.getFunctionModifiers().get(SourceSystemFunctions.LOCATE).modify(func);
-
- SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor();
- sqlVisitor.append(expr);
-
- assertEquals("Modified function does not match", expectedStr, sqlVisitor.toString()); //$NON-NLS-1$
-
- return expr;
- }
-
- /**
- * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
- * to LOCATE(search_str, source_str) using constants for both parameters
- * returns LOCATE(search_str, source_str).
- * <p>
- * {@link LocateFunctionModifier} will be constructed without specifying a
- * function name or parameter order.
- *
- * @throws Exception
- */
- @Test public void testModifySimple() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral("abcdefg", String.class) //$NON-NLS-1$
- };
- // default / default
- helpTestLocate(args, "LOCATE('a', 'abcdefg')"); //$NON-NLS-1$
- }
-
- /**
- * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
- * to LOCATE(search_str, source_str) using constants for both parameters
- * returns locate(search_str, source_str).
- * <p>
- * {@link LocateFunctionModifier} will be constructed specifying a function
- * name of locate but no parameter order.
- *
- * @throws Exception
- */
- @Test public void testModifySimple2() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral("abcdefg", String.class) //$NON-NLS-1$
- };
- // locate / default
- helpTestLocate("locate", false, args, "locate('a', 'abcdefg')"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
- * to LOCATE(search_str, source_str) using constants for both parameters
- * returns INSTR(source_str, search_str).
- * <p>
- * {@link LocateFunctionModifier} will be constructed specifying a function
- * name of INSTR and a parameter order of {@link ParameterOrder#SOURCE_SEARCH_INDEX}.
- *
- * @throws Exception
- */
- @Test public void testModifySimple3() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral("abcdefg", String.class) //$NON-NLS-1$
- };
- // INSTR / SOURCE_SEARCH_INDEX
- helpTestLocate("INSTR", true, args, "INSTR('abcdefg', 'a')"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
- * to LOCATE(search_str, source_str) using constants for both parameters
- * returns locate(search_str, source_str).
- * <p>
- * {@link LocateFunctionModifier} will be constructed specifying a function
- * name of locate and a parameter order of {@link ParameterOrder#DEFAULT}.
- *
- * @throws Exception
- */
- @Test public void testModifySimple4() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral("abcdefg", String.class) //$NON-NLS-1$
- };
- // locate / DEFAULT
- helpTestLocate("locate", false, args, "locate('a', 'abcdefg')"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
- * to LOCATE(search_str, source_str, 1) using constants for all parameters
- * returns INSTR(source_str, search_str, 1).
- * <p>
- * {@link LocateFunctionModifier} will be constructed specifying a function
- * name of INSTR and a parameter order of {@link ParameterOrder#SOURCE_SEARCH_INDEX}.
- *
- * @throws Exception
- */
- @Test public void testModifyWithStartIndex() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(1, Integer.class)
- };
- // INSTR / SOURCE_SEARCH_INDEX
- helpTestLocate("INSTR", true, args, "INSTR('abcdefg', 'a', 1)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
- * to LOCATE(search_str, source_str, 4) using constants for all parameters
- * returns LOCATE(search_str, source_str, 5).
- * <p>
- * {@link LocateFunctionModifier} will be constructed specifying no function
- * name or parameter order.
- *
- * @throws Exception
- */
- @Test public void testModifyWithStartIndex2() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(4, Integer.class)
- };
- // default / default
- helpTestLocate(args, "LOCATE('a', 'abcdefg', 4)"); //$NON-NLS-1$
- }
-
- /**
- * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
- * to LOCATE(search_str, source_str, -5) using constants for all parameters
- * returns LOCATE(search_str, source_str, 1).
- * <p>
- * {@link LocateFunctionModifier} will be constructed specifying no function
- * name or parameter order.
- *
- * @throws Exception
- */
- @Test public void testModifyWithStartIndex3() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(-5, Integer.class)
- };
- // default / default
- helpTestLocate(args, "LOCATE('a', 'abcdefg', 1)"); //$NON-NLS-1$
- }
-
- /**
- * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
- * to LOCATE(search_str, source_str, null) using constants for all parameters
- * returns LOCATE(search_str, source_str, NULL).
- * <p>
- * {@link LocateFunctionModifier} will be constructed specifying no function
- * name or parameter order.
- *
- * @throws Exception
- */
- @Test public void testModifyWithStartIndex4() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(null, Integer.class)
- };
- // default / default
- helpTestLocate(args, "LOCATE('a', 'abcdefg', NULL)"); //$NON-NLS-1$
- }
-
- /**
- * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
- * to LOCATE(search_str, source_str, e1) using an element for start index
- * parameter returns INSTR(source_str, search_str, CASE WHEN e1 < 1 THEN 1 ELSE e1 END).
- * <p>
- * {@link LocateFunctionModifier} will be constructed specifying a function
- * name of INSTR and a parameter order of {@link ParameterOrder#SOURCE_SEARCH_INDEX}.
- *
- * @throws Exception
- */
- @Test public void testModifyWithElementStartIndex() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
- LANG_FACTORY.createElement("e1", null, null, Integer.class) //$NON-NLS-1$
- };
- // INSTR / SOURCE_SEARCH_INDEX
- helpTestLocate("INSTR", true, args, "INSTR('abcdefg', 'a', CASE WHEN e1 < 1 THEN 1 ELSE e1 END)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
- * to LOCATE(search_str, source_str, e1) using an element for start index
- * parameter returns LOCATE(search_str, source_str, CASE WHEN e1 < 0 THEN 0 ELSE e1 END).
- * <p>
- * {@link LocateFunctionModifier} will be constructed specifying no function
- * name and no parameter order.
- *
- * @throws Exception
- */
- @Test public void testModifyWithElementStartIndex2() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
- LANG_FACTORY.createElement("e1", null, null, Integer.class) //$NON-NLS-1$
- };
- // default / default
- helpTestLocate(args, "LOCATE('a', 'abcdefg', CASE WHEN e1 < 1 THEN 1 ELSE e1 END)"); //$NON-NLS-1$
- }
-
-}
Copied: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLocateFunctionModifier.java (from rev 1276, trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLOCATEFunctionModifier.java)
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLocateFunctionModifier.java (rev 0)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLocateFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -0,0 +1,315 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+
+package org.teiid.connector.jdbc.translator;
+
+import static org.junit.Assert.*;
+
+import java.util.Arrays;
+import java.util.Properties;
+
+import org.junit.Test;
+import org.teiid.connector.api.ConnectorEnvironment;
+import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.api.SourceSystemFunctions;
+import org.teiid.connector.language.IExpression;
+import org.teiid.connector.language.IFunction;
+import org.teiid.connector.language.ILanguageFactory;
+
+import com.metamatrix.cdk.CommandBuilder;
+import com.metamatrix.cdk.api.EnvironmentUtility;
+
+/**
+ * Test <code>LOCATEFunctionModifier</code> by invoking its methods with varying
+ * parameters to validate it performs as designed and expected.
+ */
+public class TestLocateFunctionModifier {
+
+ private static final ILanguageFactory LANG_FACTORY = CommandBuilder.getLanuageFactory();
+
+ /**
+ * Create an expression containing a LOCATE function using <code>args</code>
+ * and pass it to the <code>Translator</code>'s LOCATE function modifier and
+ * compare the resulting expression to <code>expectedStr</code>.
+ *
+ * @param args An array of <code>IExpression</code>'s to use as the
+ * arguments to the LOCATE() function
+ * @param expectedStr A string representing the modified expression
+ * @return On success, the modified expression.
+ * @throws Exception
+ */
+ public void helpTestLocate(IExpression[] args, String expectedStr) throws Exception {
+ this.helpTestLocate(LocateFunctionModifier.LOCATE, false, args, expectedStr);
+ }
+
+ /**
+ * Create an expression containing a LOCATE function using a function name of
+ * <code>locateFunctionName</code> with the parameter order of
+ * <code>parameterOrder</code> and a string index base of
+ * <code>stringIndexBase</code> and uses the arguments <code>args</code> and
+ * pass it to the <code>Translator</code>'s LOCATE function modifier and
+ * compare the resulting expression to <code>expectedStr</code>.
+ *
+ * @param locateFunctionName the name to use for the function modifier
+ * @param parameterOrder an <code>enum</code> value as defined by
+ * {@link ParameterOrder} which represents the parameter order to use
+ * for the modified LOCATE() function
+ * @param stringIndexBase the string index that represents the first character of a string
+ * @param args an array of <code>IExpression</code>'s to use as the
+ * arguments to the LOCATE() function
+ * @param expectedStr A string representing the modified expression
+ * @return On success, the modified expression.
+ * @throws Exception
+ */
+ public void helpTestLocate(final String locateFunctionName, final boolean parameterOrder, IExpression[] args, String expectedStr) throws Exception {
+ IExpression param1 = null;
+ IExpression param2 = null;
+ IExpression param3 = null;
+
+ if (args.length > 0 ) param1 = args[0];
+ if (args.length > 1 ) param2 = args[1];
+ if (args.length > 2 ) param3 = args[2];
+
+ IFunction func = null;
+
+ if (param3 != null) {
+ func = LANG_FACTORY.createFunction(SourceSystemFunctions.LOCATE,
+ Arrays.asList(param1, param2, param3), Integer.class);
+ } else {
+ func = LANG_FACTORY.createFunction(SourceSystemFunctions.LOCATE,
+ Arrays.asList(param1, param2), Integer.class);
+ }
+
+ Translator trans = new Translator() {
+ @Override
+ public void initialize(ConnectorEnvironment env)
+ throws ConnectorException {
+ super.initialize(env);
+ registerFunctionModifier(SourceSystemFunctions.LOCATE, new LocateFunctionModifier(getLanguageFactory(), locateFunctionName, parameterOrder));
+ }
+ };
+
+ trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
+
+ SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor();
+ sqlVisitor.append(func);
+
+ assertEquals("Modified function does not match", expectedStr, sqlVisitor.toString()); //$NON-NLS-1$
+ }
+
+ /**
+ * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
+ * to LOCATE(search_str, source_str) using constants for both parameters
+ * returns LOCATE(search_str, source_str).
+ * <p>
+ * {@link LocateFunctionModifier} will be constructed without specifying a
+ * function name or parameter order.
+ *
+ * @throws Exception
+ */
+ @Test public void testModifySimple() throws Exception {
+ IExpression[] args = new IExpression[] {
+ LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral("abcdefg", String.class) //$NON-NLS-1$
+ };
+ // default / default
+ helpTestLocate(args, "LOCATE('a', 'abcdefg')"); //$NON-NLS-1$
+ }
+
+ /**
+ * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
+ * to LOCATE(search_str, source_str) using constants for both parameters
+ * returns locate(search_str, source_str).
+ * <p>
+ * {@link LocateFunctionModifier} will be constructed specifying a function
+ * name of locate but no parameter order.
+ *
+ * @throws Exception
+ */
+ @Test public void testModifySimple2() throws Exception {
+ IExpression[] args = new IExpression[] {
+ LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral("abcdefg", String.class) //$NON-NLS-1$
+ };
+ // locate / default
+ helpTestLocate("locate", false, args, "locate('a', 'abcdefg')"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
+ * to LOCATE(search_str, source_str) using constants for both parameters
+ * returns INSTR(source_str, search_str).
+ * <p>
+ * {@link LocateFunctionModifier} will be constructed specifying a function
+ * name of INSTR and a parameter order of {@link ParameterOrder#SOURCE_SEARCH_INDEX}.
+ *
+ * @throws Exception
+ */
+ @Test public void testModifySimple3() throws Exception {
+ IExpression[] args = new IExpression[] {
+ LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral("abcdefg", String.class) //$NON-NLS-1$
+ };
+ // INSTR / SOURCE_SEARCH_INDEX
+ helpTestLocate("INSTR", true, args, "INSTR('abcdefg', 'a')"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
+ * to LOCATE(search_str, source_str) using constants for both parameters
+ * returns locate(search_str, source_str).
+ * <p>
+ * {@link LocateFunctionModifier} will be constructed specifying a function
+ * name of locate and a parameter order of {@link ParameterOrder#DEFAULT}.
+ *
+ * @throws Exception
+ */
+ @Test public void testModifySimple4() throws Exception {
+ IExpression[] args = new IExpression[] {
+ LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral("abcdefg", String.class) //$NON-NLS-1$
+ };
+ // locate / DEFAULT
+ helpTestLocate("locate", false, args, "locate('a', 'abcdefg')"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
+ * to LOCATE(search_str, source_str, 1) using constants for all parameters
+ * returns INSTR(source_str, search_str, 1).
+ * <p>
+ * {@link LocateFunctionModifier} will be constructed specifying a function
+ * name of INSTR and a parameter order of {@link ParameterOrder#SOURCE_SEARCH_INDEX}.
+ *
+ * @throws Exception
+ */
+ @Test public void testModifyWithStartIndex() throws Exception {
+ IExpression[] args = new IExpression[] {
+ LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral(1, Integer.class)
+ };
+ // INSTR / SOURCE_SEARCH_INDEX
+ helpTestLocate("INSTR", true, args, "INSTR('abcdefg', 'a', 1)"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
+ * to LOCATE(search_str, source_str, 4) using constants for all parameters
+ * returns LOCATE(search_str, source_str, 5).
+ * <p>
+ * {@link LocateFunctionModifier} will be constructed specifying no function
+ * name or parameter order.
+ *
+ * @throws Exception
+ */
+ @Test public void testModifyWithStartIndex2() throws Exception {
+ IExpression[] args = new IExpression[] {
+ LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral(4, Integer.class)
+ };
+ // default / default
+ helpTestLocate(args, "LOCATE('a', 'abcdefg', 4)"); //$NON-NLS-1$
+ }
+
+ /**
+ * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
+ * to LOCATE(search_str, source_str, -5) using constants for all parameters
+ * returns LOCATE(search_str, source_str, 1).
+ * <p>
+ * {@link LocateFunctionModifier} will be constructed specifying no function
+ * name or parameter order.
+ *
+ * @throws Exception
+ */
+ @Test public void testModifyWithStartIndex3() throws Exception {
+ IExpression[] args = new IExpression[] {
+ LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral(-5, Integer.class)
+ };
+ // default / default
+ helpTestLocate(args, "LOCATE('a', 'abcdefg', 1)"); //$NON-NLS-1$
+ }
+
+ /**
+ * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
+ * to LOCATE(search_str, source_str, null) using constants for all parameters
+ * returns LOCATE(search_str, source_str, NULL).
+ * <p>
+ * {@link LocateFunctionModifier} will be constructed specifying no function
+ * name or parameter order.
+ *
+ * @throws Exception
+ */
+ @Test public void testModifyWithStartIndex4() throws Exception {
+ IExpression[] args = new IExpression[] {
+ LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral(null, Integer.class)
+ };
+ // default / default
+ helpTestLocate(args, "LOCATE('a', 'abcdefg', NULL)"); //$NON-NLS-1$
+ }
+
+ /**
+ * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
+ * to LOCATE(search_str, source_str, e1) using an element for start index
+ * parameter returns INSTR(source_str, search_str, CASE WHEN e1 < 1 THEN 1 ELSE e1 END).
+ * <p>
+ * {@link LocateFunctionModifier} will be constructed specifying a function
+ * name of INSTR and a parameter order of {@link ParameterOrder#SOURCE_SEARCH_INDEX}.
+ *
+ * @throws Exception
+ */
+ @Test public void testModifyWithElementStartIndex() throws Exception {
+ IExpression[] args = new IExpression[] {
+ LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createElement("e1", null, null, Integer.class) //$NON-NLS-1$
+ };
+ // INSTR / SOURCE_SEARCH_INDEX
+ helpTestLocate("INSTR", true, args, "INSTR('abcdefg', 'a', CASE WHEN e1 < 1 THEN 1 ELSE e1 END)"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * Test {@link LocateFunctionModifier#modify(IFunction)} to validate a call
+ * to LOCATE(search_str, source_str, e1) using an element for start index
+ * parameter returns LOCATE(search_str, source_str, CASE WHEN e1 < 0 THEN 0 ELSE e1 END).
+ * <p>
+ * {@link LocateFunctionModifier} will be constructed specifying no function
+ * name and no parameter order.
+ *
+ * @throws Exception
+ */
+ @Test public void testModifyWithElementStartIndex2() throws Exception {
+ IExpression[] args = new IExpression[] {
+ LANG_FACTORY.createLiteral("a", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createLiteral("abcdefg", String.class), //$NON-NLS-1$
+ LANG_FACTORY.createElement("e1", null, null, Integer.class) //$NON-NLS-1$
+ };
+ // default / default
+ helpTestLocate(args, "LOCATE('a', 'abcdefg', CASE WHEN e1 < 1 THEN 1 ELSE e1 END)"); //$NON-NLS-1$
+ }
+
+}
Property changes on: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestLocateFunctionModifier.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestModFunctionModifier.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestModFunctionModifier.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/translator/TestModFunctionModifier.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -24,9 +24,7 @@
import java.math.BigDecimal;
import java.math.BigInteger;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.util.List;
import java.util.Properties;
import junit.framework.TestCase;
@@ -69,8 +67,8 @@
* @return On success, the modified expression.
* @throws Exception
*/
- public IExpression helpTestMod(IExpression[] args, String expectedStr) throws Exception {
- return this.helpTestMod(null, null, args, expectedStr);
+ public void helpTestMod(IExpression[] args, String expectedStr) throws Exception {
+ this.helpTestMod("MOD", args, expectedStr); //$NON-NLS-1$
}
/**
@@ -81,59 +79,16 @@
* expression to <code>expectedStr</code>.
*
* @param modFunctionName the name to use for the function modifier
- * @param supportedTypes a list of types that the mod function should support
* @param args an array of <code>IExpression</code>'s to use as the
* arguments to the MOD() function
* @param expectedStr A string representing the modified expression
* @return On success, the modified expression.
* @throws Exception
*/
- public IExpression helpTestMod(final String modFunctionName, final List<Class<?>> supportedTypes, IExpression[] args, String expectedStr) throws Exception {
- IExpression param1 = null;
- IExpression param2 = null;
+ public void helpTestMod(final String modFunctionName, IExpression[] args, String expectedStr) throws Exception {
+ IExpression param1 = args[0];
+ IExpression param2 = args[1];
- if (args.length < 2) {
- param2 = LANG_FACTORY.createLiteral(null, Short.class);
- if (args.length < 1) {
- param1 = LANG_FACTORY.createLiteral(null, Short.class);
- } else {
- param1 = args[0];
- }
- } else {
- param1 = args[0];
- param2 = args[1];
- }
-
- if ( !param1.getType().equals(param2.getType()) ) {
- if (param2.getType().equals(BigDecimal.class)) {
- param1.setType(param2.getType());
- } else if (param1.getType().equals(BigDecimal.class)) {
- param2.setType(param1.getType());
- } else if (param2.getType().equals(BigInteger.class)) {
- param1.setType(param2.getType());
- } else if (param1.getType().equals(BigInteger.class)) {
- param2.setType(param1.getType());
- } else if (param2.getType().equals(Float.class)) {
- param1.setType(param2.getType());
- } else if (param1.getType().equals(Float.class)) {
- param2.setType(param1.getType());
- } else if (param2.getType().equals(Long.class)) {
- param1.setType(param2.getType());
- } else if (param1.getType().equals(Long.class)) {
- param2.setType(param1.getType());
- } else if (param2.getType().equals(Integer.class)) {
- param1.setType(param2.getType());
- } else if (param1.getType().equals(Integer.class)) {
- param2.setType(param1.getType());
- } else if (param2.getType().equals(Short.class)) {
- param1.setType(param2.getType());
- } else if (param1.getType().equals(Short.class)) {
- param2.setType(param1.getType());
- } else {
- throw new IllegalArgumentException("Parameters must be of numeric types"); //$NON-NLS-1$
- }
- }
-
IFunction func = LANG_FACTORY.createFunction(modFunctionName,
Arrays.asList(param1, param2), param1.getType());
@@ -142,157 +97,20 @@
public void initialize(ConnectorEnvironment env)
throws ConnectorException {
super.initialize(env);
- if (modFunctionName == null) {
- registerFunctionModifier(SourceSystemFunctions.MOD, new ModFunctionModifier(getLanguageFactory()));
- } else {
- registerFunctionModifier(SourceSystemFunctions.MOD, new ModFunctionModifier(getLanguageFactory(), modFunctionName, supportedTypes));
- }
+ registerFunctionModifier(SourceSystemFunctions.MOD, new ModFunctionModifier(modFunctionName, getLanguageFactory()));
}
};
trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
- IExpression expr = trans.getFunctionModifiers().get(SourceSystemFunctions.MOD).modify(func);
-
SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor();
- sqlVisitor.append(expr);
+ sqlVisitor.append(func);
assertEquals("Modified function does not match", expectedStr, sqlVisitor.toString()); //$NON-NLS-1$
-
- return expr;
}
/**
* Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link Short} constants for both parameters returns MOD(x,y).
- * {@link ModFunctionModifier} will be constructed without specifying a
- * function name or a supported type list.
- *
- * @throws Exception
- */
- public void testTwoShortConst() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Short((short) 10), Short.class),
- LANG_FACTORY.createLiteral(new Short((short) 6), Short.class)
- };
- // default / default
- helpTestMod(args, "MOD(10, 6)"); //$NON-NLS-1$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link Short} constants for both parameters returns MOD(x,y).
- * {@link ModFunctionModifier} will be constructed with a function name of
- * "MOD" but without a supported type list.
- *
- * @throws Exception
- */
- public void testTwoShortConst2() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Short((short) 10), Short.class),
- LANG_FACTORY.createLiteral(new Short((short) 6), Short.class)
- };
- // mod / default
- helpTestMod("MOD", null, args, "MOD(10, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link Short} constants for both parameters returns MOD(x,y).
- * {@link ModFunctionModifier} will be constructed with a function name of
- * "MOD" and a supported type list which contains {@link Short}.
- *
- * @throws Exception
- */
- public void testTwoShortConst3() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Short((short) 10), Short.class),
- LANG_FACTORY.createLiteral(new Short((short) 6), Short.class)
- };
- // mod / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("MOD", typeList, args, "MOD(10, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link Short} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * y)). {@link ModFunctionModifier} will be
- * constructed with a function name of "MOD" and a supported type list which
- * does not contains {@link Short}.
- *
- * @throws Exception
- */
- public void testTwoShortConst4() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Short((short) 10), Short.class),
- LANG_FACTORY.createLiteral(new Short((short) 6), Short.class)
- };
- // mod / Integer
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Integer.class);
- helpTestMod("MOD", typeList, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link Short} constants for both parameters returns (x % y).
- * {@link ModFunctionModifier} will be constructed with a function name of
- * "%" and no supported type list.
- *
- * @throws Exception
- */
- public void testTwoShortConst5() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Short((short) 10), Short.class),
- LANG_FACTORY.createLiteral(new Short((short) 6), Short.class)
- };
- // % / default
- helpTestMod("%", null, args, "(10 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link Short} constants for both parameters returns (x % y).
- * {@link ModFunctionModifier} will be constructed with a function name of
- * "%" and a supported type list which contains {@link Short}.
- *
- * @throws Exception
- */
- public void testTwoShortConst6() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Short((short) 10), Short.class),
- LANG_FACTORY.createLiteral(new Short((short) 6), Short.class)
- };
- // % / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("%", typeList, args, "(10 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link Short} constants for both parameters returns
- * (10 - (TRUNC((10 / 6), 0) * 6)). {@link ModFunctionModifier} will be
- * constructed with a function name of "%" and a supported type list does not
- * contain {@link Short}.
- *
- * @throws Exception
- */
- public void testTwoShortConst7() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Short((short) 10), Short.class),
- LANG_FACTORY.createLiteral(new Short((short) 6), Short.class)
- };
- // % / Integer
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Integer.class);
- helpTestMod("%", typeList, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
* MOD(x,y) using {@link Integer} constants for both parameters returns
* MOD(x,y). {@link ModFunctionModifier} will be constructed without
* specifying a function name or a supported type list.
@@ -322,7 +140,7 @@
LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
};
// mod / default
- helpTestMod("MOD", null, args, "MOD(10, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestMod("MOD", args, "MOD(10, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
@@ -338,34 +156,11 @@
LANG_FACTORY.createLiteral(new Integer(10), Integer.class),
LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
};
- // mod / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Integer.class);
- helpTestMod("MOD", typeList, args, "MOD(10, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestMod("MOD", args, "MOD(10, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link Integer} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * y)). {@link ModFunctionModifier} will be
- * constructed with a function name of "MOD" and a supported type list which
- * does not contain {@link Integer}.
- *
- * @throws Exception
- */
- public void testTwoIntConst4() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Integer(10), Integer.class),
- LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
- };
- // mod / Integer
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("MOD", typeList, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
* x % y using {@link Integer} constants for both parameters returns (x % y).
* {@link ModFunctionModifier} will be constructed with a function name of
* "%" and no supported type list.
@@ -377,8 +172,7 @@
LANG_FACTORY.createLiteral(new Integer(10), Integer.class),
LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
};
- // % / default
- helpTestMod("%", null, args, "(10 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestMod("%", args, "(10 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
@@ -394,34 +188,11 @@
LANG_FACTORY.createLiteral(new Integer(10), Integer.class),
LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
};
- // % / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Integer.class);
- helpTestMod("%", typeList, args, "(10 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestMod("%", args, "(10 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link Integer} constants for both parameters returns
- * (10 - (TRUNC((10 / 6), 0) * 6)). {@link ModFunctionModifier} will be
- * constructed with a function name of "%" and a supported type list that
- * does not contain {@link Integer}.
- *
- * @throws Exception
- */
- public void testTwoIntConst7() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Integer(10), Integer.class),
- LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
- };
- // % / Integer
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("%", typeList, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
* MOD(x,y) using {@link Long} constants for both parameters returns
* MOD(x,y). {@link ModFunctionModifier} will be constructed without
* specifying a function name or a supported type list.
@@ -433,7 +204,6 @@
LANG_FACTORY.createLiteral(new Long(10), Long.class),
LANG_FACTORY.createLiteral(new Long(6), Long.class)
};
- // default / default
helpTestMod(args, "MOD(10, 6)"); //$NON-NLS-1$
}
@@ -450,8 +220,7 @@
LANG_FACTORY.createLiteral(new Long(10), Long.class),
LANG_FACTORY.createLiteral(new Long(6), Long.class)
};
- // mod / default
- helpTestMod("MOD", null, args, "MOD(10, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestMod("MOD", args, "MOD(10, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
@@ -467,34 +236,11 @@
LANG_FACTORY.createLiteral(new Long(10), Long.class),
LANG_FACTORY.createLiteral(new Long(6), Long.class)
};
- // mod / Long
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Long.class);
- helpTestMod("MOD", typeList, args, "MOD(10, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestMod("MOD", args, "MOD(10, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link Long} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * y)). {@link ModFunctionModifier} will be
- * constructed with a function name of "MOD" and a supported type list which
- * does not contain {@link Long}.
- *
- * @throws Exception
- */
- public void testTwoLongConst4() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Long(10), Long.class),
- LANG_FACTORY.createLiteral(new Long(6), Long.class)
- };
- // mod / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("MOD", typeList, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
* x % y using {@link Long} constants for both parameters returns (x % y).
* {@link ModFunctionModifier} will be constructed with a function name of
* "%" and no supported type list.
@@ -506,8 +252,7 @@
LANG_FACTORY.createLiteral(new Long(10), Long.class),
LANG_FACTORY.createLiteral(new Long(6), Long.class)
};
- // % / default
- helpTestMod("%", null, args, "(10 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestMod("%", args, "(10 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
@@ -523,34 +268,11 @@
LANG_FACTORY.createLiteral(new Long(10), Long.class),
LANG_FACTORY.createLiteral(new Long(6), Long.class)
};
- // % / Long
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Long.class);
- helpTestMod("%", typeList, args, "(10 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestMod("%", args, "(10 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link Long} constants for both parameters returns
- * (10 - (TRUNC((10 / 6), 0) * 6)). {@link ModFunctionModifier} will be
- * constructed with a function name of "%" and a supported type list that
- * does not contain {@link Long}.
- *
- * @throws Exception
- */
- public void testTwoLongConst7() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Long(10), Long.class),
- LANG_FACTORY.createLiteral(new Long(6), Long.class)
- };
- // % / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("%", typeList, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
* MOD(x,y) using {@link Float} constants for both parameters returns
* (x - (TRUNC((x / y), 0) * y)). {@link ModFunctionModifier} will be
* constructed without specifying a function name or a supported type list.
@@ -562,125 +284,11 @@
LANG_FACTORY.createLiteral(new Float(10), Float.class),
LANG_FACTORY.createLiteral(new Float(6), Float.class)
};
- // default / default
- helpTestMod(args, "(10.0 - (TRUNC((10.0 / 6.0), 0) * 6.0))"); //$NON-NLS-1$
+ helpTestMod(args, "(10.0 - (sign(10.0) * floor(abs((10.0 / 6.0))) * abs(6.0)))"); //$NON-NLS-1$
}
/**
* Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link Float} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * y)). {@link ModFunctionModifier} will be
- * constructed with a function name of "MOD" but without a supported type
- * list.
- *
- * @throws Exception
- */
- public void testTwoFloatConst2() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Float(10), Float.class),
- LANG_FACTORY.createLiteral(new Float(6), Float.class)
- };
- // mod / default
- helpTestMod("MOD", null, args, "(10.0 - (TRUNC((10.0 / 6.0), 0) * 6.0))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link Float} constants for both parameters returns
- * MOD(x,y). {@link ModFunctionModifier} will be constructed with a
- * function name of "MOD" and a supported type list which contains {@link Float}.
- *
- * @throws Exception
- */
- public void testTwoFloatConst3() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Float(10), Float.class),
- LANG_FACTORY.createLiteral(new Float(6), Float.class)
- };
- // mod / Float
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Float.class);
- helpTestMod("MOD", typeList, args, "MOD(10.0, 6.0)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link Float} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * y)). {@link ModFunctionModifier} will be
- * constructed with a function name of "MOD" and a supported type list which
- * does not contain {@link Float}.
- *
- * @throws Exception
- */
- public void testTwoFloatConst4() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Float(10), Float.class),
- LANG_FACTORY.createLiteral(new Float(6), Float.class)
- };
- // mod / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("MOD", typeList, args, "(10.0 - (TRUNC((10.0 / 6.0), 0) * 6.0))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link Float} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * x)). {@link ModFunctionModifier} will be
- * constructed with a function name of "%" and no supported type list.
- *
- * @throws Exception
- */
- public void testTwoFloatConst5() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Float(10), Float.class),
- LANG_FACTORY.createLiteral(new Float(6), Float.class)
- };
- // % / default
- helpTestMod("%", null, args, "(10.0 - (TRUNC((10.0 / 6.0), 0) * 6.0))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link Float} constants for both parameters returns (x % y).
- * {@link ModFunctionModifier} will be constructed with a function name of
- * "%" and a supported type list which contains {@link Float}.
- *
- * @throws Exception
- */
- public void testTwoFloatConst6() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Float(10), Float.class),
- LANG_FACTORY.createLiteral(new Float(6), Float.class)
- };
- // % / Float
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Float.class);
- helpTestMod("%", typeList, args, "(10.0 % 6.0)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link Float} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * x)). {@link ModFunctionModifier} will be
- * constructed with a function name of "%" and a supported type list that
- * does not contain {@link Float}.
- *
- * @throws Exception
- */
- public void testTwoFloatConst7() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Float(10), Float.class),
- LANG_FACTORY.createLiteral(new Float(6), Float.class)
- };
- // % / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("%", typeList, args, "(10.0 - (TRUNC((10.0 / 6.0), 0) * 6.0))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
* MOD(x,y) using {@link BigInteger} constants for both parameters returns
* (x - (TRUNC((x / y), 0) * y)). {@link ModFunctionModifier} will be
* constructed without specifying a function name or a supported type list.
@@ -692,125 +300,11 @@
LANG_FACTORY.createLiteral(new BigInteger("10"), BigInteger.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral(new BigInteger("6"), BigInteger.class) //$NON-NLS-1$
};
- // default / default
- helpTestMod(args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$
+ helpTestMod(args, "(10 - (sign(10) * floor(abs((10 / 6))) * abs(6)))"); //$NON-NLS-1$
}
/**
* Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link BigInteger} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * y)). {@link ModFunctionModifier} will be
- * constructed with a function name of "MOD" but without a supported type
- * list.
- *
- * @throws Exception
- */
- public void testTwoBigIntConst2() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new BigInteger("10"), BigInteger.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigInteger("6"), BigInteger.class) //$NON-NLS-1$
- };
- // mod / default
- helpTestMod("MOD", null, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link BigInteger} constants for both parameters returns
- * MOD(x,y). {@link ModFunctionModifier} will be constructed with a
- * function name of "MOD" and a supported type list which contains {@link BigInteger}.
- *
- * @throws Exception
- */
- public void testTwoBigIntConst3() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new BigInteger("10"), BigInteger.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigInteger("6"), BigInteger.class) //$NON-NLS-1$
- };
- // mod / BigInteger
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(BigInteger.class);
- helpTestMod("MOD", typeList, args, "MOD(10, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link BigInteger} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * y)). {@link ModFunctionModifier} will be
- * constructed with a function name of "MOD" and a supported type list which
- * does not contain {@link BigInteger}.
- *
- * @throws Exception
- */
- public void testTwoBigIntConst4() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new BigInteger("10"), BigInteger.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigInteger("6"), BigInteger.class) //$NON-NLS-1$
- };
- // mod / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("MOD", typeList, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link BigInteger} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * x)). {@link ModFunctionModifier} will be
- * constructed with a function name of "%" and no supported type list.
- *
- * @throws Exception
- */
- public void testTwoBigIntConst5() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new BigInteger("10"), BigInteger.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigInteger("6"), BigInteger.class) //$NON-NLS-1$
- };
- // % / default
- helpTestMod("%", null, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link BigInteger} constants for both parameters returns
- * (x % y). {@link ModFunctionModifier} will be constructed with a function
- * name of "%" and a supported type list which contains {@link BigInteger}.
- *
- * @throws Exception
- */
- public void testTwoBigIntConst6() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new BigInteger("10"), BigInteger.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigInteger("6"), BigInteger.class) //$NON-NLS-1$
- };
- // % / BigInteger
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(BigInteger.class);
- helpTestMod("%", typeList, args, "(10 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link BigInteger} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * x)). {@link ModFunctionModifier} will be
- * constructed with a function name of "%" and a supported type list that
- * does not contain {@link BigInteger}.
- *
- * @throws Exception
- */
- public void testTwoBigIntConst7() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new BigInteger("10"), BigInteger.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigInteger("6"), BigInteger.class) //$NON-NLS-1$
- };
- // % / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("%", typeList, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
* MOD(x,y) using {@link BigDecimal} constants for both parameters returns
* (x - (TRUNC((x / y), 0) * y)). {@link ModFunctionModifier} will be
* constructed without specifying a function name or a supported type list.
@@ -822,125 +316,11 @@
LANG_FACTORY.createLiteral(new BigDecimal("10"), BigDecimal.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral(new BigDecimal("6"), BigDecimal.class) //$NON-NLS-1$
};
- // default / default
- helpTestMod(args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$
+ helpTestMod(args, "(10 - (sign(10) * floor(abs((10 / 6))) * abs(6)))"); //$NON-NLS-1$
}
/**
* Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link BigDecimal} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * y)). {@link ModFunctionModifier} will be
- * constructed with a function name of "MOD" but without a supported type
- * list.
- *
- * @throws Exception
- */
- public void testTwoBigDecConst2() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new BigDecimal("10"), BigDecimal.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigDecimal("6"), BigDecimal.class) //$NON-NLS-1$
- };
- // mod / default
- helpTestMod("MOD", null, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link BigDecimal} constants for both parameters returns
- * MOD(x,y). {@link ModFunctionModifier} will be constructed with a
- * function name of "MOD" and a supported type list which contains {@link BigDecimal}.
- *
- * @throws Exception
- */
- public void testTwoBigDecConst3() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new BigDecimal("10"), BigDecimal.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigDecimal("6"), BigDecimal.class) //$NON-NLS-1$
- };
- // mod / BigDecimal
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(BigDecimal.class);
- helpTestMod("MOD", typeList, args, "MOD(10, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,y) using {@link BigDecimal} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * y)). {@link ModFunctionModifier} will be
- * constructed with a function name of "MOD" and a supported type list which
- * does not contain {@link BigDecimal}.
- *
- * @throws Exception
- */
- public void testTwoBigDecConst4() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new BigDecimal("10"), BigDecimal.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigDecimal("6"), BigDecimal.class) //$NON-NLS-1$
- };
- // mod / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("MOD", typeList, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link BigDecimal} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * x)). {@link ModFunctionModifier} will be
- * constructed with a function name of "%" and no supported type list.
- *
- * @throws Exception
- */
- public void testTwoBigDecConst5() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new BigDecimal("10"), BigDecimal.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigDecimal("6"), BigDecimal.class) //$NON-NLS-1$
- };
- // % / default
- helpTestMod("%", null, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link BigDecimal} constants for both parameters returns
- * (x % y). {@link ModFunctionModifier} will be constructed with a function
- * name of "%" and a supported type list which contains {@link BigDecimal}.
- *
- * @throws Exception
- */
- public void testTwoBigDecConst6() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new BigDecimal("10"), BigDecimal.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigDecimal("6"), BigDecimal.class) //$NON-NLS-1$
- };
- // % / BigDecimal
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(BigDecimal.class);
- helpTestMod("%", typeList, args, "(10 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * x % y using {@link BigDecimal} constants for both parameters returns
- * (x - (TRUNC((x / y), 0) * x)). {@link ModFunctionModifier} will be
- * constructed with a function name of "%" and a supported type list that
- * does not contain {@link BigDecimal}.
- *
- * @throws Exception
- */
- public void testTwoBigDecConst7() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new BigDecimal("10"), BigDecimal.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigDecimal("6"), BigDecimal.class) //$NON-NLS-1$
- };
- // % / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("%", typeList, args, "(10 - (TRUNC((10 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
* MOD(e1,y) using a {@link Integer} element and a {@link Integer} constant
* for parameters returns MOD(e1,y). {@link ModFunctionModifier} will be
* constructed without specifying a function name or a supported type list.
@@ -952,7 +332,6 @@
LANG_FACTORY.createElement("e1", null, null, Integer.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
};
- // default / default
helpTestMod(args, "MOD(e1, 6)"); //$NON-NLS-1$
}
@@ -971,7 +350,7 @@
LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
};
// mod / default
- helpTestMod("MOD", null, args, "MOD(e1, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestMod("MOD", args, "MOD(e1, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
@@ -988,34 +367,11 @@
LANG_FACTORY.createElement("e1", null, null, Integer.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
};
- // mod / Integer
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Integer.class);
- helpTestMod("MOD", typeList, args, "MOD(e1, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestMod("MOD", args, "MOD(e1, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(e1,y) using a {@link Integer} element and a {@link Integer} constant
- * for parameters returns (e1 - (TRUNC((e1 / y), 0) * y)).
- * {@link ModFunctionModifier} will be constructed with a function name of
- * "MOD" and a supported type list which does not contain {@link Integer}.
- *
- * @throws Exception
- */
- public void testOneIntElemOneIntConst4() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createElement("e1", null, null, Integer.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
- };
- // mod / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("MOD", typeList, args, "(e1 - (TRUNC((e1 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
* e1 % y using a {@link Integer} element and a {@link Integer} constant for
* parameters returns (e1 % y). {@link ModFunctionModifier} will be
* constructed with a function name of "%" and no supported type list.
@@ -1028,7 +384,7 @@
LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
};
// % / default
- helpTestMod("%", null, args, "(e1 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestMod("%", args, "(e1 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
@@ -1045,34 +401,11 @@
LANG_FACTORY.createElement("e1", null, null, Integer.class), //$NON-NLS-1$
LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
};
- // % / Integer
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Integer.class);
- helpTestMod("%", typeList, args, "(e1 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpTestMod("%", args, "(e1 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * e1 % y using a {@link Integer} element and a {@link Integer} constant for
- * parameters returns (e1 - (TRUNC((e1 / y), 0) * y)).
- * {@link ModFunctionModifier} will be constructed with a function name of
- * "%" and a supported type list that does not contain {@link Integer}.
- *
- * @throws Exception
- */
- public void testOneIntElemOneIntConst7() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createElement("e1", null, null, Integer.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new Integer(6), Integer.class)
- };
- // % / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("%", typeList, args, "(e1 - (TRUNC((e1 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
* MOD(e1,y) using a {@link BigDecimal} element and a {@link BigDecimal}
* constant for parameters returns (e1 - (TRUNC((e1 / y), 0) * y)).
* {@link ModFunctionModifier} will be constructed without specifying a
@@ -1086,168 +419,7 @@
LANG_FACTORY.createLiteral(new BigDecimal(6), BigDecimal.class)
};
// default / default
- helpTestMod(args, "(e1 - (TRUNC((e1 / 6), 0) * 6))"); //$NON-NLS-1$
+ helpTestMod(args, "(e1 - (sign(e1) * floor(abs((e1 / 6))) * abs(6)))"); //$NON-NLS-1$
}
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(e1,y) using a {@link BigDecimal} element and a {@link BigDecimal}
- * constant for parameters returns (e1 - (TRUNC((e1 / y), 0) * y)).
- * {@link ModFunctionModifier} will be constructed with a function name of
- * "MOD" but without a supported type list.
- *
- * @throws Exception
- */
- public void testOneBigDecElemOneBigDecConst2() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createElement("e1", null, null, BigDecimal.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigDecimal(6), BigDecimal.class)
- };
- // mod / default
- helpTestMod("MOD", null, args, "(e1 - (TRUNC((e1 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(e1,y) using a {@link BigDecimal} element and a {@link BigDecimal}
- * constant for parameters returns MOD(e1,y). {@link ModFunctionModifier}
- * will be constructed with a function name of "MOD" and a supported type
- * list which contains {@link BigDecimal}.
- *
- * @throws Exception
- */
- public void testOneBigDecElemOneBigDecConst3() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createElement("e1", null, null, BigDecimal.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigDecimal(6), BigDecimal.class)
- };
- // mod / Integer
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(BigDecimal.class);
- helpTestMod("MOD", typeList, args, "MOD(e1, 6)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(e1,y) using a {@link BigDecimal} element and a {@link BigDecimal}
- * constant for parameters returns (e1 - (TRUNC((e1 / y), 0) * y)).
- * {@link ModFunctionModifier} will be constructed with a function name of
- * "MOD" and a supported type list which does not contain {@link BigDecimal}.
- *
- * @throws Exception
- */
- public void testOneBigDecElemOneBigDecConst4() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createElement("e1", null, null, BigDecimal.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigDecimal(6), BigDecimal.class)
- };
- // mod / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("MOD", typeList, args, "(e1 - (TRUNC((e1 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * e1 % y using a {@link BigDecimal} element and a {@link BigDecimal}
- * constant for parameters returns (e1 % y). {@link ModFunctionModifier}
- * will be constructed with a function name of "%" and no supported type
- * list.
- *
- * @throws Exception
- */
- public void testOneBigDecElemOneBigDecConst5() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createElement("e1", null, null, BigDecimal.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigDecimal(6), BigDecimal.class)
- };
- // % / default
- helpTestMod("%", null, args, "(e1 - (TRUNC((e1 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * e1 % y using a {@link BigDecimal} element and a {@link BigDecimal}
- * constant for parameters returns (e1 % y). {@link ModFunctionModifier}
- * will be constructed with a function name of "%" and a supported type list
- * which contains {@link BigDecimal}.
- *
- * @throws Exception
- */
- public void testOneBigDecElemOneBigDecConst6() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createElement("e1", null, null, BigDecimal.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigDecimal(6), BigDecimal.class)
- };
- // % / BigDecimal
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(BigDecimal.class);
- helpTestMod("%", typeList, args, "(e1 % 6)"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * e1 % y using a {@link BigDecimal} element and a {@link BigDecimal}
- * constant for parameters returns (e1 - (TRUNC((e1 / y), 0) * y)).
- * {@link ModFunctionModifier} will be constructed with a function name of
- * "%" and a supported type list that does not contain {@link BigDecimal}.
- *
- * @throws Exception
- */
- public void testOneBigDecElemOneBigDecConst7() throws Exception {
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createElement("e1", null, null, BigDecimal.class), //$NON-NLS-1$
- LANG_FACTORY.createLiteral(new BigDecimal(6), BigDecimal.class)
- };
- // % / Short
- List<Class<?>> typeList = new ArrayList<Class<?>>(1);
- typeList.add(Short.class);
- helpTestMod("%", typeList, args, "(e1 - (TRUNC((e1 / 6), 0) * 6))"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /**
- * Test {@link ModFunctionModifier#modify(IFunction)} to validate a call to
- * MOD(x,e1) using a {@link Float} literal and a {@link Float} element for
- * parameters returns (x - (floor((x / e1)) * e1)). {@link ModFunctionModifier}
- * will be constructed with a function name of "MOD" and no supported type
- * list. The test explicitly overrides
- * {@link ModFunctionModifier#getQuotientExpression(IExpression)} to produce
- * output that uses the floor(z) function.
- *
- * @throws Exception
- */
- public void testOverrideGetQuotient() throws Exception {
- final Class<?> dataType = Float.class;
- final String modFunctionName = "MOD"; //$NON-NLS-1$
- final String expectedStr = "(1000.23 - (floor((1000.23 / e1)) * e1))"; //$NON-NLS-1$
-
- IExpression[] args = new IExpression[] {
- LANG_FACTORY.createLiteral(new Float(1000.23), dataType),
- LANG_FACTORY.createElement("e1", null, null, dataType), //$NON-NLS-1$
- };
- IFunction func = LANG_FACTORY.createFunction(modFunctionName, args, dataType);
-
- final Translator trans = new Translator() {
- @Override
- public void initialize(ConnectorEnvironment env)
- throws ConnectorException {
- super.initialize(env);
- registerFunctionModifier(SourceSystemFunctions.MOD, new ModFunctionModifier(getLanguageFactory(), modFunctionName, null) {
- @Override
- protected IExpression getQuotientExpression(
- IExpression division) {
- return getLanguageFactory().createFunction("floor", Arrays.asList(division), division.getType()); //$NON-NLS-1$
- }
-
- });
- }
- };
-
- trans.initialize(EnvironmentUtility.createEnvironment(new Properties(), false));
-
- IExpression expr = trans.getFunctionModifiers().get(SourceSystemFunctions.MOD).modify(func);
- SQLConversionVisitor sqlVisitor = trans.getSQLConversionVisitor();
- sqlVisitor.append(expr);
- assertEquals("Modified function does not match", expectedStr, sqlVisitor.toString()); //$NON-NLS-1$
- }
}
Copied: trunk/connectors/connector-jdbc/src/test/resources/PartsSupplierOracle.vdb (from rev 1286, trunk/test-integration/src/test/resources/PartsSupplierOracle.vdb)
===================================================================
(Binary files differ)
Property changes on: trunk/connectors/connector-jdbc/src/test/resources/PartsSupplierOracle.vdb
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/datatypes.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/datatypes.xml 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/datatypes.xml 2009-08-30 22:19:06 UTC (rev 1294)
@@ -44,7 +44,7 @@
</row>
<row>
<entry>boolean</entry>
- <entry>a single bit, or Boolean, with two possible values
+ <entry>a single bit, or Boolean, that can true, false, or null (unknown)
</entry>
<entry>java.lang.Boolean</entry>
<entry>BIT</entry>
@@ -373,37 +373,25 @@
<tbody>
<row>
<entry morerows="2">String</entry>
- <entry>'true'</entry>
- <entry>true</entry>
- </row>
- <row>
<entry>'false'</entry>
<entry>false</entry>
</row>
<row>
<entry>'unknown'</entry>
- <entry>unknown</entry>
+ <entry>null</entry>
</row>
<row>
<entry>other</entry>
- <entry>
- <emphasis>error</emphasis>
- </entry>
- </row>
- <row>
- <entry morerows="2">Numeric</entry>
- <entry>1</entry>
<entry>true</entry>
</row>
<row>
+ <entry morerows="2">Numeric</entry>
<entry>0</entry>
<entry>false</entry>
</row>
<row>
<entry>other</entry>
- <entry>
- <emphasis>error</emphasis>
- </entry>
+ <entry>true</entry>
</row>
</tbody>
</tgroup>
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/impl/ConnectorWorkItem.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/impl/ConnectorWorkItem.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/impl/ConnectorWorkItem.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -219,6 +219,9 @@
}
private void handleError(Throwable t) {
+ if (t instanceof RuntimeException && t.getCause() != null) {
+ t = t.getCause();
+ }
manager.logSRCCommand(this.requestMsg, this.securityContext, CommandLogMessage.CMD_STATUS_ERROR, -1);
String msg = DQPPlugin.Util.getString("ConnectorWorker.process_failed", this.id); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/com/metamatrix/query/function/TestFunction.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/function/TestFunction.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/engine/src/test/java/com/metamatrix/query/function/TestFunction.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -408,7 +408,7 @@
}
@Test public void testConvertStringBoolean3() throws Exception {
- helpConvertFail("x", "boolean"); //$NON-NLS-1$ //$NON-NLS-2$
+ helpConvert("x", "boolean", Boolean.TRUE); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testConvertStringBoolean4() throws Exception {
Modified: trunk/engine/src/test/java/com/metamatrix/query/parser/TestParser.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/parser/TestParser.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/engine/src/test/java/com/metamatrix/query/parser/TestParser.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1846,12 +1846,7 @@
helpTestLiteral(expected, expectedType, sql, expectedSql);
}
-
- /** SELECT {b 'xyz'} FROM m.g1 */
- public void testBooleanLiteralFail() {
- helpException("SELECT {b 'xyz'} FROM m.g1"); //$NON-NLS-1$
- }
-
+
/** SELECT DISTINCT a FROM g */
public void testSelectDistinct(){
GroupSymbol g = new GroupSymbol("g"); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/com/metamatrix/query/resolver/TestResolver.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/resolver/TestResolver.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/engine/src/test/java/com/metamatrix/query/resolver/TestResolver.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -4430,7 +4430,7 @@
public void testInsertWithoutColumnsFails1() {
String sql = "Insert into pm1.g1 values (1, 2, 3, 4)"; //$NON-NLS-1$
- helpResolveException(sql, "Error Code:ERR.003.029.0013 Message:Exception converting value 3 of type class java.lang.Integer to expected type class java.lang.Boolean"); //$NON-NLS-1$
+ helpResolveException(sql, "Error Code:ERR.015.008.0041 Message:Expected value of type 'boolean' but '3' is of type 'integer' and no implicit conversion is available."); //$NON-NLS-1$
}
public void testInsertWithQueryFails() {
Modified: trunk/test-integration/src/test/java/com/metamatrix/connector/jdbc/extension/TestSQLConversionVisitor.java
===================================================================
--- trunk/test-integration/src/test/java/com/metamatrix/connector/jdbc/extension/TestSQLConversionVisitor.java 2009-08-28 23:08:57 UTC (rev 1293)
+++ trunk/test-integration/src/test/java/com/metamatrix/connector/jdbc/extension/TestSQLConversionVisitor.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -73,8 +73,8 @@
"Payload", //$NON-NLS-1$
"ExecutionPayload", //$NON-NLS-1$
"ConnectionID", //$NON-NLS-1$
- "Connector",
- "RequestID", "PartID", "ExecCount");
+ "Connector", //$NON-NLS-1$
+ "RequestID", "PartID", "ExecCount"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
/**
* Constructor for TestSQLConversionVisitor.
* @param name
@@ -383,53 +383,53 @@
ICommand result = new LanguageBridgeFactory(metadata).translate(command);
- helpTestVisitorWithCommand("SELECT PARTS.PART_NAME FROM PARTS GROUP BY concat(PARTS.PART_ID, 'a')", result,
- false, //$NON-NLS-1$
+ helpTestVisitorWithCommand("SELECT PARTS.PART_NAME FROM PARTS GROUP BY concat(PARTS.PART_ID, 'a')", result, //$NON-NLS-1$
+ false,
false);
}
public void testPreparedStatementCreationWithUpdate() {
helpTestVisitor(getTestVDB(),
"update parts set part_weight = 'a' where part_weight < 5", //$NON-NLS-1$
- "UPDATE PARTS SET PART_WEIGHT = ? WHERE PARTS.PART_WEIGHT < ?",
+ "UPDATE PARTS SET PART_WEIGHT = ? WHERE PARTS.PART_WEIGHT < ?", //$NON-NLS-1$
false,
- true); //$NON-NLS-1$
+ true);
}
public void testPreparedStatementCreationWithInsert() {
helpTestVisitor(getTestVDB(),
"insert into parts (part_weight) values (5)", //$NON-NLS-1$
- "INSERT INTO PARTS (PART_WEIGHT) VALUES (?)",
+ "INSERT INTO PARTS (PART_WEIGHT) VALUES (?)", //$NON-NLS-1$
false,
- true); //$NON-NLS-1$
+ true);
}
public void testPreparedStatementCreationWithSelect() {
helpTestVisitor(getTestVDB(),
"select part_name from parts where part_id not in ('x', 'y') and part_weight < 6", //$NON-NLS-1$
- "SELECT PARTS.PART_NAME FROM PARTS WHERE (PARTS.PART_ID NOT IN (?, ?)) AND (PARTS.PART_WEIGHT < ?)",
+ "SELECT PARTS.PART_NAME FROM PARTS WHERE (PARTS.PART_ID NOT IN (?, ?)) AND (PARTS.PART_WEIGHT < ?)", //$NON-NLS-1$
false,
- true); //$NON-NLS-1$
+ true);
}
public void testPreparedStatementCreationWithLike() {
helpTestVisitor(getTestVDB(),
"select part_name from parts where part_name like '%foo'", //$NON-NLS-1$
- "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_NAME LIKE ?",
+ "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_NAME LIKE ?", //$NON-NLS-1$
false,
- true); //$NON-NLS-1$
+ true);
}
/**
* ideally this should not happen, but to be on the safe side
* only the right side should get replaced
*/
- public void testPreparedStatementCreationWithLeftConstant() {
+ public void defer_testPreparedStatementCreationWithLeftConstant() {
helpTestVisitor(getTestVDB(),
"select part_name from parts where 'x' = 'y'", //$NON-NLS-1$
- "SELECT PARTS.PART_NAME FROM PARTS WHERE 1 = ?",
+ "SELECT PARTS.PART_NAME FROM PARTS WHERE 1 = ?", //$NON-NLS-1$
false,
- true); //$NON-NLS-1$
+ true);
}
/**
@@ -439,17 +439,17 @@
public void testPreparedStatementCreationWithFunction() {
helpTestVisitor(getTestVDB(),
"select part_name from parts where concat(part_name, 'x') = concat('y', part_weight)", //$NON-NLS-1$
- "SELECT PARTS.PART_NAME FROM PARTS WHERE concat(PARTS.PART_NAME, 'x') = concat('y', PARTS.PART_WEIGHT)",
+ "SELECT PARTS.PART_NAME FROM PARTS WHERE concat(PARTS.PART_NAME, 'x') = concat('y', PARTS.PART_WEIGHT)", //$NON-NLS-1$
false,
- true); //$NON-NLS-1$
+ true);
}
public void testPreparedStatementCreationWithCase() {
helpTestVisitor(getTestVDB(),
"SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_WEIGHT = CASE WHEN PARTS.PART_NAME='a' THEN 'b' ELSE 'c' END", //$NON-NLS-1$
- "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_WEIGHT = CASE WHEN PARTS.PART_NAME = ? THEN 'b' ELSE 'c' END",
+ "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_WEIGHT = CASE WHEN PARTS.PART_NAME = ? THEN 'b' ELSE 'c' END", //$NON-NLS-1$
false,
- true); //$NON-NLS-1$
+ true);
}
public void testVisitIDeleteWithComment() throws Exception {
Deleted: 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-08-28 23:08:57 UTC (rev 1293)
+++ trunk/test-integration/src/test/java/com/metamatrix/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java 2009-08-30 22:19:06 UTC (rev 1294)
@@ -1,510 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package com.metamatrix.connector.jdbc.oracle;
-
-import static org.junit.Assert.*;
-
-import java.util.Properties;
-
-import org.junit.Test;
-import org.teiid.connector.api.ConnectorException;
-import org.teiid.connector.api.ExecutionContext;
-import org.teiid.connector.jdbc.JDBCPropertyNames;
-import org.teiid.connector.jdbc.oracle.OracleSQLTranslator;
-import org.teiid.connector.jdbc.translator.TranslatedCommand;
-import org.teiid.connector.language.ICommand;
-import org.teiid.dqp.internal.datamgr.impl.ExecutionContextImpl;
-import org.teiid.dqp.internal.datamgr.impl.FakeExecutionContextImpl;
-
-import com.metamatrix.cdk.CommandBuilder;
-import com.metamatrix.cdk.api.EnvironmentUtility;
-import com.metamatrix.cdk.api.TranslationUtility;
-import com.metamatrix.common.types.DataTypeManager;
-import com.metamatrix.core.util.UnitTestUtil;
-import com.metamatrix.query.metadata.QueryMetadataInterface;
-import com.metamatrix.query.unittest.FakeMetadataFacade;
-import com.metamatrix.query.unittest.FakeMetadataFactory;
-import com.metamatrix.query.unittest.FakeMetadataObject;
-import com.metamatrix.query.unittest.FakeMetadataStore;
-
-public class TestOracleSQLConversionVisitor {
- private static ExecutionContext EMPTY_CONTEXT = new FakeExecutionContextImpl();
-
- private String getTestVDB() {
- return UnitTestUtil.getTestDataPath() + "/PartsSupplierOracle.vdb"; //$NON-NLS-1$
- }
-
- private void helpTestVisitor(String vdb, String input, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
- helpTestVisitor(vdb, input, EMPTY_CONTEXT, dbmsTimeZone, expectedOutput, false);
- }
-
- private void helpTestVisitor(String vdb, String input, String dbmsTimeZone, String expectedOutput, boolean correctNaming) throws ConnectorException {
- helpTestVisitor(vdb, input, EMPTY_CONTEXT, dbmsTimeZone, expectedOutput, correctNaming);
- }
-
- private void helpTestVisitor(String vdb, String input, ExecutionContext context, String dbmsTimeZone, String expectedOutput, boolean correctNaming) throws ConnectorException {
- // Convert from sql to objects
- TranslationUtility util = new TranslationUtility(vdb);
- ICommand obj = util.parseCommand(input, correctNaming, true);
- this.helpTestVisitor(obj, context, dbmsTimeZone, expectedOutput);
- }
-
- /** Helper method takes a QueryMetadataInterface impl instead of a VDB filename
- * @throws ConnectorException
- */
- private void helpTestVisitor(QueryMetadataInterface metadata, String input, ExecutionContext context, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
- // Convert from sql to objects
- CommandBuilder commandBuilder = new CommandBuilder(metadata);
- ICommand obj = commandBuilder.getCommand(input);
- this.helpTestVisitor(obj, context, dbmsTimeZone, expectedOutput);
- }
-
- private void helpTestVisitor(ICommand obj, ExecutionContext context, String dbmsTimeZone, String expectedOutput) throws ConnectorException {
-
-
- // Apply function replacement
- OracleSQLTranslator translator = new OracleSQLTranslator();
- Properties p = new Properties();
- if (dbmsTimeZone != null) {
- p.setProperty(JDBCPropertyNames.DATABASE_TIME_ZONE, dbmsTimeZone);
- }
- translator.initialize(EnvironmentUtility.createEnvironment(p, false));
- // Convert back to SQL
- TranslatedCommand tc = new TranslatedCommand(context, translator);
- tc.translateCommand(obj);
-
- // Check stuff
- assertEquals("Did not get correct sql", expectedOutput, tc.getSql()); //$NON-NLS-1$
- }
-
- /**
- * case 3905
- * as of 5.6 this is handled by the rewriter, but it's possible
- * that we may bring back source queries with expressions in the group by clause
- */
- public void defer_testFunctionsInGroupBy() throws Exception {
- String input = "SELECT substring(PART_NAME, 2, 1) FROM PARTS Group By substring(PART_NAME, 2, 1)"; //$NON-NLS-1$
- String output = "SELECT substr(PARTS.PART_NAME, 2, 1) FROM PARTS GROUP BY substr(PARTS.PART_NAME, 2, 1)"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null, output);
- }
-
- /** defect 21775 */
- @Test public void testDateStuff() throws Exception {
- String input = "SELECT ((CASE WHEN month(datevalue) < 10 THEN ('0' || convert(month(datevalue), string)) ELSE convert(month(datevalue), string) END || CASE WHEN dayofmonth(datevalue) < 10 THEN ('0' || convert(dayofmonth(datevalue), string)) ELSE convert(dayofmonth(datevalue), string) END) || convert(year(datevalue), string)), SUM(intkey) FROM bqt1.SMALLA GROUP BY datevalue"; //$NON-NLS-1$
- String output = "SELECT CASE WHEN (CASE WHEN (CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END IS NULL) OR (CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END IS NULL) THEN NULL ELSE concat(CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END, CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE con!
cat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END) END IS NULL) OR (to_char(EXTRACT(YEAR FROM SmallA.DateValue)) IS NULL) THEN NULL ELSE concat(CASE WHEN (CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END IS NULL) OR (CASE WHEN EXTRACT(DAY FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END IS NULL) THEN NULL ELSE concat(CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN CASE WHEN to_char(EXTRACT(MONTH FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(MONTH FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(MONTH FR!
OM SmallA.DateValue)) END, CASE WHEN EXTRACT(DAY FROM SmallA.D!
ateValue
) < 10 THEN CASE WHEN to_char(EXTRACT(DAY FROM SmallA.DateValue)) IS NULL THEN NULL ELSE concat('0', to_char(EXTRACT(DAY FROM SmallA.DateValue))) END ELSE to_char(EXTRACT(DAY FROM SmallA.DateValue)) END) END, to_char(EXTRACT(YEAR FROM SmallA.DateValue))) END, SUM(SmallA.IntKey) FROM SmallA GROUP BY SmallA.DateValue"; //$NON-NLS-1$
-
- helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
- input,
- EMPTY_CONTEXT, null, output);
- }
-
- /**
- * defect 21775
- * as of 5.6 this is handled by the rewriter, but it's possible
- * that we may bring back source queries with expressions in the group by clause
- */
-
- public void defer_testDateStuffGroupBy() 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 month(datevalue), dayofmonth(datevalue), year(datevalue)"; //$NON-NLS-1$
- String output = "SELECT ((CASE WHEN EXTRACT(MONTH FROM SmallA.DateValue) < 10 THEN ('0' || to_char(EXTRACT(MONTH FROM SmallA.DateValue))) ELSE to_char(EXTRACT(MONTH FROM SmallA.DateValue)) END || CASE WHEN TO_NUMBER(TO_CHAR(SmallA.DateValue, 'DD')) < 10 THEN ('0' || to_char(TO_NUMBER(TO_CHAR(SmallA.DateValue, 'DD')))) ELSE to_char(TO_NUMBER(TO_CHAR(SmallA.DateValue, 'DD'))) END) || to_char(EXTRACT(YEAR FROM SmallA.DateValue))), SUM(SmallA.IntKey) FROM SmallA GROUP BY EXTRACT(MONTH FROM SmallA.DateValue), TO_NUMBER(TO_CHAR(SmallA.DateValue, 'DD')), EXTRACT(YEAR FROM SmallA.DateValue)"; //$NON-NLS-1$
-
- helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
- input,
- EMPTY_CONTEXT, null, output);
- }
-
- @Test public void testCharFunction() throws Exception {
- String input = "SELECT char(CONVERT(PART_ID, INTEGER)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT chr(to_number(PARTS.PART_ID)) FROM PARTS"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- @Test public void testLcaseFunction() throws Exception {
- String input = "SELECT lcase(PART_NAME) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT lower(PARTS.PART_NAME) FROM PARTS"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- @Test public void testUcaseFunction() throws Exception {
- String input = "SELECT ucase(PART_NAME) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT upper(PARTS.PART_NAME) FROM PARTS"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- @Test public void testIfnullFunction() throws Exception {
- String input = "SELECT ifnull(PART_NAME, 'x') FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT nvl(PARTS.PART_NAME, 'x') FROM PARTS"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- @Test public void testLogFunction() throws Exception {
- String input = "SELECT log(CONVERT(PART_ID, INTEGER)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT ln(to_number(PARTS.PART_ID)) FROM PARTS"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- @Test public void testLog10Function() throws Exception {
- String input = "SELECT log10(CONVERT(PART_ID, INTEGER)) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT log(10, to_number(PARTS.PART_ID)) FROM PARTS"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- @Test public void testConvertFunctionInteger() throws Exception {
- String input = "SELECT convert(PARTS.PART_ID, integer) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT to_number(PARTS.PART_ID) FROM PARTS"; //$NON-NLS-1$
-
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- @Test public void testConvertFunctionChar() throws Exception {
- String input = "SELECT convert(PARTS.PART_ID, char) FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT PARTS.PART_ID FROM PARTS"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- @Test public void testConvertFunctionBoolean() throws Exception {
- String input = "SELECT convert(PARTS.PART_ID, boolean) FROM PARTS"; //$NON-NLS-1$
- //String output = "SELECT PARTS.PART_ID FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT decode(PARTS.PART_ID, 'true', 1, 'false', 0) FROM PARTS"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- @Test public void testConvertFunctionDate() throws Exception {
- String input = "SELECT convert(PARTS.PART_ID, date) FROM PARTS"; //$NON-NLS-1$
- //String output = "SELECT PARTS.PART_ID FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT to_date(PARTS.PART_ID, 'YYYY-MM-DD') FROM PARTS"; //$NON-NLS-1$
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- @Test public void testConvertFunctionTime() throws Exception {
- String input = "SELECT convert(PARTS.PART_ID, time) FROM PARTS"; //$NON-NLS-1$
- //String output = "SELECT PARTS.PART_ID FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT to_date(('1970-01-01 ' || to_char(PARTS.PART_ID, 'HH24:MI:SS')), 'YYYY-MM-DD HH24:MI:SS') FROM PARTS"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- @Test public void testConvertFunctionTimestamp() throws Exception {
- String input = "SELECT convert(PARTS.PART_ID, timestamp) FROM PARTS"; //$NON-NLS-1$
- //String output = "SELECT PARTS.PART_ID FROM PARTS"; //$NON-NLS-1$
- String output = "SELECT to_timestamp(PARTS.PART_ID, 'YYYY-MM-DD HH24:MI:SS.FF') FROM PARTS"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- @Test public void testExtractFunctionTimestamp() throws Exception {
- String input = "SELECT month(TIMESTAMPVALUE) FROM BQT1.Smalla"; //$NON-NLS-1$
- String output = "SELECT EXTRACT(MONTH FROM SmallA.TimestampValue) FROM SmallA"; //$NON-NLS-1$
-
- helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
- input,
- EMPTY_CONTEXT, null, output);
- }
-
- @Test public void testAliasedGroup() throws Exception {
- helpTestVisitor(getTestVDB(),
- "select y.part_name from parts as y", //$NON-NLS-1$
- null,
- "SELECT y.PART_NAME FROM PARTS y"); //$NON-NLS-1$
- }
-
- @Test public void testDateLiteral() throws Exception {
- helpTestVisitor(getTestVDB(),
- "select {d'2002-12-31'} FROM parts", //$NON-NLS-1$
- null,
- "SELECT {d'2002-12-31'} FROM PARTS"); //$NON-NLS-1$
- }
-
- @Test public void testTimeLiteral() throws Exception {
- helpTestVisitor(getTestVDB(),
- "select {t'13:59:59'} FROM parts", //$NON-NLS-1$
- null,
- "SELECT {ts'1970-01-01 13:59:59'} FROM PARTS"); //$NON-NLS-1$
- }
-
- @Test public void testTimestampLiteral() throws Exception {
- helpTestVisitor(getTestVDB(),
- "select {ts'2002-12-31 13:59:59'} FROM parts", //$NON-NLS-1$
- null,
- "SELECT {ts'2002-12-31 13:59:59.0'} FROM PARTS"); //$NON-NLS-1$
- }
-
- @Test public void testUnionOrderByWithThreeBranches() throws Exception {
- helpTestVisitor(getTestVDB(),
- "select part_id id FROM parts UNION ALL select part_name FROM parts UNION ALL select part_id FROM parts ORDER BY id", //$NON-NLS-1$
- null,
- "(SELECT g_2.PART_ID AS c_0 FROM PARTS g_2 UNION ALL SELECT g_1.PART_NAME AS c_0 FROM PARTS g_1) UNION ALL SELECT g_0.PART_ID AS c_0 FROM PARTS g_0 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
- true);
- }
-
- @Test public void testUnionOrderBy() throws Exception {
- helpTestVisitor(getTestVDB(),
- "select part_id FROM parts UNION ALL select part_name FROM parts ORDER BY part_id", //$NON-NLS-1$
- null,
- "SELECT g_1.PART_ID AS c_0 FROM PARTS g_1 UNION ALL SELECT g_0.PART_NAME AS c_0 FROM PARTS g_0 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
- true);
- }
-
- @Test public void testUnionOrderBy2() throws Exception {
- helpTestVisitor(getTestVDB(),
- "select part_id as p FROM parts UNION ALL select part_name FROM parts ORDER BY p", //$NON-NLS-1$
- null,
- "SELECT PARTS.PART_ID AS p FROM PARTS UNION ALL SELECT PARTS.PART_NAME FROM PARTS ORDER BY p NULLS FIRST"); //$NON-NLS-1$
- }
-
- @Test public void testUpdateWithFunction() throws Exception {
- String input = "UPDATE bqt1.smalla SET intkey = intkey + 1"; //$NON-NLS-1$
- String output = "UPDATE SmallA SET IntKey = (SmallA.IntKey + 1)"; //$NON-NLS-1$
-
- helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
- input,
- EMPTY_CONTEXT, null, output);
- }
-
-
- /**
- * Oracle's DUAL table is a pseudo-table; element names cannot be
- * fully qualified since the table doesn't really exist nor contain
- * any columns. But this requires modeling the DUAL table in
- * MM as if it were a real physical table, and also modeling any
- * columns in the table. Case 3742
- *
- * @since 4.3
- */
- @Test public void testDUAL() throws Exception {
- String input = "SELECT something FROM DUAL"; //$NON-NLS-1$
- String output = "SELECT something FROM DUAL"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- /**
- * Test Oracle's rownum pseudo-column. Not a real column, so it can't
- * be fully-qualified with a table name. MM requires this column to be
- * modeled in any table which the user wants to use rownum with.
- * Case 3739
- *
- * @since 4.3
- */
- @Test public void testROWNUM() throws Exception {
- String input = "SELECT part_name, rownum FROM parts"; //$NON-NLS-1$
- String output = "SELECT PARTS.PART_NAME, ROWNUM FROM PARTS"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- /**
- * Test Oracle's rownum pseudo-column. Not a real column, so it can't
- * be fully-qualified with a table name. MM requires this column to be
- * modeled in any table which the user wants to use rownum with. Case 3739
- *
- * @since 4.3
- */
- @Test public void testROWNUM2() throws Exception {
- String input = "SELECT part_name FROM parts where rownum < 100"; //$NON-NLS-1$
- String output = "SELECT PARTS.PART_NAME FROM PARTS WHERE ROWNUM < 100"; //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- null,
- output);
- }
-
- /**
- * Case 3744. Test that an Oracle-specific db hint, delivered as a String via command
- * payload, is added to the translated SQL.
- *
- * @since 4.3
- */
- @Test public void testOracleCommentPayload() throws Exception {
- String input = "SELECT part_name, rownum FROM parts"; //$NON-NLS-1$
- String output = "SELECT /*+ ALL_ROWS */ PARTS.PART_NAME, ROWNUM FROM PARTS"; //$NON-NLS-1$
-
- String hint = "/*+ ALL_ROWS */"; //$NON-NLS-1$
- ExecutionContext context = new ExecutionContextImpl(null, null, null, null, hint, null, "", null, null, null); //$NON-NLS-1$
-
- helpTestVisitor(getTestVDB(),
- input,
- context,
- null,
- output,
- false);
- }
-
- /**
- * reproducing this case relies on the name in source for the table being different from
- * the name
- */
- @Test public void testCase3845() throws Exception {
-
- String input = "SELECT (DoubleNum * 1.0) FROM BQT1.Smalla"; //$NON-NLS-1$
- String output = "SELECT (SmallishA.DoubleNum * 1.0) FROM SmallishA"; //$NON-NLS-1$
-
- FakeMetadataFacade metadata = exampleCase3845();
-
- helpTestVisitor(metadata, input, EMPTY_CONTEXT, null, output);
- }
-
- /** create fake BQT metadata to test this case, name in source is important */
- private FakeMetadataFacade exampleCase3845() {
- // Create models
- FakeMetadataObject bqt1 = FakeMetadataFactory.createPhysicalModel("BQT1"); //$NON-NLS-1$
- FakeMetadataObject bqt1SmallA = FakeMetadataFactory.createPhysicalGroup("BQT1.SmallA", bqt1); //$NON-NLS-1$
- bqt1SmallA.putProperty(FakeMetadataObject.Props.NAME_IN_SOURCE, "SmallishA");//$NON-NLS-1$
- FakeMetadataObject doubleNum = FakeMetadataFactory.createElement("BQT1.SmallA.DoubleNum", bqt1SmallA, DataTypeManager.DefaultDataTypes.DOUBLE, 0); //$NON-NLS-1$
-
- FakeMetadataStore store = new FakeMetadataStore();
- store.addObject(bqt1);
- store.addObject(bqt1SmallA);
- store.addObject(doubleNum);
- return new FakeMetadataFacade(store);
- }
-
- public void helpTestVisitor(String vdb, String input, String expectedOutput) throws ConnectorException {
- helpTestVisitor(vdb, input, null, expectedOutput);
- }
-
- @Test public void testRowLimit2() throws Exception {
- String input = "select intkey from bqt1.smalla limit 100"; //$NON-NLS-1$
- String output = "SELECT * FROM (SELECT SmallA.IntKey FROM SmallA) WHERE ROWNUM <= 100"; //$NON-NLS-1$
-
- helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
- input,
- EMPTY_CONTEXT, null, output);
- }
-
- @Test public void testRowLimit3() throws Exception {
- String input = "select intkey from bqt1.smalla limit 50, 100"; //$NON-NLS-1$
- String output = "SELECT * FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (SELECT SmallA.IntKey FROM SmallA) VIEW_FOR_LIMIT WHERE ROWNUM <= 150) WHERE ROWNUM_ > 50"; //$NON-NLS-1$
-
- helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
- input,
- EMPTY_CONTEXT, null, output);
- }
-
- @Test public void testLimitWithNestedInlineView() throws Exception {
- String input = "select max(intkey), stringkey from (select intkey, stringkey from bqt1.smalla order by intkey limit 100) x group by stringkey"; //$NON-NLS-1$
- String output = "SELECT MAX(x.intkey), x.stringkey FROM (SELECT * FROM (SELECT SmallA.IntKey, SmallA.StringKey FROM SmallA ORDER BY intkey NULLS FIRST) WHERE ROWNUM <= 100) x GROUP BY x.stringkey"; //$NON-NLS-1$
-
- helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
- input,
- EMPTY_CONTEXT, null, output);
- }
-
- @Test public void testExceptAsMinus() throws Exception {
- String input = "select intkey, intnum from bqt1.smalla except select intnum, intkey from bqt1.smallb"; //$NON-NLS-1$
- String output = "SELECT SmallA.IntKey, SmallA.IntNum FROM SmallA MINUS SELECT SmallB.IntNum, SmallB.IntKey FROM SmallB"; //$NON-NLS-1$
-
- helpTestVisitor(FakeMetadataFactory.exampleBQTCached(),
- input,
- EMPTY_CONTEXT, null, output);
- }
-
- @Test public void testConcat2_useLiteral() throws Exception {
- String sql = "select concat2(stringnum,'_xx') from BQT1.Smalla"; //$NON-NLS-1$
- String expected = "SELECT concat(nvl(SmallA.StringNum, ''), '_xx') FROM SmallA"; //$NON-NLS-1$
- helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
- }
-
- @Test public void testConcat2() throws Exception {
- String sql = "select concat2(stringnum, stringnum) from BQT1.Smalla"; //$NON-NLS-1$
- String expected = "SELECT CASE WHEN SmallA.StringNum IS NULL THEN NULL ELSE concat(nvl(SmallA.StringNum, ''), nvl(SmallA.StringNum, '')) END FROM SmallA"; //$NON-NLS-1$
- helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
- }
-
- @Test public void testConcat() throws Exception {
- String sql = "select concat(stringnum, stringkey) from BQT1.Smalla"; //$NON-NLS-1$
- String expected = "SELECT CASE WHEN (SmallA.StringNum IS NULL) OR (SmallA.StringKey IS NULL) THEN NULL ELSE concat(SmallA.StringNum, SmallA.StringKey) END FROM SmallA"; //$NON-NLS-1$
- helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
- }
-
- @Test public void testConcat_withLiteral() throws Exception {
- String sql = "select stringnum || '1' from BQT1.Smalla"; //$NON-NLS-1$
- String expected = "SELECT CASE WHEN SmallA.StringNum IS NULL THEN NULL ELSE concat(SmallA.StringNum, '1') END FROM SmallA"; //$NON-NLS-1$
- helpTestVisitor(FakeMetadataFactory.exampleBQTCached(), sql, EMPTY_CONTEXT, null, expected);
- }
-
- @Test public void testRowLimitWithUnionOrderBy() throws Exception {
- String input = "(select intkey from bqt1.smalla limit 50, 100) union select intnum from bqt1.smalla order by intkey"; //$NON-NLS-1$
- String output = "SELECT c_0 FROM (SELECT VIEW_FOR_LIMIT.*, ROWNUM ROWNUM_ FROM (SELECT g_1.IntKey AS c_0 FROM SmallA g_1) VIEW_FOR_LIMIT WHERE ROWNUM <= 150) WHERE ROWNUM_ > 50 UNION SELECT g_0.IntNum AS c_0 FROM SmallA g_0 ORDER BY c_0 NULLS FIRST"; //$NON-NLS-1$
-
- CommandBuilder commandBuilder = new CommandBuilder(FakeMetadataFactory.exampleBQTCached());
- ICommand obj = commandBuilder.getCommand(input, true, true);
- this.helpTestVisitor(obj, EMPTY_CONTEXT, null, output);
- }
-
-}
Deleted: trunk/test-integration/src/test/resources/PartsSupplierOracle.vdb
===================================================================
(Binary files differ)
15 years, 4 months
teiid SVN: r1293 - trunk/client-jdbc/src/test/java/com/metamatrix/jdbc/api.
by teiid-commits@lists.jboss.org
Author: vhalbert(a)redhat.com
Date: 2009-08-28 19:08:57 -0400 (Fri, 28 Aug 2009)
New Revision: 1293
Modified:
trunk/client-jdbc/src/test/java/com/metamatrix/jdbc/api/AbstractQueryTest.java
Log:
Teiid-777 : consolidating the core logic for executing sql against a connection
Modified: trunk/client-jdbc/src/test/java/com/metamatrix/jdbc/api/AbstractQueryTest.java
===================================================================
--- trunk/client-jdbc/src/test/java/com/metamatrix/jdbc/api/AbstractQueryTest.java 2009-08-28 22:42:55 UTC (rev 1292)
+++ trunk/client-jdbc/src/test/java/com/metamatrix/jdbc/api/AbstractQueryTest.java 2009-08-28 23:08:57 UTC (rev 1293)
@@ -59,8 +59,21 @@
protected Connection internalConnection = null;
protected ResultSet internalResultSet = null;
protected Statement internalStatement = null;
+ private SQLException internalException = null;
protected int updateCount = -1;
protected String DELIMITER = " "; //$NON-NLS-1$
+
+ public AbstractQueryTest() {
+ super();
+ }
+
+
+ public AbstractQueryTest(Connection conn) {
+ super();
+ this.internalConnection = conn;
+
+ }
+
@After public void tearDown() throws Exception {
closeConnection();
@@ -118,8 +131,12 @@
}
return result;
} catch (SQLException e) {
- throw new RuntimeException(e);
- }
+ this.internalException = e;
+ if (!exceptionExpected()) {
+ throw new RuntimeException(e);
+ }
+ }
+ return false;
}
private void setParameters(PreparedStatement stmt, Object[] params) throws SQLException{
@@ -159,8 +176,13 @@
return this.internalStatement.executeBatch();
} catch (SQLException e) {
- throw new RuntimeException(e);
- }
+ this.internalException = e;
+ if (!exceptionExpected()) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ return null;
}
@@ -181,8 +203,21 @@
protected void assignExecutionProperties(Statement stmt) {
}
-
+
+ public boolean exceptionOccurred() {
+ return this.internalException != null;
+ }
+
+ public boolean exceptionExpected() {
+ return false;
+ }
+
+
+ public SQLException getLastException() {
+ return this.internalException;
+ }
+
public void assertResultsSetEquals(File expected) {
assertResultsSetEquals(this.internalResultSet, expected);
}
@@ -436,6 +471,8 @@
}
public void closeResultSet() {
+ this.internalException = null;
+
if (this.internalResultSet != null) {
try {
this.internalResultSet.close();
@@ -462,6 +499,13 @@
}
}
+ public void cancelQuery() throws SQLException {
+ assertNotNull(this.internalConnection);
+ assertTrue(!this.internalConnection.isClosed());
+ assertNotNull(this.internalStatement);
+ this.internalStatement.cancel();
+ }
+
public void print(String msg) {
System.out.println(msg);
}
15 years, 4 months
teiid SVN: r1292 - trunk/adminshell/src/main/resources/scripts.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2009-08-28 18:42:55 -0400 (Fri, 28 Aug 2009)
New Revision: 1292
Modified:
trunk/adminshell/src/main/resources/scripts/adminapi.bsh
Log:
TEIID-697: Please look at JIRA for the changes made.
Modified: trunk/adminshell/src/main/resources/scripts/adminapi.bsh
===================================================================
--- trunk/adminshell/src/main/resources/scripts/adminapi.bsh 2009-08-28 22:27:14 UTC (rev 1291)
+++ trunk/adminshell/src/main/resources/scripts/adminapi.bsh 2009-08-28 22:42:55 UTC (rev 1292)
@@ -542,88 +542,19 @@
/**
- * Set a Property for an AdminObject
- *
- * @param identifier
- * The unique identifier for for an {@link AdminObject}.
- * @param className
- * The class name of the sub-interface of {@link AdminObject} you are setting the property for.
- * All of these sub-interfaces are in package <code>org.teiid.adminapi</code>.
- * You may specify either the fully-qualified or unqualified classname.
- * For example "ConnectorBinding" or "org.teiid.adminapi.ConnectorBinding".
+ * Set/update the property for the Connector Binding identified by the given deployed name.
+ * @param deployedName
* @param propertyName
- * String Property key
* @param propertyValue
- * String value to update
* @throws AdminException
- * if there's a system error.
- * @since 4.3
*/
-void setProperty(String identifier, String className, String propertyName, String propertyValue) {
- debug("Setting property for adminObject: "+identifier+" with property="+propertyName+" value="+propertyValue);
+void setConnectorBindingProperty(String deployedName, String propertyName, String propertyValue) {
+ debug("Setting property for Connector Binding: "+deployedName+" with property="+propertyName+" value="+propertyValue);
checkAdmin();
- currentContext().internalAdmin.setProperty(identifier, className, propertyName, propertyValue);
+ currentContext().internalAdmin.setConnectorBindingProperty(deployedName, propertyName, propertyValue);
}
/**
- * Set several properties for an AdminObject. Any existing properties not specified will not be changed.
- *
- * @param identifier
- * The unique identifier for for an {@link AdminObject}.
- * @param className
- * The class name of the sub-interface of {@link AdminObject} you are setting the property for.
- * All of these sub-interfaces are in package <code>org.teiid.adminapi</code>.
- * You may specify either the fully-qualified or unqualified classname.
- * For example "ConnectorBinding" or "org.teiid.adminapi.ConnectorBinding".
- * @param properties
- * Properties to set.
- * @throws AdminException
- * if there's a system error or if there's a user input error.
- * @since 4.3
- */
-void updateProperties(String identifier, String className, Properties properties) {
- debug("Updating properties for adminObject: "+identifier+" with properties: "+properties);
- checkAdmin();
- currentContext().internalAdmin.updateProperties(identifier, className, properties);
-}
-
-
-/**
- * Set system-wide property. This will be written to config_ns.xml
- *
- * @param propertyName
- * Name of the System Property
- * @param propertyValue
- * Value of the System Property
- * @throws AdminException
- * if there's a system error or if there's a user input error.
- * @since 4.3
- */
-void setSystemProperty(String propertyName, String propertyValue) {
- debug("Setting property for system = "+propertyName+" value="+propertyValue);
- checkAdmin();
- currentContext().internalAdmin.setSystemProperty(propertyName, propertyValue);
-}
-
-/**
- * Set several system-wide properties. These will be written to config_ns.xml
- * Any existing properties not specified will not be changed.
- *
- * @param properties
- * Properties to set.
- * @throws AdminException
- * if there's a system error or if there's a user input error.
- * @since 4.3
- */
-void updateSystemProperties(Properties properties) {
- debug("Setting properties for system: "+properties);
- checkAdmin();
- currentContext().internalAdmin.updateSystemProperties(properties);
-}
-
-
-
-/**
* Export Configuration to character Array in XML format
*
* @param fileName
@@ -704,20 +635,6 @@
// *********************************************************************************************
/**
- * Retrieve the single System object.
- *
- * @return The single {@link SystemObject} object, for interacting with system-wide configuration
- * @throws AdminException if there's a system error.
- * @since 4.3
- */
-SystemObject getSystem() {
- checkAdmin();
- result = currentContext().internalAdmin.getSystem();
- debug(result);
- return result;
-}
-
-/**
* Get the Connector Types that correspond to the specified identifer pattern.
*
* @param connectorTypeIdentifier the unique identifier for for a {@link ConnectorType}
@@ -930,27 +847,17 @@
return result;
}
-
/**
* Get all of the available Configuration Properties for the specified AdminObject, and details about them.
- * @param identifier
- * The unique identifier for for an {@link AdminObject}.
- * @param className
- * The class name of the sub-interface of {@link AdminObject} you are setting the property for. These are all the
- * supported class names. {@link SystemObject}, {@link Host}, {@link ProcessObject}, {@link ConnectorBinding},
- * {@link ConnectorType},{@link DQP}, {@link Resource}
- *
- * Note that in Embedded mode only supported classes are {@link ConnectorBinding}, {@link ConnectorType},
- * {@link SystemObject}
- * @return Collection of PropertyDefinition objects.
- * @throws AdminException if there's a system error.
- * @since 4.3
+ * @param connectorTypeIdentifier
+ * @return
+ * @throws AdminException
*/
-Collection getPropertyDefinitions(String identifier, String className) {
- checkAdmin();
- result = currentContext().internalAdmin.getPropertyDefinitions(identifier, className);
+Collection getConnectorTypePropertyDefinitions(String identifier){
+ checkAdmin();
+ result = currentContext().internalAdmin.getConnectorTypePropertyDefinitions(identifier);
debug(result);
- return result;
+ return result;
}
/**
15 years, 4 months