Type adapters API¶
This page documents the API for defining and customizing type adapters in ts-sql-query
. Type adapters transform values when reading from or writing to the database, supporting use cases such as custom serialization, non-standard boolean mappings, and enforced type casting.
Type adapters control how values are serialized when writing to the database and deserialized when reading from it. They can be applied at the field level (when defining a table or view), or globally by overriding the transformValueFromDB
and transformValueToDB
methods.
Info
Type adapter definitions are in the file ts-sql-query/TypeAdapter
.
Tip
The CustomBooleanTypeAdapter
lets you define custom values to represent booleans when they don’t match the database's default boolean format. For example, a column might store 'yes'
for true and 'no'
for false instead of using standard boolean types. See Custom booleans values for more information.
interface TypeAdapter {
transformValueFromDB(value: unknown, type: string, next: DefaultTypeAdapter): unknown
transformValueToDB(value: unknown, type: string, next: DefaultTypeAdapter): unknown
transformPlaceholder?(placeholder: string, type: string, forceTypeCast: boolean, valueSentToDB: unknown, next: DefaultTypeAdapter): string
}
interface DefaultTypeAdapter {
transformValueFromDB(value: unknown, type: string): unknown
transformValueToDB(value: unknown, type: string): unknown
transformPlaceholder(placeholder: string, type: string, forceTypeCast: boolean, valueSentToDB: unknown): string
}
class CustomBooleanTypeAdapter implements TypeAdapter {
readonly trueValue: number | string
readonly falseValue: number | string
constructor(trueValue: number, falseValue: number)
constructor(trueValue: string, falseValue: string)
transformValueFromDB(value: unknown, type: string, next: DefaultTypeAdapter): unknown
transformValueToDB(value: unknown, type: string, next: DefaultTypeAdapter): unknown
}
class ForceTypeCast implements TypeAdapter {
transformValueFromDB(value: unknown, type: string, next: DefaultTypeAdapter): unknown
transformValueToDB(value: unknown, type: string, next: DefaultTypeAdapter): unknown
transformPlaceholder(placeholder: string, type: string, _forceTypeCast: boolean, valueSentToDB: unknown, next: DefaultTypeAdapter): string
}
Tip
You can create custom type adapters by implementing the TypeAdapter
interface, giving you full control over how your application communicates with the database.