1
Fork 0

implement extract

This commit is contained in:
Jake Wheat 2013-12-13 22:38:43 +02:00
parent a001d120c1
commit 5e56a4b560
3 changed files with 14 additions and 2 deletions

View file

@ -172,6 +172,13 @@ to be.
> prefixCast = try (CastOp <$> typeName
> <*> stringLiteral)
> extract :: P ScalarExpr
> extract = try (keyword_ "extract") >>
> parens (makeOp <$> identifierString
> <*> (keyword_ "from"
> *> scalarExpr'))
> where makeOp n e = SpecialOp "extract" [Iden n, e]
> inSuffix :: ScalarExpr -> P ScalarExpr
> inSuffix e =
> In
@ -289,7 +296,7 @@ postgresql handles this
> factor = choice [literal
> ,scase
> ,cast
> --,extract
> ,extract
> ,subquery
> ,prefixUnaryOp
> ,try app

View file

@ -35,6 +35,11 @@ back into SQL source text. It attempts to format the output nicely.
> ,text nm <+> scalarExpr b
> ,text "and" <+> scalarExpr c]
> scalarExpr (SpecialOp "extract" [a,n]) =
> text "extract" <> parens (scalarExpr a
> <+> text "from"
> <+> scalarExpr n)
> scalarExpr (SpecialOp nm es) =
> text nm <+> parens (commaSep $ map scalarExpr es)

View file

@ -168,7 +168,7 @@
> ,("a is similar to b", BinOp "is similar to" (Iden "a") (Iden "b"))
> ,("a is not similar to b", BinOp "is not similar to" (Iden "a") (Iden "b"))
> ,("a overlaps b", BinOp "overlaps" (Iden "a") (Iden "b"))
> --,("extract(day from t)", SpecialOp "extract" [Iden "day", Iden "t"])
> ,("extract(day from t)", SpecialOp "extract" [Iden "day", Iden "t"])
> ]
> aggregates :: TestItem