Skip to content

#3944 fix: unit CALL subquery with UNWIND must not multiply outer rows#3945

Merged
robfrank merged 3 commits intomainfrom
fix/3944-unit-call-subquery-unwind-row-multiplication
Apr 21, 2026
Merged

#3944 fix: unit CALL subquery with UNWIND must not multiply outer rows#3945
robfrank merged 3 commits intomainfrom
fix/3944-unit-call-subquery-unwind-row-multiplication

Conversation

@robfrank
Copy link
Copy Markdown
Collaborator

Fixes #3944

Root cause

In SubqueryStep.executeInnerQuery(), all inner rows produced by the subquery were collected and returned to the outer query regardless of whether the inner statement had a RETURN clause. When UNWIND appears inside a unit subquery (no RETURN), it multiplies the inner rows, which then get merged 1:N with each outer row — leaking the inner cardinality.

Fix

Added a unit-subquery check in SubqueryStep.executeInnerQuery(): if innerStatement.getReturnClause() == null, consume all inner results for side effects (so CREATE/DELETE/MERGE execute correctly), then return a single empty ResultInternal. This is merged with the outer row via the existing mergeResults(), preserving exactly one output row per outer input row.

Tests

Two regression tests added to OpenCypherSubqueryTest:

  • unitCallSubqueryWithUnwindPreservesOuterRowCount — exact reproduction of the reported issue (was returning 6 rows for 3 persons × UNWIND range(1,2), now correctly returns 3)
  • unitCallSubqueryWithoutUnwindPreservesOuterRowCount — control case confirming unit subqueries without UNWIND still work

All 4715 OpenCypher tests pass with no regressions.

🤖 Generated with Claude Code

A unit subquery (CALL { ... } with no RETURN clause) was incorrectly leaking
inner UNWIND cardinality to the outer query. Each outer row was duplicated
by the number of UNWIND iterations instead of being emitted exactly once.

The fix: in SubqueryStep.executeInnerQuery(), detect when the inner statement
has no RETURN clause and consume all inner results for side effects (CREATE,
DELETE, MERGE, etc.) without propagating them to the output. A single empty
ResultInternal is returned so the outer row is preserved via mergeResults().

Two regression tests added to OpenCypherSubqueryTest:
- unitCallSubqueryWithUnwindPreservesOuterRowCount (exact repro of the issue)
- unitCallSubqueryWithoutUnwindPreservesOuterRowCount (control case)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@codacy-production
Copy link
Copy Markdown

codacy-production Bot commented Apr 21, 2026

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 0 complexity

Metric Results
Complexity 0

View in Codacy

🟢 Coverage 87.50% diff coverage · -8.64% coverage variation

Metric Results
Coverage variation -8.64% coverage variation
Diff coverage 87.50% diff coverage

View coverage diff in Codacy

Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (f2039a9) 117458 87108 74.16%
Head commit (27010e7) 148703 (+31245) 97436 (+10328) 65.52% (-8.64%)

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#3945) 8 7 87.50%

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

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. Give us feedback

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request addresses issue #3944 by ensuring that unit subqueries without a RETURN clause do not multiply the outer row count, even when using operations like UNWIND. The implementation in SubqueryStep.java now consumes the inner result set and returns a single result to preserve the outer row count. Feedback indicates a logic bug where the subquery fails to act as a filter when the inner query is empty, which violates standard Cypher behavior, and suggests using List.of() for better performance.

Comment on lines +343 to +349
if (innerStatement.getReturnClause() == null) {
while (resultSet.hasNext())
resultSet.next();
final List<Result> single = new ArrayList<>(1);
single.add(new ResultInternal());
return single;
}
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.

high

The current implementation of unit subqueries (no RETURN clause) has a logic bug: it always returns a single row even if the inner query produces no results. In Cypher, a subquery acts as a filter; if the inner query is empty, the outer row should be discarded (unless it is an OPTIONAL CALL).

Additionally, the list creation can be simplified using List.of() for better readability and performance.

