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