You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by at...@apache.org on 2009/05/20 22:49:31 UTC

svn commit: r776847 - in /hadoop/hive/trunk: ./ ql/src/java/org/apache/hadoop/hive/ql/udf/ ql/src/test/queries/clientpositive/ ql/src/test/results/clientpositive/

Author: athusoo
Date: Wed May 20 20:49:31 2009
New Revision: 776847

URL: http://svn.apache.org/viewvc?rev=776847&view=rev
Log:
HIVE-498. Fix null pointer exception in UDFRegExp when
the expression string is empty. (Zheng Shao via athusoo)


Modified:
    hadoop/hive/trunk/CHANGES.txt
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExp.java
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExpExtract.java
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExpReplace.java
    hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf1.q
    hadoop/hive/trunk/ql/src/test/results/clientpositive/udf1.q.out

Modified: hadoop/hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/CHANGES.txt?rev=776847&r1=776846&r2=776847&view=diff
==============================================================================
--- hadoop/hive/trunk/CHANGES.txt (original)
+++ hadoop/hive/trunk/CHANGES.txt Wed May 20 20:49:31 2009
@@ -140,6 +140,9 @@
 
     HIVE-496. UDFDate fails on null. (Zheng Shao via pchakka)
 
+    HIVE-498. Fix null pointer exception in UDFRegExp when
+    the expression string is empty. (Zheng Shao via athusoo)
+
 Release 0.3.1 - Unreleased
 
   INCOMPATIBLE CHANGES

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExp.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExp.java?rev=776847&r1=776846&r2=776847&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExp.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExp.java Wed May 20 20:49:31 2009
@@ -38,7 +38,7 @@
     if (s == null || regex == null) {
       return null;
     }
