Documentation / @zerotal/orm / index / ColumnBuilder
Class: ColumnBuilder<Locked>
Defined in: packages/orm/src/schema/ColumnDefinition.ts:48
Fluent per-column builder returned by every column-type method on
Blueprint (e.g. table.string('email')). Modifier methods mutate the
builder and return it for chaining; the column is compiled to a SQL fragment
only when the surrounding Blueprint calls ColumnBuilder.toColumnSQL.
Remarks
SQLite is the primary dialect. Modifiers that have no SQLite representation
(unsigned, comment, after, before, useCurrentOnUpdate) are accepted
and tracked but emit no SQL there. Column modifications via ColumnBuilder.alter
are dialect-specific and unsupported on SQLite (see Blueprint.toAlterSQL).
Example
table.string('email').unique().notNullable();
table.integer('age').unsigned().check('age >= 0').default(0);
table.uuid('id').primary();
table.dateTime('created_at').useCurrent();
Extended by
Type Parameters
Locked
Locked extends string = never
A phantom string union that accumulates the "traits" already
applied. Once a trait is present, methods sharing that trait return never, so
illegal re-application (e.g. .nullable().notNullable()) is a compile-time error
rather than a runtime one. The lock a method participates in is noted as
@locked in its docs; distinct traits can always be combined freely.
Constructors
Constructor
new ColumnBuilder<
Locked>(name,_sqlType,isPrimary?,isAutoIncrement?):ColumnBuilder<Locked>
Defined in: packages/orm/src/schema/ColumnDefinition.ts:62
Parameters
name
string
_sqlType
string
isPrimary?
boolean = false
isAutoIncrement?
boolean = false
Returns
ColumnBuilder<Locked>
Constraints
unique()
unique():
"unique"extendsLocked?never:ColumnBuilder<Locked|"unique">
Defined in: packages/orm/src/schema/ColumnDefinition.ts:144
Add inline UNIQUE to the column definition.
Returns
"unique" extends Locked ? never : ColumnBuilder<Locked | "unique">
Locked
unique
index()
index():
"index"extendsLocked?never:ColumnBuilder<"index"|Locked>
Defined in: packages/orm/src/schema/ColumnDefinition.ts:155
Request a standalone CREATE INDEX on this column after the table is created.
Ignored when the column is also unique() (a unique index already covers it).
Returns
"index" extends Locked ? never : ColumnBuilder<"index" | Locked>
Locked
index
primary()
primary():
"primary"extendsLocked?never:ColumnBuilder<Locked|"primary">
Defined in: packages/orm/src/schema/ColumnDefinition.ts:177
Promote this column to the primary key. Use this when you need a PK without auto-increment (e.g. UUID PKs).
Returns
"primary" extends Locked ? never : ColumnBuilder<Locked | "primary">
Locked
primary
check()
check(
expression):"check"extendsLocked?never:ColumnBuilder<Locked|"check">
Defined in: packages/orm/src/schema/ColumnDefinition.ts:194
Add a CHECK (expression) constraint.
Parameters
expression
string
A raw SQL boolean expression; not escaped or validated.
Returns
"check" extends Locked ? never : ColumnBuilder<Locked | "check">
Example
table.integer('age').unsigned().check('age >= 0');
table.string('status').check("status IN ('active','inactive')");
Locked
check
Modifiers
unsigned()
unsigned():
"unsigned"extendsLocked?never:ColumnBuilder<Locked|"unsigned">
Defined in: packages/orm/src/schema/ColumnDefinition.ts:166
Mark the column as unsigned. Tracked for documentation and multi-DB
compatibility — SQLite has no UNSIGNED type so no SQL is emitted.
Returns
"unsigned" extends Locked ? never : ColumnBuilder<Locked | "unsigned">
Locked
unsigned
storedAs()
storedAs(
expression):"generated"extendsLocked?never:ColumnBuilder<Locked|"generated">
Defined in: packages/orm/src/schema/ColumnDefinition.ts:210
Define a generated stored column (computed and physically stored). Requires SQLite ≥ 3.31.
Parameters
expression
string
Returns
"generated" extends Locked ? never : ColumnBuilder<Locked | "generated">
Example
table.string('full_name').storedAs("first_name || ' ' || last_name");
Locked
generated
virtualAs()
virtualAs(
expression):"generated"extendsLocked?never:ColumnBuilder<Locked|"generated">
Defined in: packages/orm/src/schema/ColumnDefinition.ts:223
Define a generated virtual column (computed on read, never stored). Requires SQLite ≥ 3.31.
Parameters
expression
string
Returns
"generated" extends Locked ? never : ColumnBuilder<Locked | "generated">
Locked
generated
alter()
alter():
this
Defined in: packages/orm/src/schema/ColumnDefinition.ts:246
Mark this column as a modification of an existing column rather than a new addition. Used inside Schema.table callbacks:
Schema.table('users', (table) => {
table.string('password').nullable().alter();
});
On MySQL / MariaDB emits MODIFY COLUMN; on PostgreSQL each attribute change
becomes a separate ALTER COLUMN sub-command. On SQLite this is a no-op — a
console warning is emitted and the statement is skipped (structural changes
require a full table rebuild).
Returns
this
change()
change():
this
Defined in: packages/orm/src/schema/ColumnDefinition.ts:255
Alias of ColumnBuilder.alter — mark this as a modification of an existing column.
Returns
this
comment()
comment(
_text):this
Defined in: packages/orm/src/schema/ColumnDefinition.ts:264
Attach a column comment. No-op on SQLite; intended to emit a COMMENT on
MySQL/Postgres.
Parameters
_text
string
Returns
this
after()
after(
_column):this
Defined in: packages/orm/src/schema/ColumnDefinition.ts:274
Place this column after column in the table (MySQL / MariaDB only).
Accepted but ignored on SQLite and PostgreSQL.
Parameters
_column
string
Returns
this
before()
before(
_column):this
Defined in: packages/orm/src/schema/ColumnDefinition.ts:284
Place this column before column in the table (MySQL / MariaDB only).
No-op on SQLite / PostgreSQL.
Parameters
_column
string
Returns
this
Nullability & defaults
nullable()
nullable():
"nullability"extendsLocked?never:ColumnBuilder<Locked|"nullability">
Defined in: packages/orm/src/schema/ColumnDefinition.ts:79
Allow NULL.
Returns
"nullability" extends Locked ? never : ColumnBuilder<Locked | "nullability">
Locked
nullability — shared with notNullable().
notNullable()
notNullable():
"nullability"extendsLocked?never:ColumnBuilder<Locked|"nullability">
Defined in: packages/orm/src/schema/ColumnDefinition.ts:89
Enforce NOT NULL explicitly (the default for non-PK columns).
Returns
"nullability" extends Locked ? never : ColumnBuilder<Locked | "nullability">
Locked
nullability — shared with nullable().
default()
default(
value):"default"extendsLocked?never:ColumnBuilder<"default"|Locked>
Defined in: packages/orm/src/schema/ColumnDefinition.ts:101
Add a DEFAULT clause. null serialises to NULL, JS booleans to 1 / 0,
strings are single-quoted (with quotes escaped), everything else stringified.
Parameters
value
unknown
The default value.
Returns
"default" extends Locked ? never : ColumnBuilder<"default" | Locked>
Locked
default
defaultTo()
defaultTo(
value):"default"extendsLocked?never:ColumnBuilder<"default"|Locked>
Defined in: packages/orm/src/schema/ColumnDefinition.ts:113
Alias for ColumnBuilder.default — identical behaviour, common alternative name.
Parameters
value
unknown
Returns
"default" extends Locked ? never : ColumnBuilder<"default" | Locked>
Locked
default
useCurrent()
useCurrent():
"default"extendsLocked?never:ColumnBuilder<"default"|Locked>
Defined in: packages/orm/src/schema/ColumnDefinition.ts:123
Set the column default to CURRENT_TIMESTAMP.
Useful for created_at-style columns without timestamps().
Returns
"default" extends Locked ? never : ColumnBuilder<"default" | Locked>
Locked
default
useCurrentOnUpdate()
useCurrentOnUpdate():
this
Defined in: packages/orm/src/schema/ColumnDefinition.ts:135
On MySQL / MariaDB: automatically update the column to CURRENT_TIMESTAMP
on every row change. No-op on SQLite and PostgreSQL.
Returns
this
Other
name
readonlyname:string
Defined in: packages/orm/src/schema/ColumnDefinition.ts:63