Skip to content

QueryModel

Read-only query interface for PostgreSQL tables. Use directly for read-only access, or extend via TableModel for full CRUD.

Import:

js
import { QueryModel } from 'pg-schemata';

Constructor

js
new QueryModel(db, pgp, schema, logger?)
ParameterTypeDescription
dbIDatabasepg-promise database or transaction instance
pgpIMainpg-promise library instance
schemaTableSchemaSchema definition object
loggerobjectOptional logger with .error() and .info() methods

Query Methods

findAll(options?)

Fetches all rows with optional pagination.

OptionTypeDefaultDescription
limitnumber50Maximum rows to return
offsetnumber0Rows to skip

Returns: Promise<Object[]>

findById(id)

Finds a single row by primary key.

ParameterTypeDescription
idstring | numberPrimary key value

Returns: Promise<Object | null>Throws: Error if ID is invalid

findByIdIncludingDeactivated(id)

Same as findById but includes soft-deleted records.

findOneBy(conditions, options?)

Finds the first row matching the given conditions.

ParameterTypeDescription
conditionsObject[]Array of condition objects
optionsobjectSame as findWhere options

Returns: Promise<Object | null>

findWhere(conditions?, joinType?, options?)

Finds rows matching conditions with full query options.

ParameterTypeDefaultDescription
conditionsObject[][]Array of condition objects
joinTypestring'AND''AND' or 'OR'
options.columnWhiteliststring[]nullColumns to return
options.filtersobject{}Additional filter object
options.orderBystring | string[]nullSort columns
options.limitnumbernullRow limit
options.offsetnumbernullRow offset
options.includeDeactivatedbooleanfalseInclude soft-deleted rows

Returns: Promise<Object[]>

findAfterCursor(cursor?, limit?, orderBy?, options?)

Keyset-based cursor pagination.

ParameterTypeDefaultDescription
cursorobject{}Cursor values keyed by orderBy columns
limitnumber50Maximum rows
orderBystring[]['id']Columns for ordering
options.descendingbooleanfalseDescending order
options.columnWhiteliststring[]nullColumns to return
options.filtersobject{}Additional filters
options.includeDeactivatedbooleanfalseInclude soft-deleted rows

Returns: Promise<{ rows: Object[], nextCursor: Object | null }>

findSoftDeleted(conditions?, joinType?, options?)

Returns only soft-deleted records.

Returns: Promise<Object[]>Throws: Error if soft delete is not enabled

isSoftDeleted(id)

Checks if a record is soft-deleted.

Returns: Promise<boolean>

Aggregation Methods

count(conditions?, joinType?, options?)

Alias for countWhere.

countWhere(conditions?, joinType?, options?)

Counts rows matching conditions.

ParameterTypeDefault
conditionsObject[][]
joinTypestring'AND'
options.filtersobject{}
options.includeDeactivatedbooleanfalse

Returns: Promise<number>

countAll(options?)

Counts all rows in the table.

Returns: Promise<number>

exists(conditions, options?)

Checks if any row matches the given conditions.

ParameterTypeDescription
conditionsobjectNon-empty condition object

Returns: Promise<boolean>

Utility Methods

sanitizeDto(dto, options?)

Returns a filtered copy of the DTO containing only valid column names.

OptionTypeDefaultDescription
includeImmutablebooleantrueInclude immutable columns

validateDto(data, validator, type?)

Validates a DTO or array of DTOs against a Zod schema.

Throws: SchemaDefinitionError with .cause containing Zod details

buildWhereClause(where, requireNonEmpty?, values?, joinType?, includeDeactivated?)

Builds a SQL WHERE clause from conditions.

Returns: { clause: string, values: any[] }

buildCondition(group, joiner?, values?)

Builds a SQL fragment from a group of condition objects.

Returns: string

buildValuesClause(data)

Generates a SQL-safe VALUES clause using the model's ColumnSet.

escapeName(name)

Escapes a column or table name using pg-promise.

setSchemaName(name)

Changes the PostgreSQL schema and regenerates the ColumnSet.

Returns: The model instance (for chaining)

reload(id, options?)

Reloads a record by ID. Alias for findById.

exportToSpreadsheet(filePath, where?, joinType?, options?)

Exports query results to an .xlsx file.

Returns: Promise<{ exported: number, filePath: string }>

Properties

PropertyTypeDescription
schemaTableSchemaThe full schema definition
schemaNamestringEscaped PostgreSQL schema name
tableNamestringEscaped table name

A lightweight Postgres-first ORM layer.