{"record":{"id":"888caa626c85d71d","repo":"prestodb/presto","slug":"this-connector-does-not-support-row-level-delete","errorCode":null,"errorMessage":"This connector does not support row-level delete","messagePattern":"This connector does not support row-level delete","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"presto-spi/src/main/java/com/facebook/presto/spi/UpdatablePageSource.java","lineNumber":29,"sourceCode":" * See the License for the specific language governing permissions and\n * limitations under the License.\n */\npackage com.facebook.presto.spi;\n\nimport com.facebook.presto.common.Page;\nimport com.facebook.presto.common.block.Block;\nimport io.airlift.slice.Slice;\n\nimport java.util.Collection;\nimport java.util.List;\nimport java.util.concurrent.CompletableFuture;\n\npublic interface UpdatablePageSource\n        extends ConnectorPageSource\n{\n    default void deleteRows(Block rowIds)\n    {\n        throw new UnsupportedOperationException(\"This connector does not support row-level delete\");\n    }\n\n    default void updateRows(Page page, List<Integer> columnValueAndRowIdChannels)\n    {\n        throw new UnsupportedOperationException(\"This connector does not support row update\");\n    }\n\n    CompletableFuture<Collection<Slice>> finish();\n\n    default void abort() {}\n}\n","sourceCodeStart":11,"sourceCodeEnd":41,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-spi/src/main/java/com/facebook/presto/spi/UpdatablePageSource.java#L11-L41","documentation":"UpdatablePageSource declares default methods for row-level DELETE; the default implementation throws UnsupportedOperationException(\"This connector does not support row-level delete\"). Connectors that cannot delete rows inherit this default and fail at runtime when the engine issues DELETE against their table.","triggerScenarios":"Executing DELETE FROM <table> [WHERE ...] against a connector whose ConnectorPageSourceFactory produces a page source that does not override deleteRows (and whose connector advertises or is assumed to support updates).","commonSituations":"Running DELETE on a connector without row-level delete support (e.g. base JDBC connector variant or custom connector); connector metadata reports supportsReportingWrittenBytes-style update capability but the page source wasn't implemented; upgrading a connector and relying on capabilities not implemented.","solutions":["Remove the DELETE statement or restrict it to tables on connectors that support row deletes","Implement deleteRows in your custom connector's UpdatablePageSource and declare update/delete capabilities in metadata (ConnectorMetadata.deleteTable/applyDelete)","Filter DELETE statements in the query layer before they reach the unsupported connector"],"exampleFix":"// before\nclass MyPageSource implements UpdatablePageSource { /* deleteRows not overridden */ }\n// after\n@Override\npublic void deleteRows(Block rowIds) {\n    myStore.deleteRows(rowIds);\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { pageSource.deleteRows(rowIds); } catch (UnsupportedOperationException e) { /* connector lacks row-level delete; fall back to full-table rewrite or fail gracefully */ }","preventionTips":["Check connector update/delete capability before issuing DELETE statements","Implement deleteRows in custom UpdatablePageSource implementations","Document DELETE support per catalog for users"],"tags":["spi","unsupported-operation","connector","row-delete"],"backgroundTag":"unsupported-operation-connector-capability","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"}