Suggested change
if (innerStatement.getReturnClause() == null) {
while (resultSet.hasNext())
resultSet.next();
final List<Result> single = new ArrayList<>(1);
single.add(new ResultInternal());
return single;
}
if (innerStatement.getReturnClause() == null) {
boolean hasResults = false;
while (resultSet.hasNext()) {
resultSet.next();
hasResults = true;
}
return hasResults ? List.of(new ResultInternal()) : List.of();
}

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Partially applied: simplified to List.of(new ResultInternal()) since callers only iterate (never mutate) the returned list.

The filter semantics (return empty list when inner has no results) would be incorrect for unit subqueries. The Cypher spec states that a unit subquery (no RETURN) executes for side effects and must propagate each outer row exactly once, regardless of inner cardinality. The callers in this class already implement the filter logic for regular subqueries — applying it here would incorrectly drop outer rows when e.g. a MATCH inside the unit subquery finds nothing, which violates the spec.

@robfrank robfrank added this to the 26.4.1 milestone Apr 21, 2026
robfrank and others added 2 commits April 21, 2026 18:35
…letion()

When a vertex was received after edges in graphBatchLoad, the edge had
already been buffered (edgeCount=1). The old closeQuietly() call in the
catch block triggered batch.close() -> flush() ->
connectOutgoingEdgesParallel() -> async.waitCompletion(), blocking the
gRPC handler thread and preventing resp.onError() from being delivered.

Fix: null batchRef (guards onCompleted) and skip closeQuietly in the
onNext error path - buffered edges have no open transaction so nothing
needs cleanup. Also guard onCompleted with errorSent[0] check and use
getAndSet(null) in onError to prevent double-close.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@robfrank robfrank changed the title fix: unit CALL subquery with UNWIND must not multiply outer rows #3944 fix: unit CALL subquery with UNWIND must not multiply outer rows Apr 21, 2026
@robfrank robfrank merged commit bae159c into main Apr 21, 2026
20 of 24 checks passed
@robfrank robfrank deleted the fix/3944-unit-call-subquery-unwind-row-multiplication branch April 21, 2026 17:01
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 21, 2026

Codecov Report

❌ Patch coverage is 87.50000% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 64.87%. Comparing base (f2039a9) to head (27010e7).
⚠️ Report is 6 commits behind head on main.

Files with missing lines Patch % Lines
.../com/arcadedb/server/grpc/ArcadeDbGrpcService.java 75.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3945      +/-   ##
==========================================
- Coverage   65.23%   64.87%   -0.37%     
==========================================
  Files        1582     1582              
  Lines      117458   117464       +6     
  Branches    24959    24962       +3     
==========================================
- Hits        76628    76202     -426     
- Misses      30380    30859     +479     
+ Partials    10450    10403      -47     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

ExtReMLapin pushed a commit to ExtReMLapin/arcadedb that referenced this pull request Apr 22, 2026
…o [skip ci]

