/* * 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.translator.jdbc.netezza; import static org.junit.Assert.assertEquals; import java.util.Arrays; import org.junit.BeforeClass; import org.junit.Test; import org.teiid.language.Expression; import org.teiid.language.Function; import org.teiid.language.LanguageFactory; import org.teiid.translator.TranslatorException; import org.teiid.translator.TypeFacility; import org.teiid.translator.jdbc.SQLConversionVisitor; import org.teiid.translator.jdbc.TranslationHelper; /** */ @SuppressWarnings("nls") public class TestNetezzaTranslatorDatetimeConversion { private static NetezzaExecutionFactory TRANSLATOR; private static final LanguageFactory LANG_FACTORY = new LanguageFactory(); @BeforeClass public static void oneTimeSetup() throws TranslatorException { TRANSLATOR = new NetezzaExecutionFactory(); TRANSLATOR.setUseBindVariables(false); TRANSLATOR.start(); } /////////////////UTILLITY FUNCTIONS///////// //////////////////////////////////////////// private String getTestBQTVDB() { return TranslationHelper.BQT_VDB; } public void helpTest(Expression srcExpression, String tgtType, String expectedExpression) throws Exception { Function func = LANG_FACTORY.createFunction("convert", Arrays.asList( srcExpression,LANG_FACTORY.createLiteral(tgtType, String.class)),TypeFacility.getDataTypeClass(tgtType)); assertEquals("Error converting from " + srcExpression.getType() + " to " + tgtType, expectedExpression, helpGetString(func)); } public String helpGetString(Expression expr) throws Exception { SQLConversionVisitor sqlVisitor = TRANSLATOR.getSQLConversionVisitor(); sqlVisitor.append(expr); return sqlVisitor.toString(); } ///////////////DATE/TIME CONVERSION TESTCASES/////// //////////////////////////////////////////////////// @Test public void testdayofmonth() throws Exception { String input = "SELECT dayofmonth(datevalue) FROM BQT1.SMALLA"; String output = "SELECT extract(DAY from SmallA.DateValue) FROM SmallA"; TranslationHelper.helpTestVisitor(getTestBQTVDB(), input, output, TRANSLATOR); } ///BEGIN--FROM TIMESTAMP->DATE, TIME, STRING//////// @Test public void testTimestampToDate() throws Exception { String input = "SELECT convert(convert(TIMESTAMPVALUE, date), string) FROM BQT1.SMALLA"; String output = "SELECT cast(cast(SmallA.TimestampValue AS DATE) AS varchar(4000)) FROM SmallA"; TranslationHelper.helpTestVisitor(getTestBQTVDB(), input, output, TRANSLATOR); } @Test public void testTimestampToTime() throws Exception { String input = "SELECT convert(convert(TIMESTAMPVALUE, time), string) FROM BQT1.SMALLA"; String output = "SELECT cast(cast(SmallA.TimestampValue AS TIME) AS varchar(4000)) FROM SmallA"; TranslationHelper.helpTestVisitor(getTestBQTVDB(), input, output, TRANSLATOR); } @Test public void testTimestampToString() throws Exception { String input = "SELECT convert(timestampvalue, string) FROM BQT1.SMALLA"; String output = "SELECT to_char(SmallA.TimestampValue, 'YYYY-MM-DD HH24:MI:SS.MS') FROM SmallA"; TranslationHelper.helpTestVisitor(getTestBQTVDB(), input, output, TRANSLATOR); } ///END--FROM TIMESTAMP->DATE, TIME, STRING//////// ///BEGIN--FROM DATE->TIMESTAMP//////// @Test public void testDateToTimestamp() throws Exception { String input = "SELECT convert(convert(datevalue, timestamp), string) FROM BQT1.SMALLA"; String output = "SELECT to_char(cast(SmallA.DateValue AS TIMESTAMP), 'YYYY-MM-DD HH24:MI:SS.MS') FROM SmallA"; TranslationHelper.helpTestVisitor(getTestBQTVDB(), input, output, TRANSLATOR); } ///END--FROM DATE->TIMESTAMP//////// ///BEGIN--FROM TIME->TIMESTAMP//////// @Test public void testTimeToTimestamp() throws Exception { String input = "SELECT convert(convert(TIMEVALUE, timestamp), string) FROM BQT1.SMALLA"; //String output = "SELECT to_char(cast(SmallA.TimeValue AS timestamp), 'YYYY-MM-DD HH24:MI:SS.FF') FROM SmallA"; String output = "SELECT to_char(SmallA.TimeValue, 'YYYY-MM-DD HH24:MI:SS.MS') FROM SmallA"; TranslationHelper.helpTestVisitor(getTestBQTVDB(), input, output, TRANSLATOR); } ///END--FROM TIME->TIMESTAMP//////// // @Test public void testTimestampToTime() throws Exception { // helpTest(LANG_FACTORY.createLiteral(TimestampUtil.createTimestamp(111, 4, 5, 9, 16, 34, 220000000), Timestamp.class), "TIME", "cast(cast('2011-05-05 09:16:34.22' AS TIMESTAMP(6)) AS TIME)"); // } }