You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jv...@apache.org on 2011/07/22 22:27:54 UTC

svn commit: r1149727 [1/2] - in /hive/trunk: metastore/src/java/org/apache/hadoop/hive/metastore/ ql/src/java/org/apache/hadoop/hive/ql/exec/ ql/src/java/org/apache/hadoop/hive/ql/parse/ ql/src/java/org/apache/hadoop/hive/ql/plan/ ql/src/test/queries/c...

Author: jvs
Date: Fri Jul 22 20:27:51 2011
New Revision: 1149727

URL: http://svn.apache.org/viewvc?rev=1149727&view=rev
Log:
HIVE-1078. CREATE VIEW followup: CREATE OR REPLACE (Charles Chen via jvs)


Added:
    hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view1.q
    hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view2.q
    hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view3.q
    hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view4.q
    hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view5.q
    hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view6.q
    hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view7.q
    hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view8.q
    hive/trunk/ql/src/test/queries/clientnegative/recursive_view.q
    hive/trunk/ql/src/test/queries/clientpositive/create_or_replace_view.q
    hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view1.q.out
    hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view2.q.out
    hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view3.q.out
    hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view4.q.out
    hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view5.q.out
    hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view6.q.out
    hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view7.q.out
    hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view8.q.out
    hive/trunk/ql/src/test/results/clientnegative/recursive_view.q.out
    hive/trunk/ql/src/test/results/clientpositive/create_or_replace_view.q.out
Modified:
    hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
    hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateViewDesc.java
    hive/trunk/ql/src/test/results/clientpositive/create_view.q.out

Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java?rev=1149727&r1=1149726&r2=1149727&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java Fri Jul 22 20:27:51 2011
@@ -30,9 +30,9 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.metastore.api.InvalidObjectException;
 import org.apache.hadoop.hive.metastore.api.InvalidOperationException;
 import org.apache.hadoop.hive.metastore.api.MetaException;
+import org.apache.hadoop.hive.metastore.api.NoSuchObjectException;
 import org.apache.hadoop.hive.metastore.api.Partition;
 import org.apache.hadoop.hive.metastore.api.Table;
-import org.apache.hadoop.hive.metastore.api.NoSuchObjectException;
 
 /**
  * Hive specific implementation of alter
@@ -97,11 +97,13 @@ public class HiveAlterHandler implements
             + newt.getTableName() + " doesn't exist");
       }
 
-      // check that partition keys have not changed
-      if (oldt.getPartitionKeys().size() != newt.getPartitionKeys().size()
-          || !oldt.getPartitionKeys().containsAll(newt.getPartitionKeys())) {
-        throw new InvalidOperationException(
-            "partition keys can not be changed.");
+      // check that partition keys have not changed, except for virtual views
+      if(!oldt.getTableType().equals(TableType.VIRTUAL_VIEW.toString())){
+        if (oldt.getPartitionKeys().size() != newt.getPartitionKeys().size()
+            || !oldt.getPartitionKeys().containsAll(newt.getPartitionKeys())) {
+          throw new InvalidOperationException(
+              "partition keys can not be changed.");
+        }
       }
 
       // if this alter is a rename, the table is not a virtual view, the user

Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java?rev=1149727&r1=1149726&r2=1149727&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java Fri Jul 22 20:27:51 2011
@@ -1664,6 +1664,8 @@ public class ObjectStore implements RawS
       oldt.setPartitionKeys(newt.getPartitionKeys());
       oldt.setTableType(newt.getTableType());
       oldt.setLastAccessTime(newt.getLastAccessTime());
+      oldt.setViewOriginalText(newt.getViewOriginalText());
+      oldt.setViewExpandedText(newt.getViewExpandedText());
 
       // commit the changes
       success = commitTransaction();

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java?rev=1149727&r1=1149726&r2=1149727&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java Fri Jul 22 20:27:51 2011
@@ -3369,31 +3369,70 @@ public class DDLTask extends Task<DDLWor
    *           Throws this exception if an unexpected error occurs.
    */
   private int createView(Hive db, CreateViewDesc crtView) throws HiveException {
-    Table tbl = db.newTable(crtView.getViewName());
-    tbl.setTableType(TableType.VIRTUAL_VIEW);
-    tbl.setSerializationLib(null);
-    tbl.clearSerDeInfo();
-    tbl.setViewOriginalText(crtView.getViewOriginalText());
-    tbl.setViewExpandedText(crtView.getViewExpandedText());
-    tbl.setFields(crtView.getSchema());
-    if (crtView.getComment() != null) {
-      tbl.setProperty("comment", crtView.getComment());
-    }
-    if (crtView.getTblProps() != null) {
-      tbl.getTTable().getParameters().putAll(crtView.getTblProps());
-    }
+    Table oldview = db.getTable(crtView.getViewName(), false);
+    if (crtView.getOrReplace() && oldview != null) {
+      // replace existing view
+      if (!oldview.getTableType().equals(TableType.VIRTUAL_VIEW)) {
+        throw new HiveException("Existing table is not a view");
+      }
+
+      if (crtView.getPartCols() == null
+          || crtView.getPartCols().isEmpty()
+          || !crtView.getPartCols().equals(oldview.getPartCols())) {
+        // if we are changing partition columns, check that partitions don't exist
+        if (!oldview.getPartCols().isEmpty() &&
+            !db.getPartitions(oldview).isEmpty()) {
+          throw new HiveException(
+              "Cannot add or drop partition columns with CREATE OR REPLACE VIEW if partitions currently exist");
+        }
+      }
+
+      // remove the existing partition columns from the field schema
+      oldview.setViewOriginalText(crtView.getViewOriginalText());
+      oldview.setViewExpandedText(crtView.getViewExpandedText());
+      oldview.setFields(crtView.getSchema());
+      if (crtView.getComment() != null) {
+        oldview.setProperty("comment", crtView.getComment());
+      }
+      if (crtView.getTblProps() != null) {
+        oldview.getTTable().getParameters().putAll(crtView.getTblProps());
+      }
+      oldview.setPartCols(crtView.getPartCols());
+      oldview.checkValidity();
+      try {
+        db.alterTable(crtView.getViewName(), oldview);
+      } catch (InvalidOperationException e) {
+        throw new HiveException(e);
+      }
+      work.getOutputs().add(new WriteEntity(oldview));
+    } else {
+      // create new view
+      Table tbl = db.newTable(crtView.getViewName());
+      tbl.setTableType(TableType.VIRTUAL_VIEW);
+      tbl.setSerializationLib(null);
+      tbl.clearSerDeInfo();
+      tbl.setViewOriginalText(crtView.getViewOriginalText());
+      tbl.setViewExpandedText(crtView.getViewExpandedText());
+      tbl.setFields(crtView.getSchema());
+      if (crtView.getComment() != null) {
+        tbl.setProperty("comment", crtView.getComment());
+      }
+      if (crtView.getTblProps() != null) {
+        tbl.getTTable().getParameters().putAll(crtView.getTblProps());
+      }
+
+      if (crtView.getPartCols() != null) {
+        tbl.setPartCols(crtView.getPartCols());
+      }
+
+      int rc = setGenericTableAttributes(tbl);
+      if (rc != 0) {
+        return rc;
+      }
 
-    if (crtView.getPartCols() != null) {
-      tbl.setPartCols(crtView.getPartCols());
+      db.createTable(tbl, crtView.getIfNotExists());
+      work.getOutputs().add(new WriteEntity(tbl));
     }
-
-    int rc = setGenericTableAttributes(tbl);
-    if (rc != 0) {
-      return rc;
-    }
-
-    db.createTable(tbl, crtView.getIfNotExists());
-    work.getOutputs().add(new WriteEntity(tbl));
     return 0;
   }
 

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g?rev=1149727&r1=1149726&r2=1149727&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g Fri Jul 22 20:27:51 2011
@@ -200,6 +200,7 @@ TOK_LIMIT;
 TOK_TABLEPROPERTY;
 TOK_IFEXISTS;
 TOK_IFNOTEXISTS;
+TOK_ORREPLACE;
 TOK_HINTLIST;
 TOK_HINT;
 TOK_MAPJOIN;
@@ -370,6 +371,13 @@ ifNotExists
     -> ^(TOK_IFNOTEXISTS)
     ;
 
+orReplace
+@init { msgs.push("or replace clause"); }
+@after { msgs.pop(); }
+    : KW_OR KW_REPLACE
+    -> ^(TOK_ORREPLACE)
+    ;
+
 
 createDatabaseStatement
 @init { msgs.push("create database statement"); }
@@ -997,12 +1005,13 @@ createViewStatement
     msgs.push("create view statement");
 }
 @after { msgs.pop(); }
