From f094e643a67ab671d1b6c9e02f3718f516abb221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 15 Feb 2015 23:02:27 +0200 Subject: [PATCH] Add mappings --- .../main/java/com/querydsl/sql/CUBRIDTemplates.java | 8 ++++++++ .../main/java/com/querydsl/sql/DerbyTemplates.java | 9 +++++++++ .../src/main/java/com/querydsl/sql/H2Templates.java | 8 ++++++++ .../main/java/com/querydsl/sql/HSQLDBTemplates.java | 8 ++++++++ .../main/java/com/querydsl/sql/MySQLTemplates.java | 8 ++++++++ .../java/com/querydsl/sql/SQLServerTemplates.java | 9 +++++++++ .../main/java/com/querydsl/sql/TeradataTemplates.java | 2 +- .../src/test/java/com/querydsl/sql/SelectBase.java | 11 +++++++++-- 8 files changed, 60 insertions(+), 3 deletions(-) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/CUBRIDTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/CUBRIDTemplates.java index 2918d2262..39085fac0 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/CUBRIDTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/CUBRIDTemplates.java @@ -74,6 +74,14 @@ public class CUBRIDTemplates extends SQLTemplates { add(Ops.DateTimeOps.ADD_MINUTES, "date_add({0}, interval {1s} minute)"); add(Ops.DateTimeOps.ADD_SECONDS, "date_add({0}, interval {1s} second)"); + add(Ops.DateTimeOps.TRUNC_YEAR, "trunc({0},'yyyy')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "trunc({0},'mm')"); + add(Ops.DateTimeOps.TRUNC_WEEK, "trunc({0},'day')"); + add(Ops.DateTimeOps.TRUNC_DAY, "trunc({0},'dd')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "timestamp(date({0}),concat(hour({0}),':00:00'))"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "timestamp(date({0}),concat(hour({0}),':',minute({0}),':00'))"); + add(Ops.DateTimeOps.TRUNC_SECOND, "timestamp(date({0}),concat(hour({0}),':',minute({0}),':',second({0})))"); + add(Ops.MathOps.LN, "ln({0})"); add(Ops.MathOps.LOG, "(ln({0}) / ln({1}))"); add(Ops.MathOps.COSH, "(exp({0}) + exp({0} * -1)) / 2"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java index 9c531b027..032a93e71 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java @@ -105,6 +105,15 @@ public class DerbyTemplates extends SQLTemplates { add(Ops.DateTimeOps.DIFF_MINUTES, "{fn timestampdiff(SQL_TSI_MINUTE, {0}, {1})}"); add(Ops.DateTimeOps.DIFF_SECONDS, "{fn timestampdiff(SQL_TSI_SECOND, {0}, {1})}"); + // yyyy-MM-dd hh:mm:ss + add(Ops.DateTimeOps.TRUNC_YEAR, "timestamp(substr(cast({0} as char(30)),1,4)||'-01-01 00:00:00')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "timestamp(substr(cast({0} as char(30)),1,7)||'-01 00:00:00')"); + // TODO weeks + add(Ops.DateTimeOps.TRUNC_DAY, "timestamp(substr(cast({0} as char(30)),1,10)||' 00:00:00')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "timestamp(substr(cast({0} as char(30)),1,13)||':00:00')"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "timestamp(substr(cast({0} as char(30)),1,16)||':00')"); + add(Ops.DateTimeOps.TRUNC_SECOND, "timestamp(substr(cast({0} as char(30)),1,19))"); + // left via substr add(Ops.StringOps.LEFT, "substr({0},1,{1})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/H2Templates.java b/querydsl-sql/src/main/java/com/querydsl/sql/H2Templates.java index 120edce86..6903ffb0b 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/H2Templates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/H2Templates.java @@ -67,6 +67,14 @@ public class H2Templates extends SQLTemplates { addTypeNameToCode("uuid", Types.BINARY); addTypeNameToCode("serial", Types.INTEGER); addTypeNameToCode("varchar_ignorecase", Types.VARCHAR); + + add(Ops.DateTimeOps.TRUNC_YEAR, "parsedatetime(formatdatetime({0},'yyyy'),'yyyy')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "parsedatetime(formatdatetime({0},'yyyy-MM'),'yyyy-MM')"); + add(Ops.DateTimeOps.TRUNC_WEEK, "parsedatetime(formatdatetime({0},'YYYY-ww'),'YYYY-ww')"); + add(Ops.DateTimeOps.TRUNC_DAY, "parsedatetime(formatdatetime({0},'yyyy-MM-dd'),'yyyy-MM-dd')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "parsedatetime(formatdatetime({0},'yyyy-MM-dd HH'),'yyyy-MM-dd HH')"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "parsedatetime(formatdatetime({0},'yyyy-MM-dd HH:mm'),'yyyy-MM-dd HH:mm')"); + add(Ops.DateTimeOps.TRUNC_SECOND, "parsedatetime(formatdatetime({0},'yyyy-MM-dd HH:mm:ss'),'yyyy-MM-dd HH:mm:ss')"); } } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java index 147ee910f..eefe4d14d 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java @@ -83,6 +83,14 @@ public class HSQLDBTemplates extends SQLTemplates { add(Ops.DateTimeOps.DIFF_MINUTES, "datediff('mi', {0}, {1})"); add(Ops.DateTimeOps.DIFF_SECONDS, "datediff('ss', {0}, {1})"); + add(Ops.DateTimeOps.TRUNC_YEAR, "trunc({0},'YY')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "trunc({0},'MM')"); + add(Ops.DateTimeOps.TRUNC_WEEK, "trunc({0},'WW')"); + add(Ops.DateTimeOps.TRUNC_DAY, "trunc({0},'DD')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "trunc({0},'HH')"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "trunc({0},'MI')"); + add(Ops.DateTimeOps.TRUNC_SECOND, "trunc({0},'SS')"); + add(Ops.DateTimeOps.DATE, "convert({0}, date)"); addTypeNameToCode("character", Types.CHAR, true); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java index a34c5cbdd..be4e32126 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java @@ -149,6 +149,14 @@ public class MySQLTemplates extends SQLTemplates { add(Ops.DateTimeOps.DIFF_MINUTES, "timestampdiff(minute,{0},{1})"); add(Ops.DateTimeOps.DIFF_SECONDS, "timestampdiff(second,{0},{1})"); + add(Ops.DateTimeOps.TRUNC_YEAR, "str_to_date(concat(date_format({0},'%Y'),'-1-1'),'%Y-%m-%d')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "str_to_date(concat(date_format({0},'%Y-%m'),'-1'),'%Y-%m-%d')"); + add(Ops.DateTimeOps.TRUNC_WEEK, "str_to_date(concat(date_format({0},'%Y-%u'),'-2'),'%Y-%u-%w')"); + add(Ops.DateTimeOps.TRUNC_DAY, "str_to_date(date_format({0},'%Y-%m-%d'),'%Y-%m-%d')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "str_to_date(date_format({0},'%Y-%m-%d %k'),'%Y-%m-%d %k')"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "str_to_date(date_format({0},'%Y-%m-%d %k:%i'),'%Y-%m-%d %k:%i')"); + add(Ops.DateTimeOps.TRUNC_SECOND, "str_to_date(date_format({0},'%Y-%m-%d %k:%i:%s'),'%Y-%m-%d %k:%i:%s')"); + addTypeNameToCode("bool", Types.BIT, true); addTypeNameToCode("tinyint unsigned", Types.TINYINT); addTypeNameToCode("bigint unsigned", Types.BIGINT); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java index 6a8d0f785..ac64e8ddb 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java @@ -123,9 +123,18 @@ public class SQLServerTemplates extends SQLTemplates { add(Ops.DateTimeOps.DIFF_MINUTES, "datediff(minute,{0},{1})"); add(Ops.DateTimeOps.DIFF_SECONDS, "datediff(second,{0},{1})"); + add(Ops.DateTimeOps.TRUNC_YEAR, "CONVERT(DATETIME, CONVERT(VARCHAR(4), {0}, 120) + '-01-01')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "CONVERT(DATETIME, CONVERT(VARCHAR(7), {0}, 120) + '-01')"); + // TODO week + add(Ops.DateTimeOps.TRUNC_DAY, "CONVERT(DATETIME, CONVERT(VARCHAR(10), {0}, 120))"); + add(Ops.DateTimeOps.TRUNC_HOUR, "CONVERT(DATETIME, CONVERT(VARCHAR(13), {0}, 120) + ':00:00')"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "CONVERT(DATETIME, CONVERT(VARCHAR(16), {0}, 120) + ':00')"); + add(Ops.DateTimeOps.TRUNC_SECOND, "CONVERT(DATETIME, CONVERT(VARCHAR(19), {0}, 120))"); + add(Ops.DateTimeOps.DATE, "cast({0} as date)"); add(Ops.DateTimeOps.CURRENT_DATE, "cast(getdate() as date)"); + addTypeNameToCode("bit", Types.BOOLEAN, true); addTypeNameToCode("decimal", Types.DOUBLE, true); addTypeNameToCode("tinyint identity", Types.TINYINT); addTypeNameToCode("bigint identity", Types.BIGINT); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java index 33bb31a6e..6234855cc 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java @@ -103,7 +103,7 @@ public class TeradataTemplates extends SQLTemplates { add(Ops.DateTimeOps.TRUNC_MONTH, "trunc({0}, 'month')"); add(Ops.DateTimeOps.TRUNC_WEEK, "trunc({0}, 'w')"); add(Ops.DateTimeOps.TRUNC_DAY, "trunc({0}, 'dd')"); - add(Ops.DateTimeOps.TRUNC_HOUR, "trunc({0}, 'hh')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "trunc({0}, 'hh24')"); add(Ops.DateTimeOps.TRUNC_MINUTE, "trunc({0}, 'mi')"); add(Ops.DateTimeOps.TRUNC_SECOND, "{0}"); // not truncated } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java index aa200d49f..41835c9e7 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java @@ -482,7 +482,7 @@ public class SelectBase extends AbstractBaseTest { } @Test - @ExcludeIn({CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MYSQL, SQLITE, SQLSERVER, TERADATA}) // FIXME + @ExcludeIn({DERBY, FIREBIRD, SQLITE, SQLSERVER}) // FIXME public void Date_Trunc() { DateTimeExpression expr = DateTimeExpression.currentTimestamp(); @@ -501,7 +501,7 @@ public class SelectBase extends AbstractBaseTest { } @Test - @IncludeIn({DB2, ORACLE, POSTGRES, TERADATA}) + @ExcludeIn({FIREBIRD, SQLITE}) // FIXME public void Date_Trunc2() { DateTimeExpression expr = DateTimeExpression.currentTimestamp(DateTime.class); @@ -521,6 +521,13 @@ public class SelectBase extends AbstractBaseTest { DateTime toMinute = tuple.get(SQLExpressions.datetrunc(DatePart.minute, expr)); DateTime toSecond = tuple.get(SQLExpressions.datetrunc(DatePart.second, expr)); + assertEquals(date.getZone(), toYear.getZone()); + assertEquals(date.getZone(), toMonth.getZone()); + assertEquals(date.getZone(), toDay.getZone()); + assertEquals(date.getZone(), toHour.getZone()); + assertEquals(date.getZone(), toMinute.getZone()); + assertEquals(date.getZone(), toSecond.getZone()); + // year assertEquals(date.getYear(), toYear.getYear()); assertEquals(date.getYear(), toMonth.getYear());