Skip to content

Conversation

kevin-dp
Copy link
Contributor

@kevin-dp kevin-dp commented Oct 6, 2025

This PR modifies the query collection such that it creates a new query when predicates are pushed down. It passes the predicates to the query key builder function and also to the query function via a new tsDb namespace on the meta property of the context object.

An example:

import { createCollection } from "@tanstack/react-db"
import { queryCollectionOptions } from "@tanstack/query-db-collection"

const itemsPerPage = 20

export const todoCollection = createCollection(
  queryCollectionOptions({
    // Derive page number from limit, encode into the query key
    queryKey: ({ limit, orderBy: _orderBy, where: _where }) => {
      const page = computePageNumber(limit ?? itemsPerPage)
      return ["todos", { page }]
    },

    queryFn: async (ctx) => {
      const page = computePageNumber(ctx.meta?.tsDb?.limit ?? itemsPerPage)
      const res = await fetch(`/api/todos?page=${page}`)
      if (!res.ok) throw new Error("Failed to fetch todos")
      return res.json()
    },

    getKey: (item) => item.id,
    schema: todoSchema,
  })
)

function computePageNumber(limit: number): number {
  return Math.max(1, Math.ceil(limit / itemsPerPage))
}

Copy link

changeset-bot bot commented Oct 6, 2025

🦋 Changeset detected

Latest commit: 868b9d5

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 Patch
@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 Oct 6, 2025

More templates

@tanstack/angular-db

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

@tanstack/db

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

@tanstack/db-ivm

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

@tanstack/electric-db-collection

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

@tanstack/query-db-collection

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

@tanstack/react-db

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

@tanstack/rxdb-db-collection

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

@tanstack/solid-db

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

@tanstack/svelte-db

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

@tanstack/trailbase-db-collection

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

@tanstack/vue-db

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

commit: 868b9d5

Copy link
Contributor

github-actions bot commented Oct 6, 2025

Size Change: 0 B

Total Size: 75.9 kB

ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/collection/change-events.js 943 B
./packages/db/dist/esm/collection/changes.js 1.01 kB
./packages/db/dist/esm/collection/events.js 660 B
./packages/db/dist/esm/collection/index.js 3.31 kB
./packages/db/dist/esm/collection/indexes.js 1.16 kB
./packages/db/dist/esm/collection/lifecycle.js 1.8 kB
./packages/db/dist/esm/collection/mutations.js 2.5 kB
./packages/db/dist/esm/collection/state.js 3.82 kB
./packages/db/dist/esm/collection/subscription.js 1.83 kB
./packages/db/dist/esm/collection/sync.js 1.65 kB
./packages/db/dist/esm/deferred.js 230 B
./packages/db/dist/esm/errors.js 3.1 kB
./packages/db/dist/esm/index.js 1.58 kB
./packages/db/dist/esm/indexes/auto-index.js 806 B
./packages/db/dist/esm/indexes/base-index.js 835 B
./packages/db/dist/esm/indexes/btree-index.js 2 kB
./packages/db/dist/esm/indexes/lazy-index.js 1.21 kB
./packages/db/dist/esm/indexes/reverse-index.js 577 B
./packages/db/dist/esm/local-only.js 827 B
./packages/db/dist/esm/local-storage.js 2.02 kB
./packages/db/dist/esm/optimistic-action.js 294 B
./packages/db/dist/esm/proxy.js 3.86 kB
./packages/db/dist/esm/query/builder/functions.js 615 B
./packages/db/dist/esm/query/builder/index.js 4.04 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 938 B
./packages/db/dist/esm/query/compiler/evaluators.js 1.55 kB
./packages/db/dist/esm/query/compiler/expressions.js 760 B
./packages/db/dist/esm/query/compiler/group-by.js 2.04 kB
./packages/db/dist/esm/query/compiler/index.js 2.04 kB
./packages/db/dist/esm/query/compiler/joins.js 2.52 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.21 kB
./packages/db/dist/esm/query/compiler/select.js 1.28 kB
./packages/db/dist/esm/query/ir.js 785 B
./packages/db/dist/esm/query/live-query-collection.js 340 B
./packages/db/dist/esm/query/live/collection-config-builder.js 2.69 kB
./packages/db/dist/esm/query/live/collection-subscriber.js 1.92 kB
./packages/db/dist/esm/query/optimizer.js 3.08 kB
./packages/db/dist/esm/SortedMap.js 1.24 kB
./packages/db/dist/esm/transactions.js 3 kB
./packages/db/dist/esm/utils.js 1.01 kB
./packages/db/dist/esm/utils/browser-polyfills.js 365 B
./packages/db/dist/esm/utils/btree.js 6.01 kB
./packages/db/dist/esm/utils/comparison.js 754 B
./packages/db/dist/esm/utils/index-optimization.js 1.73 kB

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

Copy link
Contributor

github-actions bot commented Oct 6, 2025

Size Change: 0 B

Total Size: 1.47 kB

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

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

@kevin-dp kevin-dp force-pushed the kevin/pred-pushdown-to-sync-db branch from aa2e623 to 2ae236f Compare October 6, 2025 12:17
@kevin-dp kevin-dp force-pushed the kevin/pred-pushdown-query-coll branch from 074868c to 80b7b6d Compare October 6, 2025 13:42
@kevin-dp kevin-dp requested a review from samwillis October 6, 2025 13:45
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.

1 participant