-    : KW_CREATE KW_VIEW ifNotExists? name=tableName
+    : KW_CREATE (orReplace)? KW_VIEW (ifNotExists)? name=tableName
         (LPAREN columnNameCommentList RPAREN)? tableComment? viewPartition?
         tablePropertiesPrefixed?
         KW_AS
         selectStatement
-    -> ^(TOK_CREATEVIEW $name ifNotExists?
+    -> ^(TOK_CREATEVIEW $name orReplace?
+         ifNotExists?
          columnNameCommentList?
          tableComment?
          viewPartition?

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1149727&r1=1149726&r2=1149727&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Fri Jul 22 20:27:51 2011
@@ -195,6 +195,7 @@ public class SemanticAnalyzer extends Ba
   Map<String, PrunedPartitionList> prunedPartitions;
   private List<FieldSchema> resultSchema;
   private CreateViewDesc createVwDesc;
+  private ArrayList<String> viewsExpanded;
   private ASTNode viewSelect;
   private final UnparseTranslator unparseTranslator;
   private final GlobalLimitCtx globalLimitCtx = new GlobalLimitCtx();
@@ -873,6 +874,7 @@ public class SemanticAnalyzer extends Ba
       // We have to materialize the table alias list since we might
       // modify it in the middle for view rewrite.
       List<String> tabAliases = new ArrayList<String>(qb.getTabAliases());
+      Map<String, String> aliasToViewName = new HashMap<String, String>();
       for (String alias : tabAliases) {
         String tab_name = qb.getTabNameForAlias(alias);
         Table tab = null;
@@ -911,7 +913,15 @@ public class SemanticAnalyzer extends Ba
           if (qb.getParseInfo().isAnalyzeCommand()) {
             throw new SemanticException(ErrorMsg.ANALYZE_VIEW.getMsg());
           }
+          String fullViewName = tab.getDbName()+"."+tab.getTableName();
+          // Prevent view cycles
+          if(viewsExpanded.contains(fullViewName)){
+            throw new SemanticException("Recursive view " + fullViewName +
+                " detected (cycle: " + StringUtils.join(viewsExpanded, " -> ") +
+                " -> " + fullViewName + ").");
+          }
           replaceViewReferenceWithDefinition(qb, tab, tab_name, alias);
+          aliasToViewName.put(alias, fullViewName);
           continue;
         }
 
@@ -940,8 +950,15 @@ public class SemanticAnalyzer extends Ba
       LOG.info("Get metadata for subqueries");
       // Go over the subqueries and getMetaData for these
       for (String alias : qb.getSubqAliases()) {
+        boolean wasView = aliasToViewName.containsKey(alias);
+        if (wasView) {
+          viewsExpanded.add(aliasToViewName.get(alias));
+        }
         QBExpr qbexpr = qb.getSubqForAlias(alias);
         getMetaData(qbexpr);
+        if (wasView) {
+           viewsExpanded.remove(viewsExpanded.size()-1);
+        }
       }
 
       LOG.info("Get metadata for destination tables");
@@ -7124,6 +7141,7 @@ public class SemanticAnalyzer extends Ba
     this.qb = qb;
     this.ast = ast;
     ASTNode child = ast;
+    viewsExpanded = new ArrayList<String>();
 
     LOG.info("Starting Semantic Analysis");
 
@@ -7145,6 +7163,8 @@ public class SemanticAnalyzer extends Ba
         return;
       }
       viewSelect = child;
+      // prevent view from referencing itself
+      viewsExpanded.add(db.getCurrentDatabase()+"."+createVwDesc.getViewName());
     }
 
     // continue analyzing from the child ASTNode.
