@m2k-5f/pgtx 2.7.1 → 2.7.3
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 +48 -31
- package/dist/batch.d.ts +4 -1
- package/dist/batch.d.ts.map +1 -1
- package/dist/batch.js +14 -7
- package/dist/clauses/fragment.clause.js +1 -1
- package/dist/connection.d.ts +17 -16
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +182 -166
- package/dist/error.d.ts +4 -1
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +15 -7
- package/dist/pool.d.ts +1 -1
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +5 -3
- package/dist/protocol/connection-request-writer.d.ts +24 -11
- package/dist/protocol/connection-request-writer.d.ts.map +1 -1
- package/dist/protocol/connection-request-writer.js +217 -47
- package/dist/protocol/connection-response-reader.d.ts +5 -15
- package/dist/protocol/connection-response-reader.d.ts.map +1 -1
- package/dist/protocol/connection-response-reader.js +116 -76
- package/dist/protocol/constants.d.ts +37 -30
- package/dist/protocol/constants.d.ts.map +1 -1
- package/dist/protocol/constants.js +35 -29
- package/dist/protocol/socket-authorization.d.ts.map +1 -1
- package/dist/protocol/socket-authorization.js +7 -7
- package/dist/protocol/socket-connector.d.ts +4 -4
- package/dist/protocol/socket-connector.d.ts.map +1 -1
- package/dist/protocol/socket-connector.js +2 -2
- package/dist/query.d.ts +16 -20
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +15 -22
- package/dist/queue.d.ts +1 -0
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +1 -0
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/template-compiler.d.ts +5 -2
- package/dist/utils/template-compiler.d.ts.map +1 -1
- package/dist/utils/template-compiler.js +4 -1
- package/dist/utils.d.ts +8 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +73 -0
- package/package.json +2 -2
package/dist/query.d.ts
CHANGED
|
@@ -1,41 +1,37 @@
|
|
|
1
|
-
import { Future } from "fluent-future";
|
|
1
|
+
import { Future, Resolvers } from "fluent-future";
|
|
2
2
|
import { ColumnDescription, QueryText, Row, StatementName } from "./types";
|
|
3
3
|
import { PostgresError } from "./error";
|
|
4
4
|
export declare abstract class Query {
|
|
5
5
|
statement: StatementName;
|
|
6
6
|
text: QueryText;
|
|
7
|
-
args:
|
|
7
|
+
args: unknown[];
|
|
8
8
|
protected _timer?: NodeJS.Timeout;
|
|
9
|
-
constructor(statement: StatementName, text: QueryText, args:
|
|
10
|
-
abstract
|
|
11
|
-
abstract
|
|
9
|
+
constructor(statement: StatementName, text: QueryText, args: unknown[], timeout: number);
|
|
10
|
+
abstract error(cause: PostgresError): void;
|
|
11
|
+
abstract complete(...args: any[]): void;
|
|
12
12
|
}
|
|
13
13
|
export declare class CollectQuery<T extends Row> extends Query {
|
|
14
14
|
columns: ColumnDescription[] | null;
|
|
15
|
-
|
|
16
|
-
private _resolve;
|
|
17
|
-
private _reject;
|
|
15
|
+
resolvers: Resolvers<Future<T[], PostgresError>>;
|
|
18
16
|
private _rows;
|
|
19
|
-
constructor(statement: StatementName, text: QueryText, args:
|
|
17
|
+
constructor(statement: StatementName, text: QueryText, args: unknown[], columns: ColumnDescription[] | null, timeout: number, resolvers: Resolvers<Future<T[], PostgresError>>);
|
|
20
18
|
push(value: T): void;
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
error(cause: PostgresError): void;
|
|
20
|
+
complete(): void;
|
|
23
21
|
}
|
|
24
22
|
export declare class ExecuteQuery extends Query {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
reject(cause: PostgresError): void;
|
|
30
|
-
resolve(): void;
|
|
23
|
+
resolvers: Resolvers<Future<void, PostgresError>>;
|
|
24
|
+
constructor(statement: StatementName, text: QueryText, args: unknown[], timeout: number, resolvers: Resolvers<Future<void, PostgresError>>);
|
|
25
|
+
error(cause: PostgresError): void;
|
|
26
|
+
complete(): void;
|
|
31
27
|
}
|
|
32
28
|
export declare class StreamQuery<T> extends Query {
|
|
33
29
|
controller: ReadableStreamDefaultController<T>;
|
|
34
30
|
columns: ColumnDescription[] | null;
|
|
35
|
-
constructor(statement: StatementName, text: QueryText, args:
|
|
31
|
+
constructor(statement: StatementName, text: QueryText, args: unknown[], controller: ReadableStreamDefaultController<T>, columns: ColumnDescription[] | null, timeout: number);
|
|
36
32
|
push(value: T): void;
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
error(cause: PostgresError): void;
|
|
34
|
+
complete(): void;
|
|
39
35
|
}
|
|
40
36
|
export type PostgresQuery = CollectQuery<any> | StreamQuery<any> | ExecuteQuery;
|
|
41
37
|
//# sourceMappingURL=query.d.ts.map
|
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAmB,aAAa,EAAE,MAAM,SAAS,CAAC;AAGzD,8BAAsB,KAAK;IAIZ,SAAS,EAAE,aAAa;IACxB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,OAAO,EAAE;IAL1B,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;gBAGtB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,OAAO,EAAE,EACtB,OAAO,EAAE,MAAM;IAQnB,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAE1C,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAC1C;AAGD,qBAAa,YAAY,CAAC,CAAC,SAAS,GAAG,CAAE,SAAQ,KAAK;IAOvC,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAEnC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAR3D,OAAO,CAAC,KAAK,CAAU;gBAGnB,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,OAAO,EAAE,EACR,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,EAC1C,OAAO,EAAE,MAAM,EACR,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAM3D,IAAI,CAAC,KAAK,EAAE,CAAC;IAKb,KAAK,CAAC,KAAK,EAAE,aAAa;IAM1B,QAAQ;CAIX;AAGD,qBAAa,YAAa,SAAQ,KAAK;IAMxB,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBAJxD,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,OAAO,EAAE,EACf,OAAO,EAAE,MAAM,EACR,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAK5D,KAAK,CAAC,KAAK,EAAE,aAAa;IAM1B,QAAQ;CAIX;AAGD,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,KAAK;IAK1B,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC;IAC9C,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;gBAJ1C,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,OAAO,EAAE,EACR,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC,EAC9C,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,EAC1C,OAAO,EAAE,MAAM;IAMnB,IAAI,CAAC,KAAK,EAAE,CAAC;IAOb,KAAK,CAAC,KAAK,EAAE,aAAa;IAM1B,QAAQ;CAMX;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,YAAY,CAAA"}
|
package/dist/query.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Future } from "fluent-future";
|
|
2
1
|
import { ErrQueryTimeout } from "./error";
|
|
3
2
|
export class Query {
|
|
4
3
|
constructor(statement, text, args, timeout) {
|
|
@@ -6,47 +5,41 @@ export class Query {
|
|
|
6
5
|
this.text = text;
|
|
7
6
|
this.args = args;
|
|
8
7
|
this._timer = setTimeout(() => {
|
|
9
|
-
this.
|
|
8
|
+
this.error(ErrQueryTimeout);
|
|
10
9
|
}, timeout);
|
|
11
10
|
}
|
|
12
11
|
}
|
|
13
12
|
export class CollectQuery extends Query {
|
|
14
|
-
constructor(statement, text, args, columns, timeout) {
|
|
13
|
+
constructor(statement, text, args, columns, timeout, resolvers) {
|
|
15
14
|
super(statement, text, args, timeout);
|
|
16
15
|
this.columns = columns;
|
|
16
|
+
this.resolvers = resolvers;
|
|
17
17
|
this._rows = [];
|
|
18
|
-
const { future, reject, resolve } = Future.withResolvers();
|
|
19
|
-
this.future = future;
|
|
20
|
-
this._resolve = resolve;
|
|
21
|
-
this._reject = reject;
|
|
22
18
|
}
|
|
23
19
|
push(value) {
|
|
24
20
|
this._rows.push(value);
|
|
25
21
|
}
|
|
26
|
-
|
|
22
|
+
error(cause) {
|
|
27
23
|
clearTimeout(this._timer);
|
|
28
|
-
this.
|
|
24
|
+
this.resolvers.reject(cause);
|
|
29
25
|
}
|
|
30
|
-
|
|
26
|
+
complete() {
|
|
31
27
|
clearTimeout(this._timer);
|
|
32
|
-
this.
|
|
28
|
+
this.resolvers.resolve(this._rows);
|
|
33
29
|
}
|
|
34
30
|
}
|
|
35
31
|
export class ExecuteQuery extends Query {
|
|
36
|
-
constructor(statement, text, args, timeout) {
|
|
32
|
+
constructor(statement, text, args, timeout, resolvers) {
|
|
37
33
|
super(statement, text, args, timeout);
|
|
38
|
-
|
|
39
|
-
this.future = future;
|
|
40
|
-
this._reject = reject;
|
|
41
|
-
this._resolve = resolve;
|
|
34
|
+
this.resolvers = resolvers;
|
|
42
35
|
}
|
|
43
|
-
|
|
36
|
+
error(cause) {
|
|
44
37
|
clearTimeout(this._timer);
|
|
45
|
-
this.
|
|
38
|
+
this.resolvers.reject(cause);
|
|
46
39
|
}
|
|
47
|
-
|
|
40
|
+
complete() {
|
|
48
41
|
clearTimeout(this._timer);
|
|
49
|
-
this.
|
|
42
|
+
this.resolvers.resolve();
|
|
50
43
|
}
|
|
51
44
|
}
|
|
52
45
|
export class StreamQuery extends Query {
|
|
@@ -61,11 +54,11 @@ export class StreamQuery extends Query {
|
|
|
61
54
|
}
|
|
62
55
|
catch { }
|
|
63
56
|
}
|
|
64
|
-
|
|
57
|
+
error(cause) {
|
|
65
58
|
clearTimeout(this._timer);
|
|
66
59
|
this.controller.error(cause);
|
|
67
60
|
}
|
|
68
|
-
|
|
61
|
+
complete() {
|
|
69
62
|
clearTimeout(this._timer);
|
|
70
63
|
try {
|
|
71
64
|
this.controller.close();
|
package/dist/queue.d.ts
CHANGED
package/dist/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK,CAAC,CAAC;IAChB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAI;IAEpB,IAAI;IAUJ,IAAI,OAAO,MAEV;IAED,IAAI,IAAI,MAA+C;IAGvD,IAAI,KAAK,MAKR;IAGD,IAAI,CAAC,IAAI,EAAE,CAAC;IAIZ,IAAI,IAAI,WAEP;IAGD,IAAI,OAAO,YAEV;IAGD,IAAI,MAAM,YAA+C;
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK,CAAC,CAAC;IAChB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAI;IAEpB,IAAI;IAUJ,IAAI,OAAO,MAEV;IAED,IAAI,IAAI,MAA+C;IAGvD,IAAI,KAAK,MAKR;IAGD,IAAI,CAAC,IAAI,EAAE,CAAC;IAIZ,IAAI,IAAI,WAEP;IAGD,IAAI,OAAO,YAEV;IAGD,IAAI,MAAM,YAA+C;IAEzD,IAAI,QAAQ,QAA4C;CAC3D;AAID,qBAAa,SAAS,CAAC,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAE9B,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,KAAK,CAAI;gBAEL,iBAAiB,SAAQ;IAOrC,IAAI;IAMJ,IAAI,OAAO,MAEV;IAED,IAAI,IAAI,MAEP;IAED,IAAI,KAAK,MAIR;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;IAMZ,IAAI,IAAI,WAEP;IAED,IAAI,OAAO,YAEV;IAED,IAAI,MAAM,YAET;IAED,IAAI,MAAM,YAET;CACJ"}
|
package/dist/queue.js
CHANGED
|
@@ -30,6 +30,7 @@ export class Queue {
|
|
|
30
30
|
return this._pointer < this._queue.length;
|
|
31
31
|
}
|
|
32
32
|
get isFree() { return this._pointer >= this._queue.length; }
|
|
33
|
+
get residual() { return this._queue.slice(this._pointer); }
|
|
33
34
|
}
|
|
34
35
|
export class RingQueue {
|
|
35
36
|
constructor(requestedCapacity = 20000) {
|
package/dist/types.d.ts
CHANGED
|
@@ -49,9 +49,11 @@ export type ConnectionConfig = {
|
|
|
49
49
|
export type StatementName = Branded<string, 'StatementName'>;
|
|
50
50
|
export type QueryText = Branded<string, 'QueryText'>;
|
|
51
51
|
export type ChannelName = Branded<string, "ChannelName">;
|
|
52
|
-
export type
|
|
52
|
+
export type ParameterDescription = DataTypeOid[];
|
|
53
|
+
export type StatementMeta = {
|
|
53
54
|
statement: StatementName;
|
|
54
55
|
columns: ColumnDescription[];
|
|
56
|
+
parameters: ParameterDescription;
|
|
55
57
|
};
|
|
56
58
|
export type PoolPartialConfig = ConnectionPartialConfig & {
|
|
57
59
|
max?: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG;IAAC,OAAO,EAAE,KAAK,CAAA;CAAC,CAAA;AAEpD,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;CAC3B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;CACf,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,WAAW,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEtD,KAAK,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;AAErD,MAAM,MAAM,uBAAuB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,WAAW,CAAC;IACjE,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAGD,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,WAAW,CAAA;IAC/D,GAAG,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAGD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;AAE5D,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AAEpD,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAExD,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function compileSqlTemplate(templates: TemplateStringsArray, args: unknown[], argOffset?: number):
|
|
1
|
+
import { QueryText } from "../types";
|
|
2
|
+
export declare function compileSqlTemplate(templates: TemplateStringsArray, args: unknown[], argOffset?: number): {
|
|
3
|
+
args: (string | null)[];
|
|
4
|
+
text: QueryText;
|
|
5
|
+
};
|
|
3
6
|
//# sourceMappingURL=template-compiler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-compiler.d.ts","sourceRoot":"","sources":["../../src/utils/template-compiler.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"template-compiler.d.ts","sourceRoot":"","sources":["../../src/utils/template-compiler.ts"],"names":[],"mappings":"AACA,OAAO,EAA0C,SAAS,EAAE,MAAM,UAAU,CAAA;AAI5E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,oBAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,SAAI;;UAG5B,SAAS;EAqC9E"}
|
|
@@ -27,7 +27,10 @@ export function compileSqlTemplate(templates, args, argOffset = 0) {
|
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
29
|
!args.some(value => value instanceof Clause) && cache.set(templates, query.text);
|
|
30
|
-
return {
|
|
30
|
+
return {
|
|
31
|
+
args: query.args.map(prepareValue),
|
|
32
|
+
text: query.text
|
|
33
|
+
};
|
|
31
34
|
}
|
|
32
35
|
const prepareValue = (value) => {
|
|
33
36
|
if (value === null || value === undefined) {
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { QueryText } from "./types";
|
|
2
|
+
export declare function compileSqlTemplate(templates: TemplateStringsArray, args: unknown[], argOffset?: number): {
|
|
3
|
+
args: unknown[];
|
|
4
|
+
text: QueryText;
|
|
5
|
+
};
|
|
6
|
+
export declare function prepareObject(obj: any): string;
|
|
7
|
+
export declare function prepareValue(value: unknown): string | null;
|
|
8
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAA0C,SAAS,EAAE,MAAM,SAAS,CAAA;AAI3E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,oBAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,SAAI;;UAGpD,SAAS;EAkCtD;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAM9C;AAGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA0C1D"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Clause } from "./clauses/abstract.clause";
|
|
2
|
+
const cache = new WeakMap();
|
|
3
|
+
export function compileSqlTemplate(templates, args, argOffset = 0) {
|
|
4
|
+
const cached = cache.get(templates);
|
|
5
|
+
if (cached)
|
|
6
|
+
return { args, text: cached };
|
|
7
|
+
const templateLength = templates.length;
|
|
8
|
+
const query = {
|
|
9
|
+
text: '',
|
|
10
|
+
args: [],
|
|
11
|
+
};
|
|
12
|
+
templates.forEach((template, index) => {
|
|
13
|
+
query.text += template;
|
|
14
|
+
if (index === templateLength - 1)
|
|
15
|
+
return;
|
|
16
|
+
const value = args[index];
|
|
17
|
+
if (value instanceof Clause) {
|
|
18
|
+
value.mapIntoQuery(query);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
if (value === undefined) {
|
|
22
|
+
throw new TypeError(`Query parameter at position ${query.args.length + argOffset + 1} is undefined.
|
|
23
|
+
Use null if you want NULL in SQL, or ensure the value is defined.`);
|
|
24
|
+
}
|
|
25
|
+
query.args.push(value);
|
|
26
|
+
query.text += `$${query.args.length + argOffset}`;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
!args.some(value => value instanceof Clause) && cache.set(templates, query.text);
|
|
30
|
+
return query;
|
|
31
|
+
}
|
|
32
|
+
export function prepareObject(obj) {
|
|
33
|
+
if (obj && typeof obj.toPG === "function") {
|
|
34
|
+
return JSON.stringify(obj.toPG());
|
|
35
|
+
}
|
|
36
|
+
return JSON.stringify(obj);
|
|
37
|
+
}
|
|
38
|
+
export function prepareValue(value) {
|
|
39
|
+
if (value === null || value === undefined) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
if (typeof value === "object") {
|
|
43
|
+
if (value instanceof Date) {
|
|
44
|
+
return value.toISOString();
|
|
45
|
+
}
|
|
46
|
+
if (Buffer.isBuffer(value) || value instanceof Uint8Array) {
|
|
47
|
+
return "\\x" + Buffer
|
|
48
|
+
.from(value.buffer, value.byteOffset, value.byteLength)
|
|
49
|
+
.toString("hex");
|
|
50
|
+
}
|
|
51
|
+
if (Array.isArray(value)) {
|
|
52
|
+
const elements = value.map(el => {
|
|
53
|
+
if (el === null || el === undefined)
|
|
54
|
+
return "NULL";
|
|
55
|
+
if (typeof el === "boolean")
|
|
56
|
+
return el ? "true" : "false";
|
|
57
|
+
if (typeof el === "object") {
|
|
58
|
+
const res = prepareValue(el);
|
|
59
|
+
return `"${res?.replace(/"/g, '\\"')}"`;
|
|
60
|
+
}
|
|
61
|
+
if (typeof el === "string") {
|
|
62
|
+
return `"${el
|
|
63
|
+
.replace(/\\/g, "\\\\")
|
|
64
|
+
.replace(/"/g, '\\"')}"`;
|
|
65
|
+
}
|
|
66
|
+
return String(el);
|
|
67
|
+
});
|
|
68
|
+
return `{${elements.join(",")}}`;
|
|
69
|
+
}
|
|
70
|
+
return prepareObject(value);
|
|
71
|
+
}
|
|
72
|
+
return String(value);
|
|
73
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@m2k-5f/pgtx",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Blazing-fast PostgreSQL driver with pipeline support.",
|
|
6
6
|
"files": [
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"prepublishOnly": "npm run build",
|
|
13
13
|
"testGitHub": "node --import tsx --test $(find tests -name '*.test.ts')",
|
|
14
|
-
"test": "node --import tsx --test ./tests/*.test.ts",
|
|
14
|
+
"test": "node --env-file=.env --import tsx --test ./tests/*.test.ts",
|
|
15
15
|
"benchmark": "npx tsx benchmark.ts"
|
|
16
16
|
},
|
|
17
17
|
"repository": {
|