diff --git metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreUtils.java metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreUtils.java index 333db4db66..f14e6285cb 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreUtils.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreUtils.java @@ -154,6 +154,7 @@ static public Deserializer getDeserializer(Configuration conf, ObjectInspector oi = deserializer.getObjectInspector(); String[] names = tableName.split("\\."); String last_name = names[names.length - 1]; + // 0 = db, 1 = table for (int i = 2; i < names.length; i++) { if (oi instanceof StructObjectInspector) { diff --git ql/src/java/org/apache/hadoop/hive/ql/cache/results/QueryResultsCache.java ql/src/java/org/apache/hadoop/hive/ql/cache/results/QueryResultsCache.java index 4b833b730c..33fb47ad01 100644 --- ql/src/java/org/apache/hadoop/hive/ql/cache/results/QueryResultsCache.java +++ ql/src/java/org/apache/hadoop/hive/ql/cache/results/QueryResultsCache.java @@ -52,6 +52,7 @@ import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.permission.FsPermission; +import org.apache.hadoop.hive.common.TableName; import org.apache.hadoop.hive.common.metrics.common.Metrics; import org.apache.hadoop.hive.common.metrics.common.MetricsConstant; import org.apache.hadoop.hive.common.metrics.common.MetricsFactory; @@ -631,13 +632,13 @@ public long getSize() { } } - public void notifyTableChanged(String dbName, String tableName, long updateTime) { - LOG.debug("Table changed: {}.{}, at {}", dbName, tableName, updateTime); + public void notifyTableChanged(TableName tableName, long updateTime) { + LOG.debug("Table changed: {}, at {}", tableName.getNotEmptyDbTable(), updateTime); // Invalidate all cache entries using this table. List entriesToInvalidate = null; rwLock.writeLock().lock(); try { - String key = (dbName.toLowerCase() + "." + tableName.toLowerCase()); + String key = (tableName.getNotEmptyDbTable().toLowerCase()); Set entriesForTable = tableToEntryMap.get(key); if (entriesForTable != null) { // Possible concurrent modification issues if we try to remove cache entries while @@ -989,7 +990,7 @@ public void accept(NotificationEvent event) { QueryResultsCache cache = QueryResultsCache.getInstance(); if (cache != null) { long eventTime = event.getEventTime() * 1000L; - cache.notifyTableChanged(dbName, tableName, eventTime); + cache.notifyTableChanged(TableName.fromString(tableName, null, dbName), eventTime); } else { LOG.debug("Cache not instantiated, skipping event on {}.{}", dbName, tableName); } diff --git ql/src/java/org/apache/hadoop/hive/ql/ddl/table/misc/AlterTableRenameDesc.java ql/src/java/org/apache/hadoop/hive/ql/ddl/table/misc/AlterTableRenameDesc.java index 091c146940..aef860f0c6 100644 --- ql/src/java/org/apache/hadoop/hive/ql/ddl/table/misc/AlterTableRenameDesc.java +++ ql/src/java/org/apache/hadoop/hive/ql/ddl/table/misc/AlterTableRenameDesc.java @@ -33,16 +33,16 @@ public class AlterTableRenameDesc extends AbstractAlterTableDesc { private static final long serialVersionUID = 1L; - private final String newName; + private final TableName newName; - public AlterTableRenameDesc(TableName tableName, ReplicationSpec replicationSpec, boolean expectView, String newName) + public AlterTableRenameDesc(TableName tableName, ReplicationSpec replicationSpec, boolean expectView, TableName newName) throws SemanticException { super(AlterTableType.RENAME, tableName, null, replicationSpec, false, expectView, null); this.newName = newName; } @Explain(displayName = "new table name", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED }) - public String getNewName() { + public TableName getNewName() { return newName; } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsUpdateTask.java ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsUpdateTask.java index dc6d31a9cb..9c5f3fa460 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsUpdateTask.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/ColumnStatsUpdateTask.java @@ -84,8 +84,7 @@ private ColumnStatistics constructColumnStatsFromInput() colStats.getStatsDesc().getTableName()); return colStats; } - String dbName = work.dbName(); - String tableName = work.getTableName(); + TableName tableName = work.getTableName(); String partName = work.getPartName(); String colName = work.getColName(); String columnType = work.getColType(); @@ -291,7 +290,7 @@ private ColumnStatistics constructColumnStatsFromInput() } else { throw new SemanticException("Unsupported type"); } - ColumnStatisticsDesc statsDesc = getColumnStatsDesc(dbName, tableName, + ColumnStatisticsDesc statsDesc = getColumnStatsDesc(tableName, partName, partName == null); ColumnStatistics colStat = new ColumnStatistics(); colStat.setStatsDesc(statsDesc); @@ -300,11 +299,10 @@ private ColumnStatistics constructColumnStatsFromInput() return colStat; } - private ColumnStatisticsDesc getColumnStatsDesc(String dbName, - String tableName, String partName, boolean isTblLevel) { + private ColumnStatisticsDesc getColumnStatsDesc(TableName tableName, String partName, boolean isTblLevel) { ColumnStatisticsDesc statsDesc = new ColumnStatisticsDesc(); - statsDesc.setDbName(dbName); - statsDesc.setTableName(tableName); + statsDesc.setDbName(tableName.getDb()); + statsDesc.setTableName(tableName.getTable()); statsDesc.setIsTblLevel(isTblLevel); if (!isTblLevel) { statsDesc.setPartName(partName); diff --git ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java index 75a0ea5d19..7f061d4a6b 100644 --- ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java +++ ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java @@ -1923,7 +1923,7 @@ public static Boolean isOutdatedMaterializedView(Table materializedViewTable, fi long defaultTimeWindow, List tablesUsed, boolean forceMVContentsUpToDate) { // Check if materialization defined its own invalidation time window String timeWindowString = materializedViewTable.getProperty(MATERIALIZED_VIEW_REWRITING_TIME_WINDOW); - long timeWindow = org.apache.commons.lang.StringUtils.isEmpty(timeWindowString) ? defaultTimeWindow : + long timeWindow = org.apache.commons.lang3.StringUtils.isEmpty(timeWindowString) ? defaultTimeWindow : HiveConf.toTime(timeWindowString, HiveConf.getDefaultTimeUnit(HiveConf.ConfVars.HIVE_MATERIALIZED_VIEW_REWRITING_TIME_WINDOW), TimeUnit.MILLISECONDS); diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java index 600ad323b0..334858aedf 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java @@ -415,7 +415,7 @@ private void analyzeAlterTableUpdateStats(ASTNode ast, TableName tblName, Map par else if (entry.getKey().equals("external") && entry.getValue().equals("true")) { if (hasConstraintsEnabled(tableName.getTable())) { throw new SemanticException( - ErrorMsg.INVALID_CSTR_SYNTAX.getMsg("Table: " + tableName.getDbTable() + " has constraints enabled." + ErrorMsg.INVALID_CSTR_SYNTAX.getMsg("Table: " + tableName.getNotEmptyDbTable() + " has constraints enabled." + "Please remove those constraints to change this property.")); } } @@ -1783,7 +1789,7 @@ private void analyzeAlterTableRename(TableName source, ASTNode ast, boolean expe throws SemanticException { final TableName target = getQualifiedTableName((ASTNode) ast.getChild(0)); - AlterTableRenameDesc alterTblDesc = new AlterTableRenameDesc(source, null, expectView, target.getDbTable()); + AlterTableRenameDesc alterTblDesc = new AlterTableRenameDesc(source, null, expectView, target); Table table = getTable(source.getDbTable(), true); if (AcidUtils.isTransactionalTable(table)) { setAcidDdlDesc(alterTblDesc); diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/HiveTableName.java ql/src/java/org/apache/hadoop/hive/ql/parse/HiveTableName.java index cd9f88c53b..db011b8163 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/HiveTableName.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/HiveTableName.java @@ -42,16 +42,15 @@ public static TableName of(Table table) throws SemanticException { } /** - * Set a @{@link Table} object's table and db names based on the provided string. - * @param dbTable the dbtable string + * Set a @{@link Table} object's table and db names based on the provided tableName object. + * @param tableName the tableName object * @param table the table to update * @return the table * @throws SemanticException */ - public static Table setFrom(String dbTable, Table table) throws SemanticException{ - TableName name = ofNullable(dbTable); - table.setTableName(name.getTable()); - table.setDbName(name.getDb()); + public static Table setFrom(TableName tableName, Table table) throws SemanticException{ + table.setTableName(tableName.getTable()); + table.setDbName(tableName.getDb()); return table; } diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 6adfb6d16c..604d6fa0a4 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -2300,9 +2300,9 @@ private void getMetaData(QB qb, ReadEntity parentInput) // Whether we are using an acid compliant transaction manager has already been caught in // UpdateDeleteSemanticAnalyzer, so if we are updating or deleting and getting nonAcid // here, it means the table itself doesn't support it. - throw new SemanticException(ErrorMsg.ACID_OP_ON_NONACID_TABLE, ts.getTableName().getTable()); + throw new SemanticException(ErrorMsg.ACID_OP_ON_NONACID_TABLE, ts.getTableName().getNotEmptyDbTable()); } else { - throw new SemanticException(ErrorMsg.ACID_OP_ON_INSERTONLYTRAN_TABLE, ts.getTableName().getTable()); + throw new SemanticException(ErrorMsg.ACID_OP_ON_INSERTONLYTRAN_TABLE, ts.getTableName().getNotEmptyDbTable()); } } // TableSpec ts is got from the query (user specified), @@ -13600,7 +13600,7 @@ ASTNode analyzeCreateTable( case ctt: // CREATE TRANSACTIONAL TABLE if (isExt) { throw new SemanticException( - qualifiedTabName.getTable() + " cannot be declared transactional because it's an external table"); + qualifiedTabName.getNotEmptyDbTable() + " cannot be declared transactional because it's an external table"); } tblProps = validateAndAddDefaultProperties(tblProps, isExt, storageFormat, dbDotTab, sortCols, isMaterialization, isTemporary, isTransactional); diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/TableExport.java ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/TableExport.java index 01b7fdc4b6..a6b30070d6 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/TableExport.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/TableExport.java @@ -152,7 +152,7 @@ private void writeData(PartitionIterable partitions) throws SemanticException { if (tableSpec.tableHandle.isPartitioned()) { if (partitions == null) { throw new IllegalStateException("partitions cannot be null for partitionTable :" - + tableSpec.getTableName().getTable()); + + tableSpec.getTableName().getNotEmptyDbTable()); } new PartitionExport(paths, partitions, distCpDoAsUser, conf, mmCtx).write(replicationSpec); } else { @@ -316,7 +316,7 @@ public AuthEntities getAuthEntities() throws SemanticException { if (tableSpec.tableHandle.isPartitioned()) { if (partitions == null) { throw new IllegalStateException("partitions cannot be null for partitionTable :" - + tableSpec.getTableName().getTable()); + + tableSpec.getTableName().getNotEmptyDbTable()); } for (Partition partition : partitions) { authEntities.inputs.add(new ReadEntity(partition)); diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/repl/load/message/RenameTableHandler.java ql/src/java/org/apache/hadoop/hive/ql/parse/repl/load/message/RenameTableHandler.java index 82e50ff442..4637be7856 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/repl/load/message/RenameTableHandler.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/repl/load/message/RenameTableHandler.java @@ -62,7 +62,7 @@ replicationSpec.setMigratingToTxnTable(); } AlterTableRenameDesc renameTableDesc = - new AlterTableRenameDesc(oldName, replicationSpec, false, newName.getNotEmptyDbTable()); + new AlterTableRenameDesc(oldName, replicationSpec, false, newName); renameTableDesc.setWriteId(msg.getWriteId()); Task renameTableTask = TaskFactory.get( new DDLWork(readEntitySet, writeEntitySet, renameTableDesc), context.hiveConf); diff --git ql/src/java/org/apache/hadoop/hive/ql/plan/ColumnStatsUpdateWork.java ql/src/java/org/apache/hadoop/hive/ql/plan/ColumnStatsUpdateWork.java index c90ea437f5..c79f4971da 100644 --- ql/src/java/org/apache/hadoop/hive/ql/plan/ColumnStatsUpdateWork.java +++ ql/src/java/org/apache/hadoop/hive/ql/plan/ColumnStatsUpdateWork.java @@ -21,6 +21,7 @@ import java.io.Serializable; import java.util.Map; +import org.apache.hadoop.hive.common.TableName; import org.apache.hadoop.hive.metastore.api.ColumnStatistics; import org.apache.hadoop.hive.ql.ddl.DDLDesc.DDLDescWithWriteId; import org.apache.hadoop.hive.ql.plan.Explain.Level; @@ -39,8 +40,7 @@ private static final long serialVersionUID = 1L; private final String partName; private final Map mapProp; - private final String dbName; - private final String tableName; + private final TableName tableName; private final String colName; private final String colType; private final ColumnStatistics colStats; @@ -50,13 +50,11 @@ public ColumnStatsUpdateWork(String partName, Map mapProp, - String dbName, - String tableName, + TableName tableName, String colName, String colType) { this.partName = partName; this.mapProp = mapProp; - this.dbName = dbName; this.tableName = tableName; this.colName = colName; this.colType = colType; @@ -69,8 +67,7 @@ public ColumnStatsUpdateWork(ColumnStatistics colStats, boolean isMigratingToTxn this.isMigratingToTxn = isMigratingToTxn; this.partName = null; this.mapProp = null; - this.dbName = null; - this.tableName = null; + this.tableName = null; // FIXME: This won't do this.colName = null; this.colType = null; } @@ -88,11 +85,7 @@ public String getPartName() { return mapProp; } - public String dbName() { - return dbName; - } - - public String getTableName() { + public TableName getTableName() { return tableName; } @@ -117,7 +110,7 @@ public void setWriteId(long writeId) { @Override public String getFullTableName() { - return dbName + "." + tableName; + return tableName.getNotEmptyDbTable(); } @Override