代码之家  ›  专栏  ›  技术社区  ›  Toby Hede

调试erlydb和mysql

  •  2
  • Toby Hede  · 技术社区  · 15 年前

    我在非erlyweb环境中尝试erlydb,但运气不好。

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

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

    模块本身可以工作-我可以使用( [thing]=thing:查找(名称,=',“测试”) )

    当我试图保存一个新的记录时,情况却不太好。

    我始终看到以下错误:

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

    我有什么东西不见了吗? 是否有某种方法可以查看数据库中更有用的错误消息?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Zed    15 年前

    看着 source 对于erlydb_base,当erlydb调用thing模块的db_pk_fields()函数时会发生异常。该函数应该返回一个列表,但显然它不返回。

        2
  •  1
  •   Toby Hede    15 年前

    我可以确认修改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),
    
    推荐文章