diff --git a/Language/SQL/SimpleSQL/Parse.lhs b/Language/SQL/SimpleSQL/Parse.lhs index e65b8ff..7e152d0 100644 --- a/Language/SQL/SimpleSQL/Parse.lhs +++ b/Language/SQL/SimpleSQL/Parse.lhs @@ -1460,6 +1460,7 @@ TODO: change style > statementWithoutSemicolon = choice > [keyword_ "create" *> choice [createSchema > ,createTable +> ,createIndex > ,createView > ,createDomain > ,createSequence @@ -1504,6 +1505,15 @@ TODO: change style > <*> parens (commaSep1 (uncurry TableConstraintDef <$> tableConstraintDef > <|> TableColumnDef <$> columnDef)) +> createIndex :: Parser Statement +> createIndex = +> CreateIndex +> <$> ((keyword_ "index" >> pure False) <|> +> (keywords_ ["unique", "index"] >> pure True)) +> <*> names +> <*> (keyword_ "on" >> name) +> <*> parens (commaSep1 name) + > columnDef :: Parser ColumnDef > columnDef = ColumnDef <$> name <*> typeName > <*> optionMaybe defaultClause @@ -1567,8 +1577,9 @@ TODO: change style > colConstraintDef = > ColConstraintDef > <$> (optionMaybe (keyword_ "constraint" *> names)) -> <*> (notNull <|> unique <|> primaryKey <|> check <|> references) +> <*> (nullable <|> notNull <|> unique <|> primaryKey <|> check <|> references) > where +> nullable = ColNullableConstraint <$ keyword "null" > notNull = ColNotNullConstraint <$ keywords_ ["not", "null"] > unique = ColUniqueConstraint <$ keyword_ "unique" > primaryKey = ColPrimaryKeyConstraint <$ keywords_ ["primary", "key"] diff --git a/Language/SQL/SimpleSQL/Syntax.lhs b/Language/SQL/SimpleSQL/Syntax.lhs index 2253dcd..7d1c0be 100644 --- a/Language/SQL/SimpleSQL/Syntax.lhs +++ b/Language/SQL/SimpleSQL/Syntax.lhs @@ -454,6 +454,7 @@ I'm not sure if this is valid syntax or not. > | CreateTable [Name] [TableElement] > | AlterTable [Name] AlterTableAction > | DropTable [Name] DropBehaviour +> | CreateIndex Bool [Name] Name [Name] > | CreateView Bool [Name] (Maybe [Name]) > QueryExpr (Maybe CheckOption) > | DropView [Name] DropBehaviour @@ -572,7 +573,8 @@ I'm not sure if this is valid syntax or not. > deriving (Eq,Show,Read,Data,Typeable) > data ColConstraint = -> ColNotNullConstraint +> ColNullableConstraint +> | ColNotNullConstraint > | ColUniqueConstraint > | ColPrimaryKeyConstraint > | ColReferencesConstraint [Name] (Maybe Name)