@@ -7778,6 +7798,7 @@ public class SemanticAnalyzer extends Ba
     String tableName = getUnescapedName((ASTNode)ast.getChild(0));
     List<FieldSchema> cols = null;
     boolean ifNotExists = false;
+    boolean orReplace = false;
     String comment = null;
     ASTNode selectStmt = null;
     Map<String, String> tblProps = null;
@@ -7792,6 +7813,9 @@ public class SemanticAnalyzer extends Ba
       case HiveParser.TOK_IFNOTEXISTS:
         ifNotExists = true;
         break;
+      case HiveParser.TOK_ORREPLACE:
+        orReplace = true;
+        break;
       case HiveParser.TOK_QUERY:
         selectStmt = child;
         break;
@@ -7812,8 +7836,12 @@ public class SemanticAnalyzer extends Ba
       }
     }
 
+    if (ifNotExists && orReplace){
+      throw new SemanticException("Can't combine IF NOT EXISTS and OR REPLACE.");
+    }
+
     createVwDesc = new CreateViewDesc(
-      tableName, cols, comment, tblProps, partColNames, ifNotExists);
+      tableName, cols, comment, tblProps, partColNames, ifNotExists, orReplace);
     unparseTranslator.enable();
     rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(),
         createVwDesc), conf));

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateViewDesc.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateViewDesc.java?rev=1149727&r1=1149726&r2=1149727&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateViewDesc.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateViewDesc.java Fri Jul 22 20:27:51 2011
@@ -42,22 +42,24 @@ public class CreateViewDesc extends DDLD
   private List<FieldSchema> partCols;
   private String comment;
   private boolean ifNotExists;
+  private boolean orReplace;
 
   /**
    * For serialization only.
    */
   public CreateViewDesc() {
   }
-  
+
   public CreateViewDesc(String viewName, List<FieldSchema> schema,
       String comment, Map<String, String> tblProps,
-      List<String> partColNames, boolean ifNotExists) {
+      List<String> partColNames, boolean ifNotExists, boolean orReplace) {
     this.viewName = viewName;
     this.schema = schema;
     this.comment = comment;
     this.tblProps = tblProps;
     this.partColNames = partColNames;
     this.ifNotExists = ifNotExists;
+    this.orReplace = orReplace;
   }
 
   @Explain(displayName = "name")
@@ -147,4 +149,13 @@ public class CreateViewDesc extends DDLD
   public void setIfNotExists(boolean ifNotExists) {
     this.ifNotExists = ifNotExists;
   }
+
+  @Explain(displayName = "or replace")
+  public boolean getOrReplace() {
+    return orReplace;
+  }
+
+  public void setOrReplace(boolean orReplace) {
+    this.orReplace = orReplace;
+  }
 }

Added: hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view1.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view1.q?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view1.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view1.q Fri Jul 22 20:27:51 2011
@@ -0,0 +1,6 @@
+-- Cannot add or drop partition columns with CREATE OR REPLACE VIEW if partitions currently exist (must specify partition columns)
+
+drop view v;
+create view v partitioned on (ds, hr) as select * from srcpart;
+alter view v add partition (ds='1',hr='2');
+create or replace view v as select * from srcpart;
\ No newline at end of file

Added: hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view2.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view2.q?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view2.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view2.q Fri Jul 22 20:27:51 2011
@@ -0,0 +1,6 @@
+-- Cannot add or drop partition columns with CREATE OR REPLACE VIEW if partitions currently exist
+
+drop view v;
+create view v partitioned on (ds, hr) as select * from srcpart;
+alter view v add partition (ds='1',hr='2');
+create or replace view v partitioned on (hr) as select * from srcpart;
\ No newline at end of file

Added: hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view3.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view3.q?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view3.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view3.q Fri Jul 22 20:27:51 2011
@@ -0,0 +1,3 @@
+-- Existing table is not a view
+
+create or replace view src as select ds, hr from srcpart;
\ No newline at end of file

Added: hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view4.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view4.q?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view4.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view4.q Fri Jul 22 20:27:51 2011
@@ -0,0 +1,5 @@
+-- View must have at least one non-partition column.
+
+drop view v;
+create view v partitioned on (ds, hr) as select * from srcpart;
+create or replace view v partitioned on (ds, hr) as select ds, hr from srcpart;
\ No newline at end of file