Bumps [marked](https://github.com/markedjs/marked) from 18.0.0 to 18.0.2.
Release notes

*Sourced from [marked's releases](https://github.com/markedjs/marked/releases).*

> v18.0.2
> -------
>
> [18.0.2](markedjs/marked@v18.0.1...v18.0.2) (2026-04-18)
> -----------------------------------------------------------------------------------
>
> ### Bug Fixes
>
> * fix infinite loop for indented code blank line ([ArcadeData#3947](https://redirect.github.com/markedjs/marked/issues/3947)) ([58a52e8](markedjs/marked@58a52e8))
>
> v18.0.1
> -------
>
> [18.0.1](markedjs/marked@v18.0.0...v18.0.1) (2026-04-17)
> -----------------------------------------------------------------------------------
>
> ### Bug Fixes
>
> * **rules:** ensure lookbehind regex is evaluated correctly by minifiers ([ArcadeData#3945](https://redirect.github.com/markedjs/marked/issues/3945)) ([abd907a](markedjs/marked@abd907a))


Commits

* [`c4f4529`](markedjs/marked@c4f4529) chore(release): 18.0.2 [skip ci]
* [`58a52e8`](markedjs/marked@58a52e8) fix: fix infinite loop for indented code blank line ([ArcadeData#3947](https://redirect.github.com/markedjs/marked/issues/3947))
* [`98b3824`](markedjs/marked@98b3824) chore(release): 18.0.1 [skip ci]
* [`abd907a`](markedjs/marked@abd907a) fix(rules): ensure lookbehind regex is evaluated correctly by minifiers ([ArcadeData#3945](https://redirect.github.com/markedjs/marked/issues/3945))
* [`96351c4`](markedjs/marked@96351c4) chore(deps-dev): bump marked-highlight from 2.2.3 to 2.2.4 ([ArcadeData#3946](https://redirect.github.com/markedjs/marked/issues/3946))
* [`c132699`](markedjs/marked@c132699) chore: update testutils ([ArcadeData#3942](https://redirect.github.com/markedjs/marked/issues/3942))
* See full diff in [compare view](markedjs/marked@v18.0.0...v18.0.2)
  
[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility\_score?dependency-name=marked&package-manager=npm\_and\_yarn&previous-version=18.0.0&new-version=18.0.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
  
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show  ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
mergify Bot added a commit that referenced this pull request May 3, 2026
…skip ci]

Bumps [org.postgresql:postgresql](https://github.com/pgjdbc/pgjdbc) from 42.7.10 to 42.7.11.
Release notes

*Sourced from [org.postgresql:postgresql's releases](https://github.com/pgjdbc/pgjdbc/releases).*

> v42.7.11
> --------
>
> Security
> --------
>
> * fix: Limit SCRAM PBKDF2 iterations accepted from the server.
>   pgjdbc was vulnerable to a client-side denial of service in SCRAM-SHA-256 authentication, where a malicious or compromised PostgreSQL server could specify an extremely large PBKDF2 iteration count, causing the client to consume unbounded CPU and potentially exhaust connection pools. The fix introduces a new scramMaxIterations connection property (defaulting to 100,000) to cap iteration counts before computation begins.
>   See the [Security Advisory](GHSA-98qh-xjc8-98pq) for more detail.
>   The following [CVE-2026-42198](https://nvd.nist.gov/vuln/detail/CVE-2026-42198) has been issued.
>
> Changes
> -------
>
> * fix: Add sources and javadocs to shaded published lib generation [`@​sehrope`](https://github.com/sehrope) ([#4043](https://redirect.github.com/pgjdbc/pgjdbc/issues/4043))
> * update Changelog and website for release of 42.7.11 [`@​davecramer`](https://github.com/davecramer) ([#4042](https://redirect.github.com/pgjdbc/pgjdbc/issues/4042))
> * Fix scram fix location in changelog and update published artifact developer list [`@​sehrope`](https://github.com/sehrope) ([#4041](https://redirect.github.com/pgjdbc/pgjdbc/issues/4041))
> * Restrict test with scram\_iterations to v16+ and release notes [`@​sehrope`](https://github.com/sehrope) ([#4040](https://redirect.github.com/pgjdbc/pgjdbc/issues/4040))
> * chore(deps): update ubuntu:24.04 docker digest to 84e77de [`@​renovate-bot`](https://github.com/renovate-bot) ([#4017](https://redirect.github.com/pgjdbc/pgjdbc/issues/4017))
> * test: add tests for QueryExecutor#getTransactionState [`@​vlsi`](https://github.com/vlsi) ([#4006](https://redirect.github.com/pgjdbc/pgjdbc/issues/4006))
> * chore(deps): update actions/create-github-app-token action to v2.2.2 [`@​renovate-bot`](https://github.com/renovate-bot) ([#3983](https://redirect.github.com/pgjdbc/pgjdbc/issues/3983))
> * fix: fix flaky CopyBothResponseTest by using WAL flush LSN [`@​vlsi`](https://github.com/vlsi) ([#3979](https://redirect.github.com/pgjdbc/pgjdbc/issues/3979))
> * fix: fix flaky replication restart tests by waiting for confirmed\_flush\_lsn [`@​vlsi`](https://github.com/vlsi) ([#3975](https://redirect.github.com/pgjdbc/pgjdbc/issues/3975))
> * test: fix flaky LogicalReplicationStatusTest by polling pg\_stat\_replication [`@​vlsi`](https://github.com/vlsi) ([#3974](https://redirect.github.com/pgjdbc/pgjdbc/issues/3974))
> * chore: replace Appveyor with ikalnytskyi/action-setup-postgres [`@​vlsi`](https://github.com/vlsi) ([#3966](https://redirect.github.com/pgjdbc/pgjdbc/issues/3966))
> * test: move test table creation from [`@​BeforeEach`](https://github.com/BeforeEach) to [`@​BeforeAll`](https://github.com/BeforeAll) [`@​vlsi`](https://github.com/vlsi) ([#3967](https://redirect.github.com/pgjdbc/pgjdbc/issues/3967))
> * Return jsonb as PGObject fixes Issue [#3926](https://redirect.github.com/pgjdbc/pgjdbc/issues/3926) [`@​davecramer`](https://github.com/davecramer) ([#3956](https://redirect.github.com/pgjdbc/pgjdbc/issues/3956))
> * Update docker scripts [`@​davecramer`](https://github.com/davecramer) ([#3958](https://redirect.github.com/pgjdbc/pgjdbc/issues/3958))
> * implement require\_auth, this is pretty much how libpq does this. [`@​davecramer`](https://github.com/davecramer) ([#3895](https://redirect.github.com/pgjdbc/pgjdbc/issues/3895))
> * docs: add SCRAM authentication test setup section to TESTING.md [`@​emmaeng700`](https://github.com/emmaeng700) ([#3945](https://redirect.github.com/pgjdbc/pgjdbc/issues/3945))
> * Add RequireServerVersion annotation for tests [`@​sehrope`](https://github.com/sehrope) ([#3939](https://redirect.github.com/pgjdbc/pgjdbc/issues/3939))
>
> 🐛 Bug Fixes
> -----------
>
> * fix: ensure extended protocol messages end with Sync message [`@​vlsi`](https://github.com/vlsi) ([#3728](https://redirect.github.com/pgjdbc/pgjdbc/issues/3728))
> * fix: enable cursor-based fetching in extended protocol when transaction started via SQL command [`@​vlsi`](https://github.com/vlsi) ([#3996](https://redirect.github.com/pgjdbc/pgjdbc/issues/3996))
> * fix: retry with SSL on IOException when sslMode=ALLOW [`@​vlsi`](https://github.com/vlsi) ([#3973](https://redirect.github.com/pgjdbc/pgjdbc/issues/3973))
> * fix: allow fallback to non-SSL connection when sslMode=prefer and sslResponseTimeout kicks in [`@​vlsi`](https://github.com/vlsi) ([#3968](https://redirect.github.com/pgjdbc/pgjdbc/issues/3968))
> * fix: catch SecurityException from setContextClassLoader on ForkJoinPool workers [`@​vlsi`](https://github.com/vlsi) ([#3962](https://redirect.github.com/pgjdbc/pgjdbc/issues/3962))
> * fix: use compareTo for LogSequenceNumber comparison [`@​vlsi`](https://github.com/vlsi) ([#3961](https://redirect.github.com/pgjdbc/pgjdbc/issues/3961))
> * fix: release COPY lock on IOException to prevent connection hang ([#3957](https://redirect.github.com/pgjdbc/pgjdbc/issues/3957)) [`@​vlsi`](https://github.com/vlsi) ([#3960](https://redirect.github.com/pgjdbc/pgjdbc/issues/3960))
>
> 🧰 Maintenance
> -------------
>
> * style: replace [`@​exception`](https://github.com/exception) with [`@​throws`](https://github.com/throws) in getBoolean javadoc [`@​vlsi`](https://github.com/vlsi) ([#4035](https://redirect.github.com/pgjdbc/pgjdbc/issues/4035))
> * chore: use `@​vlsi/github-actions-random-matrix` npm package [`@​vlsi`](https://github.com/vlsi) ([#4008](https://redirect.github.com/pgjdbc/pgjdbc/issues/4008))
> * chore: use tag names for pinning github actions, pin ikalnytskyi/action-setup-postgres [`@​vlsi`](https://github.com/vlsi) ([#4007](https://redirect.github.com/pgjdbc/pgjdbc/issues/4007))
> * chore: bump errorprone to 2.48.0 [`@​vlsi`](https://github.com/vlsi) ([#4005](https://redirect.github.com/pgjdbc/pgjdbc/issues/4005))
> * test: add [`@​DisableLogger`](https://github.com/DisableLogger) annotation to suppress expected log warnings in tests [`@​vlsi`](https://github.com/vlsi) ([#3971](https://redirect.github.com/pgjdbc/pgjdbc/issues/3971))
> * chore: suppress deprecations in test code to reduce build verbosity [`@​vlsi`](https://github.com/vlsi) ([#3972](https://redirect.github.com/pgjdbc/pgjdbc/issues/3972))
> * chore: replace log warning in ConnectionFactory.closeStream with Throwable.addSuppressed [`@​vlsi`](https://github.com/vlsi) ([#3970](https://redirect.github.com/pgjdbc/pgjdbc/issues/3970))
> * chore: use greedy pairwise coverage for CI matrix generation [`@​vlsi`](https://github.com/vlsi) ([#3965](https://redirect.github.com/pgjdbc/pgjdbc/issues/3965))
> * chore: use full version tags in GitHub Actions comments [`@​vlsi`](https://github.com/vlsi) ([#3963](https://redirect.github.com/pgjdbc/pgjdbc/issues/3963))
>
> ⬆️ Dependencies
> ---------------

... (truncated)


Changelog

*Sourced from [org.postgresql:postgresql's changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md).*

> [42.7.11] (2026-04-28)
> ----------------------
>
> ### Security
>
> * fix: Limit SCRAM PBKDF2 iterations accepted from the server.
>   pgjdbc was vulnerable to a client-side denial of service in SCRAM-SHA-256 authentication, where a malicious or compromised PostgreSQL server could specify an extremely large PBKDF2 iteration count, causing the client to consume unbounded CPU and potentially exhaust connection pools. The fix introduces a new scramMaxIterations connection property (defaulting to 100,000) to cap iteration counts before computation begins.
>   See the [Security Advisory](GHSA-98qh-xjc8-98pq) for more detail.
>   The following [CVE-2026-42198](https://nvd.nist.gov/vuln/detail/CVE-2026-42198) has been issued.
>
> ### Added
>
> * feat: implement require\_auth connection property, aligning with libpq behavior [PR [#3895](https://redirect.github.com/pgjdbc/pgjdbc/issues/3895)]([pgjdbc/pgjdbc#3895](https://redirect.github.com/pgjdbc/pgjdbc/pull/3895))
>
> ### Changed
>
> * chore: replace Appveyor CI with ikalnytskyi/action-setup-postgres [PR [#3966](https://redirect.github.com/pgjdbc/pgjdbc/issues/3966)]([pgjdbc/pgjdbc#3966](https://redirect.github.com/pgjdbc/pgjdbc/pull/3966))
> * chore: upgrade Gradle to v9 [PR [#3978](https://redirect.github.com/pgjdbc/pgjdbc/issues/3978)]([pgjdbc/pgjdbc#3978](https://redirect.github.com/pgjdbc/pgjdbc/pull/3978))
>
> ### Fixed
>
> * fix: ensure extended protocol messages end with Sync message [PR [#3728](https://redirect.github.com/pgjdbc/pgjdbc/issues/3728)]([pgjdbc/pgjdbc#3728](https://redirect.github.com/pgjdbc/pgjdbc/pull/3728))
> * fix: enable cursor-based fetching in extended protocol when transaction started via SQL command [PR [#3996](https://redirect.github.com/pgjdbc/pgjdbc/issues/3996)]([pgjdbc/pgjdbc#3996](https://redirect.github.com/pgjdbc/pgjdbc/pull/3996))
> * fix: retry with SSL on IOException when sslMode=ALLOW [PR [#3973](https://redirect.github.com/pgjdbc/pgjdbc/issues/3973)]([pgjdbc/pgjdbc#3973](https://redirect.github.com/pgjdbc/pgjdbc/pull/3973))
> * fix: make sure the driver honours connectTimeout when retrying the connection [PR [#3968](https://redirect.github.com/pgjdbc/pgjdbc/issues/3968)]([pgjdbc/pgjdbc#3968](https://redirect.github.com/pgjdbc/pgjdbc/pull/3968))
> * fix: allow fallback to non-SSL connection when sslMode=prefer and sslResponseTimeout kicks in [PR [#3968](https://redirect.github.com/pgjdbc/pgjdbc/issues/3968)]([pgjdbc/pgjdbc#3968](https://redirect.github.com/pgjdbc/pgjdbc/pull/3968))
> * fix: catch SecurityException from setContextClassLoader on ForkJoinPool workers [PR [#3962](https://redirect.github.com/pgjdbc/pgjdbc/issues/3962)]([pgjdbc/pgjdbc#3962](https://redirect.github.com/pgjdbc/pgjdbc/pull/3962))
> * fix: use compareTo for LogSequenceNumber comparison to handle unsigned values correctly [PR [#3961](https://redirect.github.com/pgjdbc/pgjdbc/issues/3961)]([pgjdbc/pgjdbc#3961](https://redirect.github.com/pgjdbc/pgjdbc/pull/3961))
> * fix: release COPY lock on IOException to prevent connection hang [PR [#3957](https://redirect.github.com/pgjdbc/pgjdbc/issues/3957)]([pgjdbc/pgjdbc#3957](https://redirect.github.com/pgjdbc/pgjdbc/pull/3957))
> * fix: return jsonb as PGObject instead of String [PR [#3956](https://redirect.github.com/pgjdbc/pgjdbc/issues/3956)]([pgjdbc/pgjdbc#3956](https://redirect.github.com/pgjdbc/pgjdbc/pull/3956))
> * fix: align SSL key file permission check with libpq [PR [#3952](https://redirect.github.com/pgjdbc/pgjdbc/issues/3952)]([pgjdbc/pgjdbc#3952](https://redirect.github.com/pgjdbc/pgjdbc/pull/3952))
> * fix: guard connection closed flag with a reentrant lock to protect against concurrent close [PR [#3905](https://redirect.github.com/pgjdbc/pgjdbc/issues/3905)]([pgjdbc/pgjdbc#3905](https://redirect.github.com/pgjdbc/pgjdbc/pull/3905))


Commits

* [`78e261f`](pgjdbc/pgjdbc@78e261f) fix: Add sources and javadocs to shaded published lib generation
* [`1e09fa0`](pgjdbc/pgjdbc@1e09fa0) update Changelog and website for release of 42.7.11 ([#4042](https://redirect.github.com/pgjdbc/pgjdbc/issues/4042))
* [`d479fa5`](pgjdbc/pgjdbc@d479fa5) Fix scram fix location in changelog and update published artifact developer l...
* [`b04fc46`](pgjdbc/pgjdbc@b04fc46) docs: Add scram max iters fix to changelog
* [`cf54822`](pgjdbc/pgjdbc@cf54822) test: Disable scram test on older version without scram\_iterations GUC
* [`7dbcc79`](pgjdbc/pgjdbc@7dbcc79) test: Add SCRAM max iteration tests
* [`c9d41d1`](pgjdbc/pgjdbc@c9d41d1) fix: Limit SCRAM PBKDF2 iterations accepted from the server
* [`a340cb2`](pgjdbc/pgjdbc@a340cb2) style: replace [`@​exception`](https://github.com/exception) with [`@​throws`](https://github.com/throws) in getBoolean javadoc
* [`77837f8`](pgjdbc/pgjdbc@77837f8) fix(deps): update dependency org.openrewrite.rewrite:org.openrewrite.rewrite....
* [`23af03b`](pgjdbc/pgjdbc@23af03b) chore(deps): update actions/checkout action to v6
* Additional commits viewable in [compare view](pgjdbc/pgjdbc@REL42.7.10...REL42.7.11)
  
[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility\_score?dependency-name=org.postgresql:postgresql&package-manager=maven&previous-version=42.7.10&new-version=42.7.11)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
  
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show  ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
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.

A unit CALL subquery that performs UNWIND and write operations may incorrectly multiply outer rows by the inner UNWIND cardinality.

1 participant