1
Fork 0

Parse constraints not separated by comma

This commit is contained in:
Matei Adriel 2023-09-21 02:11:16 +03:00
parent d8b32c0931
commit 51157d502e
No known key found for this signature in database
3 changed files with 34 additions and 6 deletions

View file

@ -1509,12 +1509,17 @@ TODO: change style
> CreateSchema <$> names > CreateSchema <$> names
> createTable :: Parser Statement > createTable :: Parser Statement
> createTable = keyword_ "table" >> > createTable = do
> let
> parseColumnDef = TableColumnDef <$> columnDef
> parseConstraintDef = uncurry TableConstraintDef <$> tableConstraintDef
> constraints = sepBy parseConstraintDef (optional comma)
> entries = ((:) <$> parseColumnDef <*> ((comma >> entries) <|> pure [])) <|> constraints
>
> keyword_ "table" >>
> CreateTable > CreateTable
> <$> names > <$> names
> -- todo: is this order mandatory or is it a perm? > <*> parens entries
> <*> parens (commaSep1 (uncurry TableConstraintDef <$> tableConstraintDef
> <|> TableColumnDef <$> columnDef))
> createIndex :: Parser Statement > createIndex :: Parser Statement
> createIndex = > createIndex =

View file

@ -6,6 +6,7 @@ stdenv.mkDerivation rec {
ghc ghc
cabal-install cabal-install
glibcLocales glibcLocales
gnumake
]; ];
shellHook = "export LANG=en_GB.UTF-8"; shellHook = "export LANG=en_GB.UTF-8";
} }

View file

@ -651,6 +651,28 @@ defintely skip
> DefaultReferentialAction DefaultReferentialAction > DefaultReferentialAction DefaultReferentialAction
> ]) > ])
> ,(TestStatement ansi2011
> "create table t (a int, b int,\n\
> \ foreign key (a) references u(c)\n\
> \ foreign key (b) references v(d));"
> $ CreateTable [Name Nothing "t"]
> [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) Nothing []
> ,TableColumnDef $ ColumnDef (Name Nothing "b") (TypeName [Name Nothing "int"]) Nothing []
> ,TableConstraintDef Nothing $
> TableReferencesConstraint
> [Name Nothing "a"]
> [Name Nothing "u"]
> (Just [Name Nothing "c"])
> DefaultReferenceMatch
> DefaultReferentialAction DefaultReferentialAction
> ,TableConstraintDef Nothing $
> TableReferencesConstraint
> [Name Nothing "b"]
> [Name Nothing "v"]
> (Just [Name Nothing "d"])
> DefaultReferenceMatch
> DefaultReferentialAction DefaultReferentialAction
> ])
<references specification> ::= <references specification> ::=