@simplysm/orm-common 13.0.75 → 13.0.77

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.
Files changed (135) hide show
  1. package/README.md +575 -50
  2. package/dist/create-db-context.d.ts +1 -1
  3. package/dist/create-db-context.d.ts.map +1 -1
  4. package/dist/create-db-context.js +34 -27
  5. package/dist/create-db-context.js.map +1 -1
  6. package/dist/ddl/initialize.js +4 -4
  7. package/dist/ddl/initialize.js.map +1 -1
  8. package/dist/ddl/relation-ddl.d.ts +7 -7
  9. package/dist/ddl/relation-ddl.d.ts.map +1 -1
  10. package/dist/ddl/relation-ddl.js +18 -18
  11. package/dist/ddl/relation-ddl.js.map +1 -1
  12. package/dist/ddl/schema-ddl.d.ts +1 -1
  13. package/dist/ddl/schema-ddl.d.ts.map +1 -1
  14. package/dist/ddl/schema-ddl.js +2 -2
  15. package/dist/ddl/schema-ddl.js.map +1 -1
  16. package/dist/ddl/table-ddl.js +2 -2
  17. package/dist/ddl/table-ddl.js.map +1 -1
  18. package/dist/exec/queryable.d.ts +24 -24
  19. package/dist/exec/queryable.d.ts.map +1 -1
  20. package/dist/exec/queryable.js +37 -37
  21. package/dist/exec/queryable.js.map +1 -1
  22. package/dist/expr/expr-unit.js +1 -1
  23. package/dist/expr/expr-unit.js.map +1 -1
  24. package/dist/expr/expr.d.ts +9 -9
  25. package/dist/expr/expr.d.ts.map +1 -1
  26. package/dist/expr/expr.js +10 -10
  27. package/dist/expr/expr.js.map +1 -1
  28. package/dist/query-builder/base/expr-renderer-base.d.ts +2 -2
  29. package/dist/query-builder/base/expr-renderer-base.d.ts.map +1 -1
  30. package/dist/query-builder/base/query-builder-base.d.ts +7 -15
  31. package/dist/query-builder/base/query-builder-base.d.ts.map +1 -1
  32. package/dist/query-builder/base/query-builder-base.js +2 -2
  33. package/dist/query-builder/base/query-builder-base.js.map +1 -1
  34. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts +4 -4
  35. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts.map +1 -1
  36. package/dist/query-builder/mssql/mssql-expr-renderer.js +8 -8
  37. package/dist/query-builder/mssql/mssql-expr-renderer.js.map +1 -1
  38. package/dist/query-builder/mssql/mssql-query-builder.d.ts +7 -7
  39. package/dist/query-builder/mssql/mssql-query-builder.d.ts.map +1 -1
  40. package/dist/query-builder/mssql/mssql-query-builder.js +7 -7
  41. package/dist/query-builder/mssql/mssql-query-builder.js.map +1 -1
  42. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts +4 -4
  43. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts.map +1 -1
  44. package/dist/query-builder/mysql/mysql-expr-renderer.js +9 -9
  45. package/dist/query-builder/mysql/mysql-expr-renderer.js.map +1 -1
  46. package/dist/query-builder/mysql/mysql-query-builder.d.ts +7 -7
  47. package/dist/query-builder/mysql/mysql-query-builder.d.ts.map +1 -1
  48. package/dist/query-builder/mysql/mysql-query-builder.js +11 -11
  49. package/dist/query-builder/mysql/mysql-query-builder.js.map +1 -1
  50. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts +4 -4
  51. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +1 -1
  52. package/dist/query-builder/postgresql/postgresql-expr-renderer.js +8 -8
  53. package/dist/query-builder/postgresql/postgresql-expr-renderer.js.map +1 -1
  54. package/dist/query-builder/postgresql/postgresql-query-builder.d.ts +7 -7
  55. package/dist/query-builder/postgresql/postgresql-query-builder.d.ts.map +1 -1
  56. package/dist/query-builder/postgresql/postgresql-query-builder.js +7 -7
  57. package/dist/query-builder/postgresql/postgresql-query-builder.js.map +1 -1
  58. package/dist/schema/procedure-builder.d.ts +1 -1
  59. package/dist/schema/table-builder.d.ts +1 -1
  60. package/dist/schema/table-builder.d.ts.map +1 -1
  61. package/dist/schema/table-builder.js +1 -1
  62. package/dist/schema/view-builder.d.ts +1 -1
  63. package/dist/schema/view-builder.d.ts.map +1 -1
  64. package/dist/schema/view-builder.js +1 -1
  65. package/dist/types/db-context-def.d.ts +18 -18
  66. package/dist/types/db-context-def.d.ts.map +1 -1
  67. package/dist/types/expr.d.ts +6 -6
  68. package/dist/types/expr.d.ts.map +1 -1
  69. package/dist/types/query-def.d.ts +15 -15
  70. package/dist/types/query-def.d.ts.map +1 -1
  71. package/dist/types/query-def.js +6 -6
  72. package/dist/utils/result-parser.d.ts.map +1 -1
  73. package/dist/utils/result-parser.js +44 -16
  74. package/dist/utils/result-parser.js.map +1 -1
  75. package/package.json +2 -2
  76. package/src/create-db-context.ts +36 -29
  77. package/src/ddl/initialize.ts +4 -4
  78. package/src/ddl/relation-ddl.ts +16 -16
  79. package/src/ddl/schema-ddl.ts +2 -2
  80. package/src/ddl/table-ddl.ts +2 -2
  81. package/src/exec/queryable.ts +58 -58
  82. package/src/expr/expr-unit.ts +1 -1
  83. package/src/expr/expr.ts +13 -13
  84. package/src/query-builder/base/expr-renderer-base.ts +2 -2
  85. package/src/query-builder/base/query-builder-base.ts +18 -14
  86. package/src/query-builder/mssql/mssql-expr-renderer.ts +11 -10
  87. package/src/query-builder/mssql/mssql-query-builder.ts +13 -13
  88. package/src/query-builder/mysql/mysql-expr-renderer.ts +12 -11
  89. package/src/query-builder/mysql/mysql-query-builder.ts +17 -17
  90. package/src/query-builder/postgresql/postgresql-expr-renderer.ts +11 -10
  91. package/src/query-builder/postgresql/postgresql-query-builder.ts +13 -13
  92. package/src/schema/procedure-builder.ts +1 -1
  93. package/src/schema/table-builder.ts +1 -1
  94. package/src/schema/view-builder.ts +1 -1
  95. package/src/types/db-context-def.ts +18 -18
  96. package/src/types/expr.ts +6 -6
  97. package/src/types/query-def.ts +31 -31
  98. package/src/utils/result-parser.ts +60 -16
  99. package/tests/db-context/create-db-context.spec.ts +6 -37
  100. package/tests/db-context/define-db-context.spec.ts +0 -51
  101. package/tests/ddl/basic.expected.ts +8 -8
  102. package/tests/ddl/basic.spec.ts +24 -181
  103. package/tests/ddl/column-builder.spec.ts +0 -112
  104. package/tests/ddl/index-builder.spec.ts +10 -64
  105. package/tests/ddl/procedure-builder.spec.ts +0 -106
  106. package/tests/ddl/relation-builder.spec.ts +4 -205
  107. package/tests/ddl/table-builder.spec.ts +0 -34
  108. package/tests/ddl/view-builder.spec.ts +0 -60
  109. package/tests/dml/delete.spec.ts +0 -33
  110. package/tests/dml/insert.spec.ts +0 -78
  111. package/tests/dml/update.spec.ts +2 -98
  112. package/tests/dml/upsert.spec.ts +0 -52
  113. package/tests/errors/queryable-errors.spec.ts +0 -51
  114. package/tests/escape.spec.ts +0 -41
  115. package/tests/examples/pivot.spec.ts +0 -333
  116. package/tests/examples/sampling.spec.ts +0 -63
  117. package/tests/examples/unpivot.spec.ts +0 -65
  118. package/tests/exec/search-parser.spec.ts +0 -16
  119. package/tests/expr/comparison.spec.ts +0 -66
  120. package/tests/expr/conditional.expected.ts +2 -2
  121. package/tests/expr/conditional.spec.ts +8 -35
  122. package/tests/expr/date.spec.ts +5 -72
  123. package/tests/expr/math.spec.ts +0 -47
  124. package/tests/expr/string.spec.ts +0 -56
  125. package/tests/expr/utility.spec.ts +0 -27
  126. package/tests/select/basic.spec.ts +5 -74
  127. package/tests/select/filter.spec.ts +0 -114
  128. package/tests/select/group.spec.ts +0 -85
  129. package/tests/select/join.spec.ts +0 -113
  130. package/tests/select/order.spec.ts +0 -49
  131. package/tests/select/subquery.spec.ts +0 -96
  132. package/tests/select/window.spec.ts +0 -185
  133. package/tests/types/nullable-queryable-record.spec.ts +0 -48
  134. package/tests/utils/result-parser-perf.spec.ts +0 -67
  135. package/tests/utils/result-parser.spec.ts +4 -38
