@FixFor( "MODE-1825" ) @Test public void shouldBeAbleToExecuteQueryForAllColumns() throws RepositoryException { QueryManager queryManager = session.getWorkspace().getQueryManager(); QueryObjectModelFactory factory = queryManager.getQOMFactory(); Selector car1Selector = factory.selector("car:Car", "car1"); Selector car2Selector = factory.selector("car:Car", "car2"); Join join = factory.join(car1Selector, car2Selector, QueryObjectModelConstants.JCR_JOIN_TYPE_INNER, factory.equiJoinCondition("car1", "car:maker", "car2", "car:maker")); Column[] columns = new Column[] {factory.column("car1", null, null)}; Constraint constraint = factory.comparison(factory.propertyValue("car1", "car:maker"), QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, factory.literal(session.getValueFactory().createValue("Toyota"))); Ordering[] orderings = new Ordering[] {factory.descending(factory.propertyValue("car1", "car:year"))}; Query query = factory.createQuery(join, constraint, orderings, columns); QueryResult result = query.execute(); validateQuery().rowCount(9).hasColumns(carColumnNames("car1")).validate(query, result); }
@FixFor( "MODE-1824" ) @Test public void shouldBeAbleToExecuteQueryWithTwoColumns() throws RepositoryException { QueryManager queryManager = session.getWorkspace().getQueryManager(); QueryObjectModelFactory factory = queryManager.getQOMFactory(); Selector car1Selector = factory.selector("car:Car", "car1"); Selector car2Selector = factory.selector("car:Car", "car2"); Join join = factory.join(car1Selector, car2Selector, QueryObjectModelConstants.JCR_JOIN_TYPE_INNER, factory.equiJoinCondition("car1", "car:maker", "car2", "car:maker")); Column[] columns = new Column[] {factory.column("car1", "car:maker", "maker"), factory.column("car2", "car:model", "model")}; Query query = factory.createQuery(join, null, null, columns); QueryResult result = query.execute(); String[] columnNames = {columns[0].getColumnName(), columns[1].getColumnName()}; // the aliases validateQuery().rowCount(21).hasColumns(columnNames).validate(query, result); }
protected void assertQomQueryWithBooleanValue( int numResults, String propertyName, String operator, boolean propertyValue ) throws RepositoryException { QueryObjectModelFactory qomFactory = session.getWorkspace().getQueryManager().getQOMFactory(); ValueFactory valueFactory = session.getValueFactory(); Value propertyValueObj = valueFactory.createValue(propertyValue); Selector selector = qomFactory.selector("notion:typed", "node"); Constraint constraint = null; if (propertyName != null && operator != null) { PropertyValue propValue = qomFactory.propertyValue("node", propertyName); Literal literal = qomFactory.literal(propertyValueObj); constraint = qomFactory.comparison(propValue, operator, literal); } Column[] columns = new Column[2]; columns[0] = qomFactory.column("node", "notion:booleanProperty", "notion:booleanProperty"); columns[1] = qomFactory.column("node", "notion:booleanProperty2", "notion:booleanProperty2"); Ordering[] orderings = null; // Build and execute the query ... Query query = qomFactory.createQuery(selector, constraint, orderings, columns); assertThat(query, is(notNullValue())); QueryResult result = query.execute(); String[] columnNames = {"notion:booleanProperty", "notion:booleanProperty2"}; validateQuery().rowCount(numResults).hasColumns(columnNames).validate(query, result); }
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; Limit limit = qomFactory.limit(2, 0); boolean isDistinct = false; SelectQuery selectQuery = qomFactory.select(selector, constraint, orderings, columns, limit, isDistinct); Query query1 = qomFactory.createQuery(selectQuery); QueryResult result1 = query1.execute(); String[] columnNames = {"maker", "car:model", "car:year", "car:userRating"};
@Test @FixFor( "MODE-2329" ) public void shouldAllowUsingExpandedSelectorNameInQOM() throws Exception { QueryObjectModelFactory qomFactory = session.getWorkspace().getQueryManager().getQOMFactory(); Selector selector = qomFactory.selector(NodeType.NT_BASE, "category"); // Build and execute the query ... Query query = qomFactory.createQuery(selector, qomFactory.childNode("category", "/Cars"), null, new Column[0]); assertThat(query.getStatement(), is("SELECT * FROM [{http://www.jcp.org/jcr/nt/1.0}base] AS category WHERE ISCHILDNODE(category,'/Cars')")); QueryResult result = query.execute(); validateQuery().rowCount(4).hasColumns(allColumnNames("category")).validate(query, result); }
@FixFor( "MODE-1833" ) @Test public void shouldBeAbleToQueryAllColumnsOnSimpleType() throws RepositoryException { QueryManager queryManager = session.getWorkspace().getQueryManager(); QueryObjectModelFactory factory = queryManager.getQOMFactory(); Query query = factory.createQuery(factory.selector("modetest:simpleType", "type1"), null, null, new Column[] {factory.column("type1", null, null)}); QueryResult result = query.execute(); validateQuery().rowCount(0).validate(query, result); }
@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); }
@FixFor( "MODE-1611" ) @Test public void shouldAllowQomUseOfIsChildNodeInWhereClause() throws RepositoryException { QueryObjectModelFactory qomFactory = session.getWorkspace().getQueryManager().getQOMFactory(); Selector selector = qomFactory.selector("nt:base", "category"); ChildNode childNodeConstraint = qomFactory.childNode("category", "/Cars"); Constraint constraint = childNodeConstraint; Column[] columns = new Column[0]; Ordering[] orderings = null; // Build and execute the query ... Query query = qomFactory.createQuery(selector, constraint, orderings, columns); assertThat(query.getStatement(), is("SELECT * FROM [nt:base] AS category WHERE ISCHILDNODE(category,'/Cars')")); QueryResult result = query.execute(); validateQuery().rowCount(4).hasColumns(allColumnNames("category")).validate(query, result); }
@Test @FixFor( { "MODE-1055", "MODE-2347" } ) public void shouldAllowMissingSelectorColumnsInQOM() throws Exception { Node node = session.getRootNode().addNode("test", "modetest:simpleType"); node.setProperty("fieldA", "A_value"); session.save(); // query for a property present in a subtype which doesn't have any residuals, using a super-type selector String sql = "SELECT * FROM [nt:base] AS node WHERE node.fieldA = 'A_value'"; try { QueryObjectModelFactory qomFactory = session.getWorkspace().getQueryManager().getQOMFactory(); Selector selector = qomFactory.selector("nt:base", "node"); PropertyValue propValue = qomFactory.propertyValue("node", "fieldA"); Literal literal = qomFactory.literal(session.getValueFactory().createValue("A_value")); Constraint constraint = qomFactory.comparison(propValue, QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal); Query query = qomFactory.createQuery(selector, constraint, null, new Column[0]); assertThat(query.getStatement(), is(sql)); QueryResult result = query.execute(); validateQuery().rowCount(1).validate(query, result); } finally { node.remove(); session.save(); } }