@strapi/database 5.55.1 → 5.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dialects/dialect.d.ts +28 -0
- package/dist/dialects/dialect.d.ts.map +1 -1
- package/dist/dialects/dialect.js +29 -0
- package/dist/dialects/dialect.js.map +1 -1
- package/dist/dialects/dialect.mjs +29 -0
- package/dist/dialects/dialect.mjs.map +1 -1
- package/dist/dialects/mysql/index.d.ts +9 -0
- package/dist/dialects/mysql/index.d.ts.map +1 -1
- package/dist/dialects/mysql/index.js +37 -0
- package/dist/dialects/mysql/index.js.map +1 -1
- package/dist/dialects/mysql/index.mjs +37 -0
- package/dist/dialects/mysql/index.mjs.map +1 -1
- package/dist/dialects/postgresql/index.d.ts +7 -0
- package/dist/dialects/postgresql/index.d.ts.map +1 -1
- package/dist/dialects/postgresql/index.js +50 -0
- package/dist/dialects/postgresql/index.js.map +1 -1
- package/dist/dialects/postgresql/index.mjs +50 -0
- package/dist/dialects/postgresql/index.mjs.map +1 -1
- package/dist/dialects/sqlite/index.d.ts +9 -0
- package/dist/dialects/sqlite/index.d.ts.map +1 -1
- package/dist/dialects/sqlite/index.js +16 -0
- package/dist/dialects/sqlite/index.js.map +1 -1
- package/dist/dialects/sqlite/index.mjs +16 -0
- package/dist/dialects/sqlite/index.mjs.map +1 -1
- package/dist/entity-manager/entity-repository.js +1 -1
- package/dist/entity-manager/entity-repository.js.map +1 -1
- package/dist/entity-manager/entity-repository.mjs +1 -1
- package/dist/entity-manager/entity-repository.mjs.map +1 -1
- package/dist/entity-manager/index.d.ts.map +1 -1
- package/dist/entity-manager/index.js +38 -36
- package/dist/entity-manager/index.js.map +1 -1
- package/dist/entity-manager/index.mjs +38 -36
- package/dist/entity-manager/index.mjs.map +1 -1
- package/dist/entity-manager/morph-relations.d.ts.map +1 -1
- package/dist/entity-manager/morph-relations.js +3 -5
- package/dist/entity-manager/morph-relations.js.map +1 -1
- package/dist/entity-manager/morph-relations.mjs +3 -5
- package/dist/entity-manager/morph-relations.mjs.map +1 -1
- package/dist/entity-manager/regular-relations.js +3 -3
- package/dist/entity-manager/regular-relations.js.map +1 -1
- package/dist/entity-manager/regular-relations.mjs +3 -3
- package/dist/entity-manager/regular-relations.mjs.map +1 -1
- package/dist/entity-manager/relations-orderer.d.ts.map +1 -1
- package/dist/entity-manager/relations-orderer.js +4 -5
- package/dist/entity-manager/relations-orderer.js.map +1 -1
- package/dist/entity-manager/relations-orderer.mjs +2 -3
- package/dist/entity-manager/relations-orderer.mjs.map +1 -1
- package/dist/fields/biginteger.js +1 -1
- package/dist/fields/biginteger.js.map +1 -1
- package/dist/fields/biginteger.mjs +1 -1
- package/dist/fields/biginteger.mjs.map +1 -1
- package/dist/fields/boolean.js +1 -1
- package/dist/fields/boolean.js.map +1 -1
- package/dist/fields/boolean.mjs +1 -1
- package/dist/fields/boolean.mjs.map +1 -1
- package/dist/fields/number.js +1 -1
- package/dist/fields/number.js.map +1 -1
- package/dist/fields/number.mjs +1 -1
- package/dist/fields/number.mjs.map +1 -1
- package/dist/fields/shared/parsers.js +2 -2
- package/dist/fields/shared/parsers.js.map +1 -1
- package/dist/fields/shared/parsers.mjs +2 -2
- package/dist/fields/shared/parsers.mjs.map +1 -1
- package/dist/fields/string.js +1 -1
- package/dist/fields/string.js.map +1 -1
- package/dist/fields/string.mjs +1 -1
- package/dist/fields/string.mjs.map +1 -1
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -1
- package/dist/metadata/attribute-naming.d.ts +31 -0
- package/dist/metadata/attribute-naming.d.ts.map +1 -0
- package/dist/metadata/attribute-naming.js +39 -0
- package/dist/metadata/attribute-naming.js.map +1 -0
- package/dist/metadata/attribute-naming.mjs +37 -0
- package/dist/metadata/attribute-naming.mjs.map +1 -0
- package/dist/metadata/index.d.ts +5 -2
- package/dist/metadata/index.d.ts.map +1 -1
- package/dist/metadata/index.js +3 -0
- package/dist/metadata/index.js.map +1 -1
- package/dist/metadata/index.mjs +3 -1
- package/dist/metadata/index.mjs.map +1 -1
- package/dist/metadata/metadata.d.ts +10 -0
- package/dist/metadata/metadata.d.ts.map +1 -1
- package/dist/metadata/metadata.js +10 -2
- package/dist/metadata/metadata.js.map +1 -1
- package/dist/metadata/metadata.mjs +10 -2
- package/dist/metadata/metadata.mjs.map +1 -1
- package/dist/metadata/relations.d.ts.map +1 -1
- package/dist/metadata/relations.js +6 -5
- package/dist/metadata/relations.js.map +1 -1
- package/dist/metadata/relations.mjs +6 -5
- package/dist/metadata/relations.mjs.map +1 -1
- package/dist/migrations/common.d.ts +2 -0
- package/dist/migrations/common.d.ts.map +1 -1
- package/dist/migrations/common.js.map +1 -1
- package/dist/migrations/common.mjs.map +1 -1
- package/dist/migrations/file-builder.d.ts +97 -0
- package/dist/migrations/file-builder.d.ts.map +1 -0
- package/dist/migrations/file-builder.js +251 -0
- package/dist/migrations/file-builder.js.map +1 -0
- package/dist/migrations/file-builder.mjs +240 -0
- package/dist/migrations/file-builder.mjs.map +1 -0
- package/dist/migrations/index.d.ts +3 -2
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +6 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/index.mjs +6 -0
- package/dist/migrations/index.mjs.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs +1 -1
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -1
- package/dist/migrations/resolver.d.ts.map +1 -1
- package/dist/migrations/resolver.js +4 -1
- package/dist/migrations/resolver.js.map +1 -1
- package/dist/migrations/resolver.mjs +4 -1
- package/dist/migrations/resolver.mjs.map +1 -1
- package/dist/query/helpers/order-by.d.ts.map +1 -1
- package/dist/query/helpers/order-by.js +3 -4
- package/dist/query/helpers/order-by.js.map +1 -1
- package/dist/query/helpers/order-by.mjs +3 -4
- package/dist/query/helpers/order-by.mjs.map +1 -1
- package/dist/query/helpers/populate/apply.d.ts.map +1 -1
- package/dist/query/helpers/populate/apply.js +46 -30
- package/dist/query/helpers/populate/apply.js.map +1 -1
- package/dist/query/helpers/populate/apply.mjs +46 -30
- package/dist/query/helpers/populate/apply.mjs.map +1 -1
- package/dist/query/helpers/populate/process.js +3 -3
- package/dist/query/helpers/populate/process.js.map +1 -1
- package/dist/query/helpers/populate/process.mjs +3 -3
- package/dist/query/helpers/populate/process.mjs.map +1 -1
- package/dist/query/helpers/search.js +2 -2
- package/dist/query/helpers/search.js.map +1 -1
- package/dist/query/helpers/search.mjs +2 -2
- package/dist/query/helpers/search.mjs.map +1 -1
- package/dist/query/helpers/streams/readable.js +3 -3
- package/dist/query/helpers/streams/readable.js.map +1 -1
- package/dist/query/helpers/streams/readable.mjs +3 -3
- package/dist/query/helpers/streams/readable.mjs.map +1 -1
- package/dist/query/helpers/transform.d.ts.map +1 -1
- package/dist/query/helpers/transform.js +6 -13
- package/dist/query/helpers/transform.js.map +1 -1
- package/dist/query/helpers/transform.mjs +6 -9
- package/dist/query/helpers/transform.mjs.map +1 -1
- package/dist/query/helpers/where.js +13 -9
- package/dist/query/helpers/where.js.map +1 -1
- package/dist/query/helpers/where.mjs +13 -9
- package/dist/query/helpers/where.mjs.map +1 -1
- package/dist/query/query-builder.d.ts.map +1 -1
- package/dist/query/query-builder.js +35 -29
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/query-builder.mjs +35 -29
- package/dist/query/query-builder.mjs.map +1 -1
- package/dist/schema/builder.js +5 -5
- package/dist/schema/builder.js.map +1 -1
- package/dist/schema/builder.mjs +5 -5
- package/dist/schema/builder.mjs.map +1 -1
- package/dist/schema/diff.js +12 -12
- package/dist/schema/diff.js.map +1 -1
- package/dist/schema/diff.mjs +12 -12
- package/dist/schema/diff.mjs.map +1 -1
- package/dist/schema/index.d.ts +3 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +6 -0
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/index.mjs +6 -0
- package/dist/schema/index.mjs.map +1 -1
- package/dist/schema/rename-helpers.d.ts +78 -0
- package/dist/schema/rename-helpers.d.ts.map +1 -0
- package/dist/schema/rename-helpers.js +235 -0
- package/dist/schema/rename-helpers.js.map +1 -0
- package/dist/schema/rename-helpers.mjs +233 -0
- package/dist/schema/rename-helpers.mjs.map +1 -0
- package/dist/utils/async-curry.d.ts.map +1 -1
- package/dist/utils/async-curry.js +1 -2
- package/dist/utils/async-curry.js.map +1 -1
- package/dist/utils/async-curry.mjs +1 -2
- package/dist/utils/async-curry.mjs.map +1 -1
- package/dist/utils/identifiers/hash.d.ts.map +1 -1
- package/dist/utils/identifiers/hash.js +1 -2
- package/dist/utils/identifiers/hash.js.map +1 -1
- package/dist/utils/identifiers/hash.mjs +1 -2
- package/dist/utils/identifiers/hash.mjs.map +1 -1
- package/dist/utils/identifiers/index.js +8 -10
- package/dist/utils/identifiers/index.js.map +1 -1
- package/dist/utils/identifiers/index.mjs +8 -6
- package/dist/utils/identifiers/index.mjs.map +1 -1
- package/dist/validations/relations/bidirectional.js +1 -1
- package/dist/validations/relations/bidirectional.js.map +1 -1
- package/dist/validations/relations/bidirectional.mjs +1 -1
- package/dist/validations/relations/bidirectional.mjs.map +1 -1
- package/package.json +6 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import _ from 'lodash
|
|
1
|
+
import _ from 'lodash';
|
|
2
2
|
import DatabaseError from '../errors/database.mjs';
|
|
3
3
|
import { transactionCtx } from '../transaction-context.mjs';
|
|
4
4
|
import { isKnexQuery } from '../utils/knex.mjs';
|
|
@@ -14,7 +14,7 @@ import ReadableStrapiQuery from './helpers/streams/readable.mjs';
|
|
|
14
14
|
const createQueryBuilder = (uid, db, initialState = {})=>{
|
|
15
15
|
const meta = db.metadata.get(uid);
|
|
16
16
|
const { tableName } = meta;
|
|
17
|
-
const state = _.defaults({
|
|
17
|
+
const state = _.defaults({}, initialState, {
|
|
18
18
|
type: 'select',
|
|
19
19
|
select: [],
|
|
20
20
|
count: null,
|
|
@@ -40,7 +40,7 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
|
|
|
40
40
|
filters: null,
|
|
41
41
|
search: null,
|
|
42
42
|
processed: false
|
|
43
|
-
}
|
|
43
|
+
});
|
|
44
44
|
const getAlias = ()=>{
|
|
45
45
|
const alias = `t${state.aliasCounter}`;
|
|
46
46
|
state.aliasCounter += 1;
|
|
@@ -55,14 +55,18 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
|
|
|
55
55
|
},
|
|
56
56
|
select (args) {
|
|
57
57
|
state.type = 'select';
|
|
58
|
-
state.select =
|
|
58
|
+
state.select = [
|
|
59
|
+
...new Set(_.castArray(args))
|
|
60
|
+
];
|
|
59
61
|
return this;
|
|
60
62
|
},
|
|
61
63
|
addSelect (args) {
|
|
62
|
-
state.select =
|
|
63
|
-
...
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
state.select = [
|
|
65
|
+
...new Set([
|
|
66
|
+
...state.select,
|
|
67
|
+
..._.castArray(args)
|
|
68
|
+
])
|
|
69
|
+
];
|
|
66
70
|
return this;
|
|
67
71
|
},
|
|
68
72
|
insert (data) {
|
|
@@ -166,33 +170,33 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
|
|
|
166
170
|
},
|
|
167
171
|
init (params = {}) {
|
|
168
172
|
const { _q: searchQuery, filters, where, select, limit, offset, orderBy, groupBy, populate } = params;
|
|
169
|
-
if (
|
|
173
|
+
if (where != null) {
|
|
170
174
|
this.where(where);
|
|
171
175
|
}
|
|
172
|
-
if (
|
|
176
|
+
if (searchQuery != null) {
|
|
173
177
|
this.search(searchQuery);
|
|
174
178
|
}
|
|
175
|
-
if (
|
|
179
|
+
if (select != null) {
|
|
176
180
|
this.select(select);
|
|
177
181
|
} else {
|
|
178
182
|
this.select('*');
|
|
179
183
|
}
|
|
180
|
-
if (
|
|
184
|
+
if (limit != null) {
|
|
181
185
|
this.limit(limit);
|
|
182
186
|
}
|
|
183
|
-
if (
|
|
187
|
+
if (offset != null) {
|
|
184
188
|
this.offset(offset);
|
|
185
189
|
}
|
|
186
|
-
if (
|
|
190
|
+
if (orderBy != null) {
|
|
187
191
|
this.orderBy(orderBy);
|
|
188
192
|
}
|
|
189
|
-
if (
|
|
193
|
+
if (groupBy != null) {
|
|
190
194
|
this.groupBy(groupBy);
|
|
191
195
|
}
|
|
192
|
-
if (
|
|
196
|
+
if (populate != null) {
|
|
193
197
|
this.populate(populate);
|
|
194
198
|
}
|
|
195
|
-
if (
|
|
199
|
+
if (filters != null) {
|
|
196
200
|
this.filters(filters);
|
|
197
201
|
}
|
|
198
202
|
return this;
|
|
@@ -236,7 +240,7 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
|
|
|
236
240
|
if (key.indexOf('.') >= 0) {
|
|
237
241
|
return key;
|
|
238
242
|
}
|
|
239
|
-
if (
|
|
243
|
+
if (alias != null) {
|
|
240
244
|
return `${alias}.${key}`;
|
|
241
245
|
}
|
|
242
246
|
return this.mustUseAlias() ? `${this.alias}.${key}` : key;
|
|
@@ -273,15 +277,15 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
|
|
|
273
277
|
uid,
|
|
274
278
|
db
|
|
275
279
|
});
|
|
276
|
-
if (
|
|
277
|
-
if (
|
|
280
|
+
if (state.filters != null) {
|
|
281
|
+
if (typeof state.filters === 'function') {
|
|
278
282
|
const filters = state.filters({
|
|
279
283
|
qb: this,
|
|
280
284
|
uid,
|
|
281
285
|
meta,
|
|
282
286
|
db
|
|
283
287
|
});
|
|
284
|
-
if (
|
|
288
|
+
if (filters != null) {
|
|
285
289
|
state.where.push(filters);
|
|
286
290
|
}
|
|
287
291
|
} else {
|
|
@@ -371,15 +375,17 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
|
|
|
371
375
|
});
|
|
372
376
|
if (this.shouldUseDistinct()) {
|
|
373
377
|
const joinsOrderByColumns = state.joins.flatMap((join)=>{
|
|
374
|
-
return
|
|
378
|
+
return Object.keys(join.orderBy ?? {}).map((key)=>this.aliasColumn(key, join.alias));
|
|
375
379
|
});
|
|
376
380
|
// Only include column-based orderBy entries here (raw expressions are handled below)
|
|
377
381
|
const orderByColumns = state.orderBy.filter((ob)=>'column' in ob).map((ob)=>ob.column);
|
|
378
|
-
state.select =
|
|
379
|
-
...
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
382
|
+
state.select = [
|
|
383
|
+
...new Set([
|
|
384
|
+
...joinsOrderByColumns,
|
|
385
|
+
...orderByColumns,
|
|
386
|
+
...state.select
|
|
387
|
+
])
|
|
388
|
+
];
|
|
383
389
|
// PostgreSQL requires every ORDER BY expression to appear in the SELECT list when
|
|
384
390
|
// SELECT DISTINCT is used. Raw expressions (e.g. the `status` CASE ranking) are not
|
|
385
391
|
// plain columns, so add them explicitly — using the same builder/alias as the ORDER BY
|
|
@@ -446,7 +452,7 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
|
|
|
446
452
|
case 'insert':
|
|
447
453
|
{
|
|
448
454
|
qb.insert(state.data);
|
|
449
|
-
if (db.dialect.useReturning() && _.has('id'
|
|
455
|
+
if (db.dialect.useReturning() && _.has(meta.attributes, 'id')) {
|
|
450
456
|
qb.returning('id');
|
|
451
457
|
}
|
|
452
458
|
break;
|
|
@@ -549,7 +555,7 @@ const createQueryBuilder = (uid, db, initialState = {})=>{
|
|
|
549
555
|
qb.transacting(transaction);
|
|
550
556
|
}
|
|
551
557
|
const rows = await qb;
|
|
552
|
-
if (state.populate &&
|
|
558
|
+
if (state.populate && rows != null) {
|
|
553
559
|
await applyPopulate(_.castArray(rows), state.populate, {
|
|
554
560
|
qb: this,
|
|
555
561
|
uid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.mjs","sources":["../../src/query/query-builder.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport _ from 'lodash/fp';\n\nimport type { Database } from '..';\n\nimport { DatabaseError } from '../errors';\nimport { transactionCtx } from '../transaction-context';\nimport { isKnexQuery } from '../utils/knex';\nimport * as helpers from './helpers';\nimport type { Join } from './helpers/join';\nimport type { OrderByValue } from './helpers/order-by';\n\ninterface State {\n type: 'select' | 'insert' | 'update' | 'delete' | 'count' | 'max' | 'min' | 'truncate';\n select: Array<string | Knex.Raw>;\n count: string | null;\n max: string | null;\n min: string | null;\n first: boolean;\n data: Record<string, unknown> | (null | Record<string, unknown>)[] | null;\n where: Record<string, unknown>[];\n joins: Join[];\n populate: object | null;\n limit: number | null;\n offset: number | null;\n transaction: any;\n forUpdate: boolean;\n onConflict: any;\n merge: any;\n ignore: boolean;\n orderBy: any[];\n groupBy: any[];\n increments: any[];\n decrements: any[];\n aliasCounter: number;\n filters: any;\n search: string;\n processed: boolean;\n}\n\nexport interface QueryBuilder {\n alias: string;\n state: State;\n raw: Knex.RawBuilder;\n\n getAlias(): string;\n\n clone(): QueryBuilder;\n\n select(args: string | Array<string | Knex.Raw>): QueryBuilder;\n\n addSelect(args: string | string[]): QueryBuilder;\n\n insert<TData extends Record<string, unknown> | Record<string, unknown>[]>(\n data: TData\n ): QueryBuilder;\n\n onConflict(args: any): QueryBuilder;\n\n merge(args: any): QueryBuilder;\n\n ignore(): QueryBuilder;\n\n delete(): QueryBuilder;\n\n ref(name: string): any;\n\n update<TData extends Record<string, unknown>>(data: TData): QueryBuilder;\n\n increment(column: string, amount?: number): QueryBuilder;\n\n decrement(column: string, amount?: number): QueryBuilder;\n\n count(count?: string): QueryBuilder;\n\n max(column: string): QueryBuilder;\n\n min(column: string): QueryBuilder;\n\n where(where?: object): QueryBuilder;\n\n limit(limit: number): QueryBuilder;\n\n offset(offset: number): QueryBuilder;\n\n orderBy(orderBy: any): QueryBuilder;\n\n groupBy(groupBy: any): QueryBuilder;\n\n populate(populate: any): QueryBuilder;\n\n search(query: string): QueryBuilder;\n\n transacting(transaction: any): QueryBuilder;\n\n forUpdate(): QueryBuilder;\n\n init(params?: any): QueryBuilder;\n\n filters(filters: any): void;\n\n first(): QueryBuilder;\n\n join(join: any): QueryBuilder;\n\n mustUseAlias(): boolean;\n\n aliasColumn(key: any, alias?: string): any;\n\n shouldUseSubQuery(): boolean;\n\n runSubQuery(): any;\n\n processState(): void;\n\n ensurePaginationOrderStability(): void;\n\n shouldUseDistinct(): boolean;\n\n shouldUseDeepSort(): boolean;\n\n processSelect(): void;\n\n getKnexQuery(): Knex.QueryBuilder;\n\n execute<T>(options?: { mapResults?: boolean }): Promise<T>;\n\n stream(options?: { mapResults?: boolean }): helpers.ReadableQuery;\n}\n\nconst createQueryBuilder = (\n uid: string,\n db: Database,\n initialState: Partial<State> = {}\n): QueryBuilder => {\n const meta = db.metadata.get(uid);\n const { tableName } = meta;\n\n const state: State = _.defaults(\n {\n type: 'select',\n select: [],\n count: null,\n max: null,\n min: null,\n first: false,\n data: null,\n where: [],\n joins: [],\n populate: null,\n limit: null,\n offset: null,\n transaction: null,\n forUpdate: false,\n onConflict: null,\n merge: null,\n ignore: false,\n orderBy: [],\n groupBy: [],\n increments: [],\n decrements: [],\n aliasCounter: 0,\n filters: null,\n search: null,\n processed: false,\n },\n initialState\n );\n\n const getAlias = () => {\n const alias = `t${state.aliasCounter}`;\n\n state.aliasCounter += 1;\n\n return alias;\n };\n\n return {\n alias: getAlias(),\n getAlias,\n state,\n\n clone() {\n return createQueryBuilder(uid, db, state);\n },\n\n select(args) {\n state.type = 'select';\n state.select = _.uniq(_.castArray(args));\n\n return this;\n },\n\n addSelect(args) {\n state.select = _.uniq([...state.select, ..._.castArray(args)]);\n\n return this;\n },\n\n insert(data) {\n state.type = 'insert';\n state.data = data;\n\n return this;\n },\n\n onConflict(args) {\n state.onConflict = args;\n\n return this;\n },\n\n merge(args) {\n state.merge = args;\n\n return this;\n },\n\n ignore() {\n state.ignore = true;\n\n return this;\n },\n\n delete() {\n state.type = 'delete';\n\n return this;\n },\n\n ref(name) {\n return db.connection.ref(helpers.toColumnName(meta, name));\n },\n\n update(data) {\n state.type = 'update';\n state.data = data;\n\n return this;\n },\n\n increment(column, amount = 1) {\n state.type = 'update';\n state.increments.push({ column, amount });\n\n return this;\n },\n\n decrement(column, amount = 1) {\n state.type = 'update';\n state.decrements.push({ column, amount });\n\n return this;\n },\n\n count(count = 'id') {\n state.type = 'count';\n state.count = count;\n\n return this;\n },\n\n max(column: string) {\n state.type = 'max';\n state.max = column;\n\n return this;\n },\n\n min(column: string) {\n state.type = 'min';\n state.min = column;\n\n return this;\n },\n\n where(where: Record<string, unknown> = {}) {\n if (!_.isPlainObject(where)) {\n throw new Error('Where must be an object');\n }\n\n state.where.push(where);\n\n return this;\n },\n\n limit(limit) {\n state.limit = limit;\n return this;\n },\n\n offset(offset) {\n state.offset = offset;\n return this;\n },\n\n orderBy(orderBy) {\n state.orderBy = orderBy;\n return this;\n },\n\n groupBy(groupBy) {\n state.groupBy = groupBy;\n return this;\n },\n\n populate(populate) {\n state.populate = populate;\n return this;\n },\n\n search(query) {\n state.search = query;\n return this;\n },\n\n transacting(transaction) {\n state.transaction = transaction;\n return this;\n },\n\n forUpdate() {\n state.forUpdate = true;\n return this;\n },\n\n init(params = {}) {\n const {\n _q: searchQuery,\n filters,\n where,\n select,\n limit,\n offset,\n orderBy,\n groupBy,\n populate,\n } = params;\n\n if (!_.isNil(where)) {\n this.where(where);\n }\n\n if (!_.isNil(searchQuery)) {\n this.search(searchQuery);\n }\n\n if (!_.isNil(select)) {\n this.select(select);\n } else {\n this.select('*');\n }\n\n if (!_.isNil(limit)) {\n this.limit(limit);\n }\n\n if (!_.isNil(offset)) {\n this.offset(offset);\n }\n\n if (!_.isNil(orderBy)) {\n this.orderBy(orderBy);\n }\n\n if (!_.isNil(groupBy)) {\n this.groupBy(groupBy);\n }\n\n if (!_.isNil(populate)) {\n this.populate(populate);\n }\n\n if (!_.isNil(filters)) {\n this.filters(filters);\n }\n\n return this;\n },\n\n filters(filters) {\n state.filters = filters;\n },\n\n first() {\n state.first = true;\n return this;\n },\n\n join(join) {\n if (!join.targetField) {\n state.joins.push(join);\n return this;\n }\n\n const model = db.metadata.get(uid);\n const attribute = model.attributes[join.targetField];\n\n helpers.createJoin(\n { db, qb: this, uid },\n {\n alias: this.alias,\n refAlias: join.alias,\n attributeName: join.targetField,\n attribute,\n }\n );\n\n return this;\n },\n\n mustUseAlias() {\n return ['select', 'count'].includes(state.type);\n },\n\n aliasColumn(key: string | unknown, alias: string): string | unknown {\n if (typeof key !== 'string') {\n return key;\n }\n\n if (key.indexOf('.') >= 0) {\n return key;\n }\n\n if (!_.isNil(alias)) {\n return `${alias}.${key}`;\n }\n\n return this.mustUseAlias() ? `${this.alias}.${key}` : key;\n },\n\n raw: db.connection.raw.bind(db.connection),\n\n shouldUseSubQuery() {\n return ['delete', 'update'].includes(state.type) && state.joins.length > 0;\n },\n\n runSubQuery() {\n const originalType = state.type;\n\n // Build the inner SELECT from a clone that stays `select`, so the outer write\n // state is never mutated. clone() shallow-merges state (shared where/joins,\n // new alias) — preserve the original alias because joins were already baked\n // against it. The clone inherits processed: true and must only read shared arrays.\n const sub = this.clone();\n sub.alias = this.alias;\n const subQB = sub.select('id').getKnexQuery();\n\n const nestedSubQuery = db.getConnection().select('id').from(subQB.as('subQuery'));\n const qb = db.getConnection(tableName);\n\n if (originalType === 'update') {\n return qb.update(state.data).whereIn('id', nestedSubQuery);\n }\n\n return qb.delete().whereIn('id', nestedSubQuery);\n },\n\n processState() {\n if (this.state.processed) {\n return;\n }\n\n state.orderBy = helpers.processOrderBy(state.orderBy, { qb: this, uid, db });\n\n if (!_.isNil(state.filters)) {\n if (_.isFunction(state.filters)) {\n const filters = state.filters({ qb: this, uid, meta, db });\n\n if (!_.isNil(filters)) {\n state.where.push(filters);\n }\n } else {\n state.where.push(state.filters);\n }\n }\n\n state.where = helpers.processWhere(state.where, { qb: this, uid, db });\n\n // processWhere emits bare root columns while type is still update/delete\n // (mustUseAlias is false). Qualify them now that joins from the relation\n // predicate are known, so overlapping names (published_at, locale, id) are not ambiguous.\n if (this.shouldUseSubQuery()) {\n state.where = helpers.qualifyRootColumns(state.where, this.alias);\n }\n\n state.populate = helpers.processPopulate(state.populate, { qb: this, uid, db });\n\n state.data = helpers.toRow(meta, state.data);\n\n this.ensurePaginationOrderStability();\n\n this.processSelect();\n\n this.state.processed = true;\n },\n\n /**\n * OFFSET/LIMIT without a unique ORDER BY is undefined behavior on SQL databases (notably MySQL).\n * That can repeat or skip rows across pages. Deep sort already appends a primary-key tie-breaker;\n * for all other paginated selects, append id ASC when it is not already the last sort key.\n */\n ensurePaginationOrderStability() {\n if (state.type !== 'select' || state.first) {\n return;\n }\n\n if (state.limit === null && state.offset === null) {\n return;\n }\n\n if (state.limit === -1) {\n return;\n }\n\n if (this.shouldUseDeepSort()) {\n return;\n }\n\n if (!meta.attributes.id) {\n return;\n }\n\n const idColumnName = helpers.toColumnName(meta, 'id');\n const aliasedId = this.aliasColumn(idColumnName);\n const lastOrder = state.orderBy[state.orderBy.length - 1];\n\n if (lastOrder && lastOrder.column === aliasedId) {\n return;\n }\n\n state.orderBy = [...state.orderBy, { column: aliasedId, order: 'asc' }];\n },\n\n shouldUseDistinct() {\n return state.joins.length > 0 && _.isEmpty(state.groupBy);\n },\n\n shouldUseDeepSort() {\n return (\n state.orderBy\n .filter((ob: any) => 'column' in ob && ob.column.indexOf('.') >= 0)\n .filter((ob: any) => {\n const col = ob.column.split('.');\n\n for (let i = 0; i < col.length - 1; i += 1) {\n const el = col[i];\n\n // order by \"rel\".\"xxx\"\n const isRelationAttribute = meta.attributes[el]?.type === 'relation';\n\n // order by \"t2\".\"xxx\"\n const isAliasedRelation = Object.values(state.joins)\n .map((join) => join.alias)\n .includes(el);\n\n if (isRelationAttribute || isAliasedRelation) {\n return true;\n }\n }\n\n return false;\n }).length > 0\n );\n },\n\n processSelect() {\n state.select = state.select.map((field) => {\n if (isKnexQuery(field)) {\n return field;\n }\n\n return helpers.toColumnName(meta, field);\n });\n\n if (this.shouldUseDistinct()) {\n const joinsOrderByColumns = state.joins.flatMap((join) => {\n return _.keys(join.orderBy).map((key) => this.aliasColumn(key, join.alias));\n });\n // Only include column-based orderBy entries here (raw expressions are handled below)\n const orderByColumns = state.orderBy\n .filter((ob: any) => 'column' in ob)\n .map((ob: any) => ob.column);\n\n state.select = _.uniq([...joinsOrderByColumns, ...orderByColumns, ...state.select]);\n\n // PostgreSQL requires every ORDER BY expression to appear in the SELECT list when\n // SELECT DISTINCT is used. Raw expressions (e.g. the `status` CASE ranking) are not\n // plain columns, so add them explicitly — using the same builder/alias as the ORDER BY\n // so the rendered SQL matches and PostgreSQL accepts the query. The deep-sort path\n // dedupes via row numbering instead of DISTINCT, so it strips these out later.\n const rawOrderByExpressions = state.orderBy\n .filter((ob: any) => 'rawExpression' in ob)\n .map((ob: any) =>\n helpers.buildStatusSortExpression(db, tableName, this.alias, ob.isI18n)\n );\n\n state.select = [...state.select, ...rawOrderByExpressions];\n }\n },\n\n getKnexQuery() {\n if (!state.type) {\n this.select('*');\n }\n\n const aliasedTableName = this.mustUseAlias() ? `${tableName} as ${this.alias}` : tableName;\n\n const qb = db.getConnection(aliasedTableName);\n\n // The state should always be processed before calling shouldUseSubQuery as it\n // relies on the presence or absence of joins to determine the need of a subquery\n this.processState();\n\n if (this.shouldUseSubQuery()) {\n return this.runSubQuery();\n }\n\n switch (state.type) {\n case 'select': {\n qb.select(state.select.map((column) => this.aliasColumn(column)));\n\n if (this.shouldUseDistinct()) {\n qb.distinct();\n }\n\n break;\n }\n case 'count': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.count));\n\n if (this.shouldUseDistinct()) {\n qb.countDistinct({ count: dbColumnName });\n } else {\n qb.count({ count: dbColumnName });\n }\n break;\n }\n case 'max': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.max));\n qb.max({ max: dbColumnName });\n break;\n }\n case 'min': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.min));\n qb.min({ min: dbColumnName });\n break;\n }\n case 'insert': {\n qb.insert(state.data);\n\n if (db.dialect.useReturning() && _.has('id', meta.attributes)) {\n qb.returning('id');\n }\n\n break;\n }\n case 'update': {\n if (state.data) {\n qb.update(state.data);\n }\n break;\n }\n case 'delete': {\n qb.delete();\n\n break;\n }\n case 'truncate': {\n qb.truncate();\n break;\n }\n default: {\n throw new Error('Unknown query type');\n }\n }\n\n if (state.transaction) {\n qb.transacting(state.transaction);\n }\n\n if (state.forUpdate) {\n qb.forUpdate();\n }\n\n if (!_.isEmpty(state.increments)) {\n state.increments.forEach((incr) => qb.increment(incr.column, incr.amount));\n }\n\n if (!_.isEmpty(state.decrements)) {\n state.decrements.forEach((decr) => qb.decrement(decr.column, decr.amount));\n }\n\n if (state.onConflict) {\n if (state.merge) {\n qb.onConflict(state.onConflict).merge(state.merge);\n } else if (state.ignore) {\n qb.onConflict(state.onConflict).ignore();\n }\n }\n\n if (state.limit) {\n qb.limit(state.limit);\n }\n\n if (state.offset) {\n qb.offset(state.offset);\n }\n\n if (state.first) {\n qb.first();\n }\n\n if (state.groupBy.length > 0) {\n qb.groupBy(state.groupBy);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.where) {\n helpers.applyWhere(qb, state.where);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.search) {\n qb.where((subQb) => {\n helpers.applySearch(subQb, state.search, { qb: this, db, uid });\n });\n }\n\n /**\n * Join `orderBy` (e.g. join-table ordinal for relations) must precede root `state.orderBy`\n * when both are emitted. Otherwise pagination stability (`ensurePaginationOrderStability`)\n * appending `id ASC` on the root alias wins over distinct target ids and breaks relation ordering.\n */\n if (state.joins.length > 0) {\n helpers.applyJoins(qb, state.joins);\n }\n\n if (state.orderBy.length > 0) {\n // `processState` normalizes entries to OrderByValue[] (string/object input from `.init()`).\n const knexOrderBy: helpers.KnexOrderByColumnDescriptor[] = (\n state.orderBy as OrderByValue[]\n ).map((entry) => helpers.toKnexOrderByDescriptor(db, tableName, this.alias, entry));\n // Knex compound `orderBy` typings list `column: string | QueryBuilder` — `Knex.Raw` works at runtime\n // (e.g. `status` sort). See helpers.toKnexOrderByDescriptor / buildStatusSortExpression.\n qb.orderBy(knexOrderBy as never);\n }\n\n if (this.shouldUseDeepSort()) {\n return helpers.wrapWithDeepSort(qb, { qb: this, db, uid });\n }\n\n return qb;\n },\n\n async execute({ mapResults = true } = {}) {\n try {\n const qb = this.getKnexQuery();\n\n const transaction = transactionCtx.get();\n if (transaction) {\n qb.transacting(transaction);\n }\n\n const rows = await qb;\n\n if (state.populate && !_.isNil(rows)) {\n await helpers.applyPopulate(_.castArray(rows), state.populate, {\n qb: this,\n uid,\n db,\n });\n }\n\n let results = rows;\n if (mapResults && state.type === 'select') {\n results = helpers.fromRow(meta, rows);\n }\n\n return results;\n } catch (error) {\n if (error instanceof Error) {\n db.dialect.transformErrors(error);\n } else {\n throw error;\n }\n }\n },\n\n stream({ mapResults = true } = {}) {\n if (state.type === 'select') {\n return new helpers.ReadableQuery({ qb: this, db, uid, mapResults });\n }\n\n throw new DatabaseError(\n `query-builder.stream() has been called with an unsupported query type: \"${state.type}\"`\n );\n },\n };\n};\n\nexport default createQueryBuilder;\n"],"names":["createQueryBuilder","uid","db","initialState","meta","metadata","get","tableName","state","_","defaults","type","select","count","max","min","first","data","where","joins","populate","limit","offset","transaction","forUpdate","onConflict","merge","ignore","orderBy","groupBy","increments","decrements","aliasCounter","filters","search","processed","getAlias","alias","clone","args","uniq","castArray","addSelect","insert","delete","ref","name","connection","helpers","update","increment","column","amount","push","decrement","isPlainObject","Error","query","transacting","init","params","_q","searchQuery","isNil","join","targetField","model","attribute","attributes","qb","refAlias","attributeName","mustUseAlias","includes","aliasColumn","key","indexOf","raw","bind","shouldUseSubQuery","length","runSubQuery","originalType","sub","subQB","getKnexQuery","nestedSubQuery","getConnection","from","as","whereIn","processState","isFunction","ensurePaginationOrderStability","processSelect","shouldUseDeepSort","id","idColumnName","aliasedId","lastOrder","order","shouldUseDistinct","isEmpty","filter","ob","col","split","i","el","isRelationAttribute","isAliasedRelation","Object","values","map","field","isKnexQuery","joinsOrderByColumns","flatMap","keys","orderByColumns","rawOrderByExpressions","isI18n","aliasedTableName","distinct","dbColumnName","countDistinct","dialect","useReturning","has","returning","truncate","forEach","incr","decr","subQb","knexOrderBy","entry","execute","mapResults","transactionCtx","rows","results","error","transformErrors","stream","DatabaseError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query-builder.mjs","sources":["../../src/query/query-builder.ts"],"sourcesContent":["import type { Knex } from 'knex';\nimport _ from 'lodash';\n\nimport type { Database } from '..';\n\nimport { DatabaseError } from '../errors';\nimport { transactionCtx } from '../transaction-context';\nimport { isKnexQuery } from '../utils/knex';\nimport * as helpers from './helpers';\nimport type { Join } from './helpers/join';\nimport type { OrderByValue } from './helpers/order-by';\n\ninterface State {\n type: 'select' | 'insert' | 'update' | 'delete' | 'count' | 'max' | 'min' | 'truncate';\n select: Array<string | Knex.Raw>;\n count: string | null;\n max: string | null;\n min: string | null;\n first: boolean;\n data: Record<string, unknown> | (null | Record<string, unknown>)[] | null;\n where: Record<string, unknown>[];\n joins: Join[];\n populate: object | null;\n limit: number | null;\n offset: number | null;\n transaction: any;\n forUpdate: boolean;\n onConflict: any;\n merge: any;\n ignore: boolean;\n orderBy: any[];\n groupBy: any[];\n increments: any[];\n decrements: any[];\n aliasCounter: number;\n filters: any;\n search: string;\n processed: boolean;\n}\n\nexport interface QueryBuilder {\n alias: string;\n state: State;\n raw: Knex.RawBuilder;\n\n getAlias(): string;\n\n clone(): QueryBuilder;\n\n select(args: string | Array<string | Knex.Raw>): QueryBuilder;\n\n addSelect(args: string | string[]): QueryBuilder;\n\n insert<TData extends Record<string, unknown> | Record<string, unknown>[]>(\n data: TData\n ): QueryBuilder;\n\n onConflict(args: any): QueryBuilder;\n\n merge(args: any): QueryBuilder;\n\n ignore(): QueryBuilder;\n\n delete(): QueryBuilder;\n\n ref(name: string): any;\n\n update<TData extends Record<string, unknown>>(data: TData): QueryBuilder;\n\n increment(column: string, amount?: number): QueryBuilder;\n\n decrement(column: string, amount?: number): QueryBuilder;\n\n count(count?: string): QueryBuilder;\n\n max(column: string): QueryBuilder;\n\n min(column: string): QueryBuilder;\n\n where(where?: object): QueryBuilder;\n\n limit(limit: number): QueryBuilder;\n\n offset(offset: number): QueryBuilder;\n\n orderBy(orderBy: any): QueryBuilder;\n\n groupBy(groupBy: any): QueryBuilder;\n\n populate(populate: any): QueryBuilder;\n\n search(query: string): QueryBuilder;\n\n transacting(transaction: any): QueryBuilder;\n\n forUpdate(): QueryBuilder;\n\n init(params?: any): QueryBuilder;\n\n filters(filters: any): void;\n\n first(): QueryBuilder;\n\n join(join: any): QueryBuilder;\n\n mustUseAlias(): boolean;\n\n aliasColumn(key: any, alias?: string): any;\n\n shouldUseSubQuery(): boolean;\n\n runSubQuery(): any;\n\n processState(): void;\n\n ensurePaginationOrderStability(): void;\n\n shouldUseDistinct(): boolean;\n\n shouldUseDeepSort(): boolean;\n\n processSelect(): void;\n\n getKnexQuery(): Knex.QueryBuilder;\n\n execute<T>(options?: { mapResults?: boolean }): Promise<T>;\n\n stream(options?: { mapResults?: boolean }): helpers.ReadableQuery;\n}\n\nconst createQueryBuilder = (\n uid: string,\n db: Database,\n initialState: Partial<State> = {}\n): QueryBuilder => {\n const meta = db.metadata.get(uid);\n const { tableName } = meta;\n\n const state: State = _.defaults({}, initialState, {\n type: 'select',\n select: [],\n count: null,\n max: null,\n min: null,\n first: false,\n data: null,\n where: [],\n joins: [],\n populate: null,\n limit: null,\n offset: null,\n transaction: null,\n forUpdate: false,\n onConflict: null,\n merge: null,\n ignore: false,\n orderBy: [],\n groupBy: [],\n increments: [],\n decrements: [],\n aliasCounter: 0,\n filters: null,\n search: null,\n processed: false,\n });\n\n const getAlias = () => {\n const alias = `t${state.aliasCounter}`;\n\n state.aliasCounter += 1;\n\n return alias;\n };\n\n return {\n alias: getAlias(),\n getAlias,\n state,\n\n clone() {\n return createQueryBuilder(uid, db, state);\n },\n\n select(args) {\n state.type = 'select';\n state.select = [...new Set(_.castArray(args))];\n\n return this;\n },\n\n addSelect(args) {\n state.select = [...new Set([...state.select, ..._.castArray(args)])];\n\n return this;\n },\n\n insert(data) {\n state.type = 'insert';\n state.data = data;\n\n return this;\n },\n\n onConflict(args) {\n state.onConflict = args;\n\n return this;\n },\n\n merge(args) {\n state.merge = args;\n\n return this;\n },\n\n ignore() {\n state.ignore = true;\n\n return this;\n },\n\n delete() {\n state.type = 'delete';\n\n return this;\n },\n\n ref(name) {\n return db.connection.ref(helpers.toColumnName(meta, name));\n },\n\n update(data) {\n state.type = 'update';\n state.data = data;\n\n return this;\n },\n\n increment(column, amount = 1) {\n state.type = 'update';\n state.increments.push({ column, amount });\n\n return this;\n },\n\n decrement(column, amount = 1) {\n state.type = 'update';\n state.decrements.push({ column, amount });\n\n return this;\n },\n\n count(count = 'id') {\n state.type = 'count';\n state.count = count;\n\n return this;\n },\n\n max(column: string) {\n state.type = 'max';\n state.max = column;\n\n return this;\n },\n\n min(column: string) {\n state.type = 'min';\n state.min = column;\n\n return this;\n },\n\n where(where: Record<string, unknown> = {}) {\n if (!_.isPlainObject(where)) {\n throw new Error('Where must be an object');\n }\n\n state.where.push(where);\n\n return this;\n },\n\n limit(limit) {\n state.limit = limit;\n return this;\n },\n\n offset(offset) {\n state.offset = offset;\n return this;\n },\n\n orderBy(orderBy) {\n state.orderBy = orderBy;\n return this;\n },\n\n groupBy(groupBy) {\n state.groupBy = groupBy;\n return this;\n },\n\n populate(populate) {\n state.populate = populate;\n return this;\n },\n\n search(query) {\n state.search = query;\n return this;\n },\n\n transacting(transaction) {\n state.transaction = transaction;\n return this;\n },\n\n forUpdate() {\n state.forUpdate = true;\n return this;\n },\n\n init(params = {}) {\n const {\n _q: searchQuery,\n filters,\n where,\n select,\n limit,\n offset,\n orderBy,\n groupBy,\n populate,\n } = params;\n\n if (where != null) {\n this.where(where);\n }\n\n if (searchQuery != null) {\n this.search(searchQuery);\n }\n\n if (select != null) {\n this.select(select);\n } else {\n this.select('*');\n }\n\n if (limit != null) {\n this.limit(limit);\n }\n\n if (offset != null) {\n this.offset(offset);\n }\n\n if (orderBy != null) {\n this.orderBy(orderBy);\n }\n\n if (groupBy != null) {\n this.groupBy(groupBy);\n }\n\n if (populate != null) {\n this.populate(populate);\n }\n\n if (filters != null) {\n this.filters(filters);\n }\n\n return this;\n },\n\n filters(filters) {\n state.filters = filters;\n },\n\n first() {\n state.first = true;\n return this;\n },\n\n join(join) {\n if (!join.targetField) {\n state.joins.push(join);\n return this;\n }\n\n const model = db.metadata.get(uid);\n const attribute = model.attributes[join.targetField];\n\n helpers.createJoin(\n { db, qb: this, uid },\n {\n alias: this.alias,\n refAlias: join.alias,\n attributeName: join.targetField,\n attribute,\n }\n );\n\n return this;\n },\n\n mustUseAlias() {\n return ['select', 'count'].includes(state.type);\n },\n\n aliasColumn(key: string | unknown, alias: string): string | unknown {\n if (typeof key !== 'string') {\n return key;\n }\n\n if (key.indexOf('.') >= 0) {\n return key;\n }\n\n if (alias != null) {\n return `${alias}.${key}`;\n }\n\n return this.mustUseAlias() ? `${this.alias}.${key}` : key;\n },\n\n raw: db.connection.raw.bind(db.connection),\n\n shouldUseSubQuery() {\n return ['delete', 'update'].includes(state.type) && state.joins.length > 0;\n },\n\n runSubQuery() {\n const originalType = state.type;\n\n // Build the inner SELECT from a clone that stays `select`, so the outer write\n // state is never mutated. clone() shallow-merges state (shared where/joins,\n // new alias) — preserve the original alias because joins were already baked\n // against it. The clone inherits processed: true and must only read shared arrays.\n const sub = this.clone();\n sub.alias = this.alias;\n const subQB = sub.select('id').getKnexQuery();\n\n const nestedSubQuery = db.getConnection().select('id').from(subQB.as('subQuery'));\n const qb = db.getConnection(tableName);\n\n if (originalType === 'update') {\n return qb.update(state.data).whereIn('id', nestedSubQuery);\n }\n\n return qb.delete().whereIn('id', nestedSubQuery);\n },\n\n processState() {\n if (this.state.processed) {\n return;\n }\n\n state.orderBy = helpers.processOrderBy(state.orderBy, { qb: this, uid, db });\n\n if (state.filters != null) {\n if (typeof state.filters === 'function') {\n const filters = state.filters({ qb: this, uid, meta, db });\n\n if (filters != null) {\n state.where.push(filters);\n }\n } else {\n state.where.push(state.filters);\n }\n }\n\n state.where = helpers.processWhere(state.where, { qb: this, uid, db });\n\n // processWhere emits bare root columns while type is still update/delete\n // (mustUseAlias is false). Qualify them now that joins from the relation\n // predicate are known, so overlapping names (published_at, locale, id) are not ambiguous.\n if (this.shouldUseSubQuery()) {\n state.where = helpers.qualifyRootColumns(state.where, this.alias);\n }\n\n state.populate = helpers.processPopulate(state.populate, { qb: this, uid, db });\n\n state.data = helpers.toRow(meta, state.data);\n\n this.ensurePaginationOrderStability();\n\n this.processSelect();\n\n this.state.processed = true;\n },\n\n /**\n * OFFSET/LIMIT without a unique ORDER BY is undefined behavior on SQL databases (notably MySQL).\n * That can repeat or skip rows across pages. Deep sort already appends a primary-key tie-breaker;\n * for all other paginated selects, append id ASC when it is not already the last sort key.\n */\n ensurePaginationOrderStability() {\n if (state.type !== 'select' || state.first) {\n return;\n }\n\n if (state.limit === null && state.offset === null) {\n return;\n }\n\n if (state.limit === -1) {\n return;\n }\n\n if (this.shouldUseDeepSort()) {\n return;\n }\n\n if (!meta.attributes.id) {\n return;\n }\n\n const idColumnName = helpers.toColumnName(meta, 'id');\n const aliasedId = this.aliasColumn(idColumnName);\n const lastOrder = state.orderBy[state.orderBy.length - 1];\n\n if (lastOrder && lastOrder.column === aliasedId) {\n return;\n }\n\n state.orderBy = [...state.orderBy, { column: aliasedId, order: 'asc' }];\n },\n\n shouldUseDistinct() {\n return state.joins.length > 0 && _.isEmpty(state.groupBy);\n },\n\n shouldUseDeepSort() {\n return (\n state.orderBy\n .filter((ob: any) => 'column' in ob && ob.column.indexOf('.') >= 0)\n .filter((ob: any) => {\n const col = ob.column.split('.');\n\n for (let i = 0; i < col.length - 1; i += 1) {\n const el = col[i];\n\n // order by \"rel\".\"xxx\"\n const isRelationAttribute = meta.attributes[el]?.type === 'relation';\n\n // order by \"t2\".\"xxx\"\n const isAliasedRelation = Object.values(state.joins)\n .map((join) => join.alias)\n .includes(el);\n\n if (isRelationAttribute || isAliasedRelation) {\n return true;\n }\n }\n\n return false;\n }).length > 0\n );\n },\n\n processSelect() {\n state.select = state.select.map((field) => {\n if (isKnexQuery(field)) {\n return field;\n }\n\n return helpers.toColumnName(meta, field);\n });\n\n if (this.shouldUseDistinct()) {\n const joinsOrderByColumns = state.joins.flatMap((join) => {\n return Object.keys(join.orderBy ?? {}).map((key) => this.aliasColumn(key, join.alias));\n });\n // Only include column-based orderBy entries here (raw expressions are handled below)\n const orderByColumns = state.orderBy\n .filter((ob: any) => 'column' in ob)\n .map((ob: any) => ob.column);\n\n state.select = [...new Set([...joinsOrderByColumns, ...orderByColumns, ...state.select])];\n\n // PostgreSQL requires every ORDER BY expression to appear in the SELECT list when\n // SELECT DISTINCT is used. Raw expressions (e.g. the `status` CASE ranking) are not\n // plain columns, so add them explicitly — using the same builder/alias as the ORDER BY\n // so the rendered SQL matches and PostgreSQL accepts the query. The deep-sort path\n // dedupes via row numbering instead of DISTINCT, so it strips these out later.\n const rawOrderByExpressions = state.orderBy\n .filter((ob: any) => 'rawExpression' in ob)\n .map((ob: any) =>\n helpers.buildStatusSortExpression(db, tableName, this.alias, ob.isI18n)\n );\n\n state.select = [...state.select, ...rawOrderByExpressions];\n }\n },\n\n getKnexQuery() {\n if (!state.type) {\n this.select('*');\n }\n\n const aliasedTableName = this.mustUseAlias() ? `${tableName} as ${this.alias}` : tableName;\n\n const qb = db.getConnection(aliasedTableName);\n\n // The state should always be processed before calling shouldUseSubQuery as it\n // relies on the presence or absence of joins to determine the need of a subquery\n this.processState();\n\n if (this.shouldUseSubQuery()) {\n return this.runSubQuery();\n }\n\n switch (state.type) {\n case 'select': {\n qb.select(state.select.map((column) => this.aliasColumn(column)));\n\n if (this.shouldUseDistinct()) {\n qb.distinct();\n }\n\n break;\n }\n case 'count': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.count));\n\n if (this.shouldUseDistinct()) {\n qb.countDistinct({ count: dbColumnName });\n } else {\n qb.count({ count: dbColumnName });\n }\n break;\n }\n case 'max': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.max));\n qb.max({ max: dbColumnName });\n break;\n }\n case 'min': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.min));\n qb.min({ min: dbColumnName });\n break;\n }\n case 'insert': {\n qb.insert(state.data);\n\n if (db.dialect.useReturning() && _.has(meta.attributes, 'id')) {\n qb.returning('id');\n }\n\n break;\n }\n case 'update': {\n if (state.data) {\n qb.update(state.data);\n }\n break;\n }\n case 'delete': {\n qb.delete();\n\n break;\n }\n case 'truncate': {\n qb.truncate();\n break;\n }\n default: {\n throw new Error('Unknown query type');\n }\n }\n\n if (state.transaction) {\n qb.transacting(state.transaction);\n }\n\n if (state.forUpdate) {\n qb.forUpdate();\n }\n\n if (!_.isEmpty(state.increments)) {\n state.increments.forEach((incr) => qb.increment(incr.column, incr.amount));\n }\n\n if (!_.isEmpty(state.decrements)) {\n state.decrements.forEach((decr) => qb.decrement(decr.column, decr.amount));\n }\n\n if (state.onConflict) {\n if (state.merge) {\n qb.onConflict(state.onConflict).merge(state.merge);\n } else if (state.ignore) {\n qb.onConflict(state.onConflict).ignore();\n }\n }\n\n if (state.limit) {\n qb.limit(state.limit);\n }\n\n if (state.offset) {\n qb.offset(state.offset);\n }\n\n if (state.first) {\n qb.first();\n }\n\n if (state.groupBy.length > 0) {\n qb.groupBy(state.groupBy);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.where) {\n helpers.applyWhere(qb, state.where);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.search) {\n qb.where((subQb) => {\n helpers.applySearch(subQb, state.search, { qb: this, db, uid });\n });\n }\n\n /**\n * Join `orderBy` (e.g. join-table ordinal for relations) must precede root `state.orderBy`\n * when both are emitted. Otherwise pagination stability (`ensurePaginationOrderStability`)\n * appending `id ASC` on the root alias wins over distinct target ids and breaks relation ordering.\n */\n if (state.joins.length > 0) {\n helpers.applyJoins(qb, state.joins);\n }\n\n if (state.orderBy.length > 0) {\n // `processState` normalizes entries to OrderByValue[] (string/object input from `.init()`).\n const knexOrderBy: helpers.KnexOrderByColumnDescriptor[] = (\n state.orderBy as OrderByValue[]\n ).map((entry) => helpers.toKnexOrderByDescriptor(db, tableName, this.alias, entry));\n // Knex compound `orderBy` typings list `column: string | QueryBuilder` — `Knex.Raw` works at runtime\n // (e.g. `status` sort). See helpers.toKnexOrderByDescriptor / buildStatusSortExpression.\n qb.orderBy(knexOrderBy as never);\n }\n\n if (this.shouldUseDeepSort()) {\n return helpers.wrapWithDeepSort(qb, { qb: this, db, uid });\n }\n\n return qb;\n },\n\n async execute({ mapResults = true } = {}) {\n try {\n const qb = this.getKnexQuery();\n\n const transaction = transactionCtx.get();\n if (transaction) {\n qb.transacting(transaction);\n }\n\n const rows = await qb;\n\n if (state.populate && rows != null) {\n await helpers.applyPopulate(_.castArray(rows), state.populate, {\n qb: this,\n uid,\n db,\n });\n }\n\n let results = rows;\n if (mapResults && state.type === 'select') {\n results = helpers.fromRow(meta, rows);\n }\n\n return results;\n } catch (error) {\n if (error instanceof Error) {\n db.dialect.transformErrors(error);\n } else {\n throw error;\n }\n }\n },\n\n stream({ mapResults = true } = {}) {\n if (state.type === 'select') {\n return new helpers.ReadableQuery({ qb: this, db, uid, mapResults });\n }\n\n throw new DatabaseError(\n `query-builder.stream() has been called with an unsupported query type: \"${state.type}\"`\n );\n },\n };\n};\n\nexport default createQueryBuilder;\n"],"names":["createQueryBuilder","uid","db","initialState","meta","metadata","get","tableName","state","_","defaults","type","select","count","max","min","first","data","where","joins","populate","limit","offset","transaction","forUpdate","onConflict","merge","ignore","orderBy","groupBy","increments","decrements","aliasCounter","filters","search","processed","getAlias","alias","clone","args","Set","castArray","addSelect","insert","delete","ref","name","connection","helpers","update","increment","column","amount","push","decrement","isPlainObject","Error","query","transacting","init","params","_q","searchQuery","join","targetField","model","attribute","attributes","qb","refAlias","attributeName","mustUseAlias","includes","aliasColumn","key","indexOf","raw","bind","shouldUseSubQuery","length","runSubQuery","originalType","sub","subQB","getKnexQuery","nestedSubQuery","getConnection","from","as","whereIn","processState","ensurePaginationOrderStability","processSelect","shouldUseDeepSort","id","idColumnName","aliasedId","lastOrder","order","shouldUseDistinct","isEmpty","filter","ob","col","split","i","el","isRelationAttribute","isAliasedRelation","Object","values","map","field","isKnexQuery","joinsOrderByColumns","flatMap","keys","orderByColumns","rawOrderByExpressions","isI18n","aliasedTableName","distinct","dbColumnName","countDistinct","dialect","useReturning","has","returning","truncate","forEach","incr","decr","subQb","knexOrderBy","entry","execute","mapResults","transactionCtx","rows","results","error","transformErrors","stream","DatabaseError"],"mappings":"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"}
|
package/dist/schema/builder.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var _ = require('lodash
|
|
3
|
+
var _ = require('lodash');
|
|
4
4
|
var createDebug = require('debug');
|
|
5
5
|
|
|
6
6
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -194,10 +194,10 @@ const createHelpers = (db)=>{
|
|
|
194
194
|
if (unsigned === true) {
|
|
195
195
|
col.unsigned();
|
|
196
196
|
}
|
|
197
|
-
if (
|
|
197
|
+
if (defaultTo != null) {
|
|
198
198
|
const [value, opts] = _.castArray(defaultTo);
|
|
199
|
-
if (
|
|
200
|
-
col.defaultTo(db.connection.raw(value), _.omit('isRaw'
|
|
199
|
+
if (opts?.isRaw) {
|
|
200
|
+
col.defaultTo(db.connection.raw(value), _.omit(opts, 'isRaw'));
|
|
201
201
|
} else {
|
|
202
202
|
col.defaultTo(value, opts);
|
|
203
203
|
}
|
|
@@ -400,7 +400,7 @@ const createHelpers = (db)=>{
|
|
|
400
400
|
// Apply default value
|
|
401
401
|
if (column.defaultTo !== undefined) {
|
|
402
402
|
const [defaultValue, defaultOpts] = _.castArray(column.defaultTo);
|
|
403
|
-
if (
|
|
403
|
+
if (defaultOpts?.isRaw) {
|
|
404
404
|
await trx.raw(`ALTER TABLE ?? ALTER COLUMN ?? SET DEFAULT ${defaultValue}`, [
|
|
405
405
|
tableName,
|
|
406
406
|
columnName
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sources":["../../src/schema/builder.ts"],"sourcesContent":["import { isNil, prop, omit, castArray } from 'lodash/fp';\nimport createDebug from 'debug';\n\nimport type { Knex } from 'knex';\nimport type { Database } from '..';\nimport type { Schema, Table, SchemaDiff, TableDiff, ForeignKey, Index, Column } from './types';\n\nconst debug = createDebug('strapi::database');\n\nexport default (db: Database) => {\n const helpers = createHelpers(db);\n\n return {\n /**\n * Returns a knex schema builder instance\n * @param {string} table - table name\n */\n getSchemaBuilder(trx: Knex.Transaction) {\n return db.getSchemaConnection(trx);\n },\n\n /**\n * Creates schema in DB\n */\n async createSchema(schema: Schema) {\n await db.connection.transaction(async (trx) => {\n await this.createTables(schema.tables, trx);\n });\n },\n\n /**\n * Creates a list of tables in a schema\n * @param {KnexInstance} trx\n * @param {Table[]} tables\n */\n async createTables(tables: Table[], trx: Knex.Transaction) {\n for (const table of tables) {\n debug(`Creating table: ${table.name}`);\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.createTable(schemaBuilder, table);\n }\n\n // create FKs once all the tables exist\n for (const table of tables) {\n debug(`Creating table foreign keys: ${table.name}`);\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.createTableForeignKeys(schemaBuilder, table);\n }\n },\n /**\n * Drops schema from DB\n */\n async dropSchema(schema: Schema, { dropDatabase = false } = {}) {\n if (dropDatabase) {\n // TODO: drop database & return as it will drop everything\n return;\n }\n\n await db.connection.transaction(async (trx) => {\n for (const table of schema.tables.reverse()) {\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.dropTable(schemaBuilder, table);\n }\n });\n },\n\n /**\n * Applies a schema diff update in the DB\n * @param {*} schemaDiff\n */\n // TODO: implement force option to disable removal in DB\n async updateSchema(schemaDiff: SchemaDiff['diff']) {\n const forceMigration = db.config.settings?.forceMigration;\n\n await db.dialect.startSchemaUpdate();\n\n // Pre-fetch metadata for all updated tables\n const existingMetadata: Record<string, { indexes: Index[]; foreignKeys: ForeignKey[] }> = {};\n const columnTypes: Record<string, Record<string, string | null>> = {};\n\n for (const table of schemaDiff.tables.updated) {\n existingMetadata[table.name] = {\n indexes: await db.dialect.schemaInspector.getIndexes(table.name),\n foreignKeys: await db.dialect.schemaInspector.getForeignKeys(table.name),\n };\n\n // Pre-fetch column types for PostgreSQL to avoid transaction timeouts\n if (db.config.connection.client === 'postgres') {\n columnTypes[table.name] = {};\n for (const updatedColumn of table.columns.updated) {\n columnTypes[table.name][updatedColumn.name] = await helpers.getCurrentColumnType(\n table.name,\n updatedColumn.name\n );\n }\n }\n }\n\n await db.connection.transaction(async (trx) => {\n await this.createTables(schemaDiff.tables.added, trx);\n\n if (forceMigration) {\n // drop all delete table foreign keys then delete the tables\n for (const table of schemaDiff.tables.removed) {\n debug(`Removing table foreign keys: ${table.name}`);\n\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.dropTableForeignKeys(schemaBuilder, table);\n }\n\n for (const table of schemaDiff.tables.removed) {\n debug(`Removing table: ${table.name}`);\n\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.dropTable(schemaBuilder, table);\n }\n }\n\n for (const table of schemaDiff.tables.updated) {\n debug(`Updating table: ${table.name}`);\n\n // Handle special type conversions before standard alterations\n await helpers.handleSpecialTypeConversions(trx, table, columnTypes[table.name] || {});\n\n // alter table\n const schemaBuilder = this.getSchemaBuilder(trx);\n\n const { indexes, foreignKeys } = existingMetadata[table.name];\n await helpers.alterTable(schemaBuilder, table, { indexes, foreignKeys });\n }\n });\n\n await db.dialect.endSchemaUpdate();\n },\n };\n};\n\nconst createHelpers = (db: Database) => {\n /**\n * Creates a foreign key on a table\n */\n const createForeignKey = (tableBuilder: Knex.TableBuilder, foreignKey: ForeignKey) => {\n const { name, columns, referencedColumns, referencedTable, onDelete, onUpdate } = foreignKey;\n\n const constraint = tableBuilder\n .foreign(columns, name)\n .references(referencedColumns)\n .inTable(db.getSchemaName() ? `${db.getSchemaName()}.${referencedTable}` : referencedTable);\n\n if (onDelete) {\n constraint.onDelete(onDelete);\n }\n\n if (onUpdate) {\n constraint.onUpdate(onUpdate);\n }\n };\n\n /**\n * Drops a foreign key from a table\n */\n const dropForeignKey = (\n tableBuilder: Knex.TableBuilder,\n foreignKey: ForeignKey,\n existingForeignKeys?: ForeignKey[]\n ) => {\n const { name, columns } = foreignKey;\n\n // Check if the index exists in existingIndexes, and return early if it doesn't\n if (\n existingForeignKeys &&\n !existingForeignKeys.some((existingIndex) => existingIndex?.name === name)\n ) {\n debug(`Foreign Key ${name} not found in existing foreign keys. Skipping drop.`);\n return;\n }\n\n tableBuilder.dropForeign(columns, name);\n };\n\n /**\n * Creates an index on a table\n */\n const createIndex = (tableBuilder: Knex.TableBuilder, index: Index) => {\n const { type, columns, name } = index;\n\n switch (type) {\n case 'primary': {\n return tableBuilder.primary(columns, { constraintName: name });\n }\n case 'unique': {\n return tableBuilder.unique(columns, { indexName: name });\n }\n default: {\n return tableBuilder.index(columns, name, type);\n }\n }\n };\n\n /**\n * Drops an index from table\n * @param {Knex.TableBuilder} tableBuilder\n * @param {Index} index\n */\n const dropIndex = (tableBuilder: Knex.TableBuilder, index: Index, existingIndexes?: Index[]) => {\n if (!db.config.settings?.forceMigration) {\n return;\n }\n\n const { type, columns, name } = index;\n\n // Check if the index exists in existingIndexes, and return early if it doesn't\n if (existingIndexes && !existingIndexes.some((existingIndex) => existingIndex?.name === name)) {\n debug(`Index ${index.name} not found in existingIndexes. Skipping drop.`);\n return;\n }\n\n switch (type) {\n case 'primary': {\n return tableBuilder.dropPrimary(name);\n }\n case 'unique': {\n return tableBuilder.dropUnique(columns, name);\n }\n default: {\n return tableBuilder.dropIndex(columns, name);\n }\n }\n };\n\n /**\n * Creates a column in a table\n */\n const createColumn = (tableBuilder: Knex.TableBuilder, column: Column) => {\n const { type, name, args = [], defaultTo, unsigned, notNullable } = column;\n\n const col = (tableBuilder[type as keyof Knex.TableBuilder] as any)(name, ...args);\n\n if (unsigned === true) {\n col.unsigned();\n }\n\n if (!isNil(defaultTo)) {\n const [value, opts] = castArray(defaultTo);\n\n if (prop('isRaw', opts)) {\n col.defaultTo(db.connection.raw(value), omit('isRaw', opts));\n } else {\n col.defaultTo(value, opts);\n }\n }\n\n if (notNullable === true) {\n col.notNullable();\n } else {\n col.nullable();\n }\n\n return col;\n };\n\n /**\n * Drops a column from a table\n */\n const dropColumn = (tableBuilder: Knex.TableBuilder, column: Column) => {\n if (!db.config.settings?.forceMigration) {\n return;\n }\n\n return tableBuilder.dropColumn(column.name);\n };\n\n /**\n * Creates a table in a database\n */\n const createTable = async (schemaBuilder: Knex.SchemaBuilder, table: Table) => {\n await schemaBuilder.createTable(table.name, (tableBuilder) => {\n // columns\n (table.columns || []).forEach((column) => createColumn(tableBuilder, column));\n\n // indexes\n (table.indexes || []).forEach((index) => createIndex(tableBuilder, index));\n\n // foreign keys\n\n if (!db.dialect.canAlterConstraints()) {\n (table.foreignKeys || []).forEach((foreignKey) =>\n createForeignKey(tableBuilder, foreignKey)\n );\n }\n });\n };\n\n /**\n * Alters a database table by applying a set of schema changes including updates to columns, indexes, and foreign keys.\n * This function ensures proper ordering of operations to avoid conflicts (e.g., foreign key errors) and handles\n * MySQL-specific quirks where dropping a foreign key can implicitly drop an associated index.\n *\n * @param {Knex.SchemaBuilder} schemaBuilder - Knex SchemaBuilder instance to perform schema operations.\n * @param {TableDiff['diff']} table - A diff object representing the schema changes to be applied to the table.\n * @param {{ indexes: Index[]; foreignKeys: ForeignKey[] }} existingMetadata - Metadata about existing indexes and\n * foreign keys in the table. Used to ensure safe operations and avoid unnecessary modifications.\n * - indexes: Array of existing index definitions.\n * - foreignKeys: Array of existing foreign key definitions.\n */\n const alterTable = async (\n schemaBuilder: Knex.SchemaBuilder,\n table: TableDiff['diff'],\n existingMetadata: { indexes: Index[]; foreignKeys: ForeignKey[] } = {\n indexes: [],\n foreignKeys: [],\n }\n ) => {\n let existingIndexes = [...existingMetadata.indexes];\n const existingForeignKeys = [...existingMetadata.foreignKeys];\n\n // Track dropped foreign keys\n const droppedForeignKeyNames: string[] = [];\n\n await schemaBuilder.alterTable(table.name, async (tableBuilder) => {\n // Drop foreign keys first to avoid foreign key errors in the following steps\n for (const removedForeignKey of table.foreignKeys.removed) {\n debug(`Dropping foreign key ${removedForeignKey.name} on ${table.name}`);\n dropForeignKey(tableBuilder, removedForeignKey, existingForeignKeys);\n\n droppedForeignKeyNames.push(removedForeignKey.name);\n }\n\n for (const updatedForeignKey of table.foreignKeys.updated) {\n debug(`Dropping updated foreign key ${updatedForeignKey.name} on ${table.name}`);\n dropForeignKey(tableBuilder, updatedForeignKey.object, existingForeignKeys);\n\n droppedForeignKeyNames.push(updatedForeignKey.object.name);\n }\n\n // In MySQL, dropping a foreign key can also implicitly drop an index with the same name\n // Remove dropped foreign keys from existingIndexes for MySQL\n if (db.config.connection.client === 'mysql') {\n existingIndexes = existingIndexes.filter(\n (index) => !droppedForeignKeyNames.includes(index.name)\n );\n }\n\n for (const removedIndex of table.indexes.removed) {\n debug(`Dropping index ${removedIndex.name} on ${table.name}`);\n dropIndex(tableBuilder, removedIndex, existingIndexes);\n }\n\n for (const updatedIndex of table.indexes.updated) {\n debug(`Dropping updated index ${updatedIndex.name} on ${table.name}`);\n dropIndex(tableBuilder, updatedIndex.object, existingIndexes);\n }\n\n // Drop columns after FKs have been removed to avoid FK errors\n for (const removedColumn of table.columns.removed) {\n debug(`Dropping column ${removedColumn.name} on ${table.name}`);\n dropColumn(tableBuilder, removedColumn);\n }\n\n // Update existing columns\n for (const updatedColumn of table.columns.updated) {\n debug(`Updating column ${updatedColumn.name} on ${table.name}`);\n\n const { object } = updatedColumn;\n\n if (object.type === 'increments') {\n createColumn(tableBuilder, { ...object, type: 'integer' }).alter();\n } else {\n createColumn(tableBuilder, object).alter();\n }\n }\n\n // Add any new columns\n for (const addedColumn of table.columns.added) {\n debug(`Creating column ${addedColumn.name} on ${table.name}`);\n\n if (addedColumn.type === 'increments' && !db.dialect.canAddIncrements()) {\n tableBuilder.integer(addedColumn.name).unsigned();\n tableBuilder.primary([addedColumn.name]);\n } else {\n createColumn(tableBuilder, addedColumn);\n }\n }\n\n // once the columns have all been updated, we can create indexes again\n for (const updatedForeignKey of table.foreignKeys.updated) {\n debug(`Recreating updated foreign key ${updatedForeignKey.name} on ${table.name}`);\n createForeignKey(tableBuilder, updatedForeignKey.object);\n }\n\n for (const updatedIndex of table.indexes.updated) {\n debug(`Recreating updated index ${updatedIndex.name} on ${table.name}`);\n createIndex(tableBuilder, updatedIndex.object);\n }\n\n for (const addedForeignKey of table.foreignKeys.added) {\n debug(`Creating foreign key ${addedForeignKey.name} on ${table.name}`);\n createForeignKey(tableBuilder, addedForeignKey);\n }\n\n for (const addedIndex of table.indexes.added) {\n debug(`Creating index ${addedIndex.name} on ${table.name}`);\n createIndex(tableBuilder, addedIndex);\n }\n });\n };\n\n /**\n * Drops a table from a database\n */\n const dropTable = (schemaBuilder: Knex.SchemaBuilder, table: Table) => {\n if (!db.config.settings.forceMigration) {\n return;\n }\n\n return schemaBuilder.dropTableIfExists(table.name);\n };\n\n /**\n * Creates a table foreign keys constraints\n */\n const createTableForeignKeys = async (schemaBuilder: Knex.SchemaBuilder, table: Table) => {\n // foreign keys\n await schemaBuilder.table(table.name, (tableBuilder) => {\n (table.foreignKeys || []).forEach((foreignKey) => createForeignKey(tableBuilder, foreignKey));\n });\n };\n\n /**\n * Drops a table foreign keys constraints\n */\n const dropTableForeignKeys = async (schemaBuilder: Knex.SchemaBuilder, table: Table) => {\n if (!db.config.settings.forceMigration) {\n return;\n }\n\n // foreign keys\n await schemaBuilder.table(table.name, (tableBuilder) => {\n (table.foreignKeys || []).forEach((foreignKey) => dropForeignKey(tableBuilder, foreignKey));\n });\n };\n\n /**\n * Get the current column type from the database\n */\n const getCurrentColumnType = async (\n tableName: string,\n columnName: string\n ): Promise<string | null> => {\n try {\n const schemaName = db.getSchemaName();\n const result = await db.connection.raw(\n `\n SELECT data_type \n FROM information_schema.columns \n WHERE table_name = ? \n AND column_name = ?\n ${schemaName ? 'AND table_schema = ?' : ''}\n LIMIT 1\n `,\n schemaName ? [tableName, columnName, schemaName] : [tableName, columnName]\n );\n\n return result.rows?.[0]?.data_type || null;\n } catch (error) {\n // Log error but don't fail the migration\n debug(\n `Failed to get column type for ${tableName}.${columnName}: ${error instanceof Error ? error.message : String(error)}`\n );\n return null;\n }\n };\n\n /**\n * Apply column properties after type conversion\n */\n const applyColumnProperties = async (\n trx: Knex.Transaction,\n tableName: string,\n columnName: string,\n column: Column\n ) => {\n // Apply NOT NULL constraint\n if (column.notNullable) {\n await trx.raw(`ALTER TABLE ?? ALTER COLUMN ?? SET NOT NULL`, [tableName, columnName]);\n } else {\n await trx.raw(`ALTER TABLE ?? ALTER COLUMN ?? DROP NOT NULL`, [tableName, columnName]);\n }\n\n // Apply default value\n if (column.defaultTo !== undefined) {\n const [defaultValue, defaultOpts] = castArray(column.defaultTo);\n if (prop('isRaw', defaultOpts)) {\n await trx.raw(`ALTER TABLE ?? ALTER COLUMN ?? SET DEFAULT ${defaultValue}`, [\n tableName,\n columnName,\n ]);\n } else {\n // PostgreSQL doesn't support parameterized SET DEFAULT, so we need to escape the value\n const escapedDefault =\n typeof defaultValue === 'string' ? `'${defaultValue.replace(/'/g, \"''\")}'` : defaultValue;\n await trx.raw(`ALTER TABLE ?? ALTER COLUMN ?? SET DEFAULT ${escapedDefault}`, [\n tableName,\n columnName,\n ]);\n }\n }\n };\n\n /**\n * Handle special type conversions that require custom SQL\n */\n const handleSpecialTypeConversions = async (\n trx: Knex.Transaction,\n table: TableDiff['diff'],\n preloadedColumnTypes: Record<string, string | null> = {}\n ) => {\n // Only PostgreSQL needs special handling for now\n if (db.config.connection.client !== 'postgres') {\n return;\n }\n\n const conversionsToApply = [];\n\n // Check each updated column for special type conversions\n for (const updatedColumn of table.columns.updated) {\n const { name: columnName, object: column } = updatedColumn;\n\n // Use pre-loaded column type if available, otherwise fetch it\n const currentType =\n preloadedColumnTypes[columnName] ?? (await getCurrentColumnType(table.name, columnName));\n\n if (currentType) {\n // Check if dialect has special conversion SQL\n const conversionSQL = db.dialect.getColumnTypeConversionSQL(currentType, column.type);\n\n if (conversionSQL) {\n conversionsToApply.push({\n column: updatedColumn,\n sql: conversionSQL.sql,\n params: [table.name, columnName, columnName],\n currentType,\n targetType: column.type,\n warning: conversionSQL.warning,\n });\n }\n }\n }\n\n // Apply conversions\n for (const conversion of conversionsToApply) {\n const { column, sql, params, currentType, targetType, warning } = conversion;\n\n // Log warning about type conversion\n const warningMessage = warning || 'This conversion may result in data changes.';\n db.logger.warn(\n `Database type conversion: \"${table.name}.${column.name}\" from \"${currentType}\" to \"${targetType}\". ${warningMessage}`\n );\n\n debug(`Applying special type conversion for column ${column.name} on ${table.name}`);\n debug(`Executing SQL: ${sql} with params: ${JSON.stringify(params)}`);\n\n try {\n // Execute the conversion using the transaction connection\n await trx.raw(sql, params);\n debug(`Successfully converted ${column.name} from ${currentType} to ${targetType}`);\n } catch (conversionError) {\n db.logger.error(\n `Failed to convert column ${column.name}: ${conversionError instanceof Error ? conversionError.message : String(conversionError)}`\n );\n throw conversionError;\n }\n\n // Apply other column properties\n await applyColumnProperties(trx, table.name, column.name, column.object);\n\n // Remove from standard updates to prevent double processing\n table.columns.updated = table.columns.updated.filter((col) => col.name !== column.name);\n }\n };\n\n return {\n createTable,\n alterTable,\n dropTable,\n createTableForeignKeys,\n dropTableForeignKeys,\n handleSpecialTypeConversions,\n getCurrentColumnType,\n };\n};\n"],"names":["debug","createDebug","db","helpers","createHelpers","getSchemaBuilder","trx","getSchemaConnection","createSchema","schema","connection","transaction","createTables","tables","table","name","schemaBuilder","createTable","createTableForeignKeys","dropSchema","dropDatabase","reverse","dropTable","updateSchema","schemaDiff","forceMigration","config","settings","dialect","startSchemaUpdate","existingMetadata","columnTypes","updated","indexes","schemaInspector","getIndexes","foreignKeys","getForeignKeys","client","updatedColumn","columns","getCurrentColumnType","added","removed","dropTableForeignKeys","handleSpecialTypeConversions","alterTable","endSchemaUpdate","createForeignKey","tableBuilder","foreignKey","referencedColumns","referencedTable","onDelete","onUpdate","constraint","foreign","references","inTable","getSchemaName","dropForeignKey","existingForeignKeys","some","existingIndex","dropForeign","createIndex","index","type","primary","constraintName","unique","indexName","dropIndex","existingIndexes","dropPrimary","dropUnique","createColumn","column","args","defaultTo","unsigned","notNullable","col","isNil","value","opts","castArray","prop","raw","omit","nullable","dropColumn","forEach","canAlterConstraints","droppedForeignKeyNames","removedForeignKey","push","updatedForeignKey","object","filter","includes","removedIndex","updatedIndex","removedColumn","alter","addedColumn","canAddIncrements","integer","addedForeignKey","addedIndex","dropTableIfExists","tableName","columnName","schemaName","result","rows","data_type","error","Error","message","String","applyColumnProperties","undefined","defaultValue","defaultOpts","escapedDefault","replace","preloadedColumnTypes","conversionsToApply","currentType","conversionSQL","getColumnTypeConversionSQL","sql","params","targetType","warning","conversion","warningMessage","logger","warn","JSON","stringify","conversionError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builder.js","sources":["../../src/schema/builder.ts"],"sourcesContent":["import { omit, castArray } from 'lodash';\nimport createDebug from 'debug';\n\nimport type { Knex } from 'knex';\nimport type { Database } from '..';\nimport type { Schema, Table, SchemaDiff, TableDiff, ForeignKey, Index, Column } from './types';\n\nconst debug = createDebug('strapi::database');\n\nexport default (db: Database) => {\n const helpers = createHelpers(db);\n\n return {\n /**\n * Returns a knex schema builder instance\n * @param {string} table - table name\n */\n getSchemaBuilder(trx: Knex.Transaction) {\n return db.getSchemaConnection(trx);\n },\n\n /**\n * Creates schema in DB\n */\n async createSchema(schema: Schema) {\n await db.connection.transaction(async (trx) => {\n await this.createTables(schema.tables, trx);\n });\n },\n\n /**\n * Creates a list of tables in a schema\n * @param {KnexInstance} trx\n * @param {Table[]} tables\n */\n async createTables(tables: Table[], trx: Knex.Transaction) {\n for (const table of tables) {\n debug(`Creating table: ${table.name}`);\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.createTable(schemaBuilder, table);\n }\n\n // create FKs once all the tables exist\n for (const table of tables) {\n debug(`Creating table foreign keys: ${table.name}`);\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.createTableForeignKeys(schemaBuilder, table);\n }\n },\n /**\n * Drops schema from DB\n */\n async dropSchema(schema: Schema, { dropDatabase = false } = {}) {\n if (dropDatabase) {\n // TODO: drop database & return as it will drop everything\n return;\n }\n\n await db.connection.transaction(async (trx) => {\n for (const table of schema.tables.reverse()) {\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.dropTable(schemaBuilder, table);\n }\n });\n },\n\n /**\n * Applies a schema diff update in the DB\n * @param {*} schemaDiff\n */\n // TODO: implement force option to disable removal in DB\n async updateSchema(schemaDiff: SchemaDiff['diff']) {\n const forceMigration = db.config.settings?.forceMigration;\n\n await db.dialect.startSchemaUpdate();\n\n // Pre-fetch metadata for all updated tables\n const existingMetadata: Record<string, { indexes: Index[]; foreignKeys: ForeignKey[] }> = {};\n const columnTypes: Record<string, Record<string, string | null>> = {};\n\n for (const table of schemaDiff.tables.updated) {\n existingMetadata[table.name] = {\n indexes: await db.dialect.schemaInspector.getIndexes(table.name),\n foreignKeys: await db.dialect.schemaInspector.getForeignKeys(table.name),\n };\n\n // Pre-fetch column types for PostgreSQL to avoid transaction timeouts\n if (db.config.connection.client === 'postgres') {\n columnTypes[table.name] = {};\n for (const updatedColumn of table.columns.updated) {\n columnTypes[table.name][updatedColumn.name] = await helpers.getCurrentColumnType(\n table.name,\n updatedColumn.name\n );\n }\n }\n }\n\n await db.connection.transaction(async (trx) => {\n await this.createTables(schemaDiff.tables.added, trx);\n\n if (forceMigration) {\n // drop all delete table foreign keys then delete the tables\n for (const table of schemaDiff.tables.removed) {\n debug(`Removing table foreign keys: ${table.name}`);\n\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.dropTableForeignKeys(schemaBuilder, table);\n }\n\n for (const table of schemaDiff.tables.removed) {\n debug(`Removing table: ${table.name}`);\n\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.dropTable(schemaBuilder, table);\n }\n }\n\n for (const table of schemaDiff.tables.updated) {\n debug(`Updating table: ${table.name}`);\n\n // Handle special type conversions before standard alterations\n await helpers.handleSpecialTypeConversions(trx, table, columnTypes[table.name] || {});\n\n // alter table\n const schemaBuilder = this.getSchemaBuilder(trx);\n\n const { indexes, foreignKeys } = existingMetadata[table.name];\n await helpers.alterTable(schemaBuilder, table, { indexes, foreignKeys });\n }\n });\n\n await db.dialect.endSchemaUpdate();\n },\n };\n};\n\nconst createHelpers = (db: Database) => {\n /**\n * Creates a foreign key on a table\n */\n const createForeignKey = (tableBuilder: Knex.TableBuilder, foreignKey: ForeignKey) => {\n const { name, columns, referencedColumns, referencedTable, onDelete, onUpdate } = foreignKey;\n\n const constraint = tableBuilder\n .foreign(columns, name)\n .references(referencedColumns)\n .inTable(db.getSchemaName() ? `${db.getSchemaName()}.${referencedTable}` : referencedTable);\n\n if (onDelete) {\n constraint.onDelete(onDelete);\n }\n\n if (onUpdate) {\n constraint.onUpdate(onUpdate);\n }\n };\n\n /**\n * Drops a foreign key from a table\n */\n const dropForeignKey = (\n tableBuilder: Knex.TableBuilder,\n foreignKey: ForeignKey,\n existingForeignKeys?: ForeignKey[]\n ) => {\n const { name, columns } = foreignKey;\n\n // Check if the index exists in existingIndexes, and return early if it doesn't\n if (\n existingForeignKeys &&\n !existingForeignKeys.some((existingIndex) => existingIndex?.name === name)\n ) {\n debug(`Foreign Key ${name} not found in existing foreign keys. Skipping drop.`);\n return;\n }\n\n tableBuilder.dropForeign(columns, name);\n };\n\n /**\n * Creates an index on a table\n */\n const createIndex = (tableBuilder: Knex.TableBuilder, index: Index) => {\n const { type, columns, name } = index;\n\n switch (type) {\n case 'primary': {\n return tableBuilder.primary(columns, { constraintName: name });\n }\n case 'unique': {\n return tableBuilder.unique(columns, { indexName: name });\n }\n default: {\n return tableBuilder.index(columns, name, type);\n }\n }\n };\n\n /**\n * Drops an index from table\n * @param {Knex.TableBuilder} tableBuilder\n * @param {Index} index\n */\n const dropIndex = (tableBuilder: Knex.TableBuilder, index: Index, existingIndexes?: Index[]) => {\n if (!db.config.settings?.forceMigration) {\n return;\n }\n\n const { type, columns, name } = index;\n\n // Check if the index exists in existingIndexes, and return early if it doesn't\n if (existingIndexes && !existingIndexes.some((existingIndex) => existingIndex?.name === name)) {\n debug(`Index ${index.name} not found in existingIndexes. Skipping drop.`);\n return;\n }\n\n switch (type) {\n case 'primary': {\n return tableBuilder.dropPrimary(name);\n }\n case 'unique': {\n return tableBuilder.dropUnique(columns, name);\n }\n default: {\n return tableBuilder.dropIndex(columns, name);\n }\n }\n };\n\n /**\n * Creates a column in a table\n */\n const createColumn = (tableBuilder: Knex.TableBuilder, column: Column) => {\n const { type, name, args = [], defaultTo, unsigned, notNullable } = column;\n\n const col = (tableBuilder[type as keyof Knex.TableBuilder] as any)(name, ...args);\n\n if (unsigned === true) {\n col.unsigned();\n }\n\n if (defaultTo != null) {\n const [value, opts] = castArray(defaultTo);\n\n if (opts?.isRaw) {\n col.defaultTo(db.connection.raw(value), omit(opts, 'isRaw'));\n } else {\n col.defaultTo(value, opts);\n }\n }\n\n if (notNullable === true) {\n col.notNullable();\n } else {\n col.nullable();\n }\n\n return col;\n };\n\n /**\n * Drops a column from a table\n */\n const dropColumn = (tableBuilder: Knex.TableBuilder, column: Column) => {\n if (!db.config.settings?.forceMigration) {\n return;\n }\n\n return tableBuilder.dropColumn(column.name);\n };\n\n /**\n * Creates a table in a database\n */\n const createTable = async (schemaBuilder: Knex.SchemaBuilder, table: Table) => {\n await schemaBuilder.createTable(table.name, (tableBuilder) => {\n // columns\n (table.columns || []).forEach((column) => createColumn(tableBuilder, column));\n\n // indexes\n (table.indexes || []).forEach((index) => createIndex(tableBuilder, index));\n\n // foreign keys\n\n if (!db.dialect.canAlterConstraints()) {\n (table.foreignKeys || []).forEach((foreignKey) =>\n createForeignKey(tableBuilder, foreignKey)\n );\n }\n });\n };\n\n /**\n * Alters a database table by applying a set of schema changes including updates to columns, indexes, and foreign keys.\n * This function ensures proper ordering of operations to avoid conflicts (e.g., foreign key errors) and handles\n * MySQL-specific quirks where dropping a foreign key can implicitly drop an associated index.\n *\n * @param {Knex.SchemaBuilder} schemaBuilder - Knex SchemaBuilder instance to perform schema operations.\n * @param {TableDiff['diff']} table - A diff object representing the schema changes to be applied to the table.\n * @param {{ indexes: Index[]; foreignKeys: ForeignKey[] }} existingMetadata - Metadata about existing indexes and\n * foreign keys in the table. Used to ensure safe operations and avoid unnecessary modifications.\n * - indexes: Array of existing index definitions.\n * - foreignKeys: Array of existing foreign key definitions.\n */\n const alterTable = async (\n schemaBuilder: Knex.SchemaBuilder,\n table: TableDiff['diff'],\n existingMetadata: { indexes: Index[]; foreignKeys: ForeignKey[] } = {\n indexes: [],\n foreignKeys: [],\n }\n ) => {\n let existingIndexes = [...existingMetadata.indexes];\n const existingForeignKeys = [...existingMetadata.foreignKeys];\n\n // Track dropped foreign keys\n const droppedForeignKeyNames: string[] = [];\n\n await schemaBuilder.alterTable(table.name, async (tableBuilder) => {\n // Drop foreign keys first to avoid foreign key errors in the following steps\n for (const removedForeignKey of table.foreignKeys.removed) {\n debug(`Dropping foreign key ${removedForeignKey.name} on ${table.name}`);\n dropForeignKey(tableBuilder, removedForeignKey, existingForeignKeys);\n\n droppedForeignKeyNames.push(removedForeignKey.name);\n }\n\n for (const updatedForeignKey of table.foreignKeys.updated) {\n debug(`Dropping updated foreign key ${updatedForeignKey.name} on ${table.name}`);\n dropForeignKey(tableBuilder, updatedForeignKey.object, existingForeignKeys);\n\n droppedForeignKeyNames.push(updatedForeignKey.object.name);\n }\n\n // In MySQL, dropping a foreign key can also implicitly drop an index with the same name\n // Remove dropped foreign keys from existingIndexes for MySQL\n if (db.config.connection.client === 'mysql') {\n existingIndexes = existingIndexes.filter(\n (index) => !droppedForeignKeyNames.includes(index.name)\n );\n }\n\n for (const removedIndex of table.indexes.removed) {\n debug(`Dropping index ${removedIndex.name} on ${table.name}`);\n dropIndex(tableBuilder, removedIndex, existingIndexes);\n }\n\n for (const updatedIndex of table.indexes.updated) {\n debug(`Dropping updated index ${updatedIndex.name} on ${table.name}`);\n dropIndex(tableBuilder, updatedIndex.object, existingIndexes);\n }\n\n // Drop columns after FKs have been removed to avoid FK errors\n for (const removedColumn of table.columns.removed) {\n debug(`Dropping column ${removedColumn.name} on ${table.name}`);\n dropColumn(tableBuilder, removedColumn);\n }\n\n // Update existing columns\n for (const updatedColumn of table.columns.updated) {\n debug(`Updating column ${updatedColumn.name} on ${table.name}`);\n\n const { object } = updatedColumn;\n\n if (object.type === 'increments') {\n createColumn(tableBuilder, { ...object, type: 'integer' }).alter();\n } else {\n createColumn(tableBuilder, object).alter();\n }\n }\n\n // Add any new columns\n for (const addedColumn of table.columns.added) {\n debug(`Creating column ${addedColumn.name} on ${table.name}`);\n\n if (addedColumn.type === 'increments' && !db.dialect.canAddIncrements()) {\n tableBuilder.integer(addedColumn.name).unsigned();\n tableBuilder.primary([addedColumn.name]);\n } else {\n createColumn(tableBuilder, addedColumn);\n }\n }\n\n // once the columns have all been updated, we can create indexes again\n for (const updatedForeignKey of table.foreignKeys.updated) {\n debug(`Recreating updated foreign key ${updatedForeignKey.name} on ${table.name}`);\n createForeignKey(tableBuilder, updatedForeignKey.object);\n }\n\n for (const updatedIndex of table.indexes.updated) {\n debug(`Recreating updated index ${updatedIndex.name} on ${table.name}`);\n createIndex(tableBuilder, updatedIndex.object);\n }\n\n for (const addedForeignKey of table.foreignKeys.added) {\n debug(`Creating foreign key ${addedForeignKey.name} on ${table.name}`);\n createForeignKey(tableBuilder, addedForeignKey);\n }\n\n for (const addedIndex of table.indexes.added) {\n debug(`Creating index ${addedIndex.name} on ${table.name}`);\n createIndex(tableBuilder, addedIndex);\n }\n });\n };\n\n /**\n * Drops a table from a database\n */\n const dropTable = (schemaBuilder: Knex.SchemaBuilder, table: Table) => {\n if (!db.config.settings.forceMigration) {\n return;\n }\n\n return schemaBuilder.dropTableIfExists(table.name);\n };\n\n /**\n * Creates a table foreign keys constraints\n */\n const createTableForeignKeys = async (schemaBuilder: Knex.SchemaBuilder, table: Table) => {\n // foreign keys\n await schemaBuilder.table(table.name, (tableBuilder) => {\n (table.foreignKeys || []).forEach((foreignKey) => createForeignKey(tableBuilder, foreignKey));\n });\n };\n\n /**\n * Drops a table foreign keys constraints\n */\n const dropTableForeignKeys = async (schemaBuilder: Knex.SchemaBuilder, table: Table) => {\n if (!db.config.settings.forceMigration) {\n return;\n }\n\n // foreign keys\n await schemaBuilder.table(table.name, (tableBuilder) => {\n (table.foreignKeys || []).forEach((foreignKey) => dropForeignKey(tableBuilder, foreignKey));\n });\n };\n\n /**\n * Get the current column type from the database\n */\n const getCurrentColumnType = async (\n tableName: string,\n columnName: string\n ): Promise<string | null> => {\n try {\n const schemaName = db.getSchemaName();\n const result = await db.connection.raw(\n `\n SELECT data_type \n FROM information_schema.columns \n WHERE table_name = ? \n AND column_name = ?\n ${schemaName ? 'AND table_schema = ?' : ''}\n LIMIT 1\n `,\n schemaName ? [tableName, columnName, schemaName] : [tableName, columnName]\n );\n\n return result.rows?.[0]?.data_type || null;\n } catch (error) {\n // Log error but don't fail the migration\n debug(\n `Failed to get column type for ${tableName}.${columnName}: ${error instanceof Error ? error.message : String(error)}`\n );\n return null;\n }\n };\n\n /**\n * Apply column properties after type conversion\n */\n const applyColumnProperties = async (\n trx: Knex.Transaction,\n tableName: string,\n columnName: string,\n column: Column\n ) => {\n // Apply NOT NULL constraint\n if (column.notNullable) {\n await trx.raw(`ALTER TABLE ?? ALTER COLUMN ?? SET NOT NULL`, [tableName, columnName]);\n } else {\n await trx.raw(`ALTER TABLE ?? ALTER COLUMN ?? DROP NOT NULL`, [tableName, columnName]);\n }\n\n // Apply default value\n if (column.defaultTo !== undefined) {\n const [defaultValue, defaultOpts] = castArray(column.defaultTo);\n if (defaultOpts?.isRaw) {\n await trx.raw(`ALTER TABLE ?? ALTER COLUMN ?? SET DEFAULT ${defaultValue}`, [\n tableName,\n columnName,\n ]);\n } else {\n // PostgreSQL doesn't support parameterized SET DEFAULT, so we need to escape the value\n const escapedDefault =\n typeof defaultValue === 'string' ? `'${defaultValue.replace(/'/g, \"''\")}'` : defaultValue;\n await trx.raw(`ALTER TABLE ?? ALTER COLUMN ?? SET DEFAULT ${escapedDefault}`, [\n tableName,\n columnName,\n ]);\n }\n }\n };\n\n /**\n * Handle special type conversions that require custom SQL\n */\n const handleSpecialTypeConversions = async (\n trx: Knex.Transaction,\n table: TableDiff['diff'],\n preloadedColumnTypes: Record<string, string | null> = {}\n ) => {\n // Only PostgreSQL needs special handling for now\n if (db.config.connection.client !== 'postgres') {\n return;\n }\n\n const conversionsToApply = [];\n\n // Check each updated column for special type conversions\n for (const updatedColumn of table.columns.updated) {\n const { name: columnName, object: column } = updatedColumn;\n\n // Use pre-loaded column type if available, otherwise fetch it\n const currentType =\n preloadedColumnTypes[columnName] ?? (await getCurrentColumnType(table.name, columnName));\n\n if (currentType) {\n // Check if dialect has special conversion SQL\n const conversionSQL = db.dialect.getColumnTypeConversionSQL(currentType, column.type);\n\n if (conversionSQL) {\n conversionsToApply.push({\n column: updatedColumn,\n sql: conversionSQL.sql,\n params: [table.name, columnName, columnName],\n currentType,\n targetType: column.type,\n warning: conversionSQL.warning,\n });\n }\n }\n }\n\n // Apply conversions\n for (const conversion of conversionsToApply) {\n const { column, sql, params, currentType, targetType, warning } = conversion;\n\n // Log warning about type conversion\n const warningMessage = warning || 'This conversion may result in data changes.';\n db.logger.warn(\n `Database type conversion: \"${table.name}.${column.name}\" from \"${currentType}\" to \"${targetType}\". ${warningMessage}`\n );\n\n debug(`Applying special type conversion for column ${column.name} on ${table.name}`);\n debug(`Executing SQL: ${sql} with params: ${JSON.stringify(params)}`);\n\n try {\n // Execute the conversion using the transaction connection\n await trx.raw(sql, params);\n debug(`Successfully converted ${column.name} from ${currentType} to ${targetType}`);\n } catch (conversionError) {\n db.logger.error(\n `Failed to convert column ${column.name}: ${conversionError instanceof Error ? conversionError.message : String(conversionError)}`\n );\n throw conversionError;\n }\n\n // Apply other column properties\n await applyColumnProperties(trx, table.name, column.name, column.object);\n\n // Remove from standard updates to prevent double processing\n table.columns.updated = table.columns.updated.filter((col) => col.name !== column.name);\n }\n };\n\n return {\n createTable,\n alterTable,\n dropTable,\n createTableForeignKeys,\n dropTableForeignKeys,\n handleSpecialTypeConversions,\n getCurrentColumnType,\n };\n};\n"],"names":["debug","createDebug","db","helpers","createHelpers","getSchemaBuilder","trx","getSchemaConnection","createSchema","schema","connection","transaction","createTables","tables","table","name","schemaBuilder","createTable","createTableForeignKeys","dropSchema","dropDatabase","reverse","dropTable","updateSchema","schemaDiff","forceMigration","config","settings","dialect","startSchemaUpdate","existingMetadata","columnTypes","updated","indexes","schemaInspector","getIndexes","foreignKeys","getForeignKeys","client","updatedColumn","columns","getCurrentColumnType","added","removed","dropTableForeignKeys","handleSpecialTypeConversions","alterTable","endSchemaUpdate","createForeignKey","tableBuilder","foreignKey","referencedColumns","referencedTable","onDelete","onUpdate","constraint","foreign","references","inTable","getSchemaName","dropForeignKey","existingForeignKeys","some","existingIndex","dropForeign","createIndex","index","type","primary","constraintName","unique","indexName","dropIndex","existingIndexes","dropPrimary","dropUnique","createColumn","column","args","defaultTo","unsigned","notNullable","col","value","opts","castArray","isRaw","raw","omit","nullable","dropColumn","forEach","canAlterConstraints","droppedForeignKeyNames","removedForeignKey","push","updatedForeignKey","object","filter","includes","removedIndex","updatedIndex","removedColumn","alter","addedColumn","canAddIncrements","integer","addedForeignKey","addedIndex","dropTableIfExists","tableName","columnName","schemaName","result","rows","data_type","error","Error","message","String","applyColumnProperties","undefined","defaultValue","defaultOpts","escapedDefault","replace","preloadedColumnTypes","conversionsToApply","currentType","conversionSQL","getColumnTypeConversionSQL","sql","params","targetType","warning","conversion","warningMessage","logger","warn","JSON","stringify","conversionError"],"mappings":"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"}
|
package/dist/schema/builder.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { castArray,
|
|
1
|
+
import { castArray, omit } from 'lodash';
|
|
2
2
|
import createDebug from 'debug';
|
|
3
3
|
|
|
4
4
|
const debug = createDebug('strapi::database');
|
|
@@ -188,10 +188,10 @@ const createHelpers = (db)=>{
|
|
|
188
188
|
if (unsigned === true) {
|
|
189
189
|
col.unsigned();
|
|
190
190
|
}
|
|
191
|
-
if (
|
|
191
|
+
if (defaultTo != null) {
|
|
192
192
|
const [value, opts] = castArray(defaultTo);
|
|
193
|
-
if (
|
|
194
|
-
col.defaultTo(db.connection.raw(value), omit('isRaw'
|
|
193
|
+
if (opts?.isRaw) {
|
|
194
|
+
col.defaultTo(db.connection.raw(value), omit(opts, 'isRaw'));
|
|
195
195
|
} else {
|
|
196
196
|
col.defaultTo(value, opts);
|
|
197
197
|
}
|
|
@@ -394,7 +394,7 @@ const createHelpers = (db)=>{
|
|
|
394
394
|
// Apply default value
|
|
395
395
|
if (column.defaultTo !== undefined) {
|
|
396
396
|
const [defaultValue, defaultOpts] = castArray(column.defaultTo);
|
|
397
|
-
if (
|
|
397
|
+
if (defaultOpts?.isRaw) {
|
|
398
398
|
await trx.raw(`ALTER TABLE ?? ALTER COLUMN ?? SET DEFAULT ${defaultValue}`, [
|
|
399
399
|
tableName,
|
|
400
400
|
columnName
|