1
Fork 0

add support for '' in string literals

This commit is contained in:
Jake Wheat 2013-12-17 15:09:28 +02:00
parent 72b67166d9
commit 8adc169b38
5 changed files with 18 additions and 3 deletions

View file

@ -724,7 +724,13 @@ String literals: limited at the moment, no escaping \' or other
variations.
> stringLiteral :: P String
> stringLiteral = char '\'' *> manyTill anyChar (symbol_ "'")
> stringLiteral = (char '\'' *> manyTill anyChar (char '\'')
> >>= optionSuffix moreString) <* whiteSpace
> where
> moreString s0 = try $ do
> void $ char '\''
> s <- manyTill anyChar (char '\'')
> optionSuffix moreString (s0 ++ "'" ++ s)
number literals

View file

@ -28,7 +28,11 @@
= scalar expressions
> scalarExpr :: ScalarExpr -> Doc
> scalarExpr (StringLit s) = quotes $ text s
> scalarExpr (StringLit s) = quotes $ text $ doubleUpQuotes s
> where doubleUpQuotes [] = []
> doubleUpQuotes ('\'':cs) = '\'':'\'':doubleUpQuotes cs
> doubleUpQuotes (c:cs) = c:doubleUpQuotes cs
> scalarExpr (NumLit s) = text s
> scalarExpr (IntervalLit v u p) =
> text "interval" <+> quotes (text v)

4
TODO
View file

@ -12,6 +12,10 @@ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY
in the postgresql docs, the start and count must be in parens unless
they are a single integer
select * from generate_series(0,99) offset 5 fetch next 5 row only;
select * from generate_series(0,99) offset 5;
select * from generate_series(0,99) fetch next 5 row only;
+ sql server top syntax
more dots: implement as dot operator

View file

@ -1,5 +1,5 @@
name: simple-sql-parser
version: 0.2.0.0
version: 0.2.0
synopsis: A parser for SQL queries
description: A parser for SQL queries. Please see the homepage for more information <http://jakewheat.github.io/simple_sql_parser/>.

View file

@ -34,6 +34,7 @@ Tests for parsing scalar expressions
> ,("3e+3", NumLit "3e+3")
> ,("3e-3", NumLit "3e-3")
> ,("'string'", StringLit "string")
> ,("'string with a '' quote'", StringLit "string with a ' quote")
> ,("'1'", StringLit "1")
> ,("interval '3' day", IntervalLit "3" "day" Nothing)
> ,("interval '3' day (3)", IntervalLit "3" "day" $ Just 3)