From 0669e26175e6a9ebbf85580ee465c0aa2aefdae9 Mon Sep 17 00:00:00 2001 From: Alexey Romanov Date: Tue, 12 Oct 2010 09:57:14 +0400 Subject: [PATCH] Fixed column types, according to http://www.sqlite.org/datatype3.html --- src/sqlite3.erl | 2 +- src/sqlite3_lib.erl | 46 +++++++++++++++++++++++++-------------------- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/sqlite3.erl b/src/sqlite3.erl index 90e5f1e..6dc6854 100644 --- a/src/sqlite3.erl +++ b/src/sqlite3.erl @@ -602,7 +602,7 @@ parse_table_info(Info) -> build_table_info([], Acc) -> lists:reverse(Acc); build_table_info([[ColName, ColType] | Tl], Acc) -> - build_table_info(Tl, [{list_to_atom(ColName), sqlite3_lib:col_type(ColType)}| Acc]); + build_table_info(Tl, [{list_to_atom(ColName), sqlite3_lib:col_type_to_atom(ColType)}| Acc]); build_table_info([[ColName, ColType, "PRIMARY", "KEY"] | Tl], Acc) -> build_table_info(Tl, [{list_to_atom(ColName), primary_key}| Acc]). diff --git a/src/sqlite3_lib.erl b/src/sqlite3_lib.erl index b17342c..4e1c569 100644 --- a/src/sqlite3_lib.erl +++ b/src/sqlite3_lib.erl @@ -10,7 +10,7 @@ -include("sqlite3.hrl"). %% API --export([col_type/1]). +-export([col_type_to_atom/1]). -export([value_to_sql/1, value_to_sql_unsafe/1, escape/1]). -export([write_value_sql/1, write_col_sql/1]). -export([create_table_sql/2, write_sql/2, read_sql/3, delete_sql/3, drop_table/1]). @@ -21,27 +21,32 @@ %% API %%==================================================================== %%-------------------------------------------------------------------- -%% @spec col_type(Type :: term()) -> term() +%% @spec col_type_to_string(Type :: atom()) -> string() %% @doc Maps sqlite3 column type. %% @end %%-------------------------------------------------------------------- --spec(col_type/1::(atom() | string()) -> atom() | string()). -col_type(integer) -> - "INTEGER"; -col_type("INTEGER") -> - integer; -col_type(text) -> +-spec(col_type_to_string/1::(atom()) -> string()). +col_type_to_string(integer) -> + "INTEGER"; +col_type_to_string(text) -> "TEXT"; -col_type("TEXT") -> +col_type_to_string(double) -> + "REAL"; +col_type_to_string(real) -> + "REAL". + +%%-------------------------------------------------------------------- +%% @spec col_type_to_atom(Type :: string()) -> atom() +%% @doc Maps sqlite3 column type. +%% @end +%%-------------------------------------------------------------------- +-spec(col_type_to_atom/1::(string()) -> atom()). +col_type_to_atom("INTEGER") -> + integer; +col_type_to_atom("TEXT") -> text; -col_type(double) -> - "DOUBLE"; -col_type("DOUBLE") -> - double; -col_type(date) -> - "DATE"; -col_type("DATE") -> - date. +col_type_to_atom("REAL") -> + double. %%-------------------------------------------------------------------- %% @spec value_to_sql_unsafe(Value :: sql_value()) -> iodata() @@ -159,15 +164,16 @@ read_cols_sql (Columns) -> %% ColName = atom() %% Type = string() %% @doc Generates a table create stmt in SQL. +%% First column listed is considered the primary key. %% @end %%-------------------------------------------------------------------- -spec(create_table_sql/2::(atom(), [{atom(), string()}]) -> string()). create_table_sql(Tbl, [{ColName, Type} | Tl]) -> CT = ["CREATE TABLE ", atom_to_list(Tbl), " "], - Start = ["(", atom_to_list(ColName), " ", sqlite3_lib:col_type(Type), " PRIMARY KEY, "], + Start = ["(", atom_to_list(ColName), " ", col_type_to_string(Type), " PRIMARY KEY, "], End = [map_intersperse( fun({Name0, Type0}) -> - [atom_to_list(Name0), " ", sqlite3_lib:col_type(Type0)] + [atom_to_list(Name0), " ", col_type_to_string(Type0)] end, Tl, ", "), ");"], [CT, Start, End]. @@ -185,7 +191,7 @@ create_table_sql(Tbl, [{ColName, Type} | Tl]) -> %%-------------------------------------------------------------------- -spec (update_sql/4::(atom (), atom (), atom (), [{atom (), sql_value ()}]) -> string ()). update_sql (Tbl, Key, Value, Data) -> - ["UPDATE ", atom_to_list(Tbl), " SET ", sqlite3_lib:update_set_sql(Data), + ["UPDATE ", atom_to_list(Tbl), " SET ", update_set_sql(Data), " WHERE ", atom_to_list(Key), " = ", value_to_sql(Value), ";"]. %%--------------------------------------------------------------------