[teiid-commits] teiid SVN: r4287 - in trunk/connectors/translator-jdbc/src: test/java/org/teiid/translator/jdbc/mysql and 1 other directory.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Wed Aug 1 16:03:43 EDT 2012


Author: shawkins
Date: 2012-08-01 16:03:42 -0400 (Wed, 01 Aug 2012)
New Revision: 4287

Modified:
   trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java
   trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/mysql/TestMySQL5Translator.java
Log:
TEIID-2128 fix for frac_second handling in mysql

Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java	2012-08-01 17:58:07 UTC (rev 4286)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/mysql/MySQL5ExecutionFactory.java	2012-08-01 20:03:42 UTC (rev 4287)
@@ -30,7 +30,10 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.teiid.language.Expression;
 import org.teiid.language.Function;
+import org.teiid.language.Literal;
+import org.teiid.language.SQLConstants.NonReserved;
 import org.teiid.translator.SourceSystemFunctions;
 import org.teiid.translator.Translator;
 import org.teiid.translator.TranslatorException;
@@ -50,6 +53,34 @@
 				return Arrays.asList("char(", function.getParameters().get(0), " USING ASCII)"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 		});
+		registerFunctionModifier(SourceSystemFunctions.TIMESTAMPADD, new FunctionModifier() {
+			
+			@Override
+			public List<?> translate(Function function) {
+				Literal intervalType = (Literal)function.getParameters().get(0);
+				String interval = ((String)intervalType.getValue()).toUpperCase();
+				if (interval.equals(NonReserved.SQL_TSI_FRAC_SECOND)) {
+					intervalType.setValue("MICROSECOND"); //$NON-NLS-1$
+					Expression[] args = new Expression[] {function.getParameters().get(1), getLanguageFactory().createLiteral(1000, TypeFacility.RUNTIME_TYPES.INTEGER)};
+					function.getParameters().set(1, getLanguageFactory().createFunction("/", args, TypeFacility.RUNTIME_TYPES.INTEGER)); //$NON-NLS-1$
+				}
+				return null;
+			}
+		}); 
+		
+		registerFunctionModifier(SourceSystemFunctions.TIMESTAMPDIFF, new FunctionModifier() {
+			
+			@Override
+			public List<?> translate(Function function) {
+				Literal intervalType = (Literal)function.getParameters().get(0);
+				String interval = ((String)intervalType.getValue()).toUpperCase();
+				if (interval.equals(NonReserved.SQL_TSI_FRAC_SECOND)) {
+					intervalType.setValue("MICROSECOND"); //$NON-NLS-1$
+					return Arrays.asList(function, " * 1000"); //$NON-NLS-1$
+				}
+				return null;
+			}
+		}); 
 	}
 	
 	@Override

Modified: trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/mysql/TestMySQL5Translator.java
===================================================================
--- trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/mysql/TestMySQL5Translator.java	2012-08-01 17:58:07 UTC (rev 4286)
+++ trunk/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/mysql/TestMySQL5Translator.java	2012-08-01 20:03:42 UTC (rev 4287)
@@ -47,4 +47,15 @@
             output, TRANSLATOR);
     }
     
+
+    @Test public void testTimestampFunctions() throws Exception {
+    	String input = "SELECT timestampdiff(SQL_TSI_FRAC_SECOND, timestampvalue, {d '1970-01-01'}), timestampdiff(SQL_TSI_HOUR, timestampvalue, {d '1970-01-01'}), timestampadd(SQL_TSI_FRAC_SECOND, 2000, MediumA.TimestampValue) FROM BQT1.MediumA"; //$NON-NLS-1$
+        String output = "SELECT timestampdiff(MICROSECOND, MediumA.TimestampValue, {ts '1970-01-01 00:00:00.0'}) * 1000, timestampdiff(SQL_TSI_HOUR, MediumA.TimestampValue, {ts '1970-01-01 00:00:00.0'}), timestampadd(MICROSECOND, (2000 / 1000), MediumA.TimestampValue) FROM MediumA"; //$NON-NLS-1$
+          
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB,
+            input, 
+            output, TRANSLATOR);
+    }
+    
+    
 }



More information about the teiid-commits mailing list