Added: hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view5.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view5.q?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view5.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view5.q Fri Jul 22 20:27:51 2011
@@ -0,0 +1,5 @@
+-- Can't combine IF NOT EXISTS and OR REPLACE.
+
+drop view v;
+create view v partitioned on (ds, hr) as select * from srcpart;
+create or replace view if not exists v as select * from srcpart;
\ No newline at end of file

Added: hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view6.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view6.q?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view6.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view6.q Fri Jul 22 20:27:51 2011
@@ -0,0 +1,5 @@
+-- Can't update view to have an invalid definition
+
+drop view v;
+create view v partitioned on (ds, hr) as select * from srcpart;
+create or replace view v partitioned on (ds, hr) as blah;
\ No newline at end of file

Added: hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view7.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view7.q?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view7.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view7.q Fri Jul 22 20:27:51 2011
@@ -0,0 +1,7 @@
+-- Can't update view to have a view cycle (1)
+
+drop view v;
+create view v1 partitioned on (ds, hr) as select * from srcpart;
+create view v2 partitioned on (ds, hr) as select * from v1;
+create view v3 partitioned on (ds, hr) as select * from v2;
+create or replace view v1 partitioned on (ds, hr) as select * from v3;
\ No newline at end of file

Added: hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view8.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view8.q?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view8.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/create_or_replace_view8.q Fri Jul 22 20:27:51 2011
@@ -0,0 +1,5 @@
+-- Can't update view to have a view cycle (2)
+
+drop view v;
+create view v1 partitioned on (ds, hr) as select * from srcpart;
+create or replace view v1 partitioned on (ds, hr) as select * from v1;
\ No newline at end of file

Added: hive/trunk/ql/src/test/queries/clientnegative/recursive_view.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/recursive_view.q?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/recursive_view.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/recursive_view.q Fri Jul 22 20:27:51 2011
@@ -0,0 +1,15 @@
+-- Can't have recursive views
+
+drop table t;
+drop view r0;
+drop view r1;
+drop view r2;
+drop view r3;
+create table t (id int);
+create view r0 as select * from t;
+create view r1 as select * from r0;
+create view r2 as select * from r1;
+create view r3 as select * from r2;
+drop view r0;
+alter view r3 rename to r0;
+select * from r0;
\ No newline at end of file

Added: hive/trunk/ql/src/test/queries/clientpositive/create_or_replace_view.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/create_or_replace_view.q?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/create_or_replace_view.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/create_or_replace_view.q Fri Jul 22 20:27:51 2011
@@ -0,0 +1,32 @@
+drop view v;
+create view v as select * from srcpart;
+describe formatted v;
+
+-- modifying definition of unpartitioned view
+create or replace view v partitioned on (ds, hr) as select * from srcpart;
+alter view v add partition (ds='2008-04-08',hr='11');
+alter view v add partition (ds='2008-04-08',hr='12');
+select * from v where value='val_409' and ds='2008-04-08' and hr='11';
+describe formatted v;
+show partitions v;
+
+-- altering partitioned view 1
+create or replace view v partitioned on (ds, hr) as select value, ds, hr from srcpart;
+select * from v where value='val_409' and ds='2008-04-08' and hr='11';
+describe formatted v;
+show partitions v;
+
+-- altering partitioned view 2
+create or replace view v partitioned on (ds, hr) as select key, value, ds, hr from srcpart;
+select * from v where value='val_409' and ds='2008-04-08' and hr='11';
+describe formatted v;
+show partitions v;
+drop view v;
+
+-- updating to fix view with invalid definition
+create table srcpart_temp like srcpart;
+create view v partitioned on (ds, hr) as select * from srcpart_temp;
+drop table srcpart_temp; -- v is now invalid
+create or replace view v partitioned on (ds, hr) as select * from srcpart;
+describe formatted v;
+drop view v;
\ No newline at end of file

Added: hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view1.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view1.q.out?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view1.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view1.q.out Fri Jul 22 20:27:51 2011
@@ -0,0 +1,27 @@
+PREHOOK: query: -- Cannot add or drop partition columns with CREATE OR REPLACE VIEW if partitions currently exist (must specify partition columns)
+
+drop view v
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: -- Cannot add or drop partition columns with CREATE OR REPLACE VIEW if partitions currently exist (must specify partition columns)
+
+drop view v
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: create view v partitioned on (ds, hr) as select * from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-36-03_886_5641638152163785475/-mr-10000
+POSTHOOK: query: create view v partitioned on (ds, hr) as select * from srcpart
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-36-03_886_5641638152163785475/-mr-10000
+PREHOOK: query: alter view v add partition (ds='1',hr='2')
+PREHOOK: type: QUERY
+PREHOOK: Input: default@v
+POSTHOOK: query: alter view v add partition (ds='1',hr='2')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@v
+POSTHOOK: Output: default@v@ds=1/hr=2
+PREHOOK: query: create or replace view v as select * from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-36-04_296_7084494219990814004/-mr-10000
+FAILED: Error in metadata: Cannot add or drop partition columns with CREATE OR REPLACE VIEW if partitions currently exist
+FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

