You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by na...@apache.org on 2012/12/24 09:40:58 UTC
svn commit: r1425604 - in /hive/trunk/ql/src:
java/org/apache/hadoop/hive/ql/ java/org/apache/hadoop/hive/ql/exec/
java/org/apache/hadoop/hive/ql/parse/ java/org/apache/hadoop/hive/ql/plan/
test/queries/clientnegative/ test/queries/clientpositive/ test...
Author: namit
Date: Mon Dec 24 08:40:58 2012
New Revision: 1425604
URL: http://svn.apache.org/viewvc?rev=1425604&view=rev
Log:
HIVE-3829 Hive CLI needs UNSET TBLPROPERTY command
(Zhenxiao Luo via namit)
Added:
hive/trunk/ql/src/test/queries/clientnegative/set_table_property.q
hive/trunk/ql/src/test/queries/clientnegative/unset_table_property.q
hive/trunk/ql/src/test/queries/clientnegative/unset_view_property.q
hive/trunk/ql/src/test/queries/clientpositive/unset_table_view_property.q
hive/trunk/ql/src/test/results/clientnegative/set_table_property.q.out
hive/trunk/ql/src/test/results/clientnegative/unset_table_property.q.out
hive/trunk/ql/src/test/results/clientnegative/unset_view_property.q.out
hive/trunk/ql/src/test/results/clientpositive/unset_table_view_property.q.out
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.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/BaseSemanticAnalyzer.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.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/SemanticAnalyzerFactory.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java?rev=1425604&r1=1425603&r2=1425604&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java Mon Dec 24 08:40:58 2012
@@ -291,6 +291,10 @@ public enum ErrorMsg {
HIVE_GROUPING_SETS_EXPR_NOT_IN_GROUPBY(10213,
"Grouping sets expression is not in GROUP BY key"),
INVALID_PARTITION_SPEC(10214, "Invalid partition spec specified"),
+ ALTER_TBL_UNSET_NON_EXIST_PROPERTY(10215,
+ "Please use the following syntax if not sure " +
+ "whether the property existed or not:\n" +
+ "ALTER TABLE tableName UNSET TBLPROPERTIES IF EXISTS (key1, key2, ...)\n"),
SCRIPT_INIT_ERROR(20000, "Unable to initialize custom script."),
SCRIPT_IO_ERROR(20001, "An error occurred while reading or writing to your custom script. "
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=1425604&r1=1425603&r2=1425604&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 Mon Dec 24 08:40:58 2012
@@ -3082,6 +3082,11 @@ public class DDLTask extends Task<DDLWor
tbl.getTTable().getSd().setCols(alterTbl.getNewCols());
} else if (alterTbl.getOp() == AlterTableDesc.AlterTableTypes.ADDPROPS) {
tbl.getTTable().getParameters().putAll(alterTbl.getProps());
+ } else if (alterTbl.getOp() == AlterTableDesc.AlterTableTypes.DROPPROPS) {
+ Iterator<String> keyItr = alterTbl.getProps().keySet().iterator();
+ while (keyItr.hasNext()) {
+ tbl.getTTable().getParameters().remove(keyItr.next());
+ }
} else if (alterTbl.getOp() == AlterTableDesc.AlterTableTypes.ADDSERDEPROPS) {
if (part != null) {
part.getTPartition().getSd().getSerdeInfo().getParameters().putAll(
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java?rev=1425604&r1=1425603&r2=1425604&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java Mon Dec 24 08:40:58 2012
@@ -399,8 +399,10 @@ public abstract class BaseSemanticAnalyz
for (int propChild = 0; propChild < prop.getChildCount(); propChild++) {
String key = unescapeSQLString(prop.getChild(propChild).getChild(0)
.getText());
- String value = unescapeSQLString(prop.getChild(propChild).getChild(1)
- .getText());
+ String value = null;
+ if (prop.getChild(propChild).getChild(1) != null) {
+ value = unescapeSQLString(prop.getChild(propChild).getChild(1).getText());
+ }
mapProp.put(key, value);
}
}
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java?rev=1425604&r1=1425603&r2=1425604&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java Mon Dec 24 08:40:58 2012
@@ -275,7 +275,10 @@ public class DDLSemanticAnalyzer extends
analyzeDropTable(ast, true);
break;
case HiveParser.TOK_ALTERVIEW_PROPERTIES:
- analyzeAlterTableProps(ast, true);
+ analyzeAlterTableProps(ast, true, false);
+ break;
+ case HiveParser.TOK_DROPVIEW_PROPERTIES:
+ analyzeAlterTableProps(ast, true, true);
break;
case HiveParser.TOK_ALTERVIEW_ADDPARTS:
// for ALTER VIEW ADD PARTITION, we wrapped the ADD to discriminate
@@ -320,7 +323,10 @@ public class DDLSemanticAnalyzer extends
analyzeAlterTableDropParts(ast, false);
break;
case HiveParser.TOK_ALTERTABLE_PROPERTIES:
- analyzeAlterTableProps(ast, false);
+ analyzeAlterTableProps(ast, false, false);
+ break;
+ case HiveParser.TOK_DROPTABLE_PROPERTIES:
+ analyzeAlterTableProps(ast, false, true);
break;
case HiveParser.TOK_ALTERTABLE_CLUSTER_SORT:
analyzeAlterTableClusterSort(ast);
@@ -962,6 +968,7 @@ public class DDLSemanticAnalyzer extends
case DROPPARTITION:
case RENAMEPARTITION:
case ADDPROPS:
+ case DROPPROPS:
case RENAME:
// allow this form
break;
@@ -978,14 +985,21 @@ public class DDLSemanticAnalyzer extends
}
}
- private void analyzeAlterTableProps(ASTNode ast, boolean expectView)
+ private void analyzeAlterTableProps(ASTNode ast, boolean expectView, boolean isUnset)
throws SemanticException {
String tableName = getUnescapedName((ASTNode) ast.getChild(0));
HashMap<String, String> mapProp = getProps((ASTNode) (ast.getChild(1))
.getChild(0));
- AlterTableDesc alterTblDesc =
- new AlterTableDesc(AlterTableTypes.ADDPROPS, expectView);
+ AlterTableDesc alterTblDesc = null;
+ if (isUnset == true) {
+ alterTblDesc = new AlterTableDesc(AlterTableTypes.DROPPROPS, expectView);
+ if (ast.getChild(2) != null) {
+ alterTblDesc.setDropIfExists(true);
+ }
+ } else {
+ alterTblDesc = new AlterTableDesc(AlterTableTypes.ADDPROPS, expectView);
+ }
alterTblDesc.setProps(mapProp);
alterTblDesc.setOldName(tableName);
@@ -1127,6 +1141,22 @@ public class DDLSemanticAnalyzer extends
if (desc != null) {
validateAlterTableType(tab, desc.getOp(), desc.getExpectView());
+
+ // validate Unset Non Existed Table Properties
+ if (desc.getOp() == AlterTableDesc.AlterTableTypes.DROPPROPS &&
+ desc.getIsDropIfExists() == false) {
+ Iterator<String> keyItr = desc.getProps().keySet().iterator();
+ while (keyItr.hasNext()) {
+ String currKey = keyItr.next();
+ if (tab.getTTable().getParameters().containsKey(currKey) == false) {
+ String errorMsg =
+ "The following property " + currKey +
+ " does not exist in " + tab.getTableName();
+ throw new SemanticException(
+ ErrorMsg.ALTER_TBL_UNSET_NON_EXIST_PROPERTY.getMsg(errorMsg));
+ }
+ }
+ }
}
}
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=1425604&r1=1425603&r2=1425604&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 Mon Dec 24 08:40:58 2012
@@ -119,6 +119,7 @@ TOK_CREATEINDEX;
TOK_CREATEINDEX_INDEXTBLNAME;
TOK_DEFERRED_REBUILDINDEX;
TOK_DROPINDEX;
+TOK_DROPTABLE_PROPERTIES;
TOK_LIKETABLE;
TOK_DESCTABLE;
TOK_DESCFUNCTION;
@@ -199,6 +200,7 @@ TOK_DROPFUNCTION;
TOK_CREATEVIEW;
TOK_DROPVIEW;
TOK_ALTERVIEW_PROPERTIES;
+TOK_DROPVIEW_PROPERTIES;
TOK_ALTERVIEW_ADDPARTS;
TOK_ALTERVIEW_DROPPARTS;
TOK_ALTERVIEW_RENAME;
@@ -733,6 +735,8 @@ alterStatementSuffixProperties
@after { msgs.pop(); }
: name=Identifier KW_SET KW_TBLPROPERTIES tableProperties
-> ^(TOK_ALTERTABLE_PROPERTIES $name tableProperties)
+ | name=Identifier KW_UNSET KW_TBLPROPERTIES ifExists? tableProperties
+ -> ^(TOK_DROPTABLE_PROPERTIES $name tableProperties ifExists?)
;
alterViewSuffixProperties
@@ -740,6 +744,8 @@ alterViewSuffixProperties
@after { msgs.pop(); }
: name=Identifier KW_SET KW_TBLPROPERTIES tableProperties
-> ^(TOK_ALTERVIEW_PROPERTIES $name tableProperties)
+ | name=Identifier KW_UNSET KW_TBLPROPERTIES ifExists? tableProperties
+ -> ^(TOK_DROPVIEW_PROPERTIES $name tableProperties ifExists?)
;
alterStatementSuffixSerdeProperties
@@ -1253,6 +1259,8 @@ tablePropertiesList
@after { msgs.pop(); }
:
keyValueProperty (COMMA keyValueProperty)* -> ^(TOK_TABLEPROPLIST keyValueProperty+)
+ |
+ keyProperty (COMMA keyProperty)* -> ^(TOK_TABLEPROPLIST keyProperty+)
;
keyValueProperty
@@ -1262,6 +1270,13 @@ keyValueProperty
key=StringLiteral EQUAL value=StringLiteral -> ^(TOK_TABLEPROPERTY $key $value)
;
+keyProperty
+@init { msgs.push("specifying key property"); }
+@after { msgs.pop(); }
+ :
+ key=StringLiteral -> ^(TOK_TABLEPROPERTY $key TOK_NULL)
+ ;
+
tableRowFormatFieldIdentifier
@init { msgs.push("table row format's field separator"); }
@after { msgs.pop(); }
@@ -2499,6 +2514,7 @@ KW_SERDEPROPERTIES: 'SERDEPROPERTIES';
KW_DBPROPERTIES: 'DBPROPERTIES';
KW_LIMIT: 'LIMIT';
KW_SET: 'SET';
+KW_UNSET: 'UNSET';
KW_TBLPROPERTIES: 'TBLPROPERTIES';
KW_IDXPROPERTIES: 'IDXPROPERTIES';
KW_VALUE_TYPE: '$VALUE$';
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java?rev=1425604&r1=1425603&r2=1425604&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java Mon Dec 24 08:40:58 2012
@@ -56,6 +56,7 @@ public final class SemanticAnalyzerFacto
commandType.put(HiveParser.TOK_ALTERTABLE_ARCHIVE, HiveOperation.ALTERTABLE_ARCHIVE);
commandType.put(HiveParser.TOK_ALTERTABLE_UNARCHIVE, HiveOperation.ALTERTABLE_UNARCHIVE);
commandType.put(HiveParser.TOK_ALTERTABLE_PROPERTIES, HiveOperation.ALTERTABLE_PROPERTIES);
+ commandType.put(HiveParser.TOK_DROPTABLE_PROPERTIES, HiveOperation.ALTERTABLE_PROPERTIES);
commandType.put(HiveParser.TOK_ALTERTABLE_CLUSTER_SORT, HiveOperation.ALTERTABLE_CLUSTER_SORT);
commandType.put(HiveParser.TOK_SHOWDATABASES, HiveOperation.SHOWDATABASES);
commandType.put(HiveParser.TOK_SHOWTABLES, HiveOperation.SHOWTABLES);
@@ -76,6 +77,7 @@ public final class SemanticAnalyzerFacto
commandType.put(HiveParser.TOK_ALTERINDEX_REBUILD, HiveOperation.ALTERINDEX_REBUILD);
commandType.put(HiveParser.TOK_ALTERINDEX_PROPERTIES, HiveOperation.ALTERINDEX_PROPS);
commandType.put(HiveParser.TOK_ALTERVIEW_PROPERTIES, HiveOperation.ALTERVIEW_PROPERTIES);
+ commandType.put(HiveParser.TOK_DROPVIEW_PROPERTIES, HiveOperation.ALTERVIEW_PROPERTIES);
commandType.put(HiveParser.TOK_ALTERVIEW_ADDPARTS, HiveOperation.ALTERTABLE_ADDPARTS);
commandType.put(HiveParser.TOK_ALTERVIEW_DROPPARTS, HiveOperation.ALTERTABLE_DROPPARTS);
commandType.put(HiveParser.TOK_QUERY, HiveOperation.QUERY);
@@ -157,11 +159,13 @@ public final class SemanticAnalyzerFacto
case HiveParser.TOK_ALTERTABLE_DROPPARTS:
case HiveParser.TOK_ALTERTABLE_ADDPARTS:
case HiveParser.TOK_ALTERTABLE_PROPERTIES:
+ case HiveParser.TOK_DROPTABLE_PROPERTIES:
case HiveParser.TOK_ALTERTABLE_SERIALIZER:
case HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES:
case HiveParser.TOK_ALTERINDEX_REBUILD:
case HiveParser.TOK_ALTERINDEX_PROPERTIES:
case HiveParser.TOK_ALTERVIEW_PROPERTIES:
+ case HiveParser.TOK_DROPVIEW_PROPERTIES:
case HiveParser.TOK_ALTERVIEW_ADDPARTS:
case HiveParser.TOK_ALTERVIEW_DROPPARTS:
case HiveParser.TOK_ALTERVIEW_RENAME:
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java?rev=1425604&r1=1425603&r2=1425604&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java Mon Dec 24 08:40:58 2012
@@ -44,7 +44,7 @@ public class AlterTableDesc extends DDLD
*
*/
public static enum AlterTableTypes {
- RENAME, ADDCOLS, REPLACECOLS, ADDPROPS, ADDSERDE, ADDSERDEPROPS,
+ RENAME, ADDCOLS, REPLACECOLS, ADDPROPS, DROPPROPS, ADDSERDE, ADDSERDEPROPS,
ADDFILEFORMAT, ADDCLUSTERSORTCOLUMN, RENAMECOLUMN, ADDPARTITION,
TOUCH, ARCHIVE, UNARCHIVE, ALTERPROTECTMODE, ALTERPARTITIONPROTECTMODE,
ALTERLOCATION, DROPPARTITION, RENAMEPARTITION, ADDSKEWEDBY, ALTERSKEWEDLOCATION,
@@ -86,6 +86,7 @@ public class AlterTableDesc extends DDLD
List<String> skewedColNames;
List<List<String>> skewedColValues;
Table table;
+ boolean isDropIfExists = false;
public AlterTableDesc() {
}
@@ -671,4 +672,18 @@ public class AlterTableDesc extends DDLD
this.isStoredAsSubDirectories = isStoredAsSubDirectories;
}
+ /**
+ * @param isDropIfExists the isDropIfExists to set
+ */
+ public void setDropIfExists(boolean isDropIfExists) {
+ this.isDropIfExists = isDropIfExists;
+ }
+
+ /**
+ * @return isDropIfExists
+ */
+ public boolean getIsDropIfExists() {
+ return isDropIfExists;
+ }
+
}
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java?rev=1425604&r1=1425603&r2=1425604&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java Mon Dec 24 08:40:58 2012
@@ -72,6 +72,7 @@ public enum HiveOperation {
DROPINDEX("DROPINDEX", null, null),
ALTERINDEX_REBUILD("ALTERINDEX_REBUILD", null, null),
ALTERVIEW_PROPERTIES("ALTERVIEW_PROPERTIES", null, null),
+ DROPVIEW_PROPERTIES("DROPVIEW_PROPERTIES", null, null),
LOCKTABLE("LOCKTABLE", new Privilege[]{Privilege.LOCK}, null),
UNLOCKTABLE("UNLOCKTABLE", new Privilege[]{Privilege.LOCK}, null),
CREATEROLE("CREATEROLE", null, null),
Added: hive/trunk/ql/src/test/queries/clientnegative/set_table_property.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/set_table_property.q?rev=1425604&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/set_table_property.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/set_table_property.q Mon Dec 24 08:40:58 2012
@@ -0,0 +1,4 @@
+create table testTable(col1 int, col2 int);
+
+-- set a table property = null, it should be caught by the grammar
+alter table testTable set tblproperties ('a'=);
Added: hive/trunk/ql/src/test/queries/clientnegative/unset_table_property.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/unset_table_property.q?rev=1425604&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/unset_table_property.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/unset_table_property.q Mon Dec 24 08:40:58 2012
@@ -0,0 +1,6 @@
+CREATE TABLE testTable(col1 INT, col2 INT);
+ALTER TABLE testTable SET TBLPROPERTIES ('a'='1', 'c'='3');
+SHOW TBLPROPERTIES testTable;
+
+-- unset a subset of the properties and some non-existed properties without if exists
+ALTER TABLE testTable UNSET TBLPROPERTIES ('c', 'x', 'y', 'z');
Added: hive/trunk/ql/src/test/queries/clientnegative/unset_view_property.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/unset_view_property.q?rev=1425604&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/unset_view_property.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/unset_view_property.q Mon Dec 24 08:40:58 2012
@@ -0,0 +1,6 @@
+CREATE VIEW testView AS SELECT value FROM src WHERE key=86;
+ALTER VIEW testView SET TBLPROPERTIES ('propA'='100', 'propB'='200');
+SHOW TBLPROPERTIES testView;
+
+-- unset a subset of the properties and some non-existed properties without if exists
+ALTER VIEW testView UNSET TBLPROPERTIES ('propB', 'propX', 'propY', 'propZ');
Added: hive/trunk/ql/src/test/queries/clientpositive/unset_table_view_property.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/unset_table_view_property.q?rev=1425604&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/unset_table_view_property.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/unset_table_view_property.q Mon Dec 24 08:40:58 2012
@@ -0,0 +1,64 @@
+CREATE TABLE testTable(col1 INT, col2 INT);
+SHOW TBLPROPERTIES testTable;
+
+-- UNSET TABLE PROPERTIES
+ALTER TABLE testTable SET TBLPROPERTIES ('a'='1', 'c'='3');
+SHOW TBLPROPERTIES testTable;
+
+-- UNSET all the properties
+ALTER TABLE testTable UNSET TBLPROPERTIES ('a', 'c');
+SHOW TBLPROPERTIES testTable;
+
+ALTER TABLE testTable SET TBLPROPERTIES ('a'='1', 'c'='3', 'd'='4');
+SHOW TBLPROPERTIES testTable;
+
+-- UNSET a subset of the properties
+ALTER TABLE testTable UNSET TBLPROPERTIES ('a', 'd');
+SHOW TBLPROPERTIES testTable;
+
+-- the same property being UNSET multiple times
+ALTER TABLE testTable UNSET TBLPROPERTIES ('c', 'c', 'c');
+SHOW TBLPROPERTIES testTable;
+
+ALTER TABLE testTable SET TBLPROPERTIES ('a'='1', 'b' = '2', 'c'='3', 'd'='4');
+SHOW TBLPROPERTIES testTable;
+
+-- UNSET a subset of the properties and some non-existed properties using IF EXISTS
+ALTER TABLE testTable UNSET TBLPROPERTIES IF EXISTS ('b', 'd', 'b', 'f');
+SHOW TBLPROPERTIES testTable;
+
+-- UNSET a subset of the properties and some non-existed properties using IF EXISTS
+ALTER TABLE testTable UNSET TBLPROPERTIES IF EXISTS ('b', 'd', 'c', 'f', 'x', 'y', 'z');
+SHOW TBLPROPERTIES testTable;
+
+-- UNSET VIEW PROPERTIES
+CREATE VIEW testView AS SELECT value FROM src WHERE key=86;
+ALTER VIEW testView SET TBLPROPERTIES ('propA'='100', 'propB'='200');
+SHOW TBLPROPERTIES testView;
+
+-- UNSET all the properties
+ALTER VIEW testView UNSET TBLPROPERTIES ('propA', 'propB');
+SHOW TBLPROPERTIES testView;
+
+ALTER VIEW testView SET TBLPROPERTIES ('propA'='100', 'propC'='300', 'propD'='400');
+SHOW TBLPROPERTIES testView;
+
+-- UNSET a subset of the properties
+ALTER VIEW testView UNSET TBLPROPERTIES ('propA', 'propC');
+SHOW TBLPROPERTIES testView;
+
+-- the same property being UNSET multiple times
+ALTER VIEW testView UNSET TBLPROPERTIES ('propD', 'propD', 'propD');
+SHOW TBLPROPERTIES testView;
+
+ALTER VIEW testView SET TBLPROPERTIES ('propA'='100', 'propB' = '200', 'propC'='300', 'propD'='400');
+SHOW TBLPROPERTIES testView;
+
+-- UNSET a subset of the properties and some non-existed properties using IF EXISTS
+ALTER VIEW testView UNSET TBLPROPERTIES IF EXISTS ('propC', 'propD', 'propD', 'propC', 'propZ');
+SHOW TBLPROPERTIES testView;
+
+-- UNSET a subset of the properties and some non-existed properties using IF EXISTS
+ALTER VIEW testView UNSET TBLPROPERTIES IF EXISTS ('propB', 'propC', 'propD', 'propF');
+SHOW TBLPROPERTIES testView;
+
Added: hive/trunk/ql/src/test/results/clientnegative/set_table_property.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/set_table_property.q.out?rev=1425604&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/set_table_property.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/set_table_property.q.out Mon Dec 24 08:40:58 2012
@@ -0,0 +1,7 @@
+PREHOOK: query: create table testTable(col1 int, col2 int)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: create table testTable(col1 int, col2 int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@testTable
+FAILED: ParseException line 4:45 mismatched input ')' expecting StringLiteral near '=' in specifying key/value property
+
Added: hive/trunk/ql/src/test/results/clientnegative/unset_table_property.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/unset_table_property.q.out?rev=1425604&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/unset_table_property.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/unset_table_property.q.out Mon Dec 24 08:40:58 2012
@@ -0,0 +1,26 @@
+PREHOOK: query: CREATE TABLE testTable(col1 INT, col2 INT)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: CREATE TABLE testTable(col1 INT, col2 INT)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@testTable
+PREHOOK: query: ALTER TABLE testTable SET TBLPROPERTIES ('a'='1', 'c'='3')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@testtable
+PREHOOK: Output: default@testtable
+POSTHOOK: query: ALTER TABLE testTable SET TBLPROPERTIES ('a'='1', 'c'='3')
+POSTHOOK: type: ALTERTABLE_PROPERTIES
+POSTHOOK: Input: default@testtable
+POSTHOOK: Output: default@testtable
+PREHOOK: query: SHOW TBLPROPERTIES testTable
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testTable
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+c 3
+#### A masked pattern was here ####
+a 1
+#### A masked pattern was here ####
+FAILED: SemanticException [Error 10215]: Please use the following syntax if not sure whether the property existed or not:
+ALTER TABLE tableName UNSET TBLPROPERTIES IF EXISTS (key1, key2, ...)
+ The following property z does not exist in testtable
Added: hive/trunk/ql/src/test/results/clientnegative/unset_view_property.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/unset_view_property.q.out?rev=1425604&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/unset_view_property.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/unset_view_property.q.out Mon Dec 24 08:40:58 2012
@@ -0,0 +1,27 @@
+PREHOOK: query: CREATE VIEW testView AS SELECT value FROM src WHERE key=86
+PREHOOK: type: CREATEVIEW
+#### A masked pattern was here ####
+POSTHOOK: query: CREATE VIEW testView AS SELECT value FROM src WHERE key=86
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@testView
+#### A masked pattern was here ####
+PREHOOK: query: ALTER VIEW testView SET TBLPROPERTIES ('propA'='100', 'propB'='200')
+PREHOOK: type: ALTERVIEW_PROPERTIES
+PREHOOK: Input: default@testview
+PREHOOK: Output: default@testview
+POSTHOOK: query: ALTER VIEW testView SET TBLPROPERTIES ('propA'='100', 'propB'='200')
+POSTHOOK: type: ALTERVIEW_PROPERTIES
+POSTHOOK: Input: default@testview
+POSTHOOK: Output: default@testview
+PREHOOK: query: SHOW TBLPROPERTIES testView
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testView
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+propA 100
+propB 200
+#### A masked pattern was here ####
+FAILED: SemanticException [Error 10215]: Please use the following syntax if not sure whether the property existed or not:
+ALTER TABLE tableName UNSET TBLPROPERTIES IF EXISTS (key1, key2, ...)
+ The following property propX does not exist in testview
Added: hive/trunk/ql/src/test/results/clientpositive/unset_table_view_property.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/unset_table_view_property.q.out?rev=1425604&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/unset_table_view_property.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/unset_table_view_property.q.out Mon Dec 24 08:40:58 2012
@@ -0,0 +1,307 @@
+PREHOOK: query: CREATE TABLE testTable(col1 INT, col2 INT)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: CREATE TABLE testTable(col1 INT, col2 INT)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@testTable
+PREHOOK: query: SHOW TBLPROPERTIES testTable
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testTable
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+PREHOOK: query: -- UNSET TABLE PROPERTIES
+ALTER TABLE testTable SET TBLPROPERTIES ('a'='1', 'c'='3')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@testtable
+PREHOOK: Output: default@testtable
+POSTHOOK: query: -- UNSET TABLE PROPERTIES
+ALTER TABLE testTable SET TBLPROPERTIES ('a'='1', 'c'='3')
+POSTHOOK: type: ALTERTABLE_PROPERTIES
+POSTHOOK: Input: default@testtable
+POSTHOOK: Output: default@testtable
+PREHOOK: query: SHOW TBLPROPERTIES testTable
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testTable
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+c 3
+#### A masked pattern was here ####
+a 1
+#### A masked pattern was here ####
+PREHOOK: query: -- UNSET all the properties
+ALTER TABLE testTable UNSET TBLPROPERTIES ('a', 'c')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@testtable
+PREHOOK: Output: default@testtable
+POSTHOOK: query: -- UNSET all the properties
+ALTER TABLE testTable UNSET TBLPROPERTIES ('a', 'c')
+POSTHOOK: type: ALTERTABLE_PROPERTIES
+POSTHOOK: Input: default@testtable
+POSTHOOK: Output: default@testtable
+PREHOOK: query: SHOW TBLPROPERTIES testTable
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testTable
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+PREHOOK: query: ALTER TABLE testTable SET TBLPROPERTIES ('a'='1', 'c'='3', 'd'='4')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@testtable
+PREHOOK: Output: default@testtable
+POSTHOOK: query: ALTER TABLE testTable SET TBLPROPERTIES ('a'='1', 'c'='3', 'd'='4')
+POSTHOOK: type: ALTERTABLE_PROPERTIES
+POSTHOOK: Input: default@testtable
+POSTHOOK: Output: default@testtable
+PREHOOK: query: SHOW TBLPROPERTIES testTable
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testTable
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+d 4
+#### A masked pattern was here ####
+c 3
+#### A masked pattern was here ####
+a 1
+#### A masked pattern was here ####
+PREHOOK: query: -- UNSET a subset of the properties
+ALTER TABLE testTable UNSET TBLPROPERTIES ('a', 'd')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@testtable
+PREHOOK: Output: default@testtable
+POSTHOOK: query: -- UNSET a subset of the properties
+ALTER TABLE testTable UNSET TBLPROPERTIES ('a', 'd')
+POSTHOOK: type: ALTERTABLE_PROPERTIES
+POSTHOOK: Input: default@testtable
+POSTHOOK: Output: default@testtable
+PREHOOK: query: SHOW TBLPROPERTIES testTable
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testTable
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+c 3
+#### A masked pattern was here ####
+PREHOOK: query: -- the same property being UNSET multiple times
+ALTER TABLE testTable UNSET TBLPROPERTIES ('c', 'c', 'c')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@testtable
+PREHOOK: Output: default@testtable
+POSTHOOK: query: -- the same property being UNSET multiple times
+ALTER TABLE testTable UNSET TBLPROPERTIES ('c', 'c', 'c')
+POSTHOOK: type: ALTERTABLE_PROPERTIES
+POSTHOOK: Input: default@testtable
+POSTHOOK: Output: default@testtable
+PREHOOK: query: SHOW TBLPROPERTIES testTable
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testTable
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+PREHOOK: query: ALTER TABLE testTable SET TBLPROPERTIES ('a'='1', 'b' = '2', 'c'='3', 'd'='4')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@testtable
+PREHOOK: Output: default@testtable
+POSTHOOK: query: ALTER TABLE testTable SET TBLPROPERTIES ('a'='1', 'b' = '2', 'c'='3', 'd'='4')
+POSTHOOK: type: ALTERTABLE_PROPERTIES
+POSTHOOK: Input: default@testtable
+POSTHOOK: Output: default@testtable
+PREHOOK: query: SHOW TBLPROPERTIES testTable
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testTable
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+d 4
+#### A masked pattern was here ####
+b 2
+c 3
+#### A masked pattern was here ####
+a 1
+#### A masked pattern was here ####
+PREHOOK: query: -- UNSET a subset of the properties and some non-existed properties using IF EXISTS
+ALTER TABLE testTable UNSET TBLPROPERTIES IF EXISTS ('b', 'd', 'b', 'f')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@testtable
+PREHOOK: Output: default@testtable
+POSTHOOK: query: -- UNSET a subset of the properties and some non-existed properties using IF EXISTS
+ALTER TABLE testTable UNSET TBLPROPERTIES IF EXISTS ('b', 'd', 'b', 'f')
+POSTHOOK: type: ALTERTABLE_PROPERTIES
+POSTHOOK: Input: default@testtable
+POSTHOOK: Output: default@testtable
+PREHOOK: query: SHOW TBLPROPERTIES testTable
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testTable
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+c 3
+#### A masked pattern was here ####
+a 1
+#### A masked pattern was here ####
+PREHOOK: query: -- UNSET a subset of the properties and some non-existed properties using IF EXISTS
+ALTER TABLE testTable UNSET TBLPROPERTIES IF EXISTS ('b', 'd', 'c', 'f', 'x', 'y', 'z')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@testtable
+PREHOOK: Output: default@testtable
+POSTHOOK: query: -- UNSET a subset of the properties and some non-existed properties using IF EXISTS
+ALTER TABLE testTable UNSET TBLPROPERTIES IF EXISTS ('b', 'd', 'c', 'f', 'x', 'y', 'z')
+POSTHOOK: type: ALTERTABLE_PROPERTIES
+POSTHOOK: Input: default@testtable
+POSTHOOK: Output: default@testtable
+PREHOOK: query: SHOW TBLPROPERTIES testTable
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testTable
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+a 1
+#### A masked pattern was here ####
+PREHOOK: query: -- UNSET VIEW PROPERTIES
+CREATE VIEW testView AS SELECT value FROM src WHERE key=86
+PREHOOK: type: CREATEVIEW
+#### A masked pattern was here ####
+POSTHOOK: query: -- UNSET VIEW PROPERTIES
+CREATE VIEW testView AS SELECT value FROM src WHERE key=86
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@testView
+#### A masked pattern was here ####
+PREHOOK: query: ALTER VIEW testView SET TBLPROPERTIES ('propA'='100', 'propB'='200')
+PREHOOK: type: ALTERVIEW_PROPERTIES
+PREHOOK: Input: default@testview
+PREHOOK: Output: default@testview
+POSTHOOK: query: ALTER VIEW testView SET TBLPROPERTIES ('propA'='100', 'propB'='200')
+POSTHOOK: type: ALTERVIEW_PROPERTIES
+POSTHOOK: Input: default@testview
+POSTHOOK: Output: default@testview
+PREHOOK: query: SHOW TBLPROPERTIES testView
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testView
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+propA 100
+propB 200
+#### A masked pattern was here ####
+PREHOOK: query: -- UNSET all the properties
+ALTER VIEW testView UNSET TBLPROPERTIES ('propA', 'propB')
+PREHOOK: type: ALTERVIEW_PROPERTIES
+PREHOOK: Input: default@testview
+PREHOOK: Output: default@testview
+POSTHOOK: query: -- UNSET all the properties
+ALTER VIEW testView UNSET TBLPROPERTIES ('propA', 'propB')
+POSTHOOK: type: ALTERVIEW_PROPERTIES
+POSTHOOK: Input: default@testview
+POSTHOOK: Output: default@testview
+PREHOOK: query: SHOW TBLPROPERTIES testView
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testView
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+PREHOOK: query: ALTER VIEW testView SET TBLPROPERTIES ('propA'='100', 'propC'='300', 'propD'='400')
+PREHOOK: type: ALTERVIEW_PROPERTIES
+PREHOOK: Input: default@testview
+PREHOOK: Output: default@testview
+POSTHOOK: query: ALTER VIEW testView SET TBLPROPERTIES ('propA'='100', 'propC'='300', 'propD'='400')
+POSTHOOK: type: ALTERVIEW_PROPERTIES
+POSTHOOK: Input: default@testview
+POSTHOOK: Output: default@testview
+PREHOOK: query: SHOW TBLPROPERTIES testView
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testView
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+propA 100
+#### A masked pattern was here ####
+propD 400
+propC 300
+PREHOOK: query: -- UNSET a subset of the properties
+ALTER VIEW testView UNSET TBLPROPERTIES ('propA', 'propC')
+PREHOOK: type: ALTERVIEW_PROPERTIES
+PREHOOK: Input: default@testview
+PREHOOK: Output: default@testview
+POSTHOOK: query: -- UNSET a subset of the properties
+ALTER VIEW testView UNSET TBLPROPERTIES ('propA', 'propC')
+POSTHOOK: type: ALTERVIEW_PROPERTIES
+POSTHOOK: Input: default@testview
+POSTHOOK: Output: default@testview
+PREHOOK: query: SHOW TBLPROPERTIES testView
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testView
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+propD 400
+PREHOOK: query: -- the same property being UNSET multiple times
+ALTER VIEW testView UNSET TBLPROPERTIES ('propD', 'propD', 'propD')
+PREHOOK: type: ALTERVIEW_PROPERTIES
+PREHOOK: Input: default@testview
+PREHOOK: Output: default@testview
+POSTHOOK: query: -- the same property being UNSET multiple times
+ALTER VIEW testView UNSET TBLPROPERTIES ('propD', 'propD', 'propD')
+POSTHOOK: type: ALTERVIEW_PROPERTIES
+POSTHOOK: Input: default@testview
+POSTHOOK: Output: default@testview
+PREHOOK: query: SHOW TBLPROPERTIES testView
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testView
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+PREHOOK: query: ALTER VIEW testView SET TBLPROPERTIES ('propA'='100', 'propB' = '200', 'propC'='300', 'propD'='400')
+PREHOOK: type: ALTERVIEW_PROPERTIES
+PREHOOK: Input: default@testview
+PREHOOK: Output: default@testview
+POSTHOOK: query: ALTER VIEW testView SET TBLPROPERTIES ('propA'='100', 'propB' = '200', 'propC'='300', 'propD'='400')
+POSTHOOK: type: ALTERVIEW_PROPERTIES
+POSTHOOK: Input: default@testview
+POSTHOOK: Output: default@testview
+PREHOOK: query: SHOW TBLPROPERTIES testView
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testView
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+propA 100
+propB 200
+#### A masked pattern was here ####
+propD 400
+propC 300
+PREHOOK: query: -- UNSET a subset of the properties and some non-existed properties using IF EXISTS
+ALTER VIEW testView UNSET TBLPROPERTIES IF EXISTS ('propC', 'propD', 'propD', 'propC', 'propZ')
+PREHOOK: type: ALTERVIEW_PROPERTIES
+PREHOOK: Input: default@testview
+PREHOOK: Output: default@testview
+POSTHOOK: query: -- UNSET a subset of the properties and some non-existed properties using IF EXISTS
+ALTER VIEW testView UNSET TBLPROPERTIES IF EXISTS ('propC', 'propD', 'propD', 'propC', 'propZ')
+POSTHOOK: type: ALTERVIEW_PROPERTIES
+POSTHOOK: Input: default@testview
+POSTHOOK: Output: default@testview
+PREHOOK: query: SHOW TBLPROPERTIES testView
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testView
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+propA 100
+propB 200
+#### A masked pattern was here ####
+PREHOOK: query: -- UNSET a subset of the properties and some non-existed properties using IF EXISTS
+ALTER VIEW testView UNSET TBLPROPERTIES IF EXISTS ('propB', 'propC', 'propD', 'propF')
+PREHOOK: type: ALTERVIEW_PROPERTIES
+PREHOOK: Input: default@testview
+PREHOOK: Output: default@testview
+POSTHOOK: query: -- UNSET a subset of the properties and some non-existed properties using IF EXISTS
+ALTER VIEW testView UNSET TBLPROPERTIES IF EXISTS ('propB', 'propC', 'propD', 'propF')
+POSTHOOK: type: ALTERVIEW_PROPERTIES
+POSTHOOK: Input: default@testview
+POSTHOOK: Output: default@testview
+PREHOOK: query: SHOW TBLPROPERTIES testView
+PREHOOK: type: SHOW_TBLPROPERTIES
+POSTHOOK: query: SHOW TBLPROPERTIES testView
+POSTHOOK: type: SHOW_TBLPROPERTIES
+
+#### A masked pattern was here ####
+propA 100
+#### A masked pattern was here ####