-    if (!regex.equals(lastRegex)) {
+    if (!regex.equals(lastRegex) || p == null) {
       lastRegex.set(regex);
       p = Pattern.compile(regex.toString());
     }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExpExtract.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExpExtract.java?rev=776847&r1=776846&r2=776847&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExpExtract.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExpExtract.java Wed May 20 20:49:31 2009
@@ -43,7 +43,7 @@
     if (s == null || regex == null) {
       return null;
     }
-    if (!regex.equals(lastRegex)) {
+    if (!regex.equals(lastRegex) || p == null) {
       lastRegex = regex;
       p = Pattern.compile(regex);
     }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExpReplace.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExpReplace.java?rev=776847&r1=776846&r2=776847&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExpReplace.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRegExpReplace.java Wed May 20 20:49:31 2009
@@ -30,7 +30,7 @@
   private Pattern p = null;
   
   private Text lastReplacement = new Text();
-  private String replacementString = null; 
+  private String replacementString = ""; 
 
   Text result = new Text();
   public UDFRegExpReplace() {
@@ -41,7 +41,7 @@
       return null;
     }
     // If the regex is changed, make sure we compile the regex again.
-    if (!regex.equals(lastRegex)) {
+    if (!regex.equals(lastRegex) || p == null) {
       lastRegex.set(regex);
       p = Pattern.compile(regex.toString());
     }

Modified: hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf1.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf1.q?rev=776847&r1=776846&r2=776847&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf1.q (original)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf1.q Wed May 20 20:49:31 2009
@@ -1,19 +1,24 @@
 CREATE TABLE dest1(c1 STRING, c2 STRING, c3 STRING, c4 STRING,
   c5 STRING, c6 STRING, c7 STRING, c8 STRING,
   c9 STRING, c10 STRING, c11 STRING, c12 STRING, c13 STRING,
-  c14 STRING, c15 STRING, c16 STRING, c17 STRING) STORED AS TEXTFILE;
+  c14 STRING, c15 STRING, c16 STRING, c17 STRING,
+  c18 STRING, c19 STRING, c20 STRING) STORED AS TEXTFILE;
 
 EXPLAIN
 FROM src INSERT OVERWRITE TABLE dest1 SELECT 'a' LIKE '%a%', 'b' LIKE '%a%', 'ab' LIKE '%a%', 'ab' LIKE '%a_',
   '%_' LIKE '\%\_', 'ab' LIKE '\%\_', 'ab' LIKE '_a%', 'ab' LIKE 'a',
   '' RLIKE '.*', 'a' RLIKE '[ab]', '' RLIKE '[ab]', 'hadoop' RLIKE '[a-z]*', 'hadoop' RLIKE 'o*',
-  REGEXP_REPLACE('abc', 'b', 'c'), REGEXP_REPLACE('abc', 'z', 'a'), REGEXP_REPLACE('abbbb', 'bb', 'b'), REGEXP_REPLACE('hadoop', '(.)[a-z]*', '$1ive')
+  REGEXP_REPLACE('abc', 'b', 'c'), REGEXP_REPLACE('abc', 'z', 'a'), REGEXP_REPLACE('abbbb', 'bb', 'b'),
+  REGEXP_REPLACE('hadoop', '(.)[a-z]*', '$1ive'), REGEXP_REPLACE('hadoopAAA','A.*',''),
+  REGEXP_REPLACE('abc', '', 'A'), 'abc' RLIKE ''
   WHERE src.key = 86;
 
 FROM src INSERT OVERWRITE TABLE dest1 SELECT 'a' LIKE '%a%', 'b' LIKE '%a%', 'ab' LIKE '%a%', 'ab' LIKE '%a_',
   '%_' LIKE '\%\_', 'ab' LIKE '\%\_', 'ab' LIKE '_a%', 'ab' LIKE 'a',
   '' RLIKE '.*', 'a' RLIKE '[ab]', '' RLIKE '[ab]', 'hadoop' RLIKE '[a-z]*', 'hadoop' RLIKE 'o*',
-  REGEXP_REPLACE('abc', 'b', 'c'), REGEXP_REPLACE('abc', 'z', 'a'), REGEXP_REPLACE('abbbb', 'bb', 'b'), REGEXP_REPLACE('hadoop', '(.)[a-z]*', '$1ive')
+  REGEXP_REPLACE('abc', 'b', 'c'), REGEXP_REPLACE('abc', 'z', 'a'), REGEXP_REPLACE('abbbb', 'bb', 'b'),
+  REGEXP_REPLACE('hadoop', '(.)[a-z]*', '$1ive'), REGEXP_REPLACE('hadoopAAA','A.*',''),
+  REGEXP_REPLACE('abc', '', 'A'), 'abc' RLIKE ''
   WHERE src.key = 86;
 
 SELECT dest1.* FROM dest1;

Modified: hadoop/hive/trunk/ql/src/test/results/clientpositive/udf1.q.out
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/results/clientpositive/udf1.q.out?rev=776847&r1=776846&r2=776847&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/results/clientpositive/udf1.q.out (original)
+++ hadoop/hive/trunk/ql/src/test/results/clientpositive/udf1.q.out Wed May 20 20:49:31 2009
@@ -1,15 +1,18 @@
 query: CREATE TABLE dest1(c1 STRING, c2 STRING, c3 STRING, c4 STRING,
   c5 STRING, c6 STRING, c7 STRING, c8 STRING,
   c9 STRING, c10 STRING, c11 STRING, c12 STRING, c13 STRING,
-  c14 STRING, c15 STRING, c16 STRING, c17 STRING) STORED AS TEXTFILE
+  c14 STRING, c15 STRING, c16 STRING, c17 STRING,
+  c18 STRING, c19 STRING, c20 STRING) STORED AS TEXTFILE
 query: EXPLAIN
 FROM src INSERT OVERWRITE TABLE dest1 SELECT 'a' LIKE '%a%', 'b' LIKE '%a%', 'ab' LIKE '%a%', 'ab' LIKE '%a_',
   '%_' LIKE '\%\_', 'ab' LIKE '\%\_', 'ab' LIKE '_a%', 'ab' LIKE 'a',
   '' RLIKE '.*', 'a' RLIKE '[ab]', '' RLIKE '[ab]', 'hadoop' RLIKE '[a-z]*', 'hadoop' RLIKE 'o*',
-  REGEXP_REPLACE('abc', 'b', 'c'), REGEXP_REPLACE('abc', 'z', 'a'), REGEXP_REPLACE('abbbb', 'bb', 'b'), REGEXP_REPLACE('hadoop', '(.)[a-z]*', '$1ive')
+  REGEXP_REPLACE('abc', 'b', 'c'), REGEXP_REPLACE('abc', 'z', 'a'), REGEXP_REPLACE('abbbb', 'bb', 'b'),
+  REGEXP_REPLACE('hadoop', '(.)[a-z]*', '$1ive'), REGEXP_REPLACE('hadoopAAA','A.*',''),
+  REGEXP_REPLACE('abc', '', 'A'), 'abc' RLIKE ''
   WHERE src.key = 86
 ABSTRACT SYNTAX TREE:
-  (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (LIKE 'a' '%a%')) (TOK_SELEXPR (LIKE 'b' '%a%')) (TOK_SELEXPR (LIKE 'ab' '%a%')) (TOK_SELEXPR (LIKE 'ab' '%a_')) (TOK_SELEXPR (LIKE '%_' '\%\_')) (TOK_SELEXPR (LIKE 'ab' '\%\_')) (TOK_SELEXPR (LIKE 'ab' '_a%')) (TOK_SELEXPR (LIKE 'ab' 'a')) (TOK_SELEXPR (RLIKE '' '.*')) (TOK_SELEXPR (RLIKE 'a' '[ab]')) (TOK_SELEXPR (RLIKE '' '[ab]')) (TOK_SELEXPR (RLIKE 'hadoop' '[a-z]*')) (TOK_SELEXPR (RLIKE 'hadoop' 'o*')) (TOK_SELEXPR (TOK_FUNCTION REGEXP_REPLACE 'abc' 'b' 'c')) (TOK_SELEXPR (TOK_FUNCTION REGEXP_REPLACE 'abc' 'z' 'a')) (TOK_SELEXPR (TOK_FUNCTION REGEXP_REPLACE 'abbbb' 'bb' 'b')) (TOK_SELEXPR (TOK_FUNCTION REGEXP_REPLACE 'hadoop' '(.)[a-z]*' '$1ive'))) (TOK_WHERE (= (. (TOK_TABLE_OR_COL src) key) 86))))
+  (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest1)) (TOK_SELECT (TOK_SELEXPR (LIKE 'a' '%a%')) (TOK_SELEXPR (LIKE 'b' '%a%')) (TOK_SELEXPR (LIKE 'ab' '%a%')) (TOK_SELEXPR (LIKE 'ab' '%a_')) (TOK_SELEXPR (LIKE '%_' '\%\_')) (TOK_SELEXPR (LIKE 'ab' '\%\_')) (TOK_SELEXPR (LIKE 'ab' '_a%')) (TOK_SELEXPR (LIKE 'ab' 'a')) (TOK_SELEXPR (RLIKE '' '.*')) (TOK_SELEXPR (RLIKE 'a' '[ab]')) (TOK_SELEXPR (RLIKE '' '[ab]')) (TOK_SELEXPR (RLIKE 'hadoop' '[a-z]*')) (TOK_SELEXPR (RLIKE 'hadoop' 'o*')) (TOK_SELEXPR (TOK_FUNCTION REGEXP_REPLACE 'abc' 'b' 'c')) (TOK_SELEXPR (TOK_FUNCTION REGEXP_REPLACE 'abc' 'z' 'a')) (TOK_SELEXPR (TOK_FUNCTION REGEXP_REPLACE 'abbbb' 'bb' 'b')) (TOK_SELEXPR (TOK_FUNCTION REGEXP_REPLACE 'hadoop' '(.)[a-z]*' '$1ive')) (TOK_SELEXPR (TOK_FUNCTION REGEXP_REPLACE 'hadoopAAA' 'A.*' '')) (TOK_SELEXPR (TOK_FUNCTION REGEXP_REPLACE 'abc' '' 'A')) (TOK_SELEXPR (RLIKE 'abc' ''))) (TOK_WHERE (= (. (TOK_TABLE_OR_COL src) key) 86))))
 
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
@@ -64,6 +67,12 @@
                         type: string
                         expr: regexp_replace('hadoop', '(.)[a-z]*', '$1ive')
                         type: string
