[erlang-questions] Help! Drowning in qlc documentation

Ulf Wiger ulf@REDACTED
Sun Oct 19 09:33:54 CEST 2014


The {aborted,{node_not_running,'nit_notes@REDACTED’}} message comes from mnesia, as you’re trying to run a mnesia transaction without actually having a mnesia database.

You don’t need mnesia at all to use QLC. Just execute qlc:e(Q) directly.

BR,
Ulf W

On 18 Oct 2014, at 17:46, lloyd@REDACTED wrote:

> Hello,
>  
> I really really want to understand qlc. But that's another story. Here's my immediate problem:
>  
> I have a simple dets db that stores:
>  
> -record(note, {date, subject, note}).
>  
> I want to fetch all notes equal or less than a given date. Leveraging Joe Armstrong's do/1 function (Programming Erlang, 2007, p326), I wrote a query function as so:
>  
> do(Q) ->
> F = fun() -> qlc:e(Q) end,
> {atomic, Val} = mnesia:transaction(F),
> Val.
>  
> get_notes(Date) ->
>     open_notes_db(),
>     do(qlc:q([Record || Record <- dets:table(nit_notes), Record#note.date =< Date])),
>     close_notes_db().
>  
> When I run get_notes/1, I get this:
>  
> 36> notes_store:get_notes(Date).
> ** exception error: no match of right hand side value {aborted,{node_not_running,'nit_notes@REDACTED'}}
> in function notes_store:do/1 (/home/lloyd/nit_host/nit_notes/site/src/notes_store.erl, line 53)
> in call from notes_store:get_notes/1 (/home/lloyd/nit_host/nit_notes/site/src/notes_store.erl, line 59)
>  
> This suggests that my dets db is not open, but I did that in get_notes/1:
>  
> open_notes_db() ->
>     File = nit_notes,
>     {ok, nit_notes} = dets:open_file(File,
>     [{keypos,#note.date}, {type,bag}]).
>  
>  
> Which, in the shell, returns:
>  
> 29> notes_store:open_notes_db().
> {ok,nit_notes}
>  
> If I run:
>  
> qlc:q([Record#note.note || Record <- dets:table(nit_notes), Record#note.date =< Date ])
>  
> ...in the shell, I get:
>  
> {qlc_handle,{qlc_lc,#Fun<erl_eval.20.90072148>, {qlc_opt,false,false,-1,any,[],any,524288,allowed}}}
>  
> Yes, I know that this is a query handle. But what in world does it mean? If I plug this mess it into the shell, I get:
>  
> 1> Q = qlc:q([Record#note.note || Record <- dets:table(nit_notes), Record#note.date =< Date ]).
> 2> qlc:eval(Q).
> ** exception error: bad argument
> in function dets:safe_fixtable/2
> called as dets:safe_fixtable(nit_notes,true)
> in call from qlc:call/4 (qlc.erl, line 3759)
> in call from qlc:table_handle/3 (qlc.erl, line 2616)
> in call from qlc:setup_le/3 (qlc.erl, line 2381)
> in call from qlc:setup_quals/6 (qlc.erl, line 2480)
> in call from qlc:setup_quals/4 (qlc.erl, line 2438)
> in call from qlc:setup_le/3 (qlc.erl, line 2377)
> in call from qlc:eval/2 (qlc.erl, line 290)
>  
> Which, again, suggests a problem with my dets table. But I don't know what.
>  
> Or, is it possible that my problem is with mnesia:transactions/1 in do/1? Docs do say that qlc should work with dets, but I don't see a dets:transactions/1.
>  
> How can I diagnose and fix?
>  
> Many thanks,
>  
> LRP
>  
>  
>  
>  
> *********************************************
> My books:
> 
> THE GOSPEL OF ASHES
> http://thegospelofashes.com
> 
> Strength is not enough. Do they have the courage 
> and the cunning? Can they survive long enough to 
> save the lives of millions? 
> 
> FREEIN' PANCHO
> http://freeinpancho.com
> 
> A community of misfits help a troubled boy find his way 
> 
> AYA TAKEO
> http://ayatakeo.com
> 
> Star-crossed love, war and power in an alternative 
> universe
> 
> Available through Amazon or by request from your 
> favorite bookstore
> 
> 
> **********************************************
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions

Ulf Wiger, Co-founder & Developer Advocate, Feuerlabs Inc.
http://feuerlabs.com



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20141019/b47cc305/attachment.htm>


More information about the erlang-questions mailing list