I'm trying to use BaseX as a persistence layer in a project (together with
XStream). I have a few questions and I'm not having any luck with the
documentation.
I've gotten pretty far. I have a User object (simplified for this example)
with an id (UUID), a username (String), and a password (String). XStream
turns this into:
<User>
<id>98bdb472-97ad-4de1-b1c6-a482d7f06d94</id>
<username>Chas</username>
<password>secret</password>
</User>
I've created a DB called "db" (clever, huh?):
new CreateDB("cop", "<blog><users/></blog>").execute(context)
QUESTION: If I rerun the above, will it overwrite the DB if it already
exists, or will it just open the existing DB? Can't find anything in the
API about that.
Then I save my User like this:
new XQuery("insert node" + chas + " into /blog/users").execute(context)
where chas is the above XML.
This works great! When I need to reinflate the object, I just do:
chas = new XQuery("""
for $x in /forum/users/User
where $x/username="Chas"
return $x
""").execute(context)
Then I use XStream to reinflate the object.
Any suggestions for improvement?
So now the problem. I need to update this object in the database. The
simplest way is just to update the whole object. So I change my username
and use XStream to create the new XML:
<User>
<id>98bdb472-97ad-4de1-b1c6-a482d7f06d94</id>
<username>Charles</username>
<password>secret</password>
</User>
I read that one must use put() to export the changes, but maybe I'm
misunderstanding this. I'm have this:
for $x in /forum/users/User
where $x/username="Chas"
return replace node $x with " + chas
This and seems to work, but then when I try to delete the node thus:
for $x in /forum/users/User
where $x/password="secret"
return delete nodes $x
It does not work. What am I missing?
Thanks for any help. If this thing works, I'm happy to open it up so
others can work on it, too.
Chas.