apache/beam · error · IllegalStateException

Database '' is not empty.

Error message

Database '' is not empty.

What it means

InMemoryCatalog.dropDatabase refuses to drop a database that still contains tables when cascade=false. The guard checks the database's MetaStore for non-empty tables and throws IllegalStateException, protecting against accidental loss of tables; use cascade=true to drop them along with the database.

Solutions

  1. Drop or empty the tables in the database first, then retry dropDatabase.
  2. Call dropDatabase with cascade=true to remove the database and all its tables in one step.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/catalog/InMemoryCatalog.java:115 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/a0f249644ee40d38. Report an issue: GitHub.

Appendix: source

Thrown at sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/catalog/InMemoryCatalog.java:115

    checkArgument(databaseExists(database), "Database '%s' does not exist.");
    currentDatabase = database;
  }

  @Override
  public @Nullable String currentDatabase() {
    return currentDatabase;
  }

  @Override
  public Collection<String> databases() {
    return databases;
  }

  @Override
  public boolean dropDatabase(String database, boolean cascade) {
    MetaStore metaStore = metaStores.get(database);
    if (!cascade && metaStore != null && !metaStore.getTables().isEmpty()) {
      throw new IllegalStateException("Database '" + database + "' is not empty.");
    }

    boolean removed = databases.remove(database);
    if (!removed) {
      return false;
    }
    if (database.equals(currentDatabase)) {
      currentDatabase = null;
    }
    metaStores.remove(database);
    return true;
  }

  @Override
  public void registerTableProvider(TableProvider provider) {
    tableProviders.put(provider.getTableType(), provider);
    metaStores.values().forEach(m -> m.registerProvider(provider));
  }

View on GitHub (pinned to 12126d8942)