@typed-sql/mysql 1.0.0-beta.2 → 1.0.0

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.
@@ -0,0 +1,175 @@
1
+ import { decodeMySqlRow } from "./decoding.js";
2
+ export function validateMySqlStreamBatchSize(value) {
3
+ const batchSize = value ?? 100;
4
+ if (!Number.isSafeInteger(batchSize) || batchSize <= 0)
5
+ throw new RangeError("MySQL stream batchSize must be a positive safe integer");
6
+ return batchSize;
7
+ }
8
+ export function createMySqlQueryStream(options) {
9
+ return new MySqlQueryStream(options);
10
+ }
11
+ class MySqlQueryStream {
12
+ #openConnection;
13
+ #text;
14
+ #values;
15
+ #batchSize;
16
+ #decoderPlans;
17
+ #onClose;
18
+ #active;
19
+ #opening;
20
+ #finishing;
21
+ #closed = false;
22
+ #notifiedClosed = false;
23
+ #queue = Promise.resolve();
24
+ constructor(options) {
25
+ this.#openConnection = options.openConnection;
26
+ this.#text = options.text;
27
+ this.#values = options.values;
28
+ this.#batchSize = options.batchSize;
29
+ this.#decoderPlans = options.decoderPlans;
30
+ this.#onClose = options.onClose;
31
+ }
32
+ [Symbol.asyncIterator]() {
33
+ return this;
34
+ }
35
+ next() {
36
+ return this.#enqueue(() => this.#next());
37
+ }
38
+ return() {
39
+ return this.#enqueue(async () => {
40
+ await this.#finish();
41
+ return { done: true, value: undefined };
42
+ });
43
+ }
44
+ async throw(error) {
45
+ await this.close();
46
+ throw error;
47
+ }
48
+ close() {
49
+ return this.#enqueue(() => this.#finish());
50
+ }
51
+ async [Symbol.asyncDispose]() {
52
+ await this.close();
53
+ }
54
+ #enqueue(operation) {
55
+ const result = this.#queue.then(operation, operation);
56
+ this.#queue = result.then(() => undefined, () => undefined);
57
+ return result;
58
+ }
59
+ async #next() {
60
+ if (this.#closed)
61
+ return { done: true, value: undefined };
62
+ let active;
63
+ try {
64
+ active = await this.#start();
65
+ if (!active.hasRows) {
66
+ await this.#finish();
67
+ return { done: true, value: undefined };
68
+ }
69
+ const result = await active.source.next();
70
+ if (result.done) {
71
+ await this.#finish();
72
+ return { done: true, value: undefined };
73
+ }
74
+ const decoded = decodeMySqlRow(result.value, active.decoders);
75
+ return { done: false, value: decoded };
76
+ }
77
+ catch (error) {
78
+ try {
79
+ await this.#finish();
80
+ }
81
+ catch {
82
+ /* Preserve the query or decoding failure. */
83
+ }
84
+ throw error;
85
+ }
86
+ }
87
+ #start() {
88
+ if (this.#opening !== undefined)
89
+ return this.#opening;
90
+ this.#opening = this.#open();
91
+ return this.#opening;
92
+ }
93
+ async #open() {
94
+ const opened = await this.#openConnection();
95
+ const stream = opened.connection.stream;
96
+ if (stream === undefined) {
97
+ if (opened.release)
98
+ opened.connection.release();
99
+ this.#closed = true;
100
+ this.#notifyClosed();
101
+ throw new Error("This MySQL execution adapter does not support protocol row streaming");
102
+ }
103
+ let source;
104
+ try {
105
+ source = stream.call(opened.connection, this.#text, this.#values, { batchSize: this.#batchSize });
106
+ const fields = await source.fields;
107
+ const decoders = this.#decoderPlans.get(fields);
108
+ const active = { source, decoders, hasRows: fields.length > 0, ...opened };
109
+ this.#active = active;
110
+ return active;
111
+ }
112
+ catch (error) {
113
+ if (source !== undefined) {
114
+ this.#active = { source, decoders: [], hasRows: false, ...opened };
115
+ try {
116
+ await this.#finish();
117
+ }
118
+ catch {
119
+ /* Preserve the stream startup failure. */
120
+ }
121
+ }
122
+ else {
123
+ if (opened.release) {
124
+ try {
125
+ opened.connection.release();
126
+ }
127
+ catch {
128
+ /* Preserve the stream startup failure. */
129
+ }
130
+ }
131
+ this.#closed = true;
132
+ this.#notifyClosed();
133
+ }
134
+ throw error;
135
+ }
136
+ }
137
+ #finish() {
138
+ if (this.#finishing !== undefined)
139
+ return this.#finishing;
140
+ this.#closed = true;
141
+ this.#finishing = this.#cleanup();
142
+ return this.#finishing;
143
+ }
144
+ async #cleanup() {
145
+ let failure;
146
+ try {
147
+ if (this.#active !== undefined)
148
+ await this.#active.source.close();
149
+ }
150
+ catch (error) {
151
+ failure = error;
152
+ }
153
+ finally {
154
+ try {
155
+ if (this.#active?.release && this.#active.source.connectionReusable)
156
+ this.#active.connection.release();
157
+ }
158
+ catch (error) {
159
+ failure ??= error;
160
+ }
161
+ finally {
162
+ this.#notifyClosed();
163
+ }
164
+ }
165
+ if (failure !== undefined)
166
+ throw failure;
167
+ }
168
+ #notifyClosed() {
169
+ if (this.#notifiedClosed)
170
+ return;
171
+ this.#notifiedClosed = true;
172
+ this.#onClose();
173
+ }
174
+ }
175
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../../src/stream.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typed-sql/mysql",
3
- "version": "1.0.0-beta.2",
3
+ "version": "1.0.0",
4
4
  "description": "MySQL grammar, schema introspection, type resolution, and application-owned mysql2 integration for typed-sql.",
5
5
  "license": "MIT",
6
6
  "author": "Lojhan",
@@ -38,9 +38,9 @@
38
38
  "./mysql2": "./dist/packages/mysql/src/mysql2.js"
39
39
  },
40
40
  "dependencies": {
41
- "@typed-sql/ast": "1.0.0-beta.2",
42
- "@typed-sql/core": "1.0.0-beta.2",
43
- "@typed-sql/schema": "1.0.0-beta.2"
41
+ "@typed-sql/ast": "1.0.0",
42
+ "@typed-sql/core": "1.0.0",
43
+ "@typed-sql/schema": "1.0.0"
44
44
  },
45
45
  "scripts": {
46
46
  "test": "poku test --reporter=compact --enforce",