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).

链接地址: http://www.djcxy.com/p/38192.html

上一篇: 麻烦了解Erlang Gen

下一篇: sqlite3 sqlite3:表