Index: ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLike.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLike.java +++ ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLike.java @@ -75,10 +75,7 @@ } else if (n == '%') { sb.append(".*"); } else { - if ("\\[](){}.*^$".indexOf(n) != -1) { - sb.append('\\'); - } - sb.append(n); + sb.append(Pattern.quote(Character.toString(n))); } } return sb.toString(); @@ -91,16 +88,16 @@ * string in it for later pattern matching if it is a simple pattern. *

* Examples:

- * + * *
    * parseSimplePattern("%abc%") changes {@link #type} to PatternType.MIDDLE
    * and changes {@link #simplePattern} to "abc"
    * parseSimplePattern("%ab_c%") changes {@link #type} to PatternType.COMPLEX
    * and does not change {@link #simplePattern}
    * 
- * + * *
- * + * * @param likePattern * the input LIKE query pattern */ Index: ql/src/test/queries/clientpositive/udf_like.q =================================================================== --- ql/src/test/queries/clientpositive/udf_like.q +++ ql/src/test/queries/clientpositive/udf_like.q @@ -11,3 +11,11 @@ '_%_' LIKE '\%\_%', '%__' LIKE '__\%%', '_%' LIKE '\_\%\_\%%', '_%' LIKE '\_\%_%', '%_' LIKE '\%\_', 'ab' LIKE '\%\_', 'ab' LIKE '_a%', 'ab' LIKE 'a','ab' LIKE '','' LIKE '' FROM src WHERE src.key = 86; + + +SELECT '1+2' LIKE '_+_', + '1+2' LIKE '1+_', + '112' LIKE '1+_', + '|||' LIKE '|_|', + '+++' LIKE '1+_' +FROM src LIMIT 1; Index: ql/src/test/results/clientpositive/udf_like.q.out =================================================================== --- ql/src/test/results/clientpositive/udf_like.q.out +++ ql/src/test/results/clientpositive/udf_like.q.out @@ -99,3 +99,22 @@ POSTHOOK: Input: default@src #### A masked pattern was here #### true false true true false false false false true false false false false true +PREHOOK: query: SELECT '1+2' LIKE '_+_', + '1+2' LIKE '1+_', + '112' LIKE '1+_', + '|||' LIKE '|_|', + '+++' LIKE '1+_' +FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: SELECT '1+2' LIKE '_+_', + '1+2' LIKE '1+_', + '112' LIKE '1+_', + '|||' LIKE '|_|', + '+++' LIKE '1+_' +FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +#### A masked pattern was here #### +true true false true false