Skip to content

Conversation

KyleAMathews
Copy link
Collaborator

Overview

This PR improves the writeBatch API in @tanstack/query-db-collection by changing it from accepting an array of operations to accepting a callback function. This provides a more intuitive API similar to database transactions.

Changes

API Improvement

  • Changed writeBatch to accept a callback function instead of an array of operations
  • Write operations called within the callback are automatically batched together
  • This follows the same pattern as getActiveTransaction() in the core DB package

Before

collection.utils.writeBatch([
  { type: 'insert', data: { id: '1', name: 'Item 1' } },
  { type: 'update', data: { id: '2', name: 'Updated' } }
])

After

collection.utils.writeBatch(() => {
  collection.utils.writeInsert({ id: '1', name: 'Item 1' })
  collection.utils.writeUpdate({ id: '2', name: 'Updated' })
})

Documentation

Related Issues

🤖 Generated with Claude Code

- Changed writeBatch from accepting an array of operations to accepting a callback function
- Write operations called within the callback are automatically batched together
- This provides a more intuitive API similar to database transactions
- Added comprehensive documentation for Query Collections including direct writes feature
- Documented meta support feature from PR #363

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
Copy link

changeset-bot bot commented Aug 4, 2025

🦋 Changeset detected

Latest commit: 8ce177a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@tanstack/query-db-collection Minor
@tanstack/db-example-react-todo Patch

Not sure what this means? Click here to learn what changesets are.

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

Copy link

pkg-pr-new bot commented Aug 4, 2025

More templates

@tanstack/db

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

@tanstack/db-ivm

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

@tanstack/electric-db-collection

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

@tanstack/query-db-collection

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

@tanstack/react-db

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

@tanstack/solid-db

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

@tanstack/svelte-db

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

@tanstack/trailbase-db-collection

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

@tanstack/vue-db

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

commit: 8ce177a

Copy link
Contributor

github-actions bot commented Aug 4, 2025

Size Change: 0 B

Total Size: 58.2 kB

ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/change-events.js 1.13 kB
./packages/db/dist/esm/collection.js 9.85 kB
./packages/db/dist/esm/deferred.js 230 B
./packages/db/dist/esm/errors.js 2.98 kB
./packages/db/dist/esm/index.js 1.51 kB
./packages/db/dist/esm/indexes/auto-index.js 689 B
./packages/db/dist/esm/indexes/base-index.js 605 B
./packages/db/dist/esm/indexes/btree-index.js 1.47 kB
./packages/db/dist/esm/indexes/lazy-index.js 1.25 kB
./packages/db/dist/esm/local-only.js 827 B
./packages/db/dist/esm/local-storage.js 2.03 kB
./packages/db/dist/esm/optimistic-action.js 294 B
./packages/db/dist/esm/proxy.js 4.19 kB
./packages/db/dist/esm/query/builder/functions.js 575 B
./packages/db/dist/esm/query/builder/index.js 3.67 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 890 B
./packages/db/dist/esm/query/compiler/evaluators.js 1.48 kB
./packages/db/dist/esm/query/compiler/expressions.js 631 B
./packages/db/dist/esm/query/compiler/group-by.js 2.03 kB
./packages/db/dist/esm/query/compiler/index.js 1.74 kB
./packages/db/dist/esm/query/compiler/joins.js 1.56 kB
./packages/db/dist/esm/query/compiler/order-by.js 703 B
./packages/db/dist/esm/query/compiler/select.js 655 B
./packages/db/dist/esm/query/ir.js 318 B
./packages/db/dist/esm/query/live-query-collection.js 2.45 kB
./packages/db/dist/esm/query/optimizer.js 2.44 kB
./packages/db/dist/esm/SortedMap.js 1.24 kB
./packages/db/dist/esm/transactions.js 2.29 kB
./packages/db/dist/esm/utils.js 419 B
./packages/db/dist/esm/utils/btree.js 5.93 kB
./packages/db/dist/esm/utils/comparison.js 539 B
./packages/db/dist/esm/utils/index-optimization.js 1.62 kB

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

- Document how to merge incremental data with existing cache data
- Show example of handling additions, updates, and deletions
- Explain benefits of this approach vs full refetches

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
Copy link
Contributor

github-actions bot commented Aug 4, 2025

Size Change: 0 B

Total Size: 1.05 kB

ℹ️ View Unchanged
Filename Size
./packages/react-db/dist/esm/index.js 152 B
./packages/react-db/dist/esm/useLiveQuery.js 902 B

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

KyleAMathews and others added 6 commits August 4, 2025 12:39
- Add comprehensive JSDoc comments to QueryCollectionConfig interface
- Clarify that direct writes bypass optimistic updates and write to synced data store
- Document the two data stores (synced vs optimistic mutations)
- Explain what direct write operations do and don't do

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
- Fix cross-collection contamination by using WeakMap instead of global state
- Add proper error handling for async callbacks in writeBatch
- Prevent nested writeBatch calls with clear error messages
- Preserve type safety in batch context
- Change to minor version bump (breaking change)
- Add comprehensive tests for edge cases

Addresses all feedback from code review to ensure robust batch operations.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
Add multiple eslint-disable-next-line directives to suppress warnings
for runtime async detection. The callback is typed as () => void but users
might pass async functions, so we need runtime validation.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
Copy link
Collaborator

@samwillis samwillis left a comment

Choose a reason for hiding this comment

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

This looks great, very clear api design. Great update to the docs too :shipit:

@KyleAMathews KyleAMathews merged commit 1220d7e into main Aug 4, 2025
4 of 5 checks passed
@KyleAMathews KyleAMathews deleted the query-direct-write branch August 4, 2025 21:57
@github-actions github-actions bot mentioned this pull request Aug 4, 2025
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