@@ -90,33 +90,6 @@ describe("Expr - Utility functions", () => {
90
90
  });
91
91
  });
92
92
 
93
- describe("cast - type conversion to VARCHAR", () => {
94
- const db = createTestDb();
95
- const def = db
96
- .user()
97
- .select((item) => ({
98
- id: item.id,
99
- ageStr: expr.cast(item.age, { type: "varchar", length: 50 }),
100
- }))
101
- .getSelectQueryDef();
102
-
103
- it("Verify QueryDef", () => {
104
- expect(def.select).toMatchObject({
105
- id: { type: "column", path: ["T1", "id"] },
106
- ageStr: {
107
- type: "cast",
108
- source: { type: "column", path: ["T1", "age"] },
109
- targetType: { type: "varchar", length: 50 },
110
- },
111
- });
112
- });
113
-
114
- it.each(dialects)("[%s] Verify SQL", (dialect) => {
115
- const builder = createQueryBuilder(dialect);
116
- expect(builder.build(def)).toMatchSql(expected.castToVarchar[dialect]);
117
- });
118
- });
119
-
120
93
  //#endregion
121
94
 
122
95
  //#region ========== RAW ==========
@@ -119,12 +119,12 @@ describe("SELECT - Basic", () => {
119
119
  });
120
120
  });
