@slonik/sql-tag 43.0.1 → 43.0.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/dist/factories/createSqlTag.d.ts +2 -34
- package/dist/factories/createSqlTag.d.ts.map +1 -1
- package/dist/factories/createSqlTag.js.map +1 -1
- package/dist/factories/createSqlTag.test/array.test.js +1 -0
- package/dist/factories/createSqlTag.test/array.test.js.map +1 -1
- package/dist/factories/createSqlTag.test/unnest.test.js +1 -6
- package/dist/factories/createSqlTag.test/unnest.test.js.map +1 -1
- package/dist/factories/createSqlTokenSqlFragment.d.ts +2 -2
- package/dist/factories/createSqlTokenSqlFragment.d.ts.map +1 -1
- package/dist/factories/createSqlTokenSqlFragment.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/sqlFragmentFactories/createArraySqlFragment.d.ts +2 -2
- package/dist/sqlFragmentFactories/createArraySqlFragment.d.ts.map +1 -1
- package/dist/sqlFragmentFactories/createArraySqlFragment.js +2 -0
- package/dist/sqlFragmentFactories/createArraySqlFragment.js.map +1 -1
- package/dist/sqlFragmentFactories/createBinarySqlFragment.d.ts +2 -2
- package/dist/sqlFragmentFactories/createBinarySqlFragment.d.ts.map +1 -1
- package/dist/sqlFragmentFactories/createBinarySqlFragment.js +2 -0
- package/dist/sqlFragmentFactories/createBinarySqlFragment.js.map +1 -1
- package/dist/sqlFragmentFactories/createDateSqlFragment.d.ts +2 -2
- package/dist/sqlFragmentFactories/createDateSqlFragment.d.ts.map +1 -1
- package/dist/sqlFragmentFactories/createDateSqlFragment.js +2 -0
- package/dist/sqlFragmentFactories/createDateSqlFragment.js.map +1 -1
- package/dist/sqlFragmentFactories/createFragmentSqlFragment.d.ts +2 -2
- package/dist/sqlFragmentFactories/createFragmentSqlFragment.d.ts.map +1 -1
- package/dist/sqlFragmentFactories/createFragmentSqlFragment.js +2 -0
- package/dist/sqlFragmentFactories/createFragmentSqlFragment.js.map +1 -1
- package/dist/sqlFragmentFactories/createIdentifierSqlFragment.d.ts +2 -2
- package/dist/sqlFragmentFactories/createIdentifierSqlFragment.d.ts.map +1 -1
- package/dist/sqlFragmentFactories/createIdentifierSqlFragment.js +2 -0
- package/dist/sqlFragmentFactories/createIdentifierSqlFragment.js.map +1 -1
- package/dist/sqlFragmentFactories/createIntervalSqlFragment.d.ts +2 -2
- package/dist/sqlFragmentFactories/createIntervalSqlFragment.d.ts.map +1 -1
- package/dist/sqlFragmentFactories/createIntervalSqlFragment.js +2 -0
- package/dist/sqlFragmentFactories/createIntervalSqlFragment.js.map +1 -1
- package/dist/sqlFragmentFactories/createJsonSqlFragment.d.ts +2 -2
- package/dist/sqlFragmentFactories/createJsonSqlFragment.d.ts.map +1 -1
- package/dist/sqlFragmentFactories/createJsonSqlFragment.js +2 -0
- package/dist/sqlFragmentFactories/createJsonSqlFragment.js.map +1 -1
- package/dist/sqlFragmentFactories/createListSqlFragment.d.ts +2 -2
- package/dist/sqlFragmentFactories/createListSqlFragment.d.ts.map +1 -1
- package/dist/sqlFragmentFactories/createListSqlFragment.js +2 -0
- package/dist/sqlFragmentFactories/createListSqlFragment.js.map +1 -1
- package/dist/sqlFragmentFactories/createQuerySqlFragment.d.ts +2 -2
- package/dist/sqlFragmentFactories/createQuerySqlFragment.d.ts.map +1 -1
- package/dist/sqlFragmentFactories/createQuerySqlFragment.js +2 -0
- package/dist/sqlFragmentFactories/createQuerySqlFragment.js.map +1 -1
- package/dist/sqlFragmentFactories/createTimestampSqlFragment.d.ts +2 -2
- package/dist/sqlFragmentFactories/createTimestampSqlFragment.d.ts.map +1 -1
- package/dist/sqlFragmentFactories/createTimestampSqlFragment.js +2 -0
- package/dist/sqlFragmentFactories/createTimestampSqlFragment.js.map +1 -1
- package/dist/sqlFragmentFactories/createUnnestSqlFragment.d.ts +2 -2
- package/dist/sqlFragmentFactories/createUnnestSqlFragment.d.ts.map +1 -1
- package/dist/sqlFragmentFactories/createUnnestSqlFragment.js +2 -0
- package/dist/sqlFragmentFactories/createUnnestSqlFragment.js.map +1 -1
- package/dist/types.d.ts +12 -11
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/factories/createSqlTag.test/array.test.ts +1 -0
- package/src/factories/createSqlTag.test/unnest.test.ts +1 -6
- package/src/factories/createSqlTag.ts +17 -46
- package/src/factories/createSqlTokenSqlFragment.ts +2 -2
- package/src/index.ts +1 -1
- package/src/sqlFragmentFactories/createArraySqlFragment.ts +4 -2
- package/src/sqlFragmentFactories/createBinarySqlFragment.ts +4 -2
- package/src/sqlFragmentFactories/createDateSqlFragment.ts +4 -2
- package/src/sqlFragmentFactories/createFragmentSqlFragment.ts +4 -2
- package/src/sqlFragmentFactories/createIdentifierSqlFragment.ts +4 -2
- package/src/sqlFragmentFactories/createIntervalSqlFragment.ts +4 -2
- package/src/sqlFragmentFactories/createJsonSqlFragment.ts +4 -2
- package/src/sqlFragmentFactories/createListSqlFragment.ts +4 -2
- package/src/sqlFragmentFactories/createQuerySqlFragment.ts +4 -2
- package/src/sqlFragmentFactories/createTimestampSqlFragment.ts +4 -2
- package/src/sqlFragmentFactories/createUnnestSqlFragment.ts +4 -2
- package/src/types.ts +17 -11
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createUnnestSqlFragment = void 0;
|
|
4
|
+
const tokens_1 = require("../tokens");
|
|
4
5
|
const countArrayDimensions_1 = require("../utilities/countArrayDimensions");
|
|
5
6
|
const escapeIdentifier_1 = require("../utilities/escapeIdentifier");
|
|
6
7
|
const formatSlonikPlaceholder_1 = require("../utilities/formatSlonikPlaceholder");
|
|
@@ -74,6 +75,7 @@ const createUnnestSqlFragment = (token, greatestParameterPosition) => {
|
|
|
74
75
|
const sql = 'unnest(' + unnestSqlTokens.join(', ') + ')';
|
|
75
76
|
return {
|
|
76
77
|
sql,
|
|
78
|
+
type: tokens_1.FragmentToken,
|
|
77
79
|
values,
|
|
78
80
|
};
|
|
79
81
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createUnnestSqlFragment.js","sourceRoot":"","sources":["../../src/sqlFragmentFactories/createUnnestSqlFragment.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"createUnnestSqlFragment.js","sourceRoot":"","sources":["../../src/sqlFragmentFactories/createUnnestSqlFragment.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -15,18 +15,19 @@ export type IntervalInput = {
|
|
|
15
15
|
weeks?: number;
|
|
16
16
|
years?: number;
|
|
17
17
|
};
|
|
18
|
-
export type
|
|
18
|
+
export type SqlFragmentToken = {
|
|
19
19
|
readonly sql: string;
|
|
20
|
+
readonly type: typeof tokens.FragmentToken;
|
|
20
21
|
readonly values: readonly PrimitiveValueExpression[];
|
|
21
22
|
};
|
|
22
|
-
export type ValueExpression = PrimitiveValueExpression |
|
|
23
|
+
export type ValueExpression = PrimitiveValueExpression | SqlFragmentToken | SqlToken;
|
|
23
24
|
/**
|
|
24
25
|
* "string" type covers all type name identifiers – the literal values are added only to assist developer
|
|
25
26
|
* experience with auto suggestions for commonly used type name identifiers.
|
|
26
27
|
*/
|
|
27
28
|
export type TypeNameIdentifier = string | 'bool' | 'bytea' | 'float4' | 'float8' | 'int2' | 'int4' | 'int8' | 'json' | 'text' | 'timestamptz' | 'uuid';
|
|
28
29
|
export type ArraySqlToken = {
|
|
29
|
-
readonly memberType:
|
|
30
|
+
readonly memberType: SqlFragmentToken | TypeNameIdentifier;
|
|
30
31
|
readonly type: typeof tokens.ArrayToken;
|
|
31
32
|
readonly values: readonly PrimitiveValueExpression[];
|
|
32
33
|
};
|
|
@@ -52,7 +53,7 @@ export type IntervalSqlToken = {
|
|
|
52
53
|
readonly type: typeof tokens.IntervalToken;
|
|
53
54
|
};
|
|
54
55
|
export type ListSqlToken = {
|
|
55
|
-
readonly glue:
|
|
56
|
+
readonly glue: SqlFragmentToken;
|
|
56
57
|
readonly members: readonly ValueExpression[];
|
|
57
58
|
readonly type: typeof tokens.ListToken;
|
|
58
59
|
};
|
|
@@ -75,26 +76,26 @@ export type TimestampSqlToken = {
|
|
|
75
76
|
readonly type: typeof tokens.TimestampToken;
|
|
76
77
|
};
|
|
77
78
|
export type UnnestSqlToken = {
|
|
78
|
-
readonly columnTypes: Array<[...string[], TypeNameIdentifier]> | Array<
|
|
79
|
+
readonly columnTypes: Array<[...string[], TypeNameIdentifier]> | Array<SqlFragmentToken | TypeNameIdentifier>;
|
|
79
80
|
readonly tuples: ReadonlyArray<readonly ValueExpression[]>;
|
|
80
81
|
readonly type: typeof tokens.UnnestToken;
|
|
81
82
|
};
|
|
82
83
|
export type SqlToken = ArraySqlToken | BinarySqlToken | DateSqlToken | FragmentSqlToken | IdentifierSqlToken | IntervalSqlToken | JsonBinarySqlToken | JsonSqlToken | ListSqlToken | QuerySqlToken | TimestampSqlToken | UnnestSqlToken;
|
|
83
|
-
export type SqlTag<Z extends Record<string, ZodTypeAny>> = {
|
|
84
|
-
array: (values: readonly PrimitiveValueExpression[], memberType:
|
|
84
|
+
export type SqlTag<Z extends Record<string, ZodTypeAny> = Record<string, ZodTypeAny>> = {
|
|
85
|
+
array: (values: readonly PrimitiveValueExpression[], memberType: SqlFragmentToken | TypeNameIdentifier) => ArraySqlToken;
|
|
85
86
|
binary: (data: Buffer) => BinarySqlToken;
|
|
86
87
|
date: (date: Date) => DateSqlToken;
|
|
87
|
-
fragment: (template: TemplateStringsArray, ...values: ValueExpression[]) =>
|
|
88
|
+
fragment: (template: TemplateStringsArray, ...values: ValueExpression[]) => SqlFragmentToken;
|
|
88
89
|
identifier: (names: readonly string[]) => IdentifierSqlToken;
|
|
89
90
|
interval: (interval: IntervalInput) => IntervalSqlToken;
|
|
90
|
-
join: (members: readonly ValueExpression[], glue:
|
|
91
|
+
join: (members: readonly ValueExpression[], glue: SqlFragmentToken) => ListSqlToken;
|
|
91
92
|
json: (value: SerializableValue) => JsonSqlToken;
|
|
92
93
|
jsonb: (value: SerializableValue) => JsonBinarySqlToken;
|
|
93
|
-
literalValue: (value: string) =>
|
|
94
|
+
literalValue: (value: string) => SqlFragmentToken;
|
|
94
95
|
timestamp: (date: Date) => TimestampSqlToken;
|
|
95
96
|
type: <Y extends ZodTypeAny>(parser: Y) => (template: TemplateStringsArray, ...values: ValueExpression[]) => QuerySqlToken<Y>;
|
|
96
97
|
typeAlias: <K extends keyof Z>(typeAlias: K) => (template: TemplateStringsArray, ...values: ValueExpression[]) => QuerySqlToken<Z[K]>;
|
|
97
|
-
unnest: (tuples: ReadonlyArray<readonly any[]>, columnTypes: Array<[...string[], TypeNameIdentifier]> | Array<
|
|
98
|
+
unnest: (tuples: ReadonlyArray<readonly any[]>, columnTypes: Array<[...string[], TypeNameIdentifier]> | Array<SqlFragmentToken | TypeNameIdentifier>) => UnnestSqlToken;
|
|
98
99
|
unsafe: (template: TemplateStringsArray, ...values: ValueExpression[]) => QuerySqlToken;
|
|
99
100
|
};
|
|
100
101
|
//# sourceMappingURL=types.d.ts.map
|
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,KAAK,KAAK,MAAM,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC;AAEtC,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GACzB,iBAAiB,EAAE,GACnB,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,iBAAiB,EAAE,GAC5B;IACE,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAC;CAClC,GACD,IAAI,GACJ,SAAS,CAAC;AAEd,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
]
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@slonik/errors": "^43.0.
|
|
20
|
-
"@slonik/types": "^43.0.
|
|
19
|
+
"@slonik/errors": "^43.0.3",
|
|
20
|
+
"@slonik/types": "^43.0.3",
|
|
21
21
|
"roarr": "^7.21.1",
|
|
22
22
|
"safe-stable-stringify": "^2.4.3",
|
|
23
23
|
"serialize-error": "^8.0.0"
|
|
@@ -83,5 +83,5 @@
|
|
|
83
83
|
"test": "nyc ava --verbose --serial"
|
|
84
84
|
},
|
|
85
85
|
"types": "./dist/index.d.ts",
|
|
86
|
-
"version": "43.0.
|
|
86
|
+
"version": "43.0.3"
|
|
87
87
|
}
|
|
@@ -97,6 +97,7 @@ test('throws if array member is not a primitive value expression', (t) => {
|
|
|
97
97
|
|
|
98
98
|
test('throws if memberType is not a string or SqlToken of different type than "SLONIK_TOKEN_FRAGMENT"', (t) => {
|
|
99
99
|
const error = t.throws(() => {
|
|
100
|
+
// @ts-expect-error - intentional
|
|
100
101
|
sql.fragment`SELECT ${sql.array([1, 2, 3], sql.identifier(['int']))}`;
|
|
101
102
|
});
|
|
102
103
|
|
|
@@ -123,12 +123,7 @@ test('throws if tuple member is not a primitive value expression', (t) => {
|
|
|
123
123
|
const error = t.throws(() => {
|
|
124
124
|
sql.fragment`SELECT * FROM ${sql.unnest(
|
|
125
125
|
[
|
|
126
|
-
[
|
|
127
|
-
// @ts-expect-error Intentional invalid value.
|
|
128
|
-
() => {},
|
|
129
|
-
2,
|
|
130
|
-
3,
|
|
131
|
-
],
|
|
126
|
+
[() => {}, 2, 3],
|
|
132
127
|
[4, 5],
|
|
133
128
|
],
|
|
134
129
|
['int4', 'int4', 'int4'],
|
|
@@ -14,23 +14,8 @@ import {
|
|
|
14
14
|
UnnestToken,
|
|
15
15
|
} from '../tokens';
|
|
16
16
|
import {
|
|
17
|
-
type ArraySqlToken,
|
|
18
|
-
type BinarySqlToken,
|
|
19
|
-
type DateSqlToken,
|
|
20
|
-
type FragmentSqlToken,
|
|
21
|
-
type IdentifierSqlToken,
|
|
22
|
-
type IntervalInput,
|
|
23
|
-
type IntervalSqlToken,
|
|
24
|
-
type JsonBinarySqlToken,
|
|
25
|
-
type JsonSqlToken,
|
|
26
|
-
type ListSqlToken,
|
|
27
17
|
type PrimitiveValueExpression,
|
|
28
|
-
type
|
|
29
|
-
type SqlFragment,
|
|
30
|
-
type SqlToken as SqlTokenType,
|
|
31
|
-
type TimestampSqlToken,
|
|
32
|
-
type TypeNameIdentifier,
|
|
33
|
-
type UnnestSqlToken,
|
|
18
|
+
type SqlTag,
|
|
34
19
|
type ValueExpression,
|
|
35
20
|
} from '../types';
|
|
36
21
|
import { escapeLiteralValue } from '../utilities/escapeLiteralValue';
|
|
@@ -121,89 +106,80 @@ export const createSqlTag = <
|
|
|
121
106
|
configuration: {
|
|
122
107
|
typeAliases?: Z;
|
|
123
108
|
} = {},
|
|
124
|
-
) => {
|
|
109
|
+
): SqlTag<Z> => {
|
|
125
110
|
const typeAliases = configuration.typeAliases;
|
|
126
111
|
|
|
127
112
|
return {
|
|
128
|
-
array: (
|
|
129
|
-
values: readonly PrimitiveValueExpression[],
|
|
130
|
-
memberType: SqlTokenType | TypeNameIdentifier,
|
|
131
|
-
): ArraySqlToken => {
|
|
113
|
+
array: (values, memberType) => {
|
|
132
114
|
return Object.freeze({
|
|
133
115
|
memberType,
|
|
134
116
|
type: ArrayToken,
|
|
135
117
|
values,
|
|
136
118
|
});
|
|
137
119
|
},
|
|
138
|
-
binary: (data
|
|
120
|
+
binary: (data) => {
|
|
139
121
|
return Object.freeze({
|
|
140
122
|
data,
|
|
141
123
|
type: BinaryToken,
|
|
142
124
|
});
|
|
143
125
|
},
|
|
144
|
-
date: (date
|
|
126
|
+
date: (date) => {
|
|
145
127
|
return Object.freeze({
|
|
146
128
|
date,
|
|
147
129
|
type: DateToken,
|
|
148
130
|
});
|
|
149
131
|
},
|
|
150
|
-
fragment: (
|
|
151
|
-
parts: readonly string[],
|
|
152
|
-
...args: readonly ValueExpression[]
|
|
153
|
-
): FragmentSqlToken => {
|
|
132
|
+
fragment: (parts, ...args) => {
|
|
154
133
|
return Object.freeze({
|
|
155
134
|
...createFragment(parts, args),
|
|
156
135
|
type: FragmentToken,
|
|
157
136
|
});
|
|
158
137
|
},
|
|
159
|
-
identifier: (names
|
|
138
|
+
identifier: (names) => {
|
|
160
139
|
return Object.freeze({
|
|
161
140
|
names,
|
|
162
141
|
type: IdentifierToken,
|
|
163
142
|
});
|
|
164
143
|
},
|
|
165
|
-
interval: (interval
|
|
144
|
+
interval: (interval) => {
|
|
166
145
|
return Object.freeze({
|
|
167
146
|
interval,
|
|
168
147
|
type: IntervalToken,
|
|
169
148
|
});
|
|
170
149
|
},
|
|
171
|
-
join: (
|
|
172
|
-
members: readonly ValueExpression[],
|
|
173
|
-
glue: SqlFragment,
|
|
174
|
-
): ListSqlToken => {
|
|
150
|
+
join: (members, glue) => {
|
|
175
151
|
return Object.freeze({
|
|
176
152
|
glue,
|
|
177
153
|
members,
|
|
178
154
|
type: ListToken,
|
|
179
155
|
});
|
|
180
156
|
},
|
|
181
|
-
json: (value
|
|
157
|
+
json: (value) => {
|
|
182
158
|
return Object.freeze({
|
|
183
159
|
type: JsonToken,
|
|
184
160
|
value,
|
|
185
161
|
});
|
|
186
162
|
},
|
|
187
|
-
jsonb: (value
|
|
163
|
+
jsonb: (value) => {
|
|
188
164
|
return Object.freeze({
|
|
189
165
|
type: JsonBinaryToken,
|
|
190
166
|
value,
|
|
191
167
|
});
|
|
192
168
|
},
|
|
193
|
-
literalValue: (value
|
|
169
|
+
literalValue: (value) => {
|
|
194
170
|
return Object.freeze({
|
|
195
171
|
sql: escapeLiteralValue(value),
|
|
196
172
|
type: FragmentToken,
|
|
197
173
|
values: [],
|
|
198
174
|
});
|
|
199
175
|
},
|
|
200
|
-
timestamp: (date
|
|
176
|
+
timestamp: (date) => {
|
|
201
177
|
return Object.freeze({
|
|
202
178
|
date,
|
|
203
179
|
type: TimestampToken,
|
|
204
180
|
});
|
|
205
181
|
},
|
|
206
|
-
type:
|
|
182
|
+
type: (parser) => {
|
|
207
183
|
return (
|
|
208
184
|
parts: readonly string[],
|
|
209
185
|
...args: readonly ValueExpression[]
|
|
@@ -215,7 +191,7 @@ export const createSqlTag = <
|
|
|
215
191
|
});
|
|
216
192
|
};
|
|
217
193
|
},
|
|
218
|
-
typeAlias:
|
|
194
|
+
typeAlias: (parserAlias) => {
|
|
219
195
|
if (!typeAliases?.[parserAlias]) {
|
|
220
196
|
throw new Error(
|
|
221
197
|
'Type alias "' + String(parserAlias) + '" does not exist.',
|
|
@@ -233,19 +209,14 @@ export const createSqlTag = <
|
|
|
233
209
|
});
|
|
234
210
|
};
|
|
235
211
|
},
|
|
236
|
-
unnest: (
|
|
237
|
-
tuples: ReadonlyArray<readonly PrimitiveValueExpression[]>,
|
|
238
|
-
columnTypes:
|
|
239
|
-
| Array<[...string[], TypeNameIdentifier]>
|
|
240
|
-
| Array<SqlFragment | TypeNameIdentifier>,
|
|
241
|
-
): UnnestSqlToken => {
|
|
212
|
+
unnest: (tuples, columnTypes) => {
|
|
242
213
|
return Object.freeze({
|
|
243
214
|
columnTypes,
|
|
244
215
|
tuples,
|
|
245
216
|
type: UnnestToken,
|
|
246
217
|
});
|
|
247
218
|
},
|
|
248
|
-
unsafe: (parts
|
|
219
|
+
unsafe: (parts, ...args) => {
|
|
249
220
|
return Object.freeze({
|
|
250
221
|
...createFragment(parts, args),
|
|
251
222
|
parser: z.any(),
|
|
@@ -23,13 +23,13 @@ import {
|
|
|
23
23
|
TimestampToken,
|
|
24
24
|
UnnestToken,
|
|
25
25
|
} from '../tokens';
|
|
26
|
-
import { type
|
|
26
|
+
import { type SqlFragmentToken, type SqlToken as SqlTokenType } from '../types';
|
|
27
27
|
import { UnexpectedStateError } from '@slonik/errors';
|
|
28
28
|
|
|
29
29
|
export const createSqlTokenSqlFragment = (
|
|
30
30
|
token: SqlTokenType,
|
|
31
31
|
greatestParameterPosition: number,
|
|
32
|
-
):
|
|
32
|
+
): SqlFragmentToken => {
|
|
33
33
|
if (token.type === ArrayToken) {
|
|
34
34
|
return createArraySqlFragment(token, greatestParameterPosition);
|
|
35
35
|
} else if (token.type === BinaryToken) {
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createSqlTokenSqlFragment } from '../factories/createSqlTokenSqlFragment';
|
|
2
|
-
import {
|
|
2
|
+
import { FragmentToken } from '../tokens';
|
|
3
|
+
import { type ArraySqlToken, type SqlFragmentToken } from '../types';
|
|
3
4
|
import { escapeIdentifier } from '../utilities/escapeIdentifier';
|
|
4
5
|
import { formatSlonikPlaceholder } from '../utilities/formatSlonikPlaceholder';
|
|
5
6
|
import { isPrimitiveValueExpression } from '../utilities/isPrimitiveValueExpression';
|
|
@@ -9,7 +10,7 @@ import { InvalidInputError, UnexpectedStateError } from '@slonik/errors';
|
|
|
9
10
|
export const createArraySqlFragment = (
|
|
10
11
|
token: ArraySqlToken,
|
|
11
12
|
greatestParameterPosition: number,
|
|
12
|
-
):
|
|
13
|
+
): SqlFragmentToken => {
|
|
13
14
|
let placeholderIndex = greatestParameterPosition;
|
|
14
15
|
|
|
15
16
|
for (const value of token.values) {
|
|
@@ -62,6 +63,7 @@ export const createArraySqlFragment = (
|
|
|
62
63
|
|
|
63
64
|
return {
|
|
64
65
|
sql,
|
|
66
|
+
type: FragmentToken,
|
|
65
67
|
values,
|
|
66
68
|
};
|
|
67
69
|
};
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FragmentToken } from '../tokens';
|
|
2
|
+
import { type BinarySqlToken, type SqlFragmentToken } from '../types';
|
|
2
3
|
import { formatSlonikPlaceholder } from '../utilities/formatSlonikPlaceholder';
|
|
3
4
|
import { InvalidInputError } from '@slonik/errors';
|
|
4
5
|
|
|
5
6
|
export const createBinarySqlFragment = (
|
|
6
7
|
token: BinarySqlToken,
|
|
7
8
|
greatestParameterPosition: number,
|
|
8
|
-
):
|
|
9
|
+
): SqlFragmentToken => {
|
|
9
10
|
if (!Buffer.isBuffer(token.data)) {
|
|
10
11
|
throw new InvalidInputError('Binary value must be a buffer.');
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
return {
|
|
14
15
|
sql: formatSlonikPlaceholder(greatestParameterPosition + 1),
|
|
16
|
+
type: FragmentToken,
|
|
15
17
|
values: [token.data],
|
|
16
18
|
};
|
|
17
19
|
};
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FragmentToken } from '../tokens';
|
|
2
|
+
import { type DateSqlToken, type SqlFragmentToken } from '../types';
|
|
2
3
|
import { formatSlonikPlaceholder } from '../utilities/formatSlonikPlaceholder';
|
|
3
4
|
import { InvalidInputError } from '@slonik/errors';
|
|
4
5
|
|
|
5
6
|
export const createDateSqlFragment = (
|
|
6
7
|
token: DateSqlToken,
|
|
7
8
|
greatestParameterPosition: number,
|
|
8
|
-
):
|
|
9
|
+
): SqlFragmentToken => {
|
|
9
10
|
if (!(token.date instanceof Date)) {
|
|
10
11
|
throw new InvalidInputError(
|
|
11
12
|
'Date parameter value must be an instance of Date.',
|
|
@@ -14,6 +15,7 @@ export const createDateSqlFragment = (
|
|
|
14
15
|
|
|
15
16
|
return {
|
|
16
17
|
sql: formatSlonikPlaceholder(greatestParameterPosition + 1) + '::date',
|
|
18
|
+
type: FragmentToken,
|
|
17
19
|
values: [token.date.toISOString().slice(0, 10)],
|
|
18
20
|
};
|
|
19
21
|
};
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { slonikPlaceholderRegexRule } from '../regexRules/slonikPlaceholderRegexRule';
|
|
2
|
-
import {
|
|
2
|
+
import { FragmentToken } from '../tokens';
|
|
3
|
+
import { type FragmentSqlToken, type SqlFragmentToken } from '../types';
|
|
3
4
|
import { formatSlonikPlaceholder } from '../utilities/formatSlonikPlaceholder';
|
|
4
5
|
import { UnexpectedStateError } from '@slonik/errors';
|
|
5
6
|
|
|
6
7
|
export const createFragmentSqlFragment = (
|
|
7
8
|
token: FragmentSqlToken,
|
|
8
9
|
greatestParameterPosition: number,
|
|
9
|
-
):
|
|
10
|
+
): SqlFragmentToken => {
|
|
10
11
|
let sql = '';
|
|
11
12
|
|
|
12
13
|
let leastMatchedParameterPosition = Number.POSITIVE_INFINITY;
|
|
@@ -43,6 +44,7 @@ export const createFragmentSqlFragment = (
|
|
|
43
44
|
|
|
44
45
|
return {
|
|
45
46
|
sql,
|
|
47
|
+
type: FragmentToken,
|
|
46
48
|
values: token.values,
|
|
47
49
|
};
|
|
48
50
|
};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FragmentToken } from '../tokens';
|
|
2
|
+
import { type IdentifierSqlToken, type SqlFragmentToken } from '../types';
|
|
2
3
|
import { escapeIdentifier } from '../utilities/escapeIdentifier';
|
|
3
4
|
import { InvalidInputError } from '@slonik/errors';
|
|
4
5
|
|
|
5
6
|
export const createIdentifierSqlFragment = (
|
|
6
7
|
token: IdentifierSqlToken,
|
|
7
|
-
):
|
|
8
|
+
): SqlFragmentToken => {
|
|
8
9
|
const sql = token.names
|
|
9
10
|
.map((identifierName) => {
|
|
10
11
|
if (typeof identifierName !== 'string') {
|
|
@@ -19,6 +20,7 @@ export const createIdentifierSqlFragment = (
|
|
|
19
20
|
|
|
20
21
|
return {
|
|
21
22
|
sql,
|
|
23
|
+
type: FragmentToken,
|
|
22
24
|
values: [],
|
|
23
25
|
};
|
|
24
26
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FragmentToken } from '../tokens';
|
|
2
|
+
import { type IntervalSqlToken, type SqlFragmentToken } from '../types';
|
|
2
3
|
import { formatSlonikPlaceholder } from '../utilities/formatSlonikPlaceholder';
|
|
3
4
|
import { InvalidInputError } from '@slonik/errors';
|
|
4
5
|
import { z } from 'zod';
|
|
@@ -33,7 +34,7 @@ const tokenMap = {
|
|
|
33
34
|
export const createIntervalSqlFragment = (
|
|
34
35
|
token: IntervalSqlToken,
|
|
35
36
|
greatestParameterPosition: number,
|
|
36
|
-
):
|
|
37
|
+
): SqlFragmentToken => {
|
|
37
38
|
let intervalInput;
|
|
38
39
|
|
|
39
40
|
try {
|
|
@@ -66,6 +67,7 @@ export const createIntervalSqlFragment = (
|
|
|
66
67
|
|
|
67
68
|
return {
|
|
68
69
|
sql: 'make_interval(' + intervalTokens.join(', ') + ')',
|
|
70
|
+
type: FragmentToken,
|
|
69
71
|
values,
|
|
70
72
|
};
|
|
71
73
|
};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Logger } from '../Logger';
|
|
2
|
+
import { FragmentToken } from '../tokens';
|
|
2
3
|
import {
|
|
3
4
|
type JsonBinarySqlToken,
|
|
4
5
|
type JsonSqlToken,
|
|
5
|
-
type
|
|
6
|
+
type SqlFragmentToken,
|
|
6
7
|
} from '../types';
|
|
7
8
|
import { formatSlonikPlaceholder } from '../utilities/formatSlonikPlaceholder';
|
|
8
9
|
import { isPlainObject } from '../utilities/isPlainObject';
|
|
@@ -18,7 +19,7 @@ export const createJsonSqlFragment = (
|
|
|
18
19
|
token: JsonBinarySqlToken | JsonSqlToken,
|
|
19
20
|
greatestParameterPosition: number,
|
|
20
21
|
binary: boolean,
|
|
21
|
-
):
|
|
22
|
+
): SqlFragmentToken => {
|
|
22
23
|
let value;
|
|
23
24
|
|
|
24
25
|
if (token.value === undefined) {
|
|
@@ -61,6 +62,7 @@ export const createJsonSqlFragment = (
|
|
|
61
62
|
formatSlonikPlaceholder(greatestParameterPosition + 1) +
|
|
62
63
|
'::' +
|
|
63
64
|
(binary ? 'jsonb' : 'json'),
|
|
65
|
+
type: FragmentToken,
|
|
64
66
|
values: [value],
|
|
65
67
|
};
|
|
66
68
|
};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { createPrimitiveValueExpressions } from '../factories/createPrimitiveValueExpressions';
|
|
2
2
|
import { createSqlTokenSqlFragment } from '../factories/createSqlTokenSqlFragment';
|
|
3
|
+
import { FragmentToken } from '../tokens';
|
|
3
4
|
import {
|
|
4
5
|
type ListSqlToken,
|
|
5
6
|
type PrimitiveValueExpression,
|
|
6
|
-
type
|
|
7
|
+
type SqlFragmentToken,
|
|
7
8
|
} from '../types';
|
|
8
9
|
import { formatSlonikPlaceholder } from '../utilities/formatSlonikPlaceholder';
|
|
9
10
|
import { isPrimitiveValueExpression } from '../utilities/isPrimitiveValueExpression';
|
|
@@ -13,7 +14,7 @@ import { InvalidInputError } from '@slonik/errors';
|
|
|
13
14
|
export const createListSqlFragment = (
|
|
14
15
|
token: ListSqlToken,
|
|
15
16
|
greatestParameterPosition: number,
|
|
16
|
-
):
|
|
17
|
+
): SqlFragmentToken => {
|
|
17
18
|
const values: PrimitiveValueExpression[] = [];
|
|
18
19
|
const placeholders: Array<PrimitiveValueExpression | null> = [];
|
|
19
20
|
|
|
@@ -43,6 +44,7 @@ export const createListSqlFragment = (
|
|
|
43
44
|
|
|
44
45
|
return {
|
|
45
46
|
sql: placeholders.join(token.glue.sql),
|
|
47
|
+
type: FragmentToken,
|
|
46
48
|
values: createPrimitiveValueExpressions(values),
|
|
47
49
|
};
|
|
48
50
|
};
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { slonikPlaceholderRegexRule } from '../regexRules/slonikPlaceholderRegexRule';
|
|
2
|
-
import {
|
|
2
|
+
import { FragmentToken } from '../tokens';
|
|
3
|
+
import { type QuerySqlToken, type SqlFragmentToken } from '../types';
|
|
3
4
|
import { formatSlonikPlaceholder } from '../utilities/formatSlonikPlaceholder';
|
|
4
5
|
import { UnexpectedStateError } from '@slonik/errors';
|
|
5
6
|
|
|
6
7
|
export const createQuerySqlFragment = (
|
|
7
8
|
token: QuerySqlToken,
|
|
8
9
|
greatestParameterPosition: number,
|
|
9
|
-
):
|
|
10
|
+
): SqlFragmentToken => {
|
|
10
11
|
let sql = '';
|
|
11
12
|
|
|
12
13
|
let leastMatchedParameterPosition = Number.POSITIVE_INFINITY;
|
|
@@ -43,6 +44,7 @@ export const createQuerySqlFragment = (
|
|
|
43
44
|
|
|
44
45
|
return {
|
|
45
46
|
sql,
|
|
47
|
+
type: FragmentToken,
|
|
46
48
|
values: token.values,
|
|
47
49
|
};
|
|
48
50
|
};
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FragmentToken } from '../tokens';
|
|
2
|
+
import { type SqlFragmentToken, type TimestampSqlToken } from '../types';
|
|
2
3
|
import { formatSlonikPlaceholder } from '../utilities/formatSlonikPlaceholder';
|
|
3
4
|
import { InvalidInputError } from '@slonik/errors';
|
|
4
5
|
|
|
5
6
|
export const createTimestampSqlFragment = (
|
|
6
7
|
token: TimestampSqlToken,
|
|
7
8
|
greatestParameterPosition: number,
|
|
8
|
-
):
|
|
9
|
+
): SqlFragmentToken => {
|
|
9
10
|
if (!(token.date instanceof Date)) {
|
|
10
11
|
throw new InvalidInputError(
|
|
11
12
|
'Timestamp parameter value must be an instance of Date.',
|
|
@@ -17,6 +18,7 @@ export const createTimestampSqlFragment = (
|
|
|
17
18
|
'to_timestamp(' +
|
|
18
19
|
formatSlonikPlaceholder(greatestParameterPosition + 1) +
|
|
19
20
|
')',
|
|
21
|
+
type: FragmentToken,
|
|
20
22
|
values: [String(token.date.getTime() / 1_000)],
|
|
21
23
|
};
|
|
22
24
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { FragmentToken } from '../tokens';
|
|
1
2
|
import {
|
|
2
3
|
type PrimitiveValueExpression,
|
|
3
|
-
type
|
|
4
|
+
type SqlFragmentToken,
|
|
4
5
|
type UnnestSqlToken,
|
|
5
6
|
} from '../types';
|
|
6
7
|
import { countArrayDimensions } from '../utilities/countArrayDimensions';
|
|
@@ -13,7 +14,7 @@ import { InvalidInputError } from '@slonik/errors';
|
|
|
13
14
|
export const createUnnestSqlFragment = (
|
|
14
15
|
token: UnnestSqlToken,
|
|
15
16
|
greatestParameterPosition: number,
|
|
16
|
-
):
|
|
17
|
+
): SqlFragmentToken => {
|
|
17
18
|
const { columnTypes } = token;
|
|
18
19
|
|
|
19
20
|
const values: PrimitiveValueExpression[] = [];
|
|
@@ -113,6 +114,7 @@ export const createUnnestSqlFragment = (
|
|
|
113
114
|
|
|
114
115
|
return {
|
|
115
116
|
sql,
|
|
117
|
+
type: FragmentToken,
|
|
116
118
|
values,
|
|
117
119
|
};
|
|
118
120
|
};
|