You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by na...@apache.org on 2009/04/15 00:54:45 UTC

svn commit: r764994 [3/12] - in /hadoop/hive/trunk: ./ data/conf/ eclipse-templates/ metastore/src/java/org/apache/hadoop/hive/metastore/ ql/ ql/lib/ ql/src/java/org/apache/hadoop/hive/ql/exec/ ql/src/java/org/apache/hadoop/hive/ql/io/ ql/src/java/org/...

Added: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericUnaryOp.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericUnaryOp.java?rev=764994&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericUnaryOp.java (added)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFBaseNumericUnaryOp.java Tue Apr 14 22:54:39 2009
@@ -0,0 +1,56 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.udf;
+
+import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.FloatWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
+
+/**
+ * Base class for numeric operators like +, -, / etc. All these operators
+ * share a common method resolver (NumericOpMethodResolver).
+ */
+public abstract class UDFBaseNumericUnaryOp extends UDF {
+
+  /**
+   * Constructor.
+   */
+  public UDFBaseNumericUnaryOp() {
+    super();
+  }
+
+  protected ByteWritable byteWritable = new ByteWritable();
+  protected ShortWritable shortWritable = new ShortWritable();
+  protected IntWritable intWritable = new IntWritable();
+  protected LongWritable longWritable = new LongWritable();
+  protected FloatWritable floatWritable = new FloatWritable();
+  protected DoubleWritable doubleWritable = new DoubleWritable();
+  
+  public abstract ByteWritable evaluate(ByteWritable a);  
+  public abstract ShortWritable evaluate(ShortWritable a);  
+  public abstract IntWritable evaluate(IntWritable a);  
+  public abstract LongWritable evaluate(LongWritable a);  
+  public abstract FloatWritable evaluate(FloatWritable a);  
+  public abstract DoubleWritable evaluate(DoubleWritable a);  
+
+}

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFCeil.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFCeil.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFCeil.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFCeil.java Tue Apr 14 22:54:39 2009
@@ -21,19 +21,23 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.io.LongWritable;
 
 public class UDFCeil extends UDF {
 
   private static Log LOG = LogFactory.getLog(UDFCeil.class.getName());
 
+  LongWritable longWritable = new LongWritable();
   public UDFCeil() {
   }
 
-  public Long evaluate(Double i)  {
+  public LongWritable evaluate(DoubleWritable i)  {
     if (i == null) {
       return null;
     } else {
-      return Long.valueOf((long)Math.ceil(i));
+      longWritable.set((long)Math.ceil(i.get()));
+      return longWritable;
     }
   }
   

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFConcat.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFConcat.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFConcat.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFConcat.java Tue Apr 14 22:54:39 2009
@@ -19,6 +19,7 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFConcat extends UDF {
@@ -26,8 +27,12 @@
   public UDFConcat() {
   }
 
-  public String evaluate(String a, String b) {
-    return a+b;
+  Text text = new Text();
+  public Text evaluate(Text a, Text b) {
+    text.clear();
+    text.set(a);
+    text.append(b.getBytes(), 0, b.getLength());
+    return text;
   }
   
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDate.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDate.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDate.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDate.java Tue Apr 14 22:54:39 2009
@@ -26,6 +26,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFDate extends UDF {
@@ -33,8 +34,8 @@
   private static Log LOG = LogFactory.getLog(UDFDate.class.getName());
 
   private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
-  private Calendar calendar = Calendar.getInstance();
 
+  Text t = new Text();
   public UDFDate() {
   }
 
@@ -44,11 +45,12 @@
    * @param dateString the date string in the format of "yyyy-MM-dd HH:mm:ss" or "yyyy-MM-dd".
    * @return the date in the format of "yyyy-MM-dd".
    */
-  public String evaluate(String dateString)  {
+  public Text evaluate(Text dateString)  {
     
     try {
-      Date date = formatter.parse(dateString);
-      return formatter.format(date);
+      Date date = formatter.parse(dateString.toString());
+      t.set(formatter.format(date));
+      return t;
     } catch (ParseException e) {
       return null;
     }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateAdd.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateAdd.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateAdd.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateAdd.java Tue Apr 14 22:54:39 2009
@@ -27,6 +27,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFDateAdd extends UDF {
@@ -36,6 +38,8 @@
   private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
   private Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
 
+  Text result = new Text();
+  
   public UDFDateAdd() {
   }
 
@@ -50,13 +54,14 @@
    * @param days The number of days to add.
    * @return the date in the format of "yyyy-MM-dd".
    */
-  public String evaluate(String dateString1, int days)  {
+  public Text evaluate(Text dateString1, IntWritable days)  {
     
     try {
-      calendar.setTime(formatter.parse(dateString1));
-      calendar.add(Calendar.DAY_OF_MONTH, days);
+      calendar.setTime(formatter.parse(dateString1.toString()));
+      calendar.add(Calendar.DAY_OF_MONTH, days.get());
       Date newDate = calendar.getTime();
-      return formatter.format(newDate);
+      result.set(formatter.format(newDate));
+      return result;
     } catch (ParseException e) {
       return null;
     }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateDiff.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateDiff.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateDiff.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateDiff.java Tue Apr 14 22:54:39 2009
@@ -25,6 +25,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFDateDiff extends UDF {
@@ -33,6 +35,8 @@
 
   private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
 
+  IntWritable result = new IntWritable();
+  
   public UDFDateDiff() {
     formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
   }
@@ -46,13 +50,15 @@
    * @param dateString2 the date string in the format of "yyyy-MM-dd HH:mm:ss" or "yyyy-MM-dd".
    * @return the difference in days.
    */
-  public Integer evaluate(String dateString1, String dateString2)  {
+  public IntWritable evaluate(Text dateString1, Text dateString2)  {
     try {
       // NOTE: This implementation avoids the extra-second problem
       // by comparing with UTC epoch and integer division.
-      long diffInMilliSeconds = (formatter.parse(dateString1).getTime() - formatter.parse(dateString2).getTime());
+      long diffInMilliSeconds = (formatter.parse(dateString1.toString()).getTime()
+          - formatter.parse(dateString2.toString()).getTime());
       // 86400 is the number of seconds in a day
-      return Integer.valueOf((int)(diffInMilliSeconds / (86400 * 1000)));
+      result.set((int)(diffInMilliSeconds / (86400 * 1000)));
+      return result;
     } catch (ParseException e) {
       return null;
     }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateSub.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateSub.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateSub.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDateSub.java Tue Apr 14 22:54:39 2009
@@ -27,6 +27,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFDateSub extends UDF {
@@ -36,6 +38,7 @@
   private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
   private Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
 
+  Text result = new Text();
   public UDFDateSub() {
   }
 
@@ -50,13 +53,14 @@
    * @param days the number of days to subtract.
    * @return the date in the format of "yyyy-MM-dd".
    */
-  public String evaluate(String dateString1, int days)  {
+  public Text evaluate(Text dateString1, IntWritable days)  {
     
     try {
-      calendar.setTime(formatter.parse(dateString1));
-      calendar.add(Calendar.DAY_OF_MONTH, -days);
+      calendar.setTime(formatter.parse(dateString1.toString()));
+      calendar.add(Calendar.DAY_OF_MONTH, -days.get());
       Date newDate = calendar.getTime();
-      return formatter.format(newDate);
+      result.set(formatter.format(newDate));
+      return result;
     } catch (ParseException e) {
       return null;
     }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDayOfMonth.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDayOfMonth.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDayOfMonth.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDayOfMonth.java Tue Apr 14 22:54:39 2009
@@ -26,6 +26,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFDayOfMonth extends UDF {
@@ -35,6 +37,7 @@
   private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
   private Calendar calendar = Calendar.getInstance();
 
+  IntWritable result = new IntWritable();
   public UDFDayOfMonth() {
   }
 
@@ -44,12 +47,13 @@
    * @param dateString the dateString in the format of "yyyy-MM-dd HH:mm:ss" or "yyyy-MM-dd".
    * @return an int from 1 to 31. null if the dateString is not a valid date string.
    */
-  public Integer evaluate(String dateString)  {
+  public IntWritable evaluate(Text dateString)  {
     
     try {
-      Date date = formatter.parse(dateString);
+      Date date = formatter.parse(dateString.toString());
       calendar.setTime(date);
-      return calendar.get(Calendar.DAY_OF_MONTH);
+      result.set(calendar.get(Calendar.DAY_OF_MONTH));
+      return result;
     } catch (ParseException e) {
       return null;
     }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDefaultSampleHashFn.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDefaultSampleHashFn.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDefaultSampleHashFn.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDefaultSampleHashFn.java Tue Apr 14 22:54:39 2009
@@ -19,23 +19,28 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.IntWritable;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 public class UDFDefaultSampleHashFn extends UDF {
   protected final Log LOG;
 
+  IntWritable result = new IntWritable();
+  
   public UDFDefaultSampleHashFn() {
     LOG = LogFactory.getLog(this.getClass().getName());
   }
 
-  public int evaluate(Object o) {
-    return o.hashCode();
+  public IntWritable evaluate(Object o) {
+    result.set(o.hashCode());
+    return result;
   }
   
   // TODO: For now, only allow up to two columns on which to sample
   // Going forward we will allow sampling on an arbitrary number of columns
-  public int evaluate(Object o1, Object o2) {
-    return o1.hashCode() ^ o2.hashCode();
+  public IntWritable evaluate(Object o1, Object o2) {
+    result.set(o1.hashCode() ^ o2.hashCode());
+    return result;
   }
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFExp.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFExp.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFExp.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFExp.java Tue Apr 14 22:54:39 2009
@@ -21,23 +21,27 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 
 
 public class UDFExp extends UDF {
 
   private static Log LOG = LogFactory.getLog(UDFExp.class.getName());
 
+  DoubleWritable result = new DoubleWritable();
+  
   public UDFExp() {
   }
 
   /**
    * Raise e (the base of natural logarithm) to the power of a. 
    */
-  public Double evaluate(Double a)  {
+  public DoubleWritable evaluate(DoubleWritable a)  {
     if (a == null) {
       return null;
     } else {
-      return Double.valueOf(Math.exp(a));
+      result.set(Math.exp(a.get()));
+      return result;
     }
   }
 

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFloor.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFloor.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFloor.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFloor.java Tue Apr 14 22:54:39 2009
@@ -21,20 +21,25 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.io.LongWritable;
 
 
 public class UDFFloor extends UDF {
 
   private static Log LOG = LogFactory.getLog(UDFFloor.class.getName());
 
+  LongWritable result = new LongWritable();
+  
   public UDFFloor() {
   }
 
-  public Long evaluate(Double i)  {
+  public LongWritable evaluate(DoubleWritable i)  {
     if (i == null) {
       return null;
     } else {
-      return Long.valueOf((long)Math.floor(i));
+      result.set((long)Math.floor(i.get()));
+      return result;
     }
   }
 

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFromUnixTime.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFromUnixTime.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFromUnixTime.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFFromUnixTime.java Tue Apr 14 22:54:39 2009
@@ -24,6 +24,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFFromUnixTime extends UDF {
@@ -32,11 +34,15 @@
 
   private SimpleDateFormat formatter;
   
+  Text result = new Text();
+  Text lastFormat = new Text();
+    
   public UDFFromUnixTime() {
   }
 
-  public String evaluate(Integer unixtime)  {
-    return evaluate(unixtime, "yyyy-MM-dd HH:mm:ss");
+  Text defaultFormat = new Text("yyyy-MM-dd HH:mm:ss");
+  public Text evaluate(IntWritable unixtime)  {
+    return evaluate(unixtime, defaultFormat);
   }
   
   /**
@@ -45,18 +51,20 @@
    * @param format See http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html
    * @return a String in the format specified.
    */
-  public String evaluate(Integer unixtime, String format)  {
+  public Text evaluate(IntWritable unixtime, Text format)  {
     if (unixtime == null || format == null) {
       return null;
     }
     
-    if (formatter == null) {
-      formatter = new SimpleDateFormat(format);
+    if (!format.equals(lastFormat)) {
+      formatter = new SimpleDateFormat(format.toString());
+      lastFormat.set(format);
     }
     
     // convert seconds to milliseconds
-    Date date = new Date(unixtime * 1000L);
-    return formatter.format(date);
+    Date date = new Date(unixtime.get() * 1000L);
+    result.set(formatter.format(date));
+    return result;
   }
 
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFIf.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFIf.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFIf.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFIf.java Tue Apr 14 22:54:39 2009
@@ -28,7 +28,18 @@
 import org.apache.hadoop.hive.ql.exec.AmbiguousMethodException;
 import org.apache.hadoop.hive.ql.exec.UDF;
 import org.apache.hadoop.hive.ql.exec.UDFMethodResolver;
-import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils;
+import org.apache.hadoop.io.BooleanWritable;
+import org.apache.hadoop.io.FloatWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.NullWritable;
+import org.apache.hadoop.io.Text;
 
 /**
  * UDF Class for SQL construct "IF".
@@ -64,8 +75,16 @@
      */
     Class<? extends UDF> udfClass;
     
-    static Class[] classPriority = {String.class, Double.class, Long.class,
-      Integer.class, Short.class, Byte.class, Boolean.class, Void.class};
+    static TypeInfo[] classPriority = {
+      TypeInfoFactory.stringTypeInfo, 
+      TypeInfoFactory.doubleTypeInfo, 
+      TypeInfoFactory.floatTypeInfo,
+      TypeInfoFactory.longTypeInfo,
+      TypeInfoFactory.intTypeInfo,
+      TypeInfoFactory.shortTypeInfo,
+      TypeInfoFactory.byteTypeInfo,
+      TypeInfoFactory.booleanTypeInfo,
+      TypeInfoFactory.voidTypeInfo};
     
     /**
      * Constuctor.
@@ -78,19 +97,19 @@
      * @see org.apache.hadoop.hive.ql.exec.UDFMethodResolver#getEvalMethod(java.util.List)
      */
     @Override
-    public Method getEvalMethod(List<Class<?>> argClasses)
+    public Method getEvalMethod(List<TypeInfo> argTypeInfos)
     throws AmbiguousMethodException {
       
-      if (argClasses.size() != 3) {
+      if (argTypeInfos.size() != 3) {
         return null;
       }
       
-      List<Class<?>> pClasses = new ArrayList<Class<?>>(3);
-      pClasses.add(Boolean.class);
+      List<TypeInfo> pClasses = new ArrayList<TypeInfo>(3);
+      pClasses.add(TypeInfoFactory.booleanTypeInfo);
 
       for(int i=0; i<classPriority.length; i++) {
-        if (ObjectInspectorUtils.generalizePrimitive(argClasses.get(1)) == classPriority[i] ||
-            ObjectInspectorUtils.generalizePrimitive(argClasses.get(2)) == classPriority[i]) {
+        if (argTypeInfos.get(1).equals(classPriority[i]) ||
+            argTypeInfos.get(2).equals(classPriority[i])) {
           pClasses.add(classPriority[i]);
           pClasses.add(classPriority[i]);
           break;
@@ -100,26 +119,25 @@
         return null;
       }
       
-      System.err.println("Matched UDFIF: " + pClasses);
       Method udfMethod = null;
 
       for(Method m: Arrays.asList(udfClass.getMethods())) {
         if (m.getName().equals("evaluate")) {
 
-          Class<?>[] argumentTypeInfos = m.getParameterTypes();
+          List<TypeInfo> acceptedTypeInfos = TypeInfoUtils.getParameterTypeInfos(m);
 
-          boolean match = (argumentTypeInfos.length == pClasses.size());
+          boolean match = (acceptedTypeInfos.size() == pClasses.size());
 
           for(int i=0; i<pClasses.size() && match; i++) {
-            Class<?> accepted = ObjectInspectorUtils.generalizePrimitive(argumentTypeInfos[i]);
-            if (accepted != pClasses.get(i)) {
+            TypeInfo accepted = acceptedTypeInfos.get(i);
+            if (!accepted.equals(pClasses.get(i))) {
               match = false;
             }
           }
 
           if (match) {
             if (udfMethod != null) {
-              throw new AmbiguousMethodException(udfClass, argClasses);
+              throw new AmbiguousMethodException(udfClass, argTypeInfos);
             }
             else {
               udfMethod = m;
@@ -134,8 +152,8 @@
   /**
    * Method for SQL construct "IF(test,valueTrue,valueFalse)"
    */
-  public String evaluate(Boolean test, String valueTrue, String valueFalse)  {
-    if (Boolean.TRUE.equals(test)) {
+  public Text evaluate(BooleanWritable test, Text valueTrue, Text valueFalse)  {
+    if (test != null && test.get()) {
       return valueTrue;
     } else {
       return valueFalse;
@@ -145,8 +163,8 @@
   /**
    * Method for SQL construct "IF(test,valueTrue,valueFalse)"
    */
-  public Double evaluate(Boolean test, Double valueTrue, Double valueFalse)  {
-    if (Boolean.TRUE.equals(test)) {
+  public DoubleWritable evaluate(BooleanWritable test, DoubleWritable valueTrue, DoubleWritable valueFalse)  {
+    if (test != null && test.get()) {
       return valueTrue;
     } else {
       return valueFalse;
@@ -156,8 +174,19 @@
   /**
    * Method for SQL construct "IF(test,valueTrue,valueFalse)"
    */
-  public Byte evaluate(Boolean test, Byte valueTrue, Byte valueFalse)  {
-    if (Boolean.TRUE.equals(test)) {
+  public FloatWritable evaluate(BooleanWritable test, FloatWritable valueTrue, FloatWritable valueFalse)  {
+    if (test != null && test.get()) {
+      return valueTrue;
+    } else {
+      return valueFalse;
+    }
+  }
+  
+  /**
+   * Method for SQL construct "IF(test,valueTrue,valueFalse)"
+   */
+  public ByteWritable evaluate(BooleanWritable test, ByteWritable valueTrue, ByteWritable valueFalse)  {
+    if (test != null && test.get()) {
       return valueTrue;
     } else {
       return valueFalse;
@@ -167,8 +196,8 @@
   /**
    * Method for SQL construct "IF(test,valueTrue,valueFalse)"
    */
-  public Short evaluate(Boolean test, Short valueTrue, Short valueFalse)  {
-    if (Boolean.TRUE.equals(test)) {
+  public ShortWritable evaluate(BooleanWritable test, ShortWritable valueTrue, ShortWritable valueFalse)  {
+    if (test != null && test.get()) {
       return valueTrue;
     } else {
       return valueFalse;
@@ -178,8 +207,8 @@
   /**
    * Method for SQL construct "IF(test,valueTrue,valueFalse)"
    */
-  public Integer evaluate(Boolean test, Integer valueTrue, Integer valueFalse)  {
-    if (Boolean.TRUE.equals(test)) {
+  public IntWritable evaluate(BooleanWritable test, IntWritable valueTrue, IntWritable valueFalse)  {
+    if (test != null && test.get()) {
       return valueTrue;
     } else {
       return valueFalse;
@@ -189,8 +218,8 @@
   /**
    * Method for SQL construct "IF(test,valueTrue,valueFalse)"
    */
-  public Long evaluate(Boolean test, Long valueTrue, Long valueFalse)  {
-    if (Boolean.TRUE.equals(test)) {
+  public LongWritable evaluate(BooleanWritable test, LongWritable valueTrue, LongWritable valueFalse)  {
+    if (test != null && test.get()) {
       return valueTrue;
     } else {
       return valueFalse;
@@ -200,8 +229,8 @@
   /**
    * Method for SQL construct "IF(test,valueTrue,valueFalse)"
    */
-  public Boolean evaluate(Boolean test, Boolean valueTrue, Boolean valueFalse)  {
-    if (Boolean.TRUE.equals(test)) {
+  public BooleanWritable evaluate(BooleanWritable test, BooleanWritable valueTrue, BooleanWritable valueFalse)  {
+    if (test != null && test.get()) {
       return valueTrue;
     } else {
       return valueFalse;
@@ -211,8 +240,8 @@
   /**
    * Method for SQL construct "IF(test,valueTrue,valueFalse)"
    */
-  public Void evaluate(Boolean test, Void valueTrue, Void valueFalse)  {
-    if (Boolean.TRUE.equals(test)) {
+  public NullWritable evaluate(BooleanWritable test, NullWritable valueTrue, NullWritable valueFalse)  {
+    if (test != null && test.get()) {
       return valueTrue;
     } else {
       return valueFalse;

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFJson.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFJson.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFJson.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFJson.java Tue Apr 14 22:54:39 2009
@@ -31,6 +31,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFJson extends UDF {
@@ -38,6 +39,7 @@
   private Pattern pattern_key = Pattern.compile("^([a-zA-Z0-9_\\-]+).*");
   private Pattern pattern_index = Pattern.compile("\\[([0-9]+|\\*)\\]");
 
+  Text result = new Text();
   public UDFJson() {
   }
 
@@ -61,15 +63,18 @@
    *    [,] : Union operator
    *    [start:end:step] : array slice operator
    *
-   * @param jsonString the json string.
-   * @param pathString the json path expression.
+   * @param jsonText the json string.
+   * @param pathText the json path expression.
    * @return json string or null when error happens.
    */
-  public String evaluate(String jsonString, String pathString) {
-    if (jsonString == null || pathString == null) {
+  public Text evaluate(Text jsonText, Text pathText) {
+    if (jsonText == null || pathText == null) {
       return null;
     }
 
+    String jsonString = jsonText.toString();
+    String pathString = pathText.toString();
+    
     try {
       String[] pathExpr = pathString.split("\\.", -1);
       if (!pathExpr[0].equalsIgnoreCase("$")) {
@@ -79,7 +84,8 @@
       for (int i = 1; i < pathExpr.length; i++) {
         extractObject = extract(extractObject, pathExpr[i]);
       }
-      return extractObject.toString();
+      result.set(extractObject.toString());
+      return result;
     } catch (Exception e) {
       return null;
     }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLTrim.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLTrim.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLTrim.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLTrim.java Tue Apr 14 22:54:39 2009
@@ -19,6 +19,7 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.Text;
 import org.apache.commons.lang.StringUtils;
 
 import java.util.regex.Pattern;
@@ -26,14 +27,16 @@
 
 public class UDFLTrim extends UDF {
 
+  Text result = new Text();
   public UDFLTrim() {
   }
 
-  public String evaluate(String s) {
+  public Text evaluate(Text s) {
     if (s == null) {
       return null;
     }
-    return StringUtils.stripStart(s, " ");
+    result.set(StringUtils.stripStart(s.toString(), " "));
+    return result;
   }
 
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLike.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLike.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLike.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLike.java Tue Apr 14 22:54:39 2009
@@ -21,15 +21,19 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.BooleanWritable;
+import org.apache.hadoop.io.Text;
+
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
 
 public class UDFLike extends UDF {
 
   private static Log LOG = LogFactory.getLog(UDFLike.class.getName());
-  private String lastLikePattern = null;
+  private Text lastLikePattern = new Text();
   private Pattern p = null;
 
+  private BooleanWritable result = new BooleanWritable();
   public UDFLike() {
   }
 
@@ -59,16 +63,17 @@
     return sb.toString();
   }
   
-  public Boolean evaluate(String s, String likePattern) {
+  public BooleanWritable evaluate(Text s, Text likePattern) {
     if (s == null || likePattern == null) {
       return null;
     }
     if (!likePattern.equals(lastLikePattern)) {
-      lastLikePattern = likePattern;
-      p = Pattern.compile(likePatternToRegExp(likePattern));
+      lastLikePattern.set(likePattern);
+      p = Pattern.compile(likePatternToRegExp(likePattern.toString()));
     }
-    Matcher m = p.matcher(s);
-    return Boolean.valueOf(m.matches());    
+    Matcher m = p.matcher(s.toString());
+    result.set(m.matches());
+    return result;
   }
   
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLn.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLn.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLn.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLn.java Tue Apr 14 22:54:39 2009
@@ -21,23 +21,27 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 
 
 public class UDFLn extends UDF {
 
   private static Log LOG = LogFactory.getLog(UDFLn.class.getName());
 
+  DoubleWritable result = new DoubleWritable();
+  
   public UDFLn() {
   }
 
   /**
    * Returns the natural logarithm of "a".
    */
-  public Double evaluate(Double a)  {
-    if (a == null || a <= 0.0) {
+  public DoubleWritable evaluate(DoubleWritable a)  {
+    if (a == null || a.get() <= 0.0) {
       return null;
     } else {
-      return Double.valueOf(Math.log(a));
+      result.set(Math.log(a.get()));
+      return result;
     }
   }
 

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java Tue Apr 14 22:54:39 2009
@@ -21,34 +21,38 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 
 
 public class UDFLog extends UDF {
 
   private static Log LOG = LogFactory.getLog(UDFLog.class.getName());
 
+  DoubleWritable result = new DoubleWritable();
   public UDFLog() {
   }
 
   /**
    * Returns the natural logarithm of "a".
    */
-  public Double evaluate(Double a)  {
-    if (a == null || a <= 0.0) {
+  public DoubleWritable evaluate(DoubleWritable a)  {
+    if (a == null || a.get() <= 0.0) {
       return null;
     } else {
-      return Double.valueOf(Math.log(a));
+      result.set(Math.log(a.get()));
+      return result;
     }
   }
 
   /**
    * Returns the logarithm of "a" with base "base".
    */
-  public Double evaluate(Double base, Double a)  {
-    if (a == null || a <= 0.0 || base == null || base <= 1.0) {
+  public DoubleWritable evaluate(DoubleWritable base, DoubleWritable a)  {
+    if (a == null || a.get() <= 0.0 || base == null || base.get() <= 1.0) {
       return null;
     } else {
-      return Double.valueOf(Math.log(a)/Math.log(base));
+      result.set(Math.log(a.get())/Math.log(base.get()));
+      return result;
     }
   }
 

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog10.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog10.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog10.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog10.java Tue Apr 14 22:54:39 2009
@@ -21,6 +21,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 
 
 public class UDFLog10 extends UDF {
@@ -28,17 +29,21 @@
   private static Log LOG = LogFactory.getLog(UDFLog10.class.getName());
 
   private static double log10 = Math.log(10.0);
+  
+  DoubleWritable result = new DoubleWritable();
+  
   public UDFLog10() {
   }
 
   /**
    * Returns the logarithm of "a" with base 10.
    */
-  public Double evaluate(Double a)  {
-    if (a == null || a <= 0.0) {
+  public DoubleWritable evaluate(DoubleWritable a)  {
+    if (a == null || a.get() <= 0.0) {
       return null;
     } else {
-      return Double.valueOf(Math.log(a)/log10);
+      result.set(Math.log(a.get())/log10);
+      return result;
     }
   }
 

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog2.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog2.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog2.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog2.java Tue Apr 14 22:54:39 2009
@@ -21,6 +21,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 
 
 public class UDFLog2 extends UDF {
@@ -28,17 +29,21 @@
   private static Log LOG = LogFactory.getLog(UDFLog2.class.getName());
 
   private static double log2 = Math.log(2.0);
+
+  DoubleWritable result = new DoubleWritable();
+  
   public UDFLog2() {
   }
 
   /**
    * Returns the logarithm of "a" with base 2.
    */
-  public Double evaluate(Double a)  {
-    if (a == null || a <= 0.0) {
+  public DoubleWritable evaluate(DoubleWritable a)  {
+    if (a == null || a.get() <= 0.0) {
       return null;
     } else {
-      return Double.valueOf(Math.log(a)/log2);
+      result.set(Math.log(a.get())/log2);
+      return result;
     }
   }
 

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLower.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLower.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLower.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLower.java Tue Apr 14 22:54:39 2009
@@ -19,19 +19,23 @@
 package org.apache.hadoop.hive.ql.udf;
 
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.Text;
+
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
 
 public class UDFLower extends UDF {
 
+  Text t = new Text();
   public UDFLower() {
   }
 
-  public String evaluate(String s) {
+  public Text evaluate(Text s) {
     if (s == null) {
       return null;
     }
-    return s.toLowerCase();
+    t.set(s.toString().toUpperCase());
+    return t;
   }
 
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java Tue Apr 14 22:54:39 2009
@@ -26,6 +26,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFMonth extends UDF {
@@ -35,6 +37,7 @@
   private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
   private Calendar calendar = Calendar.getInstance();
 
+  IntWritable result = new IntWritable();
   public UDFMonth() {
   }
 
@@ -44,12 +47,13 @@
    * @param dateString the dateString in the format of "yyyy-MM-dd HH:mm:ss" or "yyyy-MM-dd".
    * @return an int from 1 to 12. null if the dateString is not a valid date string.
    */
-  public Integer evaluate(String dateString)  {
+  public IntWritable evaluate(Text dateString)  {
     
     try {
-      Date date = formatter.parse(dateString);
+      Date date = formatter.parse(dateString.toString());
       calendar.setTime(date);
-      return 1 + calendar.get(Calendar.MONTH);
+      result.set(1 + calendar.get(Calendar.MONTH));
+      return result;
     } catch (ParseException e) {
       return null;
     }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPAnd.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPAnd.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPAnd.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPAnd.java Tue Apr 14 22:54:39 2009
@@ -21,25 +21,28 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.io.BooleanWritable;
 
 
 public class UDFOPAnd extends UDF {
 
   private static Log LOG = LogFactory.getLog("org.apache.hadoop.hive.ql.udf.UDFOPAnd");
 
+  BooleanWritable result = new BooleanWritable();
   public UDFOPAnd() {
   }
 
   // Three-value Boolean: NULL stands for unknown
-  public Boolean evaluate(Boolean a, Boolean b)  {
-    Boolean r = null;
-    if (Boolean.TRUE.equals(a) && Boolean.TRUE.equals(b)) {
-      r = Boolean.TRUE;
+  public BooleanWritable evaluate(BooleanWritable a, BooleanWritable b)  {
+    
+    if ((a != null && a.get() == false) || (b != null && b.get() == false)) {
+      result.set(false);
+      return result;
     }
-    if (Boolean.FALSE.equals(a) || Boolean.FALSE.equals(b)) {
-      r = Boolean.FALSE;
+    if ((a != null && a.get() == true) && (b != null && b.get() == true)) {
+      result.set(true);
+      return result;
     }
-    // LOG.info("evaluate(" + a + "," + b + ")=" + r);
-    return r;
+    return null;
   }
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitAnd.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitAnd.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitAnd.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitAnd.java Tue Apr 14 22:54:39 2009
@@ -21,55 +21,49 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
 
 
-public class UDFOPBitAnd extends UDF {
+public class UDFOPBitAnd extends UDFBaseBitOP {
 
   private static Log LOG = LogFactory.getLog(UDFOPBitAnd.class.getName());
 
   public UDFOPBitAnd() {
   }
 
-  public Byte evaluate(Byte a, Byte b)  {
-    if ((a == null) || (b == null))
+  public ByteWritable evaluate(ByteWritable a, ByteWritable b) {
+    if (a == null || b == null) {
       return null;
-
-    return Byte.valueOf((byte)(a.byteValue() & b.byteValue()));
-  }
-
-  public Integer evaluate(Integer a, Integer b)  {
-    if ((a == null) || (b == null))
-      return null;
-
-    return Integer.valueOf(a.intValue() & b.intValue());
+    }
+    byteWritable.set((byte)(a.get() & b.get()));
+    return byteWritable;
   }
 
-  public Long evaluate(Long a, Long b)  {
-    if ((a == null) || (b == null))
+  public ShortWritable evaluate(ShortWritable a, ShortWritable b) {
+    if (a == null || b == null) {
       return null;
-
-    return Long.valueOf(a.longValue() & b.longValue());
+    }
+    shortWritable.set((short)(a.get() & b.get()));
+    return shortWritable;
   }
   
-  public Long evaluate(String a, String b)  {
-    if ((a == null) || (b == null))
+  public IntWritable evaluate(IntWritable a, IntWritable b) {
+    if (a == null || b == null) {
       return null;
-
-    return evaluate(Long.valueOf(a), Long.valueOf(b));
+    }
+    intWritable.set(a.get() & b.get());
+    return intWritable;
   }
-  
-  public Long evaluate(Long a, String b)  {
-    if ((a == null) || (b == null))
-      return null;
 
-    return evaluate(a, Long.valueOf(b));
-  }
-  
-  public Long evaluate(String a, Long b)  {
-    if ((a == null) || (b == null))
+  public LongWritable evaluate(LongWritable a, LongWritable b) {
+    if (a == null || b == null) {
       return null;
-
-    return evaluate(Long.valueOf(a), b);
+    }
+    longWritable.set(a.get() & b.get());
+    return longWritable;
   }
 
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitNot.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitNot.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitNot.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitNot.java Tue Apr 14 22:54:39 2009
@@ -21,45 +21,50 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
 
 
-public class UDFOPBitNot extends UDF {
+public class UDFOPBitNot extends UDFBaseBitOP {
 
   private static Log LOG = LogFactory.getLog(UDFOPBitNot.class.getName());
 
   public UDFOPBitNot() {
   }
 
-  public Byte evaluate(Byte a)  {
-    if (a == null)
+  public ByteWritable evaluate(ByteWritable a) {
+    if (a == null) {
       return null;
-
-    Byte r = Byte.valueOf((byte)~a.byteValue());
-    return r;
+    }
+    byteWritable.set((byte)(~a.get()));
+    return byteWritable;
   }
 
-  public Integer evaluate(Integer a)  {
-    if (a == null)
+  public ShortWritable evaluate(ShortWritable a) {
+    if (a == null) {
       return null;
-
-    Integer r = Integer.valueOf(~a.intValue());
-    return r;
+    }
+    shortWritable.set((short)(~a.get()));
+    return shortWritable;
   }
-
-  public Long evaluate(Long a)  {
-    if (a == null)
+  
+  public IntWritable evaluate(IntWritable a) {
+    if (a == null) {
       return null;
-
-    Long r = Long.valueOf(~a.longValue());
-    return r;
+    }
+    intWritable.set(~a.get());
+    return intWritable;
   }
 
-  public Long evaluate(String a)  {
-    if (a == null)
+  public LongWritable evaluate(LongWritable a) {
+    if (a == null) {
       return null;
-
-    return evaluate(Long.valueOf(a));
+    }
+    longWritable.set(~a.get());
+    return longWritable;
   }
-  
+
 
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitOr.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitOr.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitOr.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitOr.java Tue Apr 14 22:54:39 2009
@@ -20,56 +20,50 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
 
 
-public class UDFOPBitOr extends UDF {
+public class UDFOPBitOr extends UDFBaseBitOP {
 
   private static Log LOG = LogFactory.getLog("org.apache.hadoop.hive.ql.udf.UDFOPBitOr");
 
   public UDFOPBitOr() {
   }
 
-  public Byte evaluate(Byte a, Byte b)  {
-    if ((a == null) || (b == null))
+  public ByteWritable evaluate(ByteWritable a, ByteWritable b) {
+    if (a == null || b == null) {
       return null;
-
-    return Byte.valueOf((byte)(a.byteValue() | b.byteValue()));
+    }
+    byteWritable.set((byte)(a.get() | b.get()));
+    return byteWritable;
   }
 
-  public Integer evaluate(Integer a, Integer b)  {
-    if ((a == null) || (b == null))
+  public ShortWritable evaluate(ShortWritable a, ShortWritable b) {
+    if (a == null || b == null) {
       return null;
-
-    return Integer.valueOf(a.intValue() | b.intValue());
-  }
-
-  public Long evaluate(Long a, Long b)  {
-    if ((a == null) || (b == null))
-      return null;
-
-    return Long.valueOf(a.longValue() | b.longValue());
+    }
+    shortWritable.set((short)(a.get() | b.get()));
+    return shortWritable;
   }
   
-  public Long evaluate(String a, String b)  {
-    if ((a == null) || (b == null))
+  public IntWritable evaluate(IntWritable a, IntWritable b) {
+    if (a == null || b == null) {
       return null;
-
-    return evaluate(Long.valueOf(a), Long.valueOf(b));
+    }
+    intWritable.set(a.get() | b.get());
+    return intWritable;
   }
-  
-  public Long evaluate(Long a, String b)  {
-    if ((a == null) || (b == null))
-      return null;
 
-    return evaluate(a, Long.valueOf(b));
-  }
-  
-  public Long evaluate(String a, Long b)  {
-    if ((a == null) || (b == null))
+  public LongWritable evaluate(LongWritable a, LongWritable b) {
+    if (a == null || b == null) {
       return null;
-
-    return evaluate(Long.valueOf(a), b);
+    }
+    longWritable.set(a.get() | b.get());
+    return longWritable;
   }
 
+
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitXor.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitXor.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitXor.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPBitXor.java Tue Apr 14 22:54:39 2009
@@ -21,55 +21,49 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
 
 
-public class UDFOPBitXor extends UDF {
+public class UDFOPBitXor extends UDFBaseBitOP {
 
   private static Log LOG = LogFactory.getLog(UDFOPBitXor.class.getName());
 
   public UDFOPBitXor() {
   }
 
-  public Byte evaluate(Byte a, Byte b)  {
-    if ((a == null) || (b == null))
+  public ByteWritable evaluate(ByteWritable a, ByteWritable b) {
+    if (a == null || b == null) {
       return null;
-
-    return Byte.valueOf((byte)(a.byteValue() ^ b.byteValue()));
-  }
-
-  public Integer evaluate(Integer a, Integer b)  {
-    if ((a == null) || (b == null))
-      return null;
-
-    return Integer.valueOf(a.intValue() ^ b.intValue());
+    }
+    byteWritable.set((byte)(a.get() ^ b.get()));
+    return byteWritable;
   }
 
-  public Long evaluate(Long a, Long b)  {
-    if ((a == null) || (b == null))
+  public ShortWritable evaluate(ShortWritable a, ShortWritable b) {
+    if (a == null || b == null) {
       return null;
-
-    return Long.valueOf(a.longValue() ^ b.longValue());
+    }
+    shortWritable.set((short)(a.get() ^ b.get()));
+    return shortWritable;
   }
   
-  public Long evaluate(String a, String b)  {
-    if ((a == null) || (b == null))
+  public IntWritable evaluate(IntWritable a, IntWritable b) {
+    if (a == null || b == null) {
       return null;
-
-    return evaluate(Long.valueOf(a), Long.valueOf(b));
+    }
+    intWritable.set(a.get() ^ b.get());
+    return intWritable;
   }
-  
-  public Long evaluate(Long a, String b)  {
-    if ((a == null) || (b == null))
-      return null;
 
-    return evaluate(a, Long.valueOf(b));
-  }
-  
-  public Long evaluate(String a, Long b)  {
-    if ((a == null) || (b == null))
+  public LongWritable evaluate(LongWritable a, LongWritable b) {
+    if (a == null || b == null) {
       return null;
-
-    return evaluate(Long.valueOf(a), b);
+    }
+    longWritable.set(a.get() ^ b.get());
+    return longWritable;
   }
 
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPDivide.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPDivide.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPDivide.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPDivide.java Tue Apr 14 22:54:39 2009
@@ -21,6 +21,12 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.FloatWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
 
 
 public class UDFOPDivide extends UDFBaseNumericOp {
@@ -30,43 +36,64 @@
   public UDFOPDivide() {
   }
 
-  public Byte evaluate(Byte a, Byte b)  {
+  @Override
+  public ByteWritable evaluate(ByteWritable a, ByteWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Byte.valueOf((byte)(a/b));
+    byteWritable.set((byte)(a.get()/b.get()));
+    return byteWritable;
   }
 
-  public Integer evaluate(Integer a, Integer b)  {
+  @Override
+  public ShortWritable evaluate(ShortWritable a, ShortWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Integer.valueOf((int)(a/b));
+    shortWritable.set((short)(a.get()/b.get()));
+    return shortWritable;
   }
 
-  public Long evaluate(Long a, Long b)  {
+  @Override
+  public IntWritable evaluate(IntWritable a, IntWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Long.valueOf((long)(a/b));
+    intWritable.set((int)(a.get()/b.get()));
+    return intWritable;
   }
 
-  public Float evaluate(Float a, Float b)  {
+  @Override
+  public LongWritable evaluate(LongWritable a, LongWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Float.valueOf((float)(a/b));
+    longWritable.set(a.get()/b.get());
+    return longWritable;
+  }
+
+  @Override
+  public FloatWritable evaluate(FloatWritable a, FloatWritable b)  {
+    // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
+    if ((a == null) || (b == null))
+      return null;
+
+    floatWritable.set(a.get()/b.get());
+    return floatWritable;
   }
   
-  public Double evaluate(Double a, Double b)  {
+  @Override
+  public DoubleWritable evaluate(DoubleWritable a, DoubleWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Double.valueOf((double)(a/b));
+    doubleWritable.set(a.get()/b.get());
+    return doubleWritable;
   }
+
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPEqual.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPEqual.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPEqual.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPEqual.java Tue Apr 14 22:54:39 2009
@@ -18,10 +18,16 @@
 
 package org.apache.hadoop.hive.ql.udf;
 
-import java.sql.Date;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.BooleanWritable;
+import org.apache.hadoop.io.FloatWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.Text;
 
 /**
  * The reason that we list evaluate methods with all numeric types is for 
@@ -32,82 +38,83 @@
 
   private static Log LOG = LogFactory.getLog(UDFOPEqual.class.getName());
 
+  BooleanWritable resultCache;
   public UDFOPEqual() {
+    resultCache = new BooleanWritable();
   }
 
-  public Boolean evaluate(String a, String b)  {
-    
-    Boolean r = null;
+  public BooleanWritable evaluate(Text a, Text b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.equals(b));
+      r.set(a.equals(b));
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
 
-  public Boolean evaluate(Byte a, Byte b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(ByteWritable a, ByteWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.byteValue() == b.byteValue());
+      r.set(a.get() == b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
 
-  public Boolean evaluate(Integer a, Integer b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(ShortWritable a, ShortWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.intValue() == b.intValue());
+      r.set(a.get() == b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
-  
-  public Boolean evaluate(Long a, Long b)  {
-    Boolean r = null;
+
+  public BooleanWritable evaluate(IntWritable a, IntWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.longValue() == b.longValue());
+      r.set(a.get() == b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
   
-  public Boolean evaluate(Float a, Float b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(LongWritable a, LongWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.floatValue() == b.floatValue());
+      r.set(a.get() == b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
-  }  
-
-  public Boolean evaluate(Double a, Double b)  {
-    Boolean r = null;
+  }
+  
+  public BooleanWritable evaluate(FloatWritable a, FloatWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.doubleValue() == b.doubleValue());
+      r.set(a.get() == b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }  
 
-  public Boolean evaluate(Date a, Date b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(DoubleWritable a, DoubleWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.equals(b));
+      r.set(a.get() == b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPEqualOrGreaterThan.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPEqualOrGreaterThan.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPEqualOrGreaterThan.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPEqualOrGreaterThan.java Tue Apr 14 22:54:39 2009
@@ -18,95 +18,101 @@
 
 package org.apache.hadoop.hive.ql.udf;
 
-import java.sql.Date;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.BooleanWritable;
+import org.apache.hadoop.io.FloatWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFOPEqualOrGreaterThan extends UDFBaseCompare {
 
   private static Log LOG = LogFactory.getLog(UDFOPEqualOrGreaterThan.class.getName());
 
+  BooleanWritable resultCache;
   public UDFOPEqualOrGreaterThan() {
+    resultCache = new BooleanWritable();
   }
 
-  public Boolean evaluate(String a, String b)  {
-
-    Boolean r = null;
+  public BooleanWritable evaluate(Text a, Text b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.compareTo(b) >= 0);
+      r.set(a.compareTo(b) >= 0);
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
 
-
-  public Boolean evaluate(Byte a, Byte b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(ByteWritable a, ByteWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.byteValue() >= b.byteValue());
+      r.set(a.get() >= b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
 
-  public Boolean evaluate(Integer a, Integer b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(ShortWritable a, ShortWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.intValue() >= b.intValue());
+      r.set(a.get() >= b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
-  
-  public Boolean evaluate(Long a, Long b)  {
-    Boolean r = null;
+
+  public BooleanWritable evaluate(IntWritable a, IntWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.longValue() >= b.longValue());
+      r.set(a.get() >= b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
   
-  public Boolean evaluate(Float a, Float b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(LongWritable a, LongWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.floatValue() >= b.floatValue());
+      r.set(a.get() >= b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
-  }  
-
-  public Boolean evaluate(Double a, Double b)  {
-    Boolean r = null;
+  }
+  
+  public BooleanWritable evaluate(FloatWritable a, FloatWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.doubleValue() >= b.doubleValue());
+      r.set(a.get() >= b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }  
 
-  public Boolean evaluate(Date a, Date b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(DoubleWritable a, DoubleWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.compareTo(b) >= 0);
+      r.set(a.get() >= b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
-  }  
+  }
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPEqualOrLessThan.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPEqualOrLessThan.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPEqualOrLessThan.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPEqualOrLessThan.java Tue Apr 14 22:54:39 2009
@@ -18,96 +18,101 @@
 
 package org.apache.hadoop.hive.ql.udf;
 
-import java.sql.Date;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.BooleanWritable;
+import org.apache.hadoop.io.FloatWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFOPEqualOrLessThan extends UDFBaseCompare {
 
   private static Log LOG = LogFactory.getLog(UDFOPEqualOrLessThan.class.getName());
 
+  BooleanWritable resultCache;
   public UDFOPEqualOrLessThan() {
+    resultCache = new BooleanWritable();
   }
 
-
-  public Boolean evaluate(String a, String b)  {
-
-    Boolean r = null;
+  public BooleanWritable evaluate(Text a, Text b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.compareTo(b) <= 0);
+      r.set(a.compareTo(b) <= 0);
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
 
-
-  public Boolean evaluate(Byte a, Byte b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(ByteWritable a, ByteWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.byteValue() <= b.byteValue());
+      r.set(a.get() <= b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
 
-  public Boolean evaluate(Integer a, Integer b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(ShortWritable a, ShortWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.intValue() <= b.intValue());
+      r.set(a.get() <= b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
-  
-  public Boolean evaluate(Long a, Long b)  {
-    Boolean r = null;
+
+  public BooleanWritable evaluate(IntWritable a, IntWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.longValue() <= b.longValue());
+      r.set(a.get() <= b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
   
-  public Boolean evaluate(Float a, Float b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(LongWritable a, LongWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.floatValue() <= b.floatValue());
+      r.set(a.get() <= b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
-  }  
-
-  public Boolean evaluate(Double a, Double b)  {
-    Boolean r = null;
+  }
+  
+  public BooleanWritable evaluate(FloatWritable a, FloatWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.doubleValue() <= b.doubleValue());
+      r.set(a.get() <= b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }  
 
-  public Boolean evaluate(Date a, Date b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(DoubleWritable a, DoubleWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.compareTo(b) <= 0);
+      r.set(a.get() <= b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
-  }  
+  }
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPGreaterThan.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPGreaterThan.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPGreaterThan.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPGreaterThan.java Tue Apr 14 22:54:39 2009
@@ -22,91 +22,99 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.BooleanWritable;
+import org.apache.hadoop.io.FloatWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFOPGreaterThan extends UDFBaseCompare {
 
   private static Log LOG = LogFactory.getLog(UDFOPGreaterThan.class.getName());
 
+  BooleanWritable resultCache;
   public UDFOPGreaterThan() {
+    resultCache = new BooleanWritable();
   }
 
-  public Boolean evaluate(String a, String b)  {
-    
-    Boolean r = null;
+  public BooleanWritable evaluate(Text a, Text b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.compareTo(b) > 0);
+      r.set(a.compareTo(b) > 0);
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
 
-
-  public Boolean evaluate(Byte a, Byte b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(ByteWritable a, ByteWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.byteValue() > b.byteValue());
+      r.set(a.get() > b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
 
-  public Boolean evaluate(Integer a, Integer b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(ShortWritable a, ShortWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.intValue() > b.intValue());
+      r.set(a.get() > b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
-  
-  public Boolean evaluate(Long a, Long b)  {
-    Boolean r = null;
+
+  public BooleanWritable evaluate(IntWritable a, IntWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.longValue() > b.longValue());
+      r.set(a.get() > b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
   
-  public Boolean evaluate(Float a, Float b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(LongWritable a, LongWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.floatValue() > b.floatValue());
+      r.set(a.get() > b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
-  }  
-
-  public Boolean evaluate(Double a, Double b)  {
-    Boolean r = null;
+  }
+  
+  public BooleanWritable evaluate(FloatWritable a, FloatWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.doubleValue() > b.doubleValue());
+      r.set(a.get() > b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }  
 
-  public Boolean evaluate(Date a, Date b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(DoubleWritable a, DoubleWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.compareTo(b) > 0);
+      r.set(a.get() > b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
-  }  
+  }
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPLessThan.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPLessThan.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPLessThan.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPLessThan.java Tue Apr 14 22:54:39 2009
@@ -22,92 +22,99 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.BooleanWritable;
+import org.apache.hadoop.io.FloatWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.Text;
 
 
 public class UDFOPLessThan extends UDFBaseCompare {
 
   private static Log LOG = LogFactory.getLog(UDFOPLessThan.class.getName());
 
+  BooleanWritable resultCache;
   public UDFOPLessThan() {
+    resultCache = new BooleanWritable();
   }
 
-  public Boolean evaluate(String a, String b)  {
-
-    Boolean r = null;
+  public BooleanWritable evaluate(Text a, Text b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.compareTo(b) < 0);
+      r.set(a.compareTo(b) < 0);
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
 
-
-  public Boolean evaluate(Byte a, Byte b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(ByteWritable a, ByteWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.byteValue() < b.byteValue());
+      r.set(a.get() < b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
 
-  public Boolean evaluate(Integer a, Integer b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(ShortWritable a, ShortWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.intValue() < b.intValue());
+      r.set(a.get() < b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
-  
-  public Boolean evaluate(Long a, Long b)  {
-    Boolean r = null;
+
+  public BooleanWritable evaluate(IntWritable a, IntWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.longValue() < b.longValue());
+      r.set(a.get() < b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
   
-  public Boolean evaluate(Float a, Float b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(LongWritable a, LongWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.floatValue() < b.floatValue());
+      r.set(a.get() < b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
-  }  
-
-  public Boolean evaluate(Double a, Double b)  {
-    Boolean r = null;
+  }
+  
+  public BooleanWritable evaluate(FloatWritable a, FloatWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.doubleValue() < b.doubleValue());
+      r.set(a.get() < b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }  
 
-  public Boolean evaluate(Date a, Date b)  {
-    Boolean r = null;
+  public BooleanWritable evaluate(DoubleWritable a, DoubleWritable b)  {
+    BooleanWritable r = this.resultCache;
     if ((a == null) || (b == null)) {
       r = null;
     } else {
-      r = Boolean.valueOf(a.compareTo(b) < 0);
+      r.set(a.get() < b.get());
     }
     // LOG.info("evaluate(" + a + "," + b + ")=" + r);
     return r;
   }
-  
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMinus.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMinus.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMinus.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMinus.java Tue Apr 14 22:54:39 2009
@@ -20,7 +20,12 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.FloatWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
 
 
 public class UDFOPMinus extends UDFBaseNumericOp {
@@ -30,44 +35,63 @@
   public UDFOPMinus() {
   }
 
-  public Byte evaluate(Byte a, Byte b)  {
+  @Override
+  public ByteWritable evaluate(ByteWritable a, ByteWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Byte.valueOf((byte)(a-b));
+    byteWritable.set((byte)(a.get() - b.get()));
+    return byteWritable;
   }
 
-  public Integer evaluate(Integer a, Integer b)  {
+  @Override
+  public ShortWritable evaluate(ShortWritable a, ShortWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Integer.valueOf((int)(a-b));
+    shortWritable.set((short)(a.get() - b.get()));
+    return shortWritable;
   }
 
-  public Long evaluate(Long a, Long b)  {
+  @Override
+  public IntWritable evaluate(IntWritable a, IntWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Long.valueOf((long)(a-b));
+    intWritable.set((int)(a.get() - b.get()));
+    return intWritable;
   }
 
-  public Float evaluate(Float a, Float b)  {
+  @Override
+  public LongWritable evaluate(LongWritable a, LongWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Float.valueOf((float)(a-b));
+    longWritable.set(a.get() - b.get());
+    return longWritable;
   }
-  
-  public Double evaluate(Double a, Double b)  {
+
+  @Override
+  public FloatWritable evaluate(FloatWritable a, FloatWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Double.valueOf((double)(a-b));
+    floatWritable.set(a.get() - b.get());
+    return floatWritable;
   }
+  
+  @Override
+  public DoubleWritable evaluate(DoubleWritable a, DoubleWritable b)  {
+    // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
+    if ((a == null) || (b == null))
+      return null;
 
+    doubleWritable.set(a.get() - b.get());
+    return doubleWritable;
+  }
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMod.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMod.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMod.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMod.java Tue Apr 14 22:54:39 2009
@@ -20,7 +20,12 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.FloatWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
 
 
 public class UDFOPMod extends UDFBaseNumericOp {
@@ -30,43 +35,64 @@
   public UDFOPMod() {
   }
 
-  public Byte evaluate(Byte a, Byte b)  {
+
+  @Override
+  public ByteWritable evaluate(ByteWritable a, ByteWritable b)  {
+    // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
+    if ((a == null) || (b == null))
+      return null;
+
+    byteWritable.set((byte)(a.get() % b.get()));
+    return byteWritable;
+  }
+
+  @Override
+  public ShortWritable evaluate(ShortWritable a, ShortWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Byte.valueOf((byte)(a%b));
+    shortWritable.set((short)(a.get() % b.get()));
+    return shortWritable;
   }
 
-  public Integer evaluate(Integer a, Integer b)  {
+  @Override
+  public IntWritable evaluate(IntWritable a, IntWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Integer.valueOf((int)(a%b));
+    intWritable.set((int)(a.get() % b.get()));
+    return intWritable;
   }
 
-  public Long evaluate(Long a, Long b)  {
+  @Override
+  public LongWritable evaluate(LongWritable a, LongWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Long.valueOf((long)(a%b));
+    longWritable.set(a.get() % b.get());
+    return longWritable;
   }
 
-  public Float evaluate(Float a, Float b)  {
+  @Override
+  public FloatWritable evaluate(FloatWritable a, FloatWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Float.valueOf((float)(a%b));
+    floatWritable.set(a.get() % b.get());
+    return floatWritable;
   }
   
-  public Double evaluate(Double a, Double b)  {
+  @Override
+  public DoubleWritable evaluate(DoubleWritable a, DoubleWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Double.valueOf((double)(a%b));
+    doubleWritable.set(a.get() % b.get());
+    return doubleWritable;
   }
 }

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMultiply.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMultiply.java?rev=764994&r1=764993&r2=764994&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMultiply.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMultiply.java Tue Apr 14 22:54:39 2009
@@ -20,7 +20,12 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
+import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
+import org.apache.hadoop.io.FloatWritable;
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
 
 
 public class UDFOPMultiply extends UDFBaseNumericOp {
@@ -30,43 +35,63 @@
   public UDFOPMultiply() {
   }
 
-  public Byte evaluate(Byte a, Byte b)  {
+  @Override
+  public ByteWritable evaluate(ByteWritable a, ByteWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Byte.valueOf((byte)(a*b));
+    byteWritable.set((byte)(a.get() * b.get()));
+    return byteWritable;
   }
 
-  public Integer evaluate(Integer a, Integer b)  {
+  @Override
+  public ShortWritable evaluate(ShortWritable a, ShortWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Integer.valueOf((int)(a*b));
+    shortWritable.set((short)(a.get() * b.get()));
+    return shortWritable;
   }
 
-  public Long evaluate(Long a, Long b)  {
+  @Override
+  public IntWritable evaluate(IntWritable a, IntWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Long.valueOf((long)(a*b));
+    intWritable.set((int)(a.get() * b.get()));
+    return intWritable;
   }
 
-  public Float evaluate(Float a, Float b)  {
+  @Override
+  public LongWritable evaluate(LongWritable a, LongWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Float.valueOf((float)(a*b));
+    longWritable.set(a.get() * b.get());
+    return longWritable;
+  }
+
+  @Override
+  public FloatWritable evaluate(FloatWritable a, FloatWritable b)  {
+    // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
+    if ((a == null) || (b == null))
+      return null;
+
+    floatWritable.set(a.get() * b.get());
+    return floatWritable;
   }
   
-  public Double evaluate(Double a, Double b)  {
+  @Override
+  public DoubleWritable evaluate(DoubleWritable a, DoubleWritable b)  {
     // LOG.info("Get input " + a.getClass() + ":" + a + " " + b.getClass() + ":" + b);
     if ((a == null) || (b == null))
       return null;
 
-    return Double.valueOf((double)(a*b));
+    doubleWritable.set(a.get() * b.get());
+    return doubleWritable;
   }
 }