kysely 0.19.10 → 0.20.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.
- package/README.md +52 -4
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +10 -0
- package/dist/cjs/dialect/mysql/mysql-driver.d.ts +1 -0
- package/dist/cjs/dialect/mysql/mysql-driver.js +25 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +5 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +16 -0
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +29 -0
- package/dist/cjs/dialect/postgres/postgres-driver.d.ts +6 -2
- package/dist/cjs/dialect/postgres/postgres-driver.js +24 -2
- package/dist/cjs/dialect/postgres/postgres-introspector.js +7 -1
- package/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts +1 -3
- package/dist/cjs/dialect/postgres/postgres-query-compiler.js +3 -8
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +3 -0
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +3 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +10 -0
- package/dist/cjs/driver/database-connection.d.ts +1 -0
- package/dist/cjs/driver/dummy-driver.js +3 -0
- package/dist/cjs/index.d.ts +6 -0
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/operation-node/create-table-node.d.ts +9 -2
- package/dist/cjs/operation-node/create-table-node.js +18 -1
- package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/delete-query-node.js +6 -0
- package/dist/cjs/operation-node/explain-node.d.ts +16 -0
- package/dist/cjs/operation-node/explain-node.js +19 -0
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +2 -2
- package/dist/cjs/operation-node/insert-query-node.d.ts +4 -1
- package/dist/cjs/operation-node/insert-query-node.js +2 -1
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +15 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/references-node.d.ts +3 -1
- package/dist/cjs/operation-node/references-node.js +8 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/select-query-node.js +6 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/update-query-node.js +6 -0
- package/dist/cjs/parser/on-commit-action-parse.d.ts +2 -0
- package/dist/cjs/parser/on-commit-action-parse.js +11 -0
- package/dist/cjs/parser/on-modify-action-parser.d.ts +2 -0
- package/dist/cjs/parser/on-modify-action-parser.js +11 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +19 -1
- package/dist/cjs/query-builder/delete-query-builder.js +24 -0
- package/dist/cjs/query-builder/function-builder.d.ts +3 -3
- package/dist/cjs/query-builder/insert-query-builder.d.ts +21 -3
- package/dist/cjs/query-builder/insert-query-builder.js +26 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +65 -1
- package/dist/cjs/query-builder/select-query-builder.js +79 -4
- package/dist/cjs/query-builder/update-query-builder.d.ts +20 -1
- package/dist/cjs/query-builder/update-query-builder.js +25 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +7 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +75 -2
- package/dist/cjs/query-creator.d.ts +27 -0
- package/dist/cjs/query-creator.js +33 -0
- package/dist/cjs/query-executor/query-executor-base.d.ts +6 -0
- package/dist/cjs/query-executor/query-executor-base.js +19 -0
- package/dist/cjs/query-executor/query-executor.d.ts +11 -0
- package/dist/cjs/raw-builder/sql.d.ts +96 -96
- package/dist/cjs/raw-builder/sql.js +0 -96
- package/dist/cjs/schema/column-definition-builder.js +3 -2
- package/dist/cjs/schema/create-table-builder.d.ts +60 -6
- package/dist/cjs/schema/create-table-builder.js +72 -7
- package/dist/cjs/schema/create-type-builder.d.ts +9 -0
- package/dist/cjs/schema/create-type-builder.js +9 -0
- package/dist/cjs/schema/foreign-key-constraint-builder.js +3 -2
- package/dist/cjs/util/deferred.d.ts +7 -0
- package/dist/cjs/util/deferred.js +28 -0
- package/dist/cjs/util/explainable.d.ts +5 -0
- package/dist/cjs/util/explainable.js +2 -0
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +10 -0
- package/dist/esm/dialect/mysql/mysql-driver.d.ts +1 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +25 -0
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +5 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +16 -0
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +29 -0
- package/dist/esm/dialect/postgres/postgres-driver.d.ts +6 -2
- package/dist/esm/dialect/postgres/postgres-driver.js +24 -2
- package/dist/esm/dialect/postgres/postgres-introspector.js +7 -1
- package/dist/esm/dialect/postgres/postgres-query-compiler.d.ts +1 -3
- package/dist/esm/dialect/postgres/postgres-query-compiler.js +3 -8
- package/dist/esm/dialect/sqlite/sqlite-driver.js +3 -0
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +3 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +10 -0
- package/dist/esm/driver/database-connection.d.ts +1 -0
- package/dist/esm/driver/dummy-driver.js +3 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/operation-node/create-table-node.d.ts +9 -2
- package/dist/esm/operation-node/create-table-node.js +17 -0
- package/dist/esm/operation-node/data-type-node.d.ts +1 -1
- package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
- package/dist/esm/operation-node/delete-query-node.js +6 -0
- package/dist/esm/operation-node/explain-node.d.ts +16 -0
- package/dist/esm/operation-node/explain-node.js +17 -0
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +2 -2
- package/dist/esm/operation-node/insert-query-node.d.ts +4 -1
- package/dist/esm/operation-node/insert-query-node.js +2 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +15 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/references-node.d.ts +3 -1
- package/dist/esm/operation-node/references-node.js +7 -0
- package/dist/esm/operation-node/select-query-node.d.ts +3 -0
- package/dist/esm/operation-node/select-query-node.js +6 -0
- package/dist/esm/operation-node/update-query-node.d.ts +3 -0
- package/dist/esm/operation-node/update-query-node.js +6 -0
- package/dist/esm/parser/on-commit-action-parse.d.ts +2 -0
- package/dist/esm/parser/on-commit-action-parse.js +8 -0
- package/dist/esm/parser/on-modify-action-parser.d.ts +2 -0
- package/dist/esm/parser/on-modify-action-parser.js +8 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +19 -1
- package/dist/esm/query-builder/delete-query-builder.js +24 -0
- package/dist/esm/query-builder/function-builder.d.ts +3 -3
- package/dist/esm/query-builder/insert-query-builder.d.ts +21 -3
- package/dist/esm/query-builder/insert-query-builder.js +26 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +65 -1
- package/dist/esm/query-builder/select-query-builder.js +79 -4
- package/dist/esm/query-builder/update-query-builder.d.ts +20 -1
- package/dist/esm/query-builder/update-query-builder.js +25 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +7 -0
- package/dist/esm/query-compiler/default-query-compiler.js +75 -2
- package/dist/esm/query-creator.d.ts +27 -0
- package/dist/esm/query-creator.js +33 -0
- package/dist/esm/query-executor/query-executor-base.d.ts +6 -0
- package/dist/esm/query-executor/query-executor-base.js +19 -0
- package/dist/esm/query-executor/query-executor.d.ts +11 -0
- package/dist/esm/raw-builder/sql.d.ts +96 -96
- package/dist/esm/raw-builder/sql.js +0 -96
- package/dist/esm/schema/column-definition-builder.js +3 -2
- package/dist/esm/schema/create-table-builder.d.ts +60 -6
- package/dist/esm/schema/create-table-builder.js +72 -7
- package/dist/esm/schema/create-type-builder.d.ts +9 -0
- package/dist/esm/schema/create-type-builder.js +9 -0
- package/dist/esm/schema/foreign-key-constraint-builder.js +3 -2
- package/dist/esm/util/deferred.d.ts +7 -0
- package/dist/esm/util/deferred.js +25 -0
- package/dist/esm/util/explainable.d.ts +5 -0
- package/dist/esm/util/explainable.js +2 -0
- package/package.json +7 -2
|
@@ -121,6 +121,31 @@ class MysqlConnection {
|
|
|
121
121
|
});
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
|
+
async *streamQuery(compiledQuery, chunkSize) {
|
|
125
|
+
const stream = this.#rawConnection
|
|
126
|
+
.query(compiledQuery.sql, compiledQuery.parameters)
|
|
127
|
+
.stream({
|
|
128
|
+
objectMode: true,
|
|
129
|
+
});
|
|
130
|
+
try {
|
|
131
|
+
for await (const row of stream) {
|
|
132
|
+
yield {
|
|
133
|
+
rows: [row],
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (ex) {
|
|
138
|
+
if (ex &&
|
|
139
|
+
typeof ex === 'object' &&
|
|
140
|
+
'code' in ex &&
|
|
141
|
+
// @ts-ignore
|
|
142
|
+
ex.code === 'ERR_STREAM_PREMATURE_CLOSE') {
|
|
143
|
+
// Most likely because of https://github.com/mysqljs/mysql/blob/master/lib/protocol/sequences/Query.js#L220
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
throw ex;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
124
149
|
[PRIVATE_RELEASE_METHOD]() {
|
|
125
150
|
this.#rawConnection.release();
|
|
126
151
|
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
2
2
|
export declare class MysqlQueryCompiler extends DefaultQueryCompiler {
|
|
3
3
|
protected getCurrentParameterPlaceholder(): string;
|
|
4
|
+
protected getLeftExplainOptionsWrapper(): string;
|
|
5
|
+
protected getExplainOptionAssignment(): string;
|
|
6
|
+
protected getExplainOptionsDelimiter(): string;
|
|
7
|
+
protected getRightExplainOptionsWrapper(): string;
|
|
4
8
|
protected getLeftIdentifierWrapper(): string;
|
|
5
9
|
protected getRightIdentifierWrapper(): string;
|
|
10
|
+
protected sanitizeIdentifier(identifier: string): string;
|
|
6
11
|
}
|
|
@@ -1,13 +1,29 @@
|
|
|
1
1
|
/// <reference types="./mysql-query-compiler.d.ts" />
|
|
2
2
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
3
|
+
const ID_WRAP_REGEX = /`/g;
|
|
3
4
|
export class MysqlQueryCompiler extends DefaultQueryCompiler {
|
|
4
5
|
getCurrentParameterPlaceholder() {
|
|
5
6
|
return '?';
|
|
6
7
|
}
|
|
8
|
+
getLeftExplainOptionsWrapper() {
|
|
9
|
+
return '';
|
|
10
|
+
}
|
|
11
|
+
getExplainOptionAssignment() {
|
|
12
|
+
return '=';
|
|
13
|
+
}
|
|
14
|
+
getExplainOptionsDelimiter() {
|
|
15
|
+
return ' ';
|
|
16
|
+
}
|
|
17
|
+
getRightExplainOptionsWrapper() {
|
|
18
|
+
return '';
|
|
19
|
+
}
|
|
7
20
|
getLeftIdentifierWrapper() {
|
|
8
21
|
return '`';
|
|
9
22
|
}
|
|
10
23
|
getRightIdentifierWrapper() {
|
|
11
24
|
return '`';
|
|
12
25
|
}
|
|
26
|
+
sanitizeIdentifier(identifier) {
|
|
27
|
+
return identifier.replace(ID_WRAP_REGEX, '``');
|
|
28
|
+
}
|
|
13
29
|
}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { DatabaseConnection } from '../../driver/database-connection.js';
|
|
2
|
+
export declare type PostgresCursorConstructor = new <T>(sql: string, parameters: readonly unknown[]) => PostgresCursor<T>;
|
|
3
|
+
export declare type PostgresCursor<T> = {
|
|
4
|
+
state: 'initialized' | 'idle' | 'submitted' | 'busy';
|
|
5
|
+
read: (rowsCount: number) => Promise<T[]>;
|
|
6
|
+
} | {
|
|
7
|
+
state: 'done';
|
|
8
|
+
} | {
|
|
9
|
+
state: 'error';
|
|
10
|
+
_error: Error;
|
|
11
|
+
};
|
|
2
12
|
/**
|
|
3
13
|
* Config for the PostgreSQL dialect.
|
|
4
14
|
*/
|
|
@@ -11,6 +21,19 @@ export interface PostgresDialectConfig {
|
|
|
11
21
|
* https://node-postgres.com/api/pool
|
|
12
22
|
*/
|
|
13
23
|
pool: PostgresPool | (() => Promise<PostgresPool>);
|
|
24
|
+
/**
|
|
25
|
+
* https://github.com/brianc/node-postgres/tree/master/packages/pg-cursor
|
|
26
|
+
* ```ts
|
|
27
|
+
* import Cursor from 'pg-cursor'
|
|
28
|
+
* // or
|
|
29
|
+
* import * as Cursor from 'pg-cursor'
|
|
30
|
+
*
|
|
31
|
+
* new PostgresDialect({
|
|
32
|
+
* cursor: Cursor
|
|
33
|
+
* })
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
cursor?: PostgresCursorConstructor;
|
|
14
37
|
/**
|
|
15
38
|
* Called once for each created connection.
|
|
16
39
|
*/
|
|
@@ -30,6 +53,7 @@ export interface PostgresPool {
|
|
|
30
53
|
}
|
|
31
54
|
export interface PostgresPoolClient {
|
|
32
55
|
query<R>(sql: string, parameters: ReadonlyArray<unknown>): Promise<PostgresQueryResult<R>>;
|
|
56
|
+
query<R>(cursor: PostgresCursor<R>): PostgresCursor<R>;
|
|
33
57
|
release(): void;
|
|
34
58
|
}
|
|
35
59
|
export interface PostgresQueryResult<R> {
|
|
@@ -37,3 +61,8 @@ export interface PostgresQueryResult<R> {
|
|
|
37
61
|
rowCount: number;
|
|
38
62
|
rows: R[];
|
|
39
63
|
}
|
|
64
|
+
export interface PostgresStreamOptions {
|
|
65
|
+
}
|
|
66
|
+
export interface PostgresStream<T> {
|
|
67
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<T>;
|
|
68
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DatabaseConnection, QueryResult } from '../../driver/database-connection.js';
|
|
2
2
|
import { Driver, TransactionSettings } from '../../driver/driver.js';
|
|
3
3
|
import { CompiledQuery } from '../../query-compiler/compiled-query.js';
|
|
4
|
-
import { PostgresDialectConfig, PostgresPoolClient } from './postgres-dialect-config.js';
|
|
4
|
+
import { PostgresCursorConstructor, PostgresDialectConfig, PostgresPoolClient } from './postgres-dialect-config.js';
|
|
5
5
|
declare const PRIVATE_RELEASE_METHOD: unique symbol;
|
|
6
6
|
export declare class PostgresDriver implements Driver {
|
|
7
7
|
#private;
|
|
@@ -38,10 +38,14 @@ export declare class PostgresDriver implements Driver {
|
|
|
38
38
|
*/
|
|
39
39
|
destroy(): Promise<void>;
|
|
40
40
|
}
|
|
41
|
+
interface PostgresConnectionOptions {
|
|
42
|
+
cursor: PostgresCursorConstructor | null;
|
|
43
|
+
}
|
|
41
44
|
declare class PostgresConnection implements DatabaseConnection {
|
|
42
45
|
#private;
|
|
43
|
-
constructor(client: PostgresPoolClient);
|
|
46
|
+
constructor(client: PostgresPoolClient, options: PostgresConnectionOptions);
|
|
44
47
|
executeQuery<O>(compiledQuery: CompiledQuery): Promise<QueryResult<O>>;
|
|
48
|
+
streamQuery<O>(compiledQuery: CompiledQuery, chunkSize: number): AsyncIterableIterator<QueryResult<O>>;
|
|
45
49
|
[PRIVATE_RELEASE_METHOD](): void;
|
|
46
50
|
}
|
|
47
51
|
export {};
|
|
@@ -19,7 +19,9 @@ export class PostgresDriver {
|
|
|
19
19
|
const client = await this.#pool.connect();
|
|
20
20
|
let connection = this.#connections.get(client);
|
|
21
21
|
if (!connection) {
|
|
22
|
-
connection = new PostgresConnection(client
|
|
22
|
+
connection = new PostgresConnection(client, {
|
|
23
|
+
cursor: this.#config.cursor ?? null,
|
|
24
|
+
});
|
|
23
25
|
this.#connections.set(client, connection);
|
|
24
26
|
// The driver must take care of calling `onCreateConnection` when a new
|
|
25
27
|
// connection is created. The `pg` module doesn't provide an async hook
|
|
@@ -57,8 +59,10 @@ export class PostgresDriver {
|
|
|
57
59
|
}
|
|
58
60
|
class PostgresConnection {
|
|
59
61
|
#client;
|
|
60
|
-
|
|
62
|
+
#options;
|
|
63
|
+
constructor(client, options) {
|
|
61
64
|
this.#client = client;
|
|
65
|
+
this.#options = options;
|
|
62
66
|
}
|
|
63
67
|
async executeQuery(compiledQuery) {
|
|
64
68
|
try {
|
|
@@ -79,6 +83,24 @@ class PostgresConnection {
|
|
|
79
83
|
throw extendStackTrace(err, new Error());
|
|
80
84
|
}
|
|
81
85
|
}
|
|
86
|
+
async *streamQuery(compiledQuery, chunkSize) {
|
|
87
|
+
if (!this.#options.cursor) {
|
|
88
|
+
throw new Error("'cursor' is not present in your postgres dialect config. It's required to make streaming work in postgres.");
|
|
89
|
+
}
|
|
90
|
+
const cursor = this.#client.query(new this.#options.cursor(compiledQuery.sql, compiledQuery.parameters));
|
|
91
|
+
while (true) {
|
|
92
|
+
if (cursor.state === 'done') {
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
if (cursor.state === 'error') {
|
|
96
|
+
throw cursor._error;
|
|
97
|
+
}
|
|
98
|
+
const rows = await cursor.read(chunkSize);
|
|
99
|
+
yield {
|
|
100
|
+
rows,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
82
104
|
[PRIVATE_RELEASE_METHOD]() {
|
|
83
105
|
this.#client.release();
|
|
84
106
|
}
|
|
@@ -19,7 +19,10 @@ export class PostgresIntrospector {
|
|
|
19
19
|
let query = this.#db
|
|
20
20
|
.selectFrom('pg_catalog.pg_attribute as a')
|
|
21
21
|
.innerJoin('pg_catalog.pg_class as c', 'a.attrelid', 'c.oid')
|
|
22
|
-
.innerJoin('pg_catalog.
|
|
22
|
+
.innerJoin('pg_catalog.pg_namespace as ns', 'c.relnamespace', 'ns.oid')
|
|
23
|
+
.innerJoin('pg_catalog.pg_tables as t', (join) => join
|
|
24
|
+
.onRef('t.tablename', '=', 'c.relname')
|
|
25
|
+
.onRef('t.schemaname', '=', 'ns.nspname'))
|
|
23
26
|
.innerJoin('pg_catalog.pg_type as typ', 'a.atttypid', 'typ.oid')
|
|
24
27
|
.select([
|
|
25
28
|
'a.attname as column',
|
|
@@ -41,6 +44,9 @@ export class PostgresIntrospector {
|
|
|
41
44
|
.where('t.schemaname', '!=', 'information_schema')
|
|
42
45
|
.where('a.attnum', '>=', 0) // No system columns
|
|
43
46
|
.where('a.attisdropped', '!=', true)
|
|
47
|
+
.orderBy('t.schemaname')
|
|
48
|
+
.orderBy('t.tablename')
|
|
49
|
+
.orderBy('a.attname')
|
|
44
50
|
.castTo();
|
|
45
51
|
if (!options.withInternalKyselyTables) {
|
|
46
52
|
query = query
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
2
2
|
export declare class PostgresQueryCompiler extends DefaultQueryCompiler {
|
|
3
|
-
protected
|
|
4
|
-
protected getLeftIdentifierWrapper(): string;
|
|
5
|
-
protected getRightIdentifierWrapper(): string;
|
|
3
|
+
protected sanitizeIdentifier(identifier: string): string;
|
|
6
4
|
}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
/// <reference types="./postgres-query-compiler.d.ts" />
|
|
2
2
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
3
|
+
const ID_WRAP_REGEX = /"/g;
|
|
3
4
|
export class PostgresQueryCompiler extends DefaultQueryCompiler {
|
|
4
|
-
|
|
5
|
-
return '
|
|
6
|
-
}
|
|
7
|
-
getLeftIdentifierWrapper() {
|
|
8
|
-
return '"';
|
|
9
|
-
}
|
|
10
|
-
getRightIdentifierWrapper() {
|
|
11
|
-
return '"';
|
|
5
|
+
sanitizeIdentifier(identifier) {
|
|
6
|
+
return identifier.replace(ID_WRAP_REGEX, '""');
|
|
12
7
|
}
|
|
13
8
|
}
|
|
@@ -16,6 +16,7 @@ export class SqliteIntrospector {
|
|
|
16
16
|
.where('type', '=', 'table')
|
|
17
17
|
.where('name', 'not like', 'sqlite_%')
|
|
18
18
|
.select('name')
|
|
19
|
+
.orderBy('name')
|
|
19
20
|
.castTo();
|
|
20
21
|
if (!options.withInternalKyselyTables) {
|
|
21
22
|
query = query
|
|
@@ -48,6 +49,7 @@ export class SqliteIntrospector {
|
|
|
48
49
|
const columns = await db
|
|
49
50
|
.selectFrom(sql `pragma_table_info(${table})`.as('table_info'))
|
|
50
51
|
.select(['name', 'type', 'notnull', 'dflt_value'])
|
|
52
|
+
.orderBy('name')
|
|
51
53
|
.execute();
|
|
52
54
|
return {
|
|
53
55
|
name: table,
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
2
2
|
export declare class SqliteQueryCompiler extends DefaultQueryCompiler {
|
|
3
3
|
protected getCurrentParameterPlaceholder(): string;
|
|
4
|
+
protected getLeftExplainOptionsWrapper(): string;
|
|
5
|
+
protected getRightExplainOptionsWrapper(): string;
|
|
4
6
|
protected getLeftIdentifierWrapper(): string;
|
|
5
7
|
protected getRightIdentifierWrapper(): string;
|
|
6
8
|
protected getAutoIncrement(): string;
|
|
9
|
+
protected sanitizeIdentifier(identifier: string): string;
|
|
7
10
|
}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
/// <reference types="./sqlite-query-compiler.d.ts" />
|
|
2
2
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
3
|
+
const ID_WRAP_REGEX = /"/g;
|
|
3
4
|
export class SqliteQueryCompiler extends DefaultQueryCompiler {
|
|
4
5
|
getCurrentParameterPlaceholder() {
|
|
5
6
|
return '?';
|
|
6
7
|
}
|
|
8
|
+
getLeftExplainOptionsWrapper() {
|
|
9
|
+
return '';
|
|
10
|
+
}
|
|
11
|
+
getRightExplainOptionsWrapper() {
|
|
12
|
+
return '';
|
|
13
|
+
}
|
|
7
14
|
getLeftIdentifierWrapper() {
|
|
8
15
|
return '"';
|
|
9
16
|
}
|
|
@@ -13,4 +20,7 @@ export class SqliteQueryCompiler extends DefaultQueryCompiler {
|
|
|
13
20
|
getAutoIncrement() {
|
|
14
21
|
return 'autoincrement';
|
|
15
22
|
}
|
|
23
|
+
sanitizeIdentifier(identifier) {
|
|
24
|
+
return identifier.replace(ID_WRAP_REGEX, '""');
|
|
25
|
+
}
|
|
16
26
|
}
|
|
@@ -6,6 +6,7 @@ import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
|
6
6
|
*/
|
|
7
7
|
export interface DatabaseConnection {
|
|
8
8
|
executeQuery<R>(compiledQuery: CompiledQuery): Promise<QueryResult<R>>;
|
|
9
|
+
streamQuery<R>(compiledQuery: CompiledQuery, chunkSize?: number): AsyncIterableIterator<QueryResult<R>>;
|
|
9
10
|
}
|
|
10
11
|
export interface QueryResult<O> {
|
|
11
12
|
/**
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -25,7 +25,9 @@ export * from './query-compiler/default-query-compiler.js';
|
|
|
25
25
|
export * from './query-compiler/compiled-query.js';
|
|
26
26
|
export * from './schema/schema.js';
|
|
27
27
|
export * from './schema/create-table-builder.js';
|
|
28
|
+
export * from './schema/create-type-builder.js';
|
|
28
29
|
export * from './schema/drop-table-builder.js';
|
|
30
|
+
export * from './schema/drop-type-builder.js';
|
|
29
31
|
export * from './schema/create-index-builder.js';
|
|
30
32
|
export * from './schema/drop-index-builder.js';
|
|
31
33
|
export * from './schema/create-schema-builder.js';
|
|
@@ -87,6 +89,7 @@ export * from './operation-node/constraint-node.js';
|
|
|
87
89
|
export * from './operation-node/create-index-node.js';
|
|
88
90
|
export * from './operation-node/create-schema-node.js';
|
|
89
91
|
export * from './operation-node/create-table-node.js';
|
|
92
|
+
export * from './operation-node/create-type-node.js';
|
|
90
93
|
export * from './operation-node/create-view-node.js';
|
|
91
94
|
export * from './operation-node/data-type-node.js';
|
|
92
95
|
export * from './operation-node/default-value-node.js';
|
|
@@ -96,6 +99,7 @@ export * from './operation-node/drop-constraint-node.js';
|
|
|
96
99
|
export * from './operation-node/drop-index-node.js';
|
|
97
100
|
export * from './operation-node/drop-schema-node.js';
|
|
98
101
|
export * from './operation-node/drop-table-node.js';
|
|
102
|
+
export * from './operation-node/drop-type-node.js';
|
|
99
103
|
export * from './operation-node/drop-view-node.js';
|
|
100
104
|
export * from './operation-node/filter-node.js';
|
|
101
105
|
export * from './operation-node/foreign-key-constraint-node.js';
|
|
@@ -145,8 +149,10 @@ export * from './operation-node/value-node.js';
|
|
|
145
149
|
export * from './operation-node/values-node.js';
|
|
146
150
|
export * from './operation-node/where-node.js';
|
|
147
151
|
export * from './operation-node/with-node.js';
|
|
152
|
+
export * from './operation-node/explain-node.js';
|
|
148
153
|
export * from './util/column-type.js';
|
|
149
154
|
export * from './util/compilable.js';
|
|
155
|
+
export * from './util/explainable.js';
|
|
150
156
|
export * from './util/log.js';
|
|
151
157
|
export { AnyColumn, UnknownRow, AnySelectQueryBuilder, } from './util/type-utils.js';
|
|
152
158
|
export { SelectExpression, SelectExpressionOrList, Selection, } from './parser/select-parser.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -26,7 +26,9 @@ export * from './query-compiler/default-query-compiler.js';
|
|
|
26
26
|
export * from './query-compiler/compiled-query.js';
|
|
27
27
|
export * from './schema/schema.js';
|
|
28
28
|
export * from './schema/create-table-builder.js';
|
|
29
|
+
export * from './schema/create-type-builder.js';
|
|
29
30
|
export * from './schema/drop-table-builder.js';
|
|
31
|
+
export * from './schema/drop-type-builder.js';
|
|
30
32
|
export * from './schema/create-index-builder.js';
|
|
31
33
|
export * from './schema/drop-index-builder.js';
|
|
32
34
|
export * from './schema/create-schema-builder.js';
|
|
@@ -88,6 +90,7 @@ export * from './operation-node/constraint-node.js';
|
|
|
88
90
|
export * from './operation-node/create-index-node.js';
|
|
89
91
|
export * from './operation-node/create-schema-node.js';
|
|
90
92
|
export * from './operation-node/create-table-node.js';
|
|
93
|
+
export * from './operation-node/create-type-node.js';
|
|
91
94
|
export * from './operation-node/create-view-node.js';
|
|
92
95
|
export * from './operation-node/data-type-node.js';
|
|
93
96
|
export * from './operation-node/default-value-node.js';
|
|
@@ -97,6 +100,7 @@ export * from './operation-node/drop-constraint-node.js';
|
|
|
97
100
|
export * from './operation-node/drop-index-node.js';
|
|
98
101
|
export * from './operation-node/drop-schema-node.js';
|
|
99
102
|
export * from './operation-node/drop-table-node.js';
|
|
103
|
+
export * from './operation-node/drop-type-node.js';
|
|
100
104
|
export * from './operation-node/drop-view-node.js';
|
|
101
105
|
export * from './operation-node/filter-node.js';
|
|
102
106
|
export * from './operation-node/foreign-key-constraint-node.js';
|
|
@@ -146,6 +150,8 @@ export * from './operation-node/value-node.js';
|
|
|
146
150
|
export * from './operation-node/values-node.js';
|
|
147
151
|
export * from './operation-node/where-node.js';
|
|
148
152
|
export * from './operation-node/with-node.js';
|
|
153
|
+
export * from './operation-node/explain-node.js';
|
|
149
154
|
export * from './util/column-type.js';
|
|
150
155
|
export * from './util/compilable.js';
|
|
156
|
+
export * from './util/explainable.js';
|
|
151
157
|
export * from './util/log.js';
|
|
@@ -2,8 +2,11 @@ import { OperationNode } from './operation-node.js';
|
|
|
2
2
|
import { TableNode } from './table-node.js';
|
|
3
3
|
import { ConstraintNode } from './constraint-node.js';
|
|
4
4
|
import { ColumnDefinitionNode } from './column-definition-node.js';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { ArrayItemType } from '../util/type-utils.js';
|
|
6
|
+
import { RawNode } from './raw-node.js';
|
|
7
|
+
export declare const ON_COMMIT_ACTIONS: string[];
|
|
8
|
+
export declare type OnCommitAction = ArrayItemType<typeof ON_COMMIT_ACTIONS>;
|
|
9
|
+
export declare type CreateTableNodeParams = Omit<CreateTableNode, 'kind' | 'table' | 'columns' | 'constraints' | 'frontModifiers' | 'endModifiers'>;
|
|
7
10
|
export interface CreateTableNode extends OperationNode {
|
|
8
11
|
readonly kind: 'CreateTableNode';
|
|
9
12
|
readonly table: TableNode;
|
|
@@ -12,6 +15,8 @@ export interface CreateTableNode extends OperationNode {
|
|
|
12
15
|
readonly temporary?: boolean;
|
|
13
16
|
readonly ifNotExists?: boolean;
|
|
14
17
|
readonly onCommit?: OnCommitAction;
|
|
18
|
+
readonly frontModifiers?: ReadonlyArray<RawNode>;
|
|
19
|
+
readonly endModifiers?: ReadonlyArray<RawNode>;
|
|
15
20
|
}
|
|
16
21
|
/**
|
|
17
22
|
* @internal
|
|
@@ -21,5 +26,7 @@ export declare const CreateTableNode: Readonly<{
|
|
|
21
26
|
create(table: TableNode): CreateTableNode;
|
|
22
27
|
cloneWithColumn(createTable: CreateTableNode, column: ColumnDefinitionNode): CreateTableNode;
|
|
23
28
|
cloneWithConstraint(createTable: CreateTableNode, constraint: ConstraintNode): CreateTableNode;
|
|
29
|
+
cloneWithFrontModifier(createTable: CreateTableNode, modifier: RawNode): CreateTableNode;
|
|
30
|
+
cloneWithEndModifier(createTable: CreateTableNode, modifier: RawNode): CreateTableNode;
|
|
24
31
|
cloneWith(createTable: CreateTableNode, params: CreateTableNodeParams): CreateTableNode;
|
|
25
32
|
}>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="./create-table-node.d.ts" />
|
|
2
2
|
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
export const ON_COMMIT_ACTIONS = ['preserve rows', 'delete rows', 'drop'];
|
|
3
4
|
/**
|
|
4
5
|
* @internal
|
|
5
6
|
*/
|
|
@@ -28,6 +29,22 @@ export const CreateTableNode = freeze({
|
|
|
28
29
|
: freeze([constraint]),
|
|
29
30
|
});
|
|
30
31
|
},
|
|
32
|
+
cloneWithFrontModifier(createTable, modifier) {
|
|
33
|
+
return freeze({
|
|
34
|
+
...createTable,
|
|
35
|
+
frontModifiers: createTable.frontModifiers
|
|
36
|
+
? freeze([...createTable.frontModifiers, modifier])
|
|
37
|
+
: freeze([modifier]),
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
cloneWithEndModifier(createTable, modifier) {
|
|
41
|
+
return freeze({
|
|
42
|
+
...createTable,
|
|
43
|
+
endModifiers: createTable.endModifiers
|
|
44
|
+
? freeze([...createTable.endModifiers, modifier])
|
|
45
|
+
: freeze([modifier]),
|
|
46
|
+
});
|
|
47
|
+
},
|
|
31
48
|
cloneWith(createTable, params) {
|
|
32
49
|
return freeze({
|
|
33
50
|
...createTable,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
|
-
export declare type ColumnDataType = 'varchar' | `varchar(${number})` | 'text' | 'integer' | 'int2' | 'int4' | 'int8' | 'bigint' | 'boolean' | 'real' | 'double precision' | 'float4' | 'float8' | 'decimal' | `decimal(${number}, ${number})` | 'numeric' | `numeric(${number}, ${number})` | 'binary' | 'date' | 'datetime' | 'time' | 'timetz' | 'timestamp' | 'timestamptz' | 'serial' | 'bigserial' | 'uuid' | 'json' | 'jsonb' | 'blob';
|
|
2
|
+
export declare type ColumnDataType = 'varchar' | `varchar(${number})` | 'text' | 'integer' | 'int2' | 'int4' | 'int8' | 'bigint' | 'boolean' | 'real' | 'double precision' | 'float4' | 'float8' | 'decimal' | `decimal(${number}, ${number})` | 'numeric' | `numeric(${number}, ${number})` | 'binary' | 'date' | 'datetime' | `datetime(${number})` | 'time' | `time(${number})` | 'timetz' | `timetz(${number})` | 'timestamp' | `timestamp(${number})` | 'timestamptz' | `timestamptz(${number})` | 'serial' | 'bigserial' | 'uuid' | 'json' | 'jsonb' | 'blob';
|
|
3
3
|
export declare type DataTypeParams = Omit<DataTypeNode, 'kind' | 'dataType'>;
|
|
4
4
|
export interface DataTypeNode extends OperationNode {
|
|
5
5
|
readonly kind: 'DataTypeNode';
|
|
@@ -8,6 +8,7 @@ import { WithNode } from './with-node.js';
|
|
|
8
8
|
import { LimitNode } from './limit-node.js';
|
|
9
9
|
import { OrderByNode } from './order-by-node.js';
|
|
10
10
|
import { OrderByItemNode } from './order-by-item-node.js';
|
|
11
|
+
import { ExplainNode } from './explain-node.js';
|
|
11
12
|
export interface DeleteQueryNode extends OperationNode {
|
|
12
13
|
readonly kind: 'DeleteQueryNode';
|
|
13
14
|
readonly from: FromNode;
|
|
@@ -17,6 +18,7 @@ export interface DeleteQueryNode extends OperationNode {
|
|
|
17
18
|
readonly with?: WithNode;
|
|
18
19
|
readonly orderBy?: OrderByNode;
|
|
19
20
|
readonly limit?: LimitNode;
|
|
21
|
+
readonly explain?: ExplainNode;
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
24
|
* @internal
|
|
@@ -26,4 +28,5 @@ export declare const DeleteQueryNode: Readonly<{
|
|
|
26
28
|
create(fromItem: TableExpressionNode, withNode?: WithNode): DeleteQueryNode;
|
|
27
29
|
cloneWithOrderByItem(deleteNode: DeleteQueryNode, item: OrderByItemNode): DeleteQueryNode;
|
|
28
30
|
cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
|
|
31
|
+
cloneWithExplain(deleteNode: DeleteQueryNode, explain: ExplainNode): DeleteQueryNode;
|
|
29
32
|
}>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ExplainFormat } from '../util/explainable.js';
|
|
2
|
+
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
3
|
+
import { OperationNode } from './operation-node.js';
|
|
4
|
+
import { RawNode } from './raw-node.js';
|
|
5
|
+
export interface ExplainNode extends OperationNode {
|
|
6
|
+
readonly kind: 'ExplainNode';
|
|
7
|
+
readonly format?: ExplainFormat;
|
|
8
|
+
readonly options?: RawNode;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare const ExplainNode: Readonly<{
|
|
14
|
+
is(node: OperationNode): node is ExplainNode;
|
|
15
|
+
create(format?: ExplainFormat, options?: AnyRawBuilder): ExplainNode;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="./explain-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export const ExplainNode = freeze({
|
|
7
|
+
is(node) {
|
|
8
|
+
return node.kind === 'ExplainNode';
|
|
9
|
+
},
|
|
10
|
+
create(format, options) {
|
|
11
|
+
return freeze({
|
|
12
|
+
kind: 'ExplainNode',
|
|
13
|
+
format,
|
|
14
|
+
options: options?.toOperationNode(),
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
});
|
|
@@ -20,8 +20,8 @@ export declare const ForeignKeyConstraintNode: Readonly<{
|
|
|
20
20
|
create(sourceColumns: ReadonlyArray<ColumnNode>, targetTable: TableNode, targetColumns: ReadonlyArray<ColumnNode>, constraintName?: string): ForeignKeyConstraintNode;
|
|
21
21
|
cloneWith(node: ForeignKeyConstraintNode, props: ForeignKeyConstraintNodeProps): Readonly<{
|
|
22
22
|
name?: IdentifierNode | undefined;
|
|
23
|
-
onDelete?:
|
|
24
|
-
onUpdate?:
|
|
23
|
+
onDelete?: "no action" | "restrict" | "cascade" | "set null" | "set default" | undefined;
|
|
24
|
+
onUpdate?: "no action" | "restrict" | "cascade" | "set null" | "set default" | undefined;
|
|
25
25
|
kind: 'ForeignKeyConstraintNode';
|
|
26
26
|
columns: ReadonlyArray<ColumnNode>;
|
|
27
27
|
references: ReferencesNode;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ColumnNode } from './column-node.js';
|
|
2
|
+
import { ExplainNode } from './explain-node.js';
|
|
2
3
|
import { OnConflictNode } from './on-conflict-node.js';
|
|
3
4
|
import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
|
|
4
5
|
import { OperationNode } from './operation-node.js';
|
|
@@ -19,12 +20,14 @@ export interface InsertQueryNode extends OperationNode {
|
|
|
19
20
|
readonly onDuplicateKey?: OnDuplicateKeyNode;
|
|
20
21
|
readonly with?: WithNode;
|
|
21
22
|
readonly ignore?: boolean;
|
|
23
|
+
readonly replace?: boolean;
|
|
24
|
+
readonly explain?: ExplainNode;
|
|
22
25
|
}
|
|
23
26
|
/**
|
|
24
27
|
* @internal
|
|
25
28
|
*/
|
|
26
29
|
export declare const InsertQueryNode: Readonly<{
|
|
27
30
|
is(node: OperationNode): node is InsertQueryNode;
|
|
28
|
-
create(into: TableNode, withNode?: WithNode): InsertQueryNode;
|
|
31
|
+
create(into: TableNode, withNode?: WithNode, replace?: boolean): InsertQueryNode;
|
|
29
32
|
cloneWith(insertQuery: InsertQueryNode, props: InsertQueryNodeProps): InsertQueryNode;
|
|
30
33
|
}>;
|
|
@@ -7,11 +7,12 @@ export const InsertQueryNode = freeze({
|
|
|
7
7
|
is(node) {
|
|
8
8
|
return node.kind === 'InsertQueryNode';
|
|
9
9
|
},
|
|
10
|
-
create(into, withNode) {
|
|
10
|
+
create(into, withNode, replace) {
|
|
11
11
|
return freeze({
|
|
12
12
|
kind: 'InsertQueryNode',
|
|
13
13
|
into,
|
|
14
14
|
...(withNode && { with: withNode }),
|
|
15
|
+
replace,
|
|
15
16
|
});
|
|
16
17
|
},
|
|
17
18
|
cloneWith(insertQuery, props) {
|
|
@@ -68,6 +68,7 @@ import { ValuesNode } from './values-node.js';
|
|
|
68
68
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
69
69
|
import { CreateTypeNode } from './create-type-node.js';
|
|
70
70
|
import { DropTypeNode } from './drop-type-node.js';
|
|
71
|
+
import { ExplainNode } from './explain-node.js';
|
|
71
72
|
/**
|
|
72
73
|
* Transforms an operation node tree into another one.
|
|
73
74
|
*
|
|
@@ -172,4 +173,5 @@ export declare class OperationNodeTransformer {
|
|
|
172
173
|
protected transformValue(node: ValueNode): ValueNode;
|
|
173
174
|
protected transformPrimitiveValueList(node: PrimitiveValueListNode): PrimitiveValueListNode;
|
|
174
175
|
protected transformOperator(node: OperatorNode): OperatorNode;
|
|
176
|
+
protected transformExplain(node: ExplainNode): ExplainNode;
|
|
175
177
|
}
|