Skip to content

Fix infinite loop in orderBy#450

Merged
kevin-dp merged 6 commits intomainfrom
kevin/fix-orderBy-loop
Aug 26, 2025
Merged

Fix infinite loop in orderBy#450
kevin-dp merged 6 commits intomainfrom
kevin/fix-orderBy-loop

Conversation

@kevin-dp
Copy link
Contributor

This PR fixes #435

The bug was caused by our optimization of orderBy which tries to lazily load offset + limit items. However, if collection doesn't have enough items to fill the results, the query pipeline kept trying to load more data from the collection. I added a unit test that reproduced this bug.

This PR fixes the problem by introducing an explicit stop condition which avoids re-running the graph if we didn't load any data (because we exhausted the collection).

@changeset-bot
Copy link

changeset-bot bot commented Aug 26, 2025

🦋 Changeset detected

Latest commit: b97c161

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

This PR includes changesets to release 8 packages
Name Type
@tanstack/db Patch
@tanstack/electric-db-collection Patch
@tanstack/query-db-collection Patch
@tanstack/react-db 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

@kevin-dp kevin-dp requested a review from samwillis August 26, 2025 08:12
@pkg-pr-new
Copy link

pkg-pr-new bot commented Aug 26, 2025

More templates

@tanstack/db

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

@tanstack/db-ivm

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

@tanstack/electric-db-collection

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

@tanstack/query-db-collection

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

@tanstack/react-db

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

@tanstack/solid-db

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

@tanstack/svelte-db

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

@tanstack/trailbase-db-collection

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

@tanstack/vue-db

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

commit: 00dd8d6

@github-actions
Copy link
Contributor

github-actions bot commented Aug 26, 2025

Size Change: +74 B (+0.12%)

Total Size: 64 kB

Filename Size Change
./packages/db/dist/esm/query/live/collection-config-builder.js 2.51 kB +27 B (+1.09%)
./packages/db/dist/esm/query/live/collection-subscriber.js 2.29 kB +47 B (+2.09%)
ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/change-events.js 1.13 kB
./packages/db/dist/esm/collection.js 10.6 kB
./packages/db/dist/esm/deferred.js 230 B
./packages/db/dist/esm/errors.js 3 kB
./packages/db/dist/esm/index.js 1.52 kB
./packages/db/dist/esm/indexes/auto-index.js 745 B
./packages/db/dist/esm/indexes/base-index.js 605 B
./packages/db/dist/esm/indexes/btree-index.js 1.74 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.79 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.04 kB
./packages/db/dist/esm/query/compiler/index.js 2.14 kB
./packages/db/dist/esm/query/compiler/joins.js 2.36 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.17 kB
./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 333 B
./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 6.02 kB
./packages/db/dist/esm/utils/comparison.js 718 B
./packages/db/dist/esm/utils/index-optimization.js 1.62 kB

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

@github-actions
Copy link
Contributor

github-actions bot commented Aug 26, 2025

Size Change: 0 B

Total Size: 1.16 kB

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

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

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.

perfect :shipit:

@kevin-dp kevin-dp merged commit a937f4c into main Aug 26, 2025
6 checks passed
@kevin-dp kevin-dp deleted the kevin/fix-orderBy-loop branch August 26, 2025 11:54
@github-actions github-actions bot mentioned this pull request Aug 26, 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.

Order by clause causing maximum call stack size exceeded in Expo React Native app

2 participants