From b6b50b85cc379c0a2791067940c520666a5d67c9 Mon Sep 17 00:00:00 2001 From: Sean Chalmers Date: Mon, 25 Oct 2021 12:19:07 +0100 Subject: [PATCH] Add 'week' to date extraction --- beam-core/Database/Beam/Backend/SQL/AST.hs | 2 ++ beam-core/Database/Beam/Backend/SQL/Builder.hs | 1 + beam-core/Database/Beam/Backend/SQL/SQL92.hs | 1 + beam-core/Database/Beam/Query/Extract.hs | 5 +++-- beam-migrate/Database/Beam/Haskell/Syntax.hs | 1 + beam-postgres/Database/Beam/Postgres/Syntax.hs | 1 + beam-sqlite/Database/Beam/Sqlite/Syntax.hs | 1 + 7 files changed, 10 insertions(+), 2 deletions(-) diff --git a/beam-core/Database/Beam/Backend/SQL/AST.hs b/beam-core/Database/Beam/Backend/SQL/AST.hs index 4d3b08a4a..f42cdf189 100644 --- a/beam-core/Database/Beam/Backend/SQL/AST.hs +++ b/beam-core/Database/Beam/Backend/SQL/AST.hs @@ -156,6 +156,7 @@ data ExtractField | ExtractFieldDateTimeYear | ExtractFieldDateTimeMonth + | ExtractFieldDateTimeWeek | ExtractFieldDateTimeDay | ExtractFieldDateTimeHour | ExtractFieldDateTimeMinute @@ -290,6 +291,7 @@ instance IsSql92ExtractFieldSyntax ExtractField where minutesField = ExtractFieldDateTimeMinute hourField = ExtractFieldDateTimeHour dayField = ExtractFieldDateTimeDay + weekField = ExtractFieldDateTimeWeek monthField = ExtractFieldDateTimeMonth yearField = ExtractFieldDateTimeYear diff --git a/beam-core/Database/Beam/Backend/SQL/Builder.hs b/beam-core/Database/Beam/Backend/SQL/Builder.hs index 0ffc4ccd5..53e970389 100644 --- a/beam-core/Database/Beam/Backend/SQL/Builder.hs +++ b/beam-core/Database/Beam/Backend/SQL/Builder.hs @@ -191,6 +191,7 @@ instance IsSql92ExtractFieldSyntax SqlSyntaxBuilder where minutesField = SqlSyntaxBuilder (byteString "MINUTE") hourField = SqlSyntaxBuilder (byteString "HOUR") dayField = SqlSyntaxBuilder (byteString "DAY") + weekField = SqlSyntaxBuilder (byteString "WEEK") monthField = SqlSyntaxBuilder (byteString "MONTH") yearField = SqlSyntaxBuilder (byteString "YEAR") diff --git a/beam-core/Database/Beam/Backend/SQL/SQL92.hs b/beam-core/Database/Beam/Backend/SQL/SQL92.hs index 2e16d834d..76cd35c7f 100644 --- a/beam-core/Database/Beam/Backend/SQL/SQL92.hs +++ b/beam-core/Database/Beam/Backend/SQL/SQL92.hs @@ -206,6 +206,7 @@ class IsSql92ExtractFieldSyntax extractField where minutesField :: extractField hourField :: extractField dayField :: extractField + weekField :: extractField monthField :: extractField yearField :: extractField diff --git a/beam-core/Database/Beam/Query/Extract.hs b/beam-core/Database/Beam/Query/Extract.hs index 073d56564..fdfbd77bf 100644 --- a/beam-core/Database/Beam/Query/Extract.hs +++ b/beam-core/Database/Beam/Query/Extract.hs @@ -7,7 +7,7 @@ module Database.Beam.Query.Extract -- ** SQL92 fields hour_, minutes_, seconds_, - year_, month_, day_, + year_, month_, week_, day_, HasSqlTime, HasSqlDate ) where @@ -53,9 +53,10 @@ instance HasSqlDate LocalTime instance HasSqlDate UTCTime instance HasSqlDate Day -year_, month_, day_ +year_, month_, week_, day_ :: ( BeamSqlBackend be, HasSqlDate tgt ) => ExtractField be tgt Double year_ = ExtractField yearField month_ = ExtractField monthField day_ = ExtractField dayField +week_ = ExtractField weekField diff --git a/beam-migrate/Database/Beam/Haskell/Syntax.hs b/beam-migrate/Database/Beam/Haskell/Syntax.hs index 701e7d033..ed32bbdf3 100644 --- a/beam-migrate/Database/Beam/Haskell/Syntax.hs +++ b/beam-migrate/Database/Beam/Haskell/Syntax.hs @@ -627,6 +627,7 @@ instance IsSql92ExtractFieldSyntax HsExpr where hourField = hsVar "hourField" yearField = hsVar "yearField" monthField = hsVar "monthField" + weekField = hsVar "weekField" dayField = hsVar "dayField" instance IsSql92ExpressionSyntax HsExpr where diff --git a/beam-postgres/Database/Beam/Postgres/Syntax.hs b/beam-postgres/Database/Beam/Postgres/Syntax.hs index f61406d1a..521d5d2f6 100644 --- a/beam-postgres/Database/Beam/Postgres/Syntax.hs +++ b/beam-postgres/Database/Beam/Postgres/Syntax.hs @@ -696,6 +696,7 @@ instance IsSql92ExtractFieldSyntax PgExtractFieldSyntax where minutesField = PgExtractFieldSyntax (emit "MINUTE") hourField = PgExtractFieldSyntax (emit "HOUR") dayField = PgExtractFieldSyntax (emit "DAY") + weekField = PgExtractFieldSyntax (emit "WEEK") monthField = PgExtractFieldSyntax (emit "MONTH") yearField = PgExtractFieldSyntax (emit "YEAR") diff --git a/beam-sqlite/Database/Beam/Sqlite/Syntax.hs b/beam-sqlite/Database/Beam/Sqlite/Syntax.hs index 80500443d..c31cbc626 100644 --- a/beam-sqlite/Database/Beam/Sqlite/Syntax.hs +++ b/beam-sqlite/Database/Beam/Sqlite/Syntax.hs @@ -931,6 +931,7 @@ sqliteExtract field from = ExtractFieldDateTimeYear -> extractStrftime "%Y" ExtractFieldDateTimeMonth -> extractStrftime "%m" ExtractFieldDateTimeDay -> extractStrftime "%d" + ExtractFieldDateTimeWeek -> extractStrftime "%W" ExtractFieldDateTimeHour -> extractStrftime "%H" ExtractFieldDateTimeMinute -> extractStrftime "%M" ExtractFieldDateTimeSecond -> extractStrftime "%S"