@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); }
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);
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); }
@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); }
@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-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); }