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); 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 {