Skip to content

dbeaver/pro#8899 use same model for updating result set - #4419

Open
yagudin10 wants to merge 15 commits into
develfrom
8899-result-set-update-refactor
Open

dbeaver/pro#8899 use same model for updating result set#4419
yagudin10 wants to merge 15 commits into
develfrom
8899-result-set-update-refactor

Conversation

@yagudin10

Copy link
Copy Markdown
Member

No description provided.

@yagudin10
yagudin10 requested a review from serge-rider June 22, 2026 16:20
@codacy-production

codacy-production Bot commented Jun 22, 2026

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 107 complexity · -4 duplication

Metric Results
Complexity 107
Duplication -4

View in Codacy

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.

@yagudin10
yagudin10 force-pushed the 8899-result-set-update-refactor branch from 26be921 to 290389e Compare August 31, 2026 09:25

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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 WebSQLProcessor with WebSQLDataUpdater + 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.

Comment on lines +49 to +53
@NotNull
@Override
public List<WebSQLResultsRow> getAllRows() {
return List.of();
}
Comment on lines +30 to +35
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;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why always 0? it has toi have row order number

this.finalRow = finalRow;
}

@NotNull

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is finalRow? You use it everywhere now and there no comments or explanations

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants