code: private Set<String> getTablePrimaryKeys(
        String catalog, String schema, String table) {
      TableKey tableKey = new TableKey(catalog, schema, table);
      Set<String> primaryKeys = tablePrimaryKeysCache.get(tableKey);
      if (primaryKeys == null) {
        primaryKeys = loadAndCachePrimaryKeysForTable(tableKey);
      }
      return primaryKeys;
    }
docs: Gets a set of primary key column names given a table key (i.e. catalog,
  schema and table name).  The returned set may be cached as a result of
  previous requests for the same table key.
  
  <p>The result cannot be considered authoritative as since it depends on
  whether the JDBC driver property implements
  {@link java.sql.ResultSetMetaData#getTableName} and many drivers/databases
  do not.
  
  @param catalog The catalog for the table.  May be null.
  @param schema The schema for the table.  May be null.
  @param table The name of table.  May not be null.
  @return A set of primary key column names.  May be empty but
  will never be null.