Skip to content

Conversation

@samwillis
Copy link
Collaborator

🎯 Changes

Added comprehensive tests to packages/db-ivm/tests/operators/groupBy.test.ts and packages/db/tests/query/group-by-incremental-test.test.ts to verify the correct behavior of groupBy incremental updates.

This investigation aimed to reproduce a reported bug where groupBy emitted duplicate inserts without corresponding deletes, but the bug could not be reproduced in synchronous test scenarios at either the db-ivm or db level. The new tests confirm that the groupBy operator correctly emits paired delete and insert messages when aggregate values change.

✅ Checklist

  • I have followed the steps in the Contributing guide.
  • I have tested this code locally with pnpm test:pr.

🚀 Release Impact

  • This change affects published code, and I have generated a changeset.
  • This change is docs/CI/dev-only (no release).

Open in Cursor Open in Web

Add tests to verify that the groupBy operator correctly emits paired
delete+insert messages when aggregates change. These tests investigate
a reported bug where the D2 pipeline might emit an insert without a
corresponding delete in certain edge cases.

The tests verify:
- Incremental updates emit paired delete+insert for aggregate changes
- Rapid incremental updates maintain correct message pairing
- Multiple groups with interleaved updates emit correct pairs
- Message accumulation correctly pairs deletes and inserts

All tests pass at the db-ivm level, suggesting the issue may be at the
db package layer or involves specific timing conditions.
Add tests at the db package level to investigate the reported bug where
groupBy might emit inserts without corresponding deletes. These tests
complement the db-ivm level tests and verify:

- Basic incremental updates with same groupBy key
- Multiple incremental updates to same group
- Incremental updates with sum aggregate
- Multiple groups with incremental updates
- Batch then incremental updates

All tests pass, indicating the standard scenarios work correctly.
The bug may only manifest in specific async or timing conditions.
@cursor
Copy link

cursor bot commented Dec 17, 2025

Cursor Agent can help with this pull request. Just @cursor in comments and I'll start working on changes in this branch.
Learn more about Cursor Agents

@changeset-bot
Copy link

changeset-bot bot commented Dec 17, 2025

⚠️ No Changeset found

Latest commit: 181d1c4

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@pkg-pr-new
Copy link

pkg-pr-new bot commented Dec 17, 2025

More templates

@tanstack/angular-db

npm i https://pkg.pr.new/@tanstack/angular-db@1035

@tanstack/db

npm i https://pkg.pr.new/@tanstack/db@1035

@tanstack/db-ivm

npm i https://pkg.pr.new/@tanstack/db-ivm@1035

@tanstack/electric-db-collection

npm i https://pkg.pr.new/@tanstack/electric-db-collection@1035

@tanstack/offline-transactions

npm i https://pkg.pr.new/@tanstack/offline-transactions@1035

@tanstack/powersync-db-collection

npm i https://pkg.pr.new/@tanstack/powersync-db-collection@1035

@tanstack/query-db-collection

npm i https://pkg.pr.new/@tanstack/query-db-collection@1035

@tanstack/react-db

npm i https://pkg.pr.new/@tanstack/react-db@1035

@tanstack/rxdb-db-collection

npm i https://pkg.pr.new/@tanstack/rxdb-db-collection@1035

@tanstack/solid-db

npm i https://pkg.pr.new/@tanstack/solid-db@1035

@tanstack/svelte-db

npm i https://pkg.pr.new/@tanstack/svelte-db@1035

@tanstack/trailbase-db-collection

npm i https://pkg.pr.new/@tanstack/trailbase-db-collection@1035

@tanstack/vue-db

npm i https://pkg.pr.new/@tanstack/vue-db@1035

commit: 181d1c4

@github-actions
Copy link
Contributor

github-actions bot commented Dec 17, 2025

Size Change: 0 B

