2

erlyweb 以外の環境で ErlyDB を試していますが、うまくいきません。

テスト用の「Thing」テーブルと、対応する Thing モジュールがあります。

-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 が Thing モジュールの 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 に答える