From 54cefdc2ee89a4319d6b9e7cb78e57992a916fc5 Mon Sep 17 00:00:00 2001
From: Greyson Fischer <greyson@foosoft.us>
Date: Wed, 8 Apr 2020 01:05:07 -0400
Subject: [PATCH] Added basic `CREATE INDEX` parsing

---
 Language/SQL/SimpleSQL/Parse.lhs  | 10 ++++++++++
 Language/SQL/SimpleSQL/Syntax.lhs |  1 +
 2 files changed, 11 insertions(+)

diff --git a/Language/SQL/SimpleSQL/Parse.lhs b/Language/SQL/SimpleSQL/Parse.lhs
index 82cd780..cb8c5df 100644
--- a/Language/SQL/SimpleSQL/Parse.lhs
+++ b/Language/SQL/SimpleSQL/Parse.lhs
@@ -1460,6 +1460,7 @@ TODO: change style
 > statement = choice
 >     [keyword_ "create" *> choice [createSchema
 >                                  ,createTable
+>                                  ,createIndex
 >                                  ,createView
 >                                  ,createDomain
 >                                  ,createSequence
@@ -1501,6 +1502,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
diff --git a/Language/SQL/SimpleSQL/Syntax.lhs b/Language/SQL/SimpleSQL/Syntax.lhs
index 3dfd440..886734c 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