@ts-awesome/orm 1.2.0-rc8 → 1.2.1-rc0

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/builder.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { IBuildableQuery, IBuildableSelectQuery, IDeleteBuilder, IInsertBuilder, ISelectBuilder, ITableInfo, IUpdateBuilder, IUpsertBuilder, TableMetaProvider, IFieldInfo, IBuildableUpsertQuery, ITableRef, IBuildableDeleteQuery, IBuildableUpdateQuery, IBuildableInsertQuery, IIndexInfo } from './interfaces';
1
+ import { IBuildableQuery, IBuildableSelectQuery, IDeleteBuilder, IInsertBuilder, IOperandable, ISelectBuilder, ITableInfo, IUpdateBuilder, IUpsertBuilder, TableMetaProvider, IFieldInfo, IBuildableUpsertQuery, ITableRef, IBuildableDeleteQuery, IBuildableUpdateQuery, IBuildableInsertQuery, IIndexInfo } from './interfaces';
2
2
  export interface IExpr {
3
3
  _alias?: string;
4
4
  _column?: string;
@@ -19,7 +19,7 @@ export declare class TableRef<T extends TableMetaProvider> implements ITableRef<
19
19
  get indexes(): IIndexInfo<T>[];
20
20
  }
21
21
  export declare function readModelMeta<T extends TableMetaProvider>(Model: T, required?: boolean): ITableInfo;
22
- export declare function Select<T extends TableMetaProvider>(_: T, distinct?: boolean): ISelectBuilder<InstanceType<T>> & IBuildableSelectQuery;
22
+ export declare function Select<T extends TableMetaProvider>(_: T | IOperandable<T>, distinct?: boolean): ISelectBuilder<InstanceType<T>> & IBuildableSelectQuery;
23
23
  export declare function Insert<T extends TableMetaProvider>(_: T): IInsertBuilder<InstanceType<T>> & IBuildableInsertQuery;
24
24
  export declare function Upsert<T extends TableMetaProvider>(_: T): IUpsertBuilder<InstanceType<T>> & IBuildableUpsertQuery;
25
25
  export declare function Update<T extends TableMetaProvider>(_: T): IUpdateBuilder<InstanceType<T>> & IBuildableUpdateQuery;
