From e3c9243d1a37197f8a5f673eede5572c2a638747 Mon Sep 17 00:00:00 2001 From: sergey-miryanov Date: Thu, 28 Apr 2011 08:43:56 +0600 Subject: [PATCH] Add AUTOINCREMENT to primary keys --- src/sqlite3_lib.erl | 10 +++++++++- test/sqlite3_test.erl | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/sqlite3_lib.erl b/src/sqlite3_lib.erl index de2428b..789b8b0 100644 --- a/src/sqlite3_lib.erl +++ b/src/sqlite3_lib.erl @@ -376,11 +376,19 @@ column_sql_for_create_table({Name, Type, Constraints}) -> [atom_to_list(Name), " ", col_type_to_string(Type), " " | map_intersperse(fun constraint_sql/1, Constraints, " ")]. +-spec pk_constraint_sql(any ()) -> iolist(). +pk_constraint_sql (Constraint) -> + case Constraint of + desc -> "DESK"; + autoincrement -> "AUTOINCREMENT"; + L -> lists:map (fun pk_constraint_sql/1, L) + end. + -spec constraint_sql(any()) -> iolist(). constraint_sql(Constraint) -> case Constraint of primary_key -> "PRIMARY KEY"; - {primary_key, desc} -> "PRIMARY KEY DESC"; + {primary_key, C} -> ["PRIMARY KEY ", pk_constraint_sql (C)]; unique -> "UNIQUE"; not_null -> "NOT NULL"; {default, DefaultValue} -> ["DEFAULT ", value_to_sql(DefaultValue)] diff --git a/test/sqlite3_test.erl b/test/sqlite3_test.erl index a207bc9..fd6756d 100644 --- a/test/sqlite3_test.erl +++ b/test/sqlite3_test.erl @@ -61,7 +61,7 @@ basic_functionality() -> Columns = ["id", "name", "age", "wage"], AllRows = [{1, <<"abby">>, 20, 2000}, {2, <<"marge">>, 30, 2000}], AbbyOnly = [{1, <<"abby">>, 20, 2000}], - TableInfo = [{id, integer, [primary_key]}, {name, text, [not_null, unique]}, {age, integer}, {wage, integer}], + TableInfo = [{id, integer, [{primary_key, [autoincrement]}]}, {name, text, [not_null, unique]}, {age, integer}, {wage, integer}], drop_all_tables(ct), ?WARN_ERROR_MESSAGE, ?assertEqual( @@ -72,7 +72,7 @@ basic_functionality() -> sqlite3:list_tables(ct)), ok = sqlite3:create_table(ct, user, TableInfo), ?assertEqual( - [user], + [user, sqlite_sequence], sqlite3:list_tables(ct)), ?assertEqual( TableInfo,