## Environment
**Liquibase Version**: 4.0.0

**Database Vendor & Version**: DB2 for i (AS400 iSeries)

## Description
When dropping all tables, Liquibase tries to lookup foreign key constraints. It executes a database specific query to do this.
It has a specific query for DB2, but this only works for DB2 UDB, and not for DB2 for i.

## Steps To Reproduce
List the steps to reproduce the behavior.
Execute a dropAll against a DB2 for i database. 

## Actual Behavior
An exception occurs:
`Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in com.essers.legplanning.domain.support.internal.DomainSupportConfiguration: Invocation of init method failed; nested exception is liquibase.excep
tion.DatabaseException: liquibase.command.CommandExecutionException: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: com.ibm.as400.access.AS400JDBCSQLSyntaxErrorException: [SQL0204] REFERENCES in SYSCAT type *FILE not found.
`

## Expected/Desired Behavior
No exception occurs and tables are dropped.

## Additional Context
This worked on 3.6.3, but not anymore on 4.0.0. The reason for this is some internal Liquibase refactoring, where dropping the tables is now done differently. See StandardLockService.destroy [https://github.com/liquibase/liquibase/commit/7fa3d5305ef3a9b2cd7d7e79bde48a8cae82755c](https://github.com/liquibase/liquibase/commit/7fa3d5305ef3a9b2cd7d7e79bde48a8cae82755c)

A similar check has already built in to retrieve unique constraints. See [https://liquibase.jira.com/browse/CORE-1915](https://liquibase.jira.com/browse/CORE-1915)
An extra db2 check was built in (see [https://github.com/liquibase/liquibase/commit/b54ee3faee00c7d9a99036dc711094556b50298e)](https://github.com/liquibase/liquibase/commit/b54ee3faee00c7d9a99036dc711094556b50298e))
{{ if (database.getDatabaseProductName().startsWith("DB2 UDB for AS/400"))}}

## Test Requirements (Internal Liquibase QA)
This issue is a special case where we do not have access to the database platform in order to perform testing. Our validations will be to ensure the changes have not impacted other platforms.

#### Manual Test Requirements
Setup: Populate the database with tables with a foreign key. 

_Verify successful drop-all of tables associated by a foreign key._

* Oracle
* MSSQL
* MySQL
* Postgres
* Maria DB

#### Automated Test Requirements
* Verify all existing functional tests pass on the build server.
* Implement hasForeignKey and doesNothaveForeignKey methods for the DataBaseInstance class.
  * MySQLInstance.java
  * MariaDbInstance.java
  * MsSqlInstance.java
  * OracleInstance.java
  * NOTE: PostgresInstance.java is already implemented.
* Add a new test to DropAllTests.java that validates drop-all when a foreign key exists.
  * Test without a Pro license
  * Test CLI only (no Maven)
  * Test all supported platforms (multidb test)
  * Use the new format of CLI commands (LiquibaseNewCli) to construct Liquibase command line.
  * Make sure to add labels to new foreign key changesets added to the update changelog.
    * labels=”lb-683, community, addFk”



┆Issue is synchronized with this [Jira Bug](https://datical.atlassian.net/browse/LB-683) by [Unito](https://www.unito.io)
┆Fix Versions: Community 4.x

public List<CachedRow> bulkFetchQuery() throws SQLException, DatabaseException {
            if (database instanceof OracleDatabase) {
              return oracleQuery(true);
            } else if (database instanceof MSSQLDatabase) {
              return mssqlQuery(true);
            }
            CatalogAndSchema catalogAndSchema = new CatalogAndSchema(catalogName, schemaName).customize(database);
            try {
              return extract(databaseMetaData.getColumns(((AbstractJdbcDatabase) database)
                                .getJdbcCatalogName(catalogAndSchema), ((AbstractJdbcDatabase) database)
                                .getJdbcSchemaName(catalogAndSchema), SQL_FILTER_MATCH_ALL, SQL_FILTER_MATCH_ALL));
            } catch (SQLException e) {
              if (shouldReturnEmptyColumns(e)) {
                return new ArrayList<>();
              } else {
                throw e;
              }
            }
          }
          protected boolean shouldReturnEmptyColumns(SQLException e) {
            return e.getMessage().contains("references invalid table"); 
          }
          protected List<CachedRow> oracleQuery(boolean bulk) throws DatabaseException, SQLException {
            CatalogAndSchema catalogAndSchema = new CatalogAndSchema(catalogName, schemaName).customize(database);
            String jdbcSchemaName = ((AbstractJdbcDatabase) database).getJdbcSchemaName(catalogAndSchema);
            boolean collectIdentityData = database.getDatabaseMajorVersion() >= OracleDatabase.ORACLE_12C_MAJOR_VERSION;
            String sql = "select NULL AS TABLE_CAT, OWNER AS TABLE_SCHEM, 'NO' as IS_AUTOINCREMENT, cc.COMMENTS AS REMARKS," +
                "OWNER, TABLE_NAME, COLUMN_NAME, DATA_TYPE AS DATA_TYPE_NAME, DATA_TYPE_MOD, DATA_TYPE_OWNER, " +
                
                "DECODE (c.data_type, 'CHAR', 1, 'VARCHAR2', 12, 'NUMBER', 3, 'LONG', -1, 'DATE', " + "93" + ", 'RAW', -3, 'LONG RAW', -4, 'BLOB', 2004, 'CLOB', 2005, 'BFILE', -13, 'FLOAT', 6, 'TIMESTAMP(6)', 93, 'TIMESTAMP(6) WITH TIME ZONE', -101, 'TIMESTAMP(6) WITH LOCAL TIME ZONE', -102, 'INTERVAL YEAR(2) TO MONTH', -103, 'INTERVAL DAY(2) TO SECOND(6)', -104, 'BINARY_FLOAT', 100, 'BINARY_DOUBLE', 101, 'XMLTYPE', 2009, 1111) AS data_type, " +