Skip to content

fix(db): throw error when fn.select() is used with groupBy()#1324

Open
kevin-dp wants to merge 3 commits intomainfrom
fn-select-groupby
Open

fix(db): throw error when fn.select() is used with groupBy()#1324
kevin-dp wants to merge 3 commits intomainfrom
fn-select-groupby

Conversation

@kevin-dp
Copy link
Contributor

@kevin-dp kevin-dp commented Mar 3, 2026

Summary

  • fn.select() combined with groupBy() silently produced wrong results (only { __key_0: ... } instead of the expected computed fields) because processGroupBy() received undefined for selectClause
  • The root cause is that groupBy needs to statically analyze the SELECT clause to discover aggregate functions (count, sum, max, etc.), which is not possible with fn.select() since it's an opaque JavaScript function
  • Added FnSelectWithGroupByError that throws a clear error message directing users to use the standard .select() API instead

Closes #1189

Test plan

  • Added test that fn.select() + groupBy() throws FnSelectWithGroupByError
  • All existing group-by tests pass (100 tests)

🤖 Generated with Claude Code

fn.select() with groupBy() silently produced wrong results ({ __key_0: ... })
because the compiler cannot statically analyze an opaque function to discover
aggregate expressions needed by groupBy. This adds a clear error message
directing users to use the standard .select() API instead.

Closes #1189

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@changeset-bot
Copy link

changeset-bot bot commented Mar 3, 2026

🦋 Changeset detected

Latest commit: e60aa76

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

This PR includes changesets to release 12 packages
Name Type
@tanstack/db Patch
@tanstack/angular-db Patch
@tanstack/electric-db-collection Patch
@tanstack/offline-transactions Patch
@tanstack/powersync-db-collection Patch
@tanstack/query-db-collection Patch
@tanstack/react-db Patch
@tanstack/rxdb-db-collection Patch
@tanstack/solid-db Patch
@tanstack/svelte-db Patch
@tanstack/trailbase-db-collection Patch
@tanstack/vue-db 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

@pkg-pr-new
Copy link

pkg-pr-new bot commented Mar 3, 2026

More templates

@tanstack/angular-db

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

@tanstack/db

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

@tanstack/db-ivm

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

@tanstack/electric-db-collection

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

@tanstack/offline-transactions

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

@tanstack/powersync-db-collection

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

@tanstack/query-db-collection

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

@tanstack/react-db

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

@tanstack/rxdb-db-collection

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

@tanstack/solid-db

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

@tanstack/svelte-db

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

@tanstack/trailbase-db-collection

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

@tanstack/vue-db

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

commit: cd033fa

@github-actions
Copy link
Contributor

github-actions bot commented Mar 3, 2026

Size Change: +157 B (+0.17%)

Total Size: 92.8 kB

Filename Size Change
./packages/db/dist/esm/errors.js 4.83 kB +133 B (+2.83%)
./packages/db/dist/esm/index.js 2.71 kB +11 B (+0.41%)
./packages/db/dist/esm/query/compiler/index.js 2.05 kB +13 B (+0.64%)
ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/collection/change-events.js 1.39 kB
./packages/db/dist/esm/collection/changes.js 1.22 kB
./packages/db/dist/esm/collection/events.js 388 B
./packages/db/dist/esm/collection/index.js 3.32 kB
./packages/db/dist/esm/collection/indexes.js 1.1 kB
./packages/db/dist/esm/collection/lifecycle.js 1.75 kB
./packages/db/dist/esm/collection/mutations.js 2.34 kB
./packages/db/dist/esm/collection/state.js 3.49 kB
./packages/db/dist/esm/collection/subscription.js 3.71 kB
./packages/db/dist/esm/collection/sync.js 2.41 kB
./packages/db/dist/esm/deferred.js 207 B
./packages/db/dist/esm/event-emitter.js 748 B
./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 2.17 kB
./packages/db/dist/esm/indexes/lazy-index.js 1.1 kB
./packages/db/dist/esm/indexes/reverse-index.js 538 B
./packages/db/dist/esm/local-only.js 808 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 4.1 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 1.05 kB
./packages/db/dist/esm/query/compiler/evaluators.js 1.43 kB
./packages/db/dist/esm/query/compiler/expressions.js 430 B
./packages/db/dist/esm/query/compiler/group-by.js 2.23 kB
./packages/db/dist/esm/query/compiler/joins.js 2.11 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.45 kB
./packages/db/dist/esm/query/compiler/select.js 1.09 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.55 kB
./packages/db/dist/esm/query/live/collection-registry.js 264 B
./packages/db/dist/esm/query/live/collection-subscriber.js 2.42 kB
./packages/db/dist/esm/query/live/internal.js 145 B
./packages/db/dist/esm/query/optimizer.js 2.62 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 924 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 952 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 Mar 3, 2026

Size Change: 0 B

Total Size: 3.85 kB

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

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

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.

fn.select + groupBy combination doesn't work correctly

1 participant