Skip to content

Commit

Permalink
TEIID-4605 adding a datetime2 mapping
Browse files Browse the repository at this point in the history
# Conflicts:
#	connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/sqlserver/TestSqlServerConversionVisitor.java
  • Loading branch information
shawkins committed Dec 5, 2016
1 parent 188f8da commit 442bf94
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 5 deletions.
Expand Up @@ -97,6 +97,7 @@ public void initCapabilities(Connection connection)
throws TranslatorException {
super.initCapabilities(connection);
if (getVersion().compareTo(TEN_0) >= 0) {
//date support
convertModifier.addTypeMapping("date", FunctionModifier.DATE); //$NON-NLS-1$
formatMap.put("yyyy-MM-dd", "DATE"); //$NON-NLS-1$ //$NON-NLS-2$
convertModifier.addConvert(FunctionModifier.TIMESTAMP, FunctionModifier.DATE, new FunctionModifier() {
Expand All @@ -109,6 +110,9 @@ public List<?> translate(Function function) {
return result;
}
});
//timestamp/datetime2
convertModifier.addTypeMapping("datetime2", FunctionModifier.TIMESTAMP); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.PARSETIMESTAMP, new SybaseFormatFunctionModifier("CONVERT(DATETIME2, ", formatMap)); //$NON-NLS-1$
}
}

Expand Down Expand Up @@ -653,4 +657,12 @@ public boolean useSelectLimit() {
return getVersion().compareTo(ELEVEN_0) < 0;
}

@Override
public String translateLiteralTimestamp(Timestamp timestampValue) {
if (getVersion().compareTo(TEN_0) < 0) {
return super.translateLiteralTimestamp(timestampValue);
}
return "{ts '" + formatDateValue(timestampValue) + "'}"; //$NON-NLS-1$ //$NON-NLS-2$
}

}
Expand Up @@ -66,10 +66,13 @@
@Translator(name="sybase", description="A translator for Sybase Database")
public class SybaseExecutionFactory extends BaseSybaseExecutionFactory {

private final class SybaseFormatFunctionModifier extends
public static final class SybaseFormatFunctionModifier extends
ParseFormatFunctionModifier {
private SybaseFormatFunctionModifier(String prefix) {
private Map<String, Object> formatMap;

public SybaseFormatFunctionModifier(String prefix, Map<String, Object> formatMap) {
super(prefix);
this.formatMap = formatMap;
}

@Override
Expand Down Expand Up @@ -238,8 +241,8 @@ public List<?> translate(Function function) {
});
convertModifier.addNumericBooleanConversions();
registerFunctionModifier(SourceSystemFunctions.CONVERT, convertModifier);
registerFunctionModifier(SourceSystemFunctions.PARSETIMESTAMP, new SybaseFormatFunctionModifier("CONVERT(DATETIME, ")); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.FORMATTIMESTAMP, new SybaseFormatFunctionModifier("CONVERT(VARCHAR, ")); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.PARSETIMESTAMP, new SybaseFormatFunctionModifier("CONVERT(DATETIME, ", formatMap)); //$NON-NLS-1$
registerFunctionModifier(SourceSystemFunctions.FORMATTIMESTAMP, new SybaseFormatFunctionModifier("CONVERT(VARCHAR, ", formatMap)); //$NON-NLS-1$
}

private void handleTimeConversions() {
Expand Down
Expand Up @@ -326,7 +326,7 @@ public void testDateFunctions() throws Exception {
trans.initCapabilities(c);

String input = "select cast(smalla.stringkey as date), formatdate(smalla.datevalue, 'yyyy-MM-dd'), parsedate(smalla.stringkey, 'yyyy-MM-dd') from bqt1.smalla where smalla.datevalue = {d'2000-01-01'}"; //$NON-NLS-1$
String output = "SELECT cast(SmallA.StringKey AS date), CONVERT(VARCHAR, convert(DATE, cast(SmallA.DateValue AS datetime))), cast(CONVERT(DATETIME, convert(DATE, SmallA.StringKey)) AS DATE) FROM SmallA WHERE SmallA.DateValue = CAST('2000-01-01' AS DATE)"; //$NON-NLS-1$
String output = "SELECT cast(SmallA.StringKey AS date), CONVERT(VARCHAR, convert(DATE, cast(SmallA.DateValue AS datetime2))), cast(CONVERT(DATETIME2, convert(DATE, SmallA.StringKey)) AS DATE) FROM SmallA WHERE SmallA.DateValue = CAST('2000-01-01' AS DATE)"; //$NON-NLS-1$

helpTestVisitor(getBQTVDB(),
input,
Expand Down Expand Up @@ -389,5 +389,17 @@ public void testOffset2012() throws Exception {

TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, input, output, trans1);
}

@Test
public void testDateTime2() throws Exception {
String input = "insert into bqt1.smalla (timestampvalue) values ('2001-01-01')"; //$NON-NLS-1$
String output = "INSERT INTO SmallA (TimestampValue) VALUES ({ts '2001-01-01 00:00:00.0'})"; //$NON-NLS-1$

SQLServerExecutionFactory trans1 = new SQLServerExecutionFactory();
trans1.setDatabaseVersion(SQLServerExecutionFactory.V_2008);
trans1.start();

TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, input, output, trans1);
}

}

0 comments on commit 442bf94

Please sign in to comment.