{"record":{"id":"daede57ca89bac17","repo":"apache/beam","slug":"attempting-to-alter-catalog-s-with-unexpected-calcite-schema","errorCode":null,"errorMessage":"Attempting to alter catalog '%s' with unexpected Calcite Schema of type %s","messagePattern":"Attempting to alter catalog '(.+?)' with unexpected Calcite Schema of type (.+?)","errorType":"validation","errorClass":"SqlUtil.newContextException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/parser/SqlAlterCatalog.java","lineNumber":75,"sourceCode":"  public SqlAlterCatalog(\n      SqlParserPos pos,\n      @Nullable String scope,\n      SqlNode name,\n      @Nullable SqlNodeList setProps,\n      @Nullable SqlNodeList resetProps) {\n    super(pos, scope);\n    this.name = SqlDdlNodes.getIdentifier(name, pos);\n    this.setProps = setProps;\n    this.resetProps = resetProps;\n  }\n\n  @Override\n  public void execute(CalcitePrepare.Context context) {\n    final Pair<CalciteSchema, String> pair = SqlDdlNodes.schema(context, true, name);\n    Schema schema = pair.left.schema;\n\n    if (!(schema instanceof CatalogManagerSchema)) {\n      throw SqlUtil.newContextException(\n          name.getParserPosition(),\n          RESOURCE.internal(\n              \"Attempting to alter catalog '\"\n                  + SqlDdlNodes.name(name)\n                  + \"' with unexpected Calcite Schema of type \"\n                  + schema.getClass()));\n    }\n\n    CatalogSchema catalogSchema =\n        ((CatalogManagerSchema) schema).getCatalogSchema(SqlDdlNodes.getString(name));\n\n    Map<String, String> setPropsMap = SqlDdlNodes.getStringMap(setProps);\n    Collection<String> resetPropsList = SqlDdlNodes.getStringList(resetProps);\n\n    ImmutableList.Builder<String> overlappingPropsBuilder = ImmutableList.builder();\n    resetPropsList.stream().filter(setPropsMap::containsKey).forEach(overlappingPropsBuilder::add);\n    List<String> overlappingProps = overlappingPropsBuilder.build();\n    checkState(","sourceCodeStart":57,"sourceCodeEnd":93,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/parser/SqlAlterCatalog.java#L57-L93","documentation":"Thrown by SqlAlterCatalog.execute when the resolved schema for the catalog name is not a CatalogManagerSchema. ALTER CATALOG can only operate on Beam's CatalogManagerSchema; anything else (e.g. a plain BeamCalciteSchema) is rejected with this type-mismatch message.","triggerScenarios":"Executing `ALTER CATALOG name ...` where SqlDdlNodes.schema(context, true, name) resolves to a CalciteSchema whose schema object is not an instance of CatalogManagerSchema.","commonSituations":"Running ALTER CATALOG against a catalog defined outside Beam's catalog manager (a raw BeamCalciteSchema), mixing catalog implementations, or referencing the current/default schema that is not a managed catalog.","solutions":["Target a catalog registered in Beam's CatalogManagerSchema, not a plain schema.","Create the catalog first with CREATE CATALOG so it resolves to CatalogManagerSchema.","Check the fully qualified name resolves to the intended managed catalog.","Use ALTER DATABASE/TABLE statements for non-catalog schemas."],"exampleFix":"// before\nALTER CATALOG default SET 'k'='v'; -- resolves to non-manager schema\n// after\nCREATE CATALOG IF NOT EXISTS mycatalog;\nALTER CATALOG mycatalog SET 'k'='v';","handlingStrategy":"validation","validationCode":"// Java: verify schema type before ALTER CATALOG\nSchema schema = calciteSchema.schema;\nif (!(schema instanceof CatalogManagerSchema)) {\n  throw new IllegalStateException(\"ALTER CATALOG requires a managed catalog, got \" + schema.getClass());\n}","typeGuard":"boolean isManagedCatalog(Schema s) { return s instanceof org.apache.beam.sdk.extensions.sql.impl.CatalogManagerSchema; }","tryCatchPattern":null,"preventionTips":["Only run ALTER CATALOG against catalogs registered in the catalog manager.","Create the catalog first via CREATE CATALOG.","Do not qualify catalog names with database paths.","Log schema.getClass() when DDL resolution seems off."],"tags":["sql","ddl","catalog","type-mismatch"],"backgroundTag":"type-mismatch","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}