[erlang-questions] QLC cursor with QLC query using nested QLC.

Dan Gudmundsson <>
Mon May 11 12:29:09 CEST 2009


That sounds like a bug in mnesia, I will have looka at it.

/Dan

Daniel Kwiecinski wrote:
> Hi,
> 
>    I'm trying to implement kind of SELECT COUNT(B.ID <http://B.ID>) C, 
> A.* FROM A, B WHERE A.ID <http://A.ID> = B.F_ID GROUP BY A.ID 
> <http://A.ID> HAVING C > 0
> 
> So I need to make join with count on details. The thing is, I want also 
> to involve sorting and limiting with is but it seams qlc cursor don't 
> like my
> approach. *as_with_bs() *works fine but* **top_as_with_some_bs(10) 
> *returns*:**
> 
> {aborted,{badarg,[{ets,first,[106291236]},
>                   {mnesia_tm,arrange,3},
>                   {mnesia_tm,t_commit,1},
>                   {mnesia_tm,apply_fun,3},
>                   {mnesia_tm,execute_transaction,5},
>                   {erl_eval,do_apply,5},
>                   {shell,exprs,6},
>                   {shell,eval_exprs,6}]}}*
> 
> QLC with nested QLC queries works fine as long not used with cursors.
> Could anyone help me with it?
> 
> Here is what I wrote: (http://gist.github.com/109936)
> 
> *
> bs_by_a_id(A_id) ->
>   find(qlc:q([ B || B=#b{f_id=F_id} <- mnesia:table(b), F_id == A_id])).
> 
> as_with_bs() ->
>   find(
>     qlc:q([ {A,bs_by_a_id(A#a.id <http://a.id>)} || A <- mnesia:table(a)])
>   ).
> 
> top_as_with_some_bs(Limit) ->
>   top(
>     qlc:q([ {A,bs_by_a_id(A#a.id <http://a.id>)} || A <- mnesia:table(a)]),
>     Limit,
>     fun(A1,A2) -> A1 < A2  end
>   ).
>  
> % --- utils
> 
> find(Q) ->
>   F = fun() -> qlc:e(Q) end,
>   transaction(F).
> 
> % --- it returns top Limit results from query Q ordered by Order sort 
> function
> top(Q, Limit, Order) ->
>   {atomic, Res} = mnesia:transaction(fun() ->
>     OQ = qlc:sort(Q, [{order,Order}]),
>     QC = qlc:cursor(OQ),
>     Res = qlc:next_answers(QC, Limit),
>     qlc:delete_cursor(QC),
>     Res
>   end),
>   Res.*
> 
> Regards,
> Daniel
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions



More information about the erlang-questions mailing list