Skip to content

Commit bfae45c

Browse files
committed
Merge branch '42-alias-combined-condition-crash' into dev
2 parents 73bf250 + 7ae6490 commit bfae45c

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

objectbox-java/src/main/java/io/objectbox/query/QueryBuilder.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,14 @@ enum Operator {
9494

9595
private long handle;
9696

97+
/**
98+
* Holds on to last condition. May be a property condition or a combined condition.
99+
*/
97100
private long lastCondition;
101+
/**
102+
* Holds on to last property condition to use with {@link #parameterAlias(String)}
103+
*/
104+
private long lastPropertyCondition;
98105
private Operator combineNextWith = Operator.NONE;
99106

100107
@Nullable
@@ -307,10 +314,10 @@ public QueryBuilder<T> sort(Comparator<T> comparator) {
307314
*/
308315
public QueryBuilder<T> parameterAlias(String alias) {
309316
verifyHandle();
310-
if (lastCondition == 0) {
317+
if (lastPropertyCondition == 0) {
311318
throw new IllegalStateException("No previous condition. Before you can assign an alias, you must first have a condition.");
312319
}
313-
nativeSetParameterAlias(lastCondition, alias);
320+
nativeSetParameterAlias(lastPropertyCondition, alias);
314321
return this;
315322
}
316323

@@ -478,6 +485,7 @@ private void checkCombineCondition(long currentCondition) {
478485
} else {
479486
lastCondition = currentCondition;
480487
}
488+
lastPropertyCondition = currentCondition;
481489
}
482490

483491
public QueryBuilder<T> isNull(Property<T> property) {

tests/objectbox-java-test/src/test/java/io/objectbox/query/QueryTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,27 @@ public void testSetParameterString() {
607607
assertEquals(2, query.findUnique().getId());
608608
}
609609

610+
/**
611+
* https://github.com/objectbox/objectbox-java/issues/834
612+
*/
613+
@Test
614+
public void parameterAlias_combinedConditions() {
615+
putTestEntitiesScalars();
616+
617+
Query<TestEntity> query = box.query()
618+
.greater(simpleInt, 0).parameterAlias("greater")
619+
.or()
620+
.less(simpleInt, 0).parameterAlias("less")
621+
.build();
622+
List<TestEntity> results = query
623+
.setParameter("greater", 2008)
624+
.setParameter("less", 2001)
625+
.find();
626+
assertEquals(2, results.size());
627+
assertEquals(2000, results.get(0).getSimpleInt());
628+
assertEquals(2009, results.get(1).getSimpleInt());
629+
}
630+
610631
@Test
611632
public void testForEach() {
612633
List<TestEntity> testEntities = putTestEntitiesStrings();

0 commit comments

Comments
 (0)