pwi-plata-type 0.4.66 → 0.4.67
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/__BUILD__/bin/runtime/sql.js +12 -0
- package/__BUILD__/bin/runtime/sql.js.map +1 -0
- package/__BUILD__/libs/sql.js +117 -6
- package/__BUILD__/libs/sql.js.map +1 -1
- package/package.json +1 -1
- package/src/@types/knex.d.ts +12 -0
- package/src/@types/sql.d.ts +13 -0
- package/src/bin/runtime/sql.ts +13 -0
- package/src/libs/sql.ts +145 -6
- package/src/tests/assets/sql/example.db +0 -0
- package/src/tests/assets/sql/example.sql +16 -1
- package/src/tests/sql.test.ts +62 -11
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PlataRuntimeE = void 0;
|
|
4
|
+
var PlataRuntimeE;
|
|
5
|
+
(function (PlataRuntimeE) {
|
|
6
|
+
function TimeZoneDate(d) {
|
|
7
|
+
return new Date(d.getTime() - (d.getTimezoneOffset() * 1000 * 60));
|
|
8
|
+
}
|
|
9
|
+
PlataRuntimeE.TimeZoneDate = TimeZoneDate;
|
|
10
|
+
PlataRuntimeE._knexExtended = false;
|
|
11
|
+
})(PlataRuntimeE = exports.PlataRuntimeE || (exports.PlataRuntimeE = {}));
|
|
12
|
+
//# sourceMappingURL=sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../../src/bin/runtime/sql.ts"],"names":[],"mappings":";;;AAMA,IAAiB,aAAa,CAM7B;AAND,WAAiB,aAAa;IAC1B,SAAgB,YAAY,CAAC,CAAO;QAChC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,CAAQ,CAAA;IAC7E,CAAC;IAFe,0BAAY,eAE3B,CAAA;IAEU,2BAAa,GAAY,KAAK,CAAA;AAC7C,CAAC,EANgB,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAM7B"}
|
package/__BUILD__/libs/sql.js
CHANGED
|
@@ -3,8 +3,59 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Query = exports.Driver = void 0;
|
|
6
|
+
exports.Query = exports.Driver = exports.Internals = void 0;
|
|
7
7
|
const knex_1 = __importDefault(require("knex"));
|
|
8
|
+
var Internals;
|
|
9
|
+
(function (Internals) {
|
|
10
|
+
function context(c) {
|
|
11
|
+
const context = this.queryContext() ?? new Object(null);
|
|
12
|
+
if (context._userContext === undefined) {
|
|
13
|
+
context._userContext = new Object(null);
|
|
14
|
+
}
|
|
15
|
+
if (c === undefined) {
|
|
16
|
+
return context._userContext;
|
|
17
|
+
}
|
|
18
|
+
context._userContext = c;
|
|
19
|
+
return this.queryContext(context);
|
|
20
|
+
}
|
|
21
|
+
Internals.context = context;
|
|
22
|
+
function includeOne(table, type, s) {
|
|
23
|
+
const t = this;
|
|
24
|
+
const context = t.queryContext() ?? new Object(null);
|
|
25
|
+
if (context._joins === undefined) {
|
|
26
|
+
context._joins = [];
|
|
27
|
+
}
|
|
28
|
+
context._joins.push(table);
|
|
29
|
+
const q = t.queryContext(context);
|
|
30
|
+
switch (type) {
|
|
31
|
+
case 'CROSS JOIN':
|
|
32
|
+
return q.crossJoin(table, s);
|
|
33
|
+
break;
|
|
34
|
+
case 'FULL OUTER JOIN':
|
|
35
|
+
return q.fullOuterJoin(table, s);
|
|
36
|
+
break;
|
|
37
|
+
case 'INNER JOIN':
|
|
38
|
+
return q.innerJoin(table, s);
|
|
39
|
+
break;
|
|
40
|
+
case 'JOIN':
|
|
41
|
+
return q.join(table, s);
|
|
42
|
+
break;
|
|
43
|
+
case 'LEFT JOIN':
|
|
44
|
+
return q.leftJoin(table, s);
|
|
45
|
+
break;
|
|
46
|
+
case 'LEFT OUTER JOIN':
|
|
47
|
+
return q.leftOuterJoin(table, s);
|
|
48
|
+
break;
|
|
49
|
+
case 'OUTER JOIN':
|
|
50
|
+
return q.outerJoin(table, s);
|
|
51
|
+
break;
|
|
52
|
+
case 'RIGHT JOIN':
|
|
53
|
+
return q.rightJoin(table, s);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
Internals.includeOne = includeOne;
|
|
58
|
+
})(Internals = exports.Internals || (exports.Internals = {}));
|
|
8
59
|
class Driver {
|
|
9
60
|
config;
|
|
10
61
|
inTransaction;
|
|
@@ -18,6 +69,11 @@ class Driver {
|
|
|
18
69
|
min: 1,
|
|
19
70
|
max: 1
|
|
20
71
|
};
|
|
72
|
+
if (!Plata._knexExtended) {
|
|
73
|
+
knex_1.default.QueryBuilder.extend('context', Internals.context);
|
|
74
|
+
knex_1.default.QueryBuilder.extend('includeOne', Internals.includeOne);
|
|
75
|
+
Plata._knexExtended = true;
|
|
76
|
+
}
|
|
21
77
|
this.conn = (0, knex_1.default)(config);
|
|
22
78
|
if (Plata.config.ENV === 'debug') {
|
|
23
79
|
this.conn.on('query', console.log);
|
|
@@ -30,7 +86,7 @@ class Driver {
|
|
|
30
86
|
}
|
|
31
87
|
select(table, model) {
|
|
32
88
|
return {
|
|
33
|
-
build: (builder) => new Query(builder(this.conn.
|
|
89
|
+
build: (builder) => new Query(builder(this.conn.queryBuilder()), model, table),
|
|
34
90
|
};
|
|
35
91
|
}
|
|
36
92
|
async insert(table, model, values) {
|
|
@@ -64,9 +120,62 @@ exports.Driver = Driver;
|
|
|
64
120
|
class Query {
|
|
65
121
|
query;
|
|
66
122
|
model;
|
|
67
|
-
|
|
68
|
-
|
|
123
|
+
table;
|
|
124
|
+
joins;
|
|
125
|
+
constructor(query, model, table) {
|
|
126
|
+
const context = query.queryContext() ?? new Object(null);
|
|
127
|
+
this.joins = context._joins ?? [];
|
|
128
|
+
this.table = table;
|
|
69
129
|
this.model = model;
|
|
130
|
+
this.query = this._buildSelect(query, this.model.template);
|
|
131
|
+
}
|
|
132
|
+
_buildSelect(query, template) {
|
|
133
|
+
const cs = [];
|
|
134
|
+
for (const key in template) {
|
|
135
|
+
if (!Array.isArray(template[key])) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (Array.isArray(template[key][0])) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (typeof template[key][0] === 'function') {
|
|
142
|
+
cs.push(`${this.table}.${key} as ${this.table}_${key}`);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (!this.joins.includes(key)) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
for (const column in template[key][0]) {
|
|
149
|
+
cs.push(`${key}.${column} as ${key}_${column}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return query.select(...cs).from(this.table);
|
|
153
|
+
}
|
|
154
|
+
_buildModel(row) {
|
|
155
|
+
const template = this.model.template;
|
|
156
|
+
const r = new Object(null);
|
|
157
|
+
for (const key in template) {
|
|
158
|
+
if (!Array.isArray(template[key])) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (Array.isArray(template[key][0])) {
|
|
162
|
+
r[key] = [];
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (typeof template[key][0] === 'function') {
|
|
166
|
+
r[key] = row[`${this.table}_${key}`] ?? null;
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (!this.joins.includes(key)) {
|
|
170
|
+
r[key] = [];
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
r[key] = [new Object(null)];
|
|
174
|
+
for (const column in template[key][0]) {
|
|
175
|
+
r[key][0][column] = row[`${key}_${column}`] ?? null;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return r;
|
|
70
179
|
}
|
|
71
180
|
_handleStream(handler) {
|
|
72
181
|
return new Promise(resolve => {
|
|
@@ -77,13 +186,15 @@ class Query {
|
|
|
77
186
|
});
|
|
78
187
|
stream.on('data', async (row) => {
|
|
79
188
|
if (shoudContinue) {
|
|
80
|
-
shoudContinue = await handler.row(row);
|
|
189
|
+
shoudContinue = await handler.row(this._buildModel(row));
|
|
81
190
|
}
|
|
82
191
|
else {
|
|
83
192
|
stream.pause();
|
|
84
|
-
stream.end();
|
|
85
193
|
}
|
|
86
194
|
});
|
|
195
|
+
stream.on('pause', () => {
|
|
196
|
+
stream.end();
|
|
197
|
+
});
|
|
87
198
|
stream.on('error', async (err) => {
|
|
88
199
|
shoudContinue = false;
|
|
89
200
|
if (handler.error !== undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/libs/sql.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAiC;AAGjC,MAAa,MAAM;IACC,MAAM,CAAa;IACnB,aAAa,CAAe;IAC5B,IAAI,CAAsD;IAC1E,YAAY,MAAmB,EAAE,aAA4B,EAAE,GAAsB;QACjF,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;gBACzB,MAAM,CAAC,IAAI,GAAG;oBACV,GAAG,EAAE,CAAC;oBACN,GAAG,EAAE,CAAC;iBACT,CACJ;YAED,IAAI,CAAC,IAAI,GAAG,IAAA,cAAI,EAAC,MAAM,CAAQ,CAAA;YAE/B,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,OAAO,EAAE;gBAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;gBAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;aAC7C;SACJ;aAAM;YACH,IAAI,CAAC,IAAI,GAAG,GAAU,CAAA;SACzB;IACL,CAAC;IAEM,MAAM,CAA0D,KAAa,EAAE,KAA0B;QAC5G,OAAO;YACH,KAAK,EAAE,CAAC,OAAuB,EAAE,EAAE,CAC/B,IAAI,KAAK,CACL,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/libs/sql.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Knex as KnexOriginal } from 'knex';
|
|
2
|
+
|
|
3
|
+
declare module 'knex' {
|
|
4
|
+
namespace Knex {
|
|
5
|
+
interface QueryBuilder {
|
|
6
|
+
includeOne<TRecord extends {}, TResult>(table: keyof TRecord, type: Sql.Joins,s: KnexOriginal.JoinCallback): KnexOriginal.QueryBuilder<TRecord, TResult>;
|
|
7
|
+
context<TRecord extends {}, TResult>(context: any): KnexOriginal.QueryBuilder<TRecord, TResult>;
|
|
8
|
+
|
|
9
|
+
context<T>(): T;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
package/src/@types/sql.d.ts
CHANGED
|
@@ -31,5 +31,18 @@ declare global {
|
|
|
31
31
|
type TimeZoneDate = Date & { __type: 'sql' }
|
|
32
32
|
|
|
33
33
|
type TransactionFunction<T, Y> = (sql: T) => Promise<Y>
|
|
34
|
+
|
|
35
|
+
type Joins =
|
|
36
|
+
'JOIN'
|
|
37
|
+
| `${
|
|
38
|
+
'LEFT'
|
|
39
|
+
| 'CROSS'
|
|
40
|
+
| 'INNER'
|
|
41
|
+
| 'OUTER'
|
|
42
|
+
| 'RIGHT'
|
|
43
|
+
| 'FULL OUTER'
|
|
44
|
+
| 'LEFT OUTER'
|
|
45
|
+
} JOIN`
|
|
46
|
+
;
|
|
34
47
|
}
|
|
35
48
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
interface PlataRuntime extends PlataRuntimeEType {}
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
type PlataRuntimeEType = typeof PlataRuntimeE
|
|
6
|
+
|
|
7
|
+
export namespace PlataRuntimeE {
|
|
8
|
+
export function TimeZoneDate(d: Date): Sql.TimeZoneDate {
|
|
9
|
+
return new Date(d.getTime() - (d.getTimezoneOffset() * 1000 * 60)) as any
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export let _knexExtended: boolean = false
|
|
13
|
+
}
|
package/src/libs/sql.ts
CHANGED
|
@@ -1,6 +1,64 @@
|
|
|
1
1
|
import knex, { Knex } from "knex"
|
|
2
2
|
import { ModelTemplate } from "./model"
|
|
3
3
|
|
|
4
|
+
export namespace Internals {
|
|
5
|
+
export function context<T extends {} | undefined>(c: T): T extends undefined ? void : T {
|
|
6
|
+
const context = this.queryContext() ?? new Object(null)
|
|
7
|
+
|
|
8
|
+
if (context._userContext === undefined) {
|
|
9
|
+
context._userContext = new Object(null)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (c === undefined) {
|
|
13
|
+
return context._userContext
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
context._userContext = c
|
|
17
|
+
|
|
18
|
+
return this.queryContext(context)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function includeOne(table: string, type: Sql.Joins,s: Knex.JoinCallback) {
|
|
22
|
+
const t: Knex.QueryBuilder = this
|
|
23
|
+
const context = t.queryContext() ?? new Object(null)
|
|
24
|
+
|
|
25
|
+
if (context._joins === undefined) {
|
|
26
|
+
context._joins = []
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
context._joins.push(table)
|
|
30
|
+
|
|
31
|
+
const q = t.queryContext(context)
|
|
32
|
+
|
|
33
|
+
switch(type) {
|
|
34
|
+
case 'CROSS JOIN':
|
|
35
|
+
return q.crossJoin(table, s)
|
|
36
|
+
break
|
|
37
|
+
case 'FULL OUTER JOIN':
|
|
38
|
+
return q.fullOuterJoin(table, s)
|
|
39
|
+
break
|
|
40
|
+
case 'INNER JOIN':
|
|
41
|
+
return q.innerJoin(table, s)
|
|
42
|
+
break
|
|
43
|
+
case 'JOIN':
|
|
44
|
+
return q.join(table, s)
|
|
45
|
+
break
|
|
46
|
+
case 'LEFT JOIN':
|
|
47
|
+
return q.leftJoin(table, s)
|
|
48
|
+
break
|
|
49
|
+
case 'LEFT OUTER JOIN':
|
|
50
|
+
return q.leftOuterJoin(table, s)
|
|
51
|
+
break
|
|
52
|
+
case 'OUTER JOIN':
|
|
53
|
+
return q.outerJoin(table, s)
|
|
54
|
+
break
|
|
55
|
+
case 'RIGHT JOIN':
|
|
56
|
+
return q.rightJoin(table, s)
|
|
57
|
+
break
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
4
62
|
export class Driver<InTransaction extends boolean> {
|
|
5
63
|
public readonly config: Knex.Config
|
|
6
64
|
public readonly inTransaction: InTransaction
|
|
@@ -16,6 +74,13 @@ export class Driver<InTransaction extends boolean> {
|
|
|
16
74
|
max: 1
|
|
17
75
|
}
|
|
18
76
|
;
|
|
77
|
+
|
|
78
|
+
if (!Plata._knexExtended) {
|
|
79
|
+
knex.QueryBuilder.extend('context', Internals.context)
|
|
80
|
+
knex.QueryBuilder.extend('includeOne', Internals.includeOne)
|
|
81
|
+
|
|
82
|
+
Plata._knexExtended = true
|
|
83
|
+
}
|
|
19
84
|
|
|
20
85
|
this.conn = knex(config) as any
|
|
21
86
|
|
|
@@ -32,8 +97,9 @@ export class Driver<InTransaction extends boolean> {
|
|
|
32
97
|
return {
|
|
33
98
|
build: (builder: Sql.Builder<T>) =>
|
|
34
99
|
new Query(
|
|
35
|
-
builder(this.conn.
|
|
36
|
-
model
|
|
100
|
+
builder(this.conn.queryBuilder()),
|
|
101
|
+
model,
|
|
102
|
+
table
|
|
37
103
|
)
|
|
38
104
|
,
|
|
39
105
|
}
|
|
@@ -88,10 +154,80 @@ export class Driver<InTransaction extends boolean> {
|
|
|
88
154
|
export class Query<T extends Model.Template, C extends Model.Converters<T>> {
|
|
89
155
|
public query: Sql.ModelQueryBuilder<T>
|
|
90
156
|
public readonly model: ModelTemplate<T, C>
|
|
157
|
+
public readonly table: string
|
|
158
|
+
public readonly joins: string[]
|
|
159
|
+
|
|
160
|
+
constructor (query: Sql.ModelQueryBuilder<T>, model: ModelTemplate<T, C>, table: string) {
|
|
161
|
+
const context = query.queryContext() ?? new Object(null)
|
|
91
162
|
|
|
92
|
-
|
|
93
|
-
|
|
163
|
+
this.joins = context._joins ?? []
|
|
164
|
+
|
|
165
|
+
this.table = table
|
|
94
166
|
this.model = model
|
|
167
|
+
this.query = this._buildSelect(query, this.model.template)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private _buildSelect<T extends Model.Template>(query: Sql.ModelQueryBuilder<T>, template: T): Sql.ModelQueryBuilder<T> {
|
|
171
|
+
const cs: string[] = []
|
|
172
|
+
|
|
173
|
+
for (const key in template) {
|
|
174
|
+
if (!Array.isArray(template[key])) {
|
|
175
|
+
continue
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (Array.isArray(template[key][0])) {
|
|
179
|
+
continue
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (typeof template[key][0] === 'function') {
|
|
183
|
+
cs.push(`${this.table}.${key} as ${this.table}_${key}`)
|
|
184
|
+
continue
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (!this.joins.includes(key)) {
|
|
188
|
+
continue
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
for (const column in template[key][0]) {
|
|
192
|
+
cs.push(`${key}.${column} as ${key}_${column}`)
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return query.select(...cs).from(this.table)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
private _buildModel<T extends Model.Template>(row: any): typeof this.model.type {
|
|
200
|
+
const template = this.model.template
|
|
201
|
+
const r: typeof this.model.type = new Object(null) as any
|
|
202
|
+
|
|
203
|
+
for (const key in template) {
|
|
204
|
+
if (!Array.isArray(template[key])) {
|
|
205
|
+
continue
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (Array.isArray(template[key][0])) {
|
|
209
|
+
r[key] = [] as any
|
|
210
|
+
continue
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (typeof template[key][0] === 'function') {
|
|
214
|
+
r[key] = row[`${this.table}_${key}`] ?? null
|
|
215
|
+
continue
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if (!this.joins.includes(key)) {
|
|
219
|
+
r[key] = [] as any
|
|
220
|
+
continue
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
r[key] = [new Object(null)] as any
|
|
224
|
+
|
|
225
|
+
for (const column in template[key][0]) {
|
|
226
|
+
r[key][0][column] = row[`${key}_${column}`] ?? null
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return r
|
|
95
231
|
}
|
|
96
232
|
|
|
97
233
|
public _handleStream<Y>(handler: Sql.StreamHandler): PlataPromise<Y> {
|
|
@@ -106,13 +242,16 @@ export class Query<T extends Model.Template, C extends Model.Converters<T>> {
|
|
|
106
242
|
|
|
107
243
|
stream.on('data', async row => {
|
|
108
244
|
if (shoudContinue) {
|
|
109
|
-
shoudContinue = await handler.row(row)
|
|
245
|
+
shoudContinue = await handler.row(this._buildModel(row))
|
|
110
246
|
} else {
|
|
111
247
|
stream.pause()
|
|
112
|
-
stream.end()
|
|
113
248
|
}
|
|
114
249
|
})
|
|
115
250
|
|
|
251
|
+
stream.on('pause', () => {
|
|
252
|
+
stream.end()
|
|
253
|
+
})
|
|
254
|
+
|
|
116
255
|
stream.on('error', async err => {
|
|
117
256
|
shoudContinue = false
|
|
118
257
|
|
|
Binary file
|
|
@@ -35,4 +35,19 @@ CREATE TABLE TB_MULTIBANCO (
|
|
|
35
35
|
PK_ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
36
36
|
VL_PRECO INTEGER NOT NULL,
|
|
37
37
|
DS_OBS TEXT NULL
|
|
38
|
-
);
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE TABLE TB_JOINTEST1 (
|
|
41
|
+
PK_ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
42
|
+
VL_PRECO INTEGER NOT NULL,
|
|
43
|
+
DS_OBS TEXT NULL
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
INSERT INTO TB_JOINTEST1 (VL_PRECO,DS_OBS) VALUES (1, 'A');
|
|
47
|
+
|
|
48
|
+
CREATE TABLE TB_JOINTEST2 (
|
|
49
|
+
PK_ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
50
|
+
FK_JOIN INTEGER NOT NULL
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
INSERT INTO TB_JOINTEST2 (FK_JOIN) VALUES (1);
|
package/src/tests/sql.test.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { describe, it,
|
|
1
|
+
import { describe, it, before, after } from "node:test"
|
|
2
2
|
import assert from "node:assert"
|
|
3
3
|
import path from "node:path"
|
|
4
4
|
import fs from "node:fs"
|
|
@@ -33,11 +33,14 @@ describe('PlataSql', () => {
|
|
|
33
33
|
const modelSql = new PlataModels.ModelTemplate({
|
|
34
34
|
PK_ID: [ PlataModels.Required(), PlataModels.Int() ],
|
|
35
35
|
VL_PRECO: [ PlataModels.Required(), PlataModels.Int() ],
|
|
36
|
-
DS_OBS: [ PlataModels.Required(), PlataModels.VarChar(Infinity) ]
|
|
36
|
+
DS_OBS: [ PlataModels.Required(), PlataModels.VarChar(Infinity) ],
|
|
37
|
+
TB_JOINTEST2: [{
|
|
38
|
+
PK_ID: [ PlataModels.Required(), PlataModels.Int() ],
|
|
39
|
+
FK_JOIN: [ PlataModels.Required(), PlataModels.Int() ],
|
|
40
|
+
}]
|
|
37
41
|
} as const, {} as const)
|
|
38
42
|
|
|
39
|
-
const getSqlite3 =
|
|
40
|
-
await plataPromise
|
|
43
|
+
const getSqlite3 = () => {
|
|
41
44
|
if (!fs.existsSync(tmpDatabasePath)) {
|
|
42
45
|
fs.copyFileSync(originalDatabasePath, tmpDatabasePath)
|
|
43
46
|
}
|
|
@@ -50,8 +53,7 @@ describe('PlataSql', () => {
|
|
|
50
53
|
}, false)
|
|
51
54
|
}
|
|
52
55
|
|
|
53
|
-
const getSqlite3Aux =
|
|
54
|
-
await plataPromise
|
|
56
|
+
const getSqlite3Aux = () => {
|
|
55
57
|
if (!fs.existsSync(tmpAuxDatabasePath)) {
|
|
56
58
|
fs.copyFileSync(originalDatabasePath, tmpAuxDatabasePath)
|
|
57
59
|
}
|
|
@@ -65,8 +67,11 @@ describe('PlataSql', () => {
|
|
|
65
67
|
}
|
|
66
68
|
|
|
67
69
|
before(async () => {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
+
await plataPromise
|
|
71
|
+
Plata.config.ENV = 'debug'
|
|
72
|
+
|
|
73
|
+
sql = getSqlite3()
|
|
74
|
+
aux = getSqlite3Aux()
|
|
70
75
|
})
|
|
71
76
|
|
|
72
77
|
it('Insert', async () => {
|
|
@@ -94,7 +99,15 @@ describe('PlataSql', () => {
|
|
|
94
99
|
assert.strictEqual(depois.errorID, undefined)
|
|
95
100
|
assert.strictEqual(depois.errors, undefined)
|
|
96
101
|
|
|
97
|
-
|
|
102
|
+
// Add TB_JOINTEST2 in insert itens
|
|
103
|
+
const i = insert.map(r => {
|
|
104
|
+
return {
|
|
105
|
+
...r,
|
|
106
|
+
TB_JOINTEST2: []
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
const esperado = [...antes.itens, ...i]
|
|
98
111
|
|
|
99
112
|
for (let i = 0; i < depois.itens.length; i++) {
|
|
100
113
|
assert.deepStrictEqual(depois.itens[i], esperado[i])
|
|
@@ -167,7 +180,7 @@ describe('PlataSql', () => {
|
|
|
167
180
|
assert.strictEqual(depois.itens.length, antes.itens.length + 1)
|
|
168
181
|
})
|
|
169
182
|
|
|
170
|
-
it('Transaction
|
|
183
|
+
it('Transaction Not Okay', async () => {
|
|
171
184
|
const tabela = 'TB_TRANSACTION_NOKAY'
|
|
172
185
|
|
|
173
186
|
const antes = await sql.select(tabela, modelSql).build(
|
|
@@ -202,6 +215,44 @@ describe('PlataSql', () => {
|
|
|
202
215
|
assert.strictEqual(depois.itens.length, antes.itens.length)
|
|
203
216
|
})
|
|
204
217
|
|
|
218
|
+
it('Join Found', async () => {
|
|
219
|
+
const table1 = 'TB_JOINTEST1'
|
|
220
|
+
const table2 = 'TB_JOINTEST2'
|
|
221
|
+
|
|
222
|
+
const selectJoin = await sql.select(table1, modelSql).build(
|
|
223
|
+
s => s
|
|
224
|
+
.limit(1)
|
|
225
|
+
.includeOne(table2, 'LEFT JOIN', j => j.on(`${table1}.PK_ID`, '=', `${table2}.FK_JOIN`))
|
|
226
|
+
).toListAsync()
|
|
227
|
+
|
|
228
|
+
assert.strictEqual(selectJoin.errorID, undefined)
|
|
229
|
+
assert.strictEqual(selectJoin.errors, undefined)
|
|
230
|
+
|
|
231
|
+
assert.deepStrictEqual(selectJoin.itens[0], {
|
|
232
|
+
PK_ID: 1,
|
|
233
|
+
VL_PRECO: 1,
|
|
234
|
+
DS_OBS: 'A',
|
|
235
|
+
TB_JOINTEST2: [{
|
|
236
|
+
PK_ID: 1,
|
|
237
|
+
FK_JOIN: 1
|
|
238
|
+
}]
|
|
239
|
+
})
|
|
240
|
+
})
|
|
241
|
+
|
|
242
|
+
it('Join Not Found', async () => {
|
|
243
|
+
const table1 = 'TB_JOINTEST1'
|
|
244
|
+
const table2 = 'TB_JOINTEST2'
|
|
245
|
+
|
|
246
|
+
const selectJoin = await sql.select(table1, modelSql).build(
|
|
247
|
+
s => s
|
|
248
|
+
.limit(1)
|
|
249
|
+
.includeOne(table2, 'LEFT JOIN', j => j.onVal(`${table2}.PK_ID`, '=', 2))
|
|
250
|
+
).toListAsync()
|
|
251
|
+
|
|
252
|
+
assert.strictEqual(selectJoin.errorID, undefined)
|
|
253
|
+
assert.notStrictEqual(selectJoin.errors, undefined)
|
|
254
|
+
})
|
|
255
|
+
|
|
205
256
|
it('MultiBanco', async () => {
|
|
206
257
|
const tabela = 'TB_MULTIBANCO'
|
|
207
258
|
|
|
@@ -264,4 +315,4 @@ describe('PlataSql', () => {
|
|
|
264
315
|
assert.strictEqual(sqlError, undefined)
|
|
265
316
|
assert.strictEqual(auxError, undefined)
|
|
266
317
|
})
|
|
267
|
-
})
|
|
318
|
+
})
|