package com.bagri.xqj; import static com.bagri.support.util.FileUtils.readTextFile; import static org.junit.Assert.*; import java.io.IOException; import javax.xml.namespace.QName; import javax.xml.xquery.XQConnection; import javax.xml.xquery.XQDataSource; import javax.xml.xquery.XQException; import javax.xml.xquery.XQExpression; import javax.xml.xquery.XQItemType; import javax.xml.xquery.XQPreparedExpression; import javax.xml.xquery.XQResultSequence; import javax.xml.xquery.XQSequence; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; @Ignore public class BagriXQAxisTest { private static XQDataSource xqds; private static long axisId; private XQConnection xqc; @BeforeClass public static void setUpBeforeClass() throws Exception { String dName = "..\\..\\etc\\samples\\test\\"; String xml; try { xml = readTextFile(dName + "axis.xml"); } catch (IOException ex) { throw new XQException(ex.getMessage()); } xqds = new BagriXQDataSource(); xqds.setProperty(BagriXQDataSource.ADDRESS, "localhost:10500"); xqds.setProperty(BagriXQDataSource.SCHEMA, "default"); xqds.setProperty(BagriXQDataSource.USER, "guest"); xqds.setProperty(BagriXQDataSource.PASSWORD, "password"); xqds.setProperty(BagriXQDataSource.XQ_PROCESSOR, "com.bagri.xquery.saxon.XQProcessorClient"); xqds.setProperty(BagriXQDataSource.XDM_REPOSITORY, "com.bagri.client.hazelcast.impl.SchemaRepositoryImpl"); String query = "declare namespace bgdb=\"http://bagridb.com/bdb\";\n" + "declare variable $sec external;\n\n" + "for $id in bgdb:store-document($sec)\n" + "return $id\n"; XQConnection xqc = xqds.getConnection(); try { XQPreparedExpression xqpe = xqc.prepareExpression(query); xqpe.bindString(new QName("sec"), xml, xqc.createAtomicType(XQItemType.XQBASETYPE_STRING)); XQSequence xqs = xqpe.executeQuery(); if (xqs.next()) { axisId = xqs.getLong(); xqpe.close(); } else { xqpe.close(); throw new XQException("no response from store-document function"); } } finally { xqc.close(); } } @AfterClass public static void tearDownAfterClass() throws Exception { XQConnection xqc = xqds.getConnection(); try { XQExpression xqe = xqc.createExpression(); xqe.bindLong(new QName("docId"), axisId, xqc.createAtomicType(XQItemType.XQBASETYPE_LONG)); xqe.executeCommand("removeDocument($docId)"); xqe.close(); } finally { xqc.close(); } } @Before public void setUp() throws Exception { xqc = xqds.getConnection(); } @After public void tearDown() throws Exception { if (xqc != null) xqc.close(); } //@Test public void queryChildTest() throws XQException { String query = //"declare namespace s=\"http://tpox-benchmark.com/security\";\n" + //"for $sec in fn:collection(\"/{http://tpox-benchmark.com/security}Security\")/s:Security\n" + "for $e in fn:collection(\"/document\")/document\n" + //"where $sec/s:Symbol=$sym\n" + //'IBM'\n" + "return $e//child\n"; XQExpression xqe = xqc.createExpression(); //xqe.bindString(new QName("doc"), xml, xqc.createAtomicType(XQItemType.XQBASETYPE_STRING)); XQResultSequence xqrs = xqe.executeQuery(query); assertNotNull(xqrs); assertFalse(xqrs.isClosed()); boolean found = false; while (xqrs.next()) { System.out.println(xqrs.getItemAsString(null)); found = true; } } @Test public void queryParentTest() throws XQException { String query = //"declare namespace s=\"http://tpox-benchmark.com/security\";\n" + //"for $sec in fn:collection(\"/{http://tpox-benchmark.com/security}Security\")/s:Security\n" + "for $e in fn:collection(\"/document\")\n" + // /document\n" + //"where $e//child/parent::*[fn:count(*)=3]\n" + //"where fn:count($e//child/parent::*)=3\n" + "where $e/document/root//*[.='IBM']\n" + "return $e\n"; // starts with /document/root; // descendants of document/root; kind = text; XQExpression xqe = xqc.createExpression(); XQResultSequence xqrs = xqe.executeQuery(query); assertNotNull(xqrs); assertFalse(xqrs.isClosed()); boolean found = false; while (xqrs.next()) { System.out.println(xqrs.getItemAsString(null)); found = true; } } }