/** * Create a Function that returns 1 (true) if the criterion passes or 0 (false) otherwise */ public static Function<Integer> caseWhen(Criterion when) { return caseWhen(when, TRUE, FALSE); }
/** * Create a Function that returns the given values based on whether the specified criterion passes */ public static <T> Function<T> caseWhen(final Criterion when, final Object ifTrue, final Object ifFalse) { return caseWhen(when, ifTrue).elseExpr(ifFalse).end(); }
@Override public void run() { Function.caseWhen(null, 1); } }, IllegalArgumentException.class);
/** * Create a Function that returns 1 (true) if the criterion passes or 0 (false) otherwise */ public static Function<Integer> caseWhen(Criterion when) { return caseWhen(when, TRUE, FALSE); }
public Query getOrderedTasksWithTags() { Function<Long> unixNow = Function.multiply(1000, Function.functionWithArguments("strftime", "%s", "now")); Function<Long> sinceCompletion = Function.subtract(unixNow, Task.COMPLETION_DATE); return getTasksWithTagsQuery(Task.COMPLETION_DATE.eq(0) .or(sinceCompletion.lt(60000 * 5))) .orderBy(Function.caseWhen(Task.DUE_DATE.neq(0)).desc(), Task.DUE_DATE.asc()); }
public void testVariableArgumentsWorkInFunctions() { AtomicReference<String> name = new AtomicReference<>("Sam"); Function<Integer> caseWhen = Function.caseWhen(TestModel.FIRST_NAME.eq(name)); BooleanProperty nameMatches = BooleanProperty.fromFunction(caseWhen, "nameMatches"); Query query = Query.select(TestModel.ID, TestModel.FIRST_NAME, nameMatches).where(TestModel.ID.eq(1)); TestModel model = database.fetchByQuery(TestModel.class, query); assertNotNull(model); assertEquals(name.get(), model.getFirstName()); assertTrue(model.get(nameMatches)); name.set("Bob"); model = database.fetchByQuery(TestModel.class, query); assertNotNull(model); assertNotSame(name.get(), model.getFirstName()); assertFalse(model.get(nameMatches)); }
public void testBooleanFunctionOnCriterion() { BooleanProperty onCriterion = BooleanProperty .fromFunction(Function.caseWhen(TestModel.FIRST_NAME.eq("Sam")), "firstNameSam"); SquidCursor<TestModel> cursor = database .query(TestModel.class, Query.select(onCriterion).orderBy(Order.asc(TestModel.ID))); try { cursor.moveToFirst(); assertTrue(cursor.get(onCriterion)); cursor.moveToNext(); assertFalse(cursor.get(onCriterion)); } finally { cursor.close(); } }
/** * Create a Function that returns the given values based on whether the specified criterion passes */ public static <T> Function<T> caseWhen(final Criterion when, final Object ifTrue, final Object ifFalse) { return caseWhen(when, ifTrue).elseExpr(ifFalse).end(); }
public void testOrderByFunction() { AtomicReference<String> name = new AtomicReference<>("Sam"); Function<Integer> caseWhen = Function.caseWhen(TestModel.FIRST_NAME.eq(name)); BooleanProperty nameMatches = BooleanProperty.fromFunction(caseWhen, "nameMatches");
assertExpectedValues(Query.select(test), test, PASS); caseWhen = Function.caseWhen(IntegerProperty.literal(1, null).gt(2), FAIL) .when(IntegerProperty.literal(3, null).gt(0), PASS) .elseExpr(FAIL) caseWhen = Function.caseWhen(TestModel.LUCKY_NUMBER.gt(0), "positive") .when(TestModel.LUCKY_NUMBER.lt(0), "negative") .elseExpr("zero") Function<Integer> longNameFunc = Function.caseWhen(Function.length(TestModel.FIRST_NAME).gt(6)); IntegerProperty hasLongName = IntegerProperty.fromFunction(longNameFunc, "hasLongName"); assertExpectedValues(Query.select(hasLongName).from(TestModel.TABLE).orderBy(TestModel.ID.asc()), hasLongName, 0, 0, 1); Function<String> longNameFunc2 = Function.caseWhen(Function.length(TestModel.FIRST_NAME).gt(6), PASS, FAIL); StringProperty hasLongName2 = StringProperty.fromFunction(longNameFunc2, "hasLongName"); assertExpectedValues(Query.select(hasLongName2).from(TestModel.TABLE).orderBy(TestModel.ID.asc()), hasLongName2,