You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by zs...@apache.org on 2008/09/20 01:56:35 UTC

svn commit: r697291 [13/31] - in /hadoop/core/trunk: ./ src/contrib/hive/cli/src/java/org/apache/hadoop/hive/cli/ src/contrib/hive/metastore/if/ src/contrib/hive/metastore/src/gen-javabean/org/apache/hadoop/hive/metastore/api/ src/contrib/hive/metastor...

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java Fri Sep 19 16:56:30 2008
@@ -40,8 +40,13 @@
 import org.apache.hadoop.hive.metastore.api.Order;
 import org.apache.hadoop.hive.metastore.api.SerDeInfo;
 import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
-import org.apache.hadoop.hive.serde.SerDe;
-import org.apache.hadoop.hive.serde.SerDeField;
+import org.apache.hadoop.hive.serde2.Deserializer;
+import org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe;
+import org.apache.hadoop.hive.serde2.SerDe;
+import org.apache.hadoop.hive.serde2.SerDeException;
+import org.apache.hadoop.hive.serde2.objectinspector.StructField;
+import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
+import org.apache.hadoop.hive.serde.Constants;
 import org.apache.hadoop.io.Writable;
 import org.apache.hadoop.io.WritableComparable;
 import org.apache.hadoop.mapred.InputFormat;
@@ -57,7 +62,7 @@
   static final private Log LOG = LogFactory.getLog("hive.ql.metadata.Table");
 
   private Properties schema;
-  private SerDe serDe;
+  private Deserializer deserializer;
   private URI uri;
   private Class<? extends InputFormat> inputFormatClass;
   private Class<? extends OutputFormat> outputFormatClass;
@@ -83,73 +88,77 @@
    *
    * @exception HiveException on internal error. Note not possible now, but in the future reserve the right to throw an exception
    */
