Skip to content
Snippets Groups Projects
Commit 4fe35f3c authored by Pierre Jeanjean's avatar Pierre Jeanjean Committed by Thomas Mortagne
Browse files

XWIKI-21922: Introduce methods to fetch a subset of revisions in XWikiVersioningStoreInterface

* Fix date filtering for MySQL, MariaDB, PostgreSQL and Oracle

(cherry picked from commit 29c82b01)
parent 91303ab1
No related branches found
No related tags found
No related merge requests found
......@@ -93,11 +93,16 @@ private void applyCriteria(final long id, RevisionCriteria criteria)
}
Date minDate = criteria.getMinDate();
Date maxDate = criteria.getMaxDate();
// Hibernate requires positive timestamps.
if (minDate.getTime() < 0) {
minDate = new Date(0);
}
predicates.add(this.builder.between(this.root.get(FIELD_DATE), minDate, criteria.getMaxDate()));
// Most databases store timestamps as seconds, using integers.
if (maxDate.getTime() > Integer.MAX_VALUE * 1000L) {
maxDate = new Date(Integer.MAX_VALUE * 1000L);
}
predicates.add(this.builder.between(this.root.get(FIELD_DATE), minDate, maxDate));
if (!criteria.getIncludeMinorVersions()) {
// In this case, we keep only the highest minor version for each major version.
......
......@@ -208,7 +208,7 @@ void testRCSNodeInfoCountQueryWithAuthorCriteria()
LiteralExpression<Date> dateUpperExpression = (LiteralExpression<Date>) datePredicate.getUpperBound();
assertEquals("mocked date", datePredicate.getExpression().toString());
assertEquals(new Date(0L), dateLowerExpression.getLiteral());
assertEquals(new Date(Long.MAX_VALUE), dateUpperExpression.getLiteral());
assertEquals(new Date(Integer.MAX_VALUE * 1000L), dateUpperExpression.getLiteral());
}
@Test
......@@ -270,7 +270,7 @@ void testRCSNodeInfoQueryWithAuthorCriteria()
LiteralExpression<Date> dateUpperExpression = (LiteralExpression<Date>) datePredicate.getUpperBound();
assertEquals("mocked date", datePredicate.getExpression().toString());
assertEquals(new Date(0L), dateLowerExpression.getLiteral());
assertEquals(new Date(Long.MAX_VALUE), dateUpperExpression.getLiteral());
assertEquals(new Date(Integer.MAX_VALUE * 1000L), dateUpperExpression.getLiteral());
}
@Test
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment