2

我正在非 erlyweb 环境中试验 ErlyDB,但运气不佳。

我有一个用于测试的“事物”表和一个相应的事物模块:

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

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

该模块本身可以工作 - 我可以使用([Thing] = thing:find({name, '=', "test"}))很好地查询数据库。

当我尝试保存新记录时,情况不太好。

我一直看到以下错误:

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

有什么我想念的吗?有没有办法从数据库中查看一些更有用的错误消息?

4

2 回答 2

3

查看 erlydb_base 的来源,异常发生在 erlydb 调用你的事物模块的 db_pk_fields() 函数时。该函数应该返回一个列表,但显然它没有。

于 2009-08-04T18:02:20.553 回答
1

我可以确认更改 erlydb.erl 中的代码可以解决此问题(来自邮件列表上的此参考)。

将 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),
于 2009-08-05T08:09:33.843 回答