Christian,
I am running out of ideas in debugging this. When I directly execute this query within XQUERY file, its working perfectly. Just when I pass it thru command line, its breaking.
Infact the actual .xq file also doesn't matter, as you pointed out, parsing from command line is broken. I tried "-d" switch and escaping spaces, but didn't help. Also, I tested, this is a valid XPATH query.
Please pardon my XQUERY knowledge, its really not my background.
- Mansi
On Thu, Nov 6, 2014 at 8:45 AM, Christian Grün christian.gruen@gmail.com wrote:
Hi Mansi,
~/Downloads/basex/bin/basex -bn='/Archives/*//class[contains(@name,"abc") and contains(@name,"pqr")]' get_paths.xq Stopped at /Users/mansiadmin/Documents/Research-Projects/BigData, 1/4: [XPDY0002] and: no context value bound.
It seems that "and" was interpreted as XPath step, so it seems as if something went wrong when parsing your query on command line (I doubt that it's something specific to BaseX).
Maybe you can simply try to output the query that causes the error, instead of trying to evaluate it?
Christian
However, below query works as a charm:
~/Downloads/basex/bin/basex
-bn='/Archives/*//class[contains(@name,"abc")]'
get_paths.xq
I am hoping, for first query above, its some syntactic issue at my end.
But,
couldn't fix it, so thought should point out. Please advise.
Code:
declare variable $n as xs:string external; declare option output:item-separator "
";
let $aPath := for $db in db:list() let $query := "declare variable $db external; " || "db:open($db)" || $n return xquery:eval($query, map { 'db': $db, 'query': $n })
let $paths := for $elem in $aPath return db:path($elem)
return distinct-values($paths)
On Mon, Nov 3, 2014 at 6:48 PM, Christian Grün <
christian.gruen@gmail.com>
wrote:
…in the meanwhile, could you please check if the bug has possibly been fixed in the latest 8.0 snapshot [1]?
[1] http://files.basex.org/releases/latest
On Tue, Nov 4, 2014 at 12:46 AM, Christian Grün christian.gruen@gmail.com wrote:
Improper use? Potential bug? Your feedback is welcome:
Sounds like a little bug indeed; I will check it tomorrow!
Contact: basex-talk@mailman.uni-konstanz.de Version: BaseX 7.9 Java: Oracle Corporation, 1.7.0_45 OS: Mac OS X, x86_64 Stack Trace: java.lang.NullPointerException at org.basex.query.value.item.Str.get(Str.java:49) at org.basex.query.func.FNDb.path(FNDb.java:489) at org.basex.query.func.FNDb.item(FNDb.java:128) at org.basex.query.expr.ParseExpr.iter(ParseExpr.java:45) at org.basex.query.func.FNDb.iter(FNDb.java:92) at org.basex.query.gflwor.GFLWOR$2.next(GFLWOR.java:78) at org.basex.query.MainModule$1.next(MainModule.java:98) at org.basex.core.cmd.AQuery.query(AQuery.java:91) at org.basex.core.cmd.XQuery.run(XQuery.java:22) at org.basex.core.Command.run(Command.java:329) at org.basex.core.Command.execute(Command.java:94) at org.basex.server.LocalSession.execute(LocalSession.java:121) at org.basex.server.Session.execute(Session.java:37) at org.basex.core.CLI.execute(CLI.java:106) at org.basex.BaseX.<init>(BaseX.java:123) at org.basex.BaseX.main(BaseX.java:42)
On Thu, Oct 30, 2014 at 5:54 AM, Christian Grün christian.gruen@gmail.com wrote:
Hi Mansi,
you have been close! It could work with the following query (I
haven't
tried it out, though):
_ get_query_result.xq ____________________
declare variable $n external; declare option output:item-separator "
";
let $aList := for $name in db:list() let $db := db:open($name) return xquery:eval($n, map { '': $db })
return distinct-values($aList) ______________________________________
In this code, I'm opening the database in the main loop, and I then bind it to the empty string. This way, the database will be the context of the query to be evaluated query, and you won't have to
deal
with bugs that arise from the concatenation of "db:open" and the
query
string.
> 1. Can we assign dynamic values as a value to a map's key ? > 2. Can I map have more than one key, in query:eval ?
This is both possible. As you see in the following query, you'll
again
have to declare the variables that you want to bind. I agree this causes a lot of code, so we may simplify it again in a future
version
of BaseX: ______________________________________
let $n := "/a/b/c" for $db in db:list() let $query := "declare variable $db external; " || "db:open($db)" || $n return xquery:eval($query, map { 'db': $db, 'query': $n }) ______________________________________
Best, Christian
--
- Mansi
--
- Mansi