121
121
 
122
- describe("ifNull (2 arguments)", () => {
122
+ describe("coalesce (2 arguments)", () => {
123
123
  const db = createTestDb();
124
124
  const def = db
125
125
  .user()
126
126
  .select((item) => ({
127
- email: expr.ifNull(item.email, "N/A"),
127
+ email: expr.coalesce(item.email, "N/A"),
128
128
  }))
129
129
  .getSelectQueryDef();
130
130
 
@@ -135,7 +135,7 @@ describe("SELECT - Basic", () => {
135
135
  from: { database: "TestDb", schema: "TestSchema", name: "User" },
136
136
  select: {
137
137
  email: {
138
- type: "ifNull",
138
+ type: "coalesce",
139
139
  args: [
140
140
  { type: "column", path: ["T1", "email"] },
141
141
  { type: "value", value: "N/A" },
@@ -151,33 +151,15 @@ describe("SELECT - Basic", () => {
151
151
  });
152
152
  });
153
153
 
154
- describe("ifNull (3 arguments, COALESCE)", () => {
154
+ describe("coalesce (3 arguments, COALESCE)", () => {
155
155
  const db = createTestDb();
156
156
  const def = db
157
157
  .user()
158
158
  .select((item) => ({
159
- contact: expr.ifNull(item.email, item.name, "N/A"),
159
+ contact: expr.coalesce(item.email, item.name, "N/A"),
160
160
  }))
161
161
  .getSelectQueryDef();
162
162
 
163
- it("Verify QueryDef", () => {
164
- expect(def).toEqual({
165
- type: "select",
166
- as: "T1",
167
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
168
- select: {
169
- contact: {
170
- type: "ifNull",
171
- args: [
172
- { type: "column", path: ["T1", "email"] },
173
- { type: "column", path: ["T1", "name"] },
174
- { type: "value", value: "N/A" },
175
- ],
176
- },
177
- },
178
- });
179
- });
180
-
181
163
  it.each(dialects)("[%s] Verify SQL", (dialect) => {
182
164
  const builder = createQueryBuilder(dialect);
183
165
  expect(builder.build(def)).toMatchSql(expected.selectIfNull3[dialect]);
@@ -254,21 +236,6 @@ describe("SELECT - Basic", () => {
254
236
  }))
255
237
  .getSelectQueryDef();
256
238
 
257
- it("Verify QueryDef", () => {
258
- expect(def).toEqual({
259
- type: "select",
260
- as: "T1",
261
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
262
- select: {
263
- suffix: {
264
- type: "substring",
265
- source: { type: "column", path: ["T1", "name"] },
266
- start: { type: "value", value: 3 },
267
- },
268
- },
269
- });
270
- });
271
-
272
239
  it.each(dialects)("[%s] Verify SQL", (dialect) => {
273
240
  const builder = createQueryBuilder(dialect);
274
241
  expect(builder.build(def)).toMatchSql(expected.selectSubstringNoLength[dialect]);
@@ -346,23 +313,6 @@ describe("SELECT - Basic", () => {
346
313
  }))
347
314
  .getSelectQueryDef();
348
315
 
349
- it("Verify QueryDef", () => {
350
- expect(def).toEqual({
351
- type: "select",
352
- as: "T1",
353
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
354
- select: {
355
- maxAge: {
356
- type: "greatest",
357
- args: [
358
- { type: "column", path: ["T1", "age"] },
359
- { type: "value", value: 18 },
360
- ],
361
- },
362
- },
363
- });
364
- });
365
-
366
316
  it.each(dialects)("[%s] Verify SQL", (dialect) => {
367
317
  const builder = createQueryBuilder(dialect);
368
318
  expect(builder.build(def)).toMatchSql(expected.selectGreatest[dialect]);
@@ -394,15 +344,6 @@ describe("SELECT - Options", () => {
394
344
  const db = createTestDb();
395
345
  const def = db.user().lock().getSelectQueryDef();
396
346
 
397
- it("Verify QueryDef", () => {
398
- expect(def).toEqual({
399
- type: "select",
400
- as: "T1",
401
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
402
- lock: true,
403
- });
404
- });
405
-
406
347
  it.each(dialects)("[%s] Verify SQL", (dialect) => {
407
348
  const builder = createQueryBuilder(dialect);
408
349
  expect(builder.build(def)).toMatchSql(expected.selectLock[dialect]);
@@ -413,16 +354,6 @@ describe("SELECT - Options", () => {
413
354
  const db = createTestDb();
414
355
  const def = db.user().distinct().lock().getSelectQueryDef();
415
356
 
416
- it("Verify QueryDef", () => {
417
- expect(def).toEqual({
418
- type: "select",
419
- as: "T1",
420
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
421
- distinct: true,
422
- lock: true,
423
- });
424
- });
425
-
426
357
  it.each(dialects)("[%s] Verify SQL", (dialect) => {
427
358
  const builder = createQueryBuilder(dialect);
428
359
  expect(builder.build(def)).toMatchSql(expected.selectDistinctLock[dialect]);
@@ -75,21 +75,6 @@ describe("SELECT - WHERE - comparison operations", () => {
75
75
  .where((item) => [expr.gt(item.age, 20)])
76
76
  .getSelectQueryDef();
77
77
 
78
- it("Verify QueryDef", () => {
79
- expect(def).toEqual({
80
- type: "select",
81
- as: "T1",
82
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
83
- where: [
84
- {
85
- type: "gt",
86
- source: { type: "column", path: ["T1", "age"] },
87
- target: { type: "value", value: 20 },
88
- },
89
- ],
90
- });
91
- });
92
-
93
78
  it.each(dialects)("[%s] Verify SQL", (dialect) => {
94
79
  const builder = createQueryBuilder(dialect);
95
80
  expect(builder.build(def)).toMatchSql(expected.whereGt[dialect]);
@@ -103,21 +88,6 @@ describe("SELECT - WHERE - comparison operations", () => {
103
88
  .where((item) => [expr.gte(item.age, 20)])
104
89
  .getSelectQueryDef();
105
90
 
106
- it("Verify QueryDef", () => {
107
- expect(def).toEqual({
108
- type: "select",
109
- as: "T1",
110
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
111
- where: [
112
- {
113
- type: "gte",
114
- source: { type: "column", path: ["T1", "age"] },
115
- target: { type: "value", value: 20 },
116
- },
117
- ],
118
- });
119
- });
120
-
121
91
  it.each(dialects)("[%s] Verify SQL", (dialect) => {
122
92
  const builder = createQueryBuilder(dialect);
123
93
  expect(builder.build(def)).toMatchSql(expected.whereGte[dialect]);
@@ -131,21 +101,6 @@ describe("SELECT - WHERE - comparison operations", () => {
131
101
  .where((item) => [expr.lt(item.age, 30)])
132
102
  .getSelectQueryDef();
133
103
 
134
- it("Verify QueryDef", () => {
135
- expect(def).toEqual({
136
- type: "select",
137
- as: "T1",
138
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
139
- where: [
140
- {
141
- type: "lt",
142
- source: { type: "column", path: ["T1", "age"] },
143
- target: { type: "value", value: 30 },
144
- },
145
- ],
146
- });
147
- });
148
-
149
104
  it.each(dialects)("[%s] Verify SQL", (dialect) => {
150
105
  const builder = createQueryBuilder(dialect);
151
106
  expect(builder.build(def)).toMatchSql(expected.whereLt[dialect]);
@@ -159,21 +114,6 @@ describe("SELECT - WHERE - comparison operations", () => {
159
114
  .where((item) => [expr.lte(item.age, 30)])
160
115
  .getSelectQueryDef();
161
116
 
162
- it("Verify QueryDef", () => {
163
- expect(def).toEqual({
164
- type: "select",
165
- as: "T1",
166
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
167
- where: [
168
- {
169
- type: "lte",
170
- source: { type: "column", path: ["T1", "age"] },
171
- target: { type: "value", value: 30 },
172
- },
173
- ],
174
- });
175
- });
176
-
177
117
  it.each(dialects)("[%s] Verify SQL", (dialect) => {
178
118
  const builder = createQueryBuilder(dialect);
179
119
  expect(builder.build(def)).toMatchSql(expected.whereLte[dialect]);
@@ -356,24 +296,6 @@ describe("SELECT - WHERE - LIKE", () => {
356
296
  .where((item) => [expr.not(expr.like(item.name, "%Test%"))])
357
297
  .getSelectQueryDef();
358
298
 
359
- it("Verify QueryDef", () => {
360
- expect(def).toEqual({
361
- type: "select",
362
- as: "T1",
363
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
364
- where: [
365
- {
366
- type: "not",
367
- arg: {
368
- type: "like",
369
- source: { type: "column", path: ["T1", "name"] },
370
- pattern: { type: "value", value: "%Test%" },
371
- },
372
- },
373
- ],
374
- });
375
- });
376
-
377
299
  it.each(dialects)("[%s] Verify SQL", (dialect) => {
378
300
  const builder = createQueryBuilder(dialect);
379
301
  expect(builder.build(def)).toMatchSql(expected.whereNotLike[dialect]);
@@ -601,42 +523,6 @@ describe("SELECT - WHERE - EXISTS / IN subquery", () => {
601
523
  });
602
524
  });
603
525
 
604
- it("not exists - verifies QueryDef", () => {
605
- const db = createTestDb();
606
- const def = db
607
- .user()
608
- .where((item) => [
609
- expr.not(expr.exists(db.post().where((p) => [expr.eq(p.userId, item.id)]))),
610
- ])
611
- .getSelectQueryDef();
612
-
613
- expect(def).toEqual({
614
- type: "select",
615
- as: "T1",
616
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
617
- where: [
618
- {
619
- type: "not",
620
- arg: {
621
- type: "exists",
622
- query: {
623
- type: "select",
624
- as: "T2",
625
- from: { database: "TestDb", schema: "TestSchema", name: "Post" },
626
- where: [
627
- {
628
- type: "eq",
629
- source: { type: "column", path: ["T2", "userId"] },
630
- target: { type: "column", path: ["T1", "id"] },
631
- },
632
- ],
633
- },
634
- },
635
- },
636
- ],
637
- });
638
- });
639
-
640
526
  describe("inQuery (IN subquery)", () => {
641
527
  const db = createTestDb();
642
528
  const def = db
@@ -155,90 +155,5 @@ describe("SELECT - HAVING", () => {
155
155
  });
156
156
  });
157
157
 
158
- describe("multiple conditions", () => {
159
- const db = createTestDb();
160
- const def = db
161
- .user()
162
- .select((item) => ({
163
- name: item.name,
164
- cnt: expr.count(item.id),
165
- avgAge: expr.avg(item.age),
166
- }))
167
- .groupBy((item) => [item.name])
168
- .having((item) => [expr.gt(item.cnt, 5), expr.gte(item.avgAge, 25)])
169
- .getSelectQueryDef();
170
-
171
- it("Verify QueryDef", () => {
172
- expect(def).toEqual({
173
- type: "select",
174
- as: "T1",
175
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
176
- select: {
177
- name: { type: "column", path: ["T1", "name"] },
178
- cnt: { type: "count", arg: { type: "column", path: ["T1", "id"] } },
179
- avgAge: { type: "avg", arg: { type: "column", path: ["T1", "age"] } },
180
- },
181
- groupBy: [{ type: "column", path: ["T1", "name"] }],
182
- having: [
183
- {
184
- type: "gt",
185
- source: { type: "count", arg: { type: "column", path: ["T1", "id"] } },
186
- target: { type: "value", value: 5 },
187
- },
188
- {
189
- type: "gte",
190
- source: { type: "avg", arg: { type: "column", path: ["T1", "age"] } },
191
- target: { type: "value", value: 25 },
192
- },
193
- ],
194
- });
195
- });
196
-
197
- it.each(dialects)("[%s] Verify SQL", (dialect) => {
198
- const builder = createQueryBuilder(dialect);
199
- expect(builder.build(def)).toMatchSql(expected.havingMultiple[dialect]);
200
- });
201
- });
202
-
203
- describe("GROUP BY + HAVING + ORDER BY combination", () => {
204
- const db = createTestDb();
205
- const def = db
206
- .user()
207
- .select((item) => ({
208
- name: item.name,
209
- cnt: expr.count(item.id),
210
- }))
211
- .groupBy((item) => [item.name])
212
- .having((item) => [expr.gt(item.cnt, 1)])
213
- .orderBy((item) => item.cnt, "DESC")
214
- .getSelectQueryDef();
215
-
216
- it("Verify QueryDef", () => {
217
- expect(def).toEqual({
218
- type: "select",
219
- as: "T1",
220
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
221
- select: {
222
- name: { type: "column", path: ["T1", "name"] },
223
- cnt: { type: "count", arg: { type: "column", path: ["T1", "id"] } },
224
- },
225
- groupBy: [{ type: "column", path: ["T1", "name"] }],
226
- having: [
227
- {
228
- type: "gt",
229
- source: { type: "count", arg: { type: "column", path: ["T1", "id"] } },
230
- target: { type: "value", value: 1 },
231
- },
232
- ],
233
- orderBy: [[{ type: "count", arg: { type: "column", path: ["T1", "id"] } }, "DESC"]],
234
- });
235
- });
236
-
237
- it.each(dialects)("[%s] Verify SQL", (dialect) => {
238
- const builder = createQueryBuilder(dialect);
239
- expect(builder.build(def)).toMatchSql(expected.havingOrderCombo[dialect]);
240
- });
241
- });
242
-
243
158
  //#endregion
244
159
  });
@@ -353,57 +353,6 @@ describe("SELECT - JOIN", () => {
353
353
  });
354
354
  });
355
355
 
356
- it("Combination of join + where", () => {
357
- const db = createTestDb();
358
- const def = db
359
- .user()
360
- .join("post", (q, c) => q.from(Post).where((item) => [expr.eq(item.userId, c.id)]))
361
- .where((item) => [expr.eq(item.isActive, true)])
362
- .getSelectQueryDef();
363
-
364
- expect(def).toEqual({
365
- type: "select",
366
- as: "T1",
367
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
368
- select: {
369
- "id": { type: "column", path: ["T1", "id"] },
370
- "name": { type: "column", path: ["T1", "name"] },
371
- "email": { type: "column", path: ["T1", "email"] },
372
- "age": { type: "column", path: ["T1", "age"] },
373
- "isActive": { type: "column", path: ["T1", "isActive"] },
374
- "companyId": { type: "column", path: ["T1", "companyId"] },
375
- "createdAt": { type: "column", path: ["T1", "createdAt"] },
376
- "post.id": { type: "column", path: ["T1.post", "id"] },
377
- "post.userId": { type: "column", path: ["T1.post", "userId"] },
378
- "post.title": { type: "column", path: ["T1.post", "title"] },
379
- "post.content": { type: "column", path: ["T1.post", "content"] },
380
- "post.viewCount": { type: "column", path: ["T1.post", "viewCount"] },
381
- "post.publishedAt": { type: "column", path: ["T1.post", "publishedAt"] },
382
- },
383
- where: [
384
- {
385
- type: "eq",
386
- source: { type: "column", path: ["T1", "isActive"] },
387
- target: { type: "value", value: true },
388
- },
389
- ],
390
- joins: [
391
- {
392
- type: "select",
393
- as: "T1.post",
394
- from: { database: "TestDb", schema: "TestSchema", name: "Post" },
395
- isSingle: false,
396
- where: [
397
- {
398
- type: "eq",
399
- source: { type: "column", path: ["T1.post", "userId"] },
400
- target: { type: "column", path: ["T1", "id"] },
401
- },
402
- ],
403
- },
404
- ],
405
- });
406
- });
407
356
  });
408
357
 
409
358
  describe("SELECT - INCLUDE", () => {
@@ -555,68 +504,6 @@ describe("SELECT - INCLUDE", () => {
555
504
  });
556
505
  });
557
506
 
558
- it("Multiple include", () => {
559
- const db = createTestDb();
560
- const def = db
561
- .post()
562
- .include((item) => item.user)
563
- .include((item) => item.user.company)
564
- .getSelectQueryDef();
565
-
566
- // duplicate includes are automatically deduplicated (user once, company once)
567
- expect(def).toEqual({
568
- type: "select",
569
- as: "T1",
570
- from: { database: "TestDb", schema: "TestSchema", name: "Post" },
571
- select: {
572
- "id": { type: "column", path: ["T1", "id"] },
573
- "userId": { type: "column", path: ["T1", "userId"] },
574
- "title": { type: "column", path: ["T1", "title"] },
575
- "content": { type: "column", path: ["T1", "content"] },
576
- "viewCount": { type: "column", path: ["T1", "viewCount"] },
577
- "publishedAt": { type: "column", path: ["T1", "publishedAt"] },
578
- "user.id": { type: "column", path: ["T1.user", "id"] },
579
- "user.name": { type: "column", path: ["T1.user", "name"] },
580
- "user.email": { type: "column", path: ["T1.user", "email"] },
581
- "user.age": { type: "column", path: ["T1.user", "age"] },
582
- "user.isActive": { type: "column", path: ["T1.user", "isActive"] },
583
- "user.companyId": { type: "column", path: ["T1.user", "companyId"] },
584
- "user.createdAt": { type: "column", path: ["T1.user", "createdAt"] },
585
- "user.company.id": { type: "column", path: ["T1.user.company", "id"] },
586
- "user.company.name": { type: "column", path: ["T1.user.company", "name"] },
587
- "user.company.foundedAt": { type: "column", path: ["T1.user.company", "foundedAt"] },
588
- },
589
- joins: [
590
- {
591
- type: "select",
592
- as: "T1.user",
593
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
594
- isSingle: true,
595
- where: [
596
- {
597
- type: "eq",
598
- source: { type: "column", path: ["T1.user", "id"] },
599
- target: { type: "column", path: ["T1", "userId"] },
600
- },
601
- ],
602
- },
603
- {
604
- type: "select",
605
- as: "T1.user.company",
606
- from: { database: "TestDb", schema: "TestSchema", name: "Company" },
607
- isSingle: true,
608
- where: [
609
- {
610
- type: "eq",
611
- source: { type: "column", path: ["T1.user.company", "id"] },
612
- target: { type: "column", path: ["T1.user", "companyId"] },
613
- },
614
- ],
615
- },
616
- ],
617
- });
618
- });
619
-
620
507
  it("Combination of include + select", () => {
621
508
  const db = createTestDb();
622
509
  const def = db
@@ -30,28 +30,6 @@ describe("SELECT - ORDER BY", () => {
30
30
  });
31
31
  });
32
32
 
33
- describe("ASC (explicit)", () => {
34
- const db = createTestDb();
35
- const def = db
36
- .user()
37
- .orderBy((item) => item.id, "ASC")
38
- .getSelectQueryDef();
39
-
40
- it("Verify QueryDef", () => {
41
- expect(def).toEqual({
42
- type: "select",
43
- as: "T1",
44
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
45
- orderBy: [[{ type: "column", path: ["T1", "id"] }, "ASC"]],
46
- });
47
- });
48
-
49
- it.each(dialects)("[%s] Verify SQL", (dialect) => {
50
- const builder = createQueryBuilder(dialect);
51
- expect(builder.build(def)).toMatchSql(expected.orderAscExplicit[dialect]);
52
- });
53
- });
54
-
55
33
  describe("DESC", () => {
56
34
  const db = createTestDb();
57
35
  const def = db
@@ -134,33 +112,6 @@ describe("SELECT - ORDER BY", () => {
134
112
 
135
113
  //#region ========== combinations ==========
136
114
 
137
- describe("SELECT + ORDER BY combination", () => {
138
- const db = createTestDb();
139
- const def = db
140
- .user()
141
- .select((item) => ({ id: item.id, name: item.name }))
142
- .orderBy((item) => item.name, "ASC")
143
- .getSelectQueryDef();
144
-
145
- it("Verify QueryDef", () => {
146
- expect(def).toEqual({
147
- type: "select",
148
- as: "T1",
149
- from: { database: "TestDb", schema: "TestSchema", name: "User" },
150
- select: {
151
- id: { type: "column", path: ["T1", "id"] },
152
- name: { type: "column", path: ["T1", "name"] },
153
- },
154
- orderBy: [[{ type: "column", path: ["T1", "name"] }, "ASC"]],
155
- });
156
- });
157
-
158
- it.each(dialects)("[%s] Verify SQL", (dialect) => {
159
- const builder = createQueryBuilder(dialect);
160
- expect(builder.build(def)).toMatchSql(expected.orderSelectCombo[dialect]);
161
- });
162
- });
163
-
164
115
  describe("ORDER BY + LIMIT combination", () => {
165
116
  const db = createTestDb();
166
117
  const def = db