dbeaver/pro#8899 use same model for updating result set - #4419
dbeaver/pro#8899 use same model for updating result set#4419yagudin10 wants to merge 15 commits into
Conversation
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 107 |
| Duplication | -4 |
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
26be921 to
290389e
Compare
There was a problem hiding this comment.
🟡 Changes recommended
There are correctness/contract issues in the new update model and row implementation (notably getAllRows() returning an empty list and a potential null values array) that should be fixed before merging.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR refactors result-set data updates to use a unified DBD result set model/updater path, improving correctness around column positioning (vs ordinalPosition) and expanding support for document-style result sets and generated keys. It also adds/extends platform tests to validate the new behavior.
Changes:
- Replace custom update/insert/delete batching in
WebSQLProcessorwithWebSQLDataUpdater+WebDBDResultSetDataModel. - Make column and attribute positioning deterministic by using result-set array position instead of binding ordinal position.
- Add integration/unit tests for update value conversion, composite keys, array handling, generated keys, and document attribute positioning.
File summaries
| File | Description |
|---|---|
| server/test/io.cloudbeaver.test.platform/src/io/cloudbeaver/test/platform/sql/WebSQLResultsInfoTest.java | New unit tests validating stable attribute/document-id positions independent of ordinals. |
| server/test/io.cloudbeaver.test.platform/src/io/cloudbeaver/test/platform/sql/WebSQLDataUpdateTest.java | New integration tests for value conversion + batch update/insert/delete persistence. |
| server/test/io.cloudbeaver.test.platform/src/io/cloudbeaver/test/platform/sql/GenerateSQLResultSetTest.java | Adds tests for generated keys on insert and 3-column result set reads. |
| server/test/io.cloudbeaver.test.platform/src/io/cloudbeaver/test/platform/CEServerTestSuite.java | Includes new SQL update/info tests in CE suite. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLUtils.java | Extracts shared helpers for document mapping and input value conversion. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLResultsRow.java | Adapts web row to DBDValueRow and adds fields needed by updater flow. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryResultSet.java | Passes explicit column positions into column DTOs. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryResultColumn.java | Exposes stable position independent of binding ordinal. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryDataReceiver.java | Detects document attribute/id name and stores it in WebSQLResultsInfo; fixes identifier positions. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLProcessor.java | Refactors update/script generation to use WebSQLDataUpdater and new resultset model. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLDataLOBReceiver.java | Tightens nullability annotations for LOB receiver inputs/outputs. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLContextInfo.java | Persists detected document attribute into saved result info. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebExecutionSource.java | Makes execution source public + annotates constructor parameters. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebAbstractDBDResultSetModel.java | New shared base for DBD result-set models backed by WebSQLResultsInfo. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/resultset/WebSQLDataUpdater.java | New DBD updater implementation for web result-set updates (including document keys/files). |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/resultset/WebSQLDataStatementInfo.java | New statement info wrapper carrying final row values for key receiver updates. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/resultset/WebDBDResultSetDataModel.java | New update model providing added/updated/deleted row lists and final-row cell reads. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/resultset/KeyDataReceiver.java | New receiver to inject generated keys back into the final row values. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/impl/WebServiceSQL.java | Updates generator provider creation and truncated-value refill to use stable positions. |
| server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/impl/WebDBDResultSetDataProvider.java | Refactors provider to use the shared abstract model and row.getValues() API. |
| server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/service/sql/WebSQLResultsInfo.java | Adds stable position helpers and document attribute/id metadata to results info. |
Review details
- Files reviewed: 21/21 changed files
- Comments generated: 2
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| @NotNull | ||
| @Override | ||
| public List<WebSQLResultsRow> getAllRows() { | ||
| return List.of(); | ||
| } |
| public class WebSQLResultsRow implements DBDValueRow { | ||
|
|
||
| private Object[] data; | ||
| private Map<String, Object> updateValues; | ||
| private Map<String, Object> updateValues = Collections.emptyMap(); | ||
| private Object[] finalRow; | ||
| private Map<Integer, Object> originalKeyValues = Collections.emptyMap(); |
|
|
||
| @Override | ||
| public int getRowNumber() { | ||
| return 0; |
There was a problem hiding this comment.
Why always 0? it has toi have row order number
| this.finalRow = finalRow; | ||
| } | ||
|
|
||
| @NotNull |
There was a problem hiding this comment.
What is finalRow? You use it everywhere now and there no comments or explanations
… into 8899-result-set-update-refactor
No description provided.