diff --git a/processing/src/main/java/io/druid/query/search/search/RegexSearchQuerySpec.java b/processing/src/main/java/io/druid/query/search/search/RegexSearchQuerySpec.java index 2ca5fa5cf1da..3e56256f83b8 100644 --- a/processing/src/main/java/io/druid/query/search/search/RegexSearchQuerySpec.java +++ b/processing/src/main/java/io/druid/query/search/search/RegexSearchQuerySpec.java @@ -19,8 +19,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.base.Objects; import com.metamx.common.StringUtils; + import java.nio.ByteBuffer; import java.util.regex.Pattern; @@ -32,6 +32,7 @@ public class RegexSearchQuerySpec implements SearchQuerySpec private static final byte CACHE_TYPE_ID = 0x3; private final String pattern; + private Pattern compiled; @JsonCreator public RegexSearchQuerySpec( @@ -39,6 +40,7 @@ public RegexSearchQuerySpec( ) { this.pattern = pattern; + compiled = Pattern.compile(pattern); } @JsonProperty @@ -47,6 +49,28 @@ public String getPattern() return pattern; } + @Override + public boolean equals(Object o) + { + if (this == o) { + return true; + } + if (!(o instanceof RegexSearchQuerySpec)) { + return false; + } + + RegexSearchQuerySpec that = (RegexSearchQuerySpec) o; + + return !(pattern != null ? !pattern.equals(that.pattern) : that.pattern != null); + + } + + @Override + public int hashCode() + { + return pattern != null ? pattern.hashCode() : 0; + } + @Override public boolean accept(String dimVal) { @@ -54,8 +78,7 @@ public boolean accept(String dimVal) return false; } - Pattern compiled = Pattern.compile(pattern); - return compiled.matcher(dimVal).find(); + return compiled.matcher(dimVal).find(); } @Override @@ -81,28 +104,4 @@ public String toString() "pattern=" + pattern + "}"; } - @Override - public boolean equals(Object o) - { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - RegexSearchQuerySpec that = (RegexSearchQuerySpec) o; - - if (pattern == null && that.pattern == null) { - return true; - } - - return pattern != null && pattern.equals(that.pattern); - } - - @Override - public int hashCode() - { - return Objects.hashCode(pattern); - } } diff --git a/processing/src/test/java/io/druid/query/search/RegexSearchQueryTest.java b/processing/src/test/java/io/druid/query/search/RegexSearchQueryTest.java index 9ffbcc7b0470..97ddd33c67a3 100644 --- a/processing/src/test/java/io/druid/query/search/RegexSearchQueryTest.java +++ b/processing/src/test/java/io/druid/query/search/RegexSearchQueryTest.java @@ -19,11 +19,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.druid.jackson.DefaultObjectMapper; -import io.druid.query.Druids; -import io.druid.query.Query; -import io.druid.query.QueryRunnerTestHelper; -import io.druid.query.dimension.DefaultDimensionSpec; -import io.druid.query.dimension.LegacyDimensionSpec; import io.druid.query.search.search.RegexSearchQuerySpec; import org.junit.Assert; import org.junit.Test; @@ -37,16 +32,19 @@ public class RegexSearchQueryTest @Test public void testQuerySerialization() throws IOException { - Query query = Druids.newSearchQueryBuilder() - .dataSource(QueryRunnerTestHelper.dataSource) - .granularity(QueryRunnerTestHelper.allGran) - .intervals(QueryRunnerTestHelper.fullOnInterval) - .query(new RegexSearchQuerySpec("(upfront|total_market)")) - .build(); + RegexSearchQuerySpec spec = new RegexSearchQuerySpec("(upfront|total_market)"); - String json = jsonMapper.writeValueAsString(query); - Query serdeQuery = jsonMapper.readValue(json, Query.class); + String json = jsonMapper.writeValueAsString(spec); + RegexSearchQuerySpec serdeQuery = jsonMapper.readValue(json, RegexSearchQuerySpec.class); - Assert.assertEquals(query, serdeQuery); + Assert.assertEquals(spec, serdeQuery); + } + + @Test + public void testRegexCompare() + { + RegexSearchQuerySpec rsq = new RegexSearchQuerySpec("^a.*b"); + Assert.assertTrue(rsq.accept("aabb")); + Assert.assertFalse(rsq.accept("babba")); } }