Added: hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view2.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view2.q.out?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view2.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view2.q.out Fri Jul 22 20:27:51 2011
@@ -0,0 +1,27 @@
+PREHOOK: query: -- Cannot add or drop partition columns with CREATE OR REPLACE VIEW if partitions currently exist
+
+drop view v
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: -- Cannot add or drop partition columns with CREATE OR REPLACE VIEW if partitions currently exist
+
+drop view v
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: create view v partitioned on (ds, hr) as select * from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-36-58_232_8111009537092703310/-mr-10000
+POSTHOOK: query: create view v partitioned on (ds, hr) as select * from srcpart
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-36-58_232_8111009537092703310/-mr-10000
+PREHOOK: query: alter view v add partition (ds='1',hr='2')
+PREHOOK: type: QUERY
+PREHOOK: Input: default@v
+POSTHOOK: query: alter view v add partition (ds='1',hr='2')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@v
+POSTHOOK: Output: default@v@ds=1/hr=2
+PREHOOK: query: create or replace view v partitioned on (hr) as select * from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-36-58_637_5038612564681921162/-mr-10000
+FAILED: Error in metadata: Cannot add or drop partition columns with CREATE OR REPLACE VIEW if partitions currently exist
+FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

Added: hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view3.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view3.q.out?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view3.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view3.q.out Fri Jul 22 20:27:51 2011
@@ -0,0 +1,7 @@
+PREHOOK: query: -- Existing table is not a view
+
+create or replace view src as select ds, hr from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-12_14-24-14_494_6346712363261665506/-mr-10000
+FAILED: Error in metadata: Existing table is not a view
+FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

Added: hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view4.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view4.q.out?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view4.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view4.q.out Fri Jul 22 20:27:51 2011
@@ -0,0 +1,16 @@
+PREHOOK: query: -- View must have at least one non-partition column.
+
+drop view v
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: -- View must have at least one non-partition column.
+
+drop view v
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: create view v partitioned on (ds, hr) as select * from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-38-51_755_6211139129269008947/-mr-10000
+POSTHOOK: query: create view v partitioned on (ds, hr) as select * from srcpart
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-38-51_755_6211139129269008947/-mr-10000
+FAILED: Error in semantic analysis: At least one non-partitioning column must be present in view

Added: hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view5.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view5.q.out?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view5.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view5.q.out Fri Jul 22 20:27:51 2011
@@ -0,0 +1,16 @@
+PREHOOK: query: -- Can't combine IF NOT EXISTS and OR REPLACE.
+
+drop view v
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: -- Can't combine IF NOT EXISTS and OR REPLACE.
+
+drop view v
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: create view v partitioned on (ds, hr) as select * from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-58-18_909_5395846283955516132/-mr-10000
+POSTHOOK: query: create view v partitioned on (ds, hr) as select * from srcpart
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-58-18_909_5395846283955516132/-mr-10000
+FAILED: Error in semantic analysis: Can't combine IF NOT EXISTS and OR REPLACE.

Added: hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view6.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view6.q.out?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view6.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view6.q.out Fri Jul 22 20:27:51 2011
@@ -0,0 +1,17 @@
+PREHOOK: query: -- Can't update view to have an invalid definition
+
+drop view v
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: -- Can't update view to have an invalid definition
+
+drop view v
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: create view v partitioned on (ds, hr) as select * from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-49-23_584_6857578723636604615/-mr-10000
+POSTHOOK: query: create view v partitioned on (ds, hr) as select * from srcpart
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-49-23_584_6857578723636604615/-mr-10000
+FAILED: Parse Error: line 2:52 cannot recognize input near 'blah' '<EOF>' '<EOF>' in select clause
+

Added: hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view7.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view7.q.out?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view7.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view7.q.out Fri Jul 22 20:27:51 2011
@@ -0,0 +1,30 @@
+PREHOOK: query: -- Can't update view to have a view cycle (1)
+
+drop view v
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: -- Can't update view to have a view cycle (1)
+
+drop view v
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: create view v1 partitioned on (ds, hr) as select * from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-46-47_787_4485352366684181624/-mr-10000
+POSTHOOK: query: create view v1 partitioned on (ds, hr) as select * from srcpart
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v1
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-46-47_787_4485352366684181624/-mr-10000
+PREHOOK: query: create view v2 partitioned on (ds, hr) as select * from v1
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-46-47_909_4952186699150279004/-mr-10000
+POSTHOOK: query: create view v2 partitioned on (ds, hr) as select * from v1
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v2
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-46-47_909_4952186699150279004/-mr-10000
+PREHOOK: query: create view v3 partitioned on (ds, hr) as select * from v2
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-46-47_975_4372942609513647798/-mr-10000
+POSTHOOK: query: create view v3 partitioned on (ds, hr) as select * from v2
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v3
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-46-47_975_4372942609513647798/-mr-10000
+FAILED: Error in semantic analysis: Recursive view default.v1 detected (cycle: default.v1 -> default.v3 -> default.v2 -> default.v1).

Added: hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view8.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view8.q.out?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view8.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/create_or_replace_view8.q.out Fri Jul 22 20:27:51 2011
@@ -0,0 +1,16 @@
+PREHOOK: query: -- Can't update view to have a view cycle (2)
+
+drop view v
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: -- Can't update view to have a view cycle (2)
+
+drop view v
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: create view v1 partitioned on (ds, hr) as select * from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-50-57_412_8022807701594868191/-mr-10000
+POSTHOOK: query: create view v1 partitioned on (ds, hr) as select * from srcpart
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v1
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-50-57_412_8022807701594868191/-mr-10000
+FAILED: Error in semantic analysis: Recursive view default.v1 detected (cycle: default.v1 -> default.v1).

