{"record":{"id":"d25c56d89246d70f","repo":"prestodb/presto","slug":"missing-table-d25c56","errorCode":"MISSING_TABLE","errorMessage":"Table '%s' does not exist","messagePattern":"Table '(.+?)' does not exist","errorType":"error_code","errorClass":"SemanticException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/execution/SetColumnTypeTask.java","lineNumber":69,"sourceCode":"    @Inject\n    public SetColumnTypeTask(Metadata metadata)\n    {\n        this.metadata = requireNonNull(metadata, \"metadata is null\");\n    }\n\n    @Override\n    public String getName()\n    {\n        return \"SET COLUMN TYPE\";\n    }\n\n    public ListenableFuture<Void> execute(SetColumnType statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, Session session, List<Expression> parameters, WarningCollector warningCollector, String query)\n    {\n        QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getTableName(), metadata);\n        Optional<TableHandle> tableHandle = metadata.getMetadataResolver(session).getTableHandle(tableName);\n        if (!tableHandle.isPresent()) {\n            if (!statement.isTableExists()) {\n                throw new SemanticException(MISSING_TABLE, statement, \"Table '%s' does not exist\", tableName);\n            }\n            return immediateFuture(null);\n        }\n\n        Optional<MaterializedViewDefinition> optionalMaterializedView = metadata.getMetadataResolver(session).getMaterializedView(tableName);\n        if (optionalMaterializedView.isPresent()) {\n            if (!statement.isTableExists()) {\n                throw new SemanticException(SemanticErrorCode.NOT_SUPPORTED, statement, \"'%s' is a materialized view, and alter column is not supported\", tableName);\n            }\n            return immediateFuture(null);\n        }\n\n        accessControl.checkCanAlterColumn(session.getRequiredTransactionId(), session.getIdentity(), session.getAccessControlContext(), tableName);\n\n        TableHandle tableHandleOptional = tableHandle.get();\n        Map<String, ColumnHandle> columnHandles = metadata.getColumnHandles(session, tableHandleOptional);\n        ColumnHandle column = columnHandles.get(statement.getColumnName().getValue());\n        if (column == null) {","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/execution/SetColumnTypeTask.java#L51-L87","documentation":"ALTER TABLE ... ALTER COLUMN <type> (SetColumnType) resolves the target table to a TableHandle before any type change. If the name does not resolve to an existing table and the statement lacks IF EXISTS semantics, it fails with MISSING_TABLE.","triggerScenarios":"ALTER TABLE <qualified name> ALTER COLUMN ... (type change) where getTableHandle returns empty and statement.isTableExists() is false.","commonSituations":"Typo in table or catalog name; table dropped by a concurrent job; session pointed at the wrong catalog; scripts written for a different environment's schema.","solutions":["Verify the fully qualified table name exists before running the ALTER","Correct the catalog/schema/table spelling in the statement","Use IF EXISTS semantics if a silent skip is intended"],"exampleFix":"// before\nALTER TABLE hive.default.ordrs ALTER COLUMN id SET DATA TYPE BIGINT;\n// after\nALTER TABLE hive.default.orders ALTER COLUMN id SET DATA TYPE BIGINT;","handlingStrategy":"validation","validationCode":"QualifiedObjectName name = createQualifiedObjectName(session, stmt, table, metadata);\nif (metadata.getMetadataResolver(session).getTableHandle(name).isEmpty()) {\n    throw new IllegalArgumentException(\"Table not found: \" + name);\n}","typeGuard":null,"tryCatchPattern":"try {\n    return task.execute(stmt, ...);\n} catch (SemanticException e) {\n    if (e.getCode() == SemanticErrorCode.MISSING_TABLE) {\n        // skip or report missing table\n    } else {\n        throw e;\n    }\n}","preventionTips":["Use fully qualified table names in migration scripts","Confirm the table exists before ALTER COLUMN type changes","Use IF EXISTS when silent skip is the desired behavior"],"tags":["sql","alter-table","table-not-found","type-change","semantic-error"],"backgroundTag":"table-does-not-exist","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}