private Criterion toAtomicCriterion(AtomicExpression atomic){ Class<?> columnType = locateColumnType(atomic); Object left = toColumn(atomic.getKeyType(), atomic.getKey(),atomic.getOp(),columnType); Object right = toColumn(atomic.getValueType(), atomic.getValue(), atomic.getOp(),columnType); SqlEnum op = toSqlEnum(atomic.getOp()); return new Criterion(left,right,op); }
AtomicExpression kv = new AtomicExpression(); kv.setKey(id.getText()); kv.setOp(ComparisonOperator.locateOperator(op.getText())); kv.setValueType(TokenType.locate(value.getText())); }catch (Exception ex){ LOG.error("Failed to locate value type for: " + value.getText() + " due to exception: " + ex.getMessage(), ex); kv.setKeyType(TokenType.locate(id.getText())); }catch (Exception ex){ LOG.error("Failed to locate id type for: " + id.getText() + " due to exception: " + ex.getMessage(), ex); kv.setKey(postProcessNode(id.getText(),kv.getKeyType())); kv.setValue(postProcessNode(value.getText(),kv.getValueType())); if(kv.getValueType() != TokenType.LIST) kv.setValue(StringEscapeUtils.unescapeJava(kv.getValue()));
@Test public void testComplexExpressionWithConditionAndNestedBrace() { String query = "(EXP{(@a + @b) / ((@c + @d)*(@e)/(@d))} > EXP{@c + @d}) AND (EXP{@e + @f} > EXP{@h + @i})"; 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); ANDExpression and = or.getANDExprList().get(0); Assert.assertEquals(2, and.getAtomicExprList().size()); Assert.assertEquals("(a + b) / ((c + d)*(e)/(d))>c + d", and.getAtomicExprList().get(0).toString()); Assert.assertEquals("e + f>h + i", and.getAtomicExprList().get(1).toString()); AtomicExpression leftExpression = and.getAtomicExprList().get(0); Assert.assertEquals("(a + b) / ((c + d)*(e)/(d))", leftExpression.getKey()); Assert.assertEquals(">", leftExpression.getOp().toString()); Assert.assertEquals("c + d", leftExpression.getValue()); AtomicExpression rightExpression = and.getAtomicExprList().get(1); Assert.assertEquals("e + f", rightExpression.getKey()); Assert.assertEquals(">", rightExpression.getOp().toString()); Assert.assertEquals("h + i",rightExpression.getValue()); }
private Criterion toAtomicCriterion(AtomicExpression atomic){ Class<?> columnType = locateColumnType(atomic); Object left = toColumn(atomic.getKeyType(), atomic.getKey(),atomic.getOp(),columnType); Object right = toColumn(atomic.getValueType(), atomic.getValue(), atomic.getOp(),columnType); SqlEnum op = toSqlEnum(atomic.getOp()); return new Criterion(left,right,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()); }
AtomicExpression kv = new AtomicExpression(); kv.setKey(id.getText()); kv.setOp(ComparisonOperator.locateOperator(op.getText())); kv.setValueType(TokenType.locate(value.getText())); } catch (Exception ex) { LOG.error("Failed to locate value type for: " + value.getText() + " due to exception: " + ex.getMessage(), ex); kv.setKeyType(TokenType.locate(id.getText())); } catch (Exception ex) { LOG.error("Failed to locate id type for: " + id.getText() + " due to exception: " + ex.getMessage(), ex); kv.setKey(postProcessNode(id.getText(),kv.getKeyType())); kv.setValue(postProcessNode(value.getText(),kv.getValueType())); if (kv.getValueType() != TokenType.LIST) { kv.setValue(StringEscapeUtils.unescapeJava(kv.getValue()));
private Class<?> locateColumnType(AtomicExpression atomic) { String columnName = null; if(atomic.getKeyType().equals(TokenType.ID)){ columnName = parseEntityAttribute(atomic.getKey()); }else if(atomic.getValueType().equals(TokenType.ID)){ columnName = parseEntityAttribute(atomic.getValue()); } if(jdbcEntityDefinition.getInternal().getDisplayNameMap().containsKey(columnName)){ try { return jdbcEntityDefinition.getColumnType(columnName); } catch (NoSuchFieldException e) { throw new RuntimeException(e); } }else{ return null; } }
@Test public void testComplexExpressionWithNestedBrace() { String query = "EXP{((@a + @b) / @c) + @d}< 0.005"; 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("((a + b) / c) + d", or.getANDExprList().get(0).getAtomicExprList().get(0).getKey()); Assert.assertEquals("0.005", or.getANDExprList().get(0).getAtomicExprList().get(0).getValue()); Assert.assertEquals("<", or.getANDExprList().get(0).getAtomicExprList().get(0).getOp().toString()); Assert.assertEquals("(((a + b) / c) + d<0.005)", or.toString()); }
private Class<?> locateColumnType(AtomicExpression atomic) { String columnName = null; if(atomic.getKeyType().equals(TokenType.ID)){ columnName = parseEntityAttribute(atomic.getKey()); }else if(atomic.getValueType().equals(TokenType.ID)){ columnName = parseEntityAttribute(atomic.getValue()); } if(jdbcEntityDefinition.getInternal().getDisplayNameMap().containsKey(columnName)){ try { return jdbcEntityDefinition.getColumnType(columnName); } catch (NoSuchFieldException e) { throw new RuntimeException(e); } }else{ return null; } }
@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()); }
for (AtomicExpression ae : andExpr.getAtomicExprList()) { if (ae.getKeyType() == TokenType.ID) { final String fieldName = parseEntityAttribute(ae.getKey()); if (fieldName == null) { LOG.warn(fieldName + " field does not have format @<FieldName>, ignored"); continue; if (ed.isPartitionTag(fieldName) && ComparisonOperator.EQUAL.equals(ae.getOp())) { final String value = ae.getValue(); partitionKeyValueMap.put(fieldName, value);
@Test public void testSingleExpression() { String query = "@cluster=\"a\""; 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("@cluster", or.getANDExprList().get(0).getAtomicExprList().get(0).getKey()); Assert.assertEquals("a", 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("(@cluster=\"a\")", or.toString()); }
for(AtomicExpression ae : andExpr.getAtomicExprList()) { if(ae.getKeyType() == TokenType.ID) { final String fieldName = parseEntityAttribute(ae.getKey()); if (fieldName == null) { LOG.warn(fieldName + " field does not have format @<FieldName>, ignored"); continue; if (_ed.isPartitionTag(fieldName) && ComparisonOperator.EQUAL.equals(ae.getOp())) { final String value = ae.getValue(); partitionKeyValueMap.put(fieldName, value);
@Test public void testLessOrEqualExpression() { String query = "@field1<=\"1\""; 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", 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("(@field1<=\"1\")", or.toString()); }
String fieldName = ae.getKey(); if (ae.getKeyType() == TokenType.ID) { fieldName = parseEntityAttribute(fieldName); if (fieldName == null) { String value = ae.getValue(); ComparisonOperator op = ae.getOp(); TokenType keyType = ae.getKeyType(); TokenType valueType = ae.getValueType(); QualifierFilterEntity entry = new QualifierFilterEntity(fieldName, value, op, keyType, valueType);
@Test public void testLessThanExpression() { String query = "@field1<\"1\""; 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", 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("(@field1<\"1\")", or.toString()); }
String fieldName = ae.getKey(); if(ae.getKeyType() == TokenType.ID){ fieldName = parseEntityAttribute(fieldName); if(fieldName == null){ String value = ae.getValue(); ComparisonOperator op = ae.getOp(); TokenType keyType = ae.getKeyType(); TokenType valueType = ae.getValueType(); QualifierFilterEntity entry = new QualifierFilterEntity(fieldName,value,op,keyType,valueType);
@Test public void testGreaterThanExpression() { String query = "@field1>\"1\""; 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", 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("(@field1>\"1\")", or.toString()); }