@@ -104,16 +104,19 @@ module Squeal.PostgreSQL.Expression
104 , isUnknown
104 , isUnknown
105 , isNotUnknown
105 , isNotUnknown
106 -- ** Time
106 -- ** Time
107 , currentDate
108 , currentDate
108 , currentTime
109 , currentTime
109 , currentTimestamp
110 , currentTimestamp
110 , localTime
111 , localTime
111 , localTimestamp
112 , localTimestamp
112− , TimeOp (..)
113+ , now
113 , makeDate
114 , makeDate
114 , makeTime
115 , makeTime
115 , makeTimestamp
116 , makeTimestamp
116 , makeTimestamptz
117 , makeTimestamptz
117 -- ** Text
120 -- ** Text
@@ -1121,6 +1124,13 @@ localTime = UnsafeExpression "LOCALTIME"
1121localTimestamp :: Expr (null 'PGtimestamp)
1124localTimestamp :: Expr (null 'PGtimestamp)
1122localTimestamp = UnsafeExpression "LOCALTIMESTAMP"
1125localTimestamp = UnsafeExpression "LOCALTIMESTAMP"
1127+-- | Current date and time (equivalent to `currentTimestamp`)
1131+now :: Expr (null 'PGtimestamptz)
1132+now = UnsafeExpression "now()"
1124{-----------------------------------------
1134{-----------------------------------------
1126-----------------------------------------}
1136-----------------------------------------}
@@ -2530,3 +2540,30 @@ infixl 6 !+
2530infixl 6 +!
2540infixl 6 +!
2531infixl 6 !-
2541infixl 6 !-
2532infixl 6 !-!
2542infixl 6 !-!
2545+ = Years | Months | Weeks | Days
2546+ | Hours | Minutes | Seconds
2547+ | Microseconds | Milliseconds
2548+ | Decades | Centuries | Millennia
2549+ deriving (Eq, Ord, Show, Read, Enum, GHC.Generic)
2550+instance RenderSQL TimeUnit where
2557+ Minutes -> "minutes"
2558+ Seconds -> "seconds"
2559+ Microseconds -> "microseconds"
2560+ Milliseconds -> "milliseconds"
2561+ Decades -> "decades"
2562+ Centuries -> "centuries"
2563+ Millennia -> "millennia"
2565+-- | >>> printSQL $ interval_ 7 Days
2566+-- INTERVAL '7.0 days'
2567+interval_ :: Double -> TimeUnit -> Expr (null 'PGinterval)
2568+interval_ num unit = UnsafeExpression $ "INTERVAL" <+>
2569+ "'" <> fromString (show num) <+> renderSQL unit <> "'"