Hi Jeff,
the BINDINGS options can only be used to bind single items to variables. Some options to solve this problem are to..
– split your strings within the query, using a unique delimiter character..
declare variable $ids external; let $ids := tokenize($ids, "~") let $count := count($ids) return ...
– go one level deeper and create a QueryProcessor instance that gives you full access to the query architecture:
Context context = new Context(); String query = "declare variable $ids external; $ids"; QueryProcessor qp = new QueryProcessor(query, context); String[] vals = { "a", "b", "c" }; qp.bind("ids", vals); System.out.println(qp.value()); qp.close();
– have a look at the XQJ API (currently client/server-based, to be extended to local/embedded mode soon).
Hope this helps, Christian ___________________________
On Fri, Feb 8, 2013 at 4:54 PM, Lansing, Jeff J CIV SPAWARSYSCEN-PACIFIC, 56250 jeff.lansing@navy.mil wrote:
How can I bind an external variable to a sequence? I see the syntax trick for escaping commas, but I still don't get a bound sequence. I tried this:
import org.basex.core.*; import org.basex.core.cmd.*; import org.junit.*;
public class BindingTest {
String var = "$ids="; String seq = "('a',,'b',,'c')"; String query = "" + "declare variable $ids external; " + "let $count := count($ids) " + "return if($count gt 1) then element ids { $ids } " + "else error(QName('urn:err', 'not_enough_ids'), xs:string($count)) " ; /**
- test binding external variable to sequence
*/ @Test public void test() { try { Context context = new Context(); new Set(Prop.BINDINGS, var + seq).execute(context); String result = new XQuery(query).execute(context); context.close(); System.out.println(result); } catch(Exception e) { System.err.println(e); } } } I expect to get <ids>...</ids> but instead I get the error. I'm using v7.5, Java 7u13.
BaseX-Talk mailing list BaseX-Talk@mailman.uni-konstanz.de https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk