20090705

select * from таблица;

это, ясное дело, sql.
а как оно будет звучать в случае mnesia (естественно, на erlang-е)? а примерно так:
mnesia:dirty_match_object(mnesia:table_info(таблица,wild_pattern)).

ввиду того, что eshell «больно вумный», и выдаст на такой запрос из большой таблицы всего несколько строк, лучше просматривать порционно, записей, например, по десять::
lists:sublist(mnesia:dirty_match_object(mnesia:table_info(таблица,wild_pattern)),1,10).
lists:sublist(mnesia:dirty_match_object(mnesia:table_info(Table,wild_pattern)),11,10).
и т.д.

краткая расшифровка:
mnesia:table_info(Table,wild_pattern).
возвращает шаблон для получения записей для заданной таблицы Table. фактически — это запись (кортеж), в которой первым элементом идёт название самой таблицы, остальные элементы — анонимные переменные '_' в нужном количестве.
mnesia:dirty_match_object(шаблон)
это, собственно, и есть поиск по шаблону. а так как полученный с помощью table_info шаблон содержит только анонимные переменные, то, в переводе на sql это означает, что условие where мы не задали (или задали where true (улыбка)), и в результате получим _все_ строки таблицы.
почему dirty? а это чтобы с транзакциями не заморачиваться. зачем, спрашивается, нужна транзакция при выборке данных?

p.s. ежели кто из читателей знает более короткое/элегантное решение — you are welcome.

p.p.s. до встречи через 100000 секунд.

♺ man -erl mnesia lists

Комментариев нет: