Skip to content

Commit

Permalink
MODE-2425 Fixed PATH() queries with SET criteria.
Browse files Browse the repository at this point in the history
  • Loading branch information
Horia Chiorean committed Feb 12, 2015
1 parent f9bc38f commit 5d91b2c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1529,6 +1529,7 @@ public String toString() {
// If the set criteria contains a bind variable, then the operand filter should lazily evaluate the bind variable ...
final ExtractFromRow operation = createExtractFromRow(operand, context, columns, sources, defaultType, true, false);
final boolean trace = LOGGER.isTraceEnabled() && !defaultType.getTypeName().equals("NAME");
final PathFactory pathFactory = context.getExecutionContext().getValueFactories().getPathFactory();
return new RowFilterSupplier() {

@Override
Expand All @@ -1537,6 +1538,11 @@ protected RowFilter createFilter() {
return new DynamicOperandFilter(operation) {
@Override
protected boolean evaluate( Object leftHandValue ) {
if (Path.class.isAssignableFrom(defaultType.getType())) {
leftHandValue = leftHandValue instanceof Object[] ?
pathFactory.create((Object[])leftHandValue) :
pathFactory.create(leftHandValue);
}
if (leftHandValue instanceof Object[]) {
for (Object leftValue : (Object[])leftHandValue) {
if (values.contains(leftValue)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2468,6 +2468,24 @@ public void shouldBeAbleToCreateAndExecuteJcrSql2QueryWithSubqueryInCriteria2()
validateQuery().rowCount(4).hasColumns(carColumnNames("car:Car")).validate(query, result);
}

@FixFor( "MODE-2425" )
@Test
public void shouldBeAbleToUsePathOperandWithInQuery() throws RepositoryException {
String sql = "SELECT [car:maker] FROM [car:Car] WHERE PATH()" +
" IN ('/Cars/Hybrid/Toyota Prius', '/Cars/Hybrid/Toyota Highlander', '/Cars/Hybrid/Nissan Altima')";
Query query = session.getWorkspace().getQueryManager().createQuery(sql, Query.JCR_SQL2);
QueryResult result = query.execute();
final List<String> expectedMakers = new ArrayList<>(Arrays.asList("Toyota", "Toyota", "Nissan"));
validateQuery().rowCount(3).onEachRow(new Predicate() {
@Override
public void validate( int rowNumber, Row row ) throws RepositoryException {
String actualValue = row.getValue("car:maker").getString();
expectedMakers.remove(actualValue);
}
}).validate(query, result);
assertTrue("Not all expected car makers found", expectedMakers.isEmpty());
}

@FixFor( "MODE-1873" )
@Test
public void shouldBeAbleToCreateAndExecuteJcrSql2QueryWithSubqueryInCriteriaWhenSubquerySelectsPseudoColumn()
Expand Down

0 comments on commit 5d91b2c

Please sign in to comment.