if (op.equals(ComparisonOperator.CONTAINS) && tokenType.equals(TokenType.STRING)) { return "%" + value + "%"; } else if (tokenType.equals(TokenType.ID)) { return new ColumnImpl(this.tableName, parseEntityAttribute(value)); } else if (!tokenType.equals(TokenType.ID) && op.equals(ComparisonOperator.IN)) { return EntityQualifierUtils.parseList(value); } else if (tokenType.equals(TokenType.NUMBER)) { return Double.parseDouble(value); } else if (op.equals(ComparisonOperator.LIKE) && value.equals(".*")){ return "%"; } else{
protected static CompareOp getHBaseCompareOp(String comp) { return convertToHBaseCompareOp(ComparisonOperator.locateOperator(comp)); } }
public static ComparisonOperator locateOperator(String op) { op = op.replaceAll("\\s+"," "); for (ComparisonOperator o : ComparisonOperator.values()) { if (op.toUpperCase().equals(o.storedOp)) { return o; } } throw new UnsupportedExpressionOperatorException(op); } }
@Test public void testNumberQuery() { String query = "@field1 >= -1.234"; EagleQueryParser parser = new EagleQueryParser(query); ORExpression or = null; try { or = parser.parse(); } catch (EagleQueryParseException ex) { Assert.fail(ex.getMessage()); } Assert.assertTrue(or.getANDExprList().size() == 1); Assert.assertEquals(1, or.getANDExprList().get(0).getAtomicExprList().size()); Assert.assertEquals("@field1", or.getANDExprList().get(0).getAtomicExprList().get(0).getKey()); Assert.assertEquals(-1.234, Double.parseDouble(or.getANDExprList().get(0).getAtomicExprList().get(0).getValue()), 0.0001); Assert.assertEquals(">=", or.getANDExprList().get(0).getAtomicExprList().get(0).getOp().toString()); Assert.assertEquals(TokenType.NUMBER, or.getANDExprList().get(0).getAtomicExprList().get(0).getValueType()); }
@Override public void readFields(DataInput in) throws IOException { this.key = in.readUTF(); this.value = in.readUTF(); this.op = ComparisonOperator.valueOf(in.readUTF()); this.keyType = TokenType.valueOf(in.readUTF()); this.valueType = TokenType.valueOf(in.readUTF()); } }
@Override public void write(DataOutput out) throws IOException { out.writeUTF(this.key); out.writeUTF(this.getValue()); out.writeUTF(this.op.name()); out.writeUTF(this.keyType.name()); out.writeUTF(this.valueType.name()); }
@Test public void testSimpleWildcardMatchQuery() { String expected = "-[]/{}()*+?.\\^$|"; String query = "@user=\"-[]/{}()*+?.\\\\^$|\""; System.out.println(query); EagleQueryParser parser = new EagleQueryParser(query); ORExpression or = null; try { or = parser.parse(); } catch (EagleQueryParseException ex) { Assert.fail(ex.getMessage()); } Assert.assertTrue(or.getANDExprList().size() == 1); Assert.assertEquals(1, or.getANDExprList().get(0).getAtomicExprList().size()); Assert.assertEquals("@user", or.getANDExprList().get(0).getAtomicExprList().get(0).getKey()); Assert.assertEquals(expected, or.getANDExprList().get(0).getAtomicExprList().get(0).getValue()); Assert.assertEquals("=", or.getANDExprList().get(0).getAtomicExprList().get(0).getOp().toString()); LOG.info(or.toString()); Assert.assertEquals("(@user=\""+expected+"\")", or.toString()); }
@Override public void readFields(DataInput in) throws IOException { this.key = in.readUTF(); this.value = in.readUTF(); this.op = ComparisonOperator.valueOf(in.readUTF()); this.keyType = TokenType.valueOf(in.readUTF()); this.valueType = TokenType.valueOf(in.readUTF()); } }
@Override public void write(DataOutput out) throws IOException { out.writeUTF(this.key); out.writeUTF(this.getValue()); out.writeUTF(this.op.name()); out.writeUTF(this.keyType.name()); out.writeUTF(this.valueType.name()); }
if (op.equals(ComparisonOperator.CONTAINS) && tokenType.equals(TokenType.STRING)) { return "%" + value + "%"; } else if (tokenType.equals(TokenType.ID)) { return new ColumnImpl(this.tableName, parseEntityAttribute(value)); } else if (!tokenType.equals(TokenType.ID) && op.equals(ComparisonOperator.IN)) { return EntityQualifierUtils.parseList(value); } else if (tokenType.equals(TokenType.NUMBER)) { return Double.parseDouble(value); } else if (op.equals(ComparisonOperator.LIKE) && value.equals(".*")){ return "%"; } else{
@Test public void testContainQuery() { String query = "@name contains \"jame\""; EagleQueryParser parser = new EagleQueryParser(query); ORExpression or = null; try { or = parser.parse(); } catch (EagleQueryParseException ex) { Assert.fail(ex.getMessage()); } Assert.assertTrue(or.getANDExprList().size() == 1); Assert.assertEquals(1, or.getANDExprList().get(0).getAtomicExprList().size()); Assert.assertEquals("@name", or.getANDExprList().get(0).getAtomicExprList().get(0).getKey()); Assert.assertEquals("jame", or.getANDExprList().get(0).getAtomicExprList().get(0).getValue()); Assert.assertEquals("CONTAINS", or.getANDExprList().get(0).getAtomicExprList().get(0).getOp().toString()); Assert.assertEquals(TokenType.STRING, or.getANDExprList().get(0).getAtomicExprList().get(0).getValueType()); }
public static ComparisonOperator locateOperator(String op){ op = op.replaceAll("\\s+"," "); for(ComparisonOperator o : ComparisonOperator.values()){ if(op.toUpperCase().equals(o._op)){ return o; } } throw new UnsupportedExpressionOperatorException(op); } }
protected static CompareOp getHBaseCompareOp(String comp) { return convertToHBaseCompareOp(ComparisonOperator.locateOperator(comp)); } }
if ((ComparisonOperator.EQUAL.equals(op) || ComparisonOperator.IS.equals(op)) && !TokenType.NULL.equals(valueType)) { } else if (rowFilterPriority && ComparisonOperator.IN.equals(op)) { } else if (ComparisonOperator.LIKE.equals(op) || ComparisonOperator.NOT_LIKE.equals(op) || ComparisonOperator.CONTAINS.equals(op) || ComparisonOperator.NOT_CONTAINS.equals(op) || ComparisonOperator.IN.equals(op) || ComparisonOperator.IS.equals(op) || ComparisonOperator.IS_NOT.equals(op) || ComparisonOperator.NOT_EQUAL.equals(op) || ComparisonOperator.EQUAL.equals(op) || ComparisonOperator.NOT_IN.equals(op)) { qualifierFilters.add(entry); } else {
@Test public void testEmptyString() { String query = "@name = \"\""; EagleQueryParser parser = new EagleQueryParser(query); ORExpression or = null; try { or = parser.parse(); } catch (EagleQueryParseException ex) { Assert.fail(ex.getMessage()); } Assert.assertNotNull(or); Assert.assertEquals("@name", or.getANDExprList().get(0).getAtomicExprList().get(0).getKey()); Assert.assertEquals("", or.getANDExprList().get(0).getAtomicExprList().get(0).getValue()); Assert.assertEquals("=", or.getANDExprList().get(0).getAtomicExprList().get(0).getOp().toString()); Assert.assertEquals(TokenType.STRING, or.getANDExprList().get(0).getAtomicExprList().get(0).getValueType()); }
/** * Convert ComparisonOperator to native HBase CompareOp Support: =, =~,CONTAINS,<,<=,>,>=,!=,!=~ * * @param comp * @return */ protected static CompareOp convertToHBaseCompareOp(ComparisonOperator comp) { if (comp == ComparisonOperator.EQUAL || comp == ComparisonOperator.LIKE || comp == ComparisonOperator.CONTAINS || comp == ComparisonOperator.IN || comp == ComparisonOperator.IS) { return CompareOp.EQUAL; } else if (comp == ComparisonOperator.LESS) { return CompareOp.LESS; } else if (comp == ComparisonOperator.LESS_OR_EQUAL) { return CompareOp.LESS_OR_EQUAL; } else if (comp == ComparisonOperator.GREATER) { return CompareOp.GREATER; } else if (comp == ComparisonOperator.GREATER_OR_EQUAL) { return CompareOp.GREATER_OR_EQUAL; } else if (comp == ComparisonOperator.NOT_EQUAL || comp == ComparisonOperator.NOT_LIKE || comp == ComparisonOperator.NOT_CONTAINS || comp == ComparisonOperator.IS_NOT || comp == ComparisonOperator.NOT_IN) { return CompareOp.NOT_EQUAL; } else { LOG.error("{} operation is not supported now\n", comp); throw new IllegalArgumentException("Illegal operation: " + comp + ", avaliable options: " + Arrays.toString(ComparisonOperator.values())); } }
kv.setOp(ComparisonOperator.locateOperator(op.getText()));
if ((ComparisonOperator.EQUAL.equals(op) || ComparisonOperator.IS.equals(op)) && !TokenType.NULL.equals(valueType)) } else if (rowFilterPriority && ComparisonOperator.IN.equals(op)) } else if (ComparisonOperator.LIKE.equals(op) || ComparisonOperator.NOT_LIKE.equals(op) || ComparisonOperator.CONTAINS.equals(op) || ComparisonOperator.NOT_CONTAINS.equals(op) || ComparisonOperator.IN.equals(op) || ComparisonOperator.IS.equals(op) || ComparisonOperator.IS_NOT.equals(op) || ComparisonOperator.NOT_EQUAL.equals(op) || ComparisonOperator.EQUAL.equals(op) || ComparisonOperator.NOT_IN.equals(op))
@Test public void testCompareAtomicExpression() { String query = "EXP{@mapProgress} < EXP{@reduceProgress}"; EagleQueryParser parser = new EagleQueryParser(query); ORExpression or = null; try { or = parser.parse(); } catch (EagleQueryParseException ex) { Assert.fail(ex.getMessage()); } Assert.assertTrue(or.getANDExprList().size() == 1); Assert.assertEquals(1, or.getANDExprList().get(0).getAtomicExprList().size()); Assert.assertEquals("mapProgress", or.getANDExprList().get(0).getAtomicExprList().get(0).getKey()); Assert.assertEquals("reduceProgress", or.getANDExprList().get(0).getAtomicExprList().get(0).getValue()); Assert.assertEquals("<", or.getANDExprList().get(0).getAtomicExprList().get(0).getOp().toString()); Assert.assertEquals("(mapProgress<reduceProgress)", or.toString()); }
} else { LOG.error("{} operation is not supported now\n", comp); throw new IllegalArgumentException("Illegal operation: "+comp+ ", avaliable options: "+ Arrays.toString(ComparisonOperator.values()));