diff --git metastore/src/java/org/apache/hadoop/hive/metastore/txn/CompactionTxnHandler.java metastore/src/java/org/apache/hadoop/hive/metastore/txn/CompactionTxnHandler.java index d3aa66f..c4a9581 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/txn/CompactionTxnHandler.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/txn/CompactionTxnHandler.java @@ -547,10 +547,27 @@ public void revokeTimedoutWorkers(long timeout) throws MetaException { Statement stmt = null; ResultSet rs = null; try { + String quote = getIdentifierQuoteString(dbConn); stmt = dbConn.createStatement(); - String s = "SELECT COLUMN_NAME FROM " + (ci.partName == null ? "TAB_COL_STATS" : "PART_COL_STATS") + StringBuilder bldr = new StringBuilder(); + bldr.append("SELECT ").append(quote).append("COLUMN_NAME").append(quote) + .append(" FROM ") + .append(quote).append((ci.partName == null ? "TAB_COL_STATS" : "PART_COL_STATS")) + .append(quote) + .append(" WHERE ") + .append(quote).append("DB_NAME").append(quote).append(" = '").append(ci.dbname) + .append("' AND ").append(quote).append("TABLE_NAME").append(quote) + .append(" = '").append(ci.tableName).append("'"); + if (ci.partName != null) { + bldr.append(" AND ").append(quote).append("PARTITION_NAME").append(quote).append(" = '") + .append(ci.partName).append("'"); + } + String s = bldr.toString(); + + /*String s = "SELECT COLUMN_NAME FROM " + (ci.partName == null ? "TAB_COL_STATS" : + "PART_COL_STATS") + " WHERE DB_NAME='" + ci.dbname + "' AND TABLE_NAME='" + ci.tableName + "'" - + (ci.partName == null ? "" : " AND PARTITION_NAME='" + ci.partName + "'"); + + (ci.partName == null ? "" : " AND PARTITION_NAME='" + ci.partName + "'");*/ LOG.debug("Going to execute <" + s + ">"); rs = stmt.executeQuery(s); List columns = new ArrayList(); diff --git metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java index 6f44169..567e2e6 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java @@ -90,6 +90,8 @@ // Transaction timeout, in milliseconds. private long timeout; + private String identifierQuoteString; // quotes to use for quoting tables, where necessary + // DEADLOCK DETECTION AND HANDLING // A note to developers of this class. ALWAYS access HIVE_LOCKS before TXNS to avoid deadlock // between simultaneous accesses. ALWAYS access TXN_COMPONENTS before HIVE_LOCKS . @@ -960,6 +962,19 @@ protected long getDbTime(Connection conn) throws MetaException { } } + /** + * Determine the String that should be used to quote identifiers. + * @param conn Active connection + * @return quotes + * @throws SQLException + */ + protected String getIdentifierQuoteString(Connection conn) throws SQLException { + if (identifierQuoteString == null) { + identifierQuoteString = conn.getMetaData().getIdentifierQuoteString(); + } + return identifierQuoteString; + } + protected enum DatabaseProduct { DERBY, MYSQL, POSTGRES, ORACLE, SQLSERVER} /**