sqlite3 sqlite3:table
I tried to extract table info from sqlite database using sqlite3:table_info/2 function and got an error message.
{ok,Pid} = sqlite3:open(db3).
Sql = <<"CREATE TABLE test (
id INTEGER PRIMARY KEY,
ts TEXT default (datetime('now')),
key TEXT,
val TEXT
);">>.
sqlite3:sql_exec(db3,Sql).
Check table list:
sqlite3:list_tables(db3).
[test]
Try to get table info:
sqlite3:table_info(db3,test).
And now error message:
`=ERROR REPORT==== 1-Mar-2015::19:37:46 === ** Generic server db3 terminating ** Last message in was {table_info,test} ** When Server state == {state,#Port, [{file,"../tmp/db3.sqlite"}], {dict,0,16,16,8,80,48, {[],[],[],[],[],[],[],[],[],[],[],[],[], [],[],[]}, {{[],[],[],[],[],[],[],[],[],[],[],[],[], [],[],[]}}}} ** Reason for termination == ** {function_clause,[{sqlite3,build_constraints, [["INTEGER","PRIMARY","KEY"]], [{file,"src/sqlite3.erl"},{line,1169}]}, {sqlite3,build_table_info,2, [{file,"src/sqlite3.erl"},{line,1166}]}, {sqlite3,handle_call,3, [{file,"src/sqlite3.erl"},{line,833}]}, {gen_server,try_handle_call,4, [{file,"gen_server.erl"},{line,607}]}, {gen_server,handle_msg,5, [{file,"gen_server.erl"},{line,639}]}, {proc_lib,init_p_do_apply,3, [{file,"proc_lib.erl"},{line,237}]}]} ** exception exit: function_clause in function sqlite3:build_constraints/1 called as sqlite3:build_constraints(["INTEGER","PRIMARY","KEY"]) in call from sqlite3:build_table_info/2 (src/sqlite3.erl, line 1166) in call from sqlite3:handle_call/3 (src/sqlite3.erl, line 833) in call from gen_server:try_handle_call/4 (gen_server.erl, line 607) in call from gen_server:handle_msg/5 (gen_server.erl, line 639) in call from proc_lib:init_p_do_apply/3 (proc_lib.erl, line 237)
Any ideas?
I've fixed the problem with INTEGER PRIMARY KEY
. The default
is harder to support, but I've added a fallback so it doesn't crash, at least. As @CL mentions, this parsing is unreliable anyway (since SQLite unfortunately doesn't expose any way to use its own parser).
上一篇: 麻烦了解Erlang Gen
下一篇: sqlite3 sqlite3:表