Added: hive/trunk/ql/src/test/results/clientnegative/recursive_view.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/recursive_view.q.out?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/recursive_view.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/recursive_view.q.out Fri Jul 22 20:27:51 2011
@@ -0,0 +1,75 @@
+PREHOOK: query: -- Can't have recursive views
+
+drop table t
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: -- Can't have recursive views
+
+drop table t
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: drop view r0
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: drop view r0
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: drop view r1
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: drop view r1
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: drop view r2
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: drop view r2
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: drop view r3
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: drop view r3
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: create table t (id int)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: create table t (id int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@t
+PREHOOK: query: create view r0 as select * from t
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-54-15_540_6566370266979262341/-mr-10000
+POSTHOOK: query: create view r0 as select * from t
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@r0
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-54-15_540_6566370266979262341/-mr-10000
+PREHOOK: query: create view r1 as select * from r0
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-54-15_655_2871063901925263573/-mr-10000
+POSTHOOK: query: create view r1 as select * from r0
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@r1
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-54-15_655_2871063901925263573/-mr-10000
+PREHOOK: query: create view r2 as select * from r1
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-54-15_725_1778414341481263154/-mr-10000
+POSTHOOK: query: create view r2 as select * from r1
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@r2
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-54-15_725_1778414341481263154/-mr-10000
+PREHOOK: query: create view r3 as select * from r2
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-54-15_781_5124084914591950233/-mr-10000
+POSTHOOK: query: create view r3 as select * from r2
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@r3
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-20_10-54-15_781_5124084914591950233/-mr-10000
+PREHOOK: query: drop view r0
+PREHOOK: type: DROPVIEW
+PREHOOK: Input: default@r0
+PREHOOK: Output: default@r0
+POSTHOOK: query: drop view r0
+POSTHOOK: type: DROPVIEW
+POSTHOOK: Input: default@r0
+POSTHOOK: Output: default@r0
+PREHOOK: query: alter view r3 rename to r0
+PREHOOK: type: null
+PREHOOK: Input: default@r3
+PREHOOK: Output: default@r3
+POSTHOOK: query: alter view r3 rename to r0
+POSTHOOK: type: null
+POSTHOOK: Input: default@r3
+POSTHOOK: Output: default@r0
+POSTHOOK: Output: default@r3
+FAILED: Error in semantic analysis: Recursive view default.r0 detected (cycle: default.r0 -> default.r2 -> default.r1 -> default.r0).

Added: hive/trunk/ql/src/test/results/clientpositive/create_or_replace_view.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/create_or_replace_view.q.out?rev=1149727&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/create_or_replace_view.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/create_or_replace_view.q.out Fri Jul 22 20:27:51 2011
@@ -0,0 +1,339 @@
+PREHOOK: query: drop view v
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: drop view v
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: create view v as select * from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-34-54_878_6732266159103898080/-mr-10000
+POSTHOOK: query: create view v as select * from srcpart
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-34-54_878_6732266159103898080/-mr-10000
+PREHOOK: query: describe formatted v
+PREHOOK: type: DESCTABLE
+POSTHOOK: query: describe formatted v
+POSTHOOK: type: DESCTABLE
+# col_name            	data_type           	comment             
+	 	 
+key                 	string              	None                
+value               	string              	None                
+ds                  	string              	None                
+hr                  	string              	None                
+	 	 
+# Detailed Table Information	 	 
+Database:           	default             	 
+Owner:              	charleschen         	 
+CreateTime:         	Tue Jul 19 17:34:54 PDT 2011	 
+LastAccessTime:     	UNKNOWN             	 
+Protect Mode:       	None                	 
+Retention:          	0                   	 
+Table Type:         	VIRTUAL_VIEW        	 
+Table Parameters:	 	 
+	transient_lastDdlTime	1311122094          
+	 	 
+# Storage Information	 	 
+SerDe Library:      	null                	 
+InputFormat:        	org.apache.hadoop.mapred.SequenceFileInputFormat	 
+OutputFormat:       	org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat	 
+Compressed:         	No                  	 
+Num Buckets:        	-1                  	 
+Bucket Columns:     	[]                  	 
+Sort Columns:       	[]                  	 
+	 	 
+# View Information	 	 
+View Original Text: 	select * from srcpart	 
+View Expanded Text: 	select `srcpart`.`key`, `srcpart`.`value`, `srcpart`.`ds`, `srcpart`.`hr` from `srcpart`	 
+PREHOOK: query: -- modifying definition of unpartitioned view
+create or replace view v partitioned on (ds, hr) as select * from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-34-55_095_6852446605722181312/-mr-10000
+POSTHOOK: query: -- modifying definition of unpartitioned view
+create or replace view v partitioned on (ds, hr) as select * from srcpart
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-34-55_095_6852446605722181312/-mr-10000
+PREHOOK: query: alter view v add partition (ds='2008-04-08',hr='11')
+PREHOOK: type: QUERY
+PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=11
+PREHOOK: Input: default@v
+POSTHOOK: query: alter view v add partition (ds='2008-04-08',hr='11')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@srcpart@ds=2008-04-08/hr=11
+POSTHOOK: Input: default@v
+POSTHOOK: Output: default@v@ds=2008-04-08/hr=11
+PREHOOK: query: alter view v add partition (ds='2008-04-08',hr='12')
+PREHOOK: type: QUERY
+PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=12
+PREHOOK: Input: default@v
+POSTHOOK: query: alter view v add partition (ds='2008-04-08',hr='12')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@srcpart@ds=2008-04-08/hr=12
+POSTHOOK: Input: default@v
+POSTHOOK: Output: default@v@ds=2008-04-08/hr=12
+PREHOOK: query: select * from v where value='val_409' and ds='2008-04-08' and hr='11'
+PREHOOK: type: QUERY
+PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=11
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-34-55_760_500788128633787119/-mr-10000
+POSTHOOK: query: select * from v where value='val_409' and ds='2008-04-08' and hr='11'
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@srcpart@ds=2008-04-08/hr=11
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-34-55_760_500788128633787119/-mr-10000
+409	val_409	2008-04-08	11
+409	val_409	2008-04-08	11
+409	val_409	2008-04-08	11
+PREHOOK: query: describe formatted v
+PREHOOK: type: DESCTABLE
+POSTHOOK: query: describe formatted v
+POSTHOOK: type: DESCTABLE
+# col_name            	data_type           	comment             
+	 	 
+key                 	string              	None                
+value               	string              	None                
+	 	 
+# Partition Information	 	 
+# col_name            	data_type           	comment             
+	 	 
+ds                  	string              	None                
+hr                  	string              	None                
+	 	 
+# Detailed Table Information	 	 
+Database:           	default             	 
+Owner:              	charleschen         	 
+CreateTime:         	Tue Jul 19 17:34:54 PDT 2011	 
+LastAccessTime:     	UNKNOWN             	 
+Protect Mode:       	None                	 
+Retention:          	0                   	 
+Table Type:         	VIRTUAL_VIEW        	 
+Table Parameters:	 	 
+	transient_lastDdlTime	1311122095          
+	 	 
+# Storage Information	 	 
+SerDe Library:      	null                	 
+InputFormat:        	org.apache.hadoop.mapred.SequenceFileInputFormat	 
+OutputFormat:       	org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat	 
+Compressed:         	No                  	 
+Num Buckets:        	-1                  	 
+Bucket Columns:     	[]                  	 
+Sort Columns:       	[]                  	 
+	 	 
+# View Information	 	 
+View Original Text: 	select * from srcpart	 
+View Expanded Text: 	select `srcpart`.`key`, `srcpart`.`value`, `srcpart`.`ds`, `srcpart`.`hr` from `srcpart`	 
+PREHOOK: query: show partitions v
+PREHOOK: type: SHOWPARTITIONS
+POSTHOOK: query: show partitions v
+POSTHOOK: type: SHOWPARTITIONS
+ds=2008-04-08/hr=11
+ds=2008-04-08/hr=12
+PREHOOK: query: -- altering partitioned view 1
+create or replace view v partitioned on (ds, hr) as select value, ds, hr from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-35-01_367_3079170845179274932/-mr-10000
+POSTHOOK: query: -- altering partitioned view 1
+create or replace view v partitioned on (ds, hr) as select value, ds, hr from srcpart
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-35-01_367_3079170845179274932/-mr-10000
+PREHOOK: query: select * from v where value='val_409' and ds='2008-04-08' and hr='11'
+PREHOOK: type: QUERY
+PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=11
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-35-01_478_4136837350460982570/-mr-10000
+POSTHOOK: query: select * from v where value='val_409' and ds='2008-04-08' and hr='11'
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@srcpart@ds=2008-04-08/hr=11
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-35-01_478_4136837350460982570/-mr-10000
+val_409	2008-04-08	11
+val_409	2008-04-08	11
+val_409	2008-04-08	11
+PREHOOK: query: describe formatted v
+PREHOOK: type: DESCTABLE
+POSTHOOK: query: describe formatted v
+POSTHOOK: type: DESCTABLE
+# col_name            	data_type           	comment             
+	 	 
+value               	string              	None                
+	 	 
+# Partition Information	 	 
+# col_name            	data_type           	comment             
+	 	 
+ds                  	string              	None                
+hr                  	string              	None                
+	 	 
+# Detailed Table Information	 	 
+Database:           	default             	 
+Owner:              	charleschen         	 
+CreateTime:         	Tue Jul 19 17:34:54 PDT 2011	 
+LastAccessTime:     	UNKNOWN             	 
+Protect Mode:       	None                	 
+Retention:          	0                   	 
+Table Type:         	VIRTUAL_VIEW        	 
+Table Parameters:	 	 
+	transient_lastDdlTime	1311122101          
+	 	 
+# Storage Information	 	 
+SerDe Library:      	null                	 
+InputFormat:        	org.apache.hadoop.mapred.SequenceFileInputFormat	 
+OutputFormat:       	org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat	 
+Compressed:         	No                  	 
+Num Buckets:        	-1                  	 
+Bucket Columns:     	[]                  	 
+Sort Columns:       	[]                  	 
+	 	 
+# View Information	 	 
+View Original Text: 	select value, ds, hr from srcpart	 
+View Expanded Text: 	select `srcpart`.`value`, `srcpart`.`ds`, `srcpart`.`hr` from `srcpart`	 
+PREHOOK: query: show partitions v
+PREHOOK: type: SHOWPARTITIONS
+POSTHOOK: query: show partitions v
+POSTHOOK: type: SHOWPARTITIONS
+ds=2008-04-08/hr=11
+ds=2008-04-08/hr=12
+PREHOOK: query: -- altering partitioned view 2
+create or replace view v partitioned on (ds, hr) as select key, value, ds, hr from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-35-06_293_404398995477036687/-mr-10000
+POSTHOOK: query: -- altering partitioned view 2
+create or replace view v partitioned on (ds, hr) as select key, value, ds, hr from srcpart
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-35-06_293_404398995477036687/-mr-10000
+PREHOOK: query: select * from v where value='val_409' and ds='2008-04-08' and hr='11'
+PREHOOK: type: QUERY
+PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=11
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-35-06_369_6280534937916662695/-mr-10000
+POSTHOOK: query: select * from v where value='val_409' and ds='2008-04-08' and hr='11'
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@srcpart@ds=2008-04-08/hr=11
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-35-06_369_6280534937916662695/-mr-10000
+409	val_409	2008-04-08	11
+409	val_409	2008-04-08	11
+409	val_409	2008-04-08	11
+PREHOOK: query: describe formatted v
+PREHOOK: type: DESCTABLE
+POSTHOOK: query: describe formatted v
+POSTHOOK: type: DESCTABLE
+# col_name            	data_type           	comment             
+	 	 
+key                 	string              	None                
+value               	string              	None                
+	 	 
+# Partition Information	 	 
+# col_name            	data_type           	comment             
+	 	 
+ds                  	string              	None                
+hr                  	string              	None                
+	 	 
+# Detailed Table Information	 	 
+Database:           	default             	 
+Owner:              	charleschen         	 
+CreateTime:         	Tue Jul 19 17:34:54 PDT 2011	 
+LastAccessTime:     	UNKNOWN             	 
+Protect Mode:       	None                	 
+Retention:          	0                   	 
+Table Type:         	VIRTUAL_VIEW        	 
+Table Parameters:	 	 
+	transient_lastDdlTime	1311122106          
+	 	 
+# Storage Information	 	 
+SerDe Library:      	null                	 
+InputFormat:        	org.apache.hadoop.mapred.SequenceFileInputFormat	 
+OutputFormat:       	org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat	 
+Compressed:         	No                  	 
+Num Buckets:        	-1                  	 
+Bucket Columns:     	[]                  	 
+Sort Columns:       	[]                  	 
+	 	 
+# View Information	 	 
+View Original Text: 	select key, value, ds, hr from srcpart	 
+View Expanded Text: 	select `srcpart`.`key`, `srcpart`.`value`, `srcpart`.`ds`, `srcpart`.`hr` from `srcpart`	 
+PREHOOK: query: show partitions v
+PREHOOK: type: SHOWPARTITIONS
+POSTHOOK: query: show partitions v
+POSTHOOK: type: SHOWPARTITIONS
+ds=2008-04-08/hr=11
+ds=2008-04-08/hr=12
+PREHOOK: query: drop view v
+PREHOOK: type: DROPVIEW
+PREHOOK: Input: default@v
+PREHOOK: Output: default@v
+POSTHOOK: query: drop view v
+POSTHOOK: type: DROPVIEW
+POSTHOOK: Input: default@v
+POSTHOOK: Output: default@v
+PREHOOK: query: -- updating to fix view with invalid definition
+create table srcpart_temp like srcpart
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: -- updating to fix view with invalid definition
+create table srcpart_temp like srcpart
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@srcpart_temp
+PREHOOK: query: create view v partitioned on (ds, hr) as select * from srcpart_temp
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-35-11_359_8793253638417040051/-mr-10000
+POSTHOOK: query: create view v partitioned on (ds, hr) as select * from srcpart_temp
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-35-11_359_8793253638417040051/-mr-10000
+PREHOOK: query: drop table srcpart_temp
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@srcpart_temp
+PREHOOK: Output: default@srcpart_temp
+POSTHOOK: query: drop table srcpart_temp
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@srcpart_temp
+POSTHOOK: Output: default@srcpart_temp
+PREHOOK: query: -- v is now invalid
+create or replace view v partitioned on (ds, hr) as select * from srcpart
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-35-11_545_8300926509521526863/-mr-10000
+POSTHOOK: query: -- v is now invalid
+create or replace view v partitioned on (ds, hr) as select * from srcpart
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@v
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-19_17-35-11_545_8300926509521526863/-mr-10000
+PREHOOK: query: describe formatted v
+PREHOOK: type: DESCTABLE
+POSTHOOK: query: describe formatted v
+POSTHOOK: type: DESCTABLE
+# col_name            	data_type           	comment             
+	 	 
+key                 	string              	None                
+value               	string              	None                
+	 	 
+# Partition Information	 	 
+# col_name            	data_type           	comment             
+	 	 
+ds                  	string              	None                
+hr                  	string              	None                
+	 	 
+# Detailed Table Information	 	 
+Database:           	default             	 
+Owner:              	charleschen         	 
+CreateTime:         	Tue Jul 19 17:35:11 PDT 2011	 
+LastAccessTime:     	UNKNOWN             	 
+Protect Mode:       	None                	 
+Retention:          	0                   	 
+Table Type:         	VIRTUAL_VIEW        	 
+Table Parameters:	 	 
+	transient_lastDdlTime	1311122111          
+	 	 
+# Storage Information	 	 
+SerDe Library:      	null                	 
+InputFormat:        	org.apache.hadoop.mapred.SequenceFileInputFormat	 
+OutputFormat:       	org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat	 
+Compressed:         	No                  	 
+Num Buckets:        	-1                  	 
+Bucket Columns:     	[]                  	 
+Sort Columns:       	[]                  	 
+	 	 
+# View Information	 	 
+View Original Text: 	select * from srcpart	 
+View Expanded Text: 	select `srcpart`.`key`, `srcpart`.`value`, `srcpart`.`ds`, `srcpart`.`hr` from `srcpart`	 
+PREHOOK: query: drop view v
+PREHOOK: type: DROPVIEW
+PREHOOK: Input: default@v
+PREHOOK: Output: default@v
+POSTHOOK: query: drop view v
+POSTHOOK: type: DROPVIEW
+POSTHOOK: Input: default@v
+POSTHOOK: Output: default@v