From 77016cc1d1801cb4f4e5e3bbed200b24a64ddbd6 Mon Sep 17 00:00:00 2001 From: Kevin Munroe Date: Wed, 3 Aug 2016 13:05:26 -0700 Subject: [PATCH 1/2] Support for 'IN' operator in WHERE clause. --- .../pho/hbase/translator/PhoenixHBaseOperator.java | 3 ++- .../translator/PhoenixHBaseQueryTranslator.java | 12 ++++++++++-- .../translator/PhoenixHBaseQueryTranslatorTest.java | 10 ++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/eharmony/pho/hbase/translator/PhoenixHBaseOperator.java b/src/main/java/com/eharmony/pho/hbase/translator/PhoenixHBaseOperator.java index 08ef8d1..9db2765 100644 --- a/src/main/java/com/eharmony/pho/hbase/translator/PhoenixHBaseOperator.java +++ b/src/main/java/com/eharmony/pho/hbase/translator/PhoenixHBaseOperator.java @@ -17,7 +17,8 @@ public enum PhoenixHBaseOperator implements Symbolic { AND("AND"), LIKE("LIKE"), - LIKE_CASE_INSENSITIVE("ILIKE"); + LIKE_CASE_INSENSITIVE("ILIKE"), + IN("IN"); private final String symbol; diff --git a/src/main/java/com/eharmony/pho/hbase/translator/PhoenixHBaseQueryTranslator.java b/src/main/java/com/eharmony/pho/hbase/translator/PhoenixHBaseQueryTranslator.java index dcb8690..e6a3c50 100644 --- a/src/main/java/com/eharmony/pho/hbase/translator/PhoenixHBaseQueryTranslator.java +++ b/src/main/java/com/eharmony/pho/hbase/translator/PhoenixHBaseQueryTranslator.java @@ -162,8 +162,16 @@ public String between(String fieldName, Object from, Object to) { } @Override - public String in(String fieldName, Object[] values) { - throw new UnsupportedOperationException("IN operator is not supported in phoenix hbase library..."); + public String in(String fieldName, Object[] values) { + + String valueSet = Joiner.on(",").join(values); + StringBuffer sb = new StringBuffer(); + return sb.append(resolveMappingName(fieldName)) + .append(" ") + .append(PhoenixHBaseOperator.IN) + .append(" (") + .append(valueSet) + .append(")").toString(); } @Override diff --git a/src/test/java/com/eharmony/pho/hbase/translator/PhoenixHBaseQueryTranslatorTest.java b/src/test/java/com/eharmony/pho/hbase/translator/PhoenixHBaseQueryTranslatorTest.java index 564d9c2..2c2cb33 100644 --- a/src/test/java/com/eharmony/pho/hbase/translator/PhoenixHBaseQueryTranslatorTest.java +++ b/src/test/java/com/eharmony/pho/hbase/translator/PhoenixHBaseQueryTranslatorTest.java @@ -104,6 +104,16 @@ public void testBooleanEq() throws ParseException, ClassNotFoundException { System.out.println(result); Assert.assertEquals("isu = true", result); } + + @Test + public void testIn() throws ParseException, ClassNotFoundException { + PhoenixHBaseQueryTranslator translator = new PhoenixHBaseQueryTranslator(entityPropertiesResolver); + Object[] inVals = new Object[]{0,10,11}; + String result = translator.in("cstat", inVals); + Assert.assertNotNull(result); + System.out.println(result); + Assert.assertEquals("cstat IN (0,10,11)", result); + } @Test public void testLongEq() throws ParseException, ClassNotFoundException { From ebc3aa9e01f3827b099e0bffda9539ac656027e0 Mon Sep 17 00:00:00 2001 From: Kevin Munroe Date: Wed, 3 Aug 2016 13:11:45 -0700 Subject: [PATCH 2/2] updated doc. --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 44eb3a7..797a964 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,9 @@ The following query components are supported: // greater than or equal EqualityExpression gte(String propertyName, Object value); + + // is one of these values + SetExpression in(String propertyName, Object[] values); // between from and to (inclusive) RangeExpression between(String propertyName, Object from, Object to);