public void and(BaseCondition condition) { if (this.condition != null) { this.condition = Condition.and(this.condition, condition); return; } this.condition = condition; }
public BaseCondition and(BaseCondition c) { return Condition.and(this, c); }
public QueryBuilder<T> where(BaseCondition c) { if (condition == null) { condition = c; } else { condition = Condition.and(condition, c); } condition.init(r, clazz); return this; }
private BaseCondition parseJoinedCondition(JsonObject json) { String op = json.get("op").getAsString(); List<BaseCondition> conditions = new ArrayList<>(); for (JsonElement jsonElement : json.getAsJsonArray("c")) { conditions.add(parseConditionObject(jsonElement.getAsJsonObject())); } if (op.equalsIgnoreCase("and")) { return Condition.and(conditions.toArray(new BaseCondition[]{})); } if (op.equalsIgnoreCase("or")) { return Condition.or(conditions.toArray(new BaseCondition[]{})); } throw new RuntimeException("Invalid joined condition operator"); }
private BaseCondition parseSimpleCondition(JsonArray jsonArray) { if (jsonArray.size() % 3 != 0) { throw new HttpException(422, "Array condition in where must have size multiple of three ([<field1>, <op1>, <value1>, <field2>, <op2>, <value2>, ...])"); } BaseCondition[] conditions = new BaseCondition[jsonArray.size() / 3]; for (int i = 0; i < jsonArray.size(); i += 3) { String field = jsonArray.get(i).getAsString(); String op = jsonArray.get(i + 1).getAsString(); Object value = getJsonObjectValue(jsonArray.get(i + 2)); conditions[i / 3] = Condition.c(field, op, value); } return Condition.and(conditions); }
@Test public void testWhereInWithEmptyListOrComplexExpression() { saveManyBasicObjects(1); BaseCondition emptyListCondition = c("intValue", "in", Collections.emptyList()); BaseCondition condition = and(emptyListCondition, and(c("stringValue", "=", "otpx"), emptyListCondition)); List<BasicObject> objects = yawp(BasicObject.class).where(condition).list(); assertEquals(0, objects.size()); }
@Test public void testWhereWithComplexAndOrStructure() { saveManyBasicObjects(3); List<BasicObject> objects1 = yawp(BasicObject.class).where( or(and(c("intValue", "=", 1), c("intValue", "=", 2)), and(c("intValue", "=", 3), c("intValue", "=", 3)))).list(); assertEquals(1, objects1.size()); assertEquals(3, objects1.get(0).getIntValue()); BaseCondition condition = or(and(c("intValue", "=", 3), c("intValue", "=", 3)), and(c("intValue", "=", 1), c("intValue", "=", 2))); List<BasicObject> objects2 = yawp(BasicObject.class).where(condition).list(); assertEquals(1, objects2.size()); assertEquals(3, objects2.get(0).getIntValue()); }
@Test public void testWhereInWithEmptyListAndFalseExpression() { saveManyBasicObjects(1); BaseCondition emptyListCondition = c("intValue", "in", Collections.emptyList()); BaseCondition condition = and(emptyListCondition, c("stringValue", "=", "otpx")); List<BasicObject> objects = yawp(BasicObject.class).where(condition).list(); assertEquals(0, objects.size()); }
@Test public void testWhereInWithEmptyListAndTrueExpression() { saveManyBasicObjects(1); BaseCondition emptyListCondition = c("intValue", "in", Collections.emptyList()); BaseCondition condition = and(emptyListCondition, c("stringValue", "=", "xpto")); List<BasicObject> objects = yawp(BasicObject.class).where(condition).list(); assertEquals(0, objects.size()); }
@Test public void testChainedWheresWithAnd() { saveManyBasicObjects(1); List<BasicObject> objects = yawp(BasicObject.class).where(and(c("intValue", "=", 1), c("stringValue", "=", "xpto"))).list(); assertEquals(1, objects.size()); assertEquals("xpto", objects.get(0).getStringValue()); assertEquals(1, objects.get(0).getIntValue()); }
@Test public void testWhereWithAndNot() { saveManyBasicObjects(5); List<BasicObject> objects = yawp(BasicObject.class).where(and(c("intValue", ">", 1), c("intValue", "<", 5)).not()).list(); assertEquals(2, objects.size()); sort(objects); assertEquals(1, objects.get(0).getIntValue()); assertEquals(5, objects.get(1).getIntValue()); }