Skip to content

queryDb

const queryDb: {<TResultSchema, TResult>(queryInput, options?): LiveQueryDef<TResult>; <TResultSchema, TResult>(queryInput, options?): LiveQueryDef<TResult>; }

Defined in: packages/@livestore/livestore/src/live-queries/db-query.ts:74

NOTE queryDb is only supposed to read data. Don’t use it to insert/update/delete data but use events instead.

When using contextual data when constructing the query, please make sure to include it in the deps option.

<TResultSchema, TResult>(queryInput, options?): LiveQueryDef<TResult>

TResultSchema

TResult = TResultSchema

QueryInputRaw<TResultSchema, readonly any[]> | QueryBuilder<TResultSchema, any, any>

DepKey

string

Used for debugging / devtools

(rows) => TResult

LiveQueryDef<TResult>

<TResultSchema, TResult>(queryInput, options?): LiveQueryDef<TResult>

TResultSchema

TResult = TResultSchema

(get) => QueryInputRaw<TResultSchema, readonly any[]> | (get) => QueryBuilder<TResultSchema, any, any>

DepKey

string

Used for debugging / devtools

(rows) => TResult

LiveQueryDef<TResult>

const todos$ = queryDb(tables.todos.where({ complete: true }))
// Group-by raw SQL query
const colorCounts$ = queryDb({
query: sql`SELECT color, COUNT(*) as count FROM todos WHERE complete = ? GROUP BY color`,
schema: Schema.Array(Schema.Struct({
color: Schema.String,
count: Schema.Number,
})),
bindValues: [1],
})
// Using contextual data when constructing the query
const makeFilteredQuery = (filter: string) =>
queryDb(tables.todos.where({ title: { op: 'like', value: filter } }), { deps: [filter] })
const filteredTodos$ = makeFilteredQuery('buy coffee')