From 59537227b6e8072bcf41eb8b3e2258efe7fb308a Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Thu, 14 Jun 2018 23:28:30 +1200 Subject: [PATCH] #1426 - ENH: Add bitwiseNot expression ... e.g. bitwiseNot("flags", BwFlags.HAS_COLOUR) --- src/main/java/io/ebean/ExpressionList.java | 14 ++++++++++++++ .../server/expression/DefaultExpressionList.java | 6 ++++++ .../server/expression/JunctionExpression.java | 5 +++++ .../expression/bitwise/TestBitwiseExpressions.java | 13 +++++++++++++ 4 files changed, 38 insertions(+) diff --git a/src/main/java/io/ebean/ExpressionList.java b/src/main/java/io/ebean/ExpressionList.java index efdec6e7b..280a6356b 100644 --- a/src/main/java/io/ebean/ExpressionList.java +++ b/src/main/java/io/ebean/ExpressionList.java @@ -1031,6 +1031,20 @@ public interface ExpressionList { */ ExpressionList bitwiseAll(String propertyName, long flags); + /** + * Add expression for the given bit flags to be NOT set. + *

+ *

{@code
+   *
+   * where().bitwiseNot("flags", BwFlags.HAS_COLOUR)
+   *
+   * }
+ * + * @param propertyName The property that holds the flags value + * @param flags The flags we are looking for + */ + ExpressionList bitwiseNot(String propertyName, long flags); + /** * Add bitwise AND expression of the given bit flags to compare with the match/mask. *

diff --git a/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java b/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java index 69796ef43..45324d954 100644 --- a/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java +++ b/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java @@ -711,6 +711,12 @@ public class DefaultExpressionList implements SpiExpressionList { return this; } + @Override + public ExpressionList bitwiseNot(String propertyName, long flags) { + add(expr.bitwiseAnd(propertyName, flags, 0)); + return this; + } + @Override public ExpressionList bitwiseAll(String propertyName, long flags) { add(expr.bitwiseAll(propertyName, flags)); diff --git a/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java b/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java index b1fc7b4cc..d927bb22f 100644 --- a/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java @@ -554,6 +554,11 @@ class JunctionExpression implements SpiJunction, SpiExpression, Expression return exprList.bitwiseAnd(propertyName, flags, match); } + @Override + public ExpressionList bitwiseNot(String propertyName, long flags) { + return exprList.bitwiseNot(propertyName, flags); + } + @Override public ExpressionList ge(String propertyName, Object value) { return exprList.ge(propertyName, value); diff --git a/src/test/java/org/tests/expression/bitwise/TestBitwiseExpressions.java b/src/test/java/org/tests/expression/bitwise/TestBitwiseExpressions.java index 05be5d1ae..54c673b6f 100644 --- a/src/test/java/org/tests/expression/bitwise/TestBitwiseExpressions.java +++ b/src/test/java/org/tests/expression/bitwise/TestBitwiseExpressions.java @@ -14,11 +14,24 @@ public class TestBitwiseExpressions extends BaseTestCase { public void where() { setup(); + bitwiseNot(); bitwiseAnd(); bitwiseAny(); bitwiseAll(); } + private void bitwiseNot() { + + List notColour = Ebean.find(BwBean.class) + // HAS_COLOUR not set ... + .where().bitwiseNot("flags", BwFlags.HAS_COLOUR) + .findList(); + + assertThat(notColour).hasSize(2); + assertThat(notColour.get(0).getName()).isEqualTo("Nothing"); + assertThat(notColour.get(1).getName()).isEqualTo("SizeOnly"); + } + private void bitwiseAnd() { List list = Ebean.find(BwBean.class)