use of org.xmldb.api.modules.XQueryService in project exist by eXist-db.
the class XQueryUpdateAction method execute.
@Override
public boolean execute() throws XMLDBException {
final Collection col = DatabaseManager.getCollection(collectionPath, TestUtils.ADMIN_DB_USER, TestUtils.ADMIN_DB_PWD);
final XQueryService service = (XQueryService) col.getService("XQueryService", "1.0");
service.query(query);
return true;
}
use of org.xmldb.api.modules.XQueryService in project exist by eXist-db.
the class DocumentUpdateTest method execQuery.
private String execQuery(String query) throws XMLDBException {
XQueryService service = (XQueryService) testCollection.getService("XQueryService", "1.0");
ResourceSet result = service.query(query);
assertEquals(result.getSize(), 1);
return result.getResource(0).getContent().toString();
}
use of org.xmldb.api.modules.XQueryService in project exist by eXist-db.
the class DocumentUpdateTest method update.
/**
* Test if the doc, collection and document functions are correctly
* notified upon document updates. Call a function once on the empty collection,
* then call it again after a document was added, and compare the results.
*/
@Test
public void update() throws XMLDBException {
String imports = "import module namespace xdb='http://exist-db.org/xquery/xmldb';\n" + "import module namespace util='http://exist-db.org/xquery/util';\n";
// TEST 1: doc() function
String query = imports + "declare function local:get-doc($path as xs:string) {\n" + " if (doc-available($path)) then doc($path) else ()\n" + "};\n" + "let $col := xdb:create-collection('/db', 'testup')\n" + "let $path := '/db/testup/test1.xml'\n" + "let $doc := xdb:store($col, 'test1.xml', <test><n>1</n></test>)\n" + "let $d1 := local:get-doc($path)\n" + "let $remove := xdb:remove('/db/testup', 'test1.xml')\n" + "return string-join((string(count(local:get-doc($path))), string(doc-available($path))), ' ')";
String result = execQuery(query);
assertEquals(result, "0 false");
// TEST 2: doc()
query = imports + "declare function local:get-doc($path as xs:string) {\n" + " if (doc-available($path)) then doc($path) else ()\n" + "};\n" + "let $col := xdb:create-collection('/db', 'testup')\n" + "let $path := '/db/testup/test1.xml'\n" + "let $d1 := local:get-doc($path)\n" + "let $doc := xdb:store($col, 'test1.xml', <test><n>1</n></test>)\n" + "return string-join((string(count(local:get-doc($path))), string(doc-available($path))), ' ')";
result = execQuery(query);
assertEquals(result, "1 true");
// TEST 3: collection()
query = imports + "declare function local:xpath($collection as xs:string) {\n" + " for $c in collection($collection) return $c//n\n" + "};\n" + "let $col := xdb:create-collection('/db', 'testup')\n" + "let $path := '/db/testup'\n" + "let $d1 := local:xpath($path)//n/text()\n" + "let $doc := xdb:store($col, 'test1.xml', <test><n>1</n></test>)\n" + "return local:xpath($path)/text()";
result = execQuery(query);
assertEquals(result, "1");
// TEST 4: 'update insert' statement
query = imports + "declare function local:xpath($collection as xs:string) {\n" + " collection($collection)\n" + "};\n" + "let $col := xdb:create-collection('/db', 'testup')\n" + "let $path := '/db/testup'\n" + "let $d1 := local:xpath($path)//n\n" + "let $doc := xdb:store($col, 'test1.xml', <test><n>1</n></test>)\n" + "return (\n" + " update insert <n>2</n> into collection($path)/test,\n" + " count(local:xpath($path)//n)\n" + ")";
result = execQuery(query);
assertEquals(result, "2");
// TEST 5: 'update replace' statement
query = imports + "let $doc := xdb:store('/db', 'test1.xml', " + "<test> " + "<link href=\"features\"/> " + "(: it works with only 1 link :) " + "<link href=\"features/test\"/> " + "</test>) " + "let $links := doc($doc)/test/link/@href " + "return " + "for $link in $links " + "return ( " + "update replace $link with \"123\", " + "(: without the output on the next line, it works :) " + "xs:string($link) " + ")";
XQueryService service = (XQueryService) testCollection.getService("XQueryService", "1.0");
ResourceSet r = service.query(query);
assertEquals(r.getSize(), 2);
assertEquals(r.getResource(0).getContent().toString(), "123");
assertEquals(r.getResource(1).getContent().toString(), "123");
}
use of org.xmldb.api.modules.XQueryService in project exist by eXist-db.
the class DuplicateAttributesTest method appendStoredAttrFail.
/**
* Add attribute to element which already has an attribute of that name.
*/
@Test(expected = XMLDBException.class)
public void appendStoredAttrFail() throws XMLDBException {
XQueryService xqs = (XQueryService) testCollection.getService("XQueryService", "1.0");
String query = "let $a := \n" + "<node attr=\"a\" b=\"c\">{doc(\"/db/test/stored1.xml\")//@attr}</node>" + "return $a";
xqs.query(query);
}
use of org.xmldb.api.modules.XQueryService in project exist by eXist-db.
the class DuplicateAttributesTest method appendIdref.
/**
* Add attribute to element which already has an
* attribute of that name (using idref).
*/
@Test(expected = XMLDBException.class)
public void appendIdref() throws XMLDBException {
XQueryService xqs = (XQueryService) testCollection.getService("XQueryService", "1.0");
String query = "<results>{fn:idref(('id1', 'id2'), doc('/db/test/docdtd.xml')/IDS)}</results>";
ResourceSet result = xqs.query(query);
result.getResource(0).getContent();
}
Aggregations