package/dist/builder.js CHANGED
@@ -11,8 +11,8 @@ function proxy({ tableName: originalTableName, fields, primaryKey }, ignoreTable
11
11
  if (!fields.has(property)) {
12
12
  throw new Error(`Field '${property}' should be annotated with @dbField() or @dbManyField()`);
13
13
  }
14
- const { relatedTo, name } = fields.get(property);
15
- if (!relatedTo) {
14
+ const { builder, relatedTo, name } = fields.get(property);
15
+ if (!relatedTo && !builder) {
16
16
  const ref = resolveColumn(property, { tableName, fields });
17
17
  if (ignoreTableName) {
18
18
  ref.table = undefined;
@@ -22,6 +22,12 @@ function proxy({ tableName: originalTableName, fields, primaryKey }, ignoreTable
22
22
  if (!primaryKey) {
23
23
  throw new Error('@dbManyField() should be used on table with single field PK');
24
24
  }
25
+ if (builder) {
26
+ const pk = new wrappers_1.ColumnWrapper({ table: tableName, name: primaryKey });
27
+ const query = builder(pk);
28
+ const stripped = Object.fromEntries(Object.entries(query).filter(([, value]) => typeof value !== 'function'));
29
+ return new wrappers_1.Operandable('SUBQUERY', [stripped]);
30
+ }
25
31
  return new wrappers_1.Operandable('SUBQUERY', [{
26
32
  _type: 'SELECT',
27
33
  _columns: [
@@ -41,17 +47,19 @@ function proxy({ tableName: originalTableName, fields, primaryKey }, ignoreTable
41
47
  }
42
48
  });
43
49
  }
44
- function treeOf(_, tableInfo) {
50
+ function treeOf(_, tableInfo, alias) {
45
51
  validateModel(_, tableInfo);
52
+ const tableName = alias !== null && alias !== void 0 ? alias : tableInfo.tableName;
46
53
  return operators_1.and(...Object.keys(_)
47
- .map(field => new wrappers_1.ColumnWrapper(resolveColumn(field, tableInfo)).eq(_[field])));
54
+ .map(field => new wrappers_1.ColumnWrapper(resolveColumn(field, { tableName, fields: tableInfo.fields })).eq(_[field])));
48
55
  }
49
- function columnsOf(_, { tableName, fields }) {
56
+ function columnsOf(_, { tableName: originaltableName, fields }, alias) {
50
57
  _.forEach(field => {
51
- if (!fields.has(field) || fields.get(field).relatedTo) {
58
+ if (!fields.has(field) || fields.get(field).relatedTo || fields.get(field).builder) {
52
59
  throw new Error(`Field '${field}' should be decorated with @dbField`);
53
60
  }
54
61
  });
62
+ const tableName = alias !== null && alias !== void 0 ? alias : originaltableName;
55
63
  return _.map(field => ({ _column: resolveColumn(field, { tableName, fields }) }));
56
64
  }
57
65
  function resolveColumn(property, { tableName, fields }) {
@@ -67,6 +75,7 @@ function resolveColumn(property, { tableName, fields }) {
67
75
  table: tableName,
68
76
  name,
69
77
  wrapper: kind === null || kind === void 0 ? void 0 : kind.readQuery,
78
+ // writer: kind?.writer,
70
79
  };
71
80
  }
72
81
  function validateModel(_, tableInfo) {
@@ -81,39 +90,39 @@ function validateFields(_, tableInfo) {
81
90
  }
82
91
  function where(_) {
83
92
  const tree = typeof _ === 'function'
84
- ? _(proxy(this._table))
85
- : treeOf(_, this._table);
93
+ ? _(proxy(this._table, false, this._alias))
94
+ : treeOf(_, this._table, this._alias);
86
95
  this._where = this._where || [];
87
96
  this._where.push(tree);
88
97
  return this;
89
98
  }
90
99
  function having(_) {
91
- const tree = _(proxy(this._table));
100
+ const tree = _(proxy(this._table, false, this._alias));
92
101
  this._having = this._having || [];
93
102
  this._having.push(tree);
94
103
  return this;
95
104
  }
96
105
  function columns(_) {
97
106
  this._columns = typeof _ === 'function'
98
- ? _(proxy(this._table))
107
+ ? _(proxy(this._table, false, this._alias))
99
108
  : columnsOf(_, this._table);
100
109
  return this;
101
110
  }
102
111
  function orderBy(_) {
103
112
  this._orderBy = typeof _ === 'function'
104
- ? _(proxy(this._table))
113
+ ? _(proxy(this._table, false, this._alias))
105
114
  : columnsOf(_, this._table);
106
115
  return this;
107
116
  }
108
117
  function groupBy(_) {
109
118
  this._groupBy = typeof _ === 'function'
110
- ? _(proxy(this._table))
119
+ ? _(proxy(this._table, false, this._alias))
111
120
  : columnsOf(_, this._table);
112
121
  return this;
113
122
  }
114
123
  function values(_) {
115
124
  if (typeof _ === 'function') {
116
- this._values = _(proxy(this._table));
125
+ this._values = _(proxy(this._table, false, this._alias));
117
126
  }
118
127
  else {
119
128
  validateModel(_, this._table);
@@ -121,6 +130,7 @@ function values(_) {
121
130
  .keys(_)
122
131
  .filter(prop => this._table.fields.has(prop))
123
132
  .map(prop => this._table.fields.get(prop))
133
+ .filter(({ relatedTo, builder }) => relatedTo == null && builder == null)
124
134
  .reduce((p, { getValue, kind, name }) => {
125
135
  let value = getValue(_);
126
136
  let wrapper = undefined;
@@ -162,8 +172,8 @@ function conflict(_) {
162
172
  _columns = index.keyFields.map(prop => { var _a; return (_a = this._table.fields.get(prop)) === null || _a === void 0 ? void 0 : _a.name; });
163
173
  if (index.where) {
164
174
  const tree = typeof index.where === 'function'
165
- ? index.where(proxy(this._table, true))
166
- : treeOf(index.where, this._table);
175
+ ? index.where(proxy(this._table, true, this._alias))
176
+ : treeOf(index.where, this._table, this._alias);
167
177
  _where = [tree];
168
178
  }
169
179
  }
@@ -195,7 +205,7 @@ function join(...args) {
195
205
  _tableName: table.tableName,
196
206
  _alias: alias === null || alias === void 0 ? void 0 : alias.tableName,
197
207
  _type: 'INNER',
198
- _condition: condition(proxy(this._table), proxy(table, undefined, alias === null || alias === void 0 ? void 0 : alias.tableName)),
208
+ _condition: condition(proxy(this._table, false, this._alias), proxy(table, undefined, alias === null || alias === void 0 ? void 0 : alias.tableName)),
199
209
  });
200
210
  return this;
201
211
  }
@@ -207,7 +217,7 @@ function joinLeft(...args) {
207
217
  _tableName: table.tableName,
208
218
  _alias: alias === null || alias === void 0 ? void 0 : alias.tableName,
209
219
  _type: 'LEFT',
210
- _condition: condition(proxy(this._table), proxy(table, undefined, alias === null || alias === void 0 ? void 0 : alias.tableName)),
220
+ _condition: condition(proxy(this._table, false, this._alias), proxy(table, undefined, alias === null || alias === void 0 ? void 0 : alias.tableName)),
211
221
  });
212
222
  return this;
213
223
  }
@@ -219,7 +229,7 @@ function joinRight(...args) {
219
229
  _tableName: table.tableName,
220
230
  _alias: alias === null || alias === void 0 ? void 0 : alias.tableName,
221
231
  _type: 'RIGHT',
222
- _condition: condition(proxy(this._table), proxy(table, undefined, alias === null || alias === void 0 ? void 0 : alias.tableName)),
232
+ _condition: condition(proxy(this._table, false, this._alias), proxy(table, undefined, alias === null || alias === void 0 ? void 0 : alias.tableName)),
223
233
  });
224
234
  return this;
225
235
  }
@@ -231,7 +241,7 @@ function joinFull(...args) {
231
241
  _tableName: table.tableName,
232
242
  _alias: alias === null || alias === void 0 ? void 0 : alias.tableName,
233
243
  _type: 'FULL OUTER',
234
- _condition: condition(proxy(this._table), proxy(table, undefined, alias === null || alias === void 0 ? void 0 : alias.tableName)),
244
+ _condition: condition(proxy(this._table, false, this._alias), proxy(table, undefined, alias === null || alias === void 0 ? void 0 : alias.tableName)),
235
245
  });
236
246
  return this;
237
247
  }
@@ -267,9 +277,13 @@ function readModelMeta(Model, required = true) {
267
277
  }
268
278
  exports.readModelMeta = readModelMeta;
269
279
  function Select(_, distinct = false) {
280
+ function isAlias(x) {
281
+ return x && typeof x._alias === 'string';
282
+ }
270
283
  return {
271
284
  _type: 'SELECT',
272
- _table: readModelMeta(_),
285
+ _table: readModelMeta(isAlias(_) ? _._operands[0] : _),
286
+ _alias: isAlias(_) ? _._alias : null,
273
287
  _distinct: distinct,
274
288
  columns,
275
289
  join,
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { IFieldInfo, WhereBuilder } from './interfaces';
1
+ import { IFieldInfo, WhereBuilder, SubQueryBuilder } from './interfaces';
2
2
  interface IDBIndexMeta<T> {
3
3
  fields: string[];
4
4
  name: string;
@@ -12,10 +12,14 @@ interface IDBFieldMeta extends Omit<IFieldInfo, 'getValue' | 'relatedTo' | 'name
12
12
  }
13
13
  export declare function dbField(target: any, key: string): void;
14
14
  export declare function dbField(fieldMeta?: string | IDBFieldMeta): PropertyDecorator;
15
- interface IDBManyFieldMeta extends Pick<IFieldInfo, 'nullable' | 'model' | 'kind'> {
15
+ interface IDBFilterFieldMeta {
16
16
  table: string;
17
17
  keyField: string;
18
18
  valueField: string;
19
19
  }
20
+ interface IDBManyFieldMeta extends IDBFilterFieldMeta, Pick<IFieldInfo, 'nullable' | 'model' | 'kind'> {
21
+ }
22
+ export declare function dbFilterField(fieldMeta: IDBFilterFieldMeta): PropertyDecorator;
23
+ export declare function dbFilterField<T = number>(builder: SubQueryBuilder<T>): PropertyDecorator;
20
24
  export declare function dbManyField(fieldMeta: IDBManyFieldMeta): PropertyDecorator;
21
25
  export {};
@@ -11,7 +11,7 @@ var __rest = (this && this.__rest) || function (s, e) {
11
11
  return t;
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.dbManyField = exports.dbField = exports.dbTable = void 0;
14
+ exports.dbManyField = exports.dbFilterField = exports.dbField = exports.dbTable = void 0;
15
15
  const symbols_1 = require("./symbols");
16
16
  const model_reader_1 = require("@ts-awesome/model-reader");
17
17
  function ensureTableInfo(proto) {
@@ -80,16 +80,47 @@ function dbField(...args) {
80
80
  }
81
81
  }
82
82
  exports.dbField = dbField;
83
- // noinspection JSUnusedGlobalSymbols
84
- function dbManyField(fieldMeta) {
83
+ function dbFilterField(fieldMeta) {
85
84
  return function (target, key) {
86
85
  const { fields } = ensureTableInfo(target.constructor);
86
+ if (typeof fieldMeta === 'function') {
87
+ const name = key.toString();
88
+ fields.set(key.toString(), {
89
+ name,
90
+ builder: fieldMeta,
91
+ getValue: () => undefined,
92
+ });
93
+ return;
94
+ }
87
95
  const { valueField, keyField, table } = fieldMeta, rest = __rest(fieldMeta, ["valueField", "keyField", "table"]);
88
96
  fields.set(key.toString(), Object.assign(Object.assign({}, rest), { name: valueField, relatedTo: {
89
97
  keyField,
90
98
  tableName: table,
91
- }, getValue: x => x[key] }));
99
+ }, getValue: () => undefined }));
92
100
  };
93
101
  }
102
+ exports.dbFilterField = dbFilterField;
103
+ // @deprecated
104
+ // noinspection JSUnusedGlobalSymbols
105
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
106
+ function dbManyField(fieldMeta) {
107
+ throw new Error(`@dbManyField is buggy, use @dbFilterField instead`);
108
+ // return function (target: Object, key: string | symbol): void {
109
+ // const {fields} = ensureTableInfo(target.constructor);
110
+ // const {valueField, keyField, table, ...rest}: IDBManyFieldMeta = fieldMeta;
111
+ // fields.set(key.toString(), {
112
+ // ...rest,
113
+ // name: valueField,
114
+ // relatedTo: {
115
+ // keyField,
116
+ // tableName: table,
117
+ // },
118
+ // getValue: x => x[key],
119
+ // });
120
+ //
121
+ // const {model, nullable = false} = fields.get(key.toString());
122
+ // readable(model as any, nullable as any)(target, key);
123
+ // };
124
+ }
94
125
  exports.dbManyField = dbManyField;
95
126
  //# sourceMappingURL=decorators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { IExpression, IJoin, IOrderBy, IReference } from './intermediate';
2
+ import { Operandable } from "./wrappers";
2
3
  export declare type DbValueType = string | number | boolean | Date | null | undefined;
3
4
  export interface IDbField<T = any> {
4
5
  readQuery?(name: string): string;
@@ -6,6 +7,9 @@ export interface IDbField<T = any> {
6
7
  reader?(raw: DbValueType): T;
7
8
  writer?(value: T): DbValueType;
8
9
  }
10
+ export interface SubQueryBuilder<T = number> {
11
+ (value: Operandable<T>): IBuildableSubSelectQuery;
12
+ }
9
13
  declare type Class = new (...args: any) => any;
10
14
  export interface IFieldInfo {
11
15
  primaryKey?: true;
@@ -16,6 +20,7 @@ export interface IFieldInfo {
16
20
  tableName: string;
17
21
  keyField: string;
18
22
  };
23
+ builder?: SubQueryBuilder<any>;
19
24
  sensitive?: true;
20
25
  default?: DbValueType;
21
26
  kind?: IDbField;
@@ -89,16 +94,19 @@ export interface Order {
89
94
  }
90
95
  export interface IBuildableWherePartial {
91
96
  _table: ITableInfo;
97
+ _alias?: string;
92
98
  _where?: any[];
93
99
  _limit?: number;
94
100
  }
95
101
  export interface IBuildableValuesPartial {
96
102
  _table: ITableInfo;
103
+ _alias?: string;
97
104
  _values?: any;
98
105
  }
99
106
  export interface IBuildableSelectQuery {
100
107
  _type: 'SELECT';
101
108
  _table: ITableInfo;
109
+ _alias?: string;
102
110
  _distinct?: boolean;
103
111
  _columns?: IExpression[];
104
112
  _joins?: IJoin[];
@@ -112,6 +120,7 @@ export interface IBuildableSelectQuery {
112
120
  export interface IBuildableSubSelectQuery {
113
121
  _type: 'SELECT';
114
122
  _table: ITableInfo;
123
+ _alias?: string;
115
124
  _distinct?: boolean;
116
125
  _columns?: IExpression[];
117
126
  _joins?: IJoin[];
@@ -127,6 +136,7 @@ export interface IBuildableInsertQuery {
127
136
  export interface IBuildableUpsertQuery {
128
137
  _type: 'UPSERT';
129
138
  _table: ITableInfo;
139
+ _alias?: string;
130
140
  _values?: any;
131
141
  _where?: IExpression[];
132
142
  _conflictExp?: {
@@ -7,6 +7,7 @@ export declare class TestExecutor extends BaseExecutor<TestQuery, TestQueryResul
7
7
  set mapper(value: Mapper);
8
8
  }
9
9
  export declare class TestExecutorProvider implements IQueryExecutorProvider<TestQuery> {
10
- private executor;
10
+ private readonly executor;
11
+ constructor(executor?: IQueryExecutor<TestQuery>);
11
12
  getExecutor(): IQueryExecutor<TestQuery>;
12
13
  }
@@ -5,6 +5,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
8
14
  Object.defineProperty(exports, "__esModule", { value: true });
9
15
  exports.TestExecutorProvider = exports.TestExecutor = void 0;
10
16
  const inversify_1 = require("inversify");
@@ -22,15 +28,17 @@ TestExecutor = __decorate([
22
28
  ], TestExecutor);
23
29
  exports.TestExecutor = TestExecutor;
24
30
  let TestExecutorProvider = class TestExecutorProvider {
25
- constructor() {
26
- this.executor = new TestExecutor();
31
+ constructor(executor = new TestExecutor()) {
32
+ this.executor = executor;
27
33
  }
28
34
  getExecutor() {
29
35
  return this.executor;
30
36
  }
31
37
  };
32
38
  TestExecutorProvider = __decorate([
33
- inversify_1.injectable()
39
+ inversify_1.injectable(),
40
+ __param(0, inversify_1.unmanaged()),
41
+ __metadata("design:paramtypes", [Object])
34
42
  ], TestExecutorProvider);
35
43
  exports.TestExecutorProvider = TestExecutorProvider;
36
44
  //# sourceMappingURL=executor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/test-driver/executor.ts"],"names":[],"mappings":";;;;;;;;;AAEA,yCAAqC;AACrC,kCAAqC;AAGrC,IAAa,YAAY,GAAzB,MAAa,YAAa,SAAQ,mBAAwC;IAC9D,EAAE,CAAC,KAAgB;QAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IAID,IAAW,MAAM,CAAC,KAAa;QAC7B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;CACF,CAAA;AAVY,YAAY;IADxB,sBAAU,EAAE;GACA,YAAY,CAUxB;AAVY,oCAAY;AAazB,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAAjC;QAEU,aAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IAKxC,CAAC;IAHC,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF,CAAA;AAPY,oBAAoB;IADhC,sBAAU,EAAE;GACA,oBAAoB,CAOhC;AAPY,oDAAoB"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/test-driver/executor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,yCAAgD;AAChD,kCAAqC;AAGrC,IAAa,YAAY,GAAzB,MAAa,YAAa,SAAQ,mBAAwC;IAC9D,EAAE,CAAC,KAAgB;QAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IAID,IAAW,MAAM,CAAC,KAAa;QAC7B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;CACF,CAAA;AAVY,YAAY;IADxB,sBAAU,EAAE;GACA,YAAY,CAUxB;AAVY,oCAAY;AAazB,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAE/B,YAEmB,WAAsC,IAAI,YAAY,EAAE;QAAxD,aAAQ,GAAR,QAAQ,CAAgD;IAE3E,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF,CAAA;AAXY,oBAAoB;IADhC,sBAAU,EAAE;IAIR,WAAA,qBAAS,EAAE,CAAA;;GAHH,oBAAoB,CAWhC;AAXY,oDAAoB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ts-awesome/orm",
3
- "version": "1.2.0-rc8",
3
+ "version": "1.2.1-rc0",
4
4
  "description": "TypeScript ORM",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,11 +1,12 @@
1
1
  import {alias, and, asc, Delete, desc, Insert, max, Select, sum, TableMetadataSymbol, Update, Upsert, of} from '../dist';
2
- import { Employee, Person } from './models';
2
+ import { Employee, Person, Tag } from './models';
3
3
  import { TableRef, readModelMeta } from '../dist/builder';
4
+ import {exists} from "../src";
4
5
 
5
6
 
6
7
  const tableInfo = readModelMeta(Person);
7
8
  const tableName = tableInfo.tableName;
8
- const person: InstanceType<typeof Person> = {id: 1, name: 'Name', age: 18, city: 'City'};
9
+ const person: InstanceType<typeof Person> = {id: 1, name: 'Name', age: 18, city: 'City', profiles: ["profile-a"]};
9
10
 
10
11
  describe('Select', () => {
11
12
 
@@ -168,6 +169,108 @@ describe('Select', () => {
168
169
  expect(query._where).toStrictEqual(expectation);
169
170
  });
170
171
 
172
+ describe('Where filter fields', () => {
173
+ it ('simple many to many', () => {
174
+ const query = Select(Person).where(({profiles}) => profiles.has('test'));
175
+ const expectation = [{
176
+ _operands: [
177
+ "test",
178
+ {
179
+ _operator: 'SUBQUERY',
180
+ _operands: [
181
+ {
182
+ _columns: [{_column: { table: "employee", name: "title"}}],
183
+ _table: { fields: null, tableName: "employee"},
184
+ _type: "SELECT",
185
+ _where: [
186
+ {
187
+ _operands: [
188
+ { _column: { table: "employee", name: "person"}},
189
+ { _column: { table: tableName, name: "id"}}
190
+ ],
191
+ _operator: "="
192
+ }
193
+ ],
194
+ }
195
+ ]},
196
+ ],
197
+ _operator: "IN",
198
+ }];
199
+ expect(query._where).toStrictEqual(expectation);
200
+ });
201
+
202
+ it ('with builder', () => {
203
+ const query = Select(Person).where(({tags}) => tags.has('tag'));
204
+ const expectation = [{
205
+ _operands: [
206
+ "tag",
207
+ {
208
+ _operator: 'SUBQUERY',
209
+ _operands: [
210
+ {
211
+ _columns: [{_column: { table: "Tag", name: "name", wrapper: undefined}}],
212
+ _table: readModelMeta(Tag),
213
+ _alias: null,
214
+ _type: "SELECT",
215
+ _distinct: false,
216
+ _joins: [
217
+ {
218
+ _alias: undefined,
219
+ _tableName: "TagPerson",
220
+ _type: "INNER",
221
+ _condition: {
222
+ _operands: [
223
+ {
224
+ _operands: [
225
+ {
226
+ _column: {
227
+ name: 'id',
228
+ table: "Tag",
229
+ wrapper: undefined
230
+ }
231
+ },
232
+ {
233
+ _column: {
234
+ name: 'tag',
235
+ table: "TagPerson",
236
+ wrapper: undefined
237
+ }
238
+ }
239
+ ],
240
+ _operator: '='
241
+ },
242
+ {
243
+ _operands: [
244
+ {
245
+ _column: {
246
+ name: 'person',
247
+ table: "TagPerson",
248
+ wrapper: undefined
249
+ }
250
+ },
251
+ {
252
+ _column: {
253
+ name: 'id',
254
+ table: "Person",
255
+ }
256
+ }
257
+ ],
258
+ _operator: '='
259
+ },
260
+ ],
261
+ _operator: 'AND'
262
+ }
263
+ }
264
+ ]
265
+ }
266
+ ]},
267
+ ],
268
+ _operator: "IN",
269
+ }];
270
+ expect(query._where).toStrictEqual(expectation);
271
+ });
272
+ });
273
+
171
274
  it('Having', () => {
172
275
  const employeeTableName = readModelMeta(Employee).tableName;
173
276
  const salaryRate = 2000;
@@ -231,6 +334,55 @@ describe('Select', () => {
231
334
  const query = Select(Person).offset(offset);
232
335
  expect(query._offset).toBe(offset);
233
336
  });
337
+
338
+ it('subquery on self', () => {
339
+ const query = Select(Person).where(({id}) => exists(Select(alias(Person, 'person_filter')).where(({id: _}) => _.eq(id))));
340
+
341
+ {
342
+ const x = (query as any)._where[0]._operands[0];
343
+ delete x.columns;
344
+ delete x.groupBy;
345
+ delete x.having;
346
+ delete x.join;
347
+ delete x.joinFull;
348
+ delete x.joinLeft;
349
+ delete x.joinRight;
350
+ delete x.limit;
351
+ delete x.offset;
352
+ delete x.orderBy;
353
+ delete x.where;
354
+ }
355
+
356
+ const expectation = {
357
+ _where: [{
358
+ "_operands": [{
359
+ "_alias": "person_filter",
360
+ "_distinct": false,
361
+ "_table": Person[TableMetadataSymbol],
362
+ "_type": "SELECT",
363
+ "_where": [{
364
+ "_operands": [{
365
+ "_column": {
366
+ "name": "id",
367
+ "table": "person_filter",
368
+ "wrapper": undefined,
369
+ },
370
+ }, {
371
+ "_column": {
372
+ "name": "id",
373
+ "table": "Person",
374
+ "wrapper": undefined,
375
+ },
376
+ }],
377
+ "_operator": "=",
378
+ }]
379
+ }],
380
+ "_operator": "EXISTS",
381
+ }]
382
+ };
383
+
384
+ expect(query._where).toStrictEqual(expectation._where);
385
+ })
234
386
  });
235
387
 
236
388
  describe('Insert', () => {
package/tests/models.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { dbField, dbTable, IDbField } from '../dist';
1
+ import { dbField, dbTable, IDbField, dbFilterField, and, Select } from '../src';
2
2
 
3
3
  const UUID: IDbField = {}
4
4
 
@@ -18,6 +18,41 @@ export class Person {
18
18
  @dbField name!: string;
19
19
  @dbField age!: number;
20
20
  @dbField city!: string;
21
+
22
+ @dbFilterField({
23
+ table: 'employee',
24
+ keyField: 'person',
25
+ valueField: 'title',
26
+ })
27
+ profiles?: string[];
28
+
29
+ @dbFilterField(primary => Select(Tag)
30
+ .columns((x) => [x.name])
31
+ .join(TagPerson, (a ,b) => and(a.id.eq(b.tag), b.person.eq(primary)))
32
+ )
33
+ tags?: string[];
34
+ }
35
+
36
+ @dbTable('Tag')
37
+ export class Tag {
38
+ @dbField({
39
+ primaryKey: true,
40
+ autoIncrement: true
41
+ })
42
+ public id!: number;
43
+ @dbField public name!: string;
44
+ }
45
+
46
+ @dbTable('TagPerson')
47
+ export class TagPerson {
48
+ @dbField({
49
+ primaryKey: true,
50
+ })
51
+ public person!: number;
52
+ @dbField({
53
+ primaryKey: true,
54
+ })
55
+ public tag!: number;
21
56
  }
22
57
 
23
58
  @dbTable('Employee')
@@ -1,6 +1,5 @@
1
1
  import { reader, IQueryData, dbTable, IDbField, dbField, DbValueType } from '../dist';
2
2
  import { Person } from './models';
3
- import { Container } from 'inversify';
4
3
 
5
4
  const DB_JSON: IDbField = {
6
5
  reader(raw: DbValueType): any {
@@ -20,6 +19,7 @@ function generatePersons(quantity: number): IQueryData[] {
20
19
  person['age'] = 18;
21
20
  person['name'] = `TestName${i}`;
22
21
  person['uid'] = `uid${i}`;
22
+ // person['profiles'] = ['profile-a'];
23
23
  res.push(person);
24
24
  }
25
25
  return res;
@@ -28,10 +28,6 @@ function generatePersons(quantity: number): IQueryData[] {
28
28
  describe('DbReader', () => {
29
29
 
30
30
  const persons = generatePersons(5);
31
- let container: Container;
32
- beforeEach(() => {
33
- container = new Container();
34
- });
35
31
 
36
32
  it('read raw', () => {
37
33
  const result = reader(persons);
@@ -70,15 +66,43 @@ describe('DbReader', () => {
70
66
  expect(result).toEqual(expected);
71
67
  });
72
68
 
69
+ it('read Model from no data', () => {
70
+ @dbTable
71
+ class Model {
72
+ @dbField public readonly id!: number;
73
+ @dbField('raw') public readonly value!: string;
74
+ @dbField({kind: DB_JSON, model: [Person]}) public readonly personal!: Person[];
75
+
76
+ constructor(id, raw, personal) {
77
+ this.id = id;
78
+ this.value = raw;
79
+ this.personal = personal
80
+ }
81
+ }
82
+
83
+ const results = reader([], Model);
84
+ expect(results.length).toBe(0);
85
+ });
86
+
73
87
  it('read scalar', () => {
74
88
  const count = 10;
89
+ const correctResult = reader([{field: count}], true);
90
+ expect(correctResult).toBe(count);
91
+ });
92
+
93
+ it('read scalar from no data', () => {
75
94
  const fieldValue = 'string';
76
95
  const emptyData = reader([], true);
77
- const correctResult = reader([{field: count}], true);
78
96
  expect(emptyData).toBe(0);
79
- expect(correctResult).toBe(count);
80
97
  expect(() => {
81
98
  reader([{field: fieldValue as any}], true)
82
- }).toThrowError(`Can\'t read count value from db. Invalid Count ${fieldValue}`);
99
+ }).toThrowError(`Can't read count value from db. Invalid Count ${fieldValue}`);
100
+ });
101
+
102
+ it('read scalar from invalid data', () => {
103
+ const fieldValue = 'string';
104
+ expect(() => {
105
+ reader([{field: fieldValue as any}], true)
106
+ }).toThrowError(`Can't read count value from db. Invalid Count ${fieldValue}`);
83
107
  });
84
108
  });