Skip to content

ApiFull

ApiFull<TResult, TTableDef, TWithout> = object

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:130

TResult

TTableDef extends TableDefBase

TWithout extends ApiFeature

readonly count: () => QueryBuilder<number, TTableDef, TWithout | "row" | "count" | "select" | "orderBy" | "first" | "offset" | "limit" | "returning" | "onConflict">

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:175

Example:

db.todos.count()
db.todos.count().where('completed', true)

QueryBuilder<number, TTableDef, TWithout | "row" | "count" | "select" | "orderBy" | "first" | "offset" | "limit" | "returning" | "onConflict">


readonly delete: () => QueryBuilder<TResult, TTableDef, TWithout | "row" | "select" | "count" | "orderBy" | "first" | "offset" | "limit" | "onConflict">

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:274

Delete rows from the table that match the where clause

Example:

db.todos.delete().where({ status: 'completed' })

Note that it’s generally recommended to do soft-deletes for synced apps.

QueryBuilder<TResult, TTableDef, TWithout | "row" | "select" | "count" | "orderBy" | "first" | "offset" | "limit" | "onConflict">


readonly first: <TFallback>(options?) => QueryBuilder<TFallback | GetSingle<TResult>, TTableDef, TWithout | "row" | "first" | "orderBy" | "select" | "limit" | "offset" | "where" | "returning" | "onConflict">

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:209

Example:

db.todos.first()
db.todos.where('id', '123').first()

Query will throw if no rows are returned and no fallback is provided.

TFallback = never

() => TFallback | GetSingle<TResult> | "throws"

Default

'throws'

QueryBuilder<TFallback | GetSingle<TResult>, TTableDef, TWithout | "row" | "first" | "orderBy" | "select" | "limit" | "offset" | "where" | "returning" | "onConflict">


readonly insert: (values) => QueryBuilder<TResult, TTableDef, TWithout | "row" | "select" | "count" | "orderBy" | "first" | "offset" | "limit" | "where">

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:221

Insert a new row into the table

Example:

db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' })

TTableDef["insertSchema"]["Type"]

QueryBuilder<TResult, TTableDef, TWithout | "row" | "select" | "count" | "orderBy" | "first" | "offset" | "limit" | "where">


readonly limit: (limit) => QueryBuilder<TResult, TTableDef, TWithout | "row" | "limit" | "offset" | "first" | "orderBy" | "returning" | "onConflict">

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:199

Example:

db.todos.limit(10)

number

QueryBuilder<TResult, TTableDef, TWithout | "row" | "limit" | "offset" | "first" | "orderBy" | "returning" | "onConflict">


readonly offset: (offset) => QueryBuilder<TResult, TTableDef, TWithout | "row" | "offset" | "orderBy" | "returning" | "onConflict">

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:192

Example:

db.todos.offset(10)

number

QueryBuilder<TResult, TTableDef, TWithout | "row" | "offset" | "orderBy" | "returning" | "onConflict">


readonly onConflict: {<TTarget>(target, action): QueryBuilder<TResult, TTableDef, TWithout | "select" | "where" | "count" | "orderBy" | "offset" | "limit" | "first" | "row">; <TTarget>(target, action, updateValues): QueryBuilder<TResult, TTableDef, TWithout | "select" | "where" | "count" | "orderBy" | "offset" | "limit" | "first" | "row">; }

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:240

Example: If the row already exists, it will be ignored.

db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'ignore')

Example: If the row already exists, it will be replaced.

db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'replace')

Example: If the row already exists, it will be updated.

db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'update', { text: 'Buy soy milk' })

NOTE This API doesn’t yet support composite primary keys.

<TTarget>(target, action): QueryBuilder<TResult, TTableDef, TWithout | "select" | "where" | "count" | "orderBy" | "offset" | "limit" | "first" | "row">

TTarget extends string | number | symbol | readonly keyof TTableDef["sqliteDef"]["columns"][]

TTarget

"ignore" | "replace"

QueryBuilder<TResult, TTableDef, TWithout | "select" | "where" | "count" | "orderBy" | "offset" | "limit" | "first" | "row">

<TTarget>(target, action, updateValues): QueryBuilder<TResult, TTableDef, TWithout | "select" | "where" | "count" | "orderBy" | "offset" | "limit" | "first" | "row">

TTarget extends string | number | symbol | readonly keyof TTableDef["sqliteDef"]["columns"][]

TTarget

"update"

Partial<TTableDef["rowSchema"]["Type"]>

QueryBuilder<TResult, TTableDef, TWithout | "select" | "where" | "count" | "orderBy" | "offset" | "limit" | "first" | "row">


readonly orderBy: {<TColName>(col, direction): QueryBuilder<TResult, TTableDef, TWithout | "onConflict" | "returning">; <TParams>(params): QueryBuilder<TResult, TTableDef, TWithout | "onConflict" | "returning">; }

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:182

Example:

db.todos.orderBy('createdAt', 'desc')

<TColName>(col, direction): QueryBuilder<TResult, TTableDef, TWithout | "onConflict" | "returning">