+                        expr: regexp_replace('hadoopAAA', 'A.*', '')
+                        type: string
+                        expr: regexp_replace('abc', '', 'A')
+                        type: string
+                        expr: ('abc' regexp '')
+                        type: boolean
                   File Output Operator
                     compressed: false
                     GlobalTableId: 1
@@ -87,11 +96,13 @@
 query: FROM src INSERT OVERWRITE TABLE dest1 SELECT 'a' LIKE '%a%', 'b' LIKE '%a%', 'ab' LIKE '%a%', 'ab' LIKE '%a_',
   '%_' LIKE '\%\_', 'ab' LIKE '\%\_', 'ab' LIKE '_a%', 'ab' LIKE 'a',
   '' RLIKE '.*', 'a' RLIKE '[ab]', '' RLIKE '[ab]', 'hadoop' RLIKE '[a-z]*', 'hadoop' RLIKE 'o*',
-  REGEXP_REPLACE('abc', 'b', 'c'), REGEXP_REPLACE('abc', 'z', 'a'), REGEXP_REPLACE('abbbb', 'bb', 'b'), REGEXP_REPLACE('hadoop', '(.)[a-z]*', '$1ive')
+  REGEXP_REPLACE('abc', 'b', 'c'), REGEXP_REPLACE('abc', 'z', 'a'), REGEXP_REPLACE('abbbb', 'bb', 'b'),
+  REGEXP_REPLACE('hadoop', '(.)[a-z]*', '$1ive'), REGEXP_REPLACE('hadoopAAA','A.*',''),
+  REGEXP_REPLACE('abc', '', 'A'), 'abc' RLIKE ''
   WHERE src.key = 86
 Input: default/src
 Output: default/dest1
 query: SELECT dest1.* FROM dest1
 Input: default/dest1
-Output: /data/users/athusoo/commits/hive_trunk_ws8/ql/../build/ql/tmp/1029990279/355552817.10000
-true	false	true	true	true	false	false	false	true	true	false	true	false	acc	abc	abb	hive
+Output: /data/users/zshao/tools/495-trunk-apache-hive/ql/../build/ql/tmp/572903932/16944307.10000
+true	false	true	true	true	false	false	false	true	true	false	true	false	acc	abc	abb	hive	hadoop	AaAbAcA	false