@typed-sql/mysql 1.0.0 → 2.0.0-rc.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/CHANGELOG.md +60 -0
- package/README.md +22 -4
- package/dist/packages/mysql/src/bulk.d.ts +22 -0
- package/dist/packages/mysql/src/bulk.d.ts.map +1 -0
- package/dist/packages/mysql/src/bulk.js +205 -0
- package/dist/packages/mysql/src/bulk.js.map +1 -0
- package/dist/packages/mysql/src/index.d.ts +5 -1
- package/dist/packages/mysql/src/index.d.ts.map +1 -1
- package/dist/packages/mysql/src/index.js +16 -3
- package/dist/packages/mysql/src/index.js.map +1 -1
- package/dist/packages/mysql/src/mysql2.d.ts +60 -1
- package/dist/packages/mysql/src/mysql2.d.ts.map +1 -1
- package/dist/packages/mysql/src/mysql2.js +296 -0
- package/dist/packages/mysql/src/mysql2.js.map +1 -1
- package/dist/packages/mysql/src/provider.d.ts.map +1 -1
- package/dist/packages/mysql/src/provider.js +8 -1
- package/dist/packages/mysql/src/provider.js.map +1 -1
- package/dist/packages/mysql/src/resolver.d.ts.map +1 -1
- package/dist/packages/mysql/src/resolver.js +20 -1
- package/dist/packages/mysql/src/resolver.js.map +1 -1
- package/dist/packages/mysql/src/routing.d.ts +22 -0
- package/dist/packages/mysql/src/routing.d.ts.map +1 -0
- package/dist/packages/mysql/src/routing.js +72 -0
- package/dist/packages/mysql/src/routing.js.map +1 -0
- package/dist/packages/mysql/src/runtime.d.ts +6 -1
- package/dist/packages/mysql/src/runtime.d.ts.map +1 -1
- package/dist/packages/mysql/src/runtime.js +311 -25
- package/dist/packages/mysql/src/runtime.js.map +1 -1
- package/dist/packages/mysql/src/semantics.d.ts +5 -0
- package/dist/packages/mysql/src/semantics.d.ts.map +1 -0
- package/dist/packages/mysql/src/semantics.js +203 -0
- package/dist/packages/mysql/src/semantics.js.map +1 -0
- package/dist/packages/mysql/src/version.d.ts +2 -0
- package/dist/packages/mysql/src/version.d.ts.map +1 -0
- package/dist/packages/mysql/src/version.js +2 -0
- package/dist/packages/mysql/src/version.js.map +1 -0
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,65 @@
|
|
|
1
1
|
# @typed-sql/mysql
|
|
2
2
|
|
|
3
|
+
## 2.0.0-rc.1
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 9c72dab: Use live MySQL catalog origins to preserve enum result evidence, and compare parameter metadata in
|
|
8
|
+
the safe input direction so compiler-enforced literal subsets do not become false mismatches.
|
|
9
|
+
|
|
10
|
+
## 2.0.0-rc.0
|
|
11
|
+
|
|
12
|
+
### Major Changes
|
|
13
|
+
|
|
14
|
+
- 29afc3d: Add conservative semantic primary/replica routing over application-owned databases, scoped
|
|
15
|
+
read-after-write pinning, explicit role requirements, stable unsafe-route errors, dialect runtime
|
|
16
|
+
semantic resolvers, and bounded abortable transaction retry policies with native PostgreSQL and
|
|
17
|
+
MySQL error classifiers. Parse and classify dialect locking reads so uncertain or affine work
|
|
18
|
+
always fails closed to primary.
|
|
19
|
+
- 6a7ae58: Add opt-in live query verification through grammar-owned PostgreSQL PREPARE and MySQL
|
|
20
|
+
COM_STMT_PREPARE adapters, bounded neutral comparison, deterministic secret-free proof artifacts,
|
|
21
|
+
offline cache validation, explicit unsupported classifications, CLI workflows, real database E2E,
|
|
22
|
+
and performance budgets.
|
|
23
|
+
- b06fd0a: Add grammar-neutral optional adapter capability discovery, typed PostgreSQL COPY import and export
|
|
24
|
+
through application-owned `pg-copy-streams`, and typed MySQL LOAD DATA import through mysql2's
|
|
25
|
+
application-owned infile stream. Bulk transfers preserve ordinary `INSERT` parameter evidence,
|
|
26
|
+
enforce structural row stability, apply bounded backpressure, support cancellation and progress,
|
|
27
|
+
and integrate with transaction ownership and conservative connection cleanup.
|
|
28
|
+
- 3050209: Add the dialect contract v4 semantic query evidence foundation. PostgreSQL and MySQL now report operation, dependencies, cardinality, volatility, locking, connection affinity, and required capabilities; compiler results add deterministic query and structural-variant fingerprints and conservatively merged source-mapped semantics. Schema snapshots can record function volatility, and the AST package exposes a neutral statement walker for grammar implementations.
|
|
29
|
+
- 1b054b6: Add an adapter-neutral, redacted database observation lifecycle for queries, cardinality contracts,
|
|
30
|
+
batches, PostgreSQL pipelines, streams, cancellation, and nested transactions. Runtime fingerprints
|
|
31
|
+
correlate with compiler structural variants while SQL, parameter values, connection configuration,
|
|
32
|
+
and driver causes remain excluded by default. Publish the optional OpenTelemetry bridge with current
|
|
33
|
+
database semantic conventions and explicit high-cardinality or exception-capture opt-ins.
|
|
34
|
+
- 87189c3: Add grammar-neutral `all`, `one`, and `maybeOne` execution with exact row types, stable cardinality
|
|
35
|
+
and cancellation errors, explicit adapter capabilities, AbortSignal support, and absolute deadlines.
|
|
36
|
+
The pg and mysql2 adapters conservatively discard interrupted connections, including transaction
|
|
37
|
+
leases, while the existing uncontrolled `execute` path remains unchanged.
|
|
38
|
+
- e654fae: Add opt-in Standard Schema V1 result validation with compile-time output compatibility, immutable
|
|
39
|
+
query attachment, sync and async validators, redacted fingerprinted errors, and consistent decoded-row
|
|
40
|
+
handling across buffered cardinality methods, batches, PostgreSQL pipelines, streams, and transactions.
|
|
41
|
+
- b2ec119: Add opt-in, grammar-neutral query-plan governance with PostgreSQL and MySQL structured EXPLAIN
|
|
42
|
+
adapters, transient application-owned samples, redacted fingerprint-keyed artifacts, absolute and
|
|
43
|
+
comparable regression budgets, explicit uncertainty, CLI capture and review, documentation, and
|
|
44
|
+
performance coverage.
|
|
45
|
+
|
|
46
|
+
### Patch Changes
|
|
47
|
+
|
|
48
|
+
- Updated dependencies [29afc3d]
|
|
49
|
+
- Updated dependencies [3f063f6]
|
|
50
|
+
- Updated dependencies [6a7ae58]
|
|
51
|
+
- Updated dependencies [af27a0e]
|
|
52
|
+
- Updated dependencies [b06fd0a]
|
|
53
|
+
- Updated dependencies [3050209]
|
|
54
|
+
- Updated dependencies [1b054b6]
|
|
55
|
+
- Updated dependencies [b4f1b6e]
|
|
56
|
+
- Updated dependencies [87189c3]
|
|
57
|
+
- Updated dependencies [e654fae]
|
|
58
|
+
- Updated dependencies [b2ec119]
|
|
59
|
+
- @typed-sql/ast@2.0.0-rc.0
|
|
60
|
+
- @typed-sql/core@2.0.0-rc.0
|
|
61
|
+
- @typed-sql/schema@2.0.0-rc.0
|
|
62
|
+
|
|
3
63
|
## 1.0.0
|
|
4
64
|
|
|
5
65
|
### Major Changes
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
The stable MySQL grammar for [typed-sql](https://github.com/Lojhan/typed-sql), including catalog
|
|
4
4
|
introspection, row and parameter inference, type policy, runtime codecs, and an optional
|
|
5
|
-
application-owned `mysql2` adapter.
|
|
5
|
+
application-owned `mysql2` adapter, native live verifier, and structured-plan inspector.
|
|
6
6
|
|
|
7
7
|
```sh
|
|
8
8
|
pnpm add @typed-sql/core @typed-sql/mysql mysql2
|
|
@@ -13,7 +13,8 @@ pnpm add -D @typed-sql/cli typescript@7.0.2
|
|
|
13
13
|
of the grammar.
|
|
14
14
|
|
|
15
15
|
```ts
|
|
16
|
-
import {
|
|
16
|
+
import { requireAdapterCapability } from "@typed-sql/core";
|
|
17
|
+
import { mysqlBulk, sql, typePolicy } from "@typed-sql/mysql";
|
|
17
18
|
import { createMySql2Database } from "@typed-sql/mysql/mysql2";
|
|
18
19
|
|
|
19
20
|
const query = sql`
|
|
@@ -25,6 +26,7 @@ const query = sql`
|
|
|
25
26
|
const database = await createMySql2Database({
|
|
26
27
|
connectionUri: process.env.DATABASE_URL!,
|
|
27
28
|
typePolicy,
|
|
29
|
+
// observer: createOpenTelemetryObserver(),
|
|
28
30
|
});
|
|
29
31
|
|
|
30
32
|
const rows = await database.execute(query);
|
|
@@ -40,14 +42,30 @@ const [selectedAccounts, allAccounts] = await database.batch([accountById(42n),
|
|
|
40
42
|
for await (const account of database.stream(accountById(42n), { batchSize: 500 })) {
|
|
41
43
|
// account retains the query's inferred row type
|
|
42
44
|
}
|
|
45
|
+
|
|
46
|
+
const bulk = requireAdapterCapability(database, mysqlBulk);
|
|
47
|
+
await bulk.loadData(
|
|
48
|
+
(account: { readonly id: bigint; readonly email: string }) =>
|
|
49
|
+
sql`INSERT INTO users (id, email) VALUES (${account.id}, ${account.email})`,
|
|
50
|
+
accounts,
|
|
51
|
+
);
|
|
43
52
|
```
|
|
44
53
|
|
|
45
54
|
The package root exports `sql`, `mysql`, and the MySQL type policy. The `/mysql2` entrypoint exports
|
|
46
|
-
the schema provider
|
|
47
|
-
codecs.
|
|
55
|
+
the schema provider, execution adapter, `createMySql2LiveVerifier`, and `createMySql2PlanInspector`;
|
|
56
|
+
`/runtime` exposes driver-neutral MySQL rendering and codecs.
|
|
57
|
+
|
|
58
|
+
The root also exports `createMySqlRoutedDatabase`, the runtime semantic resolver, and the native
|
|
59
|
+
transaction retry classifier. These compose application-owned adapters without installing or
|
|
60
|
+
creating `mysql2` pools.
|
|
48
61
|
|
|
49
62
|
Read the [MySQL grammar guide](https://github.com/Lojhan/typed-sql/blob/main/docs/dialects/mysql.md),
|
|
50
63
|
[execution guide](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/execution.md),
|
|
64
|
+
[bulk data guide](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/bulk-data.md),
|
|
65
|
+
[observability guide](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/observability.md),
|
|
66
|
+
[live verification guide](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/live-verification.md),
|
|
67
|
+
[query plan governance guide](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/query-plan-governance.md),
|
|
68
|
+
[routing and retry guide](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/routing-and-retries.md),
|
|
51
69
|
[configuration](https://github.com/Lojhan/typed-sql/blob/main/docs/getting-started/configuration.md), and
|
|
52
70
|
[database type mappings](https://github.com/Lojhan/typed-sql/blob/main/docs/reference/type-mappings.md).
|
|
53
71
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ExecutionOptions, type Query } from "@typed-sql/core";
|
|
2
|
+
export interface MySqlBulkProgress {
|
|
3
|
+
readonly rows: number;
|
|
4
|
+
readonly bytes: number;
|
|
5
|
+
}
|
|
6
|
+
export interface MySqlBulkResult extends MySqlBulkProgress {
|
|
7
|
+
}
|
|
8
|
+
export interface MySqlLoadDataOptions extends ExecutionOptions {
|
|
9
|
+
/** Preferred encoded chunk size. One unusually wide row may exceed it. */
|
|
10
|
+
readonly chunkBytes?: number;
|
|
11
|
+
readonly onProgress?: (progress: MySqlBulkProgress) => void;
|
|
12
|
+
}
|
|
13
|
+
export interface MySqlBulkTransport {
|
|
14
|
+
loadData(statement: string, chunks: AsyncIterable<Uint8Array>, options: ExecutionOptions): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export interface MySqlBulkCapability {
|
|
17
|
+
/** Compiles one typed INSERT factory into a client-streamed LOAD DATA LOCAL INFILE operation. */
|
|
18
|
+
loadData<Input, Row, Params extends readonly unknown[]>(rowQuery: (input: Input) => Query<Row, Params>, rows: Iterable<Input> | AsyncIterable<Input>, options?: MySqlLoadDataOptions): Promise<MySqlBulkResult>;
|
|
19
|
+
}
|
|
20
|
+
export declare const mysqlBulk: import("@typed-sql/core").AdapterCapability<MySqlBulkCapability>;
|
|
21
|
+
export declare function createMySqlBulkCapability(transport: MySqlBulkTransport): MySqlBulkCapability;
|
|
22
|
+
//# sourceMappingURL=bulk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk.d.ts","sourceRoot":"","sources":["../../../../src/bulk.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,KAAK,EAGX,MAAM,iBAAiB,CAAC;AAOzB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;CAAG;AAE7D,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1G;AAED,MAAM,WAAW,mBAAmB;IAClC,iGAAiG;IACjG,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,SAAS,OAAO,EAAE,EACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,EAC9C,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,EAC5C,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7B;AAED,eAAO,MAAM,SAAS,kEAAkE,CAAC;AAwGzF,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,kBAAkB,GAAG,mBAAmB,CAqG5F"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { parseStatement } from "@typed-sql/ast";
|
|
2
|
+
import { bindQueryRenderSkeleton, compileQueryRenderSkeleton, defineAdapterCapability, QueryCancelledError, } from "@typed-sql/core";
|
|
3
|
+
const mysqlRenderer = Object.freeze({
|
|
4
|
+
placeholder: () => "?",
|
|
5
|
+
quoteIdentifier: (name) => `\`${name.replaceAll("`", "``")}\``,
|
|
6
|
+
});
|
|
7
|
+
export const mysqlBulk = defineAdapterCapability("mysql.load-data");
|
|
8
|
+
const encoder = new TextEncoder();
|
|
9
|
+
const DEFAULT_CHUNK_BYTES = 64 * 1_024;
|
|
10
|
+
function mysqlTextValue(value) {
|
|
11
|
+
if (typeof value === "string")
|
|
12
|
+
return value;
|
|
13
|
+
if (typeof value === "bigint")
|
|
14
|
+
return value.toString();
|
|
15
|
+
if (typeof value === "boolean")
|
|
16
|
+
return value ? "1" : "0";
|
|
17
|
+
if (typeof value === "number") {
|
|
18
|
+
if (!Number.isFinite(value))
|
|
19
|
+
throw new RangeError("MySQL LOAD DATA cannot encode non-finite numbers");
|
|
20
|
+
return String(value);
|
|
21
|
+
}
|
|
22
|
+
if (value instanceof Date) {
|
|
23
|
+
throw new TypeError("MySQL LOAD DATA text mode does not accept Date values because mysql2 timezone encoding is connection-specific; use ordinary execution");
|
|
24
|
+
}
|
|
25
|
+
if (value instanceof Uint8Array) {
|
|
26
|
+
throw new TypeError("MySQL LOAD DATA text mode does not accept binary values; use ordinary execution");
|
|
27
|
+
}
|
|
28
|
+
if (typeof value === "object" && value !== null) {
|
|
29
|
+
throw new TypeError("MySQL LOAD DATA text mode does not accept structured values because mysql2 parameter encoding is type-specific; use ordinary execution");
|
|
30
|
+
}
|
|
31
|
+
throw new TypeError(`MySQL LOAD DATA cannot encode ${typeof value} values`);
|
|
32
|
+
}
|
|
33
|
+
function escapedField(value) {
|
|
34
|
+
if (value === null || value === undefined)
|
|
35
|
+
return "\\N";
|
|
36
|
+
return mysqlTextValue(value)
|
|
37
|
+
.replaceAll("\\", "\\\\")
|
|
38
|
+
.replaceAll("\0", "\\0")
|
|
39
|
+
.replaceAll("\t", "\\t")
|
|
40
|
+
.replaceAll("\n", "\\n")
|
|
41
|
+
.replaceAll("\r", "\\r");
|
|
42
|
+
}
|
|
43
|
+
function encodedRow(values) {
|
|
44
|
+
return encoder.encode(`${values.map(escapedField).join("\t")}\n`);
|
|
45
|
+
}
|
|
46
|
+
function chunkSize(value) {
|
|
47
|
+
const resolved = value ?? DEFAULT_CHUNK_BYTES;
|
|
48
|
+
if (!Number.isSafeInteger(resolved) || resolved <= 0) {
|
|
49
|
+
throw new RangeError("MySQL LOAD DATA chunkBytes must be a positive safe integer");
|
|
50
|
+
}
|
|
51
|
+
return resolved;
|
|
52
|
+
}
|
|
53
|
+
function loadDataStatement(text, parameterCount) {
|
|
54
|
+
const statement = parseStatement(text, { syntax: "mysql" });
|
|
55
|
+
if (statement.kind !== "insert" ||
|
|
56
|
+
statement.with !== undefined ||
|
|
57
|
+
statement.table.alias !== undefined ||
|
|
58
|
+
statement.source.kind !== "values" ||
|
|
59
|
+
statement.source.rows.length !== 1 ||
|
|
60
|
+
statement.returning.length !== 0 ||
|
|
61
|
+
statement.columns.length === 0) {
|
|
62
|
+
throw new TypeError("MySQL LOAD DATA requires a plain single-row INSERT with an explicit column list and one VALUES row");
|
|
63
|
+
}
|
|
64
|
+
const values = statement.source.rows[0];
|
|
65
|
+
if (values.length !== statement.columns.length ||
|
|
66
|
+
values.length !== parameterCount ||
|
|
67
|
+
values.some((expression, index) => expression.kind !== "parameter" || expression.index !== index + 1)) {
|
|
68
|
+
throw new TypeError("MySQL LOAD DATA INSERT values must be one ordered parameter per target column");
|
|
69
|
+
}
|
|
70
|
+
const quote = mysqlRenderer.quoteIdentifier;
|
|
71
|
+
const table = `${statement.table.schema === undefined ? "" : `${quote(statement.table.schema.name)}.`}${quote(statement.table.name.name)}`;
|
|
72
|
+
const columns = statement.columns.map(({ name }) => quote(name)).join(", ");
|
|
73
|
+
return `LOAD DATA LOCAL INFILE 'typed-sql-stream' INTO TABLE ${table} CHARACTER SET utf8mb4 FIELDS TERMINATED BY '\\t' ESCAPED BY '\\\\' LINES TERMINATED BY '\\n' (${columns})`;
|
|
74
|
+
}
|
|
75
|
+
function cancelled(signal) {
|
|
76
|
+
if (signal?.aborted === true)
|
|
77
|
+
throw new QueryCancelledError("signal", { cause: signal.reason });
|
|
78
|
+
}
|
|
79
|
+
function asyncIterator(values) {
|
|
80
|
+
if (Symbol.asyncIterator in Object(values))
|
|
81
|
+
return values[Symbol.asyncIterator]();
|
|
82
|
+
const iterator = values[Symbol.iterator]();
|
|
83
|
+
return {
|
|
84
|
+
next: async () => iterator.next(),
|
|
85
|
+
...(iterator.return === undefined ? {} : { return: async () => iterator.return() }),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function concatenate(chunks, length) {
|
|
89
|
+
if (chunks.length === 1)
|
|
90
|
+
return chunks[0];
|
|
91
|
+
const result = new Uint8Array(length);
|
|
92
|
+
let offset = 0;
|
|
93
|
+
for (const chunk of chunks) {
|
|
94
|
+
result.set(chunk, offset);
|
|
95
|
+
offset += chunk.byteLength;
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
export function createMySqlBulkCapability(transport) {
|
|
100
|
+
return Object.freeze({
|
|
101
|
+
async loadData(rowQuery, rows, options = {}) {
|
|
102
|
+
const preferredChunkBytes = chunkSize(options.chunkBytes);
|
|
103
|
+
cancelled(options.signal);
|
|
104
|
+
const iterator = asyncIterator(rows);
|
|
105
|
+
let iteratorClosed = false;
|
|
106
|
+
const closeIterator = async () => {
|
|
107
|
+
if (iteratorClosed || iterator.return === undefined)
|
|
108
|
+
return;
|
|
109
|
+
iteratorClosed = true;
|
|
110
|
+
await iterator.return();
|
|
111
|
+
};
|
|
112
|
+
let first;
|
|
113
|
+
try {
|
|
114
|
+
first = await iterator.next();
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
try {
|
|
118
|
+
await closeIterator();
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
/* Preserve the producer failure. */
|
|
122
|
+
}
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
if (first.done === true)
|
|
126
|
+
return Object.freeze({ rows: 0, bytes: 0 });
|
|
127
|
+
let firstQuery;
|
|
128
|
+
let compiled;
|
|
129
|
+
let statement;
|
|
130
|
+
try {
|
|
131
|
+
firstQuery = rowQuery(first.value);
|
|
132
|
+
compiled = compileQueryRenderSkeleton(firstQuery, mysqlRenderer);
|
|
133
|
+
statement = loadDataStatement(compiled.rendered.text, compiled.rendered.values.length);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
try {
|
|
137
|
+
await closeIterator();
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
/* Preserve the query compilation failure. */
|
|
141
|
+
}
|
|
142
|
+
throw error;
|
|
143
|
+
}
|
|
144
|
+
let rowCount = 0;
|
|
145
|
+
let byteCount = 0;
|
|
146
|
+
let inputComplete = false;
|
|
147
|
+
const chunks = (async function* () {
|
|
148
|
+
let pending = [];
|
|
149
|
+
let pendingBytes = 0;
|
|
150
|
+
let current = first;
|
|
151
|
+
try {
|
|
152
|
+
while (current.done !== true) {
|
|
153
|
+
cancelled(options.signal);
|
|
154
|
+
const query = rowCount === 0 ? firstQuery : rowQuery(current.value);
|
|
155
|
+
const rendered = rowCount === 0 ? compiled.rendered : bindQueryRenderSkeleton(query, compiled.skeleton);
|
|
156
|
+
if (rendered === undefined)
|
|
157
|
+
throw new TypeError("MySQL LOAD DATA row query changed its structural SQL shape");
|
|
158
|
+
const encoded = encodedRow(rendered.values);
|
|
159
|
+
if (pendingBytes > 0 && pendingBytes + encoded.byteLength > preferredChunkBytes) {
|
|
160
|
+
const chunk = concatenate(pending, pendingBytes);
|
|
161
|
+
byteCount += chunk.byteLength;
|
|
162
|
+
options.onProgress?.(Object.freeze({ rows: rowCount, bytes: byteCount }));
|
|
163
|
+
yield chunk;
|
|
164
|
+
pending = [];
|
|
165
|
+
pendingBytes = 0;
|
|
166
|
+
}
|
|
167
|
+
pending.push(encoded);
|
|
168
|
+
pendingBytes += encoded.byteLength;
|
|
169
|
+
rowCount += 1;
|
|
170
|
+
current = await iterator.next();
|
|
171
|
+
}
|
|
172
|
+
inputComplete = true;
|
|
173
|
+
if (pendingBytes > 0) {
|
|
174
|
+
const chunk = concatenate(pending, pendingBytes);
|
|
175
|
+
byteCount += chunk.byteLength;
|
|
176
|
+
options.onProgress?.(Object.freeze({ rows: rowCount, bytes: byteCount }));
|
|
177
|
+
yield chunk;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
if (current.done !== true)
|
|
182
|
+
await closeIterator();
|
|
183
|
+
}
|
|
184
|
+
})();
|
|
185
|
+
try {
|
|
186
|
+
await transport.loadData(statement, chunks, options);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
if (!inputComplete) {
|
|
190
|
+
try {
|
|
191
|
+
await closeIterator();
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
/* Preserve the transport, producer, or database failure. */
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
throw error;
|
|
198
|
+
}
|
|
199
|
+
if (!inputComplete)
|
|
200
|
+
await closeIterator();
|
|
201
|
+
return Object.freeze({ rows: rowCount, bytes: byteCount });
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=bulk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk.js","sourceRoot":"","sources":["../../../../src/bulk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EAGvB,mBAAmB,GAEpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,aAAa,GAAgB,MAAM,CAAC,MAAM,CAAC;IAC/C,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG;IACtB,eAAe,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI;CACvE,CAAC,CAAC;AA4BH,MAAM,CAAC,MAAM,SAAS,GAAG,uBAAuB,CAAsB,iBAAiB,CAAC,CAAC;AAEzF,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAClC,MAAM,mBAAmB,GAAG,EAAE,GAAG,KAAK,CAAC;AAEvC,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAC;QACtG,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CACjB,uIAAuI,CACxI,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,SAAS,CAAC,iFAAiF,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,SAAS,CACjB,wIAAwI,CACzI,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,iCAAiC,OAAO,KAAK,SAAS,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,cAAc,CAAC,KAAK,CAAC;SACzB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;SACxB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;SACvB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;SACvB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;SACvB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,UAAU,CAAC,MAA0B;IAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,KAAyB;IAC1C,MAAM,QAAQ,GAAG,KAAK,IAAI,mBAAmB,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,cAAsB;IAC7D,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,IACE,SAAS,CAAC,IAAI,KAAK,QAAQ;QAC3B,SAAS,CAAC,IAAI,KAAK,SAAS;QAC5B,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS;QACnC,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;QAClC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAClC,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAChC,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAC9B,CAAC;QACD,MAAM,IAAI,SAAS,CACjB,oGAAoG,CACrG,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;IACzC,IACE,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,OAAO,CAAC,MAAM;QAC1C,MAAM,CAAC,MAAM,KAAK,cAAc;QAChC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,WAAW,IAAI,UAAU,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC,EACrG,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,+EAA+E,CAAC,CAAC;IACvG,CAAC;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,eAAe,CAAC;IAC5C,MAAM,KAAK,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3I,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,OAAO,wDAAwD,KAAK,kGAAkG,OAAO,GAAG,CAAC;AACnL,CAAC;AAED,SAAS,SAAS,CAAC,MAA+B;IAChD,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI;QAAE,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,aAAa,CAAQ,MAA8C;IAC1E,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC;QAAE,OAAQ,MAA+B,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;IAC5G,MAAM,QAAQ,GAAI,MAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IAChE,OAAO;QACL,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE;QACjC,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAO,EAAE,EAAE,CAAC;KACrF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAA6B,EAAE,MAAc;IAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;IAC7B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,SAA6B;IACrE,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,CAAC,QAAQ,CACZ,QAA8C,EAC9C,IAA4C,EAC5C,OAAO,GAAyB,EAAE;YAElC,MAAM,mBAAmB,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC1D,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,MAAM,aAAa,GAAG,KAAK,IAAmB,EAAE;gBAC9C,IAAI,cAAc,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;oBAAE,OAAO;gBAC5D,cAAc,GAAG,IAAI,CAAC;gBACtB,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC,CAAC;YACF,IAAI,KAA4B,CAAC;YACjC,IAAI,CAAC;gBACH,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,aAAa,EAAE,CAAC;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACP,oCAAoC;gBACtC,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAErE,IAAI,UAA8B,CAAC;YACnC,IAAI,QAAoE,CAAC;YACzE,IAAI,SAAiB,CAAC;YACtB,IAAI,CAAC;gBACH,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACnC,QAAQ,GAAG,0BAA0B,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;gBACjE,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,aAAa,EAAE,CAAC;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACP,6CAA6C;gBAC/C,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,aAAa,GAAG,KAAK,CAAC;YAE1B,MAAM,MAAM,GAAG,CAAC,KAAK,SAAS,CAAC;gBAC7B,IAAI,OAAO,GAAiB,EAAE,CAAC;gBAC/B,IAAI,YAAY,GAAG,CAAC,CAAC;gBACrB,IAAI,OAAO,GAA0B,KAAK,CAAC;gBAC3C,IAAI,CAAC;oBACH,OAAO,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;wBAC7B,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC1B,MAAM,KAAK,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACpE,MAAM,QAAQ,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBACxG,IAAI,QAAQ,KAAK,SAAS;4BACxB,MAAM,IAAI,SAAS,CAAC,4DAA4D,CAAC,CAAC;wBACpF,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;wBAC5C,IAAI,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,OAAO,CAAC,UAAU,GAAG,mBAAmB,EAAE,CAAC;4BAChF,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;4BACjD,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC;4BAC9B,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;4BAC1E,MAAM,KAAK,CAAC;4BACZ,OAAO,GAAG,EAAE,CAAC;4BACb,YAAY,GAAG,CAAC,CAAC;wBACnB,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBACtB,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC;wBACnC,QAAQ,IAAI,CAAC,CAAC;wBACd,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAClC,CAAC;oBACD,aAAa,GAAG,IAAI,CAAC;oBACrB,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;wBACrB,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;wBACjD,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC;wBAC9B,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;wBAC1E,MAAM,KAAK,CAAC;oBACd,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;wBAAE,MAAM,aAAa,EAAE,CAAC;gBACnD,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;YAEL,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,IAAI,CAAC;wBACH,MAAM,aAAa,EAAE,CAAC;oBACxB,CAAC;oBAAC,MAAM,CAAC;wBACP,4DAA4D;oBAC9D,CAAC;gBACH,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,IAAI,CAAC,aAAa;gBAAE,MAAM,aAAa,EAAE,CAAC;YAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7D,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { type DialectPlugin } from "@typed-sql/core";
|
|
2
2
|
import { type SchemaSnapshot } from "@typed-sql/schema";
|
|
3
3
|
import { type MySqlTypePolicy } from "./type-policy.js";
|
|
4
|
-
export
|
|
4
|
+
export type { MySqlBulkCapability, MySqlBulkProgress, MySqlBulkResult, MySqlLoadDataOptions, } from "./bulk.js";
|
|
5
|
+
export { mysqlBulk } from "./bulk.js";
|
|
6
|
+
export { MYSQL_DIALECT_VERSION } from "./version.js";
|
|
5
7
|
export type MySqlSchemaSnapshot = SchemaSnapshot & {
|
|
6
8
|
readonly dialect: "mysql";
|
|
7
9
|
};
|
|
@@ -14,6 +16,8 @@ export type { SchemaSnapshot } from "@typed-sql/schema";
|
|
|
14
16
|
export { parseSchemaSnapshot } from "@typed-sql/schema";
|
|
15
17
|
export type { MySqlQueryable, MySqlSchemaProviderOptions } from "./provider.js";
|
|
16
18
|
export { introspectMySql, MySqlSchemaProvider, mysqlCatalogQueries } from "./provider.js";
|
|
19
|
+
export type { MySqlQuerySemanticResolverOptions, MySqlRoutedDatabaseOptions } from "./routing.js";
|
|
20
|
+
export { createMySqlQuerySemanticResolver, createMySqlRoutedDatabase, isMySqlRetryableTransactionError, } from "./routing.js";
|
|
17
21
|
export type { MySqlTypePolicy } from "./type-policy.js";
|
|
18
22
|
export { defaultMySqlTypePolicy, defaultMySqlTypePolicy as typePolicy, isKnownMySqlType, mapMySqlType, } from "./type-policy.js";
|
|
19
23
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,aAAa,EAAyB,MAAM,iBAAiB,CAAC;AACtG,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG7E,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGhF,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAEjF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;CACvC;AAyBD,wBAAgB,KAAK,CAAC,OAAO,GAAE,mBAAwB,GAAG,aAAa,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAsC5G;AAED,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC1F,YAAY,EAAE,iCAAiC,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EACL,gCAAgC,EAChC,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,IAAI,UAAU,EACpC,gBAAgB,EAChB,YAAY,GACb,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import { parseStatement, SqlParseError } from "@typed-sql/ast";
|
|
2
|
-
import { DIALECT_CONTRACT_VERSION } from "@typed-sql/core";
|
|
2
|
+
import { DIALECT_CONTRACT_VERSION, unknownQuerySemantics } from "@typed-sql/core";
|
|
3
3
|
import { parseSchemaSnapshot } from "@typed-sql/schema";
|
|
4
4
|
import { resolveMySqlStatement } from "./resolver.js";
|
|
5
|
+
import { analyzeMySqlSemantics } from "./semantics.js";
|
|
5
6
|
import { defaultMySqlTypePolicy } from "./type-policy.js";
|
|
6
|
-
|
|
7
|
+
import { MYSQL_DIALECT_VERSION } from "./version.js";
|
|
8
|
+
export { mysqlBulk } from "./bulk.js";
|
|
9
|
+
export { MYSQL_DIALECT_VERSION } from "./version.js";
|
|
7
10
|
const capabilities = Object.freeze({
|
|
8
11
|
aggregateFilter: false,
|
|
9
12
|
arrays: false,
|
|
10
13
|
distinctOn: false,
|
|
11
14
|
fullJoins: false,
|
|
15
|
+
lockingReads: true,
|
|
12
16
|
recursiveCtes: false,
|
|
13
17
|
returning: false,
|
|
14
18
|
setOperations: false,
|
|
@@ -41,7 +45,14 @@ export function mysql(options = {}) {
|
|
|
41
45
|
},
|
|
42
46
|
analyze(sql, snapshot, policy = defaultTypePolicy) {
|
|
43
47
|
try {
|
|
44
|
-
|
|
48
|
+
const statement = parseStatement(sql, { syntax: "mysql" });
|
|
49
|
+
const resolved = resolveMySqlStatement(statement, snapshot, { typePolicy: policy });
|
|
50
|
+
return {
|
|
51
|
+
...resolved,
|
|
52
|
+
semantics: resolved.diagnostics.some(({ severity }) => severity === "error")
|
|
53
|
+
? unknownQuerySemantics(statement.range, "MySQL semantic analysis reported an error.")
|
|
54
|
+
: analyzeMySqlSemantics(statement, snapshot),
|
|
55
|
+
};
|
|
45
56
|
}
|
|
46
57
|
catch (error) {
|
|
47
58
|
if (!(error instanceof SqlParseError))
|
|
@@ -50,6 +61,7 @@ export function mysql(options = {}) {
|
|
|
50
61
|
columns: [],
|
|
51
62
|
parameters: [],
|
|
52
63
|
diagnostics: [{ code: error.code, message: error.message, severity: "error", range: error.range }],
|
|
64
|
+
semantics: unknownQuerySemantics(error.range, "The SQL could not be parsed by the MySQL grammar."),
|
|
53
65
|
};
|
|
54
66
|
}
|
|
55
67
|
},
|
|
@@ -59,5 +71,6 @@ export function mysql(options = {}) {
|
|
|
59
71
|
export { sql } from "@typed-sql/core";
|
|
60
72
|
export { parseSchemaSnapshot } from "@typed-sql/schema";
|
|
61
73
|
export { introspectMySql, MySqlSchemaProvider, mysqlCatalogQueries } from "./provider.js";
|
|
74
|
+
export { createMySqlQuerySemanticResolver, createMySqlRoutedDatabase, isMySqlRetryableTransactionError, } from "./routing.js";
|
|
62
75
|
export { defaultMySqlTypePolicy, defaultMySqlTypePolicy as typePolicy, isKnownMySqlType, mapMySqlType, } from "./type-policy.js";
|
|
63
76
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAsB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import type { DatabaseObserver, LiveQueryVerifier, QueryPlanInspector } from "@typed-sql/core";
|
|
1
2
|
import type { Pool, PoolOptions } from "mysql2/promise";
|
|
2
3
|
import type { MySqlSchemaSnapshot } from "./index.js";
|
|
3
4
|
import { type MySqlQueryable } from "./provider.js";
|
|
4
5
|
import { type MySqlDatabase, type MySqlPoolLike } from "./runtime.js";
|
|
5
|
-
import type
|
|
6
|
+
import { type MySqlTypePolicy } from "./type-policy.js";
|
|
6
7
|
export interface MySql2Options {
|
|
7
8
|
readonly connectionUri: string | (() => string | Promise<string>);
|
|
8
9
|
readonly poolConfig?: Omit<PoolOptions, "uri" | "supportBigNumbers" | "bigNumberStrings" | "decimalNumbers" | "dateStrings" | "jsonStrings" | "typeCast" | "rowsAsArray">;
|
|
@@ -10,6 +11,7 @@ export interface MySql2Options {
|
|
|
10
11
|
readonly decimal?: (value: string) => unknown;
|
|
11
12
|
/** Test or host-injected loader. Applications normally leave this unset. */
|
|
12
13
|
readonly driverImporter?: () => Promise<typeof import("mysql2/promise")>;
|
|
14
|
+
readonly observer?: DatabaseObserver;
|
|
13
15
|
}
|
|
14
16
|
export interface MySql2SchemaProviderOptions {
|
|
15
17
|
readonly connectionUri?: string | (() => string | Promise<string>);
|
|
@@ -20,10 +22,67 @@ export interface MySql2SchemaProviderOptions {
|
|
|
20
22
|
/** Test or host-injected loader. Applications normally leave this unset. */
|
|
21
23
|
readonly driverImporter?: () => Promise<typeof import("mysql2/promise")>;
|
|
22
24
|
}
|
|
25
|
+
interface MySql2VerificationField {
|
|
26
|
+
readonly name?: string;
|
|
27
|
+
readonly orgName?: string;
|
|
28
|
+
readonly table?: string;
|
|
29
|
+
readonly orgTable?: string;
|
|
30
|
+
readonly db?: string;
|
|
31
|
+
readonly schema?: string;
|
|
32
|
+
readonly columnType?: number;
|
|
33
|
+
readonly type?: number;
|
|
34
|
+
readonly columnLength?: number;
|
|
35
|
+
readonly length?: number;
|
|
36
|
+
readonly flags?: number | readonly string[];
|
|
37
|
+
}
|
|
38
|
+
interface MySql2VerificationStatement {
|
|
39
|
+
readonly statement?: {
|
|
40
|
+
readonly columns?: readonly MySql2VerificationField[];
|
|
41
|
+
readonly parameters?: readonly MySql2VerificationField[];
|
|
42
|
+
};
|
|
43
|
+
close(): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
export interface MySql2LiveVerifierConnection {
|
|
46
|
+
prepare(sql: string): Promise<MySql2VerificationStatement>;
|
|
47
|
+
release(): void;
|
|
48
|
+
}
|
|
49
|
+
export interface MySql2LiveVerifierPool {
|
|
50
|
+
query<Row extends Record<string, unknown>[]>(sql: string): Promise<readonly [Row, unknown]>;
|
|
51
|
+
getConnection(): Promise<MySql2LiveVerifierConnection>;
|
|
52
|
+
end(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
export interface MySql2LiveVerifierOptions {
|
|
55
|
+
readonly connectionUri?: string | (() => string | Promise<string>);
|
|
56
|
+
readonly pool?: MySql2LiveVerifierPool;
|
|
57
|
+
readonly poolConfig?: Omit<PoolOptions, "uri">;
|
|
58
|
+
readonly typePolicy?: MySqlTypePolicy;
|
|
59
|
+
readonly schema?: MySqlSchemaSnapshot;
|
|
60
|
+
readonly driverImporter?: () => Promise<typeof import("mysql2/promise")>;
|
|
61
|
+
}
|
|
62
|
+
export interface MySql2PlanInspectorConnection {
|
|
63
|
+
query<Row extends Record<string, unknown>[]>(sql: string, values?: readonly unknown[]): Promise<readonly [Row, unknown]>;
|
|
64
|
+
release(): void;
|
|
65
|
+
}
|
|
66
|
+
export interface MySql2PlanInspectorPool {
|
|
67
|
+
query<Row extends Record<string, unknown>[]>(sql: string): Promise<readonly [Row, unknown]>;
|
|
68
|
+
getConnection(): Promise<MySql2PlanInspectorConnection>;
|
|
69
|
+
end(): Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
export interface MySql2PlanInspectorOptions {
|
|
72
|
+
readonly connectionUri?: string | (() => string | Promise<string>);
|
|
73
|
+
readonly pool?: MySql2PlanInspectorPool;
|
|
74
|
+
readonly poolConfig?: Omit<PoolOptions, "uri">;
|
|
75
|
+
readonly driverImporter?: () => Promise<typeof import("mysql2/promise")>;
|
|
76
|
+
}
|
|
23
77
|
export declare function loadMySql2Driver(importer?: () => Promise<typeof import("mysql2/promise")>): Promise<typeof import("mysql2/promise")>;
|
|
78
|
+
/** Creates a lazy adapter over MySQL's binary COM_STMT_PREPARE metadata. */
|
|
79
|
+
export declare function createMySql2LiveVerifier(options: MySql2LiveVerifierOptions): LiveQueryVerifier;
|
|
80
|
+
/** Creates a lazy, non-executing adapter over MySQL structured EXPLAIN. */
|
|
81
|
+
export declare function createMySql2PlanInspector(options: MySql2PlanInspectorOptions): QueryPlanInspector;
|
|
24
82
|
export declare function adaptMySql2Pool(pool: Pool): MySqlPoolLike;
|
|
25
83
|
export declare function createMySql2Database(options: MySql2Options): Promise<MySqlDatabase>;
|
|
26
84
|
export declare function mysql2(options: MySql2SchemaProviderOptions): {
|
|
27
85
|
introspect(): Promise<MySqlSchemaSnapshot>;
|
|
28
86
|
};
|
|
87
|
+
export {};
|
|
29
88
|
//# sourceMappingURL=mysql2.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mysql2.d.ts","sourceRoot":"","sources":["../../../../src/mysql2.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mysql2.d.ts","sourceRoot":"","sources":["../../../../src/mysql2.ts"],"names":[],"mappings":"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"}
|