TColName extends string

TColName

"asc" | "desc"

QueryBuilder<TResult, TTableDef, TWithout | "onConflict" | "returning">

<TParams>(params): QueryBuilder<TResult, TTableDef, TWithout | "onConflict" | "returning">

TParams extends OrderByParams<TTableDef>

TParams

QueryBuilder<TResult, TTableDef, TWithout | "onConflict" | "returning">


readonly returning: <TColumns>(…columns) => QueryBuilder<ReadonlyArray<{ readonly [K in TColumns]: TTableDef["sqliteDef"]["columns"][K]["schema"]["Type"] }>, TTableDef>

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:252

Similar to the .select API but for write queries (insert, update, delete).

Example:

db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).returning('id')

TColumns extends keyof TTableDef["sqliteDef"]["columns"] & string

TColumns[]

QueryBuilder<ReadonlyArray<{ readonly [K in TColumns]: TTableDef["sqliteDef"]["columns"][K]["schema"]["Type"] }>, TTableDef>


readonly select: {<TColumn>(pluckColumn): QueryBuilder<readonly TTableDef["sqliteDef"]["columns"][TColumn]["schema"]["Type"][], TTableDef, TWithout | "select" | "onConflict" | "returning" | "row">; <TColumns>(…columns): QueryBuilder<readonly { readonly [K in string]: TTableDef["sqliteDef"]["columns"][K]["schema"]["Type"] }[], TTableDef, TWithout | "select" | "count" | "onConflict" | "returning" | "row">; }

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:140

SELECT * is the default

Example:

db.todos.select('id', 'text', 'completed')
db.todos.select('id')

<TColumn>(pluckColumn): QueryBuilder<readonly TTableDef["sqliteDef"]["columns"][TColumn]["schema"]["Type"][], TTableDef, TWithout | "select" | "onConflict" | "returning" | "row">

Selects and plucks a single column

TColumn extends string

TColumn

QueryBuilder<readonly TTableDef["sqliteDef"]["columns"][TColumn]["schema"]["Type"][], TTableDef, TWithout | "select" | "onConflict" | "returning" | "row">

<TColumns>(…columns): QueryBuilder<readonly { readonly [K in string]: TTableDef["sqliteDef"]["columns"][K]["schema"]["Type"] }[], TTableDef, TWithout | "select" | "count" | "onConflict" | "returning" | "row">

Select multiple columns

TColumns extends string

TColumns[]

QueryBuilder<readonly { readonly [K in string]: TTableDef["sqliteDef"]["columns"][K]["schema"]["Type"] }[], TTableDef, TWithout | "select" | "count" | "onConflict" | "returning" | "row">


readonly update: (values) => QueryBuilder<TResult, TTableDef, TWithout | "row" | "select" | "count" | "orderBy" | "first" | "offset" | "limit" | "onConflict">

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:263

Update rows in the table that match the where clause

Example:

db.todos.update({ status: 'completed' }).where({ id: '123' })

Partial<TTableDef["rowSchema"]["Type"]>

QueryBuilder<TResult, TTableDef, TWithout | "row" | "select" | "count" | "orderBy" | "first" | "offset" | "limit" | "onConflict">


readonly where: {(params): QueryBuilder<TResult, TTableDef, TWithout | "select" | "row">; <TColName>(col, value): QueryBuilder<TResult, TTableDef, TWithout | "select" | "row">; <TColName>(col, op, value): QueryBuilder<TResult, TTableDef, TWithout | "select" | "row">; }

Defined in: packages/@livestore/common/dist/schema/state/sqlite/query-builder/api.d.ts:163

Notes:

  • All where clauses are ANDed together by default.
  • null values only support = and != which is translated to IS NULL and IS NOT NULL.

Example:

db.todos.where('completed', true)
db.todos.where('completed', '!=', true)
db.todos.where({ completed: true })
db.todos.where({ completed: { op: '!=', value: true } })

TODO: Also support OR

(params): QueryBuilder<TResult, TTableDef, TWithout | "select" | "row">

Partial<{ [K in string | number | symbol]: undefined | TTableDef[“sqliteDef”][“columns”][K][“schema”][“Type”] | { op: SingleValue; value: (…)[(…)][“columns”][K][“schema”][“Type”] } | { op: MultiValue; value: ReadonlyArray<(…)[(…)][K][“schema”][“Type”]> } }>

QueryBuilder<TResult, TTableDef, TWithout | "select" | "row">

<TColName>(col, value): QueryBuilder<TResult, TTableDef, TWithout | "select" | "row">

TColName extends string | number | symbol

TColName

TTableDef["sqliteDef"]["columns"][TColName]["schema"]["Type"]

QueryBuilder<TResult, TTableDef, TWithout | "select" | "row">

<TColName>(col, op, value): QueryBuilder<TResult, TTableDef, TWithout | "select" | "row">

TColName extends string | number | symbol

TColName

WhereOps

TTableDef["sqliteDef"]["columns"][TColName]["schema"]["Type"]

QueryBuilder<TResult, TTableDef, TWithout | "select" | "row">