@Test public void testWithUnescapedString() { /////////////////////////////////// // Tag filter with IN or EQUAL // Should use RowKeyFilter only /////////////////////////////////// String query = "@cluster = \"cluster1\" and @datacenter = \"dc1\" and @jobID = \"job.1234\""; try { FilterList filter = (FilterList) buildFilter(query); Assert.assertEquals( RowFilter.class, ((FilterList) filter.getFilters().get(0)).getFilters().get(0).getClass()); Assert.assertFalse( "Should use rowkey filter only", filter.toString().matches(".*job.1234.*")); } catch (EagleQueryParseException e) { Assert.fail(e.getMessage()); } catch (Exception ex) { Assert.fail(ex.getMessage()); } query = "@cluster = \"cluster1\" and @datacenter = \"dc1\" and @jobID in (\"job_1234\")"; try { FilterList filter = (FilterList) buildFilter(query); Assert.assertEquals( RowFilter.class, ((FilterList) filter.getFilters().get(0)).getFilters().get(0).getClass()); Assert.assertFalse( "Should use rowkey filter only", filter.toString().matches(".*job_1234.*")); } catch (EagleQueryParseException e) { Assert.fail(e.getMessage()); } catch (Exception ex) { Assert.fail(ex.getMessage()); } query = "@cluster = \"cluster1\" and @datacenter = \"dc1\" and @jobID in (\"job.1234\")"; try { FilterList filter = (FilterList) buildFilter(query); Assert.assertEquals( RowFilter.class, ((FilterList) filter.getFilters().get(0)).getFilters().get(0).getClass()); Assert.assertFalse( "Should use rowkey filter only", filter.toString().matches(".*job.*1234.*")); } catch (EagleQueryParseException e) { Assert.fail(e.getMessage()); } catch (Exception ex) { Assert.fail(ex.getMessage()); } /////////////////////////////// // Tag with other operators /////////////////////////////// query = "@cluster = \"cluster1\" and @datacenter = \"dc1\" and @jobID =~ \"job_1234\""; try { FilterList filter = (FilterList) buildFilter(query); Assert.assertEquals( RowFilter.class, ((FilterList) filter.getFilters().get(0)).getFilters().get(0).getClass()); Assert.assertTrue(filter.toString().matches(".*job_1234.*")); } catch (EagleQueryParseException e) { Assert.fail(e.getMessage()); } catch (Exception ex) { Assert.fail(ex.getMessage()); } query = "@cluster = \"cluster1\" and @datacenter = \"dc1\" and @jobID =~ \"job.1234\""; try { FilterList filter = (FilterList) buildFilter(query); Assert.assertEquals( RowFilter.class, ((FilterList) filter.getFilters().get(0)).getFilters().get(0).getClass()); Assert.assertTrue(filter.toString().matches(".*job.1234.*")); } catch (EagleQueryParseException e) { Assert.fail(e.getMessage()); } catch (Exception ex) { Assert.fail(ex.getMessage()); } /////////////////////////////// // Tag with IN // Should escape regexp chars /////////////////////////////// query = "@cluster = \"cluster1\" and @datacenter = \"dc1\" and @field7 = \"job_1234\""; try { FilterList filter = (FilterList) buildFilter(query); Assert.assertEquals( RowFilter.class, ((FilterList) filter.getFilters().get(0)).getFilters().get(0).getClass()); Assert.assertTrue(filter.toString().matches(".*job_1234.*")); } catch (EagleQueryParseException e) { Assert.fail(e.getMessage()); } catch (Exception ex) { ex.printStackTrace(); Assert.fail(ex.getMessage()); } query = "@cluster = \"cluster1\" and @datacenter = \"dc1\" and @field7 in (\"job.1234\",\"others\")"; try { FilterList filter = (FilterList) buildFilter(query); Assert.assertEquals( RowFilter.class, ((FilterList) filter.getFilters().get(0)).getFilters().get(0).getClass()); Assert.assertTrue(filter.toString().matches(".*job\\.1234.*")); } catch (EagleQueryParseException e) { Assert.fail(e.getMessage()); } catch (Exception ex) { Assert.fail(ex.getMessage()); } }