diff --git a/Language/SQL/SimpleSQL/Dialect.hs b/Language/SQL/SimpleSQL/Dialect.hs index 0e1f9ee..11912f0 100644 --- a/Language/SQL/SimpleSQL/Dialect.hs +++ b/Language/SQL/SimpleSQL/Dialect.hs @@ -98,6 +98,8 @@ data Dialect = Dialect ,diNonCommaSeparatedConstraints :: Bool -- | allow marking tables as "without rowid" ,diWithoutRowidTables :: Bool + -- | allow mixing in DEFAULT clauses with other constraints + ,diDefaultClausesAsConstraints :: Bool } deriving (Eq,Show,Read,Data,Typeable) @@ -123,6 +125,7 @@ ansi2011 = Dialect {diKeywords = ansi2011ReservedKeywords ,diAutoincrement = False ,diNonCommaSeparatedConstraints = False ,diWithoutRowidTables = False + ,diDefaultClausesAsConstraints = False } -- | mysql dialect diff --git a/Language/SQL/SimpleSQL/Parse.hs b/Language/SQL/SimpleSQL/Parse.hs index 1dcb5e4..bd01394 100644 --- a/Language/SQL/SimpleSQL/Parse.hs +++ b/Language/SQL/SimpleSQL/Parse.hs @@ -1738,22 +1738,7 @@ createIndex = columnDef :: Parser ColumnDef columnDef = ColumnDef <$> name "column name" <*> 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 = @@ -1802,7 +1787,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"] @@ -1821,6 +1813,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 f1abd42..5b902aa 100644 --- a/Language/SQL/SimpleSQL/Pretty.hs +++ b/Language/SQL/SimpleSQL/Pretty.hs @@ -699,23 +699,8 @@ dropBehav Restrict = pretty "restrict" columnDef :: Dialect -> ColumnDef -> Doc a -columnDef d (ColumnDef n t mdef cons) = +columnDef d (ColumnDef n t cons) = name n <+> 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 +720,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 e2955a4..5131869 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 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 79edf1e..adc9ca7 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") (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 02724c2..a7c84b7 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") (TypeName [Name Nothing "int"]) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (TypeName [Name Nothing "int"]) Nothing []] + [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (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") (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") (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") (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") (TypeName [Name Nothing "int"]) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) [] ,TableColumnDef $ ColumnDef (Name Nothing "a2") (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") (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") (TypeName [Name Nothing "int"]) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (TypeName [Name Nothing "int"]) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (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") (TypeName [Name Nothing "int"]) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (TypeName [Name Nothing "int"]) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (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") (TypeName [Name Nothing "int"]) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (TypeName [Name Nothing "int"]) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (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") (TypeName [Name Nothing "int"]) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (TypeName [Name Nothing "int"]) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (TypeName [Name Nothing "int"]) [] ,TableConstraintDef Nothing $ TableReferencesConstraint [Name Nothing "a"] @@ -735,8 +746,28 @@ defintely skip ,testStatement ansi2011{ diWithoutRowidTables = True } "create table t (a int) without rowid;" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) Nothing []] + [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) []] True + ,testStatement ansi2011{ diDefaultClausesAsConstraints = True } + "create table t (a int default 1 default 2);" + $ CreateTable [Name Nothing "t"] + [TableColumnDef $ ColumnDef (Name Nothing "a") (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") (TypeName [Name Nothing "int"]) + [ColConstraintDef Nothing ColNotNullConstraint + ,ColConstraintDef Nothing + $ ColDefaultClause + $ DefaultClause $ NumLit "2"]] + False {- @@ -798,8 +829,8 @@ defintely skip "create table t (a int, b int, \n\ \ check (a > b));" $ CreateTable [Name Nothing "t"] - [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (TypeName [Name Nothing "int"]) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (TypeName [Name Nothing "int"]) [] ,TableConstraintDef Nothing $ TableCheckConstraint (BinOp (Iden [Name Nothing "a"]) [Name Nothing ">"] (Iden [Name Nothing "b"])) @@ -811,8 +842,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") (TypeName [Name Nothing "int"]) Nothing [] - ,TableColumnDef $ ColumnDef (Name Nothing "b") (TypeName [Name Nothing "int"]) Nothing [] + [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) [] + ,TableColumnDef $ ColumnDef (Name Nothing "b") (TypeName [Name Nothing "int"]) [] ,TableConstraintDef (Just [Name Nothing "agtb"]) $ TableCheckConstraint (BinOp (Iden [Name Nothing "a"]) [Name Nothing ">"] (Iden [Name Nothing "b"])) @@ -854,7 +885,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") (TypeName [Name Nothing "int"]) Nothing [] + $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) [] {- todo: more add column