protected void assertNodesNotFound( String queryString, String queryType ) throws RepositoryException { QueryManager queryManager = session.getWorkspace().getQueryManager(); Query query = queryManager.createQuery(queryString, queryType); QueryResult result = query.execute(); List<String> actualNodePaths = new ArrayList<String>(); for (NodeIterator nodeIterator = result.getNodes(); nodeIterator.hasNext();) { actualNodePaths.add(nodeIterator.nextNode().getPath().toLowerCase()); } assertTrue("expected empty result, but: " + actualNodePaths.toString(), actualNodePaths.isEmpty()); } }
protected void assertNodesAreFound( String queryString, String queryType, String... expectedNodesPaths ) throws RepositoryException { QueryManager queryManager = session.getWorkspace().getQueryManager(); Query query = queryManager.createQuery(queryString, queryType); QueryResult result = query.execute(); List<String> actualNodePaths = new ArrayList<String>(); for (NodeIterator nodeIterator = result.getNodes(); nodeIterator.hasNext();) { actualNodePaths.add(nodeIterator.nextNode().getPath().toLowerCase()); } List<String> expectedNodePaths = Arrays.asList(expectedNodesPaths); assertEquals(expectedNodePaths.toString() + ":" + actualNodePaths.toString(), expectedNodePaths.size(), actualNodePaths.size()); for (String expectedPath : expectedNodePaths) { assertTrue(expectedPath + " not found", actualNodePaths.remove(expectedPath.toLowerCase())); } }
protected void query( String sql, String language, long numberOfResults, Predicate predicate ) throws Exception { Query query = ((Session)session).getWorkspace().getQueryManager().createQuery(sql, language); QueryResult result = query.execute(); assertResults(query, result, numberOfResults, predicate); }
final Query query = queryManager.createQuery(sql, Query.JCR_SQL2); final QueryResult result = query.execute();
@SuppressWarnings( "deprecation" ) @Test public void shouldBeAbleToExecuteXPathQueryToFindAllUnstructuredNodesOrderedByPropertyValue() throws RepositoryException { QueryManager manager = session.getWorkspace().getQueryManager(); Query query = manager.createQuery("//element(*,nt:unstructured) order by @jcr:primaryType", Query.XPATH); QueryResult result = query.execute(); validateQuery().rowCount(24).hasColumns("jcr:primaryType", "jcr:path", "jcr:score").validate(query, result); query = manager.createQuery("//element(*,car:Car) order by @car:year", Query.XPATH); result = query.execute(); validateQuery().rowCount(13).hasColumns("car:year", "jcr:path", "jcr:score").validate(query, result); }
@Test public void shouldNotIndexNotQueryableConnector() throws Exception { federationManager.createProjection("/testRoot", "mock-source-non-queryable", MockConnector.DOC2_LOCATION, "federated2"); Workspace workspace = session.getWorkspace(); workspace.reindex(); QueryManager queryManager = workspace.getQueryManager(); Query query = queryManager.createQuery("select * FROM [nt:base] WHERE [jcr:path] LIKE '/testRoot/federated2'", Query.JCR_SQL2); assertEquals(0, query.execute().getNodes().getSize()); query = queryManager.createQuery("select * FROM [nt:base] WHERE [jcr:path] LIKE '/testRoot/federated2/federated3'", Query.JCR_SQL2); assertEquals(0, query.execute().getNodes().getSize()); Node externalNode = session.getNode("/testRoot/federated2/federated3"); externalNode.setProperty("test", "a value"); session.save(); query = queryManager.createQuery("select * FROM [nt:base] as a WHERE a.test='a value'", Query.JCR_SQL2); assertEquals(0, query.execute().getNodes().getSize()); }
@Test public void shouldIndexProjectionsAndExternalNodes() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "federated1"); federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC2_LOCATION, "federated2"); Workspace workspace = session.getWorkspace(); workspace.reindex(); QueryManager queryManager = workspace.getQueryManager(); Query query = queryManager.createQuery("select * FROM [nt:base] WHERE [jcr:path] LIKE '/testRoot/federated1'", Query.JCR_SQL2); assertEquals(1, query.execute().getNodes().getSize()); query = queryManager.createQuery("select * FROM [nt:base] WHERE [jcr:path] LIKE '/testRoot/federated2'", Query.JCR_SQL2); assertEquals(1, query.execute().getNodes().getSize()); Node externalNode = session.getNode("/testRoot/federated2/federated3"); externalNode.setProperty("test", "a value"); session.save(); query = queryManager.createQuery("select * FROM [nt:base] as a WHERE a.test='a value'", Query.JCR_SQL2); assertEquals(1, query.execute().getNodes().getSize()); query = queryManager.createQuery("select * FROM [nt:base] WHERE [jcr:path] LIKE '/testRoot/federated2/federated3'", Query.JCR_SQL2); assertEquals(1, query.execute().getNodes().getSize()); }
org.modeshape.jcr.api.Workspace workspace2 = (org.modeshape.jcr.api.Workspace)session2.getWorkspace(); query = workspace2.getQueryManager().createQuery( "select node.[jcr:path] from [mix:title] as node where node.[jcr:title] = 'title2'", Query.JCR_SQL2); query = workspace2.getQueryManager().createQuery( "select node.[jcr:path] from [mix:title] as node where node.[jcr:title] = 'title2'", Query.JCR_SQL2);
Query query = workspace2.getQueryManager().createQuery( "select node.[jcr:path] from [mix:title] as node where node.[jcr:title] = 'title2'", Query.JCR_SQL2); workspace2 = (org.modeshape.jcr.api.Workspace)session2.getWorkspace(); query = workspace2.getQueryManager().createQuery( "select node.[jcr:path] from [mix:title] as node where node.[jcr:title] = 'title2'", Query.JCR_SQL2); validateQuery().rowCount(0).useIndex("titleIndex").validate(query, query.execute()); query = workspace2.getQueryManager().createQuery( "select node.[jcr:path] from [mix:title] as node where node.[jcr:title] = 'title1'", Query.JCR_SQL2); validateQuery().rowCount(0).useIndex("titleIndex").validate(query, query.execute()); query = workspace2.getQueryManager().createQuery( "select node.[jcr:path] from [mix:title] as node where node.[jcr:title] = 'title1_edited'", Query.JCR_SQL2);
Query query = queryManager.createQuery(queryString, Query.JCR_SQL2); validateQuery().rowCount(1).validate(query, query.execute()); query = queryManager.createQuery(queryString, Query.JCR_SQL2); validateQuery().rowCount(3).onEachRow(new Predicate() { @Override + " FROM [test:relationship] AS relationship " + " JOIN [test:node] AS target ON relationship.[test:target] = target.[jcr:uuid] "; query = queryManager.createQuery(queryString, Query.JCR_SQL2); validateQuery().rowCount(2).validate(query, query.execute()); + " JOIN [test:node] AS target ON relationship.[test:target] = target.[jcr:uuid] " + " WHERE node.[test:name] = 'A'"; query = queryManager.createQuery(queryString, Query.JCR_SQL2); validateQuery().rowCount(2).validate(query, query.execute()); + " JOIN [test:node] AS target ON relationship.[test:target] = target.[jcr:uuid] " + " WHERE node.[test:name] = 'A'"; query = queryManager.createQuery(queryString, Query.JCR_SQL2); validateQuery().rowCount(2).validate(query, query.execute()); } finally {
@Test public void shouldFindBuiltInNodeTypes() throws Exception { String queryString = "select [jcr:path] from [nt:base] where ischildnode('/jcr:system/jcr:nodeTypes')"; QueryManager queryManager = session.getWorkspace().getQueryManager(); Query query = queryManager.createQuery(queryString, Query.JCR_SQL2); QueryResult result = query.execute(); long numNodetypes = session.getWorkspace().getNodeTypeManager().getAllNodeTypes().getSize(); validateQuery().rowCount(numNodetypes).validate(query, result); }
@Test public void shouldNotIndexNotQueryableDocument() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.NONT_QUERYABLE_DOC_LOCATION, "nonQueryableDoc"); Workspace workspace = session.getWorkspace(); workspace.reindex(); Node externalNode = assertNodeFound("/testRoot/nonQueryableDoc"); QueryManager queryManager = workspace.getQueryManager(); Query query = queryManager.createQuery("select * FROM [nt:base] WHERE [jcr:path] LIKE '/testRoot/nonQueryableDoc'", Query.JCR_SQL2); validateQuery().rowCount(0).validate(query, query.execute()); // change the document and re-run the query externalNode.setProperty("test", "a value"); session.save(); validateQuery().rowCount(0).validate(query, query.execute()); }
@FixFor( "MODE-2062" ) @Test public void fullTextShouldWorkWithBindVar() throws Exception { Node n1 = session.getRootNode().addNode("n1"); n1.setProperty("n1-prop-1", "wow"); n1.setProperty("n1-prop-2", "any"); Node n2 = session.getRootNode().addNode("n2"); n2.setProperty("n2-prop-1", "test"); try { session.save(); // test with literal String queryString = "select * from [nt:unstructured] as a where contains(a.*, 'wow')"; assertNodesAreFound(queryString, Query.JCR_SQL2, "/n1"); // test with bind String queryStringWithBind = "select * from [nt:unstructured] as a where contains(a.*, $text)"; QueryManager queryManager = session.getWorkspace().getQueryManager(); Query query = queryManager.createQuery(queryStringWithBind, Query.JCR_SQL2); query.bindValue("text", session.getValueFactory().createValue("wow")); QueryResult result = query.execute(); validateQuery().rowCount(1).hasNodesAtPaths("/n1").validate(query, result); } finally { n1.remove(); n2.remove(); session.save(); } }
String queryString = "SELECT * from [nt:unstructured] where REFERENCE() IN " + idList(nodeA, nodeB); QueryManager queryManager = session.getWorkspace().getQueryManager(); Query query = queryManager.createQuery(queryString, Query.JCR_SQL2); QueryResult result = query.execute(); final List<String> resultIds = new ArrayList<String>();
String queryString = "SELECT * from [nt:unstructured] where REFERENCE() IN " + idList(nodeA, nodeB); QueryManager queryManager = session.getWorkspace().getQueryManager(); Query query = queryManager.createQuery(queryString, Query.JCR_SQL2); QueryResult result = query.execute(); final List<String> resultIds = new ArrayList<String>();
String queryString = "SELECT * from [nt:unstructured] where REFERENCE() IN " + idList(nodeA, nodeB); QueryManager queryManager = session.getWorkspace().getQueryManager(); Query query = queryManager.createQuery(queryString, Query.JCR_SQL2); QueryResult result = query.execute();
String queryString = "SELECT * from [nt:unstructured] where REFERENCE() IN " + idList(nodeA, nodeB); QueryManager queryManager = session.getWorkspace().getQueryManager(); Query query = queryManager.createQuery(queryString, Query.JCR_SQL2); QueryResult result = query.execute();
Query query = queryManager.createQuery(queryString, Query.JCR_SQL2); QueryResult result = query.execute();
@FixFor( "MODE-1468" ) @Test public void shouldAllowCreationAndExecutionOfQueryObjectModel() throws Exception { QueryManager queryManager = session.getWorkspace().getQueryManager(); QueryObjectModelFactory qomFactory = queryManager.getQOMFactory(); Selector selector = qomFactory.selector("car:Car", "car"); PropertyValue propValue = qomFactory.propertyValue("car", "car:userRating"); Literal literal = qomFactory.literal(session.getValueFactory().createValue("4")); // use a String since it's LIKE Constraint constraint = qomFactory.comparison(propValue, JCR_OPERATOR_LIKE, literal); Column[] columns = new Column[4]; columns[0] = qomFactory.column("car", "car:maker", "maker"); columns[1] = qomFactory.column("car", "car:model", "car:model"); columns[2] = qomFactory.column("car", "car:year", "car:year"); columns[3] = qomFactory.column("car", "car:userRating", "car:userRating"); Ordering[] orderings = null; // Build and execute the query ... Query query1 = qomFactory.createQuery(selector, constraint, orderings, columns); QueryResult result1 = query1.execute(); String[] columnNames = {"maker", "car:model", "car:year", "car:userRating"}; validateQuery().rowCount(4).hasColumns(columnNames).validate(query1, result1); // Now get the JCR-SQL2 statement from the QOM ... String expectedExpr = "SELECT car.[car:maker] AS maker, car.[car:model], car.[car:year], car.[car:userRating] FROM [car:Car] AS car WHERE car.[car:userRating] LIKE '4'"; String expr = query1.getStatement(); assertThat(expr, is(expectedExpr)); // Now execute it ... Query query2 = queryManager.createQuery(expr, Query.JCR_SQL2); QueryResult result2 = query2.execute(); validateQuery().rowCount(4).hasColumns(columnNames).validate(query2, result2); }
Query query2 = queryManager.createQuery(expr, Query.JCR_SQL2); QueryResult result2 = query2.execute(); validateQuery().rowCount(2).hasColumns(columnNames).validate(query2, result2);