private boolean evaluateLikePredicate(LikePredicate node, Slice value, Regex regex) { if (type(node.getValue()) instanceof VarcharType) { return LikeFunctions.likeVarchar(value, regex); } Type type = type(node.getValue()); checkState(type instanceof CharType, "LIKE value is neither VARCHAR or CHAR"); return LikeFunctions.likeChar((long) ((CharType) type).getLength(), value, regex); }
@Test public void testLikeSpacesInPattern() { Regex regex = likePattern(utf8Slice("ala ")); assertTrue(likeVarchar(utf8Slice("ala "), regex)); assertFalse(likeVarchar(utf8Slice("ala"), regex)); regex = castCharToLikePattern(5L, utf8Slice("ala")); assertTrue(likeVarchar(utf8Slice("ala "), regex)); assertFalse(likeVarchar(utf8Slice("ala"), regex)); }
@Test public void testLikeNewlineBeforeMatch() { Regex regex = likePattern(utf8Slice("%b%")); assertTrue(likeVarchar(utf8Slice("foo\nbar"), regex)); }
@Test public void testLikeNewlineInMatch() { Regex regex = likePattern(utf8Slice("f%b%")); assertTrue(likeVarchar(utf8Slice("foo\nbar"), regex)); }
@Test public void testBackslashesNoSpecialTreatment() { Regex regex = likePattern(utf8Slice("\\abc\\/\\\\")); assertTrue(likeVarchar(utf8Slice("\\abc\\/\\\\"), regex)); }
@ScalarFunction(value = "like", hidden = true) @LiteralParameters("x") @SqlType(StandardTypes.BOOLEAN) public static boolean likeChar(@LiteralParameter("x") Long x, @SqlType("char(x)") Slice value, @SqlType(LikePatternType.NAME) Regex pattern) { return likeVarchar(padSpaces(value, x.intValue()), pattern); }
@Test public void testLikeNewlineInPattern() { Regex regex = likePattern(utf8Slice("%o\nbar")); assertTrue(likeVarchar(utf8Slice("foo\nbar"), regex)); }
@Test(timeOut = 1000) public void testLikeUtf8Pattern() { Regex regex = likePattern(utf8Slice("%\u540d\u8a89%"), utf8Slice("\\")); assertFalse(likeVarchar(utf8Slice("foo"), regex)); }
@Test public void testSelfEscaping() { Regex regex = likePattern(utf8Slice("\\\\abc\\%"), utf8Slice("\\")); assertTrue(likeVarchar(utf8Slice("\\abc%"), regex)); }
@Test public void testAlternateEscapedCharacters() { Regex regex = likePattern(utf8Slice("xxx%x_abcxx"), utf8Slice("x")); assertTrue(likeVarchar(utf8Slice("x%_abcx"), regex)); }
@SuppressWarnings("NumericCastThatLosesPrecision") @Test(timeOut = 1000) public void testLikeInvalidUtf8Value() { Slice value = Slices.wrappedBuffer(new byte[] {'a', 'b', 'c', (byte) 0xFF, 'x', 'y'}); Regex regex = likePattern(utf8Slice("%b%"), utf8Slice("\\")); assertTrue(likeVarchar(value, regex)); }
@Test public void testLikeBasic() { Regex regex = likePattern(utf8Slice("f%b__")); assertTrue(likeVarchar(utf8Slice("foobar"), regex)); assertFunction("'foob' LIKE 'f%b__'", BOOLEAN, false); assertFunction("'foob' LIKE 'f%b'", BOOLEAN, true); }
@Test public void testLike() throws Exception { for (String value : stringLefts) { for (String pattern : stringLefts) { Boolean expected = null; if (value != null && pattern != null) { Regex regex = LikeFunctions.likePattern(utf8Slice(pattern), utf8Slice("\\")); expected = LikeFunctions.likeVarchar(utf8Slice(value), regex); } assertExecute(generateExpression("%s like %s", value, pattern), BOOLEAN, expected); } } Futures.allAsList(futures).get(); }