@clickhouse/client 1.22.0-head.bb7d9d2.1 → 1.23.0-head.c8dc8d8.1
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 +2 -1
- package/dist/client.d.ts +2 -2
- package/dist/client.js +3 -3
- package/dist/client.js.map +1 -1
- package/dist/common/clickhouse_types.d.ts +98 -0
- package/dist/common/clickhouse_types.js +30 -0
- package/dist/common/clickhouse_types.js.map +1 -0
- package/dist/common/client.d.ts +233 -0
- package/dist/common/client.js +414 -0
- package/dist/common/client.js.map +1 -0
- package/dist/common/config.d.ts +234 -0
- package/dist/common/config.js +364 -0
- package/dist/common/config.js.map +1 -0
- package/dist/common/connection.d.ts +124 -0
- package/dist/common/connection.js +3 -0
- package/dist/common/connection.js.map +1 -0
- package/dist/common/data_formatter/format_query_params.d.ts +11 -0
- package/dist/common/data_formatter/format_query_params.js +128 -0
- package/dist/common/data_formatter/format_query_params.js.map +1 -0
- package/dist/common/data_formatter/format_query_settings.d.ts +2 -0
- package/dist/common/data_formatter/format_query_settings.js +20 -0
- package/dist/common/data_formatter/format_query_settings.js.map +1 -0
- package/dist/common/data_formatter/formatter.d.ts +41 -0
- package/dist/common/data_formatter/formatter.js +78 -0
- package/dist/common/data_formatter/formatter.js.map +1 -0
- package/dist/common/data_formatter/index.d.ts +3 -0
- package/dist/common/data_formatter/index.js +24 -0
- package/dist/common/data_formatter/index.js.map +1 -0
- package/dist/common/error/error.d.ts +20 -0
- package/dist/common/error/error.js +73 -0
- package/dist/common/error/error.js.map +1 -0
- package/dist/common/error/index.d.ts +1 -0
- package/dist/common/error/index.js +18 -0
- package/dist/common/error/index.js.map +1 -0
- package/dist/common/index.d.ts +67 -0
- package/dist/common/index.js +97 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/logger.d.ts +80 -0
- package/dist/common/logger.js +154 -0
- package/dist/common/logger.js.map +1 -0
- package/dist/common/parse/column_types.d.ts +127 -0
- package/dist/common/parse/column_types.js +586 -0
- package/dist/common/parse/column_types.js.map +1 -0
- package/dist/common/parse/index.d.ts +2 -0
- package/dist/common/parse/index.js +19 -0
- package/dist/common/parse/index.js.map +1 -0
- package/dist/common/parse/json_handling.d.ts +19 -0
- package/dist/common/parse/json_handling.js +8 -0
- package/dist/common/parse/json_handling.js.map +1 -0
- package/dist/common/result.d.ts +90 -0
- package/dist/common/result.js +3 -0
- package/dist/common/result.js.map +1 -0
- package/dist/common/settings.d.ts +1990 -0
- package/dist/common/settings.js +19 -0
- package/dist/common/settings.js.map +1 -0
- package/dist/common/tracing.d.ts +146 -0
- package/dist/common/tracing.js +76 -0
- package/dist/common/tracing.js.map +1 -0
- package/dist/common/ts_utils.d.ts +4 -0
- package/dist/common/ts_utils.js +3 -0
- package/dist/common/ts_utils.js.map +1 -0
- package/dist/common/utils/connection.d.ts +21 -0
- package/dist/common/utils/connection.js +43 -0
- package/dist/common/utils/connection.js.map +1 -0
- package/dist/common/utils/index.d.ts +5 -0
- package/dist/common/utils/index.js +22 -0
- package/dist/common/utils/index.js.map +1 -0
- package/dist/common/utils/multipart.d.ts +34 -0
- package/dist/common/utils/multipart.js +81 -0
- package/dist/common/utils/multipart.js.map +1 -0
- package/dist/common/utils/sleep.d.ts +4 -0
- package/dist/common/utils/sleep.js +12 -0
- package/dist/common/utils/sleep.js.map +1 -0
- package/dist/common/utils/stream.d.ts +15 -0
- package/dist/common/utils/stream.js +50 -0
- package/dist/common/utils/stream.js.map +1 -0
- package/dist/common/utils/url.d.ts +20 -0
- package/dist/common/utils/url.js +67 -0
- package/dist/common/utils/url.js.map +1 -0
- package/dist/common/version.d.ts +2 -0
- package/dist/common/version.js +4 -0
- package/dist/common/version.js.map +1 -0
- package/dist/config.d.ts +2 -2
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/connection/compression.d.ts +2 -2
- package/dist/connection/compression.js +4 -4
- package/dist/connection/compression.js.map +1 -1
- package/dist/connection/create_connection.d.ts +1 -1
- package/dist/connection/node_base_connection.d.ts +3 -3
- package/dist/connection/node_base_connection.js +22 -22
- package/dist/connection/node_base_connection.js.map +1 -1
- package/dist/connection/node_custom_agent_connection.js +2 -2
- package/dist/connection/node_custom_agent_connection.js.map +1 -1
- package/dist/connection/node_http_connection.js +2 -2
- package/dist/connection/node_http_connection.js.map +1 -1
- package/dist/connection/node_https_connection.d.ts +1 -1
- package/dist/connection/node_https_connection.js +3 -3
- package/dist/connection/node_https_connection.js.map +1 -1
- package/dist/connection/socket_pool.d.ts +1 -1
- package/dist/connection/socket_pool.js +30 -30
- package/dist/connection/socket_pool.js.map +1 -1
- package/dist/connection/stream.d.ts +1 -1
- package/dist/connection/stream.js +9 -9
- package/dist/connection/stream.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +24 -24
- package/dist/index.js.map +1 -1
- package/dist/result_set.d.ts +1 -1
- package/dist/result_set.js +10 -10
- package/dist/result_set.js.map +1 -1
- package/dist/utils/encoder.d.ts +1 -1
- package/dist/utils/encoder.js +5 -5
- package/dist/utils/encoder.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +7 -5
- package/skills/clickhouse-js-node-rowbinary-parser/EXAMPLES.md +48 -0
- package/skills/clickhouse-js-node-rowbinary-parser/README.md +248 -0
- package/skills/clickhouse-js-node-rowbinary-parser/SKILL.md +190 -0
- package/skills/clickhouse-js-node-rowbinary-parser/case-studies/iot-rowbinary-vs-json.md +83 -0
- package/skills/clickhouse-js-node-rowbinary-parser/case-studies/ledger-rowbinary-vs-json.md +103 -0
- package/skills/clickhouse-js-node-rowbinary-parser/case-studies/logs-json-wins.md +86 -0
- package/skills/clickhouse-js-node-rowbinary-parser/case-studies/wasm-vs-js.md +172 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/aggregateFunction.ts +34 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/bool.ts +10 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/columnar.ts +125 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/composite.ts +181 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/core.ts +77 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/datetime.ts +113 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/decimals.ts +57 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/dynamic.ts +328 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/enums.ts +28 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/examples/carts.ts +71 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/examples/events.ts +51 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/examples/iot.ts +158 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/examples/ledger.ts +98 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/examples/logs.ts +73 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/examples/observability.ts +142 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/examples/orders.ts +65 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/examples/profiles.ts +60 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/examples/telemetry.ts +102 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/floats.ts +32 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/geo.ts +109 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/integers.ts +95 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/interval.ts +54 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/ip.ts +93 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/json.ts +33 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/lowCardinality.ts +18 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/nested.ts +23 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/nothing.ts +29 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/reader.ts +51 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/rows.ts +58 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/simpleAggregateFunction.ts +20 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/stream.ts +276 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/strings.ts +55 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/time.ts +61 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/uuid.ts +153 -0
- package/skills/clickhouse-js-node-rowbinary-parser/src/varint.ts +70 -0
|
@@ -0,0 +1,586 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SimpleColumnTypes = exports.ColumnTypeParseError = void 0;
|
|
4
|
+
exports.parseColumnType = parseColumnType;
|
|
5
|
+
exports.parseDecimalType = parseDecimalType;
|
|
6
|
+
exports.parseEnumType = parseEnumType;
|
|
7
|
+
exports.parseMapType = parseMapType;
|
|
8
|
+
exports.parseTupleType = parseTupleType;
|
|
9
|
+
exports.parseArrayType = parseArrayType;
|
|
10
|
+
exports.parseDateTimeType = parseDateTimeType;
|
|
11
|
+
exports.parseDateTime64Type = parseDateTime64Type;
|
|
12
|
+
exports.parseFixedStringType = parseFixedStringType;
|
|
13
|
+
exports.asNullableType = asNullableType;
|
|
14
|
+
exports.getElementsTypes = getElementsTypes;
|
|
15
|
+
class ColumnTypeParseError extends Error {
|
|
16
|
+
args;
|
|
17
|
+
constructor(message, args) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.args = args ?? {};
|
|
20
|
+
// Set the prototype explicitly, see:
|
|
21
|
+
// https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work
|
|
22
|
+
Object.setPrototypeOf(this, ColumnTypeParseError.prototype);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.ColumnTypeParseError = ColumnTypeParseError;
|
|
26
|
+
exports.SimpleColumnTypes = [
|
|
27
|
+
"Bool",
|
|
28
|
+
"UInt8",
|
|
29
|
+
"Int8",
|
|
30
|
+
"UInt16",
|
|
31
|
+
"Int16",
|
|
32
|
+
"UInt32",
|
|
33
|
+
"Int32",
|
|
34
|
+
"UInt64",
|
|
35
|
+
"Int64",
|
|
36
|
+
"UInt128",
|
|
37
|
+
"Int128",
|
|
38
|
+
"UInt256",
|
|
39
|
+
"Int256",
|
|
40
|
+
"Float32",
|
|
41
|
+
"Float64",
|
|
42
|
+
"String",
|
|
43
|
+
"UUID",
|
|
44
|
+
"Date",
|
|
45
|
+
"Date32",
|
|
46
|
+
"IPv4",
|
|
47
|
+
"IPv6",
|
|
48
|
+
];
|
|
49
|
+
/**
|
|
50
|
+
* @experimental - incomplete, unstable API;
|
|
51
|
+
* originally intended to be used for RowBinary/Native header parsing internally.
|
|
52
|
+
* Currently unsupported source types:
|
|
53
|
+
* * Geo
|
|
54
|
+
* * (Simple)AggregateFunction
|
|
55
|
+
* * Nested
|
|
56
|
+
* * Old/new JSON
|
|
57
|
+
* * Dynamic
|
|
58
|
+
* * Variant
|
|
59
|
+
*/
|
|
60
|
+
function parseColumnType(sourceType) {
|
|
61
|
+
let columnType = sourceType;
|
|
62
|
+
let isNullable = false;
|
|
63
|
+
if (columnType.startsWith(LowCardinalityPrefix)) {
|
|
64
|
+
columnType = columnType.slice(LowCardinalityPrefix.length, -1);
|
|
65
|
+
}
|
|
66
|
+
if (columnType.startsWith(NullablePrefix)) {
|
|
67
|
+
columnType = columnType.slice(NullablePrefix.length, -1);
|
|
68
|
+
isNullable = true;
|
|
69
|
+
}
|
|
70
|
+
let result;
|
|
71
|
+
if (exports.SimpleColumnTypes.includes(columnType)) {
|
|
72
|
+
result = {
|
|
73
|
+
type: "Simple",
|
|
74
|
+
columnType: columnType,
|
|
75
|
+
sourceType,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
else if (columnType.startsWith(DecimalPrefix)) {
|
|
79
|
+
result = parseDecimalType({
|
|
80
|
+
sourceType,
|
|
81
|
+
columnType,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
else if (columnType.startsWith(DateTime64Prefix)) {
|
|
85
|
+
result = parseDateTime64Type({ sourceType, columnType });
|
|
86
|
+
}
|
|
87
|
+
else if (columnType.startsWith(DateTimePrefix)) {
|
|
88
|
+
result = parseDateTimeType({ sourceType, columnType });
|
|
89
|
+
}
|
|
90
|
+
else if (columnType.startsWith(FixedStringPrefix)) {
|
|
91
|
+
result = parseFixedStringType({ sourceType, columnType });
|
|
92
|
+
}
|
|
93
|
+
else if (columnType.startsWith(Enum8Prefix) ||
|
|
94
|
+
columnType.startsWith(Enum16Prefix)) {
|
|
95
|
+
result = parseEnumType({ sourceType, columnType });
|
|
96
|
+
}
|
|
97
|
+
else if (columnType.startsWith(ArrayPrefix)) {
|
|
98
|
+
result = parseArrayType({ sourceType, columnType });
|
|
99
|
+
}
|
|
100
|
+
else if (columnType.startsWith(MapPrefix)) {
|
|
101
|
+
result = parseMapType({ sourceType, columnType });
|
|
102
|
+
}
|
|
103
|
+
else if (columnType.startsWith(TuplePrefix)) {
|
|
104
|
+
result = parseTupleType({ sourceType, columnType });
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
throw new ColumnTypeParseError("Unsupported column type", { columnType });
|
|
108
|
+
}
|
|
109
|
+
if (isNullable) {
|
|
110
|
+
return asNullableType(result, sourceType);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function parseDecimalType({ columnType, sourceType, }) {
|
|
117
|
+
if (!columnType.startsWith(DecimalPrefix) ||
|
|
118
|
+
columnType.length < DecimalPrefix.length + 5 // Decimal(1, 0) is the shortest valid definition
|
|
119
|
+
) {
|
|
120
|
+
throw new ColumnTypeParseError("Invalid Decimal type", {
|
|
121
|
+
sourceType,
|
|
122
|
+
columnType,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
const split = columnType.slice(DecimalPrefix.length, -1).split(", ");
|
|
126
|
+
if (split.length !== 2) {
|
|
127
|
+
throw new ColumnTypeParseError("Expected Decimal type to have both precision and scale", {
|
|
128
|
+
sourceType,
|
|
129
|
+
columnType,
|
|
130
|
+
split,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// SAFETY: `split` length is checked to be exactly 2 above
|
|
134
|
+
const [precisionStr, scaleStr] = split;
|
|
135
|
+
let intSize = 32;
|
|
136
|
+
const precision = parseInt(precisionStr, 10);
|
|
137
|
+
if (Number.isNaN(precision) || precision < 1 || precision > 76) {
|
|
138
|
+
throw new ColumnTypeParseError("Invalid Decimal precision", {
|
|
139
|
+
columnType,
|
|
140
|
+
sourceType,
|
|
141
|
+
precision,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
const scale = parseInt(scaleStr, 10);
|
|
145
|
+
if (Number.isNaN(scale) || scale < 0 || scale > precision) {
|
|
146
|
+
throw new ColumnTypeParseError("Invalid Decimal scale", {
|
|
147
|
+
columnType,
|
|
148
|
+
sourceType,
|
|
149
|
+
precision,
|
|
150
|
+
scale,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
if (precision > 38) {
|
|
154
|
+
intSize = 256;
|
|
155
|
+
}
|
|
156
|
+
else if (precision > 18) {
|
|
157
|
+
intSize = 128;
|
|
158
|
+
}
|
|
159
|
+
else if (precision > 9) {
|
|
160
|
+
intSize = 64;
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
type: "Decimal",
|
|
164
|
+
params: {
|
|
165
|
+
precision,
|
|
166
|
+
scale,
|
|
167
|
+
intSize,
|
|
168
|
+
},
|
|
169
|
+
sourceType,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Unescape backslash escape sequences in enum names.
|
|
174
|
+
* Recognized escapes are decoded using ClickHouse-style string escaping:
|
|
175
|
+
* `\\n` -> newline, `\\t` -> tab, `\\r` -> carriage return, `\\\\` -> `\\`,
|
|
176
|
+
* and `\\'` -> `'`.
|
|
177
|
+
* For any other escaped character, the backslash is removed and the following
|
|
178
|
+
* character is kept verbatim to preserve the previous permissive behavior.
|
|
179
|
+
*/
|
|
180
|
+
function unescapeEnumName(escaped) {
|
|
181
|
+
let unescaped = "";
|
|
182
|
+
let i = 0;
|
|
183
|
+
while (i < escaped.length) {
|
|
184
|
+
if (escaped.charCodeAt(i) === BackslashASCII && i + 1 < escaped.length) {
|
|
185
|
+
i++;
|
|
186
|
+
switch (escaped[i]) {
|
|
187
|
+
case "n":
|
|
188
|
+
unescaped += "\n";
|
|
189
|
+
break;
|
|
190
|
+
case "t":
|
|
191
|
+
unescaped += "\t";
|
|
192
|
+
break;
|
|
193
|
+
case "r":
|
|
194
|
+
unescaped += "\r";
|
|
195
|
+
break;
|
|
196
|
+
case "\\":
|
|
197
|
+
unescaped += "\\";
|
|
198
|
+
break;
|
|
199
|
+
case "'":
|
|
200
|
+
unescaped += "'";
|
|
201
|
+
break;
|
|
202
|
+
default:
|
|
203
|
+
// Preserve previous behavior for unknown escape sequences by
|
|
204
|
+
// dropping the backslash and keeping the escaped character.
|
|
205
|
+
unescaped += escaped[i];
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
unescaped += escaped[i];
|
|
211
|
+
}
|
|
212
|
+
i++;
|
|
213
|
+
}
|
|
214
|
+
return unescaped;
|
|
215
|
+
}
|
|
216
|
+
function parseEnumType({ columnType, sourceType, }) {
|
|
217
|
+
let intSize;
|
|
218
|
+
if (columnType.startsWith(Enum8Prefix)) {
|
|
219
|
+
columnType = columnType.slice(Enum8Prefix.length, -1);
|
|
220
|
+
intSize = 8;
|
|
221
|
+
}
|
|
222
|
+
else if (columnType.startsWith(Enum16Prefix)) {
|
|
223
|
+
columnType = columnType.slice(Enum16Prefix.length, -1);
|
|
224
|
+
intSize = 16;
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
throw new ColumnTypeParseError("Expected Enum to be either Enum8 or Enum16", {
|
|
228
|
+
columnType,
|
|
229
|
+
sourceType,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
// The minimal allowed Enum definition is Enum8('' = 0), i.e. 6 chars inside.
|
|
233
|
+
if (columnType.length < 6) {
|
|
234
|
+
throw new ColumnTypeParseError("Invalid Enum type values", {
|
|
235
|
+
columnType,
|
|
236
|
+
sourceType,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
const names = [];
|
|
240
|
+
const indices = [];
|
|
241
|
+
let parsingName = true; // false when parsing the index
|
|
242
|
+
let charEscaped = false; // we should ignore escaped ticks
|
|
243
|
+
let startIndex = 1; // Skip the first '
|
|
244
|
+
// Should support the most complicated enums, such as Enum8('f\'' = 1, 'x =' = 2, 'b\'\'\'' = 3, '\'c=4=' = 42, '4' = 100)
|
|
245
|
+
for (let i = 1; i < columnType.length; i++) {
|
|
246
|
+
if (parsingName) {
|
|
247
|
+
if (charEscaped) {
|
|
248
|
+
charEscaped = false;
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
if (columnType.charCodeAt(i) === BackslashASCII) {
|
|
252
|
+
charEscaped = true;
|
|
253
|
+
}
|
|
254
|
+
else if (columnType.charCodeAt(i) === SingleQuoteASCII) {
|
|
255
|
+
// non-escaped closing tick - push the name
|
|
256
|
+
const rawName = columnType.slice(startIndex, i);
|
|
257
|
+
// Unescape the name by removing backslash escape sequences
|
|
258
|
+
const name = unescapeEnumName(rawName);
|
|
259
|
+
if (names.includes(name)) {
|
|
260
|
+
throw new ColumnTypeParseError("Duplicate Enum name", {
|
|
261
|
+
columnType,
|
|
262
|
+
sourceType,
|
|
263
|
+
name,
|
|
264
|
+
names,
|
|
265
|
+
indices,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
names.push(name);
|
|
269
|
+
i += 4; // skip ` = ` and the first digit, as it will always have at least one.
|
|
270
|
+
startIndex = i;
|
|
271
|
+
parsingName = false;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Parsing the index, skipping next iterations until the first non-digit one
|
|
276
|
+
else if (columnType.charCodeAt(i) < ZeroASCII ||
|
|
277
|
+
columnType.charCodeAt(i) > NineASCII) {
|
|
278
|
+
pushEnumIndex(startIndex, i);
|
|
279
|
+
// the char at this index should be comma.
|
|
280
|
+
i += 2; // skip ` '`, but not the first char - ClickHouse allows something like Enum8('foo' = 0, '' = 42)
|
|
281
|
+
startIndex = i + 1;
|
|
282
|
+
parsingName = true;
|
|
283
|
+
charEscaped = false;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Push the last index
|
|
287
|
+
pushEnumIndex(startIndex, columnType.length);
|
|
288
|
+
if (names.length !== indices.length) {
|
|
289
|
+
throw new ColumnTypeParseError("Expected Enum to have the same number of names and indices", { columnType, sourceType, names, indices });
|
|
290
|
+
}
|
|
291
|
+
const values = {};
|
|
292
|
+
for (let i = 0; i < names.length; i++) {
|
|
293
|
+
const idx = indices[i];
|
|
294
|
+
const name = names[i];
|
|
295
|
+
// SAFETY: `names.length !== indices.length` is checked and throws above, so both indexed values are always defined.
|
|
296
|
+
values[idx] = name;
|
|
297
|
+
}
|
|
298
|
+
return {
|
|
299
|
+
type: "Enum",
|
|
300
|
+
values,
|
|
301
|
+
intSize,
|
|
302
|
+
sourceType,
|
|
303
|
+
};
|
|
304
|
+
function pushEnumIndex(start, end) {
|
|
305
|
+
const index = parseInt(columnType.slice(start, end), 10);
|
|
306
|
+
if (Number.isNaN(index) || index < 0) {
|
|
307
|
+
throw new ColumnTypeParseError("Expected Enum index to be a valid number", {
|
|
308
|
+
columnType,
|
|
309
|
+
sourceType,
|
|
310
|
+
names,
|
|
311
|
+
indices,
|
|
312
|
+
index,
|
|
313
|
+
start,
|
|
314
|
+
end,
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
if (indices.includes(index)) {
|
|
318
|
+
throw new ColumnTypeParseError("Duplicate Enum index", {
|
|
319
|
+
columnType,
|
|
320
|
+
sourceType,
|
|
321
|
+
index,
|
|
322
|
+
names,
|
|
323
|
+
indices,
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
indices.push(index);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
function parseMapType({ columnType, sourceType, }) {
|
|
330
|
+
if (!columnType.startsWith(MapPrefix) ||
|
|
331
|
+
columnType.length < MapPrefix.length + 11 // the shortest definition seems to be Map(Int8, Int8)
|
|
332
|
+
) {
|
|
333
|
+
throw new ColumnTypeParseError("Invalid Map type", {
|
|
334
|
+
columnType,
|
|
335
|
+
sourceType,
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
columnType = columnType.slice(MapPrefix.length, -1);
|
|
339
|
+
const [keyType, valueType] = getElementsTypes({ columnType, sourceType }, 2);
|
|
340
|
+
const key = parseColumnType(keyType);
|
|
341
|
+
if (key.type === "DateTime64" ||
|
|
342
|
+
key.type === "Nullable" ||
|
|
343
|
+
key.type === "Array" ||
|
|
344
|
+
key.type === "Map" ||
|
|
345
|
+
key.type === "Decimal" ||
|
|
346
|
+
key.type === "Tuple") {
|
|
347
|
+
throw new ColumnTypeParseError("Invalid Map key type", {
|
|
348
|
+
key,
|
|
349
|
+
sourceType,
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
const value = parseColumnType(valueType);
|
|
353
|
+
return {
|
|
354
|
+
type: "Map",
|
|
355
|
+
key,
|
|
356
|
+
value,
|
|
357
|
+
sourceType,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
function parseTupleType({ columnType, sourceType, }) {
|
|
361
|
+
if (!columnType.startsWith(TuplePrefix) ||
|
|
362
|
+
columnType.length < TuplePrefix.length + 5 // Tuple(Int8) is the shortest valid definition
|
|
363
|
+
) {
|
|
364
|
+
throw new ColumnTypeParseError("Invalid Tuple type", {
|
|
365
|
+
columnType,
|
|
366
|
+
sourceType,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
columnType = columnType.slice(TuplePrefix.length, -1);
|
|
370
|
+
const elements = getElementsTypes({ columnType, sourceType }, 1).map((type) => parseColumnType(type));
|
|
371
|
+
return {
|
|
372
|
+
type: "Tuple",
|
|
373
|
+
elements,
|
|
374
|
+
sourceType,
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
function parseArrayType({ columnType, sourceType, }) {
|
|
378
|
+
if (!columnType.startsWith(ArrayPrefix) ||
|
|
379
|
+
columnType.length < ArrayPrefix.length + 5 // Array(Int8) is the shortest valid definition
|
|
380
|
+
) {
|
|
381
|
+
throw new ColumnTypeParseError("Invalid Array type", {
|
|
382
|
+
columnType,
|
|
383
|
+
sourceType,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
let dimensions = 0;
|
|
387
|
+
while (columnType.length > 0) {
|
|
388
|
+
if (columnType.startsWith(ArrayPrefix)) {
|
|
389
|
+
columnType = columnType.slice(ArrayPrefix.length, -1); // Array(T) -> T
|
|
390
|
+
dimensions++;
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
if (dimensions === 0 || dimensions > 10) {
|
|
397
|
+
// TODO: check how many we can handle; max 10 seems more than enough.
|
|
398
|
+
throw new ColumnTypeParseError("Expected Array to have between 1 and 10 dimensions", { columnType });
|
|
399
|
+
}
|
|
400
|
+
const value = parseColumnType(columnType);
|
|
401
|
+
if (value.type === "Array") {
|
|
402
|
+
throw new ColumnTypeParseError("Unexpected Array as value type", {
|
|
403
|
+
columnType,
|
|
404
|
+
sourceType,
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
return {
|
|
408
|
+
type: "Array",
|
|
409
|
+
value,
|
|
410
|
+
dimensions,
|
|
411
|
+
sourceType,
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
function parseDateTimeType({ columnType, sourceType, }) {
|
|
415
|
+
if (columnType.startsWith(DateTimeWithTimezonePrefix) &&
|
|
416
|
+
columnType.length > DateTimeWithTimezonePrefix.length + 4 // DateTime('GB') has the least amount of chars
|
|
417
|
+
) {
|
|
418
|
+
const timezone = columnType.slice(DateTimeWithTimezonePrefix.length + 1, -2);
|
|
419
|
+
return {
|
|
420
|
+
type: "DateTime",
|
|
421
|
+
timezone,
|
|
422
|
+
sourceType,
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
else if (columnType.startsWith(DateTimePrefix) &&
|
|
426
|
+
columnType.length === DateTimePrefix.length) {
|
|
427
|
+
return {
|
|
428
|
+
type: "DateTime",
|
|
429
|
+
timezone: null,
|
|
430
|
+
sourceType,
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
throw new ColumnTypeParseError("Invalid DateTime type", {
|
|
435
|
+
columnType,
|
|
436
|
+
sourceType,
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
function parseDateTime64Type({ columnType, sourceType, }) {
|
|
441
|
+
if (!columnType.startsWith(DateTime64Prefix) ||
|
|
442
|
+
columnType.length < DateTime64Prefix.length + 2 // should at least have a precision
|
|
443
|
+
) {
|
|
444
|
+
throw new ColumnTypeParseError("Invalid DateTime64 type", {
|
|
445
|
+
columnType,
|
|
446
|
+
sourceType,
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
const precision = parseInt(columnType[DateTime64Prefix.length] ?? "", 10);
|
|
450
|
+
if (Number.isNaN(precision) || precision < 0 || precision > 9) {
|
|
451
|
+
throw new ColumnTypeParseError("Invalid DateTime64 precision", {
|
|
452
|
+
columnType,
|
|
453
|
+
sourceType,
|
|
454
|
+
precision,
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
let timezone = null;
|
|
458
|
+
if (columnType.length > DateTime64Prefix.length + 2) {
|
|
459
|
+
// e.g. DateTime64(3, 'UTC') -> UTC
|
|
460
|
+
timezone = columnType.slice(DateTime64Prefix.length + 4, -2);
|
|
461
|
+
}
|
|
462
|
+
return {
|
|
463
|
+
type: "DateTime64",
|
|
464
|
+
timezone,
|
|
465
|
+
precision,
|
|
466
|
+
sourceType,
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
function parseFixedStringType({ columnType, sourceType, }) {
|
|
470
|
+
if (!columnType.startsWith(FixedStringPrefix) ||
|
|
471
|
+
columnType.length < FixedStringPrefix.length + 2 // i.e. at least FixedString(1)
|
|
472
|
+
) {
|
|
473
|
+
throw new ColumnTypeParseError("Invalid FixedString type", {
|
|
474
|
+
columnType,
|
|
475
|
+
sourceType,
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
const sizeBytes = parseInt(columnType.slice(FixedStringPrefix.length, -1), 10);
|
|
479
|
+
if (Number.isNaN(sizeBytes) || sizeBytes < 1) {
|
|
480
|
+
throw new ColumnTypeParseError("Invalid FixedString size in bytes", {
|
|
481
|
+
columnType,
|
|
482
|
+
sourceType,
|
|
483
|
+
sizeBytes,
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
return {
|
|
487
|
+
type: "FixedString",
|
|
488
|
+
sizeBytes,
|
|
489
|
+
sourceType,
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
function asNullableType(value, sourceType) {
|
|
493
|
+
if (value.type === "Array" ||
|
|
494
|
+
value.type === "Map" ||
|
|
495
|
+
value.type === "Tuple" ||
|
|
496
|
+
value.type === "Nullable") {
|
|
497
|
+
throw new ColumnTypeParseError(`${value.type} cannot be Nullable`, {
|
|
498
|
+
sourceType,
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
if (value.sourceType.startsWith(NullablePrefix)) {
|
|
502
|
+
value.sourceType = value.sourceType.slice(NullablePrefix.length, -1);
|
|
503
|
+
}
|
|
504
|
+
return {
|
|
505
|
+
type: "Nullable",
|
|
506
|
+
sourceType,
|
|
507
|
+
value,
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
/** Used for Map key/value types and Tuple elements.
|
|
511
|
+
* * `String, UInt8` results in [`String`, `UInt8`].
|
|
512
|
+
* * `String, UInt8, Array(String)` results in [`String`, `UInt8`, `Array(String)`].
|
|
513
|
+
* * Throws if parsed values are below the required minimum. */
|
|
514
|
+
function getElementsTypes({ columnType, sourceType }, minElements) {
|
|
515
|
+
const elements = [];
|
|
516
|
+
/** Consider the element type parsed once we reach a comma outside of parens AND after an unescaped tick.
|
|
517
|
+
* The most complicated cases are values names in the self-defined Enum types:
|
|
518
|
+
* * `Tuple(Enum8('f\'()' = 1))` -> `f\'()`
|
|
519
|
+
* * `Tuple(Enum8('(' = 1))` -> `(`
|
|
520
|
+
* See also: {@link parseEnumType }, which works similarly (but has to deal with the indices following the names). */
|
|
521
|
+
let openParens = 0;
|
|
522
|
+
let quoteOpen = false;
|
|
523
|
+
let charEscaped = false;
|
|
524
|
+
let lastElementIndex = 0;
|
|
525
|
+
for (let i = 0; i < columnType.length; i++) {
|
|
526
|
+
if (charEscaped) {
|
|
527
|
+
charEscaped = false;
|
|
528
|
+
}
|
|
529
|
+
else if (columnType.charCodeAt(i) === BackslashASCII) {
|
|
530
|
+
charEscaped = true;
|
|
531
|
+
}
|
|
532
|
+
else if (columnType.charCodeAt(i) === SingleQuoteASCII) {
|
|
533
|
+
quoteOpen = !quoteOpen; // unescaped quote
|
|
534
|
+
}
|
|
535
|
+
else {
|
|
536
|
+
if (!quoteOpen) {
|
|
537
|
+
if (columnType.charCodeAt(i) === LeftParenASCII) {
|
|
538
|
+
openParens++;
|
|
539
|
+
}
|
|
540
|
+
else if (columnType.charCodeAt(i) === RightParenASCII) {
|
|
541
|
+
openParens--;
|
|
542
|
+
}
|
|
543
|
+
else if (columnType.charCodeAt(i) === CommaASCII) {
|
|
544
|
+
if (openParens === 0) {
|
|
545
|
+
elements.push(columnType.slice(lastElementIndex, i));
|
|
546
|
+
i += 2; // skip ', '
|
|
547
|
+
lastElementIndex = i;
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
// Push the remaining part of the type if it seems to be valid (at least all parentheses are closed)
|
|
554
|
+
if (!openParens && lastElementIndex < columnType.length - 1) {
|
|
555
|
+
elements.push(columnType.slice(lastElementIndex));
|
|
556
|
+
}
|
|
557
|
+
if (elements.length < minElements) {
|
|
558
|
+
throw new ColumnTypeParseError("Expected more elements in the type", {
|
|
559
|
+
sourceType,
|
|
560
|
+
columnType,
|
|
561
|
+
elements,
|
|
562
|
+
minElements,
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
return elements;
|
|
566
|
+
}
|
|
567
|
+
const NullablePrefix = "Nullable(";
|
|
568
|
+
const LowCardinalityPrefix = "LowCardinality(";
|
|
569
|
+
const DecimalPrefix = "Decimal(";
|
|
570
|
+
const ArrayPrefix = "Array(";
|
|
571
|
+
const MapPrefix = "Map(";
|
|
572
|
+
const Enum8Prefix = "Enum8(";
|
|
573
|
+
const Enum16Prefix = "Enum16(";
|
|
574
|
+
const TuplePrefix = "Tuple(";
|
|
575
|
+
const DateTimePrefix = "DateTime";
|
|
576
|
+
const DateTimeWithTimezonePrefix = "DateTime(";
|
|
577
|
+
const DateTime64Prefix = "DateTime64(";
|
|
578
|
+
const FixedStringPrefix = "FixedString(";
|
|
579
|
+
const SingleQuoteASCII = 39;
|
|
580
|
+
const LeftParenASCII = 40;
|
|
581
|
+
const RightParenASCII = 41;
|
|
582
|
+
const CommaASCII = 44;
|
|
583
|
+
const ZeroASCII = 48;
|
|
584
|
+
const NineASCII = 57;
|
|
585
|
+
const BackslashASCII = 92;
|
|
586
|
+
//# sourceMappingURL=column_types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column_types.js","sourceRoot":"","sources":["../../../src/common/parse/column_types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./column_types"), exports);
|
|
18
|
+
__exportStar(require("./json_handling"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/parse/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,kDAAgC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface JSONHandling {
|
|
2
|
+
/**
|
|
3
|
+
* Custom parser for JSON strings
|
|
4
|
+
*
|
|
5
|
+
* @param input stringified JSON
|
|
6
|
+
* @default JSON.parse // See {@link JSON.parse}
|
|
7
|
+
* @returns parsed object
|
|
8
|
+
*/
|
|
9
|
+
parse: <T>(input: string) => T;
|
|
10
|
+
/**
|
|
11
|
+
* Custom stringifier for JSON objects
|
|
12
|
+
*
|
|
13
|
+
* @param input any JSON-compatible object
|
|
14
|
+
* @default JSON.stringify // See {@link JSON.stringify}
|
|
15
|
+
* @returns stringified JSON
|
|
16
|
+
*/
|
|
17
|
+
stringify: <T = any>(input: T) => string;
|
|
18
|
+
}
|
|
19
|
+
export declare const defaultJSONHandling: JSONHandling;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json_handling.js","sourceRoot":"","sources":["../../../src/common/parse/json_handling.ts"],"names":[],"mappings":";;;AAmBa,QAAA,mBAAmB,GAAiB;IAC/C,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,SAAS,EAAE,IAAI,CAAC,SAAS;CAC1B,CAAC"}
|