Index: ql/src/test/queries/clientpositive/udf_regexp.q =================================================================== --- ql/src/test/queries/clientpositive/udf_regexp.q (revision 0) +++ ql/src/test/queries/clientpositive/udf_regexp.q (revision 0) @@ -0,0 +1,13 @@ +DESCRIBE FUNCTION regexp; + +DESCRIBE FUNCTION EXTENDED regexp; + +SELECT 'fofo' REGEXP '^fo' FROM src LIMIT 1; +SELECT 'fo\no' REGEXP '^fo\no$' FROM src LIMIT 1; +SELECT 'Bn' REGEXP '^Ba*n' FROM src LIMIT 1; +SELECT 'afofo' REGEXP 'fo' FROM src LIMIT 1; + +SELECT 'afofo' REGEXP '^fo' FROM src LIMIT 1; +SELECT 'Baan' REGEXP '^Ba?n' FROM src LIMIT 1; +SELECT 'axe' REGEXP 'pi|apa' FROM src LIMIT 1; +SELECT 'pip' REGEXP '^(pi)*$' FROM src LIMIT 1; Index: ql/src/test/results/clientpositive/udf_regexp.q.out =================================================================== --- ql/src/test/results/clientpositive/udf_regexp.q.out (revision 0) +++ ql/src/test/results/clientpositive/udf_regexp.q.out (revision 0) @@ -0,0 +1,85 @@ +PREHOOK: query: DESCRIBE FUNCTION regexp +PREHOOK: type: DESCFUNCTION +POSTHOOK: query: DESCRIBE FUNCTION regexp +POSTHOOK: type: DESCFUNCTION +str regexp regexp - Returns true if str matches regexp and false otherwise +PREHOOK: query: DESCRIBE FUNCTION EXTENDED regexp +PREHOOK: type: DESCFUNCTION +POSTHOOK: query: DESCRIBE FUNCTION EXTENDED regexp +POSTHOOK: type: DESCFUNCTION +str regexp regexp - Returns true if str matches regexp and false otherwise +Example: + > SELECT 'fb' regexp '.*' FROM src LIMIT 1; + true +PREHOOK: query: SELECT 'fofo' REGEXP '^fo' FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/1827670324/10000 +POSTHOOK: query: SELECT 'fofo' REGEXP '^fo' FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/1827670324/10000 +true +PREHOOK: query: SELECT 'fo\no' REGEXP '^fo\no$' FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/1489042125/10000 +POSTHOOK: query: SELECT 'fo\no' REGEXP '^fo\no$' FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/1489042125/10000 +true +PREHOOK: query: SELECT 'Bn' REGEXP '^Ba*n' FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/1197765265/10000 +POSTHOOK: query: SELECT 'Bn' REGEXP '^Ba*n' FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/1197765265/10000 +true +PREHOOK: query: SELECT 'afofo' REGEXP 'fo' FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/77338840/10000 +POSTHOOK: query: SELECT 'afofo' REGEXP 'fo' FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/77338840/10000 +true +PREHOOK: query: SELECT 'afofo' REGEXP '^fo' FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/1458231789/10000 +POSTHOOK: query: SELECT 'afofo' REGEXP '^fo' FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/1458231789/10000 +false +PREHOOK: query: SELECT 'Baan' REGEXP '^Ba?n' FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/690536166/10000 +POSTHOOK: query: SELECT 'Baan' REGEXP '^Ba?n' FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/690536166/10000 +false +PREHOOK: query: SELECT 'axe' REGEXP 'pi|apa' FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/1375828827/10000 +POSTHOOK: query: SELECT 'axe' REGEXP 'pi|apa' FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/1375828827/10000 +false +PREHOOK: query: SELECT 'pip' REGEXP '^(pi)*$' FROM src LIMIT 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/249908241/10000 +POSTHOOK: query: SELECT 'pip' REGEXP '^(pi)*$' FROM src LIMIT 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: file:/data/users/pyang/trunk/VENDOR.hive/trunk/build/ql/tmp/249908241/10000 +false Index: ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExp.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExp.java (revision 1835) +++ ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExp.java (working copy) @@ -52,7 +52,7 @@ p = Pattern.compile(regex.toString()); } Matcher m = p.matcher(s.toString()); - result.set(m.matches()); + result.set(m.find(0)); return result; }