apache/beam · error · SqlUtil.newContextException

Attempting to drop a catalog

Error message

Attempting to drop a catalog '%s' with unexpected Calcite Schema of type %s

What it means

DROP CATALOG must resolve its target to a CatalogManagerSchema. If the resolved Calcite schema is any other type, execute() aborts with an internal error identifying the actual schema class, because only catalog-manager-backed schemas support catalog drops.

Solutions

  1. Only run DROP CATALOG against catalogs created via CREATE CATALOG with CatalogManagerSchema
  2. Check the catalog/database name for typos
  3. Use DROP DATABASE/DROP SCHEMA for non-catalog objects
  4. Verify the session has the catalog manager enabled
Defensive patterns

Strategy: validation

Validate before calling

if (!(schema instanceof CatalogManagerSchema)) {
  throw new IllegalStateException("DROP CATALOG requires a catalog-managed session");
}

Type guard

boolean supportsCatalogs(Schema s) { return s instanceof CatalogManagerSchema; }

Prevention

When it happens

Trigger: `DROP CATALOG <name>` where the name resolves to a non-CatalogManagerSchema (e.g. a plain or BeamCalciteSchema), typically when the multi-catalog feature is not enabled or the name binds to the wrong schema.

Common situations: Using DROP CATALOG in a default single-catalog Beam SQL setup; typos causing resolution to a database schema instead of a catalog; mixing sessions with and without catalog support.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


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

Appendix: source

Thrown at sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/parser/SqlDropCatalog.java:64

    this.catalogName = SqlDdlNodes.getIdentifier(catalogName, pos);
  }

  @Override
  public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {
    writer.keyword(getOperator().getName());
    if (ifExists) {
      writer.keyword("IF EXISTS");
    }
    catalogName.unparse(writer, leftPrec, rightPrec);
  }

  @Override
  public void execute(CalcitePrepare.Context context) {
    final Pair<CalciteSchema, String> pair = SqlDdlNodes.schema(context, true, catalogName);
    Schema schema = pair.left.schema;

    if (!(schema instanceof CatalogManagerSchema)) {
      throw SqlUtil.newContextException(
          catalogName.getParserPosition(),
          RESOURCE.internal(
              "Attempting to drop a catalog '"
                  + SqlDdlNodes.name(catalogName)
                  + "' with unexpected Calcite Schema of type "
                  + schema.getClass()));
    }

    ((CatalogManagerSchema) schema).dropCatalog(catalogName, ifExists);
  }

  @Override
  public List<SqlNode> getOperandList() {
    return ImmutableList.of(catalogName);
  }
}

View on GitHub (pinned to 12126d8942)