Yes, I figured that. I would have been nice if the ADD(09), REPLACE(0C), STORE(0D) protocol commands would have accepted a database name as a first parameter, like their corresponding Database Module functions. This would make it easier to work on multiple databases.
On Fri, Jan 29, 2016 at 10:00 AM, Christian Grün christian.gruen@gmail.com wrote:
However, what I really need is a way to do db:store and db:replace via Xquery with an InputStream (e.g. without requiring the open/close
commands).
That will be difficult, because data to be inserted may occur anywhere inside an XQuery expression..
On Fri, Jan 29, 2016 at 4:50 AM, Christian Grün <
christian.gruen@gmail.com>
wrote:
Please be more specific: Could you give me the exact reference to the class you have extended?
If it’s [1], the following might work:
public void execute(final OutputStream output) throws IOException { out.write(4); send(id); receive(in, output); if(!ok()) throw new IOException(receive()); }
Did you try to use the BaseXClient.execute method as well?
BaseXClient client = new BaseXClient("localhost", 1984, "admin",
"admin"); try { ByteArrayOutputStream os = new ByteArrayOutputStream(); client.execute("xquery db:retrieve('db', 'file.bin)", os); final byte[] data = os.toByteArray(); System.out.println("Size of binary data: " + data.length); } finally { client.close(); }
[1]
https://github.com/BaseXdb/basex/blob/master/basex-examples/src/main/java/or...
On Thu, Jan 28, 2016 at 4:57 PM, E. Wray Johnson <
wray.johnson@gmail.com>
wrote:
So the problem was my fault as I suspected. And I fixed it and I am
now
getting the correct data. I was attempting to retrieve a binary/raw document using a Java client without the open/close which locks a database by switching from using a retrieve command to db:retrieve XQuery. I added the following method to the client Query object. It works fine, but
let
me know if you see anything wrong with it. I particular, is the
if(!ok())
needed? I suggest this as an enhancement. Also, is it possible to achieve, by enhancement, similar results using db:store in an XQuery from Java client and an InputStream?
public void execute(final OutputStream output) throws IOException { out.write(4); send(id); if (in.read() > 0) { receive(in, output); } info = receive(); if (!ok()) { throw new IOException(info); } }
On Thu, Jan 28, 2016 at 10:01 AM, Christian Grün christian.gruen@gmail.com wrote:
I am getting the incorrect data downloaded as Mike Engledew said he used the "raw" output method to fix. However, "raw" is not listed as one of the valid types for this option. So how should I ensure binary files get downloaded. accurately?
Any SSCCE?
On Thu, Jan 28, 2016 at 3:08 AM, Christian Grün christian.gruen@gmail.com wrote: > > See here: http://docs.basex.org/wiki/Serialization > > Am 28.01.2016 7:13 vorm. schrieb "E. Wray Johnson" > wray.johnson@gmail.com: >> >> With 8.4... >> >> declare option output:method "raw"; >> >> I get >> >> [SEPM0016] Value of 'method' must be one of >> (xml,xhtml,html,json,csv,text,adaptive,basex). >> >> On Sat, Jan 16, 2016 at 2:06 PM, Mike Engledew >> mike.engledew@gmail.com >> wrote: >>> >>> If like me your using BaseX 8.3.1 don't forget to add ... >>> >>> declare option output:method "raw"; >>> >>> before the db:retrieve() otherwise you won't get back what you >>> put >>> in. >>> I learned this the hard way trying to extract binary files that >>> were >>> stored in codepage IBM1047 and it took me a while to figure out >>> why >>> they >>> came back translated; >>> >>> >>> On Fri, Jan 15, 2016 at 11:11 AM, E. Wray Johnson >>> wray.johnson@gmail.com wrote: >>>> >>>> When using the sample Java client to store/retrieve binary/raw >>>> files >>>> I >>>> have to execute separate open/close commands. It is my >>>> understanding that >>>> this locks the database. In a multi-user scenario, such
locking
>>>> is >>>> undesirable as binary/raw files can be quite large. And since >>>> there >>>> is no >>>> alteration of the indexes etc during such operations, is there
a
>>>> better way? >>>> Also, why isn't there a corresponding retrieve method on the
Java
>>>> client, >>>> similar to the store method? >>>> >>>> My code to store: >>>> BaseXClient session = new BaseXClient(host, port, username, >>>> password); >>>> session.execute("open " + database); >>>> session.store(path, inputStream); >>>> session.execute("close"); >>>> >>>> My code to retrieve: >>>> BaseXClient session = new BaseXClient(host, port, username, >>>> password); >>>> session.execute("open " + database); >>>> session.execute("retrieve " + path, outputStream); >>>> session.execute("close"); >>>> >>>> Thanks in advance! >>>> >>>> >>> >>
On Thu, Jan 28, 2016 at 3:08 AM, Christian Grün christian.gruen@gmail.com wrote:
See here: http://docs.basex.org/wiki/Serialization
Am 28.01.2016 7:13 vorm. schrieb "E. Wray Johnson" wray.johnson@gmail.com:
With 8.4...
declare option output:method "raw";
I get
[SEPM0016] Value of 'method' must be one of (xml,xhtml,html,json,csv,text,adaptive,basex).
On Sat, Jan 16, 2016 at 2:06 PM, Mike Engledew mike.engledew@gmail.com wrote: > > If like me your using BaseX 8.3.1 don't forget to add ... > > declare option output:method "raw"; > > before the db:retrieve() otherwise you won't get back what you put > in. > I learned this the hard way trying to extract binary files that
were
> stored in codepage IBM1047 and it took me a while to figure out why > they > came back translated; > > > On Fri, Jan 15, 2016 at 11:11 AM, E. Wray Johnson > wray.johnson@gmail.com wrote: >> >> When using the sample Java client to store/retrieve binary/raw
files
>> I >> have to execute separate open/close commands. It is my >> understanding that >> this locks the database. In a multi-user scenario, such locking
is
>> undesirable as binary/raw files can be quite large. And since
there
>> is no >> alteration of the indexes etc during such operations, is there a >> better way? >> Also, why isn't there a corresponding retrieve method on the Java >> client, >> similar to the store method? >> >> My code to store: >> BaseXClient session = new BaseXClient(host, port, username, >> password); >> session.execute("open " + database); >> session.store(path, inputStream); >> session.execute("close"); >> >> My code to retrieve: >> BaseXClient session = new BaseXClient(host, port, username, >> password); >> session.execute("open " + database); >> session.execute("retrieve " + path, outputStream); >> session.execute("close"); >> >> Thanks in advance! >> >> >