package org.basex.server; import java.io.IOException; import java.io.OutputStream; import org.basex.core.Context; import org.basex.io.in.ArrayInput; import org.basex.io.out.ArrayOutput; /** * This class defines all methods for iteratively evaluating queries locally. * All data is interpreted by the {@link QueryListener}. * * @author BaseX Team 2005-12, BSD License * @author Rositsa Shadura * @author Dimitar Popov */ public class LocalQuery extends Query { /** Active query listener. */ private final QueryListener ql; /** * Constructor. Query output will be written to the provided output stream. * All methods will return {@code null}. * @param q query string * @param ctx database context * @param o output stream to write query output */ LocalQuery(final String q, final Context ctx, final OutputStream o) { ql = new QueryListener(q, ctx); out = o; } @Override public void bind(final String n, final Object v, final String t) throws IOException { ql.bind(n, v, t); } @Override protected void cache() throws IOException { final ArrayOutput ao = new ArrayOutput(); ql.execute(true, ao, true); cache(new ArrayInput(ao.toArray())); } @Override public String execute() throws IOException { final OutputStream os = out == null ? new ArrayOutput() : out; ql.execute(false, os, false); return out == null ? os.toString() : null; } @Override public String info() throws IOException { return ql.info(); } @Override public String options() throws IOException { return ql.options(); } @Override public void close() { } }