@simplysm/orm-common 13.0.76 → 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.
- package/README.md +575 -50
- package/dist/create-db-context.d.ts +1 -1
- package/dist/create-db-context.d.ts.map +1 -1
- package/dist/create-db-context.js +34 -27
- package/dist/create-db-context.js.map +1 -1
- package/dist/ddl/initialize.js +4 -4
- package/dist/ddl/initialize.js.map +1 -1
- package/dist/ddl/relation-ddl.d.ts +7 -7
- package/dist/ddl/relation-ddl.d.ts.map +1 -1
- package/dist/ddl/relation-ddl.js +18 -18
- package/dist/ddl/relation-ddl.js.map +1 -1
- package/dist/ddl/schema-ddl.d.ts +1 -1
- package/dist/ddl/schema-ddl.d.ts.map +1 -1
- package/dist/ddl/schema-ddl.js +2 -2
- package/dist/ddl/schema-ddl.js.map +1 -1
- package/dist/ddl/table-ddl.js +2 -2
- package/dist/ddl/table-ddl.js.map +1 -1
- package/dist/exec/queryable.d.ts +24 -24
- package/dist/exec/queryable.d.ts.map +1 -1
- package/dist/exec/queryable.js +37 -37
- package/dist/exec/queryable.js.map +1 -1
- package/dist/expr/expr-unit.js +1 -1
- package/dist/expr/expr-unit.js.map +1 -1
- package/dist/expr/expr.d.ts +9 -9
- package/dist/expr/expr.d.ts.map +1 -1
- package/dist/expr/expr.js +10 -10
- package/dist/expr/expr.js.map +1 -1
- package/dist/query-builder/base/expr-renderer-base.d.ts +2 -2
- package/dist/query-builder/base/expr-renderer-base.d.ts.map +1 -1
- package/dist/query-builder/base/query-builder-base.d.ts +7 -15
- package/dist/query-builder/base/query-builder-base.d.ts.map +1 -1
- package/dist/query-builder/base/query-builder-base.js +2 -2
- package/dist/query-builder/base/query-builder-base.js.map +1 -1
- package/dist/query-builder/mssql/mssql-expr-renderer.d.ts +4 -4
- package/dist/query-builder/mssql/mssql-expr-renderer.d.ts.map +1 -1
- package/dist/query-builder/mssql/mssql-expr-renderer.js +8 -8
- package/dist/query-builder/mssql/mssql-expr-renderer.js.map +1 -1
- package/dist/query-builder/mssql/mssql-query-builder.d.ts +7 -7
- package/dist/query-builder/mssql/mssql-query-builder.d.ts.map +1 -1
- package/dist/query-builder/mssql/mssql-query-builder.js +7 -7
- package/dist/query-builder/mssql/mssql-query-builder.js.map +1 -1
- package/dist/query-builder/mysql/mysql-expr-renderer.d.ts +4 -4
- package/dist/query-builder/mysql/mysql-expr-renderer.d.ts.map +1 -1
- package/dist/query-builder/mysql/mysql-expr-renderer.js +9 -9
- package/dist/query-builder/mysql/mysql-expr-renderer.js.map +1 -1
- package/dist/query-builder/mysql/mysql-query-builder.d.ts +7 -7
- package/dist/query-builder/mysql/mysql-query-builder.d.ts.map +1 -1
- package/dist/query-builder/mysql/mysql-query-builder.js +11 -11
- package/dist/query-builder/mysql/mysql-query-builder.js.map +1 -1
- package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts +4 -4
- package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +1 -1
- package/dist/query-builder/postgresql/postgresql-expr-renderer.js +8 -8
- package/dist/query-builder/postgresql/postgresql-expr-renderer.js.map +1 -1
- package/dist/query-builder/postgresql/postgresql-query-builder.d.ts +7 -7
- package/dist/query-builder/postgresql/postgresql-query-builder.d.ts.map +1 -1
- package/dist/query-builder/postgresql/postgresql-query-builder.js +7 -7
- package/dist/query-builder/postgresql/postgresql-query-builder.js.map +1 -1
- package/dist/schema/procedure-builder.d.ts +1 -1
- package/dist/schema/table-builder.d.ts +1 -1
- package/dist/schema/table-builder.d.ts.map +1 -1
- package/dist/schema/table-builder.js +1 -1
- package/dist/schema/view-builder.d.ts +1 -1
- package/dist/schema/view-builder.d.ts.map +1 -1
- package/dist/schema/view-builder.js +1 -1
- package/dist/types/db-context-def.d.ts +18 -18
- package/dist/types/db-context-def.d.ts.map +1 -1
- package/dist/types/expr.d.ts +6 -6
- package/dist/types/expr.d.ts.map +1 -1
- package/dist/types/query-def.d.ts +15 -15
- package/dist/types/query-def.d.ts.map +1 -1
- package/dist/types/query-def.js +6 -6
- package/dist/utils/result-parser.d.ts.map +1 -1
- package/dist/utils/result-parser.js +44 -16
- package/dist/utils/result-parser.js.map +1 -1
- package/package.json +2 -2
- package/src/create-db-context.ts +36 -29
- package/src/ddl/initialize.ts +4 -4
- package/src/ddl/relation-ddl.ts +16 -16
- package/src/ddl/schema-ddl.ts +2 -2
- package/src/ddl/table-ddl.ts +2 -2
- package/src/exec/queryable.ts +58 -58
- package/src/expr/expr-unit.ts +1 -1
- package/src/expr/expr.ts +13 -13
- package/src/query-builder/base/expr-renderer-base.ts +2 -2
- package/src/query-builder/base/query-builder-base.ts +18 -14
- package/src/query-builder/mssql/mssql-expr-renderer.ts +11 -10
- package/src/query-builder/mssql/mssql-query-builder.ts +13 -13
- package/src/query-builder/mysql/mysql-expr-renderer.ts +12 -11
- package/src/query-builder/mysql/mysql-query-builder.ts +17 -17
- package/src/query-builder/postgresql/postgresql-expr-renderer.ts +11 -10
- package/src/query-builder/postgresql/postgresql-query-builder.ts +13 -13
- package/src/schema/procedure-builder.ts +1 -1
- package/src/schema/table-builder.ts +1 -1
- package/src/schema/view-builder.ts +1 -1
- package/src/types/db-context-def.ts +18 -18
- package/src/types/expr.ts +6 -6
- package/src/types/query-def.ts +31 -31
- package/src/utils/result-parser.ts +60 -16
- package/tests/db-context/create-db-context.spec.ts +6 -6
- package/tests/ddl/basic.expected.ts +8 -8
- package/tests/ddl/basic.spec.ts +24 -24
- package/tests/ddl/index-builder.spec.ts +10 -10
- package/tests/ddl/relation-builder.spec.ts +4 -4
- package/tests/dml/update.spec.ts +2 -2
- package/tests/expr/conditional.expected.ts +2 -2
- package/tests/expr/conditional.spec.ts +8 -8
- package/tests/expr/date.spec.ts +5 -5
- package/tests/select/basic.spec.ts +5 -5
- package/tests/utils/result-parser.spec.ts +4 -4
|
@@ -36,7 +36,7 @@ describe("DDL - Relation Builder", () => {
|
|
|
36
36
|
const fkBuilder = RelationFactory.foreignKey(["userId"], () => User);
|
|
37
37
|
|
|
38
38
|
const db = createTestDb();
|
|
39
|
-
const def = db.
|
|
39
|
+
const def = db.getAddForeignKeyQueryDef(
|
|
40
40
|
{ database: "TestDb", schema: "TestSchema", name: "Post" },
|
|
41
41
|
"user",
|
|
42
42
|
fkBuilder,
|
|
@@ -44,7 +44,7 @@ describe("DDL - Relation Builder", () => {
|
|
|
44
44
|
|
|
45
45
|
it("should validate QueryDef", () => {
|
|
46
46
|
expect(def).toEqual({
|
|
47
|
-
type: "
|
|
47
|
+
type: "addForeignKey",
|
|
48
48
|
table: { database: "TestDb", schema: "TestSchema", name: "Post" },
|
|
49
49
|
foreignKey: {
|
|
50
50
|
name: "FK_Post_user",
|
|
@@ -88,7 +88,7 @@ describe("DDL - Relation Builder", () => {
|
|
|
88
88
|
const fkBuilder = RelationFactory.foreignKey(["companyId", "companyRegionId"], () => Company);
|
|
89
89
|
|
|
90
90
|
const db = createTestDb();
|
|
91
|
-
const def = db.
|
|
91
|
+
const def = db.getAddForeignKeyQueryDef(
|
|
92
92
|
{ database: "TestDb", schema: "TestSchema", name: "Employee" },
|
|
93
93
|
"company",
|
|
94
94
|
fkBuilder,
|
|
@@ -96,7 +96,7 @@ describe("DDL - Relation Builder", () => {
|
|
|
96
96
|
|
|
97
97
|
it("should validate QueryDef", () => {
|
|
98
98
|
expect(def).toEqual({
|
|
99
|
-
type: "
|
|
99
|
+
type: "addForeignKey",
|
|
100
100
|
table: { database: "TestDb", schema: "TestSchema", name: "Employee" },
|
|
101
101
|
foreignKey: {
|
|
102
102
|
name: "FK_Employee_company",
|
package/tests/dml/update.spec.ts
CHANGED
|
@@ -202,14 +202,14 @@ describe("FK switch", () => {
|
|
|
202
202
|
|
|
203
203
|
const def = db.getSwitchFkQueryDef(
|
|
204
204
|
{ database: "TestDb", schema: "TestSchema", name: "Employee" },
|
|
205
|
-
|
|
205
|
+
false,
|
|
206
206
|
);
|
|
207
207
|
|
|
208
208
|
it("Verify QueryDef", () => {
|
|
209
209
|
expect(def).toEqual({
|
|
210
210
|
type: "switchFk",
|
|
211
211
|
table: { database: "TestDb", schema: "TestSchema", name: "Employee" },
|
|
212
|
-
|
|
212
|
+
enabled: false,
|
|
213
213
|
});
|
|
214
214
|
});
|
|
215
215
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { mysql, pgsql, tsql } from "@simplysm/core-common";
|
|
2
2
|
import type { ExpectedSql } from "../setup/test-utils";
|
|
3
3
|
|
|
4
|
-
export const
|
|
4
|
+
export const coalesce: ExpectedSql = {
|
|
5
5
|
mysql: mysql`
|
|
6
6
|
SELECT COALESCE(\`T1\`.\`name\`, 'Unknown') AS \`nameOrDefault\`
|
|
7
7
|
FROM \`TestDb\`.\`User\` AS \`T1\`
|
|
@@ -118,7 +118,7 @@ export const least: ExpectedSql = {
|
|
|
118
118
|
`,
|
|
119
119
|
};
|
|
120
120
|
|
|
121
|
-
export const
|
|
121
|
+
export const coalesceMultiple: ExpectedSql = {
|
|
122
122
|
mysql: mysql`
|
|
123
123
|
SELECT COALESCE(\`T1\`.\`email\`, \`T1\`.\`name\`, 'Anonymous') AS \`firstValid\`
|
|
124
124
|
FROM \`TestDb\`.\`User\` AS \`T1\`
|
|
@@ -7,19 +7,19 @@ import "../setup/test-utils"; // toMatchSql matcher
|
|
|
7
7
|
import * as expected from "./conditional.expected";
|
|
8
8
|
|
|
9
9
|
describe("Expr - Conditional functions", () => {
|
|
10
|
-
describe("
|
|
10
|
+
describe("coalesce - null replacement", () => {
|
|
11
11
|
const db = createTestDb();
|
|
12
12
|
const def = db
|
|
13
13
|
.user()
|
|
14
14
|
.select((item) => ({
|
|
15
|
-
nameOrDefault: expr.
|
|
15
|
+
nameOrDefault: expr.coalesce(item.name, "Unknown"),
|
|
16
16
|
}))
|
|
17
17
|
.getSelectQueryDef();
|
|
18
18
|
|
|
19
19
|
it("Verify QueryDef", () => {
|
|
20
20
|
expect(def.select).toMatchObject({
|
|
21
21
|
nameOrDefault: {
|
|
22
|
-
type: "
|
|
22
|
+
type: "coalesce",
|
|
23
23
|
args: [
|
|
24
24
|
{ type: "column", path: ["T1", "name"] },
|
|
25
25
|
{ type: "value", value: "Unknown" },
|
|
@@ -30,7 +30,7 @@ describe("Expr - Conditional functions", () => {
|
|
|
30
30
|
|
|
31
31
|
it.each(dialects)("[%s] Verify SQL", (dialect) => {
|
|
32
32
|
const builder = createQueryBuilder(dialect);
|
|
33
|
-
expect(builder.build(def)).toMatchSql(expected.
|
|
33
|
+
expect(builder.build(def)).toMatchSql(expected.coalesce[dialect]);
|
|
34
34
|
});
|
|
35
35
|
});
|
|
36
36
|
|
|
@@ -219,19 +219,19 @@ describe("Expr - Conditional functions", () => {
|
|
|
219
219
|
});
|
|
220
220
|
});
|
|
221
221
|
|
|
222
|
-
describe("
|
|
222
|
+
describe("coalesce - create COALESCE with 3+ arguments", () => {
|
|
223
223
|
const db = createTestDb();
|
|
224
224
|
const def = db
|
|
225
225
|
.user()
|
|
226
226
|
.select((item) => ({
|
|
227
|
-
firstValid: expr.
|
|
227
|
+
firstValid: expr.coalesce(item.email, item.name, "Anonymous"),
|
|
228
228
|
}))
|
|
229
229
|
.getSelectQueryDef();
|
|
230
230
|
|
|
231
231
|
it("Verify QueryDef", () => {
|
|
232
232
|
expect(def.select).toMatchObject({
|
|
233
233
|
firstValid: {
|
|
234
|
-
type: "
|
|
234
|
+
type: "coalesce",
|
|
235
235
|
args: [
|
|
236
236
|
{ type: "column", path: ["T1", "email"] },
|
|
237
237
|
{ type: "column", path: ["T1", "name"] },
|
|
@@ -243,7 +243,7 @@ describe("Expr - Conditional functions", () => {
|
|
|
243
243
|
|
|
244
244
|
it.each(dialects)("[%s] Verify SQL", (dialect) => {
|
|
245
245
|
const builder = createQueryBuilder(dialect);
|
|
246
|
-
expect(builder.build(def)).toMatchSql(expected.
|
|
246
|
+
expect(builder.build(def)).toMatchSql(expected.coalesceMultiple[dialect]);
|
|
247
247
|
});
|
|
248
248
|
});
|
|
249
249
|
});
|
package/tests/expr/date.spec.ts
CHANGED
|
@@ -121,7 +121,7 @@ describe("Expr - Date/Time functions", () => {
|
|
|
121
121
|
expect(def.select).toMatchObject({
|
|
122
122
|
daysDiff: {
|
|
123
123
|
type: "dateDiff",
|
|
124
|
-
|
|
124
|
+
unit: "day",
|
|
125
125
|
from: { type: "column", path: ["T1", "createdAt"] },
|
|
126
126
|
to: { type: "value", value: targetDate },
|
|
127
127
|
},
|
|
@@ -180,7 +180,7 @@ describe("Expr - Date/Time functions", () => {
|
|
|
180
180
|
expect(def.select).toMatchObject({
|
|
181
181
|
hoursDiff: {
|
|
182
182
|
type: "dateDiff",
|
|
183
|
-
|
|
183
|
+
unit: "hour",
|
|
184
184
|
from: { type: "column", path: ["T1", "createdAt"] },
|
|
185
185
|
to: { type: "value", value: targetDate },
|
|
186
186
|
},
|
|
@@ -207,7 +207,7 @@ describe("Expr - Date/Time functions", () => {
|
|
|
207
207
|
expect(def.select).toMatchObject({
|
|
208
208
|
minutesDiff: {
|
|
209
209
|
type: "dateDiff",
|
|
210
|
-
|
|
210
|
+
unit: "minute",
|
|
211
211
|
from: { type: "column", path: ["T1", "createdAt"] },
|
|
212
212
|
to: { type: "value", value: targetDate },
|
|
213
213
|
},
|
|
@@ -234,7 +234,7 @@ describe("Expr - Date/Time functions", () => {
|
|
|
234
234
|
expect(def.select).toMatchObject({
|
|
235
235
|
secondsDiff: {
|
|
236
236
|
type: "dateDiff",
|
|
237
|
-
|
|
237
|
+
unit: "second",
|
|
238
238
|
from: { type: "column", path: ["T1", "createdAt"] },
|
|
239
239
|
to: { type: "value", value: targetDate },
|
|
240
240
|
},
|
|
@@ -260,7 +260,7 @@ describe("Expr - Date/Time functions", () => {
|
|
|
260
260
|
expect(def.select).toMatchObject({
|
|
261
261
|
nextMonth: {
|
|
262
262
|
type: "dateAdd",
|
|
263
|
-
|
|
263
|
+
unit: "month",
|
|
264
264
|
source: { type: "column", path: ["T1", "createdAt"] },
|
|
265
265
|
value: { type: "value", value: 1 },
|
|
266
266
|
},
|
|
@@ -119,12 +119,12 @@ describe("SELECT - Basic", () => {
|
|
|
119
119
|
});
|
|
120
120
|
});
|
|
121
121
|
|
|
122
|
-
describe("
|
|
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.
|
|
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: "
|
|
138
|
+
type: "coalesce",
|
|
139
139
|
args: [
|
|
140
140
|
{ type: "column", path: ["T1", "email"] },
|
|
141
141
|
{ type: "value", value: "N/A" },
|
|
@@ -151,12 +151,12 @@ describe("SELECT - Basic", () => {
|
|
|
151
151
|
});
|
|
152
152
|
});
|
|
153
153
|
|
|
154
|
-
describe("
|
|
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.
|
|
159
|
+
contact: expr.coalesce(item.email, item.name, "N/A"),
|
|
160
160
|
}))
|
|
161
161
|
.getSelectQueryDef();
|
|
162
162
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import {
|
|
2
|
+
import { bytes, DateOnly, DateTime, Time, Uuid } from "@simplysm/core-common";
|
|
3
3
|
import { parseQueryResult } from "../../src/utils/result-parser";
|
|
4
4
|
import type { ResultMeta } from "../../src/types/db";
|
|
5
5
|
|
|
@@ -112,7 +112,7 @@ describe("result-parser", () => {
|
|
|
112
112
|
|
|
113
113
|
it("Uuid conversion - Uint8Array", async () => {
|
|
114
114
|
const uuidStr = "550e8400-e29b-41d4-a716-446655440000";
|
|
115
|
-
const uuidBytes =
|
|
115
|
+
const uuidBytes = bytes.fromHex(uuidStr.replace(/-/g, ""));
|
|
116
116
|
const raw = [{ id: uuidBytes }];
|
|
117
117
|
const meta: ResultMeta = {
|
|
118
118
|
columns: { id: "Uuid" },
|
|
@@ -126,8 +126,8 @@ describe("result-parser", () => {
|
|
|
126
126
|
});
|
|
127
127
|
|
|
128
128
|
it("Bytes conversion - Uint8Array passthrough", async () => {
|
|
129
|
-
const
|
|
130
|
-
const raw = [{ data:
|
|
129
|
+
const rawBytes = new Uint8Array([0x01, 0x02, 0x03]);
|
|
130
|
+
const raw = [{ data: rawBytes }];
|
|
131
131
|
const meta: ResultMeta = {
|
|
132
132
|
columns: { data: "Bytes" },
|
|
133
133
|
joins: {},
|