Protocol Question

Tuesday, 23 July 2013 · 7 messages
GJ
Gerald de Jong23 Jul 2013 13:40 #
I'm trying to quickly prototype a REST server which uses BaseX for persistence using NodeJS. I'm able to create a session, add a document, query that document, and then close the session. Fine. But when I create a query that should return no results, it seems the NodeJS module for BaseX I'm using seems to completely misunderstand the result and never execute the callback. I looked at the protocol spec http://docs.basex.org/wiki/Server_Protocolbut it doesn't seem to give back what is specified here. I need a sanity check. The driver sends this:
-- Delving BV, Vasteland 8, Rotterdam http://www.delving.eu http://twitter.com/fluxe skype: beautifulcode +31629339805
GJ
Gerald de Jong23 Jul 2013 13:41 #
Woops, somehow sent before I intended. Just a sec.
Quoted text · Gerald de Jong · 23 lines
On Tue, Jul 23, 2013 at 1:40 PM, Gerald de Jong <gerald at delving.eu> wrote: > I'm trying to quickly prototype a REST server which uses BaseX for > persistence using NodeJS. > > I'm able to create a session, add a document, query that document, and > then close the session. Fine. > > But when I create a query that should return no results, it seems the > NodeJS module for BaseX I'm using seems to completely misunderstand the > result and never execute the callback. > > I looked at the protocol spec http://docs.basex.org/wiki/Server_Protocolbut it doesn't seem to give back what is specified here. I need a sanity > check. > > The driver sends this: > > -- > Delving BV, Vasteland 8, Rotterdam > http://www.delving.eu > http://twitter.com/fluxe > skype: beautifulcode > +31629339805 >
-- Delving BV, Vasteland 8, Rotterdam http://www.delving.eu http://twitter.com/fluxe skype: beautifulcode +31629339805
GJ
Gerald de Jong23 Jul 2013 13:43 #
So the driver sends a query for something that should give no results: '\u0000/somethingNotThere\u0000' It then receives, to my surprise: '\u0000\u0000' followed by: '1\u0000\u0000' then sends: '\u00041\u0000' and receives again: '\u0000\u0000' Are these proper responses.. is the driver misunderstanding them?
Quoted text · Gerald de Jong · 22 lines
On Tue, Jul 23, 2013 at 1:41 PM, Gerald de Jong <gerald at delving.eu> wrote: > Woops, somehow sent before I intended. Just a sec. > > > On Tue, Jul 23, 2013 at 1:40 PM, Gerald de Jong <gerald at delving.eu> wrote: > >> I'm trying to quickly prototype a REST server which uses BaseX for >> persistence using NodeJS. >> >> I'm able to create a session, add a document, query that document, and >> then close the session. Fine. >> >> But when I create a query that should return no results, it seems the >> NodeJS module for BaseX I'm using seems to completely misunderstand the >> result and never execute the callback. >> >> I looked at the protocol spec http://docs.basex.org/wiki/Server_Protocolbut it doesn't seem to give back what is specified here. I need a sanity >> check. >> >> The driver sends this: >> >> --
Delving BV, Vasteland 8, Rotterdam http://www.delving.eu http://twitter.com/fluxe skype: beautifulcode +31629339805
AB
Andy Bunce23 Jul 2013 15:54 #
Hi Gerald, Could that '\u0000\u0000' be part of an asynchronous response to some previous command? Otherwise it looks fine: -> '\u0000 () \u0000' // create query returning empty sequence <- '1\u0000 \u0000' //The 1 is the query handle. -> '\u0004 1 \u0000' //Execute the query with handle 1 <- '\u0000 \u0000' // no result no error Are you using https://npmjs.org/package/basex? If you can raise any problems or questions on github and I will take a look. /Andy
Quoted text · Gerald de Jong · 60 lines
On Tue, Jul 23, 2013 at 12:43 PM, Gerald de Jong <gerald at delving.eu> wrote: > So the driver sends a query for something that should give no results: > > '\u0000/somethingNotThere\u0000' > > It then receives, to my surprise: > > '\u0000\u0000' > > followed by: > > '1\u0000\u0000' > > then sends: > > '\u00041\u0000' > > and receives again: > > '\u0000\u0000' > > Are these proper responses.. is the driver misunderstanding them? > > > > On Tue, Jul 23, 2013 at 1:41 PM, Gerald de Jong <gerald at delving.eu> wrote: > >> Woops, somehow sent before I intended. Just a sec. >> >> >> On Tue, Jul 23, 2013 at 1:40 PM, Gerald de Jong <gerald at delving.eu>wrote: >> >>> I'm trying to quickly prototype a REST server which uses BaseX for >>> persistence using NodeJS. >>> >>> I'm able to create a session, add a document, query that document, and >>> then close the session. Fine. >>> >>> But when I create a query that should return no results, it seems the >>> NodeJS module for BaseX I'm using seems to completely misunderstand the >>> result and never execute the callback. >>> >>> I looked at the protocol spec http://docs.basex.org/wiki/Server_Protocolbut it doesn't seem to give back what is specified here. I need a sanity >>> check. >>> >>> The driver sends this: >>> >>> -- > Delving BV, Vasteland 8, Rotterdam > http://www.delving.eu > http://twitter.com/fluxe > skype: beautifulcode > +31629339805 > > _______________________________________________ > BaseX-Talk mailing list > BaseX-Talk at mailman.uni-konstanz.de > https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk > >
GJ
Gerald de Jong23 Jul 2013 16:09 #
Hi Andy! Thanks for getting back to me so quickly. I'm indeed using: package.json: "basex": "~0.6.1" I thought as well that it might be an old reply, but all I do is create a database, insert a document, and then query for something that is not there. I am using BaseX 7.6 if that makes any difference. Maybe you can see it. Here's the debug of what goes back and forth during the whole session: S1<< '1374588092554420000\u0000' S1>> 'admin\u0000' S1>> '713de454606e785a0666bd57e6554891\u0000' S1<< '\u0000' S1: authorized S1>> 'create db gumby\u0000' S1<< '\u0000Database \'gumby\' created in 5.01 ms.\n\u0000\u0000' response: { result: '', info: 'Database \'gumby\' created in 5.01 ms.\n', ok: true } .S1>> '\t/people.xml\u0000<people><person>Gumby\nman</person><something>else</something><person>Pokey\nhorse</person></people>\u0000' S1<< 'Path "people.xml" added in 1.88 ms.\n\u0000\u0000' response: { ok: true, result: 'Path "people.xml" added in 1.88 ms.\n' } .S1>> '\u0000//somethingNotThere\u0000' S1<< '0\u0000\u0000' response: { ok: true, result: '0' } S1>> '\u00040\u0000' S1<< '\u0000\u0000' And then it hangs, since the callback isn't called. If, instead, I do a query that does give results back I get the first value prefixed with \000b, which I believe is intended to indicate that the result is an "element". S1<< '\u000b<person>Gumby\nman</person>\u0000\u000b<person>Pokey\nhorse</person>\u0000\u0000\u0000' response: { ok: true, result: [ '\u000b<person>Gumby\nman</person>', '<person>Pokey\nhorse</person>' ] } {"ok":true,"result":["\u000b<person>Gumby\nman</person>","<person>Pokey\nhorse</person>"]} See what I mean? -Gerald
Quoted text · Andy Bunce · 80 lines
On Tue, Jul 23, 2013 at 3:54 PM, Andy Bunce <bunce.andy at gmail.com> wrote: > Hi Gerald, > > Could that '\u0000\u0000' be part of an asynchronous response to some > previous command? > > Otherwise it looks fine: > -> '\u0000 () \u0000' // create query returning empty sequence > <- '1\u0000 \u0000' //The 1 is the query handle. > -> '\u0004 1 \u0000' //Execute the query with handle 1 > <- '\u0000 \u0000' // no result no error > > Are you using https://npmjs.org/package/basex? If you can raise any > problems or questions on github and I will take a look. > > /Andy > > On Tue, Jul 23, 2013 at 12:43 PM, Gerald de Jong <gerald at delving.eu>wrote: > >> So the driver sends a query for something that should give no results: >> >> '\u0000/somethingNotThere\u0000' >> >> It then receives, to my surprise: >> >> '\u0000\u0000' >> >> followed by: >> >> '1\u0000\u0000' >> >> then sends: >> >> '\u00041\u0000' >> >> and receives again: >> >> '\u0000\u0000' >> >> Are these proper responses.. is the driver misunderstanding them? >> >> >> >> On Tue, Jul 23, 2013 at 1:41 PM, Gerald de Jong <gerald at delving.eu>wrote: >> >>> Woops, somehow sent before I intended. Just a sec. >>> >>> >>> On Tue, Jul 23, 2013 at 1:40 PM, Gerald de Jong <gerald at delving.eu>wrote: >>> >>>> I'm trying to quickly prototype a REST server which uses BaseX for >>>> persistence using NodeJS. >>>> >>>> I'm able to create a session, add a document, query that document, and >>>> then close the session. Fine. >>>> >>>> But when I create a query that should return no results, it seems the >>>> NodeJS module for BaseX I'm using seems to completely misunderstand the >>>> result and never execute the callback. >>>> >>>> I looked at the protocol spec >>>> http://docs.basex.org/wiki/Server_Protocol but it doesn't seem to give >>>> back what is specified here. I need a sanity check. >>>> >>>> The driver sends this: >>>> >>>> -- >> Delving BV, Vasteland 8, Rotterdam >> http://www.delving.eu >> http://twitter.com/fluxe >> skype: beautifulcode >> +31629339805 >> >> _______________________________________________ >> BaseX-Talk mailing list >> BaseX-Talk at mailman.uni-konstanz.de >> https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk >> >> >
-- Delving BV, Vasteland 8, Rotterdam http://www.delving.eu http://twitter.com/fluxe skype: beautifulcode +31629339805
GJ
Gerald de Jong23 Jul 2013 16:13 #
The state machine starts in "type" state.
case "type":
var r = self.popByte();
if (r) {
self.state = (r.data == "\0") ? "status" : "item";
progress = true;
}
break
But the first time it gets in here popByte returns an empty object for r. I would have expected it to get that they "type" is \000b. Maybe there's something wrong at the deeper interpretation level. This does look like a proper response from BaseX: S1<< '\u000b<person>Gumby\nman</person>\u0000\u000b<person>Pokey\nhorse</person>\u0000\u0000\u0000' Does it not?
Quoted text · Gerald de Jong · 156 lines
On Tue, Jul 23, 2013 at 4:09 PM, Gerald de Jong <gerald at delving.eu> wrote: > Hi Andy! Thanks for getting back to me so quickly. I'm indeed using: > > package.json: "basex": "~0.6.1" > > I thought as well that it might be an old reply, but all I do is create a > database, insert a document, and then query for something that is not there. > > I am using BaseX 7.6 if that makes any difference. > > Maybe you can see it. Here's the debug of what goes back and forth during > the whole session: > > S1<< > '1374588092554420000\u0000' > S1>> > 'admin\u0000' > S1>> > '713de454606e785a0666bd57e6554891\u0000' > S1<< > '\u0000' > S1: authorized > S1>> > 'create db gumby\u0000' > S1<< > '\u0000Database \'gumby\' created in 5.01 ms.\n\u0000\u0000' > response: { result: '', > info: 'Database \'gumby\' created in 5.01 ms.\n', > ok: true } > .S1>> > > '\t/people.xml\u0000<people><person>Gumby\nman</person><something>else</something><person>Pokey\nhorse</person></people>\u0000' > S1<< > 'Path "people.xml" added in 1.88 ms.\n\u0000\u0000' > response: { ok: true, result: 'Path "people.xml" added in 1.88 ms.\n' } > .S1>> > '\u0000//somethingNotThere\u0000' > S1<< > '0\u0000\u0000' > response: { ok: true, result: '0' } > S1>> > '\u00040\u0000' > S1<< > '\u0000\u0000' > > And then it hangs, since the callback isn't called. > > If, instead, I do a query that does give results back I get the first > value prefixed with \000b, which I believe is intended to indicate that the > result is an "element". > > S1<< > > '\u000b<person>Gumby\nman</person>\u0000\u000b<person>Pokey\nhorse</person>\u0000\u0000\u0000' > response: { ok: true, > result: > [ '\u000b<person>Gumby\nman</person>', > '<person>Pokey\nhorse</person>' ] } > > {"ok":true,"result":["\u000b<person>Gumby\nman</person>","<person>Pokey\nhorse</person>"]} > > See what I mean? > > -Gerald > > > On Tue, Jul 23, 2013 at 3:54 PM, Andy Bunce <bunce.andy at gmail.com> wrote: > >> Hi Gerald, >> >> Could that '\u0000\u0000' be part of an asynchronous response to some >> previous command? >> >> Otherwise it looks fine: >> -> '\u0000 () \u0000' // create query returning empty sequence >> <- '1\u0000 \u0000' //The 1 is the query handle. >> -> '\u0004 1 \u0000' //Execute the query with handle 1 >> <- '\u0000 \u0000' // no result no error >> >> Are you using https://npmjs.org/package/basex? If you can raise any >> problems or questions on github and I will take a look. >> >> /Andy >> >> On Tue, Jul 23, 2013 at 12:43 PM, Gerald de Jong <gerald at delving.eu>wrote: >> >>> So the driver sends a query for something that should give no results: >>> >>> '\u0000/somethingNotThere\u0000' >>> >>> It then receives, to my surprise: >>> >>> '\u0000\u0000' >>> >>> followed by: >>> >>> '1\u0000\u0000' >>> >>> then sends: >>> >>> '\u00041\u0000' >>> >>> and receives again: >>> >>> '\u0000\u0000' >>> >>> Are these proper responses.. is the driver misunderstanding them? >>> >>> >>> >>> On Tue, Jul 23, 2013 at 1:41 PM, Gerald de Jong <gerald at delving.eu>wrote: >>> >>>> Woops, somehow sent before I intended. Just a sec. >>>> >>>> >>>> On Tue, Jul 23, 2013 at 1:40 PM, Gerald de Jong <gerald at delving.eu>wrote: >>>> >>>>> I'm trying to quickly prototype a REST server which uses BaseX for >>>>> persistence using NodeJS. >>>>> >>>>> I'm able to create a session, add a document, query that document, and >>>>> then close the session. Fine. >>>>> >>>>> But when I create a query that should return no results, it seems the >>>>> NodeJS module for BaseX I'm using seems to completely misunderstand the >>>>> result and never execute the callback. >>>>> >>>>> I looked at the protocol spec >>>>> http://docs.basex.org/wiki/Server_Protocol but it doesn't seem to >>>>> give back what is specified here. I need a sanity check. >>>>> >>>>> The driver sends this: >>>>> >>>>> -- >>> Delving BV, Vasteland 8, Rotterdam >>> http://www.delving.eu >>> http://twitter.com/fluxe >>> skype: beautifulcode >>> +31629339805 >>> >>> _______________________________________________ >>> BaseX-Talk mailing list >>> BaseX-Talk at mailman.uni-konstanz.de >>> https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk >>> >>> >> > > > -- > Delving BV, Vasteland 8, Rotterdam > http://www.delving.eu > http://twitter.com/fluxe > skype: beautifulcode > +31629339805 >
-- Delving BV, Vasteland 8, Rotterdam http://www.delving.eu http://twitter.com/fluxe skype: beautifulcode +31629339805
AB
Andy Bunce23 Jul 2013 16:42 #
I have created an issue [1] and will take a look this evening. I suspect it is my problem rather than BaseX. I have never been happy with that parsing code :-) I see there are now 3 Node BaseX clients [2] I think Hans simple-basex has a lot of good ideas regarding the parsing. /Andy [1] https://github.com/apb2006/basex-node/issues/10 [2] https://npmjs.org/search?q=basex
Quoted text · Gerald de Jong · 196 lines
On Tue, Jul 23, 2013 at 3:13 PM, Gerald de Jong <gerald at delving.eu> wrote: > The state machine starts in "type" state. > > case "type": > var r = self.popByte(); > if (r) { > self.state = (r.data == "\0") ? "status" : "item"; > progress = true; > } > break > > But the first time it gets in here popByte returns an empty object for r. > I would have expected it to get that they "type" is \000b. Maybe there's > something wrong at the deeper interpretation level. This does look like a > proper response from BaseX: > > S1<< > > '\u000b<person>Gumby\nman</person>\u0000\u000b<person>Pokey\nhorse</person>\u0000\u0000\u0000' > > Does it not? > > > On Tue, Jul 23, 2013 at 4:09 PM, Gerald de Jong <gerald at delving.eu> wrote: > >> Hi Andy! Thanks for getting back to me so quickly. I'm indeed using: >> >> package.json: "basex": "~0.6.1" >> >> I thought as well that it might be an old reply, but all I do is create a >> database, insert a document, and then query for something that is not there. >> >> I am using BaseX 7.6 if that makes any difference. >> >> Maybe you can see it. Here's the debug of what goes back and forth >> during the whole session: >> >> S1<< >> '1374588092554420000\u0000' >> S1>> >> 'admin\u0000' >> S1>> >> '713de454606e785a0666bd57e6554891\u0000' >> S1<< >> '\u0000' >> S1: authorized >> S1>> >> 'create db gumby\u0000' >> S1<< >> '\u0000Database \'gumby\' created in 5.01 ms.\n\u0000\u0000' >> response: { result: '', >> info: 'Database \'gumby\' created in 5.01 ms.\n', >> ok: true } >> .S1>> >> >> '\t/people.xml\u0000<people><person>Gumby\nman</person><something>else</something><person>Pokey\nhorse</person></people>\u0000' >> S1<< >> 'Path "people.xml" added in 1.88 ms.\n\u0000\u0000' >> response: { ok: true, result: 'Path "people.xml" added in 1.88 ms.\n' } >> .S1>> >> '\u0000//somethingNotThere\u0000' >> S1<< >> '0\u0000\u0000' >> response: { ok: true, result: '0' } >> S1>> >> '\u00040\u0000' >> S1<< >> '\u0000\u0000' >> >> And then it hangs, since the callback isn't called. >> >> If, instead, I do a query that does give results back I get the first >> value prefixed with \000b, which I believe is intended to indicate that the >> result is an "element". >> >> S1<< >> >> '\u000b<person>Gumby\nman</person>\u0000\u000b<person>Pokey\nhorse</person>\u0000\u0000\u0000' >> response: { ok: true, >> result: >> [ '\u000b<person>Gumby\nman</person>', >> '<person>Pokey\nhorse</person>' ] } >> >> {"ok":true,"result":["\u000b<person>Gumby\nman</person>","<person>Pokey\nhorse</person>"]} >> >> See what I mean? >> >> -Gerald >> >> >> On Tue, Jul 23, 2013 at 3:54 PM, Andy Bunce <bunce.andy at gmail.com> wrote: >> >>> Hi Gerald, >>> >>> Could that '\u0000\u0000' be part of an asynchronous response to some >>> previous command? >>> >>> Otherwise it looks fine: >>> -> '\u0000 () \u0000' // create query returning empty sequence >>> <- '1\u0000 \u0000' //The 1 is the query handle. >>> -> '\u0004 1 \u0000' //Execute the query with handle 1 >>> <- '\u0000 \u0000' // no result no error >>> >>> Are you using https://npmjs.org/package/basex? If you can raise any >>> problems or questions on github and I will take a look. >>> >>> /Andy >>> >>> On Tue, Jul 23, 2013 at 12:43 PM, Gerald de Jong <gerald at delving.eu>wrote: >>> >>>> So the driver sends a query for something that should give no results: >>>> >>>> '\u0000/somethingNotThere\u0000' >>>> >>>> It then receives, to my surprise: >>>> >>>> '\u0000\u0000' >>>> >>>> followed by: >>>> >>>> '1\u0000\u0000' >>>> >>>> then sends: >>>> >>>> '\u00041\u0000' >>>> >>>> and receives again: >>>> >>>> '\u0000\u0000' >>>> >>>> Are these proper responses.. is the driver misunderstanding them? >>>> >>>> >>>> >>>> On Tue, Jul 23, 2013 at 1:41 PM, Gerald de Jong <gerald at delving.eu>wrote: >>>> >>>>> Woops, somehow sent before I intended. Just a sec. >>>>> >>>>> >>>>> On Tue, Jul 23, 2013 at 1:40 PM, Gerald de Jong <gerald at delving.eu>wrote: >>>>> >>>>>> I'm trying to quickly prototype a REST server which uses BaseX for >>>>>> persistence using NodeJS. >>>>>> >>>>>> I'm able to create a session, add a document, query that document, >>>>>> and then close the session. Fine. >>>>>> >>>>>> But when I create a query that should return no results, it seems the >>>>>> NodeJS module for BaseX I'm using seems to completely misunderstand the >>>>>> result and never execute the callback. >>>>>> >>>>>> I looked at the protocol spec >>>>>> http://docs.basex.org/wiki/Server_Protocol but it doesn't seem to >>>>>> give back what is specified here. I need a sanity check. >>>>>> >>>>>> The driver sends this: >>>>>> >>>>>> -- >>>> Delving BV, Vasteland 8, Rotterdam >>>> http://www.delving.eu >>>> http://twitter.com/fluxe >>>> skype: beautifulcode >>>> +31629339805 >>>> >>>> _______________________________________________ >>>> BaseX-Talk mailing list >>>> BaseX-Talk at mailman.uni-konstanz.de >>>> https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk >>>> >>>> >>> >> >> >> -- >> Delving BV, Vasteland 8, Rotterdam >> http://www.delving.eu >> http://twitter.com/fluxe >> skype: beautifulcode >> +31629339805 >> > > > > -- > Delving BV, Vasteland 8, Rotterdam > http://www.delving.eu > http://twitter.com/fluxe > skype: beautifulcode > +31629339805 > > _______________________________________________ > BaseX-Talk mailing list > BaseX-Talk at mailman.uni-konstanz.de > https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk > >

⚡Generated with XQuery