Oliver Schiller created HIVE-27432:
--------------------------------------

             Summary: Database name that ends with '#' is not properly 
considered when splitting catalog and db names.
                 Key: HIVE-27432
                 URL: https://issues.apache.org/jira/browse/HIVE-27432
             Project: Hive
          Issue Type: Bug
          Components: Hive, Metastore, Standalone Metastore
            Reporter: Oliver Schiller


A database name that ends with '#' is not properly considered by the parsing 
logic in method parseDBName:
public static String[] parseDbName(String dbName, Configuration conf) throws 
MetaException \{
    if (dbName == null) {
      return Arrays.copyOf(nullCatalogAndDatabase, 
nullCatalogAndDatabase.length);
    }
    if (hasCatalogName(dbName)) \{
      if (dbName.endsWith(CATALOG_DB_SEPARATOR)) {
        // This means the DB name is null
        return new String[] {dbName.substring(1, dbName.length() - 1), null};
      } else if (dbName.endsWith(DB_EMPTY_MARKER)) \{
        // This means the DB name is empty
        return new String[] {dbName.substring(1, dbName.length() - 
DB_EMPTY_MARKER.length() - 1), ""};
      }
      String[] names = dbName.substring(1).split(CATALOG_DB_SEPARATOR, 2);
The method checks whether the given string in dbName ends with '#', and if it 
does, it assumes that db name is null. This is inconsistent to how the split is 
performed. The split operation splits the db name at the first occurrence of a 
'#'. That means "@foo#bar#" would be considered as having a null db name, but 
the split operation would split it into ["foo", "bar#"].

The right solution appears to be that the first occurrence of '#' is searched 
for. If the first occurrence of '#' is the last character in dbName, then and 
only then the db name should be considered null.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to