2009-08-04 21 views
2

我在非erlyweb環境中對ErlyDB進行了實驗,並沒有多少運氣。調試ErlyDB和MySQL

我有一個用於測試的「東西」表,以及相應的事模塊:

-module(thing). 
-export([table/0, fields/0]). 

table() -> 
    thing. 
fields() -> 
    [name, value]. 

模塊本身的工作原理 - 我可以通過查詢數據庫罰款([事物] =件事:找到({名稱,'=','測試'}))。

當我嘗試保存新記錄時,事情並不是那麼好。

我不斷地看到以下錯誤:

mysql_conn:426: fetch <<"BEGIN">> (id <0.97.0>) 
mysql_conn:426: fetch <<"INSERT INTO thing(value,name) VALUES ('vtha','blah')">> (id <0.97.0>) 
mysql_conn:426: fetch <<"ROLLBACK">> (id <0.97.0>) 
** exception exit: {{'EXIT',{badarg,[{erlang,hd,[[]]}, 
            {erlydb_base,'-do_save/1-fun-0-',4}, 
            {mysql_conn,do_transaction,2}, 
            {mysql_conn,loop,1}]}}, 
        {rollback_result,{updated,{mysql_result,[],[],0,[]}}}} 
    in function erlydb_base:do_save/1 
    in call from erlydb_base:hook/4 
    in call from test_thing:test/0 
     called as test_thing:test() 

表存在,憑證工作,而SQL本身是好的,因爲我可以在數據庫中直接執行命令。

我使用保存的代碼是:

erlydb:start(mysql, Database), 
Thing = thing:new(<<"hello">>, <<"world">>), 
thing:save(Thing), 

有什麼我失蹤? 有沒有從數據庫中查看一些更有用的錯誤消息的方法?

回答

1

我可以確認,更改erlydb.erl中的代碼可以修復此問題(郵件列表中的this reference)。

更改行erlydb.erl的561

lists:map(fun({_Name, _Atts} = F) -> F; 
     (Name) -> {Name, []} 
     end, lists:usort(DefinedFields)), 

要:

lists:map(fun({_Name, _Atts} = F) -> F; 
     (Name) -> {Name, []} 
     end, DefinedFields), 
3

查看erlydb_base的source,當erlydb調用你的東西模塊的db_pk_fields()函數時發生異常。該函數應該返回一個列表,但顯然不是。

+0

是 - 我認爲它實際上是與此相關的問題:http://groups.google.com/group/erlyweb/browse_thread /線程/ a719be16b83bcc0f/2d1f7f4c72dbdef4?LNK = raot#2d1f7f4c72dbdef4 – 2009-08-04 18:06:44