Mnemosyne query by a partial key
Carlos Silva
carlos@REDACTED
Wed Jan 22 16:35:52 CET 2003
OK Dan, it works.
Thank you very much. But, tell me please, why I could run queries like the
following without using application:start(mnemosyne) ?
sel_menus(Item) ->
F = fun() ->
Q = query [{E.item, E.url} || E <- table(menus), E.item = Item] end,
mnemosyne:eval(Q)
end,
mnesia:transaction(F).
Regards,
Ing. Carlos E. Silva
INSwitch Solutions
----- Original Message -----
From: "Dan Gudmundsson" <dgud@REDACTED>
To: "Carlos Silva" <carlos@REDACTED>
Cc: "Erlang Questions" <erlang-questions@REDACTED>
Sent: Wednesday, January 22, 2003 12:20 PM
Subject: Mnemosyne query by a partial key
>
> {aborted,mnemosyne_not_running}
>
> means that you forgot to start the application mnemosyne,
> i.e. use application:start(mnemosyne). before any mnemosyne queries.
>
> But the select call is the preferred way..
> Though you forgot to bind the $2 in your select expr.
>
> /Dan
> PS: Yes I know I got a bug in select, a bad match-spec will loop
> the transaction forever :-(, will be corrected in next patch.
> In the mean time use ets:test_ms/2 to check your match_spec.
>
>
> Carlos Silva writes:
> > Hi everybody.
> >
> > I'd like to know if it is possible to include a function call in the
body of a Mnemosyne query. Knowing that a query is declared as: query
<pattern> || <body> ] end
> >
> > The doubt comes to me when I tried to run this example:
> > Q = query [{E.item, E.url} || E <- table(menus), element(1,
E.item) = Level] end,
> >
> > but a "{aborted,mnemosyne_not_running}" is all I've obtained from the
shell :o(
> >
> > Neither I could run my example in this way:
> > ...
> > Menus = #menus{item = '$1'},
> > Guard = {'==','element(1, $1)',Level},
> > mnesia:select(menus, [{Menus , [Guard], [['$1','$2']]}])
> > ...
> >
> > I'd be happy if someone could tell me how to execute a query by a
partial key, when the key of a Mnesia table is a compound key as {elem1,
elem2, elem3} and I want to search only by elem1 for example.
> >
> > Thanks a lot,
> >
> > Ing. Carlos E. Silva
> > INSwitch Solutions
> > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
> > <HTML><HEAD>
> > <META content="text/html; charset=iso-8859-1" http-equiv=Content-Type>
> > <META content="MSHTML 5.00.2920.0" name=GENERATOR>
> > <STYLE></STYLE>
> > </HEAD>
> > <BODY bgColor=#ffffff>
> > <DIV><FONT face=Arial size=2>Hi everybody.</FONT></DIV>
> > <DIV><FONT face=Arial size=2></FONT> </DIV>
> > <DIV><FONT face=Arial size=2>I'd like to know if it is possible to
include a
> > function call in the body of a Mnemosyne query. Knowing that a query is
declared
> > as</FONT><FONT face=Arial size=2>: query [ <pattern> ||
<body> ]
> > end</FONT></DIV>
> > <DIV> </DIV>
> > <DIV><FONT face=Arial size=2>The doubt comes to me when I tried to run
this
> > example:</FONT></DIV>
> > <DIV><FONT face=Arial
> > size=2> Q =
query
> > [{E.item, E.url} || E <- table(menus), <STRONG>element(1, E.item)
</STRONG>=
> > Level] end,</FONT></DIV>
> > <DIV><FONT face=Arial size=2></FONT> </DIV>
> > <DIV><FONT face=Arial size=2>but a "{aborted,mnemosyne_not_running}" is
all I've
> > obtained from the shell :o(</FONT></DIV>
> > <DIV> </DIV>
> > <DIV><FONT face=Arial size=2>Neither I could run my example in this
> > way:</FONT></DIV>
> > <DIV><FONT face=Arial size=2>...</FONT></DIV>
> > <DIV><FONT face=Arial size=2> Menus = #menus{item =
> > '$1'},</FONT></DIV>
> > <DIV><FONT face=Arial size=2> Guard =
> > {'==',<STRONG>'element(1, $1)'</STRONG>,Level},<BR>
> > mnesia:select(menus, [{Menus , [Guard], [['$1','$2']]}])</FONT></DIV>
> > <DIV><FONT face=Arial size=2>...</FONT></DIV>
> > <DIV><FONT face=Arial size=2></FONT> </DIV>
> > <DIV><FONT face=Arial size=2>I'd be happy if someone could tell me how
to
> > execute a query by a partial key, when the key of a Mnesia table is a
compound
> > key as {elem1, elem2, elem3} and I want to search only by elem1 for
> > example.</FONT></DIV>
> > <DIV><FONT face=Arial size=2></FONT> </DIV>
> > <DIV><FONT face=Arial size=2>Thanks a lot,</FONT></DIV>
> > <DIV><FONT face=Arial size=2></FONT> </DIV>
> > <DIV><FONT face=Arial size=2>Ing. Carlos E. Silva</FONT></DIV>
> > <DIV><FONT face=Arial size=2>INSwitch Solutions</FONT><FONT face=Arial
> > size=2></DIV></FONT></BODY></HTML>
>
> --
> Dan Gudmundsson Project: Mnesia, Erlang/OTP
> Ericsson Utvecklings AB Phone: +46 8 727 5762
> UAB/F/P Mobile: +46 70 519 9469
> S-125 25 Stockholm Visit addr: Armborstv 1
>
More information about the erlang-questions
mailing list