You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by kw...@apache.org on 2016/09/30 02:15:06 UTC

[49/61] [partial] incubator-impala git commit: IMPALA-3786: Replace "cloudera" with "apache" (part 1)

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/b544f019/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetCachedStmt.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetCachedStmt.java b/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetCachedStmt.java
deleted file mode 100644
index f63cf3e..0000000
--- a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetCachedStmt.java
+++ /dev/null
@@ -1,92 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloudera.impala.analysis;
-
-import com.cloudera.impala.catalog.HdfsTable;
-import com.cloudera.impala.catalog.HdfsPartition;
-import com.cloudera.impala.catalog.Table;
-import com.cloudera.impala.common.AnalysisException;
-import com.cloudera.impala.thrift.TAlterTableParams;
-import com.cloudera.impala.thrift.TAlterTableSetCachedParams;
-import com.cloudera.impala.thrift.TAlterTableType;
-import com.google.common.base.Preconditions;
-
-/**
- * Represents an ALTER TABLE [PARTITION partitionSpec] SET [UNCACHED|CACHED 'pool'].
- */
-public class AlterTableSetCachedStmt extends AlterTableSetStmt {
-  private final HdfsCachingOp cacheOp_;
-
-  public AlterTableSetCachedStmt(TableName tableName,
-      PartitionSpec partitionSpec, HdfsCachingOp cacheOp) {
-    super(tableName, partitionSpec);
-    Preconditions.checkNotNull(cacheOp);
-    cacheOp_ = cacheOp;
-  }
-
-  @Override
-  public TAlterTableParams toThrift() {
-    TAlterTableParams params = super.toThrift();
-    params.setAlter_type(TAlterTableType.SET_CACHED);
-    TAlterTableSetCachedParams cachingParams =
-        new TAlterTableSetCachedParams();
-    if (getPartitionSpec() != null) {
-      cachingParams.setPartition_spec(getPartitionSpec().toThrift());
-    }
-    cachingParams.setCache_op(cacheOp_.toThrift());
-    params.setSet_cached_params(cachingParams);
-    return params;
-  }
-
-  @Override
-  public void analyze(Analyzer analyzer) throws AnalysisException {
-    super.analyze(analyzer);
-    cacheOp_.analyze(analyzer);
-
-    Table table = getTargetTable();
-    Preconditions.checkNotNull(table);
-    if (!(table instanceof HdfsTable)) {
-      throw new AnalysisException("ALTER TABLE SET [CACHED|UNCACHED] must target an " +
-          "HDFS table: " + table.getFullName());
-    }
-
-    if (cacheOp_.shouldCache()) {
-      boolean isCacheable;
-      PartitionSpec partSpec = getPartitionSpec();
-      HdfsTable hdfsTable = (HdfsTable)table;
-      StringBuilder nameSb = new StringBuilder();
-      if (partSpec != null) {
-        HdfsPartition part = hdfsTable.getPartition(partSpec.getPartitionSpecKeyValues());
-        if (part == null) {
-          throw new AnalysisException("Partition spec does not exist: " +
-              partSpec.toSql());
-        }
-        isCacheable = part.isCacheable();
-        nameSb.append("Partition (" + part.getPartitionName() + ")");
-      } else {
-        isCacheable = hdfsTable.isCacheable();
-        nameSb.append("Table ").append(table.getFullName());
-      }
-      if (!isCacheable) {
-        throw new AnalysisException(nameSb.toString() + " cannot be cached. Please " +
-            "check if the table or partitions are on a filesystem which supports " +
-            "caching.");
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/b544f019/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetColumnStats.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetColumnStats.java b/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetColumnStats.java
deleted file mode 100644
index e9c9a14..0000000
--- a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetColumnStats.java
+++ /dev/null
@@ -1,158 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloudera.impala.analysis;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.cloudera.impala.catalog.Column;
-import com.cloudera.impala.catalog.ColumnStats;
-import com.cloudera.impala.common.AnalysisException;
-import com.cloudera.impala.thrift.TAlterTableParams;
-import com.cloudera.impala.thrift.TAlterTableType;
-import com.cloudera.impala.thrift.TAlterTableUpdateStatsParams;
-import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
-
-/**
-* Represents an ALTER TABLE [<dbName>.]<tableName> SET COLUMN STATS <colName>
-* ('statsKey'='val','statsKey2',='val2') statement.
-*
-* The keys as well as the values are specified as string literals to be consistent
-* with the existing DDL for setting TBLPROPERTIES/SERDEPROPERTIES, in particular,
-* setting the 'numRows' table/partition property.
-*
-* Stats key comparisons are case-insensitive.
-*/
-public class AlterTableSetColumnStats extends AlterTableStmt {
-  private final String colName_;
-  private final HashMap<String, String> statsMap_;
-
-  // Complete column stats reflecting this alteration. Existing stats values
-  // are preserved. Result of analysis.
-  private ColumnStats colStats_;
-
-  public AlterTableSetColumnStats(TableName tableName, String colName,
-      HashMap<String, String> statsMap) {
-    super(tableName);
-    colName_ = colName;
-    statsMap_ = statsMap;
-  }
-
-  @Override
-  public void analyze(Analyzer analyzer) throws AnalysisException {
-    super.analyze(analyzer);
-
-    Column col = getTargetTable().getColumn(colName_);
-    if (col == null) {
-      throw new AnalysisException(
-          String.format("Column '%s' does not exist in table: %s",
-              colName_, getTargetTable().getFullName()));
-    }
-    // Cannot update stats on partition columns because the HMS has no entries
-    // for them, and the stats can be computed directly from the metadata.
-    if (col.getPosition() < getTargetTable().getNumClusteringCols()) {
-      throw new AnalysisException(
-          "Updating the stats of a partition column is not allowed: " + colName_);
-    }
-    // Cannot update the stats if they are not supported for the column's type.
-    if (!ColumnStats.isSupportedColType(col.getType())) {
-      throw new AnalysisException(String.format(
-          "Statistics for column '%s' are not supported because " +
-          "it has type '%s'.", col.getName(), col.getType().toSql()));
-    }
-
-    // Copy the existing stats and then change the values according to the
-    // stats map of this stmt. The existing stats are first copied to preserve
-    // those stats values that are not changed by this stmt because all stats
-    // values are updated when altering the stats in the HMS.
-    colStats_ = col.getStats().clone();
-    for (Map.Entry<String, String> entry: statsMap_.entrySet()) {
-      ColumnStats.StatsKey statsKey = ColumnStats.StatsKey.fromString(entry.getKey());
-      if (statsKey == null) {
-        throw new AnalysisException(String.format(
-            "Invalid column stats key: %s\nValid keys are: %s",
-            entry.getKey(), Joiner.on(',').join(ColumnStats.StatsKey.values())));
-      }
-      setStatsValue(statsKey, entry.getValue(), col, colStats_);
-    }
-  }
-
-  /**
-   * Updates the given column stats based on statsKey and statsValue.
-   * Throws an AnalysisException if the statsValue is invalid or not applicable to the
-   * column (e.g., trying to update the avg/max size of a fixed-length column).
-   */
-  private void setStatsValue(ColumnStats.StatsKey statsKey, String statsValue,
-      Column col, ColumnStats stats) throws AnalysisException {
-    // Updating max/avg size is only allowed for variable length columns.
-    if (col.getType().isFixedLengthType()
-        && (statsKey == ColumnStats.StatsKey.AVG_SIZE
-            || statsKey == ColumnStats.StatsKey.MAX_SIZE)) {
-      throw new AnalysisException(String.format(
-          "Cannot update the '%s' stats of column '%s' with type '%s'.\n" +
-          "Changing '%s' is only allowed for variable-length columns.",
-          statsKey, col.getName(), col.getType().toSql(), statsKey));
-    }
-
-    if (statsKey == ColumnStats.StatsKey.NUM_DISTINCT_VALUES ||
-        statsKey == ColumnStats.StatsKey.NUM_NULLS ||
-        statsKey == ColumnStats.StatsKey.MAX_SIZE) {
-      Long statsVal = null;
-      try {
-        statsVal = Long.parseLong(statsValue);
-      } catch (Exception e) {
-      }
-      if (statsVal == null || statsVal < -1) {
-        throw new AnalysisException(String.format(
-            "Invalid stats value '%s' for column stats key: %s\n" +
-            "Expected a positive integer or -1 for unknown.",
-            statsValue, statsKey));
-      }
-      stats.update(statsKey, statsVal);
-    } else if (statsKey == ColumnStats.StatsKey.AVG_SIZE) {
-      Float statsVal = null;
-      try {
-        statsVal = Float.parseFloat(statsValue);
-      } catch (Exception e) {
-      }
-      if (statsVal == null || (statsVal < 0 && statsVal != -1) ||
-          statsVal.isNaN() || statsVal.isInfinite()) {
-        throw new AnalysisException(String.format(
-            "Invalid stats value '%s' for column stats key: %s\n" +
-            "Expected a positive floating-point number or -1 for unknown.",
-            statsValue, statsKey));
-      }
-      stats.update(statsKey, statsVal);
-    } else {
-      Preconditions.checkState(false, "Unhandled StatsKey value: " + statsKey);
-    }
-  }
-
-  @Override
-  public TAlterTableParams toThrift() {
-   TAlterTableParams params = super.toThrift();
-   params.setAlter_type(TAlterTableType.UPDATE_STATS);
-   TAlterTableUpdateStatsParams updateStatsParams =
-       new TAlterTableUpdateStatsParams();
-   updateStatsParams.setTable_name(getTargetTable().getTableName().toThrift());
-   updateStatsParams.putToColumn_stats(colName_.toString(), colStats_.toThrift());
-   params.setUpdate_stats_params(updateStatsParams);
-   return params;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/b544f019/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetFileFormatStmt.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetFileFormatStmt.java b/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetFileFormatStmt.java
deleted file mode 100644
index 7e18aa6..0000000
--- a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetFileFormatStmt.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloudera.impala.analysis;
-
-import com.cloudera.impala.common.AnalysisException;
-import com.cloudera.impala.thrift.TAlterTableParams;
-import com.cloudera.impala.thrift.TAlterTableSetFileFormatParams;
-import com.cloudera.impala.thrift.TAlterTableType;
-import com.cloudera.impala.thrift.THdfsFileFormat;
-
-/**
- * Represents an ALTER TABLE [PARTITION partitionSpec] SET FILEFORMAT statement.
- */
-public class AlterTableSetFileFormatStmt extends AlterTableSetStmt {
-  private final THdfsFileFormat fileFormat_;
-
-  public AlterTableSetFileFormatStmt(TableName tableName,
-      PartitionSpec partitionSpec, THdfsFileFormat fileFormat) {
-    super(tableName, partitionSpec);
-    this.fileFormat_ = fileFormat;
-  }
-
-  public THdfsFileFormat getFileFormat() { return fileFormat_; }
-
-  @Override
-  public TAlterTableParams toThrift() {
-    TAlterTableParams params = super.toThrift();
-    params.setAlter_type(TAlterTableType.SET_FILE_FORMAT);
-    TAlterTableSetFileFormatParams fileFormatParams =
-        new TAlterTableSetFileFormatParams(fileFormat_);
-    if (getPartitionSpec() != null) {
-      fileFormatParams.setPartition_spec(getPartitionSpec().toThrift());
-    }
-    params.setSet_file_format_params(fileFormatParams);
-    return params;
-  }
-
-  @Override
-  public void analyze(Analyzer analyzer) throws AnalysisException {
-    super.analyze(analyzer);
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/b544f019/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetLocationStmt.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetLocationStmt.java b/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetLocationStmt.java
deleted file mode 100644
index fcc9b53..0000000
--- a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetLocationStmt.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloudera.impala.analysis;
-
-import com.cloudera.impala.authorization.Privilege;
-import com.cloudera.impala.catalog.HdfsPartition;
-import com.cloudera.impala.catalog.HdfsTable;
-import com.cloudera.impala.catalog.Table;
-import com.cloudera.impala.common.AnalysisException;
-import com.cloudera.impala.thrift.TAlterTableParams;
-import com.cloudera.impala.thrift.TAlterTableSetLocationParams;
-import com.cloudera.impala.thrift.TAlterTableType;
-import com.google.common.base.Preconditions;
-import org.apache.hadoop.fs.permission.FsAction;
-
-/**
- * Represents an ALTER TABLE [PARTITION partitionSpec] SET LOCATION statement.
- */
-public class AlterTableSetLocationStmt extends AlterTableSetStmt {
-  private final HdfsUri location_;
-
-  public AlterTableSetLocationStmt(TableName tableName,
-      PartitionSpec partitionSpec, HdfsUri location) {
-    super(tableName, partitionSpec);
-    Preconditions.checkNotNull(location);
-    this.location_ = location;
-  }
-
-  public HdfsUri getLocation() { return location_; }
-
-  @Override
-  public TAlterTableParams toThrift() {
-    TAlterTableParams params = super.toThrift();
-    params.setAlter_type(TAlterTableType.SET_LOCATION);
-    TAlterTableSetLocationParams locationParams =
-        new TAlterTableSetLocationParams(location_.toString());
-    if (getPartitionSpec() != null) {
-      locationParams.setPartition_spec(getPartitionSpec().toThrift());
-    }
-    params.setSet_location_params(locationParams);
-    return params;
-  }
-
-  @Override
-  public void analyze(Analyzer analyzer) throws AnalysisException {
-    super.analyze(analyzer);
-    location_.analyze(analyzer, Privilege.ALL, FsAction.READ_WRITE);
-
-    Table table = getTargetTable();
-    Preconditions.checkNotNull(table);
-    if (table instanceof HdfsTable) {
-      HdfsTable hdfsTable = (HdfsTable) table;
-      if (getPartitionSpec() != null) {
-        // Targeting a partition rather than a table.
-        PartitionSpec partitionSpec = getPartitionSpec();
-        HdfsPartition partition = hdfsTable.getPartition(
-            partitionSpec.getPartitionSpecKeyValues());
-        Preconditions.checkNotNull(partition);
-        if (partition.isMarkedCached()) {
-          throw new AnalysisException(String.format("Target partition is cached, " +
-              "please uncache before changing the location using: ALTER TABLE %s %s " +
-              "SET UNCACHED", table.getFullName(), partitionSpec.toSql()));
-        }
-      } else if (hdfsTable.isMarkedCached()) {
-        throw new AnalysisException(String.format("Target table is cached, please " +
-            "uncache before changing the location using: ALTER TABLE %s SET UNCACHED",
-            table.getFullName()));
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/b544f019/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetStmt.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetStmt.java b/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetStmt.java
deleted file mode 100644
index 2857211..0000000
--- a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetStmt.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloudera.impala.analysis;
-
-import com.cloudera.impala.authorization.Privilege;
-import com.cloudera.impala.catalog.HBaseTable;
-import com.cloudera.impala.catalog.Table;
-import com.cloudera.impala.common.AnalysisException;
-
-/**
- * Base class for all ALTER TABLE ... SET statements
- */
-public class AlterTableSetStmt extends AlterTableStmt {
-  protected final PartitionSpec partitionSpec_;
-
-  public AlterTableSetStmt(TableName tableName, PartitionSpec partitionSpec) {
-    super(tableName);
-    partitionSpec_ = partitionSpec;
-    if (partitionSpec_ != null) partitionSpec_.setTableName(tableName);
-  }
-
-  public PartitionSpec getPartitionSpec() { return partitionSpec_; }
-
-  @Override
-  public void analyze(Analyzer analyzer) throws AnalysisException {
-    super.analyze(analyzer);
-    Table t = getTargetTable();
-    // TODO: Support ALTER TABLE SET on HBase tables. Requires validating changes
-    // to the SERDEPROPERTIES and TBLPROPERTIES to ensure the table metadata does not
-    // become invalid.
-    if (t instanceof HBaseTable) {
-      throw new AnalysisException("ALTER TABLE SET not currently supported on " +
-          "HBase tables.");
-    }
-
-    // Altering the table rather than the partition.
-    if (partitionSpec_ == null) return;
-
-    partitionSpec_.setPartitionShouldExist();
-    partitionSpec_.setPrivilegeRequirement(Privilege.ALTER);
-    partitionSpec_.analyze(analyzer);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/b544f019/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetTblProperties.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetTblProperties.java b/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetTblProperties.java
deleted file mode 100644
index da92267..0000000
--- a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableSetTblProperties.java
+++ /dev/null
@@ -1,150 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloudera.impala.analysis;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.avro.SchemaParseException;
-import org.apache.hadoop.hive.serde2.avro.AvroSerdeUtils;
-
-import com.cloudera.impala.catalog.HdfsFileFormat;
-import com.cloudera.impala.catalog.HdfsTable;
-import com.cloudera.impala.catalog.Table;
-import com.cloudera.impala.common.AnalysisException;
-import com.cloudera.impala.thrift.*;
-import com.cloudera.impala.util.AvroSchemaParser;
-import com.cloudera.impala.util.AvroSchemaUtils;
-import com.cloudera.impala.util.MetaStoreUtil;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-
-/**
-* Represents an ALTER TABLE SET [PARTITION ('k1'='a', 'k2'='b'...)]
-* TBLPROPERTIES|SERDEPROPERTIES ('p1'='v1', ...) statement.
-*/
-public class AlterTableSetTblProperties extends AlterTableSetStmt {
-  private final TTablePropertyType targetProperty_;
-  private final HashMap<String, String> tblProperties_;
-
-  public AlterTableSetTblProperties(TableName tableName, PartitionSpec partitionSpec,
-      TTablePropertyType targetProperty, HashMap<String, String> tblProperties) {
-    super(tableName, partitionSpec);
-    Preconditions.checkNotNull(tblProperties);
-    Preconditions.checkNotNull(targetProperty);
-    targetProperty_ = targetProperty;
-    tblProperties_ = tblProperties;
-    CreateTableStmt.unescapeProperties(tblProperties_);
-  }
-
-  public HashMap<String, String> getTblProperties() { return tblProperties_; }
-
-  @Override
-  public TAlterTableParams toThrift() {
-   TAlterTableParams params = super.toThrift();
-   params.setAlter_type(TAlterTableType.SET_TBL_PROPERTIES);
-   TAlterTableSetTblPropertiesParams tblPropertyParams =
-       new TAlterTableSetTblPropertiesParams();
-   tblPropertyParams.setTarget(targetProperty_);
-   tblPropertyParams.setProperties(tblProperties_);
-   if (partitionSpec_ != null) {
-     tblPropertyParams.setPartition_spec(partitionSpec_.toThrift());
-   }
-   params.setSet_tbl_properties_params(tblPropertyParams);
-   return params;
-  }
-
-  @Override
-  public void analyze(Analyzer analyzer) throws AnalysisException {
-    super.analyze(analyzer);
-
-    MetaStoreUtil.checkShortPropertyMap("Property", tblProperties_);
-
-    // Check avro schema when it is set in avro.schema.url or avro.schema.literal to
-    // avoid potential metadata corruption (see IMPALA-2042).
-    // If both properties are set then only check avro.schema.literal and ignore
-    // avro.schema.url.
-    if (tblProperties_.containsKey(
-            AvroSerdeUtils.AvroTableProperties.SCHEMA_LITERAL.getPropName()) ||
-        tblProperties_.containsKey(
-            AvroSerdeUtils.AvroTableProperties.SCHEMA_URL.getPropName())) {
-      analyzeAvroSchema(analyzer);
-    }
-
-    // Analyze 'skip.header.line.format' property.
-    analyzeSkipHeaderLineCount(getTargetTable(), tblProperties_);
-  }
-
-  /**
-   * Check that Avro schema provided in avro.schema.url or avro.schema.literal is valid
-   * Json and contains only supported Impala types. If both properties are set, then
-   * avro.schema.url is ignored.
-   */
-  private void analyzeAvroSchema(Analyzer analyzer)
-      throws AnalysisException {
-    List<Map<String, String>> schemaSearchLocations = Lists.newArrayList();
-    schemaSearchLocations.add(tblProperties_);
-
-    String avroSchema = AvroSchemaUtils.getAvroSchema(schemaSearchLocations);
-    avroSchema = Strings.nullToEmpty(avroSchema);
-    if (avroSchema.isEmpty()) {
-      throw new AnalysisException("Avro schema is null or empty: " +
-          table_.getFullName());
-    }
-
-    // Check if the schema is valid and is supported by Impala
-    try {
-      AvroSchemaParser.parse(avroSchema);
-    } catch (SchemaParseException e) {
-      throw new AnalysisException(String.format(
-          "Error parsing Avro schema for table '%s': %s", table_.getFullName(),
-          e.getMessage()));
-    }
-  }
-
-  /**
-   * Analyze the 'skip.header.line.count' property to make sure it is set to a valid
-   * value. It is looked up in 'tblProperties', which must not be null.
-   */
-  public static void analyzeSkipHeaderLineCount(Map<String, String> tblProperties)
-      throws AnalysisException {
-    analyzeSkipHeaderLineCount(null, tblProperties);
-  }
-
-  /**
-   * Analyze the 'skip.header.line.count' property to make sure it is set to a valid
-   * value. It is looked up in 'tblProperties', which must not be null. If 'table' is not
-   * null, then the method ensures that 'skip.header.line.count' is supported for its
-   * table type. If it is null, then this check is omitted.
-   */
-  public static void analyzeSkipHeaderLineCount(Table table,
-      Map<String, String> tblProperties) throws AnalysisException {
-    if (tblProperties.containsKey(HdfsTable.TBL_PROP_SKIP_HEADER_LINE_COUNT)) {
-      if (table != null && !(table instanceof HdfsTable)) {
-        throw new AnalysisException(String.format("Table property " +
-            "'skip.header.line.count' is only supported for HDFS tables."));
-      }
-      StringBuilder error = new StringBuilder();
-      HdfsTable.parseSkipHeaderLineCount(tblProperties, error);
-      if (error.length() > 0) throw new AnalysisException(error.toString());
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/b544f019/fe/src/main/java/com/cloudera/impala/analysis/AlterTableStmt.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableStmt.java b/fe/src/main/java/com/cloudera/impala/analysis/AlterTableStmt.java
deleted file mode 100644
index aebd009..0000000
--- a/fe/src/main/java/com/cloudera/impala/analysis/AlterTableStmt.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloudera.impala.analysis;
-
-import com.cloudera.impala.authorization.Privilege;
-import com.cloudera.impala.catalog.DataSourceTable;
-import com.cloudera.impala.catalog.KuduTable;
-import com.cloudera.impala.catalog.Table;
-import com.cloudera.impala.catalog.View;
-import com.cloudera.impala.common.AnalysisException;
-import com.cloudera.impala.thrift.TAlterTableParams;
-import com.cloudera.impala.thrift.TTableName;
-import com.google.common.base.Preconditions;
-
-/**
- * Base class for all ALTER TABLE statements.
- */
-public abstract class AlterTableStmt extends StatementBase {
-  protected final TableName tableName_;
-
-  // Set during analysis.
-  protected Table table_;
-
-  protected AlterTableStmt(TableName tableName) {
-    Preconditions.checkState(tableName != null && !tableName.isEmpty());
-    tableName_ = tableName;
-    table_ = null;
-  }
-
-  public String getTbl() { return tableName_.getTbl(); }
-
-  /**
-   * Can only be called after analysis, returns the parent database name of the target
-   * table for this ALTER TABLE statement.
-   */
-  public String getDb() {
-    return getTargetTable().getDb().getName();
-  }
-
-  /**
-   * Can only be called after analysis, returns the Table object of the target of this
-   * ALTER TABLE statement.
-   */
-  protected Table getTargetTable() {
-    Preconditions.checkNotNull(table_);
-    return table_;
-  }
-
-  public TAlterTableParams toThrift() {
-    TAlterTableParams params = new TAlterTableParams();
-    params.setTable_name(new TTableName(getDb(), getTbl()));
-    return params;
-  }
-
-  @Override
-  public void analyze(Analyzer analyzer) throws AnalysisException {
-    table_ = analyzer.getTable(tableName_, Privilege.ALTER);
-    if (table_ instanceof KuduTable
-        && !(this instanceof AlterTableSetTblProperties)
-        && !(this instanceof AlterTableSetColumnStats)
-        && !(this instanceof AlterTableOrViewRenameStmt)) {
-      throw new AnalysisException(String.format(
-          "ALTER TABLE not allowed on Kudu table: %s", table_.getFullName()));
-    }
-    if (table_ instanceof View) {
-      throw new AnalysisException(String.format(
-          "ALTER TABLE not allowed on a view: %s", table_.getFullName()));
-    }
-    if (table_ instanceof DataSourceTable
-        && !(this instanceof AlterTableSetColumnStats)) {
-      throw new AnalysisException(String.format(
-          "ALTER TABLE not allowed on a table produced by a data source: %s",
-          table_.getFullName()));
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/b544f019/fe/src/main/java/com/cloudera/impala/analysis/AlterViewStmt.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/com/cloudera/impala/analysis/AlterViewStmt.java b/fe/src/main/java/com/cloudera/impala/analysis/AlterViewStmt.java
deleted file mode 100644
index 640b3a1..0000000
--- a/fe/src/main/java/com/cloudera/impala/analysis/AlterViewStmt.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloudera.impala.analysis;
-
-import com.cloudera.impala.authorization.Privilege;
-import com.cloudera.impala.catalog.Table;
-import com.cloudera.impala.catalog.View;
-import com.cloudera.impala.common.AnalysisException;
-import com.cloudera.impala.common.RuntimeEnv;
-
-import com.google.common.base.Preconditions;
-
-/**
- * Represents an ALTER VIEW AS statement.
- */
-public class AlterViewStmt extends CreateOrAlterViewStmtBase {
-
-  public AlterViewStmt(TableName tableName, QueryStmt viewDefStmt) {
-    super(false, tableName, null, null, viewDefStmt);
-  }
-
-  @Override
-  public void analyze(Analyzer analyzer) throws AnalysisException {
-    // Enforce Hive column labels for view compatibility.
-    analyzer.setUseHiveColLabels(true);
-    viewDefStmt_.analyze(analyzer);
-
-    Preconditions.checkState(tableName_ != null && !tableName_.isEmpty());
-    dbName_ = analyzer.getTargetDbName(tableName_);
-    owner_ = analyzer.getUser().getName();
-
-    Table table = analyzer.getTable(tableName_, Privilege.ALTER);
-    Preconditions.checkNotNull(table);
-    if (!(table instanceof View)) {
-      throw new AnalysisException(String.format(
-          "ALTER VIEW not allowed on a table: %s.%s", dbName_, getTbl()));
-    }
-
-    createColumnAndViewDefs(analyzer);
-    if (RuntimeEnv.INSTANCE.computeLineage() || RuntimeEnv.INSTANCE.isTestEnv()) {
-      computeLineageGraph(analyzer);
-    }
-  }
-
-  @Override
-  public String toSql() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("ALTER VIEW ");
-    if (tableName_.getDb() != null) {
-      sb.append(tableName_.getDb() + ".");
-    }
-    sb.append(tableName_.getTbl());
-    sb.append(" AS " + viewDefStmt_.toSql());
-    return sb.toString();
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/b544f019/fe/src/main/java/com/cloudera/impala/analysis/AnalysisContext.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/com/cloudera/impala/analysis/AnalysisContext.java b/fe/src/main/java/com/cloudera/impala/analysis/AnalysisContext.java
deleted file mode 100644
index 006474d..0000000
--- a/fe/src/main/java/com/cloudera/impala/analysis/AnalysisContext.java
+++ /dev/null
@@ -1,544 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloudera.impala.analysis;
-
-import java.io.StringReader;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.cloudera.impala.authorization.AuthorizationChecker;
-import com.cloudera.impala.authorization.AuthorizationConfig;
-import com.cloudera.impala.authorization.AuthorizeableColumn;
-import com.cloudera.impala.authorization.AuthorizeableTable;
-import com.cloudera.impala.authorization.Privilege;
-import com.cloudera.impala.authorization.PrivilegeRequest;
-import com.cloudera.impala.catalog.AuthorizationException;
-import com.cloudera.impala.catalog.Db;
-import com.cloudera.impala.catalog.ImpaladCatalog;
-import com.cloudera.impala.common.AnalysisException;
-import com.cloudera.impala.common.InternalException;
-import com.cloudera.impala.common.Pair;
-import com.cloudera.impala.thrift.TAccessEvent;
-import com.cloudera.impala.thrift.TLineageGraph;
-import com.cloudera.impala.thrift.TQueryCtx;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-/**
- * Wrapper class for parser and analyzer.
- */
-public class AnalysisContext {
-  private final static Logger LOG = LoggerFactory.getLogger(AnalysisContext.class);
-  private final ImpaladCatalog catalog_;
-  private final TQueryCtx queryCtx_;
-  private final AuthorizationConfig authzConfig_;
-
-  // Set in analyze()
-  private AnalysisResult analysisResult_;
-
-  public AnalysisContext(ImpaladCatalog catalog, TQueryCtx queryCtx,
-      AuthorizationConfig authzConfig) {
-    catalog_ = catalog;
-    queryCtx_ = queryCtx;
-    authzConfig_ = authzConfig;
-  }
-
-  static public class AnalysisResult {
-    private StatementBase stmt_;
-    private Analyzer analyzer_;
-    private CreateTableStmt tmpCreateTableStmt_;
-
-    public boolean isAlterTableStmt() { return stmt_ instanceof AlterTableStmt; }
-    public boolean isAlterViewStmt() { return stmt_ instanceof AlterViewStmt; }
-    public boolean isComputeStatsStmt() { return stmt_ instanceof ComputeStatsStmt; }
-    public boolean isQueryStmt() { return stmt_ instanceof QueryStmt; }
-    public boolean isInsertStmt() { return stmt_ instanceof InsertStmt; }
-    public boolean isDropDbStmt() { return stmt_ instanceof DropDbStmt; }
-    public boolean isDropTableOrViewStmt() {
-      return stmt_ instanceof DropTableOrViewStmt;
-    }
-    public boolean isDropFunctionStmt() { return stmt_ instanceof DropFunctionStmt; }
-    public boolean isDropDataSrcStmt() { return stmt_ instanceof DropDataSrcStmt; }
-    public boolean isDropStatsStmt() { return stmt_ instanceof DropStatsStmt; }
-    public boolean isCreateTableLikeStmt() {
-      return stmt_ instanceof CreateTableLikeStmt;
-    }
-    public boolean isCreateViewStmt() { return stmt_ instanceof CreateViewStmt; }
-    public boolean isCreateTableAsSelectStmt() {
-      return stmt_ instanceof CreateTableAsSelectStmt;
-    }
-    public boolean isCreateTableStmt() { return stmt_ instanceof CreateTableStmt; }
-    public boolean isCreateDbStmt() { return stmt_ instanceof CreateDbStmt; }
-    public boolean isCreateUdfStmt() { return stmt_ instanceof CreateUdfStmt; }
-    public boolean isCreateUdaStmt() { return stmt_ instanceof CreateUdaStmt; }
-    public boolean isCreateDataSrcStmt() { return stmt_ instanceof CreateDataSrcStmt; }
-    public boolean isLoadDataStmt() { return stmt_ instanceof LoadDataStmt; }
-    public boolean isUseStmt() { return stmt_ instanceof UseStmt; }
-    public boolean isSetStmt() { return stmt_ instanceof SetStmt; }
-    public boolean isShowTablesStmt() { return stmt_ instanceof ShowTablesStmt; }
-    public boolean isShowDbsStmt() { return stmt_ instanceof ShowDbsStmt; }
-    public boolean isShowDataSrcsStmt() { return stmt_ instanceof ShowDataSrcsStmt; }
-    public boolean isShowStatsStmt() { return stmt_ instanceof ShowStatsStmt; }
-    public boolean isShowFunctionsStmt() { return stmt_ instanceof ShowFunctionsStmt; }
-    public boolean isShowCreateTableStmt() {
-      return stmt_ instanceof ShowCreateTableStmt;
-    }
-    public boolean isShowCreateFunctionStmt() {
-      return stmt_ instanceof ShowCreateFunctionStmt;
-    }
-    public boolean isShowFilesStmt() { return stmt_ instanceof ShowFilesStmt; }
-    public boolean isDescribeDbStmt() { return stmt_ instanceof DescribeDbStmt; }
-    public boolean isDescribeTableStmt() { return stmt_ instanceof DescribeTableStmt; }
-    public boolean isResetMetadataStmt() { return stmt_ instanceof ResetMetadataStmt; }
-    public boolean isExplainStmt() { return stmt_.isExplain(); }
-    public boolean isShowRolesStmt() { return stmt_ instanceof ShowRolesStmt; }
-    public boolean isShowGrantRoleStmt() { return stmt_ instanceof ShowGrantRoleStmt; }
-    public boolean isCreateDropRoleStmt() { return stmt_ instanceof CreateDropRoleStmt; }
-    public boolean isGrantRevokeRoleStmt() {
-      return stmt_ instanceof GrantRevokeRoleStmt;
-    }
-    public boolean isGrantRevokePrivStmt() {
-      return stmt_ instanceof GrantRevokePrivStmt;
-    }
-    public boolean isTruncateStmt() { return stmt_ instanceof TruncateStmt; }
-    public boolean isUpdateStmt() { return stmt_ instanceof UpdateStmt; }
-    public UpdateStmt getUpdateStmt() { return (UpdateStmt) stmt_; }
-    public boolean isDeleteStmt() { return stmt_ instanceof DeleteStmt; }
-    public DeleteStmt getDeleteStmt() { return (DeleteStmt) stmt_; }
-
-    public boolean isCatalogOp() {
-      return isUseStmt() || isViewMetadataStmt() || isDdlStmt();
-    }
-
-    private boolean isDdlStmt() {
-      return isCreateTableLikeStmt() || isCreateTableStmt() ||
-          isCreateViewStmt() || isCreateDbStmt() || isDropDbStmt() ||
-          isDropTableOrViewStmt() || isResetMetadataStmt() || isAlterTableStmt() ||
-          isAlterViewStmt() || isComputeStatsStmt() || isCreateUdfStmt() ||
-          isCreateUdaStmt() || isDropFunctionStmt() || isCreateTableAsSelectStmt() ||
-          isCreateDataSrcStmt() || isDropDataSrcStmt() || isDropStatsStmt() ||
-          isCreateDropRoleStmt() || isGrantRevokeStmt() || isTruncateStmt();
-    }
-
-    private boolean isViewMetadataStmt() {
-      return isShowFilesStmt() || isShowTablesStmt() || isShowDbsStmt() ||
-          isShowFunctionsStmt() || isShowRolesStmt() || isShowGrantRoleStmt() ||
-          isShowCreateTableStmt() || isShowDataSrcsStmt() || isShowStatsStmt() ||
-          isDescribeTableStmt() || isDescribeDbStmt() || isShowCreateFunctionStmt();
-    }
-
-    private boolean isGrantRevokeStmt() {
-      return isGrantRevokeRoleStmt() || isGrantRevokePrivStmt();
-    }
-
-    public boolean isDmlStmt() {
-      return isInsertStmt();
-    }
-
-    public AlterTableStmt getAlterTableStmt() {
-      Preconditions.checkState(isAlterTableStmt());
-      return (AlterTableStmt) stmt_;
-    }
-
-    public AlterViewStmt getAlterViewStmt() {
-      Preconditions.checkState(isAlterViewStmt());
-      return (AlterViewStmt) stmt_;
-    }
-
-    public ComputeStatsStmt getComputeStatsStmt() {
-      Preconditions.checkState(isComputeStatsStmt());
-      return (ComputeStatsStmt) stmt_;
-    }
-
-    public CreateTableLikeStmt getCreateTableLikeStmt() {
-      Preconditions.checkState(isCreateTableLikeStmt());
-      return (CreateTableLikeStmt) stmt_;
-    }
-
-    public CreateViewStmt getCreateViewStmt() {
-      Preconditions.checkState(isCreateViewStmt());
-      return (CreateViewStmt) stmt_;
-    }
-
-    public CreateTableAsSelectStmt getCreateTableAsSelectStmt() {
-      Preconditions.checkState(isCreateTableAsSelectStmt());
-      return (CreateTableAsSelectStmt) stmt_;
-    }
-
-    public CreateTableStmt getCreateTableStmt() {
-      Preconditions.checkState(isCreateTableStmt());
-      return (CreateTableStmt) stmt_;
-    }
-
-    public CreateTableStmt getTmpCreateTableStmt() {
-      return tmpCreateTableStmt_;
-    }
-
-    public CreateDbStmt getCreateDbStmt() {
-      Preconditions.checkState(isCreateDbStmt());
-      return (CreateDbStmt) stmt_;
-    }
-
-    public CreateUdfStmt getCreateUdfStmt() {
-      Preconditions.checkState(isCreateUdfStmt());
-      return (CreateUdfStmt) stmt_;
-    }
-
-    public CreateUdaStmt getCreateUdaStmt() {
-      Preconditions.checkState(isCreateUdfStmt());
-      return (CreateUdaStmt) stmt_;
-    }
-
-    public DropDbStmt getDropDbStmt() {
-      Preconditions.checkState(isDropDbStmt());
-      return (DropDbStmt) stmt_;
-    }
-
-    public DropTableOrViewStmt getDropTableOrViewStmt() {
-      Preconditions.checkState(isDropTableOrViewStmt());
-      return (DropTableOrViewStmt) stmt_;
-    }
-
-    public TruncateStmt getTruncateStmt() {
-      Preconditions.checkState(isTruncateStmt());
-      return (TruncateStmt) stmt_;
-    }
-
-    public DropFunctionStmt getDropFunctionStmt() {
-      Preconditions.checkState(isDropFunctionStmt());
-      return (DropFunctionStmt) stmt_;
-    }
-
-    public LoadDataStmt getLoadDataStmt() {
-      Preconditions.checkState(isLoadDataStmt());
-      return (LoadDataStmt) stmt_;
-    }
-
-    public QueryStmt getQueryStmt() {
-      Preconditions.checkState(isQueryStmt());
-      return (QueryStmt) stmt_;
-    }
-
-    public InsertStmt getInsertStmt() {
-      if (isCreateTableAsSelectStmt()) {
-        return getCreateTableAsSelectStmt().getInsertStmt();
-      } else {
-        Preconditions.checkState(isInsertStmt());
-        return (InsertStmt) stmt_;
-      }
-    }
-
-    public UseStmt getUseStmt() {
-      Preconditions.checkState(isUseStmt());
-      return (UseStmt) stmt_;
-    }
-
-    public SetStmt getSetStmt() {
-      Preconditions.checkState(isSetStmt());
-      return (SetStmt) stmt_;
-    }
-
-    public ShowTablesStmt getShowTablesStmt() {
-      Preconditions.checkState(isShowTablesStmt());
-      return (ShowTablesStmt) stmt_;
-    }
-
-    public ShowDbsStmt getShowDbsStmt() {
-      Preconditions.checkState(isShowDbsStmt());
-      return (ShowDbsStmt) stmt_;
-    }
-
-    public ShowDataSrcsStmt getShowDataSrcsStmt() {
-      Preconditions.checkState(isShowDataSrcsStmt());
-      return (ShowDataSrcsStmt) stmt_;
-    }
-
-    public ShowStatsStmt getShowStatsStmt() {
-      Preconditions.checkState(isShowStatsStmt());
-      return (ShowStatsStmt) stmt_;
-    }
-
-    public ShowFunctionsStmt getShowFunctionsStmt() {
-      Preconditions.checkState(isShowFunctionsStmt());
-      return (ShowFunctionsStmt) stmt_;
-    }
-
-    public ShowFilesStmt getShowFilesStmt() {
-      Preconditions.checkState(isShowFilesStmt());
-      return (ShowFilesStmt) stmt_;
-    }
-
-    public DescribeDbStmt getDescribeDbStmt() {
-      Preconditions.checkState(isDescribeDbStmt());
-      return (DescribeDbStmt) stmt_;
-    }
-
-    public DescribeTableStmt getDescribeTableStmt() {
-      Preconditions.checkState(isDescribeTableStmt());
-      return (DescribeTableStmt) stmt_;
-    }
-
-    public ShowCreateTableStmt getShowCreateTableStmt() {
-      Preconditions.checkState(isShowCreateTableStmt());
-      return (ShowCreateTableStmt) stmt_;
-    }
-
-    public ShowCreateFunctionStmt getShowCreateFunctionStmt() {
-      Preconditions.checkState(isShowCreateFunctionStmt());
-      return (ShowCreateFunctionStmt) stmt_;
-    }
-
-    public StatementBase getStmt() { return stmt_; }
-    public Analyzer getAnalyzer() { return analyzer_; }
-    public Set<TAccessEvent> getAccessEvents() { return analyzer_.getAccessEvents(); }
-    public boolean requiresRewrite() {
-      return analyzer_.containsSubquery() && !(stmt_ instanceof CreateViewStmt)
-          && !(stmt_ instanceof AlterViewStmt);
-    }
-    public TLineageGraph getThriftLineageGraph() {
-      return analyzer_.getThriftSerializedLineageGraph();
-    }
-  }
-
-  /**
-   * Parse and analyze 'stmt'. If 'stmt' is a nested query (i.e. query that
-   * contains subqueries), it is also rewritten by performing subquery unnesting.
-   * The transformed stmt is then re-analyzed in a new analysis context.
-   *
-   * The result of analysis can be retrieved by calling
-   * getAnalysisResult().
-   *
-   * @throws AnalysisException
-   *           On any other error, including parsing errors. Also thrown when any
-   *           missing tables are detected as a result of running analysis.
-   */
-  public void analyze(String stmt) throws AnalysisException {
-    Analyzer analyzer = new Analyzer(catalog_, queryCtx_, authzConfig_);
-    analyze(stmt, analyzer);
-  }
-
-  /**
-   * Parse and analyze 'stmt' using a specified Analyzer.
-   */
-  public void analyze(String stmt, Analyzer analyzer) throws AnalysisException {
-    SqlScanner input = new SqlScanner(new StringReader(stmt));
-    SqlParser parser = new SqlParser(input);
-    try {
-      analysisResult_ = new AnalysisResult();
-      analysisResult_.analyzer_ = analyzer;
-      if (analysisResult_.analyzer_ == null) {
-        analysisResult_.analyzer_ = new Analyzer(catalog_, queryCtx_, authzConfig_);
-      }
-      analysisResult_.stmt_ = (StatementBase) parser.parse().value;
-      if (analysisResult_.stmt_ == null) return;
-
-      // For CTAS, we copy the create statement in case we have to create a new CTAS
-      // statement after a query rewrite.
-      if (analysisResult_.stmt_ instanceof CreateTableAsSelectStmt) {
-        analysisResult_.tmpCreateTableStmt_ =
-            ((CreateTableAsSelectStmt)analysisResult_.stmt_).getCreateStmt().clone();
-      }
-
-      analysisResult_.stmt_.analyze(analysisResult_.analyzer_);
-      boolean isExplain = analysisResult_.isExplainStmt();
-
-      // Check if we need to rewrite the statement.
-      if (analysisResult_.requiresRewrite()) {
-        StatementBase rewrittenStmt = StmtRewriter.rewrite(analysisResult_);
-        // Re-analyze the rewritten statement.
-        Preconditions.checkNotNull(rewrittenStmt);
-        analysisResult_ = new AnalysisResult();
-        analysisResult_.analyzer_ = new Analyzer(catalog_, queryCtx_, authzConfig_);
-        analysisResult_.stmt_ = rewrittenStmt;
-        analysisResult_.stmt_.analyze(analysisResult_.analyzer_);
-        LOG.trace("rewrittenStmt: " + rewrittenStmt.toSql());
-        if (isExplain) analysisResult_.stmt_.setIsExplain();
-        Preconditions.checkState(!analysisResult_.requiresRewrite());
-      }
-    } catch (AnalysisException e) {
-      // Don't wrap AnalysisExceptions in another AnalysisException
-      throw e;
-    } catch (Exception e) {
-      throw new AnalysisException(parser.getErrorMsg(stmt), e);
-    }
-  }
-
-  /**
-   * Authorize an analyzed statement.
-   * analyze() must have already been called. Throws an AuthorizationException if the
-   * user doesn't have sufficient privileges to run this statement.
-   */
-  public void authorize(AuthorizationChecker authzChecker)
-      throws AuthorizationException, InternalException {
-    Preconditions.checkNotNull(analysisResult_);
-    Analyzer analyzer = getAnalyzer();
-    // Process statements for which column-level privilege requests may be registered
-    // except for DESCRIBE TABLE or REFRESH/INVALIDATE statements
-    if (analysisResult_.isQueryStmt() || analysisResult_.isInsertStmt() ||
-        analysisResult_.isUpdateStmt() || analysisResult_.isDeleteStmt() ||
-        analysisResult_.isCreateTableAsSelectStmt() ||
-        analysisResult_.isCreateViewStmt() || analysisResult_.isAlterViewStmt()) {
-      // Map of table name to a list of privilege requests associated with that table.
-      // These include both table-level and column-level privilege requests.
-      Map<String, List<PrivilegeRequest>> tablePrivReqs = Maps.newHashMap();
-      // Privilege requests that are not column or table-level.
-      List<PrivilegeRequest> otherPrivReqs = Lists.newArrayList();
-      // Group the registered privilege requests based on the table they reference.
-      for (PrivilegeRequest privReq: analyzer.getPrivilegeReqs()) {
-        String tableName = privReq.getAuthorizeable().getFullTableName();
-        if (tableName == null) {
-          otherPrivReqs.add(privReq);
-        } else {
-          List<PrivilegeRequest> requests = tablePrivReqs.get(tableName);
-          if (requests == null) {
-            requests = Lists.newArrayList();
-            tablePrivReqs.put(tableName, requests);
-          }
-          // The table-level SELECT must be the first table-level request, and it
-          // must precede all column-level privilege requests.
-          Preconditions.checkState((requests.isEmpty() ||
-              !(privReq.getAuthorizeable() instanceof AuthorizeableColumn)) ||
-              (requests.get(0).getAuthorizeable() instanceof AuthorizeableTable &&
-              requests.get(0).getPrivilege() == Privilege.SELECT));
-          requests.add(privReq);
-        }
-      }
-
-      // Check any non-table, non-column privilege requests first.
-      for (PrivilegeRequest request: otherPrivReqs) {
-        authorizePrivilegeRequest(authzChecker, request);
-      }
-
-      // Authorize table accesses, one table at a time, by considering both table and
-      // column-level privilege requests.
-      for (Map.Entry<String, List<PrivilegeRequest>> entry: tablePrivReqs.entrySet()) {
-        authorizeTableAccess(authzChecker, entry.getValue());
-      }
-    } else {
-      for (PrivilegeRequest privReq: analyzer.getPrivilegeReqs()) {
-        Preconditions.checkState(
-            !(privReq.getAuthorizeable() instanceof AuthorizeableColumn) ||
-            analysisResult_.isDescribeTableStmt() ||
-            analysisResult_.isResetMetadataStmt());
-        authorizePrivilegeRequest(authzChecker, privReq);
-      }
-    }
-
-    // Check any masked requests.
-    for (Pair<PrivilegeRequest, String> maskedReq: analyzer.getMaskedPrivilegeReqs()) {
-      if (!authzChecker.hasAccess(analyzer.getUser(), maskedReq.first)) {
-        throw new AuthorizationException(maskedReq.second);
-      }
-    }
-  }
-
-  /**
-   * Authorize a privilege request.
-   * Throws an AuthorizationException if the user doesn't have sufficient privileges for
-   * this request. Also, checks if the request references a system database.
-   */
-  private void authorizePrivilegeRequest(AuthorizationChecker authzChecker,
-    PrivilegeRequest request) throws AuthorizationException, InternalException {
-    Preconditions.checkNotNull(request);
-    String dbName = null;
-    if (request.getAuthorizeable() != null) {
-      dbName = request.getAuthorizeable().getDbName();
-    }
-    // If this is a system database, some actions should always be allowed
-    // or disabled, regardless of what is in the auth policy.
-    if (dbName != null && checkSystemDbAccess(dbName, request.getPrivilege())) {
-      return;
-    }
-    authzChecker.checkAccess(getAnalyzer().getUser(), request);
-  }
-
-  /**
-   * Authorize a list of privilege requests associated with a single table.
-   * It checks if the user has sufficient table-level privileges and if that is
-   * not the case, it falls back on checking column-level privileges, if any. This
-   * function requires 'SELECT' requests to be ordered by table and then by column
-   * privilege requests. Throws an AuthorizationException if the user doesn't have
-   * sufficient privileges.
-   */
-  private void authorizeTableAccess(AuthorizationChecker authzChecker,
-      List<PrivilegeRequest> requests)
-      throws AuthorizationException, InternalException {
-    Preconditions.checkState(!requests.isEmpty());
-    Analyzer analyzer = getAnalyzer();
-    boolean hasTableSelectPriv = true;
-    boolean hasColumnSelectPriv = false;
-    for (PrivilegeRequest request: requests) {
-      if (request.getAuthorizeable() instanceof AuthorizeableTable) {
-        try {
-          authorizePrivilegeRequest(authzChecker, request);
-        } catch (AuthorizationException e) {
-          // Authorization fails if we fail to authorize any table-level request that is
-          // not a SELECT privilege (e.g. INSERT).
-          if (request.getPrivilege() != Privilege.SELECT) throw e;
-          hasTableSelectPriv = false;
-        }
-      } else {
-        Preconditions.checkState(
-            request.getAuthorizeable() instanceof AuthorizeableColumn);
-        if (hasTableSelectPriv) continue;
-        if (authzChecker.hasAccess(analyzer.getUser(), request)) {
-          hasColumnSelectPriv = true;
-          continue;
-        }
-        // Make sure we don't reveal any column names in the error message.
-        throw new AuthorizationException(String.format("User '%s' does not have " +
-          "privileges to execute '%s' on: %s", analyzer.getUser().getName(),
-          request.getPrivilege().toString(),
-          request.getAuthorizeable().getFullTableName()));
-      }
-    }
-    if (!hasTableSelectPriv && !hasColumnSelectPriv) {
-       throw new AuthorizationException(String.format("User '%s' does not have " +
-          "privileges to execute 'SELECT' on: %s", analyzer.getUser().getName(),
-          requests.get(0).getAuthorizeable().getFullTableName()));
-    }
-  }
-
-  /**
-   * Throws an AuthorizationException if the dbName is a system db
-   * and the user is trying to modify it.
-   * Returns true if this is a system db and the action is allowed.
-   */
-  private boolean checkSystemDbAccess(String dbName, Privilege privilege)
-      throws AuthorizationException {
-    Db db = catalog_.getDb(dbName);
-    if (db != null && db.isSystemDb()) {
-      switch (privilege) {
-        case VIEW_METADATA:
-        case ANY:
-          return true;
-        default:
-          throw new AuthorizationException("Cannot modify system database.");
-      }
-    }
-    return false;
-  }
-
-  public AnalysisResult getAnalysisResult() { return analysisResult_; }
-  public Analyzer getAnalyzer() { return getAnalysisResult().getAnalyzer(); }
-}