Отладка ErlyDB и MySQL - PullRequest
       12

Отладка ErlyDB и MySQL

2 голосов
/ 04 августа 2009

Я экспериментирую с ErlyDB в среде, отличной от erlyweb, и мне не везет.

У меня есть таблица «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),

Есть что-то, чего мне не хватает? Есть ли какой-нибудь способ просмотра более полезных сообщений об ошибках из базы данных?

Ответы [ 2 ]

3 голосов
/ 04 августа 2009

Глядя на источник erlydb_base, исключение происходит, когда erlydb вызывает функцию db_pk_fields () вашего модуля вещей. Эта функция должна возвращать список, но, очевидно, это не так.

1 голос
/ 05 августа 2009

Я могу подтвердить, что изменение кода в erlydb.erl решает эту проблему (с эта ссылка в списке рассылки).

Измените строку 561 файла erlydb.erl с

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

Кому:

lists:map(fun({_Name, _Atts} = F) -> F;
      (Name) -> {Name, []}
      end, DefinedFields),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...