joist-orm 1.50.6 → 1.52.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.
@@ -17,7 +17,7 @@ export interface EntityMetadata<T extends Entity> {
17
17
  tagName: string;
18
18
  fields: Record<string, Field>;
19
19
  allFields: Record<string, Field & {
20
- alias: string;
20
+ aliasSuffix: string;
21
21
  }>;
22
22
  config: ConfigApi<T, any>;
23
23
  timestampFields: TimestampFields;
@@ -1,8 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.abbreviation = exports.buildQuery = void 0;
4
- const joist_utils_1 = require("joist-utils");
5
- const Entity_1 = require("./Entity");
6
4
  const EntityGraphQLFilter_1 = require("./EntityGraphQLFilter");
7
5
  const EntityManager_1 = require("./EntityManager");
8
6
  const EntityMetadata_1 = require("./EntityMetadata");
@@ -18,115 +16,36 @@ const utils_1 = require("./utils");
18
16
  function buildQuery(knex, type, filter) {
19
17
  const meta = (0, EntityMetadata_1.getMetadata)(type);
20
18
  const { where, orderBy, limit, offset } = filter;
21
- const aliases = {};
22
- function getAlias(tableName) {
23
- const abbrev = abbreviation(tableName);
24
- const i = aliases[abbrev] || 0;
25
- aliases[abbrev] = i + 1;
26
- return i === 0 ? abbrev : `${abbrev}${i}`;
27
- }
28
- const alias = getAlias(meta.tableName);
29
- let query = knex.select(`${alias}.*`).from(`${meta.tableName} AS ${alias}`);
30
- // Define a function for recursively adding joins & filters
31
- function addClauses(meta, alias, where, orderBy) {
32
- // Combine the where and orderBy keys so that we can add them to aliases as that same time
33
- // Filter out undefined values as they should be ignored (for now?)
34
- const keys = [
35
- ...(where ? Object.keys(where).filter((key) => where[key] !== undefined) : []),
36
- ...(orderBy ? Object.keys(orderBy).filter((key) => orderBy[key] !== undefined) : []),
37
- ];
38
- keys.forEach((key) => {
39
- const field = meta.allFields[key] ?? (0, utils_1.fail)(`${key} not found`);
40
- // We may/may not have a where clause or orderBy for this key, but we should have at least one of them.
41
- const clause = where && where[key];
42
- const hasClause = where && key in where;
43
- const order = orderBy && orderBy[key];
44
- const hasOrder = !!order;
45
- if (field.kind === "poly") {
46
- if (Array.isArray(clause)) {
47
- const ids = clause.map((e) => (0, index_1.maybeResolveReferenceToId)(e));
48
- const idsByConstructor = (0, joist_utils_1.groupBy)(ids, (id) => (0, index_1.getConstructorFromTaggedId)(id).name);
49
- query = query.where((query) => field.serde.columns.reduce((query, { columnName, otherMetadata, mapToDb }) => {
50
- const ids = idsByConstructor[otherMetadata().cstr.name];
51
- return ids && ids.length > 0 ? query.orWhereIn(`${alias}.${columnName}`, ids.map(mapToDb)) : query;
52
- }, query));
53
- }
54
- else if ((0, Entity_1.isEntity)(clause) || typeof clause === "string") {
55
- query = addPolyClause(query, alias, field, meta, clause);
56
- }
57
- else if (clause === null) {
58
- query = field.components.reduce((query, component) => addPolyClause(query, alias, field, meta,
59
- // Not really sure if this is safe, being lazy for now...
60
- (0, index_1.asConcreteCstr)(component.otherMetadata().cstr), clause), query);
61
- }
62
- else if (typeof clause === "object" && Object.keys(clause).length === 1 && "ne" in clause) {
63
- const { ne: value } = clause;
64
- if ((0, Entity_1.isEntity)(value) || typeof value === "string") {
65
- const column = polyColumnFor(meta, field, value);
66
- query = query.where((query) => query
67
- .whereNot(`${alias}.${column.columnName}`, column.mapToDb(value))
68
- // for some reason whereNot excludes null values, so explicitly include them here
69
- .orWhereNull(`${alias}.${column.columnName}`));
70
- }
71
- else if (value === null) {
72
- query = query.where((b) => field.components.reduce((b, { columnName }) => b.orWhereNotNull(`${alias}.${columnName}`), b));
73
- }
74
- }
75
- }
76
- else if (field.kind === "o2o") {
77
- // Add `otherTable.column = ...` clause, unless `key` is not in `where`, i.e. there is only an orderBy for this fk
78
- const otherMeta = field.otherMetadata();
79
- const otherAlias = getAlias(otherMeta.tableName);
80
- const otherColumn = otherMeta.fields[field.otherFieldName];
81
- query = query.leftJoin(`${otherMeta.tableName} AS ${otherAlias}`, `${otherAlias}.${otherColumn.serde.columns[0].columnName}`, `${alias}.id`);
82
- const [shouldAddClauses, _query] = hasClause
83
- ? addForeignKeyClause(query, otherAlias, otherMeta.fields["id"].serde.columns[0], clause)
84
- : [false, query];
85
- query = _query;
86
- if (shouldAddClauses || hasOrder) {
87
- addClauses(otherMeta, otherAlias, shouldAddClauses ? clause : undefined, hasOrder ? order : undefined);
88
- }
89
- }
90
- else if (field.kind === "m2o") {
91
- const serde = (meta.fields[key] ?? (0, utils_1.fail)(`${key} not found`)).serde;
92
- // TODO Currently hardcoded to single-column support; poly is handled above this
93
- const column = serde.columns[0];
94
- // Add `otherTable.column = ...` clause, unless `key` is not in `where`, i.e. there is only an orderBy for this fk
95
- const [whereNeedsJoin, _query] = hasClause ? addForeignKeyClause(query, alias, column, clause) : [false, query];
96
- query = _query;
97
- if (whereNeedsJoin || hasOrder) {
98
- // Add a join for this column
99
- const otherMeta = field.otherMetadata();
100
- const otherAlias = getAlias(otherMeta.tableName);
101
- query = query.innerJoin(`${otherMeta.tableName} AS ${otherAlias}`, `${alias}.${column.columnName}`, `${otherAlias}.id`);
102
- // Then recurse to add its conditions to the query
103
- addClauses(otherMeta, otherAlias, whereNeedsJoin ? clause : undefined, hasOrder ? order : undefined);
104
- }
105
- }
106
- else {
107
- const field = meta.allFields[key] ?? (0, utils_1.fail)(`${key} not found`);
108
- const serde = field.serde;
109
- // TODO Currently hardcoded to single-column support; poly is handled above this
110
- const column = serde.columns[0];
111
- // TODO Currently we only support base-type WHEREs if the sub-type is the main `em.find`
112
- // const maybeBaseAlias = field.alias;
113
- query = hasClause ? addPrimitiveClause(query, alias, column, clause) : query;
114
- // This is not a foreign key column, so it'll have the primitive filters/order bys
115
- if (order) {
116
- query = query.orderBy(`${alias}.${column.columnName}`, order);
117
- }
118
- }
19
+ const parsed = (0, index_1.parseFindQuery)(meta, filter.where, filter.orderBy);
20
+ const primary = parsed.tables.find((t) => t.join === "primary");
21
+ let query = knex.from(`${primary.table} AS ${primary.alias}`);
22
+ parsed.selects.forEach((s) => {
23
+ query.select(knex.raw(s));
24
+ });
25
+ parsed.tables.forEach((t) => {
26
+ if (t.join === "left") {
27
+ query.leftOuterJoin(`${t.table} AS ${t.alias}`, t.col1, t.col2);
28
+ }
29
+ else if (t.join !== "primary") {
30
+ query.join(`${t.table} AS ${t.alias}`, t.col1, t.col2);
31
+ }
32
+ });
33
+ parsed.conditions.forEach((c) => {
34
+ addColumnCondition(query, c);
35
+ });
36
+ parsed.complexConditions &&
37
+ parsed.complexConditions.forEach((c) => {
38
+ addComplexCondition(query, c);
39
+ });
40
+ parsed.orderBys &&
41
+ parsed.orderBys.forEach(({ alias, column, order }) => {
42
+ query.orderBy(`${alias}.${column}`, order);
119
43
  });
120
- }
121
- addClauses(meta, alias, where, orderBy);
122
- if ((0, index_1.needsClassPerTableJoins)(meta)) {
123
- (0, index_1.addTablePerClassJoinsAndClassTag)(knex, meta, query, alias);
124
- }
125
44
  // Even if they already added orders, add id as the last one to get deterministic output
126
- query = query.orderBy(`${alias}.id`);
127
- query = query.limit(limit || EntityManager_1.entityLimit);
45
+ query.orderBy(`${primary.alias}.id`);
46
+ query.limit(limit || EntityManager_1.entityLimit);
128
47
  if (offset) {
129
- query = query.offset(offset);
48
+ query.offset(offset);
130
49
  }
131
50
  return query;
132
51
  }
@@ -138,122 +57,55 @@ function abbreviation(tableName) {
138
57
  .join("");
139
58
  }
140
59
  exports.abbreviation = abbreviation;
141
- function polyColumnFor(meta, field, value) {
142
- const cstr = typeof value === "function" ? value : (0, index_1.maybeGetConstructorFromReference)(value);
143
- return (field.serde.columns.find((c) => c.otherMetadata().cstr === cstr) ??
144
- (0, utils_1.fail)(`${cstr.name} cannot be used as a filter on ${field.fieldName}`));
145
- }
146
- function addPolyClause(query, alias, field, meta, value, clause) {
147
- clause = clause === undefined ? value : clause;
148
- const column = polyColumnFor(meta, field, value);
149
- const [, result] = addForeignKeyClause(query, alias, column, clause);
150
- return result;
151
- }
152
- function addForeignKeyClause(query, alias, column, clause) {
153
- // I.e. this could be { authorFk: authorEntity | null | id | { ...recurse... } }
154
- const clauseKeys = typeof clause === "object" && clause !== null
155
- ? Object.keys(clause).filter((key) => clause[key] !== undefined)
156
- : [];
157
- if ((0, Entity_1.isEntity)(clause) || typeof clause === "string" || Array.isArray(clause)) {
158
- // I.e. { authorFk: authorEntity | id | id[] }
159
- if ((0, Entity_1.isEntity)(clause) && clause.id === undefined) {
160
- // The user is filtering on an unsaved entity, which will just never have any rows, so throw in -1
161
- return [false, query.where(`${alias}.${column.columnName}`, -1)];
162
- }
163
- else if (Array.isArray(clause)) {
164
- return [
165
- false,
166
- query.whereIn(`${alias}.${column.columnName}`, clause.map((id) => column.mapToDb(id))),
167
- ];
168
- }
169
- else {
170
- return [false, query.where(`${alias}.${column.columnName}`, column.mapToDb(clause))];
171
- }
172
- }
173
- else if (clause === null) {
174
- // I.e. { authorFk: null | undefined }
175
- return [false, query.whereNull(`${alias}.${column.columnName}`)];
176
- }
177
- else if (clauseKeys.length === 1 && clauseKeys[0] === "id") {
178
- // I.e. { authorFk: { id: string } } || { authorFk: { id: string[] } }
179
- // If only querying on the id, we can skip the join
180
- return [false, addPrimitiveClause(query, alias, column, clause["id"])];
181
- }
182
- else if (clauseKeys.length === 1 && clauseKeys[0] === "ne") {
183
- // I.e. { authorFk: { ne: string | null | undefined } }
184
- const value = clause["ne"];
185
- if (value === null || value === undefined) {
186
- return [false, query.whereNotNull(`${alias}.${column.columnName}`)];
187
- }
188
- else if (typeof value === "string") {
189
- return [false, query.whereNot(`${alias}.${column.columnName}`, column.mapToDb(value))];
190
- }
191
- else {
192
- throw new Error("Not implemented");
193
- }
194
- }
195
- else {
196
- // I.e. { authorFk: { ...authorFilter... } }
197
- return [clause !== undefined, query];
198
- }
199
- }
200
- function addPrimitiveClause(query, alias, column, clause) {
201
- if (clause && typeof clause === "object" && EntityGraphQLFilter_1.operators.find((op) => Object.keys(clause).includes(op))) {
202
- // I.e. `{ primitiveField: { gt: value } }`
203
- return Object.entries(clause).reduce((query, [op, value]) => addPrimitiveOperator(query, alias, column, op, value), query);
204
- }
205
- else if (clause && typeof clause === "object" && "op" in clause) {
206
- // I.e. { primitiveField: { op: "gt", value: 1 } }`
207
- return addPrimitiveOperator(query, alias, column, clause.op, clause.value);
208
- }
209
- else if (Array.isArray(clause)) {
210
- // I.e. `{ primitiveField: value[] }`
211
- if (column.isArray) {
212
- return query.where(`${alias}.${column.columnName}`, "@>", column.mapToDb(clause));
213
- }
214
- else {
215
- return query.whereIn(`${alias}.${column.columnName}`, clause.map((v) => column.mapToDb(v)));
216
- }
217
- }
218
- else if (clause === null) {
219
- // I.e. `{ primitiveField: null }`
220
- return query.whereNull(`${alias}.${column.columnName}`);
221
- }
222
- else if (clause === undefined) {
223
- // I.e. `{ primitiveField: undefined }`
224
- // Currently we treat this like a partial filter, i.e. don't include it. Seems odd
225
- // unless this is opt-in, i.e. maybe only do this for `findGql`?
226
- return query;
227
- }
228
- else {
229
- // I.e. `{ primitiveField: value }`
230
- // TODO In theory could add a addToQuery method to Serde to generalize this to multi-columns fields.
231
- return query.where(`${alias}.${column.columnName}`, column.mapToDb(clause));
232
- }
60
+ function addComplexCondition(query, complex) {
61
+ query.where((q) => {
62
+ const op = complex.op === "and" ? "andWhere" : "orWhere";
63
+ complex.conditions.forEach((c) => {
64
+ if ("op" in c) {
65
+ throw new Error("Not implemented");
66
+ }
67
+ else {
68
+ q[op]((q) => addColumnCondition(q, c));
69
+ }
70
+ });
71
+ });
233
72
  }
234
- function addPrimitiveOperator(query, alias, column, op, value) {
235
- const columnName = `${alias}.${column.columnName}`;
236
- if (value === null || value === undefined) {
237
- if (op === "ne") {
238
- return query.whereNotNull(columnName);
239
- }
240
- else if (op === "eq") {
241
- return query.whereNull(columnName);
242
- }
243
- else {
244
- throw new Error("Only ne is supported when the value is undefined or null");
245
- }
246
- }
247
- else if (op === "in") {
248
- return query.whereIn(columnName, value.map((v) => column.mapToDb(v)));
249
- }
250
- else if (op === "between") {
251
- const values = value.map((v) => column.mapToDb(v));
252
- return query.where(columnName, ">=", values[0]).where(columnName, "<=", values[1]);
253
- }
254
- else {
255
- const fn = EntityGraphQLFilter_1.opToFn[op] ?? (0, utils_1.fail)(`Invalid operator ${op}`);
256
- return query.where(columnName, fn, column.mapToDb(value));
73
+ function addColumnCondition(query, cc) {
74
+ const { alias, column, cond } = cc;
75
+ const columnName = `${alias}.${column}`;
76
+ switch (cond.kind) {
77
+ case "eq":
78
+ case "ne":
79
+ case "gte":
80
+ case "gt":
81
+ case "lte":
82
+ case "lt":
83
+ case "like":
84
+ case "ilike":
85
+ const fn = EntityGraphQLFilter_1.opToFn[cond.kind] ?? (0, utils_1.fail)(`Invalid operator ${cond.kind}`);
86
+ query.where(columnName, fn, cond.value);
87
+ break;
88
+ case "is-null":
89
+ query.whereNull(columnName);
90
+ break;
91
+ case "not-null":
92
+ query.whereNotNull(columnName);
93
+ break;
94
+ case "in":
95
+ query.whereIn(columnName, cond.value);
96
+ break;
97
+ case "@>":
98
+ query.where(columnName, "@>", cond.value);
99
+ break;
100
+ case "between":
101
+ const [min, max] = cond.value;
102
+ query.where(columnName, ">=", min);
103
+ query.where(columnName, "<=", max);
104
+ break;
105
+ case "pass":
106
+ break;
107
+ default:
108
+ (0, utils_1.assertNever)(cond);
257
109
  }
258
110
  }
259
111
  //# sourceMappingURL=QueryBuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../src/QueryBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../src/QueryBuilder.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,53 @@
1
- import { ValueFilter } from "./EntityFilter";
1
+ import { OrderBy, ValueFilter } from "./EntityFilter";
2
2
  import { EntityMetadata } from "./EntityMetadata";
3
+ export interface ExpressionCondition {
4
+ op: "and" | "or";
5
+ conditions: (ExpressionCondition | ColumnCondition)[];
6
+ }
7
+ export interface ColumnCondition {
8
+ alias: string;
9
+ column: string;
10
+ cond: ParsedValueFilter<any>;
11
+ }
12
+ interface PrimaryTable {
13
+ join: "primary";
14
+ alias: string;
15
+ table: string;
16
+ }
17
+ interface JoinTable {
18
+ join: "m2o" | "o2m" | "o2o" | "left";
19
+ alias: string;
20
+ table: string;
21
+ col1: string;
22
+ col2: string;
23
+ }
24
+ type ParsedTable = PrimaryTable | JoinTable;
25
+ interface ParsedOrderBy {
26
+ alias: string;
27
+ column: string;
28
+ order: OrderBy;
29
+ }
30
+ /** The result of parsing an `em.find` filter. */
31
+ interface ParsedFindQuery {
32
+ selects: string[];
33
+ /** The primary table plus any joins. */
34
+ tables: ParsedTable[];
35
+ /** Simple conditions that are ANDd together. */
36
+ conditions: ColumnCondition[];
37
+ /** Any optional complex conditions that will be ANDd with the simple conditions. */
38
+ complexConditions?: ExpressionCondition[];
39
+ /** Any optional orders to add before the default 'order by id'. */
40
+ orderBys?: ParsedOrderBy[];
41
+ }
42
+ /** Parses an `em.find` filter into a `ParsedFindQuery` for simpler execution. */
43
+ export declare function parseFindQuery(meta: EntityMetadata<any>, filter: any, orderBy?: any): ParsedFindQuery;
3
44
  /** An ADT version of `EntityFilter`. */
4
- export type ParsedEntityFilter = {
5
- kind: "eq";
6
- id: number | null;
7
- } | {
8
- kind: "ne";
9
- id: number | null;
10
- } | {
11
- kind: "in";
12
- ids: number[];
13
- } | {
45
+ export type ParsedEntityFilter = ParsedValueFilter<string | number> | {
14
46
  kind: "join";
15
- subFilter: any;
47
+ subFilter: object;
16
48
  };
17
- export declare function parseEntityFilter(meta: EntityMetadata<any>, filter: any): ParsedEntityFilter;
49
+ /** Parses an entity filter, which could be "just an id", an array of ids, or a nested filter. */
50
+ export declare function parseEntityFilter(filter: any): ParsedEntityFilter;
18
51
  /**
19
52
  * An ADT version of `ValueFilter`.
20
53
  *
@@ -22,10 +55,13 @@ export declare function parseEntityFilter(meta: EntityMetadata<any>, filter: any
22
55
  */
23
56
  export type ParsedValueFilter<V> = {
24
57
  kind: "eq";
25
- value: V | null;
58
+ value: V;
26
59
  } | {
27
60
  kind: "in";
28
61
  value: V[];
62
+ } | {
63
+ kind: "@>";
64
+ value: V[];
29
65
  } | {
30
66
  kind: "gt";
31
67
  value: V;
@@ -34,7 +70,11 @@ export type ParsedValueFilter<V> = {
34
70
  value: V;
35
71
  } | {
36
72
  kind: "ne";
37
- value: V | null;
73
+ value: V;
74
+ } | {
75
+ kind: "is-null";
76
+ } | {
77
+ kind: "not-null";
38
78
  } | {
39
79
  kind: "lt";
40
80
  value: V;
@@ -54,3 +94,4 @@ export type ParsedValueFilter<V> = {
54
94
  value: [V, V];
55
95
  };
56
96
  export declare function parseValueFilter<V>(filter: ValueFilter<V, any>): ParsedValueFilter<V>;
97
+ export {};