Skip to content

Conversation

@github-actions
Copy link
Contributor

@github-actions github-actions bot commented Nov 6, 2025

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@tanstack/db@0.5.0

Minor Changes

  • Implement 3-valued logic (true/false/unknown) for all comparison and logical operators. (#765)
    Queries with null/undefined values now behave consistently with SQL databases, where UNKNOWN results exclude rows from WHERE clauses.

    Breaking Change: This changes the behavior of WHERE and HAVING clauses when dealing with null and undefined values.

    Example 1: Equality checks with null

    Previously, this query would return all persons with age = null:

    q.from(...).where(({ person }) => eq(person.age, null))

    With 3-valued logic, eq(anything, null) evaluates to null (UNKNOWN) and is filtered out. Use isNull() instead:

    q.from(...).where(({ person }) => isNull(person.age))

    Example 2: Comparisons with null values

    Previously, this query would return persons with age < 18 OR age = null:

    q.from(...).where(({ person }) => lt(person.age, 18))

    With 3-valued logic, lt(null, 18) evaluates to null (UNKNOWN) and is filtered out. The same applies to undefined values. To include null values, combine with isNull():

    q.from(...).where(({ person }) =>
      or(lt(person.age, 18), isNull(person.age))
    )

Patch Changes

  • Add optional compareOptions to collection configuration. (#763)

  • Add expression helper utilities for parsing LoadSubsetOptions in queryFn. (#763)

    When using syncMode: 'on-demand', TanStack DB now provides helper functions to easily parse where clauses, orderBy, and limit predicates into your API's format:

    • parseWhereExpression: Parse where clauses with custom handlers for each operator
    • parseOrderByExpression: Parse order by into simple array format
    • extractSimpleComparisons: Extract simple AND-ed filters
    • parseLoadSubsetOptions: Convenience function to parse all options at once
    • walkExpression, extractFieldPath, extractValue: Lower-level helpers

    Example:

    import { parseLoadSubsetOptions } from "@tanstack/db"
    // or from "@tanstack/query-db-collection" (re-exported for convenience)
    
    queryFn: async (ctx) => {
      const { where, orderBy, limit } = ctx.meta.loadSubsetOptions
    
      const parsed = parseLoadSubsetOptions({ where, orderBy, limit })
    
      // Build API request from parsed filters
      const params = new URLSearchParams()
      parsed.filters.forEach(({ field, operator, value }) => {
        if (operator === "eq") {
          params.set(field.join("."), String(value))
        }
      })
    
      return fetch(`/api/products?${params}`).then((r) => r.json())
    }

    This eliminates the need to manually traverse expression AST trees when implementing predicate push-down.

  • Fix Uint8Array/Buffer comparison to work by content instead of reference. This enables proper equality checks for binary IDs like ULIDs in WHERE clauses using the eq function. (#779)

  • Add predicate comparison and merging utilities (isWhereSubset, intersectWherePredicates, unionWherePredicates, and related functions) to support predicate push-down in collection sync operations, enabling efficient tracking of loaded data ranges and preventing redundant server requests. Includes performance optimizations for large primitive IN predicates and full support for Date objects in equality, range, and IN clause comparisons. (#763)

  • Add support for orderBy and limit in currentStateAsChanges function (#763)

  • Adds an onDeduplicate callback on the DeduplicatedLoadSubset class which is called when a loadSubset call is deduplicated (#763)

  • Updated dependencies [7aedf12, 28f81b5]:

    • @tanstack/db-ivm@0.1.13

@tanstack/electric-db-collection@0.2.0

Minor Changes

  • Add timeout support to electricCollectionOptions matching strategies. You can now specify a custom timeout when returning txids from mutation handlers (onInsert, onUpdate, onDelete). (#798)

    Previously, users could only customize timeouts when manually calling collection.utils.awaitTxId(), but not when using the automatic txid matching strategy.

    Example:

    const collection = createCollection(
      electricCollectionOptions({
        // ... other config
        onInsert: async ({ transaction }) => {
          const newItem = transaction.mutations[0].modified
          const result = await api.todos.create({ data: newItem })
          // Specify custom timeout (in milliseconds)
          return { txid: result.txid, timeout: 10000 }
        },
      })
    )

    The timeout parameter is optional and defaults to 5000ms when not specified. It works with both single txids and arrays of txids.

Patch Changes

  • Fix array txid handling in electric collection handlers. When returning { txid: [txid1, txid2] } from an onInsert, onUpdate, or onDelete handler, the system would timeout with TimeoutWaitingForTxIdError instead of properly waiting for all txids. The bug was caused by passing array indices as timeout parameters when calling awaitTxId via .map(). (#795)

  • Handle predicates that are pushed down. (#763)

  • Updated dependencies [243a35a, f9d11fc, 7aedf12, 28f81b5, 28f81b5, f6ac7ea, 01093a7]:

    • @tanstack/db@0.5.0

@tanstack/angular-db@0.1.26

Patch Changes

@tanstack/db-ivm@0.1.13

Patch Changes

  • Fix Uint8Array/Buffer comparison to work by content instead of reference. This enables proper equality checks for binary IDs like ULIDs in WHERE clauses using the eq function. (#779)

  • Fix bug with setWindow on ordered queries that have no limit. (#763)

@tanstack/offline-transactions@1.0.0

Patch Changes

@tanstack/powersync-db-collection@0.1.4

Patch Changes

@tanstack/query-db-collection@1.0.0

Patch Changes

  • Add expression helper utilities for parsing LoadSubsetOptions in queryFn. (#763)

    When using syncMode: 'on-demand', TanStack DB now provides helper functions to easily parse where clauses, orderBy, and limit predicates into your API's format:

    • parseWhereExpression: Parse where clauses with custom handlers for each operator
    • parseOrderByExpression: Parse order by into simple array format
    • extractSimpleComparisons: Extract simple AND-ed filters
    • parseLoadSubsetOptions: Convenience function to parse all options at once
    • walkExpression, extractFieldPath, extractValue: Lower-level helpers

    Example:

    import { parseLoadSubsetOptions } from "@tanstack/db"
    // or from "@tanstack/query-db-collection" (re-exported for convenience)
    
    queryFn: async (ctx) => {
      const { where, orderBy, limit } = ctx.meta.loadSubsetOptions
    
      const parsed = parseLoadSubsetOptions({ where, orderBy, limit })
    
      // Build API request from parsed filters
      const params = new URLSearchParams()
      parsed.filters.forEach(({ field, operator, value }) => {
        if (operator === "eq") {
          params.set(field.join("."), String(value))
        }
      })
    
      return fetch(`/api/products?${params}`).then((r) => r.json())
    }

    This eliminates the need to manually traverse expression AST trees when implementing predicate push-down.

  • Handle pushed-down predicates (#763)

  • Updated dependencies [243a35a, f9d11fc, 7aedf12, 28f81b5, 28f81b5, f6ac7ea, 01093a7]:

    • @tanstack/db@0.5.0

@tanstack/react-db@0.1.44

Patch Changes

@tanstack/rxdb-db-collection@0.1.32

Patch Changes

@tanstack/solid-db@0.1.43

Patch Changes

@tanstack/svelte-db@0.1.43

Patch Changes

@tanstack/trailbase-db-collection@0.1.44

Patch Changes

@tanstack/vue-db@0.0.76

Patch Changes

@tanstack/db-example-react-todo@0.1.24

Patch Changes

  • Updated dependencies [1afb027, f9d11fc, 58f119a, 8f746db, 7aceffa]:
    • @tanstack/electric-db-collection@0.2.0
    • @tanstack/query-db-collection@1.0.0
    • @tanstack/react-db@0.1.44
    • @tanstack/trailbase-db-collection@0.1.44

@tanstack/db-collection-e2e@0.0.2

Patch Changes

@github-actions github-actions bot force-pushed the changeset-release/main branch 14 times, most recently from d845dc9 to 8760f20 Compare November 12, 2025 00:55
@github-actions github-actions bot force-pushed the changeset-release/main branch from 8760f20 to 6e4d318 Compare November 12, 2025 01:31
@KyleAMathews KyleAMathews merged commit 3e3504a into main Nov 12, 2025
@KyleAMathews KyleAMathews deleted the changeset-release/main branch November 12, 2025 15:26
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