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); }
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"); }
public static BaseCondition equals(String field, Object value) { return c(field, WhereOperator.EQUAL, value); } }
@Test public void testWhereInWithEmptyListOrTrueExpression() { saveManyBasicObjects(3); BaseCondition emptyListCondition = c("intValue", "in", Collections.emptyList()); BaseCondition condition = or(emptyListCondition, c("stringValue", "=", "xpto")); List<BasicObject> objects = yawp(BasicObject.class).where(condition).list(); assertEquals(3, 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()); }
public BaseCondition and(BaseCondition c) { return Condition.and(this, c); }
public void or(BaseCondition condition) { if (this.condition != null) { this.condition = Condition.or(this.condition, condition); return; } this.condition = condition; }
public static BaseCondition c(String field, String operator, Object comparison) { return c(field, WhereOperator.toOperator(operator), comparison); }
@Test public void testWhereInWithEmptyListOrFalseExpression() { saveManyBasicObjects(1); BaseCondition emptyListCondition = c("intValue", "in", Collections.emptyList()); BaseCondition condition = or(emptyListCondition, c("stringValue", "=", "otpx")); List<BasicObject> objects = yawp(BasicObject.class).where(condition).list(); assertEquals(0, objects.size()); }
public void and(BaseCondition condition) { if (this.condition != null) { this.condition = Condition.and(this.condition, condition); return; } this.condition = condition; }
public BaseCondition or(BaseCondition c) { return Condition.or(this, c); }
private BaseCondition parseSimpleCondition(JsonObject json) { String field = json.get("p").getAsString(); String op = json.get("op").getAsString(); Object value = getJsonObjectValue(json.get("v")); return Condition.c(field, op, value); }
@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 testWhereWithOrNot() { saveManyBasicObjects(3); List<BasicObject> objects = yawp(BasicObject.class).where(or(c("intValue", "=", 1), c("intValue", "=", 2)).not()).list(); assertEquals(1, objects.size()); assertEquals("xpto", objects.get(0).getStringValue()); assertEquals(3, objects.get(0).getIntValue()); }
public QueryBuilder<T> where(BaseCondition c) { if (condition == null) { condition = c; } else { condition = Condition.and(condition, c); } condition.init(r, clazz); return this; }
public Rule<T> where(String field, String operator, Object value) { return or(Condition.c(field, operator, value)); }
@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 testWhereWithOr() { saveManyBasicObjects(2); List<BasicObject> objects = yawp(BasicObject.class).where(or(c("intValue", "=", 1), c("intValue", "=", 2))).list(); assertEquals(2, objects.size()); sort(objects); assertEquals(2, objects.size()); assertEquals("xpto", objects.get(0).getStringValue()); assertEquals(1, objects.get(0).getIntValue()); assertEquals("xpto", objects.get(1).getStringValue()); assertEquals(2, objects.get(1).getIntValue()); }
public Rule<T> and(String field, String operator, Object value) { return and(Condition.c(field, operator, value)); }
@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()); }