-  public Table(String name, Properties schema, SerDe serDe, 
+  public Table(String name, Properties schema, Deserializer deserializer, 
       Class<? extends InputFormat<?, ?>> inputFormatClass,
       Class<? extends OutputFormat<?, ?>> outputFormatClass,
       URI dataLocation, Hive hive) throws HiveException {
     initEmpty();
-    this.getTTable().setTableName(name);
-    this.getTTable().getSd().setLocation(dataLocation.toASCIIString());
-    this.setInputFormatClass(inputFormatClass);
-    this.setOutputFormatClass(outputFormatClass);
-    this.setDataLocation(dataLocation);
     this.schema = schema;
-    this.serDe = serDe; //TODO: convert to SerDeInfo format
-    this.getTTable().getSd().getSerdeInfo().setSerializationLib(serDe.getClass().getName());
+    this.deserializer = deserializer; //TODO: convert to SerDeInfo format
+    this.getTTable().getSd().getSerdeInfo().setSerializationLib(deserializer.getShortName());
+    getTTable().setTableName(name);
+    getSerdeInfo().setSerializationLib(deserializer.getClass().getName());
+    setInputFormatClass(inputFormatClass);
+    setOutputFormatClass(outputFormatClass);
+    setDataLocation(dataLocation);
   }
   
   public Table(String name) {
     // fill in defaults
     initEmpty();
-    this.getTTable().setTableName(name);
-    this.getTTable().setDatabase(MetaStoreUtils.DEFAULT_DATABASE_NAME);
-    this.getTTable().getSd().getSerdeInfo().setSerializationLib(org.apache.hadoop.hive.serde.simple_meta.MetadataTypedColumnsetSerDe.class.getName());
-    this.getTTable().getSd().getSerdeInfo().setSerializationFormat("1");
+    getTTable().setTableName(name);
+    getTTable().setDbName(MetaStoreUtils.DEFAULT_DATABASE_NAME);
+    getSerdeInfo().setSerializationLib(MetadataTypedColumnsetSerDe.shortName());
+    getSerdeInfo().getParameters().put(Constants.SERIALIZATION_FORMAT, "1");
   }
   
   void initEmpty() {
-    this.setTTable(new org.apache.hadoop.hive.metastore.api.Table());
-    this.getTTable().setSd(new StorageDescriptor());
-    this.getTTable().getSd().setSerdeInfo(new SerDeInfo());
-    this.getTTable().getSd().setNumBuckets(-1);
-    this.getTTable().getSd().setBucketCols(new ArrayList<String>());
-    this.getTTable().getSd().setCols(new ArrayList<FieldSchema>());
-    this.getTTable().setPartitionKeys(new ArrayList<FieldSchema>());
-    this.getTTable().setParameters(new HashMap<String, String>());
-    this.getTTable().getSd().setParameters(new HashMap<String, String>());
-    this.getTTable().getSd().setSortCols(new ArrayList<Order>());
+    setTTable(new org.apache.hadoop.hive.metastore.api.Table());
+    getTTable().setSd(new StorageDescriptor());
+    getTTable().setPartitionKeys(new ArrayList<FieldSchema>());
+    getTTable().setParameters(new HashMap<String, String>());
+
+    StorageDescriptor sd = getTTable().getSd();
+    sd.setSerdeInfo(new SerDeInfo());
+    sd.setNumBuckets(-1);
+    sd.setBucketCols(new ArrayList<String>());
+    sd.setCols(new ArrayList<FieldSchema>());
+    sd.setParameters(new HashMap<String, String>());
+    sd.setSortCols(new ArrayList<Order>());
+    
+    sd.getSerdeInfo().setParameters(new HashMap<String, String>());
   }
   
   protected void initSerDe() throws HiveException {
-    if(this.serDe == null) {
+    if (deserializer == null) {
       try {
-        this.serDe = MetaStoreUtils.getSerDe(Hive.get().getConf(), this.getTTable());
+        deserializer = MetaStoreUtils.getDeserializer(Hive.get().getConf(), this.getTTable());
       } catch (MetaException e) {
         throw new HiveException(e);
       }
     }
   }
-  public void checkValidity() throws HiveException {
 
+  public void checkValidity() throws HiveException {
     // check for validity
-    String name = this.getTTable().getTableName();
+    String name = getTTable().getTableName();
     if (null == name || name.length() == 0 || !MetaStoreUtils.validateName(name)) {
       throw new HiveException("[" + name + "]: is not a valid table name");
     }
-    if (null == this.getSerDe()) {
+    if (null == getDeserializer()) {
       throw new HiveException("must specify a non-null serDe");
     }
-    if (null == this.getInputFormatClass()) {
+    if (null == getInputFormatClass()) {
       throw new HiveException("must specify an InputFormat class");
     }
-    if (null == this.getOutputFormatClass()) {
+    if (null == getOutputFormatClass()) {
       throw new HiveException("must specify an OutputFormat class");
     }
     return;
   }
 
   /**
-   * @param inputFormatClass the inputFormatClass to set
+   * @param inputFormatClass 
    */
   public void setInputFormatClass(Class<? extends InputFormat> inputFormatClass) {
     this.inputFormatClass = inputFormatClass;
@@ -157,7 +166,7 @@
   }
 
   /**
-   * @param outputFormatClass the outputFormatClass to set
+   * @param outputFormatClass 
    */
   public void setOutputFormatClass(Class<? extends OutputFormat> outputFormatClass) {
     this.outputFormatClass = outputFormatClass;
@@ -165,37 +174,37 @@
   }
 
   final public Properties getSchema()  {
-    return this.schema;
+    return schema;
   }
 
   final public Path getPath() {
-    return new Path(this.getTTable().getSd().getLocation());
+    return new Path(getTTable().getSd().getLocation());
   }
 
   final public String getName() {
-    return this.getTTable().getTableName();
+    return getTTable().getTableName();
   }
 
   final public URI getDataLocation() {
-    return this.uri;
+    return uri;
   }
 
-  final public SerDe getSerDe() {
-    return this.serDe;
+  final public Deserializer getDeserializer() {
+    return deserializer;
   }
 
   final public Class<? extends InputFormat> getInputFormatClass() {
-    return this.inputFormatClass;
+    return inputFormatClass;
   }
 
   final public Class<? extends OutputFormat> getOutputFormatClass() {
-    return this.outputFormatClass;
+    return outputFormatClass;
   }
 
   final public boolean isValidSpec(AbstractMap<String, String> spec) throws HiveException {
 
     // TODO - types need to be checked.
-    List<FieldSchema> partCols = this.getTTable().getPartitionKeys();
+    List<FieldSchema> partCols = getTTable().getPartitionKeys();
     if(partCols== null || (partCols.size() == 0)) {
       if (spec != null)
         throw new HiveException("table is not partitioned but partition spec exists: " + spec);
@@ -217,7 +226,7 @@
   }
   
   public void setProperty(String name, String value) {
-    this.getTTable().getParameters().put(name, value);
+    getTTable().getParameters().put(name, value);
   }
 
   /**
@@ -225,36 +234,31 @@
    *
    */
   public String getProperty(String name) {
-    return this.getTTable().getParameters().get(name);
+    return getTTable().getParameters().get(name);
   }
 
-  public Vector<SerDeField> getFields(String [] components) {
+  public Vector<StructField> getFields() {
 
-
-    Vector<SerDeField> fields = new Vector<SerDeField> ();
+    Vector<StructField> fields = new Vector<StructField> ();
     try {
-      SerDe decoder = getSerDe();
-      if (components == null || components.length == 0) {
-        // Expand out all the columns of the table
-        List<SerDeField> fld_lst = decoder.getFields(null);
-        for(SerDeField field: fld_lst) {
-          fields.add(field);
-        }
-      }
-      else {
-        for (int i = 0; i < components.length; i++) {
-          fields.add(decoder.getFieldFromExpression(null, components[i]));
-        }
+      Deserializer decoder = getDeserializer();
+
+      // Expand out all the columns of the table
+      StructObjectInspector structObjectInspector = (StructObjectInspector)decoder.getObjectInspector();
+      List<? extends StructField> fld_lst = structObjectInspector.getAllStructFieldRefs();
+      for(StructField field: fld_lst) {
+        fields.add(field);
       }
-    } catch (Exception e) {
+    } catch (SerDeException e) {
       throw new RuntimeException(e);
     }
     return fields;
   }
 
-  public SerDeField getField(String fld) {
+  public StructField getField(String fld) {
     try {
-      return getSerDe().getFieldFromExpression(null, fld);
+      StructObjectInspector structObjectInspector = (StructObjectInspector)getDeserializer().getObjectInspector();
+      return structObjectInspector.getStructFieldRef(fld);
     }
     catch (Exception e) {
       throw new RuntimeException(e);
@@ -271,25 +275,25 @@
   /**
    * @param serDe the serDe to set
    */
-  public void setSerDe(SerDe serDe) {
-    this.serDe = serDe;
+  public void setDeserializer(Deserializer deserializer) {
+    this.deserializer = deserializer;
   }
 
   public String toString() { 
-    return this.getTTable().getTableName();
+    return getTTable().getTableName();
   }
 
   public List<FieldSchema> getPartCols() {
-    List<FieldSchema> partKeys = this.getTTable().getPartitionKeys();
+    List<FieldSchema> partKeys = getTTable().getPartitionKeys();
     if(partKeys == null) {
       partKeys = new ArrayList<FieldSchema>();
-      this.getTTable().setPartitionKeys(partKeys);
+      getTTable().setPartitionKeys(partKeys);
     }
     return partKeys;
   }
   
   public boolean isPartitionKey(String colName) {
-    for (FieldSchema key : this.getPartCols()) {
+    for (FieldSchema key : getPartCols()) {
       if(key.getName().toLowerCase().equals(colName)) {
         return true;
       }
@@ -299,7 +303,7 @@
 
   //TODO merge this with getBucketCols function
   public String getBucketingDimensionId() {
-    List<String> bcols = this.getTTable().getSd().getBucketCols();
+    List<String> bcols = getTTable().getSd().getBucketCols();
     if(bcols == null || bcols.size() == 0) {
       return null;
     }
@@ -311,14 +315,6 @@
     return bcols.get(0);
   }
 
-  public String getSerializationFormat() {
-    return this.getTTable().getSd().getSerdeInfo().getSerializationFormat();
-  }
-
-  public void setSerializationFormat(String f) {
-    this.getTTable().getSd().getSerdeInfo().setSerializationFormat(f);
-  }
-
   /**
    * @return the tTable
    */
@@ -334,16 +330,8 @@
   }
 
   public void setDataLocation(URI uri2) {
-    this.uri = uri2;
-    this.getTTable().getSd().setLocation(uri2.toString());
-  }
-
-  public void setSerializationClass(String cls) {
-    this.getTTable().getSd().getSerdeInfo().setSerializationClass(cls);
-  }
-
-  public void setSerializationLib(String lib) {
-    this.getTTable().getSd().getSerdeInfo().setSerializationLib(lib);
+    uri = uri2;
+    getTTable().getSd().setLocation(uri2.toString());
   }
 
   public void setBucketCols(List<String> bucketCols) throws HiveException {
@@ -352,22 +340,18 @@
     }
 
     for (String col : bucketCols) {
-      if(!this.isField(col))
+      if(!isField(col))
         throw new HiveException("Bucket columns " + col + " is not part of the table columns" ); 
     }
-    this.getTTable().getSd().setBucketCols(bucketCols);
+    getTTable().getSd().setBucketCols(bucketCols);
   }
 
-  public void setSortCols(List<String> sortCols) throws HiveException {
-    List<Order> sortOrder = new ArrayList<Order>();
-    for (String col : sortCols) {
-      sortOrder.add(new Order(col, 1));
-    }
-    this.getTTable().getSd().setSortCols(sortOrder);
+  public void setSortCols(List<Order> sortOrder) throws HiveException {
+    getTTable().getSd().setSortCols(sortOrder);
   }
 
   private boolean isField(String col) {
-    for (FieldSchema field : this.getCols()) {
+    for (FieldSchema field : getCols()) {
       if(field.getName().equals(col)) {
         return true;
       }
@@ -376,31 +360,30 @@
   }
 
   public List<FieldSchema> getCols() {
-    return this.getTTable().getSd().getCols();
+    return getTTable().getSd().getCols();
   }
 
   public void setPartCols(List<FieldSchema> partCols) {
-    this.getTTable().setPartitionKeys(partCols);
+    getTTable().setPartitionKeys(partCols);
   }
 
   public String getDbName() {
-    return this.getTTable().getDatabase();
+    return getTTable().getDbName();
   }
 
   public int getNumBuckets() {
-    return this.getTTable().getSd().getNumBuckets();
+    return getTTable().getSd().getNumBuckets();
   }
   
   /**
-   * Replaces files in the partition with new data set specifed by srcf. Works by moving files
-   *
-   * @param srcf Files to be moved. Leaf Directories or Globbed File Paths
+   * Replaces files in the partition with new data set specified by srcf. Works by moving files
+   * @param srcf Files to be replaced. Leaf directories or globbed file paths
    */
   protected void replaceFiles(Path srcf) throws HiveException {
     FileSystem fs;
     try {
-      fs = FileSystem.get(this.getDataLocation(), Hive.get().getConf());
-      Hive.get().replaceFiles(srcf, new Path(this.getDataLocation().getPath()), fs);
+      fs = FileSystem.get(getDataLocation(), Hive.get().getConf());
+      Hive.get().replaceFiles(srcf, new Path(getDataLocation().getPath()), fs);
     } catch (IOException e) {
       throw new HiveException("addFiles: filesystem error in check phase", e);
     }
@@ -408,14 +391,13 @@
 
   /**
    * Inserts files specified into the partition. Works by moving files
-   *
-   * @param srcf Files to be moved. Leaf Directories or Globbed File Paths
+   * @param srcf Files to be moved. Leaf directories or globbed file paths
    */
   protected void copyFiles(Path srcf) throws HiveException {
     FileSystem fs;
     try {
-      fs = FileSystem.get(this.getDataLocation(), Hive.get().getConf());
-      Hive.get().copyFiles(srcf, new Path(this.getDataLocation().getPath()), fs);
+      fs = FileSystem.get(getDataLocation(), Hive.get().getConf());
+      Hive.get().copyFiles(srcf, new Path(getDataLocation().getPath()), fs);
     } catch (IOException e) {
       throw new HiveException("addFiles: filesystem error in check phase", e);
     }
@@ -423,7 +405,7 @@
 
   public void setInputFormatClass(String name) throws HiveException {
     try {
-      this.setInputFormatClass((Class<? extends InputFormat<WritableComparable, Writable>>)Class.forName(name));
+      setInputFormatClass((Class<? extends InputFormat<WritableComparable, Writable>>)Class.forName(name));
     } catch (ClassNotFoundException e) {
       throw new HiveException("Class not found: " + name, e);
     }
@@ -431,7 +413,7 @@
 
   public void setOutputFormatClass(String name) throws HiveException {
     try {
-      this.setOutputFormatClass((Class<? extends OutputFormat<WritableComparable, Writable>>)Class.forName(name));
+      setOutputFormatClass((Class<? extends OutputFormat<WritableComparable, Writable>>)Class.forName(name));
     } catch (ClassNotFoundException e) {
       throw new HiveException("Class not found: " + name, e);
     }
@@ -439,18 +421,18 @@
 
   
   public boolean isPartitioned() {
-    if(this.getPartCols() == null) {
+    if(getPartCols() == null) {
       return false;
     }
-    return (this.getPartCols().size() != 0);
+    return (getPartCols().size() != 0);
   }
 
   public void setFields(List<FieldSchema> fields) {
-    this.getTTable().getSd().setCols(fields);
+    getTTable().getSd().setCols(fields);
   }
 
   public void setNumBuckets(int nb) {
-    this.getTTable().getSd().setNumBuckets(nb);
+    getTTable().getSd().setNumBuckets(nb);
   }
 
   /**
@@ -493,56 +475,32 @@
     tTable.setRetention(retention);
   }
 
-  public String getSerializationLib() {
-    return this.getTTable().getSd().getSerdeInfo().getSerializationLib();
-  }
-
-  public String getSerializationClass() {
-    return this.getTTable().getSd().getSerdeInfo().getSerializationClass();
-  }
-
-  public void setIsCompressed(boolean b) {
-    this.getTTable().getSd().setIsCompressed(b);
-  }
-
-  public void setFieldDelim(String string) {
-    this.getTTable().getSd().getSerdeInfo().setFieldDelim(string);  
+  private SerDeInfo getSerdeInfo() {
+    return getTTable().getSd().getSerdeInfo();
   }
 
-  public void setCollectionItemDelim(String string) {
-    this.getTTable().getSd().getSerdeInfo().setCollectionItemDelim(string);  
-  }
-
-  public void setLineDelim(String string) {
-    this.getTTable().getSd().getSerdeInfo().setLineDelim(string);  
-  }
-
-  public void setMapKeyDelim(String string) {
-    this.getTTable().getSd().getSerdeInfo().setMapKeyDelim(string);  
-  }
-  
-  public String getFieldDelim() {
-    return this.getTTable().getSd().getSerdeInfo().getFieldDelim();
+  public void setSerializationLib(String lib) {
+    getSerdeInfo().setSerializationLib(lib);
   }
 
-  public String getCollectionItemDelim() {
-    return this.getTTable().getSd().getSerdeInfo().getCollectionItemDelim();
+  public String getSerializationLib() {
+    return getSerdeInfo().getSerializationLib();
   }
   
-  public String getLineDelim() {
-    return this.getTTable().getSd().getSerdeInfo().getLineDelim();
+  public String getSerdeParam(String param) {
+    return getSerdeInfo().getParameters().get(param);
   }
   
-  public String getMapKeyDelim() {
-    return this.getTTable().getSd().getSerdeInfo().getMapKeyDelim();
+  public String setSerdeParam(String param, String value) {
+    return getSerdeInfo().getParameters().put(param, value);
   }
 
   public List<String> getBucketCols() {
-    return this.getTTable().getSd().getBucketCols();
+    return getTTable().getSd().getBucketCols();
   }
 
   public List<Order> getSortCols() {
-    return this.getTTable().getSd().getSortCols();
+    return getTTable().getSd().getSortCols();
   }
 
   private static void getPartPaths(FileSystem fs, Path p, Vector<String> partPaths) throws IOException {
@@ -572,14 +530,14 @@
   }
 
   static final Pattern pat = Pattern.compile("([^/]+)=([^/]+)");
-  protected List<Partition> getPartitionsFromHDFS() throws HiveException {
+  public List<Partition> getPartitionsFromHDFS() throws HiveException {
     ArrayList<Partition> ret = new ArrayList<Partition> ();
     FileSystem fs = null;
     Vector<String> partPaths = new Vector<String>();
 
     try {
-      fs = FileSystem.get(this.getDataLocation(), Hive.get().getConf());
-      getPartPaths(fs, new Path(this.getDataLocation().getPath()), partPaths);
+      fs = FileSystem.get(getDataLocation(), Hive.get().getConf());
+      getPartPaths(fs, new Path(getDataLocation().getPath()), partPaths);
       for(String partPath: partPaths) {
         Path tmpPath = new Path(partPath);
         if(!fs.getFileStatus(tmpPath).isDir()) {
@@ -589,11 +547,10 @@
       }
     } catch (IOException e) {
       LOG.error(StringUtils.stringifyException(e));
-      throw new HiveException("DB Error: Table " + this.getDataLocation() + " message: " + e.getMessage());
+      throw new HiveException("DB Error: Table " + getDataLocation() + " message: " + e.getMessage());
     }
 
     return ret;
   }
   
-  
 };

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java Fri Sep 19 16:56:30 2008
@@ -21,6 +21,7 @@
 import java.util.*;
 import java.io.File;
 import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -33,6 +34,7 @@
 import org.apache.hadoop.hive.ql.exec.TaskFactory;
 import org.apache.hadoop.hive.ql.session.SessionState.LogHelper;
 
+
 public abstract class BaseSemanticAnalyzer {
   protected String scratchDir;
   protected int randomid;
@@ -79,7 +81,39 @@
     }
     return val;
   }
-  
+
+  public static String charSetString(String charSetName, String charSetString) 
+    throws SemanticException {
+    try
+    {
+      // The character set name starts with a _, so strip that
+      charSetName = charSetName.substring(1);
+      if (charSetString.charAt(0) == '\'')
+        return new String(unescapeSQLString(charSetString).getBytes(), charSetName);
+      else                                       // hex input is also supported
+      {
+        assert charSetString.charAt(0) == '0';
+        assert charSetString.charAt(1) == 'x';
+        charSetString = charSetString.substring(2);
+        
+        byte[] bArray = new byte[charSetString.length()/2];
+        int j = 0;
+        for (int i = 0; i < charSetString.length(); i += 2)
+        {
+          int val = Character.digit(charSetString.charAt(i), 16) * 16 + Character.digit(charSetString.charAt(i+1), 16);
+          if (val > 127)
+            val = val - 256;
+          bArray[j++] = new Integer(val).byteValue();
+        }
+
+        String res = new String(bArray, charSetName);
+        return res;
+      } 
+    } catch (UnsupportedEncodingException e) {
+      throw new SemanticException(e);
+    }
+  }
+
   @SuppressWarnings("nls")
   public static String unescapeSQLString(String b) {
     assert(b.charAt(0) == '\'');

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java Fri Sep 19 16:56:30 2008
@@ -18,9 +18,10 @@
 
 package org.apache.hadoop.hive.ql.parse;
 
+import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.metastore.MetaStoreUtils;
-import org.apache.hadoop.hive.metastore.api.Constants;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
+import org.apache.hadoop.hive.metastore.api.Order;
 
 import org.antlr.runtime.tree.CommonTree;
 
@@ -35,11 +36,11 @@
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.metadata.Table;
+import org.apache.hadoop.hive.serde.Constants;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import java.io.File;
 import java.util.*;
 
 public class DDLSemanticAnalyzer extends BaseSemanticAnalyzer {
@@ -76,12 +77,12 @@
        analyzeDropTable(ast);
     else if (ast.getToken().getType() == HiveParser.TOK_DESCTABLE)
     {
-      ctx.setResFile(new File(getTmpFileName()));
+      ctx.setResFile(new Path(getTmpFileName()));
       analyzeDescribeTable(ast);
     }
     else if (ast.getToken().getType() == HiveParser.TOK_SHOWTABLES)
     {
-      ctx.setResFile(new File(getTmpFileName()));
+      ctx.setResFile(new Path(getTmpFileName()));
       analyzeShowTables(ast);
     }
     else if (ast.getToken().getType() == HiveParser.TOK_ALTERTABLE_RENAME)
@@ -97,14 +98,14 @@
     List<FieldSchema> cols          = getColumns(colList);
     List<FieldSchema> partCols      = null;
     List<String>      bucketCols    = null;
-    List<String>      sortCols      = null;
+    List<Order>       sortCols      = null;
     int               numBuckets    = -1;
     String            fieldDelim    = null;
     String            collItemDelim = null;
     String            mapKeyDelim   = null;
     String            lineDelim     = null;
     String            comment       = null;
-    boolean           isCompressed  = false;
+    boolean           isSequenceFile  = false;
     String            location      = null;
 
     LOG.info("Creating table" + tableName);
@@ -125,7 +126,7 @@
             numBuckets = (Integer.valueOf(child.getChild(1).getText())).intValue();
           else
           {
-            sortCols = getColumnNames((CommonTree)child.getChild(1));
+            sortCols = getColumnNamesOrder((CommonTree)child.getChild(1));
             numBuckets = (Integer.valueOf(child.getChild(2).getText())).intValue();
           }
           break;
@@ -151,8 +152,8 @@
             }
           }
           break;
-        case HiveParser.TOK_TBLCOMPRESSED:
-          isCompressed = true;
+        case HiveParser.TOK_TBLSEQUENCEFILE:
+          isSequenceFile = true;
           break;
         case HiveParser.TOK_TABLELOCATION:
           location = unescapeSQLString(child.getChild(0).getText());
@@ -165,7 +166,7 @@
       new createTableDesc(tableName, isExt, cols, partCols, bucketCols, 
                           sortCols, numBuckets,
                           fieldDelim, collItemDelim, mapKeyDelim, lineDelim,
-                          comment, isCompressed, location);
+                          comment, isSequenceFile, location);
 
     validateCreateTable(crtTblDesc);
     rootTasks.add(TaskFactory.get(new DDLWork(crtTblDesc), conf));
@@ -212,9 +213,9 @@
     if (crtTblDesc.getSortCols() != null)
     {
       // all columns in cluster and sort are valid columns
-      Iterator<String> sortCols = crtTblDesc.getSortCols().iterator();
+      Iterator<Order> sortCols = crtTblDesc.getSortCols().iterator();
       while (sortCols.hasNext()) {
-        String sortCol = sortCols.next();
+        String sortCol = sortCols.next().getCol();
         boolean found = false;
         Iterator<String> colNamesIter = colNames.iterator();
         while (colNamesIter.hasNext()) {
@@ -288,7 +289,21 @@
     int numCh = ast.getChildCount();
     for (int i = 0; i < numCh; i++) {
       CommonTree child = (CommonTree)ast.getChild(i);
-      colList.add(child.getChild(0).getText());
+      colList.add(child.getText());
+    }
+    return colList;
+  }
+
+  private List<Order> getColumnNamesOrder(CommonTree ast)
+  {
+    List<Order> colList = new ArrayList<Order>();
+    int numCh = ast.getChildCount();
+    for (int i = 0; i < numCh; i++) {
+      CommonTree child = (CommonTree)ast.getChild(i);
+      if (child.getToken().getType() == HiveParser.TOK_TABSORTCOLNAMEASC)
+        colList.add(new Order(child.getChild(0).getText(), 1));
+      else
+        colList.add(new Order(child.getChild(0).getText(), 0));
     }
     return colList;
   }

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/ExplainSemanticAnalyzer.java Fri Sep 19 16:56:30 2008
@@ -21,6 +21,7 @@
 import java.io.File;
 
 import org.antlr.runtime.tree.CommonTree;
+import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.ql.Context;
 import org.apache.hadoop.hive.ql.exec.TaskFactory;
@@ -44,7 +45,7 @@
       extended = true;
     }
     
-    ctx.setResFile(new File(getTmpFileName()));
+    ctx.setResFile(new Path(getTmpFileName()));
     
     rootTasks.add(TaskFactory.get(new explainWork(ctx.getResFile(),
                                                   sem.getRootTasks(),

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g Fri Sep 19 16:56:30 2008
@@ -92,11 +92,14 @@
 TOK_TABLEROWFORMATCOLLITEMS;
 TOK_TABLEROWFORMATMAPKEYS;
 TOK_TABLEROWFORMATLINES;
-TOK_TBLCOMPRESSED;
+TOK_TBLSEQUENCEFILE;
 TOK_TABCOLNAME;
 TOK_TABLELOCATION;
 TOK_TABLESAMPLE;
 TOK_TMP_FILE;
+TOK_TABSORTCOLNAMEASC;
+TOK_TABSORTCOLNAMEDESC;
+TOK_CHARSETLITERAL;
 TOK_CREATEFUNCTION;
 TOK_EXPLAIN;
 }
@@ -146,9 +149,9 @@
     ;
 
 createStatement
-    : KW_CREATE (ext=KW_EXTERNAL)? KW_TABLE name=Identifier LPAREN columnNameTypeList RPAREN tableComment? tablePartition? tableBuckets? tableRowFormat? tableCompress? tableLocation?
-    -> {$ext == null}? ^(TOK_CREATETABLE $name columnNameTypeList tableComment? tablePartition? tableBuckets? tableRowFormat? tableCompress? tableLocation?)
-    ->                 ^(TOK_CREATEEXTTABLE $name columnNameTypeList tableComment? tablePartition? tableBuckets? tableRowFormat? tableCompress? tableLocation?)
+    : KW_CREATE (ext=KW_EXTERNAL)? KW_TABLE name=Identifier LPAREN columnNameTypeList RPAREN tableComment? tablePartition? tableBuckets? tableRowFormat? tableFileFormat? tableLocation?
+    -> {$ext == null}? ^(TOK_CREATETABLE $name columnNameTypeList tableComment? tablePartition? tableBuckets? tableRowFormat? tableFileFormat? tableLocation?)
+    ->                 ^(TOK_CREATEEXTTABLE $name columnNameTypeList tableComment? tablePartition? tableBuckets? tableRowFormat? tableFileFormat? tableLocation?)
     ;
 
 dropStatement
@@ -200,7 +203,7 @@
 
 tableBuckets
     :
-      KW_CLUSTERED KW_BY LPAREN bucketCols=columnNameList RPAREN (KW_SORTED KW_BY LPAREN sortCols=columnNameList RPAREN)? KW_INTO num=Number KW_BUCKETS 
+      KW_CLUSTERED KW_BY LPAREN bucketCols=columnNameList RPAREN (KW_SORTED KW_BY LPAREN sortCols=columnNameOrderList RPAREN)? KW_INTO num=Number KW_BUCKETS 
     -> ^(TOK_TABLEBUCKETS $bucketCols $sortCols? $num)
     ;
 
@@ -234,9 +237,9 @@
     -> ^(TOK_TABLEROWFORMATLINES $linesIdnt)
     ;
 
-tableCompress
+tableFileFormat
     :
-      KW_STORED KW_AS KW_COMPRESSED  -> TOK_TBLCOMPRESSED
+      KW_STORED KW_AS KW_SEQUENCEFILE  -> TOK_TBLSEQUENCEFILE
     ;
 
 tableLocation
@@ -257,6 +260,16 @@
       Identifier
     ;
 
+columnNameOrderList
+    : columnNameOrder (COMMA columnNameOrder)* -> ^(TOK_TABCOLNAME columnNameOrder+)
+    ;
+
+columnNameOrder
+    : Identifier (asc=KW_ASC | desc=KW_DESC)? 
+    -> {$desc == null}? ^(TOK_TABSORTCOLNAMEASC Identifier)
+    ->                  ^(TOK_TABSORTCOLNAMEDESC Identifier)
+    ;
+
 columnNameType
     : colName=Identifier colType (KW_COMMENT comment=StringLiteral)?    
     -> {$comment == null}? ^(TOK_TABCOL $colName colType)
@@ -538,9 +551,14 @@
     :
     Number
     | StringLiteral
+    | charSetStringLiteral
     | booleanValue 
-     ;
+    ;
 
+charSetStringLiteral
+    :
+    csName=CharSetName csLiteral=CharSetLiteral -> ^(TOK_CHARSETLITERAL $csName $csLiteral)
+    ;
 
 expression:
     precedenceOrExpression
@@ -772,7 +790,7 @@
 KW_KEYS: 'KEYS';
 KW_LINES: 'LINES';
 KW_STORED: 'STORED';
-KW_COMPRESSED: 'COMPRESSED';
+KW_SEQUENCEFILE: 'SEQUENCEFILE';
 KW_LOCATION: 'LOCATION';
 KW_TABLESAMPLE: 'TABLESAMPLE';
 KW_BUCKET: 'BUCKET';
@@ -825,6 +843,11 @@
     ;
 
 fragment
+HexDigit
+    : 'a'..'f' | 'A'..'F' 
+    ;
+
+fragment
 Digit
     :
     '0'..'9'
@@ -841,6 +864,12 @@
     '\'' (~'\'')* '\'' ( '\'' (~'\'')* '\'' )*
     ;
 
+CharSetLiteral
+    :    
+    StringLiteral 
+    | '0' 'X' (HexDigit|Digit)+
+    ;
+
 Number
     :
     (Digit)+ ( DOT (Digit)* (Exponent)? | Exponent)?
@@ -848,7 +877,12 @@
 
 Identifier
     :
-    (Letter | Digit | '_')+
+    (Letter | Digit) (Letter | Digit | '_')*
+    ;
+
+CharSetName
+    :
+    '_' (Letter | Digit | '_' | '-' | '.' | ':' )+
     ;
 
 WS  :  (' '|'\r'|'\t'|'\n') {$channel=HIDDEN;}
@@ -858,3 +892,5 @@
   : '--' (~('\n'|'\r'))*
     { $channel=HIDDEN; }
   ;
+
+

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/InputSignature.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/InputSignature.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/InputSignature.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/InputSignature.java Fri Sep 19 16:56:30 2008
@@ -23,6 +23,8 @@
 import java.lang.Object;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfo;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfoFactory;
 
 /**
  * The input signature of a function or operator. The signature basically consists
@@ -57,7 +59,7 @@
     
     if (classList.length != 0) {
       for(Class<?> cl: classList) {
-        typeArray.add(TypeInfo.getPrimitiveTypeInfo(cl));
+        typeArray.add(TypeInfoFactory.getPrimitiveTypeInfo(cl));
       }
     }
   }

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/PartitionPruner.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/PartitionPruner.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/PartitionPruner.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/PartitionPruner.java Fri Sep 19 16:56:30 2008
@@ -27,13 +27,11 @@
  */
 
 import java.util.*;
+
 import org.antlr.runtime.tree.*;
 
 import org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator;
 import org.apache.hadoop.hive.ql.exec.ExprNodeEvaluatorFactory;
-import org.apache.hadoop.hive.ql.exec.HiveObject;
-import org.apache.hadoop.hive.ql.exec.LabeledCompositeHiveObject;
-import org.apache.hadoop.hive.ql.exec.PrimitiveHiveObject;
 import org.apache.hadoop.hive.ql.metadata.*;
 import org.apache.hadoop.hive.ql.plan.exprNodeColumnDesc;
 import org.apache.hadoop.hive.ql.plan.exprNodeConstantDesc;
@@ -42,9 +40,16 @@
 import org.apache.hadoop.hive.ql.plan.exprNodeFuncDesc;
 import org.apache.hadoop.hive.ql.plan.exprNodeIndexDesc;
 import org.apache.hadoop.hive.ql.plan.exprNodeNullDesc;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfo;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfoUtils;
 import org.apache.hadoop.hive.ql.udf.UDFOPAnd;
 import org.apache.hadoop.hive.ql.udf.UDFOPNot;
 import org.apache.hadoop.hive.ql.udf.UDFOPOr;
+import org.apache.hadoop.hive.serde2.SerDeException;
+import org.apache.hadoop.hive.serde2.objectinspector.InspectableObject;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
+import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -111,8 +116,13 @@
           desc = new exprNodeColumnDesc(String.class, colName); 
         } else {
           // might be a column from another table
-          TypeInfo typeInfo = new TypeInfo(this.metaData.getTableForAlias(tabAlias).getSerDe(), null);
-          desc = new exprNodeConstantDesc(typeInfo.getFieldType(colName), null);
+          try {
+            TypeInfo typeInfo = TypeInfoUtils.getTypeInfoFromObjectInspector(
+                this.metaData.getTableForAlias(tabAlias).getDeserializer().getObjectInspector());
+            desc = new exprNodeConstantDesc(typeInfo.getStructFieldTypeInfo(colName), null);
+          } catch (SerDeException e){
+            throw new RuntimeException(e);
+          }
         }
         break;
       }
@@ -124,7 +134,9 @@
         int childrenBegin = (isFunction ? 1 : 0);
         ArrayList<exprNodeDesc> children = new ArrayList<exprNodeDesc>(expr.getChildCount() - childrenBegin);
         for (int ci=childrenBegin; ci<expr.getChildCount(); ci++) {
-          children.add(genExprNodeDesc((CommonTree)expr.getChild(ci)));
+          exprNodeDesc child = genExprNodeDesc((CommonTree)expr.getChild(ci));
+          assert(child.getTypeInfo() != null);
+          children.add(child);
         }
 
         // Create function desc
@@ -198,27 +210,36 @@
 
     HashSet<Partition> ret_parts = new HashSet<Partition>();
     try {
+      StructObjectInspector rowObjectInspector = (StructObjectInspector)this.tab.getDeserializer().getObjectInspector();
+      Object[] rowWithPart = new Object[2];
+      InspectableObject inspectableObject = new InspectableObject();
+      
       ExprNodeEvaluator evaluator = ExprNodeEvaluatorFactory.get(this.prunerExpr);
       for(Partition part: Hive.get().getPartitions(this.tab)) {
         // Set all the variables here
         LinkedHashMap<String, String> partSpec = part.getSpec();
 
         // Create the row object
-        String[] partNames = new String[partSpec.size()];
-        int i=0;
-        for(String name: partSpec.keySet()) {
-          partNames[i++] = name;
-        }
-        LabeledCompositeHiveObject hiveObject;
-        hiveObject = new LabeledCompositeHiveObject(partNames);
-        for(String s: partNames) {
-          hiveObject.addHiveObject(new PrimitiveHiveObject(partSpec.get(s)));
+        ArrayList<String> partNames = new ArrayList<String>();
+        ArrayList<String> partValues = new ArrayList<String>();
+        ArrayList<ObjectInspector> partObjectInspectors = new ArrayList<ObjectInspector>();
+        for(Map.Entry<String,String>entry : partSpec.entrySet()) {
+          partNames.add(entry.getKey());
+          partValues.add(entry.getValue());
+          partObjectInspectors.add(ObjectInspectorFactory.getStandardPrimitiveObjectInspector(String.class)); 
         }
+        StructObjectInspector partObjectInspector = ObjectInspectorFactory.getStandardStructObjectInspector(partNames, partObjectInspectors);
+        
+        rowWithPart[1] = partValues;
+        ArrayList<StructObjectInspector> ois = new ArrayList<StructObjectInspector>(2);
+        ois.add(rowObjectInspector);
+        ois.add(partObjectInspector);
+        StructObjectInspector rowWithPartObjectInspector = ObjectInspectorFactory.getUnionStructObjectInspector(ois);
         
         // evaluate the expression tree
-        HiveObject r = evaluator.evaluate(hiveObject);
-        LOG.trace("prune result for partition " + partSpec + ": " + r.getJavaObject());
-        if (!Boolean.FALSE.equals(r.getJavaObject())) {
+        evaluator.evaluate(rowWithPart, rowWithPartObjectInspector, inspectableObject);
+        LOG.trace("prune result for partition " + partSpec + ": " + inspectableObject.o);
+        if (!Boolean.FALSE.equals(inspectableObject.o)) {
           LOG.debug("retained partition: " + partSpec);
           ret_parts.add(part);
         } else {

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java Fri Sep 19 16:56:30 2008
@@ -23,7 +23,6 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.exec.ColumnInfo;
 import org.apache.hadoop.hive.ql.exec.RowSchema;
-import org.apache.hadoop.hive.serde.ExpressionUtils;
 
 /**
  * Implementation of the Row Resolver
@@ -51,6 +50,7 @@
   }
   
   public void put(String tab_alias, String col_alias, ColumnInfo colInfo) {
+    col_alias = col_alias.toLowerCase();
     if (rowSchema.getSignature() == null) {
       rowSchema.setSignature(new Vector<ColumnInfo>());
     }
@@ -75,34 +75,14 @@
   }
 
   public ColumnInfo get(String tab_alias, String col_alias) {
+    col_alias = col_alias.toLowerCase();
     HashMap<String, ColumnInfo> f_map = rslvMap.get(tab_alias);
     if (f_map == null) {
       return null;
     }
-    ColumnInfo resInfo = f_map.get(col_alias.toLowerCase());
-    if(resInfo == null) {
-      // case insensitive search on column names but ANTLR Tokens are upppercase
-      // TODO: need to fix this in a better way
-      resInfo = f_map.get(col_alias);
-    }
-    if (resInfo == null) {
-      List<String> exprs = ExpressionUtils.decomposeComplexExpression(col_alias);
-      // Is this a complex field?
-      if (exprs.size() == 2) {
-        String topLevelField = exprs.get(0);
-        String suffix = exprs.get(1);
-        ColumnInfo info = f_map.get(topLevelField.toLowerCase());
-        if(info == null) {
-          info = f_map.get(topLevelField);
-        }
-        resInfo = new ColumnInfo(info.getInternalName() + suffix, 
-                                 info.getType().getFieldType(suffix),
-                                 info.getIsVirtual());
-      }
-    }
-    return resInfo; 
+    return f_map.get(col_alias);
   }
-   
+
   public Vector<ColumnInfo> getColumnInfos() {
     return rowSchema.getSignature();
   }

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Fri Sep 19 16:56:30 2008
@@ -24,15 +24,19 @@
 import java.lang.reflect.Method;
 
 import org.antlr.runtime.tree.*;
-import org.apache.hadoop.hive.serde.SerDeField;
+import org.apache.hadoop.hive.serde2.SerDeException;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
+import org.apache.hadoop.hive.serde2.objectinspector.StructField;
+import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.ql.Context;
-import org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat;
 import org.apache.hadoop.hive.ql.metadata.*;
 import org.apache.hadoop.hive.ql.plan.*;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfo;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfoFactory;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfoUtils;
 import org.apache.hadoop.hive.ql.exec.*;
 import org.apache.hadoop.hive.conf.HiveConf;
-import org.apache.hadoop.mapred.TextInputFormat;
 
 import org.apache.hadoop.fs.Path;
 import org.apache.commons.lang.StringUtils;
@@ -560,6 +564,7 @@
 
     case HiveParser.Number:
     case HiveParser.StringLiteral:
+    case HiveParser.TOK_CHARSETLITERAL:
     case HiveParser.KW_TRUE:
     case HiveParser.KW_FALSE:
       break;
@@ -794,14 +799,9 @@
         .setOp(OperatorFactory
             .getAndMakeChild(
                 new scriptDesc(
-                               stripQuotes(trfm.getChild(2).getText()),
-                    new tableDesc(
-                        org.apache.hadoop.hive.serde.simple_meta.MetadataTypedColumnsetSerDe.class,
-                        TextInputFormat.class,
-                        IgnoreKeyTextOutputFormat.class,
-                        Utilities.makeProperties(
-                            org.apache.hadoop.hive.serde.Constants.SERIALIZATION_FORMAT, "" + Utilities.tabCode,
-                            "columns", sb.toString()))),
+                    stripQuotes(trfm.getChild(2).getText()),
+                    PlanUtils.getDefaultTableDesc(Integer.toString(Utilities.tabCode), sb.toString()),
+                    PlanUtils.getDefaultTableDesc(Integer.toString(Utilities.tabCode), "")),
                     new RowSchema(
                         out_rwsch.getColumnInfos()), input.get(0).getOp()));
 
@@ -840,6 +840,26 @@
     }
   }
   
+  private static String getColAlias(CommonTree selExpr, String defaultName) {
+    if (selExpr.getChildCount() == 2) {
+      // return zz for "xx + yy AS zz"
+      return selExpr.getChild(1).getText(); 
+    }
+
+    CommonTree root = (CommonTree)selExpr.getChild(0);
+    while (root.getType() == HiveParser.DOT || root.getType() == HiveParser.TOK_COLREF) {
+      assert(root.getChildCount() == 2);
+      root = (CommonTree) root.getChild(1);
+    }
+    if (root.getType() == HiveParser.Identifier) {
+      // Return zz for "xx.zz" and "xx.yy.zz"
+      return root.getText();
+    } else {
+      // Return defaultName if selExpr is not a simple xx.yy.zz 
+      return defaultName;
+    }
+  }
+  
   @SuppressWarnings("nls")
   private OperatorInfoList genSelectPlan(String dest, QB qb,
       OperatorInfoList input) throws SemanticException {
@@ -861,11 +881,7 @@
 
       // list of the columns
       CommonTree selExpr = (CommonTree) selExprList.getChild(i);
-      String colAlias = null;
-      if (selExpr.getChildCount() == 2)
-        colAlias = selExpr.getChild(1).getText();
-      else if (selExpr.getChild(0).getChildCount() >= 2)
-        colAlias = selExpr.getChild(0).getChild(1).getText();
+      String colAlias = getColAlias(selExpr, "_C" + i);
       CommonTree sel = (CommonTree)selExpr.getChild(0);
 
       if (sel.getToken().getType() == HiveParser.TOK_COLREF ||
@@ -909,6 +925,12 @@
       pos = Integer.valueOf(pos.intValue() + 1);
     }
 
+    for (int i=0; i<col_list.size(); i++) {
+      if (col_list.get(i) instanceof exprNodeNullDesc) {
+        col_list.set(i, new exprNodeConstantDesc(String.class, null));
+      }
+    }
+    
     OperatorInfoList output = (OperatorInfoList) input.clone();
     output.get(0).setOp(OperatorFactory.getAndMakeChild(
         new selectDesc(col_list), new RowSchema(out_rwsch.getColumnInfos()),
@@ -959,7 +981,7 @@
         QBParseInfo parseInfo, String dest, OperatorInfo reduceSinkOperatorInfo,
         groupByDesc.Mode mode)
     throws SemanticException {
-    RowResolver gropuByInputRowResolver = reduceSinkOperatorInfo.getRowResolver();
+    RowResolver groupByInputRowResolver = reduceSinkOperatorInfo.getRowResolver();
     RowResolver groupByOutputRowResolver = new RowResolver();
     groupByOutputRowResolver.setIsExprResolver(true);
     ArrayList<exprNodeDesc> groupByKeys = new ArrayList<exprNodeDesc>();
@@ -968,7 +990,7 @@
     for (int i = 0; i < grpByExprs.size(); ++i) {
       CommonTree grpbyExpr = grpByExprs.get(i);
       String text = grpbyExpr.toStringTree();
-      ColumnInfo exprInfo = gropuByInputRowResolver.get("",text);
+      ColumnInfo exprInfo = groupByInputRowResolver.get("",text);
 
       if (exprInfo == null) {
         throw new SemanticException(ErrorMsg.INVALID_COLUMN.getMsg(grpbyExpr));
@@ -995,7 +1017,7 @@
       for (int i = 1; i < value.getChildCount(); i++) {
         String text = value.getChild(i).toStringTree();
         CommonTree paraExpr = (CommonTree)value.getChild(i);
-        ColumnInfo paraExprInfo = gropuByInputRowResolver.get("",text);
+        ColumnInfo paraExprInfo = groupByInputRowResolver.get("",text);
         if (paraExprInfo == null) {
           throw new SemanticException(ErrorMsg.INVALID_COLUMN.getMsg(paraExpr));
         }
@@ -1159,7 +1181,7 @@
     }
 
     return new OperatorInfo(
-        OperatorFactory.getAndMakeChild(new reduceSinkDesc(reduceKeys, reduceValues, numPartitionFields),
+        OperatorFactory.getAndMakeChild(PlanUtils.getReduceSinkDesc(reduceKeys, reduceValues, numPartitionFields),
                                         new RowSchema(reduceSinkOutputRowResolver.getColumnInfos()),
                                         inputOperatorInfo.getOp()),
         reduceSinkOutputRowResolver
@@ -1185,8 +1207,10 @@
         new ColumnInfo(Utilities.ReduceField.KEY.toString() + "." + Integer.valueOf(reduceKeys.size() - 1).toString(),
                        String.class, false));
     }
-    else
-      reduceKeys.add(new exprNodeNullDesc());
+    else {
+      // dummy key
+      reduceKeys.add(new exprNodeConstantDesc(0));
+    }
 
     // copy the input row resolver
     ArrayList<exprNodeDesc> reduceValues = new ArrayList<exprNodeDesc>();
@@ -1246,7 +1270,7 @@
     }
 
     return new OperatorInfo(
-        OperatorFactory.getAndMakeChild(new reduceSinkDesc(reduceKeys, reduceValues, distinctText == null ? -1 : 1),
+        OperatorFactory.getAndMakeChild(PlanUtils.getReduceSinkDesc(reduceKeys, reduceValues, distinctText == null ? -1 : 1),
                                         new RowSchema(outputRS.getColumnInfos()), input.getOp()),
         outputRS);
   }
@@ -1278,7 +1302,7 @@
     for (int i = 0; i < grpByExprs.size(); ++i) {
       CommonTree grpbyExpr = grpByExprs.get(i);
       String field = (Integer.valueOf(i)).toString();
-      reduceKeys.add(new exprNodeColumnDesc(TypeInfo.getPrimitiveTypeInfo(String.class), field));
+      reduceKeys.add(new exprNodeColumnDesc(TypeInfoFactory.getPrimitiveTypeInfo(String.class), field));
       reduceSinkOutputRowResolver2.put("", grpbyExpr.toStringTree(),
                                        new ColumnInfo(Utilities.ReduceField.KEY.toString() + "." + field,
                                                       String.class, false)); // Everything is a string right now
@@ -1289,7 +1313,7 @@
     HashMap<String, CommonTree> aggregationTrees = parseInfo
         .getAggregationExprsForClause(dest);
     for (Map.Entry<String, CommonTree> entry : aggregationTrees.entrySet()) {
-      reduceValues.add(new exprNodeColumnDesc(TypeInfo.getPrimitiveTypeInfo(String.class),
+      reduceValues.add(new exprNodeColumnDesc(TypeInfoFactory.getPrimitiveTypeInfo(String.class),
           (Integer.valueOf(inputField)).toString()));
       inputField++;
       reduceSinkOutputRowResolver2.put("", ((CommonTree)entry.getValue()).toStringTree(),
@@ -1298,7 +1322,7 @@
     }
 
     return new OperatorInfo(
-        OperatorFactory.getAndMakeChild(new reduceSinkDesc(reduceKeys, reduceValues, numPartitionFields),
+        OperatorFactory.getAndMakeChild(PlanUtils.getReduceSinkDesc(reduceKeys, reduceValues, numPartitionFields),
                                         new RowSchema(reduceSinkOutputRowResolver2.getColumnInfos()),
                                         groupByOperatorInfo.getOp()),
         reduceSinkOutputRowResolver2
@@ -1532,16 +1556,24 @@
       }
     }
 
+    /*
     // We have the table object here - go over the row resolver
     // and check all the types are the same
-    input.get(0).getRowResolver().getColumnInfos();
+    // Vector<ColumnInfo> srcOpns = input.get(0).getRowResolver().getColumnInfos();
 
     Vector<ColumnInfo> insOpns = new Vector<ColumnInfo>();
-    for (SerDeField field : dest_tab.getFields(null)) {
-      insOpns.add(new ColumnInfo(field.getName(), new TypeInfo(dest_tab.getSerDe(), field), false));
+    try {
+      StructObjectInspector rowObjectInspector = (StructObjectInspector)dest_tab.getDeserializer().getObjectInspector();
+      List<? extends StructField> fields = rowObjectInspector.getAllStructFieldRefs();
+      for (int i=0; i<fields.size(); i++) {
+        insOpns.add(new ColumnInfo(
+            fields.get(i).getFieldName(),
+            TypeInfoUtils.getTypeInfoFromObjectInspector(fields.get(i).getFieldObjectInspector()),
+            false));
+      }
+    } catch (SerDeException e) {
+      throw new RuntimeException(e);
     }
-
-    /*
     if (insOpns.size() != srcOpns.size()) {
       // TODO: change this to error message later
       throw new SemanticException("Number of columns in the select expression does not " + 
@@ -1665,7 +1697,7 @@
     OperatorInfoList interim = (OperatorInfoList)input.clone();
     interim.get(0).setOp(
       OperatorFactory.getAndMakeChild(
-        new reduceSinkDesc(keyCols, valueCols, keyCols.size()),
+        PlanUtils.getReduceSinkDesc(keyCols, valueCols, keyCols.size()),
         new RowSchema(interim.get(0).getRowResolver().getColumnInfos()),
         input.get(0).getOp()
       )
@@ -1780,7 +1812,7 @@
       }
     }
 
-    return new OperatorInfo(OperatorFactory.getAndMakeChild(new reduceSinkDesc(
+    return new OperatorInfo(OperatorFactory.getAndMakeChild(PlanUtils.getReduceSinkDesc(
       reduceKeys, reduceValues, joinTree.getNextTag(), reduceKeys.size()), new RowSchema(outputRS.getColumnInfos()),
         child.getOp()), outputRS);
   }
@@ -2212,16 +2244,16 @@
   private exprNodeDesc genSamplePredicate(TableSample ts) {
     // ((default_sample_hashfn(cols) & Integer.MAX_VALUE) % denominator) == numerator
     exprNodeDesc numeratorExpr = new exprNodeConstantDesc(
-      TypeInfo.getPrimitiveTypeInfo(Integer.class), 
-      Integer.valueOf(ts.getNumerator()));
+        TypeInfoFactory.getPrimitiveTypeInfo(Integer.class), 
+        Integer.valueOf(ts.getNumerator()));
       
     exprNodeDesc denominatorExpr = new exprNodeConstantDesc(
-      TypeInfo.getPrimitiveTypeInfo(Integer.class), 
-      Integer.valueOf(ts.getDenominator()));
+        TypeInfoFactory.getPrimitiveTypeInfo(Integer.class), 
+        Integer.valueOf(ts.getDenominator()));
 
     exprNodeDesc intMaxExpr = new exprNodeConstantDesc(
-      TypeInfo.getPrimitiveTypeInfo(Integer.class), 
-      Integer.valueOf(Integer.MAX_VALUE));
+        TypeInfoFactory.getPrimitiveTypeInfo(Integer.class), 
+        Integer.valueOf(Integer.MAX_VALUE));
     ArrayList<exprNodeDesc> args = new ArrayList<exprNodeDesc>();
     for (String col: ts.getCols()) {
       // TODO: change type to the one in the table schema
@@ -2251,9 +2283,16 @@
     Table tab = qb.getMetaData().getSrcForAlias(alias);
 
     RowResolver rwsch = new RowResolver();
-    for (SerDeField field : tab.getFields(null)) {
-      rwsch.put(alias, field.getName(),
-                new ColumnInfo(field.getName(), new TypeInfo(tab.getSerDe(), field), false));
+    try {
+      StructObjectInspector rowObjectInspector = (StructObjectInspector)tab.getDeserializer().getObjectInspector();
+      List<? extends StructField> fields = rowObjectInspector.getAllStructFieldRefs();
+      for (int i=0; i<fields.size(); i++) {
+        rwsch.put(alias, fields.get(i).getFieldName(),
+            new ColumnInfo(fields.get(i).getFieldName(), 
+                TypeInfoUtils.getTypeInfoFromObjectInspector(fields.get(i).getFieldObjectInspector()), false));
+      }
+    } catch (SerDeException e) {
+      throw new RuntimeException(e);
     }
     // Hack!! - refactor once the metadata APIs with types are ready
     // Finally add the partitioning columns
@@ -2559,12 +2598,8 @@
               isfirst = false;
             }
 
-            tableDesc tt_desc = new tableDesc(
-                org.apache.hadoop.hive.serde.simple_meta.MetadataTypedColumnsetSerDe.class,
-                TextInputFormat.class,
-                IgnoreKeyTextOutputFormat.class,
-                Utilities.makeProperties(org.apache.hadoop.hive.serde.Constants.SERIALIZATION_FORMAT, "" + Utilities.ctrlaCode,
-                                         "columns", sb.toString()));
+            tableDesc tt_desc = PlanUtils.getDefaultTableDesc(Integer.toString(Utilities.ctrlaCode),
+                                         sb.toString());
 
             // Create a file sink operator for this file name
             Operator<? extends Serializable> fs_op = OperatorFactory.get(new fileSinkDesc(taskTmpDir, tt_desc),
@@ -2701,9 +2736,9 @@
     for (int i = 0; i < children.size(); i++)
     {
       exprNodeDesc desc = children.get(i);
-      Class<?> pType = TypeInfo.generalizePrimitive(pTypes[i]);
+      Class<?> pType = ObjectInspectorUtils.generalizePrimitive(pTypes[i]);
       if (desc instanceof exprNodeNullDesc) {
-        exprNodeConstantDesc newCh = new exprNodeConstantDesc(TypeInfo.getPrimitiveTypeInfo(pType), null);
+        exprNodeConstantDesc newCh = new exprNodeConstantDesc(TypeInfoFactory.getPrimitiveTypeInfo(pType), null);
         ch.add(newCh);
       } else if (pType.isAssignableFrom(desc.getTypeInfo().getPrimitiveClass())) {
         // no type conversion needed
@@ -2722,13 +2757,13 @@
         ArrayList<exprNodeDesc> conversionArg = new ArrayList<exprNodeDesc>(1);
         conversionArg.add(desc);
         ch.add(new exprNodeFuncDesc(
-              TypeInfo.getPrimitiveTypeInfo(pType),
+              TypeInfoFactory.getPrimitiveTypeInfo(pType),
               c, m, conversionArg));
       }
     }
 
     exprNodeFuncDesc desc = new exprNodeFuncDesc(
-      TypeInfo.getPrimitiveTypeInfo(TypeInfo.generalizePrimitive(udfMethod.getReturnType())),
+      TypeInfoFactory.getPrimitiveTypeInfo(udfMethod.getReturnType()),
       FunctionRegistry.getUDFClass(udfName),
       udfMethod, ch);
     return desc;
@@ -2803,6 +2838,7 @@
         break;
       }
     }
+    assert(desc != null);
     return desc;
   }
 
@@ -2861,6 +2897,7 @@
     // return the child directly if the conversion is redundant.
     if (isRedundantConversionFunction(expr, isFunction, children)) {
       assert(children.size() == 1);
+      assert(children.get(0) != null);
       return children.get(0);
     }
     String funcText = getFunctionText(expr, isFunction);
@@ -2876,7 +2913,7 @@
       
       // Calculate TypeInfo
       String fieldNameString = (String)fieldName.getValue();
-      TypeInfo t = object.getTypeInfo().getFieldType(fieldNameString);
+      TypeInfo t = object.getTypeInfo().getStructFieldTypeInfo(fieldNameString);
       
       desc = new exprNodeFieldDesc(t, children.get(0), fieldNameString);
       
@@ -2890,13 +2927,16 @@
       }
       
       // Calculate TypeInfo
-      TypeInfo t = children.get(0).getTypeInfo().getListElementType();
+      TypeInfo t = children.get(0).getTypeInfo().getListElementTypeInfo();
       desc = new exprNodeIndexDesc(t, children.get(0), children.get(1));
     } else {
       // other operators or functions
       Class<? extends UDF> udf = FunctionRegistry.getUDFClass(funcText);
       if (udf == null) {
-        throw new SemanticException(ErrorMsg.INVALID_FUNCTION.getMsg((CommonTree)expr.getChild(0)));
+      	if (isFunction)
+          throw new SemanticException(ErrorMsg.INVALID_FUNCTION.getMsg((CommonTree)expr.getChild(0)));
+      	else
+          throw new SemanticException(ErrorMsg.INVALID_FUNCTION.getMsg((CommonTree)expr));
       }
       
       desc = getFuncExprNodeDesc(funcText, children);
@@ -2915,6 +2955,7 @@
         }
       }
     }
+    assert(desc != null);
     return desc;
   }
 
@@ -2927,7 +2968,7 @@
       case HiveParser.Identifier:
         // This is the case for an XPATH element (like "c" in "a.b.c.d")
         desc = new exprNodeConstantDesc(
-            TypeInfo.getPrimitiveTypeInfo(String.class), expr.getText());
+            TypeInfoFactory.getPrimitiveTypeInfo(String.class), expr.getText());
         break;
       case HiveParser.Number:
         Number v = null;
@@ -2946,6 +2987,9 @@
       case HiveParser.StringLiteral:
         desc = new exprNodeConstantDesc(String.class, BaseSemanticAnalyzer.unescapeSQLString(expr.getText()));
         break;
+      case HiveParser.TOK_CHARSETLITERAL:
+        desc = new exprNodeConstantDesc(String.class, BaseSemanticAnalyzer.charSetString(expr.getChild(0).getText(), expr.getChild(1).getText()));
+        break;
       case HiveParser.KW_TRUE:
         desc = new exprNodeConstantDesc(Boolean.class, Boolean.TRUE);
         break;

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeInfo.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeInfo.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeInfo.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeInfo.java Fri Sep 19 16:56:30 2008
@@ -1,251 +0,0 @@
-/**
- * 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.parse;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import org.apache.hadoop.hive.serde.SerDe;
-import org.apache.hadoop.hive.serde.SerDeField;
-
-/**
- * Stores information about a type.
- * 
- * This class fixes an important problem in SerDe: SerDeField.getListElementType(), 
- * SerDeField.getMapKeyType(), and SerDeField.getMapValueType() should return a type 
- * description object, instead of the Class object, so we can support types that are 
- * not represented by a java class. 
- * 
- * The current implementation is just a simple wrapper around SerDe and SerDeField.
- * Later it might be possible to merge this class into SerDe etc.
- * 
- * Note: It may not be possible to store the Type information as a Java Class object,
- * because we support all SerDe's including those that are not using Java Reflection. 
- * 
- * 
- * We support 4 categories of types:
- * 1. Primitive objects (String, Number, etc)
- * 2. List objects (a list of objects of a single type)
- * 3. Map objects (a map from objects of one type to objects of another type)
- * 4. Struct objects
- * 
- */
-public class TypeInfo {
-
-  static enum Category {
-    UNINITIALIZED, PRIMITIVE, LIST, MAP, STRUCT
-  };
-  
-  Category category;
-  
-  // Only for primitive objects.
-  Class<?>    primitiveClass; 
-  
-  // For all other 3 categories.
-  SerDeField currentField;
-  SerDe      currentSerDe;
-  
-  /**
-   * Default constructor.
-   */
-  public TypeInfo() {
-    this.category = Category.UNINITIALIZED;
-    this.primitiveClass = null;
-    this.currentField = null;
-    this.currentSerDe = null;    
-  }
-
-  /**
-   * Default constructor.
-   */
-  public TypeInfo(Category category) {
-    this.category = category;
-    this.primitiveClass = null;
-    this.currentField = null;
-    this.currentSerDe = null;    
-  }
-
-  /**
-   * Constructor for primitive TypeInfo.
-   * @param primitiveType
-   */
-  public TypeInfo(Class<?> primitiveType) {
-    this.category = Category.PRIMITIVE;
-    this.primitiveClass = primitiveType; 
-  }
-  
-  /**
-   * Constructor for SerDe-based TypeInfo. 
-   * currentField can be null, which means the top-level field.
-   * 
-   * @param currentField   
-   * @param currentSerDe
-   */
-  public TypeInfo(SerDe currentSerDe, SerDeField currentField) {
-
-    this.currentSerDe = currentSerDe;
-    this.currentField = currentField;
-    
-    if (currentField == null) {
-      // Top level field
-      this.category = Category.STRUCT;
-    } else if (currentField.isList()) {
-      this.category = Category.LIST;
-    } else if (currentField.isMap()) {
-      this.category = Category.MAP;
-    } else if (currentField.isPrimitive()) {
-      this.category = Category.PRIMITIVE;
-      this.primitiveClass = generalizePrimitive(currentField.getType());
-      this.currentSerDe = null;
-      this.currentField = null;
-    } else {
-      this.category = Category.STRUCT;
-    }
-    
-  }
-
-  /** Only for primitive type. 
-   */
-  public Class<?> getPrimitiveClass() {
-    assert(this.category == Category.PRIMITIVE);
-    return this.primitiveClass;
-  }
-
-  /** Only for list type. 
-   */
-  public TypeInfo getListElementType() {
-    assert(this.category == Category.LIST);
-    try {
-      return new TypeInfo(this.currentSerDe, this.currentSerDe.getFieldFromExpression(this.currentField, "[0]"));
-    } catch (Exception e){
-      throw new RuntimeException(e);
-    }
-  }
-  
-  /** Only for map type.
-   */
-  public TypeInfo getMapKeyType() {
-    assert(this.category == Category.MAP);
-    return new TypeInfo(this.currentField.getMapKeyType());
-  }
-  
-  /** Only for map type.
-   */
-  public TypeInfo getMapValueType() {
-    assert(this.category == Category.MAP);
-    return new TypeInfo(this.currentField.getMapValueType());
-  }
-  
-  /** Only for Struct type.
-   */
-  public TypeInfo getFieldType(String fieldName) {
-    assert(this.category == Category.STRUCT);
-    try {
-      return new TypeInfo(this.currentSerDe, this.currentSerDe.getFieldFromExpression(this.currentField, fieldName));
-    } catch (Exception e){
-      throw new RuntimeException(e);
-    }
-  }
-  
-  /** Only for Struct type.
-   */
-  public List<TypeInfo> getAllFieldsTypes() {
-    ArrayList<TypeInfo> typeInfos = new ArrayList<TypeInfo>();
-    try { 
-      for(SerDeField field : this.currentSerDe.getFields(this.currentField)) {
-        typeInfos.add(new TypeInfo(this.currentSerDe, field));
-      }
-    } catch (Exception e){
-      throw new RuntimeException(e);
-    }
-    return typeInfos;
-  }
-  
-  @Override
-  public boolean equals(Object other) {
-    if (other.getClass() != TypeInfo.class) {
-      return false;
-    }
-    TypeInfo another = (TypeInfo)other;
-    if (another == null) return false;
-    if (this.category != another.category) return false;
-    switch(this.category) {
-      case PRIMITIVE: 
-        return this.getPrimitiveClass().equals(another.getPrimitiveClass());
-      case LIST: 
-        return this.getListElementType().equals(another.getListElementType());
-      case MAP: 
-        return this.getMapKeyType().equals(another.getMapKeyType()) 
-            && this.getMapValueType().equals(another.getMapValueType());
-      case STRUCT:
-        return this.getAllFieldsTypes().equals(another.getAllFieldsTypes());
-    }
-    return false;
-  }
-  
-  public String toString() {
-    switch(this.category) {
-      case PRIMITIVE: 
-        return this.getPrimitiveClass().toString();
-      case LIST: 
-        return "List<" + this.getListElementType().toString() + ">";
-      case MAP: 
-        return "Map<" + this.getMapKeyType().toString() + ","
-            + this.getMapValueType().toString() + ">";
-      case STRUCT:
-        return "Struct(" + this.getAllFieldsTypes().toString() + ")";
-    }
-    return "(Unknown TypeInfo)";    
-  }
-  
-  private static HashMap<Class<?>, TypeInfo> cache;
-  static {
-    cache = new HashMap<Class<?>, TypeInfo>(); 
-  }
-  
-  public static TypeInfo getPrimitiveTypeInfo(Class<?> primitiveClass) {
-    primitiveClass = generalizePrimitive(primitiveClass);
-    TypeInfo result = cache.get(primitiveClass);
-    if (result == null) {
-      result = new TypeInfo(primitiveClass);
-      cache.put(primitiveClass, result);
-    }
-    return result;
-  }
-  
-
-  public static Class<?> generalizePrimitive(Class<?> primitiveClass) {
-    if (primitiveClass == Boolean.TYPE)   primitiveClass = Boolean.class;
-    if (primitiveClass == Byte.TYPE)      primitiveClass = Byte.class; 
-    if (primitiveClass == Character.TYPE) primitiveClass = Character.class; 
-    if (primitiveClass == Short.TYPE)     primitiveClass = Short.class; 
-    if (primitiveClass == Integer.TYPE)   primitiveClass = Integer.class; 
-    if (primitiveClass == Long.TYPE)      primitiveClass = Long.class; 
-    if (primitiveClass == Float.TYPE)     primitiveClass = Float.class; 
-    if (primitiveClass == Double.TYPE)    primitiveClass = Double.class;
-    if (primitiveClass == Void.TYPE)      primitiveClass = Void.class;
-    return primitiveClass;
-  }
-  
-  public String getTypeString() {
-    // TODO: Change this to print out a better user visible string
-    return toString();
-  }
-}

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/PlanUtils.java Fri Sep 19 16:56:30 2008
@@ -21,6 +21,11 @@
 import java.util.*;
 import java.io.*;
 import org.apache.hadoop.hive.ql.exec.Operator;
+import org.apache.hadoop.hive.ql.exec.Utilities;
+import org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat;
+import org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
+import org.apache.hadoop.mapred.TextInputFormat;
 
 public class PlanUtils {
 
@@ -37,4 +42,52 @@
                           null,
                           Integer.valueOf (1));
   }
+  
+  public static tableDesc getDefaultTableDesc(String separatorCode, String columns) {
+    return new tableDesc(
+        MetadataTypedColumnsetSerDe.class,
+        TextInputFormat.class,
+        IgnoreKeyTextOutputFormat.class,
+        Utilities.makeProperties(
+            org.apache.hadoop.hive.serde.Constants.SERIALIZATION_FORMAT, separatorCode,
+            "columns", columns));    
+  }
+  public static tableDesc getDefaultTableDesc(String separatorCode) {
+    return new tableDesc(
+        MetadataTypedColumnsetSerDe.class,
+        TextInputFormat.class,
+        IgnoreKeyTextOutputFormat.class,
+        Utilities.makeProperties(
+            org.apache.hadoop.hive.serde.Constants.SERIALIZATION_FORMAT, separatorCode));    
+  }
+
+  
+  // We will make reduce key and reduce value TableDesc with configurable SerDes   
+  public static reduceSinkDesc getReduceSinkDesc(ArrayList<exprNodeDesc> keyCols,
+      ArrayList<exprNodeDesc> valueCols, int numPartitionFields) {
+     
+     return new reduceSinkDesc(keyCols, valueCols, numPartitionFields,
+         getDefaultTableDesc("" + Utilities.ctrlaCode, ObjectInspectorUtils.getIntegerCSV(keyCols.size())),
+         getDefaultTableDesc("" + Utilities.ctrlaCode, ObjectInspectorUtils.getIntegerCSV(valueCols.size())));
+  }
+  
+  // We will make reduce key and reduce value TableDesc with configurable SerDes   
+  public static reduceSinkDesc getReduceSinkDesc(ArrayList<exprNodeDesc> keyCols,
+      ArrayList<exprNodeDesc> valueCols, int tag, int numPartitionFields) {
+     
+     return new reduceSinkDesc(keyCols, valueCols, tag, numPartitionFields,
+         getDefaultTableDesc("" + Utilities.ctrlaCode, ObjectInspectorUtils.getIntegerCSV(keyCols.size())),
+         getDefaultTableDesc("" + Utilities.ctrlaCode, ObjectInspectorUtils.getIntegerCSV(valueCols.size())));
+  }
+
+  // We should read the TableDesc from gWork when it is available.   
+  public static tableDesc getReduceKeyDesc(mapredWork gWork) {
+     return getDefaultTableDesc("" + Utilities.ctrlaCode);
+  }
+
+  // We should read the TableDesc from gWork when it is available.   
+  public static tableDesc getReduceValueDesc(mapredWork gWork, int tag) {
+     return getDefaultTableDesc("" + Utilities.ctrlaCode);
+  }
+  
 }

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/createTableDesc.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/createTableDesc.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/createTableDesc.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/createTableDesc.java Fri Sep 19 16:56:30 2008
@@ -22,6 +22,7 @@
 import java.util.List;
 
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
+import org.apache.hadoop.hive.metastore.api.Order;
 import org.apache.hadoop.hive.ql.exec.Utilities;
 
 @explain(displayName="Create Table")
@@ -33,23 +34,23 @@
   List<FieldSchema>   cols;
   List<FieldSchema>   partCols;
   List<String>        bucketCols;
-  List<String>        sortCols;
+  List<Order>         sortCols;
   int                 numBuckets;
   String              fieldDelim;
   String              collItemDelim;
   String              mapKeyDelim;
   String              lineDelim;
   String              comment;
-  boolean             isCompressed;
+  boolean             isSequenceFile;
   String              location;
   
   public createTableDesc(String tableName, boolean isExternal, 
                          List<FieldSchema> cols, List<FieldSchema> partCols,
-                         List<String> bucketCols, List<String> sortCols, 
+                         List<String> bucketCols, List<Order> sortCols, 
                          int numBuckets, String fieldDelim, 
                          String collItemDelim,
                          String mapKeyDelim, String lineDelim, 
-                         String comment, boolean isCompressed, 
+                         String comment, boolean isSequenceFile, 
                          String location) {
     this.tableName       = tableName;
     this.isExternal      = isExternal;
@@ -59,7 +60,7 @@
     this.cols            = cols;
     this.comment         = comment;
     this.fieldDelim      = fieldDelim;
-    this.isCompressed    = isCompressed;
+    this.isSequenceFile    = isSequenceFile;
     this.lineDelim       = lineDelim;
     this.location        = location;
     this.mapKeyDelim     = mapKeyDelim;
@@ -165,13 +166,13 @@
     this.comment = comment;
   }
 
-  @explain(displayName="isCompressed")
-  public boolean isCompressed() {
-    return isCompressed;
+  @explain(displayName="isSequenceFile")  
+  public boolean isSequenceFile() {
+    return isSequenceFile;
   }
 
-  public void setCompressed(boolean isCompressed) {
-    this.isCompressed = isCompressed;
+  public void setSequenceFile(boolean isSequenceFile) {
+    this.isSequenceFile = isSequenceFile;
   }
 
   @explain(displayName="location")
@@ -196,14 +197,14 @@
    * @return the sortCols
    */
   @explain(displayName="sort columns")
-  public List<String> getSortCols() {
+  public List<Order> getSortCols() {
     return sortCols;
   }
 
   /**
    * @param sortCols the sortCols to set
    */
-  public void setSortCols(List<String> sortCols) {
+  public void setSortCols(List<Order> sortCols) {
     this.sortCols = sortCols;
   }
 }

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/descTableDesc.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/descTableDesc.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/descTableDesc.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/descTableDesc.java Fri Sep 19 16:56:30 2008
@@ -18,9 +18,8 @@
 
 package org.apache.hadoop.hive.ql.plan;
 
-import java.io.File;
-import java.io.IOException;
 import java.io.Serializable;
+import org.apache.hadoop.fs.Path;
 
 @explain(displayName="Describe Table")
 public class descTableDesc extends ddlDesc implements Serializable 
@@ -28,13 +27,13 @@
   private static final long serialVersionUID = 1L;
   
   String            tableName;
-  File              resFile;
+  Path              resFile;
   
   /**
    * @param resFile
    * @param tableName
    */
-  public descTableDesc(File resFile, String tableName) {
+  public descTableDesc(Path resFile, String tableName) {
     this.resFile = resFile;
     this.tableName = tableName;
   }
@@ -51,24 +50,19 @@
   /**
    * @return the resFile
    */
-  public File getResFile() {
+  public Path getResFile() {
     return resFile;
   }
 
   @explain(displayName="result file", normalExplain=false)
   public String getResFileString() {
-    try {
-      return getResFile().getCanonicalPath();
-    }
-    catch (IOException ioe) {
-      return "error";
-    }
+    return getResFile().getName();
   }
   
   /**
    * @param resFile the resFile to set
    */
-  public void setResFile(File resFile) {
+  public void setResFile(Path resFile) {
     this.resFile = resFile;
   }
 }

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/explainWork.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/explainWork.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/explainWork.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/explainWork.java Fri Sep 19 16:56:30 2008
@@ -18,23 +18,23 @@
 
 package org.apache.hadoop.hive.ql.plan;
 
-import java.io.File;
 import java.io.Serializable;
 import java.util.List;
 
+import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.ql.exec.Task;
 
 public class explainWork implements Serializable {
   private static final long serialVersionUID = 1L;
 
-  private File resFile;
+  private Path resFile;
   private List<Task<? extends Serializable>> rootTasks;
   private String astStringTree;
   boolean extended;
   
   public explainWork() { }
   
-  public explainWork(File resFile, 
+  public explainWork(Path resFile, 
                      List<Task<? extends Serializable>> rootTasks,
                      String astStringTree,
                      boolean extended) {
@@ -44,11 +44,11 @@
     this.extended = extended;
   }
   
-  public File getResFile() {
+  public Path getResFile() {
     return resFile;
   }
   
-  public void setResFile(File resFile) {
+  public void setResFile(Path resFile) {
     this.resFile = resFile;
   }
   

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeColumnDesc.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeColumnDesc.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeColumnDesc.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeColumnDesc.java Fri Sep 19 16:56:30 2008
@@ -20,7 +20,8 @@
 
 import java.io.Serializable;
 
-import org.apache.hadoop.hive.ql.parse.TypeInfo;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfo;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfoFactory;
 
 public class exprNodeColumnDesc extends exprNodeDesc implements Serializable {
   private static final long serialVersionUID = 1L;
@@ -32,7 +33,7 @@
     this.column = column;
   }
   public exprNodeColumnDesc(Class<?> c, String column) {
-    super(TypeInfo.getPrimitiveTypeInfo(c));
+    super(TypeInfoFactory.getPrimitiveTypeInfo(c));
     this.column = column;
   }
   public String getColumn() {

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeConstantDesc.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeConstantDesc.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeConstantDesc.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeConstantDesc.java Fri Sep 19 16:56:30 2008
@@ -20,7 +20,9 @@
 
 import java.io.Serializable;
 
-import org.apache.hadoop.hive.ql.parse.TypeInfo;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfo;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfoFactory;
+
 
 public class exprNodeConstantDesc extends exprNodeDesc implements Serializable {
   private static final long serialVersionUID = 1L;
@@ -32,7 +34,7 @@
     this.value = value;
   }
   public exprNodeConstantDesc(Class<?> c, Object value) {
-    this(TypeInfo.getPrimitiveTypeInfo(c), value);
+    this(TypeInfoFactory.getPrimitiveTypeInfo(c), value);
   }
   public exprNodeConstantDesc(Object value) {
     this(value.getClass(), value);

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeDesc.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeDesc.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeDesc.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeDesc.java Fri Sep 19 16:56:30 2008
@@ -20,15 +20,19 @@
 
 import java.io.Serializable;
 
-import org.apache.hadoop.hive.ql.parse.TypeInfo;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfo;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
 
 public class exprNodeDesc implements Serializable {  
   private static final long serialVersionUID = 1L;
-  transient TypeInfo typeInfo;
+  TypeInfo typeInfo;
   
   public exprNodeDesc() {}
   public exprNodeDesc(TypeInfo typeInfo) {
     this.typeInfo = typeInfo;
+    if (typeInfo == null) {
+      throw new RuntimeException("typeInfo cannot be null!");
+    }
   }
   
   public TypeInfo getTypeInfo() {
@@ -45,6 +49,6 @@
   
   @explain(displayName="type")
   public String getTypeString() {
-    return typeInfo.getTypeString();
+    return typeInfo.getTypeName();
   }
 }

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeFieldDesc.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeFieldDesc.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeFieldDesc.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeFieldDesc.java Fri Sep 19 16:56:30 2008
@@ -19,8 +19,8 @@
 package org.apache.hadoop.hive.ql.plan;
 
 import java.io.Serializable;
-
-import org.apache.hadoop.hive.ql.parse.TypeInfo;
+
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfo;
 
 public class exprNodeFieldDesc extends exprNodeDesc implements Serializable {
   private static final long serialVersionUID = 1L;

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeFuncDesc.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeFuncDesc.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeFuncDesc.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeFuncDesc.java Fri Sep 19 16:56:30 2008
@@ -24,9 +24,9 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfo;
 import org.apache.hadoop.hive.ql.exec.FunctionInfo;
 import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
-import org.apache.hadoop.hive.ql.parse.TypeInfo;
 
 /**
  * The reason that we have to store UDFClass as well as UDFMethod is because

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeIndexDesc.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeIndexDesc.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeIndexDesc.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeIndexDesc.java Fri Sep 19 16:56:30 2008
@@ -19,8 +19,9 @@
 package org.apache.hadoop.hive.ql.plan;
 
 import java.io.Serializable;
+
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfo;
 
-import org.apache.hadoop.hive.ql.parse.TypeInfo;
 
 public class exprNodeIndexDesc extends exprNodeDesc implements Serializable {
   private static final long serialVersionUID = 1L;
@@ -33,6 +34,11 @@
     this.desc = desc;
     this.index = index;    
   }
+  public exprNodeIndexDesc(exprNodeDesc desc, exprNodeDesc index) {
+    super(desc.getTypeInfo().getListElementTypeInfo());
+    this.desc = desc;
+    this.index = index;    
+  }
   
   public exprNodeDesc getDesc() {
     return this.desc;

Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeNullDesc.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeNullDesc.java?rev=697291&r1=697290&r2=697291&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeNullDesc.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/plan/exprNodeNullDesc.java Fri Sep 19 16:56:30 2008
@@ -20,14 +20,14 @@
 
 import java.io.Serializable;
 
-import org.apache.hadoop.hive.ql.parse.TypeInfo;
+import org.apache.hadoop.hive.ql.typeinfo.TypeInfoFactory;
 
 public class exprNodeNullDesc extends exprNodeDesc implements Serializable {
   
   private static final long serialVersionUID = 1L;
 
   public exprNodeNullDesc() {
-    super(new TypeInfo(Void.class));
+    super(TypeInfoFactory.getPrimitiveTypeInfo(Void.class));
   }
 
   public Object getValue() {