Total Size: 88.5 kB

ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/collection/change-events.js 1.39 kB
./packages/db/dist/esm/collection/changes.js 977 B
./packages/db/dist/esm/collection/events.js 388 B
./packages/db/dist/esm/collection/index.js 3.24 kB
./packages/db/dist/esm/collection/indexes.js 1.1 kB
./packages/db/dist/esm/collection/lifecycle.js 1.67 kB
./packages/db/dist/esm/collection/mutations.js 2.34 kB
./packages/db/dist/esm/collection/state.js 3.46 kB
./packages/db/dist/esm/collection/subscription.js 2.78 kB
./packages/db/dist/esm/collection/sync.js 2.38 kB
./packages/db/dist/esm/deferred.js 207 B
./packages/db/dist/esm/errors.js 4.27 kB
./packages/db/dist/esm/event-emitter.js 748 B
./packages/db/dist/esm/index.js 2.68 kB
./packages/db/dist/esm/indexes/auto-index.js 742 B
./packages/db/dist/esm/indexes/base-index.js 766 B
./packages/db/dist/esm/indexes/btree-index.js 1.93 kB
./packages/db/dist/esm/indexes/lazy-index.js 1.1 kB
./packages/db/dist/esm/indexes/reverse-index.js 513 B
./packages/db/dist/esm/local-only.js 837 B
./packages/db/dist/esm/local-storage.js 2.1 kB
./packages/db/dist/esm/optimistic-action.js 359 B
./packages/db/dist/esm/paced-mutations.js 496 B
./packages/db/dist/esm/proxy.js 3.75 kB
./packages/db/dist/esm/query/builder/functions.js 733 B
./packages/db/dist/esm/query/builder/index.js 3.96 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 917 B
./packages/db/dist/esm/query/compiler/evaluators.js 1.35 kB
./packages/db/dist/esm/query/compiler/expressions.js 430 B
./packages/db/dist/esm/query/compiler/group-by.js 1.8 kB
./packages/db/dist/esm/query/compiler/index.js 1.96 kB
./packages/db/dist/esm/query/compiler/joins.js 2 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.46 kB
./packages/db/dist/esm/query/compiler/select.js 1.07 kB
./packages/db/dist/esm/query/expression-helpers.js 1.43 kB
./packages/db/dist/esm/query/ir.js 673 B
./packages/db/dist/esm/query/live-query-collection.js 360 B
./packages/db/dist/esm/query/live/collection-config-builder.js 5.33 kB
./packages/db/dist/esm/query/live/collection-registry.js 264 B
./packages/db/dist/esm/query/live/collection-subscriber.js 1.79 kB
./packages/db/dist/esm/query/live/internal.js 130 B
./packages/db/dist/esm/query/optimizer.js 2.56 kB
./packages/db/dist/esm/query/predicate-utils.js 2.97 kB
./packages/db/dist/esm/query/subset-dedupe.js 921 B
./packages/db/dist/esm/scheduler.js 1.3 kB
./packages/db/dist/esm/SortedMap.js 1.3 kB
./packages/db/dist/esm/strategies/debounceStrategy.js 247 B
./packages/db/dist/esm/strategies/queueStrategy.js 428 B
./packages/db/dist/esm/strategies/throttleStrategy.js 246 B
./packages/db/dist/esm/transactions.js 2.9 kB
./packages/db/dist/esm/utils.js 881 B
./packages/db/dist/esm/utils/browser-polyfills.js 304 B
./packages/db/dist/esm/utils/btree.js 5.61 kB
./packages/db/dist/esm/utils/comparison.js 852 B
./packages/db/dist/esm/utils/cursor.js 457 B
./packages/db/dist/esm/utils/index-optimization.js 1.51 kB
./packages/db/dist/esm/utils/type-guards.js 157 B

compressed-size-action::db-package-size

@github-actions
Copy link
Contributor

github-actions bot commented Dec 17, 2025

Size Change: 0 B

Total Size: 3.35 kB

ℹ️ View Unchanged
Filename Size
./packages/react-db/dist/esm/index.js 225 B
./packages/react-db/dist/esm/useLiveInfiniteQuery.js 1.17 kB
./packages/react-db/dist/esm/useLiveQuery.js 1.12 kB
./packages/react-db/dist/esm/useLiveSuspenseQuery.js 431 B
./packages/react-db/dist/esm/usePacedMutations.js 401 B

compressed-size-action::react-db-package-size

Extended the test file to cover all scenarios from PR 1030:
- D2 output tracing to verify paired delete+insert emissions
- Direct bug reproduction tests for sync layer behavior
- Subquery pattern (groupBy as source for orderBy/limit)
- Rapid sequential inserts
- Multiple events in single batch

Investigation findings:
- All tests pass without the PR's defensive fix
- D2 correctly emits paired delete+insert for aggregate updates
- The accumulator correctly consolidates them into update operations
- The bug may only manifest in specific async/timing edge cases
  not covered by synchronous tests

These tests serve as regression tests for groupBy incremental updates.
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.

2 participants