diff --git a/Language/SQL/SimpleSQL/Dialect.hs b/Language/SQL/SimpleSQL/Dialect.hs index 4ac2cbe..ce0e3d2 100644 --- a/Language/SQL/SimpleSQL/Dialect.hs +++ b/Language/SQL/SimpleSQL/Dialect.hs @@ -100,6 +100,8 @@ data Dialect = Dialect ,diWithoutRowidTables :: Bool -- | allow omitting types for columns ,diOptionalColumnTypes :: Bool + -- | allow mixing in DEFAULT clauses with other constraints + ,diDefaultClausesAsConstraints :: Bool } deriving (Eq,Show,Read,Data,Typeable) @@ -126,6 +128,7 @@ ansi2011 = Dialect {diKeywords = ansi2011ReservedKeywords ,diNonCommaSeparatedConstraints = False ,diWithoutRowidTables = False ,diOptionalColumnTypes = False + ,diDefaultClausesAsConstraints = False } -- | mysql dialect diff --git a/Language/SQL/SimpleSQL/Parse.hs b/Language/SQL/SimpleSQL/Parse.hs index a0e767c..6b23972 100644 --- a/Language/SQL/SimpleSQL/Parse.hs +++ b/Language/SQL/SimpleSQL/Parse.hs @@ -1741,22 +1741,7 @@ columnDef = do optionalType <- askDialect diOptionalColumnTypes ColumnDef <$> name "column name" <*> (if optionalType then optional typeName else Just <$> typeName) - <*> optional defaultClause <*> option [] (some colConstraintDef) - where - defaultClause = label "column default clause" $ choice [ - keyword_ "default" >> - DefaultClause <$> scalarExpr - -- todo: left factor - ,try (keywords_ ["generated","always","as"] >> - GenerationClause <$> parens scalarExpr) - ,keyword_ "generated" >> - IdentityColumnSpec - <$> (GeneratedAlways <$ keyword_ "always" - <|> GeneratedByDefault <$ keywords_ ["by", "default"]) - <*> (keywords_ ["as", "identity"] *> - option [] (parens sequenceGeneratorOptions)) - ] tableConstraintDef :: Parser (Maybe [Name], TableConstraint) tableConstraintDef = @@ -1805,7 +1790,14 @@ colConstraintDef :: Parser ColConstraintDef colConstraintDef = ColConstraintDef <$> optional (keyword_ "constraint" *> names "constraint name") - <*> (nullable <|> notNull <|> unique <|> primaryKey <|> check <|> references) + <*> (nullable + <|> notNull + <|> unique + <|> primaryKey + <|> check + <|> references + <|> defaultClause + ) where nullable = ColNullableConstraint <$ keyword "null" notNull = ColNotNullConstraint <$ keywords_ ["not", "null"] @@ -1824,6 +1816,20 @@ colConstraintDef = <*> optional (parens $ name "column name") <*> refMatch <*> refActions + defaultClause = label "column default clause" $ + ColDefaultClause <$> choice + [keyword_ "default" + >> DefaultClause <$> scalarExpr + -- todo: left factor + ,try (keywords_ ["generated","always","as"] >> + GenerationClause <$> parens scalarExpr) + ,keyword_ "generated" >> + IdentityColumnSpec + <$> (GeneratedAlways <$ keyword_ "always" + <|> GeneratedByDefault <$ keywords_ ["by", "default"]) + <*> (keywords_ ["as", "identity"] *> + option [] (parens sequenceGeneratorOptions)) + ] -- slightly hacky parser for signed integers diff --git a/Language/SQL/SimpleSQL/Pretty.hs b/Language/SQL/SimpleSQL/Pretty.hs index ffb40a7..3d44bd5 100644 --- a/Language/SQL/SimpleSQL/Pretty.hs +++ b/Language/SQL/SimpleSQL/Pretty.hs @@ -697,25 +697,9 @@ dropBehav DefaultDropBehaviour = mempty dropBehav Cascade = pretty "cascade" dropBehav Restrict = pretty "restrict" - columnDef :: Dialect -> ColumnDef -> Doc a -columnDef d (ColumnDef n t mdef cons) = +columnDef d (ColumnDef n t cons) = name n <+> maybe mempty typeName t - <+> case mdef of - Nothing -> mempty - Just (DefaultClause def) -> - pretty "default" <+> scalarExpr d def - Just (GenerationClause e) -> - texts ["generated","always","as"] <+> parens (scalarExpr d e) - Just (IdentityColumnSpec w o) -> - pretty "generated" - <+> (case w of - GeneratedAlways -> pretty "always" - GeneratedByDefault -> pretty "by" <+> pretty "default") - <+> pretty "as" <+> pretty "identity" - <+> (case o of - [] -> mempty - os -> parens (sep $ map sequenceGeneratorOption os)) <+> sep (map cdef cons) where cdef (ColConstraintDef cnm con) = @@ -735,6 +719,20 @@ columnDef d (ColumnDef n t mdef cons) = <+> refMatch m <+> refAct "update" u <+> refAct "delete" del + pcon (ColDefaultClause clause) = case clause of + DefaultClause def -> + pretty "default" <+> scalarExpr d def + GenerationClause e -> + texts ["generated","always","as"] <+> parens (scalarExpr d e) + IdentityColumnSpec w o -> + pretty "generated" + <+> (case w of + GeneratedAlways -> pretty "always" + GeneratedByDefault -> pretty "by" <+> pretty "default") + <+> pretty "as" <+> pretty "identity" + <+> (case o of + [] -> mempty + os -> parens (sep $ map sequenceGeneratorOption os)) sequenceGeneratorOption :: SequenceGeneratorOption -> Doc a sequenceGeneratorOption (SGODataType t) = diff --git a/Language/SQL/SimpleSQL/Syntax.hs b/Language/SQL/SimpleSQL/Syntax.hs index 1b894e2..17410dc 100644 --- a/Language/SQL/SimpleSQL/Syntax.hs +++ b/Language/SQL/SimpleSQL/Syntax.hs @@ -554,7 +554,6 @@ data TableElement = deriving (Eq,Show,Read,Data,Typeable) data ColumnDef = ColumnDef Name (Maybe TypeName) - (Maybe DefaultClause) [ColConstraintDef] -- (Maybe CollateClause) deriving (Eq,Show,Read,Data,Typeable) @@ -576,6 +575,7 @@ data ColConstraint = ReferentialAction ReferentialAction | ColCheckConstraint ScalarExpr + | ColDefaultClause DefaultClause deriving (Eq,Show,Read,Data,Typeable) data TableConstraint = diff --git a/tests/Language/SQL/SimpleSQL/Oracle.hs b/tests/Language/SQL/SimpleSQL/Oracle.hs index e415321..0d7c21b 100644 --- a/tests/Language/SQL/SimpleSQL/Oracle.hs +++ b/tests/Language/SQL/SimpleSQL/Oracle.hs @@ -26,7 +26,7 @@ oracleLobUnits = Group "oracleLobUnits" $ CreateTable [Name Nothing "t"] [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (PrecLengthTypeName [Name Nothing "varchar2"] 55 Nothing (Just PrecOctets))) - Nothing []] + []] False ] diff --git a/tests/Language/SQL/SimpleSQL/SQL2011Schema.hs b/tests/Language/SQL/SimpleSQL/SQL2011Schema.hs index 465f672..783b356 100644 --- a/tests/Language/SQL/SimpleSQL/SQL2011Schema.hs +++ b/tests/Language/SQL/SimpleSQL/SQL2011Schema.hs @@ -107,8 +107,8 @@ add schema element support: ,s "create table t (a int, b int);" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) Nothing []] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) []] False @@ -327,35 +327,35 @@ todo: constraint characteristics ,s "create table t (a int not null);" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing ColNotNullConstraint]] False ,s "create table t (a int constraint a_not_null not null);" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef (Just [Name Nothing "a_not_null"]) ColNotNullConstraint]] False ,s "create table t (a int unique);" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing ColUniqueConstraint]] False ,s "create table t (a int primary key);" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing (ColPrimaryKeyConstraint False)]] False ,testStatement ansi2011{ diAutoincrement = True } "create table t (a int primary key autoincrement);" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing (ColPrimaryKeyConstraint True)]] False @@ -369,7 +369,7 @@ references t(a,b) ,s "create table t (a int references u);" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing $ ColReferencesConstraint [Name Nothing "u"] Nothing DefaultReferenceMatch DefaultReferentialAction DefaultReferentialAction]] @@ -378,7 +378,7 @@ references t(a,b) ,s "create table t (a int references u(a));" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing $ ColReferencesConstraint [Name Nothing "u"] (Just $ Name Nothing "a") DefaultReferenceMatch DefaultReferentialAction DefaultReferentialAction]] @@ -387,7 +387,7 @@ references t(a,b) ,s "create table t (a int references u match full);" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing $ ColReferencesConstraint [Name Nothing "u"] Nothing MatchFull DefaultReferentialAction DefaultReferentialAction]] @@ -396,7 +396,7 @@ references t(a,b) ,s "create table t (a int references u match partial);" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing $ ColReferencesConstraint [Name Nothing "u"] Nothing MatchPartial DefaultReferentialAction DefaultReferentialAction]] @@ -405,7 +405,7 @@ references t(a,b) ,s "create table t (a int references u match simple);" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing $ ColReferencesConstraint [Name Nothing "u"] Nothing MatchSimple DefaultReferentialAction DefaultReferentialAction]] @@ -414,7 +414,7 @@ references t(a,b) ,s "create table t (a int references u on update cascade );" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing $ ColReferencesConstraint [Name Nothing "u"] Nothing DefaultReferenceMatch RefCascade DefaultReferentialAction]] @@ -423,7 +423,7 @@ references t(a,b) ,s "create table t (a int references u on update set null );" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing $ ColReferencesConstraint [Name Nothing "u"] Nothing DefaultReferenceMatch RefSetNull DefaultReferentialAction]] @@ -432,7 +432,7 @@ references t(a,b) ,s "create table t (a int references u on update set default );" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing $ ColReferencesConstraint [Name Nothing "u"] Nothing DefaultReferenceMatch RefSetDefault DefaultReferentialAction]] @@ -441,7 +441,7 @@ references t(a,b) ,s "create table t (a int references u on update no action );" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing $ ColReferencesConstraint [Name Nothing "u"] Nothing DefaultReferenceMatch RefNoAction DefaultReferentialAction]] @@ -450,7 +450,7 @@ references t(a,b) ,s "create table t (a int references u on delete cascade );" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing $ ColReferencesConstraint [Name Nothing "u"] Nothing DefaultReferenceMatch DefaultReferentialAction RefCascade]] @@ -460,7 +460,7 @@ references t(a,b) ,s "create table t (a int references u on update cascade on delete restrict );" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing $ ColReferencesConstraint [Name Nothing "u"] Nothing DefaultReferenceMatch RefCascade RefRestrict]] @@ -469,7 +469,7 @@ references t(a,b) ,s "create table t (a int references u on delete restrict on update cascade );" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing $ ColReferencesConstraint [Name Nothing "u"] Nothing DefaultReferenceMatch RefCascade RefRestrict]] @@ -484,7 +484,7 @@ options ,s "create table t (a int check (a>5));" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [ColConstraintDef Nothing (ColCheckConstraint $ BinOp (Iden [Name Nothing "a"]) [Name Nothing ">"] (NumLit "5"))]] False @@ -502,13 +502,17 @@ options ,s "create table t (a int generated always as identity);" $ CreateTable [Name Nothing "t"] [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) - (Just $ IdentityColumnSpec GeneratedAlways []) []] + [ColConstraintDef Nothing + $ ColDefaultClause + $ IdentityColumnSpec GeneratedAlways []]] False ,s "create table t (a int generated by default as identity);" $ CreateTable [Name Nothing "t"] [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) - (Just $ IdentityColumnSpec GeneratedByDefault []) []] + [ColConstraintDef Nothing + $ ColDefaultClause + $ IdentityColumnSpec GeneratedByDefault []]] False @@ -517,12 +521,14 @@ options \ ( start with 5 increment by 5 maxvalue 500 minvalue 5 cycle ));" $ CreateTable [Name Nothing "t"] [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) - (Just $ IdentityColumnSpec GeneratedAlways - [SGOStartWith 5 - ,SGOIncrementBy 5 - ,SGOMaxValue 500 - ,SGOMinValue 5 - ,SGOCycle]) []] + [ColConstraintDef Nothing + $ ColDefaultClause + $ IdentityColumnSpec GeneratedAlways + [SGOStartWith 5 + ,SGOIncrementBy 5 + ,SGOMaxValue 500 + ,SGOMinValue 5 + ,SGOCycle]]] False ,s @@ -530,11 +536,13 @@ options \ ( start with -4 no maxvalue no minvalue no cycle ));" $ CreateTable [Name Nothing "t"] [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) - (Just $ IdentityColumnSpec GeneratedAlways - [SGOStartWith (-4) - ,SGONoMaxValue - ,SGONoMinValue - ,SGONoCycle]) []] + [ColConstraintDef Nothing + $ ColDefaultClause + $ IdentityColumnSpec GeneratedAlways + [SGOStartWith (-4) + ,SGONoMaxValue + ,SGONoMinValue + ,SGONoCycle]]] False {- @@ -560,10 +568,11 @@ generated always (valueexpr) "create table t (a int, \n\ \ a2 int generated always as (a * 2));" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [] ,TableColumnDef $ ColumnDef (Name Nothing "a2") (Just (TypeName [Name Nothing "int"])) - (Just $ GenerationClause - (BinOp (Iden [Name Nothing "a"]) [Name Nothing "*"] (NumLit "2"))) []] + [ColConstraintDef Nothing + $ ColDefaultClause + $ GenerationClause (BinOp (Iden [Name Nothing "a"]) [Name Nothing "*"] (NumLit "2"))]] False @@ -592,7 +601,9 @@ generated always (valueexpr) ,s "create table t (a int default 0);" $ CreateTable [Name Nothing "t"] [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) - (Just $ DefaultClause $ NumLit "0") []] + [ColConstraintDef Nothing + $ ColDefaultClause + $ DefaultClause $ NumLit "0"]] False @@ -627,7 +638,7 @@ generated always (valueexpr) ,s "create table t (a int, unique (a));" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [] ,TableConstraintDef Nothing $ TableUniqueConstraint [Name Nothing "a"] ] False @@ -635,7 +646,7 @@ generated always (valueexpr) ,s "create table t (a int, constraint a_unique unique (a));" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [] ,TableConstraintDef (Just [Name Nothing "a_unique"]) $ TableUniqueConstraint [Name Nothing "a"] ] @@ -646,8 +657,8 @@ generated always (valueexpr) ,s "create table t (a int, b int, unique (a,b));" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) [] ,TableConstraintDef Nothing $ TableUniqueConstraint [Name Nothing "a", Name Nothing "b"] ] @@ -656,8 +667,8 @@ generated always (valueexpr) ,s "create table t (a int, b int, primary key (a,b));" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) [] ,TableConstraintDef Nothing $ TablePrimaryKeyConstraint [Name Nothing "a", Name Nothing "b"] ] @@ -684,8 +695,8 @@ defintely skip "create table t (a int, b int,\n\ \ foreign key (a,b) references u(c,d) match full on update cascade on delete restrict );" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) [] ,TableConstraintDef Nothing $ TableReferencesConstraint [Name Nothing "a", Name Nothing "b"] @@ -699,7 +710,7 @@ defintely skip "create table t (a int,\n\ \ constraint tfku1 foreign key (a) references u);" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [] ,TableConstraintDef (Just [Name Nothing "tfku1"]) $ TableReferencesConstraint [Name Nothing "a"] @@ -714,8 +725,8 @@ defintely skip \ foreign key (a) references u(c)\n\ \ foreign key (b) references v(d));" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) [] ,TableConstraintDef Nothing $ TableReferencesConstraint [Name Nothing "a"] @@ -735,15 +746,35 @@ defintely skip ,testStatement ansi2011{ diWithoutRowidTables = True } "create table t (a int) without rowid;" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing []] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) []] True ,testStatement ansi2011{ diOptionalColumnTypes = True } "create table t (a,b);" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") Nothing Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") Nothing Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") Nothing [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") Nothing [] ] False + ,testStatement ansi2011{ diDefaultClausesAsConstraints = True } + "create table t (a int default 1 default 2);" + $ CreateTable [Name Nothing "t"] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) + [ColConstraintDef Nothing + $ ColDefaultClause + $ DefaultClause $ NumLit "1" + ,ColConstraintDef Nothing + $ ColDefaultClause + $ DefaultClause $ NumLit "2"]] + False + ,testStatement ansi2011{ diDefaultClausesAsConstraints = True } + "create table t (a int not null default 2);" + $ CreateTable [Name Nothing "t"] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) + [ColConstraintDef Nothing ColNotNullConstraint + ,ColConstraintDef Nothing + $ ColDefaultClause + $ DefaultClause $ NumLit "2"]] + False {- @@ -805,8 +836,8 @@ defintely skip "create table t (a int, b int, \n\ \ check (a > b));" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) [] ,TableConstraintDef Nothing $ TableCheckConstraint (BinOp (Iden [Name Nothing "a"]) [Name Nothing ">"] (Iden [Name Nothing "b"])) @@ -818,8 +849,8 @@ defintely skip "create table t (a int, b int, \n\ \ constraint agtb check (a > b));" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (Just (TypeName [Name Nothing "int"])) [] ,TableConstraintDef (Just [Name Nothing "agtb"]) $ TableCheckConstraint (BinOp (Iden [Name Nothing "a"]) [Name Nothing ">"] (Iden [Name Nothing "b"])) @@ -861,7 +892,7 @@ alter table t add a int unique not null check (a>0) ,s "alter table t add column a int" $ AlterTable [Name Nothing "t"] $ AddColumnDef - $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) Nothing [] + $ ColumnDef (Name Nothing "a") (Just (TypeName [Name Nothing "int"])) [] {- todo: more add column