rado 0.1.23 → 0.1.25
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 +1 -1
- package/dist/driver/better-sqlite3.d.ts +15 -17
- package/dist/driver/better-sqlite3.js +25 -18
- package/dist/driver/sql.js.d.ts +15 -17
- package/dist/driver/sql.js.js +29 -26
- package/dist/driver/sqlite3.d.ts +18 -20
- package/dist/driver/sqlite3.js +40 -29
- package/dist/index.d.ts +20 -20
- package/dist/lib/Column.d.ts +57 -57
- package/dist/lib/Cursor.d.ts +78 -77
- package/dist/lib/Cursor.js +3 -0
- package/dist/lib/Driver.d.ts +105 -89
- package/dist/lib/Driver.js +72 -28
- package/dist/lib/Expr.d.ts +154 -154
- package/dist/lib/Fields.d.ts +13 -13
- package/dist/lib/Formatter.d.ts +56 -56
- package/dist/lib/Formatter.js +14 -4
- package/dist/lib/Functions.d.ts +7 -7
- package/dist/lib/Id.d.ts +3 -3
- package/dist/lib/Index.d.ts +17 -17
- package/dist/lib/Index.js +3 -3
- package/dist/lib/Ops.d.ts +8 -8
- package/dist/lib/OrderBy.d.ts +9 -9
- package/dist/lib/Param.d.ts +20 -15
- package/dist/lib/Param.js +10 -1
- package/dist/lib/Query.d.ts +108 -108
- package/dist/lib/Sanitizer.d.ts +4 -4
- package/dist/lib/Schema.d.ts +18 -18
- package/dist/lib/Schema.js +4 -4
- package/dist/lib/Selection.d.ts +20 -20
- package/dist/lib/Statement.d.ts +71 -61
- package/dist/lib/Statement.js +46 -5
- package/dist/lib/Table.d.ts +59 -58
- package/dist/lib/Table.js +4 -7
- package/dist/lib/Target.d.ts +30 -30
- package/dist/lib/Update.d.ts +4 -4
- package/dist/sqlite/SqliteFormatter.d.ts +11 -11
- package/dist/sqlite/SqliteFunctions.d.ts +156 -156
- package/dist/sqlite/SqliteSchema.d.ts +25 -24
- package/dist/sqlite/SqliteSchema.js +5 -4
- package/dist/sqlite.d.ts +2 -2
- package/package.json +47 -47
- package/dist/Column.d.ts +0 -41
- package/dist/Column.js +0 -58
- package/dist/Cursor.d.ts +0 -77
- package/dist/Cursor.js +0 -211
- package/dist/Driver.d.ts +0 -72
- package/dist/Driver.js +0 -145
- package/dist/Expr.d.ts +0 -149
- package/dist/Expr.js +0 -284
- package/dist/Fields.d.ts +0 -9
- package/dist/Fields.js +0 -0
- package/dist/Formatter.d.ts +0 -50
- package/dist/Formatter.js +0 -453
- package/dist/Functions.d.ts +0 -8
- package/dist/Functions.js +0 -11
- package/dist/Key.d.ts +0 -5
- package/dist/Ops.d.ts +0 -8
- package/dist/Ops.js +0 -46
- package/dist/OrderBy.d.ts +0 -9
- package/dist/OrderBy.js +0 -9
- package/dist/Param.d.ts +0 -15
- package/dist/Param.js +0 -18
- package/dist/Query.d.ts +0 -94
- package/dist/Query.js +0 -57
- package/dist/Sanitizer.d.ts +0 -4
- package/dist/Sanitizer.js +0 -0
- package/dist/Schema.d.ts +0 -10
- package/dist/Selection.d.ts +0 -18
- package/dist/Selection.js +0 -0
- package/dist/Statement.d.ts +0 -57
- package/dist/Statement.js +0 -184
- package/dist/Table.d.ts +0 -47
- package/dist/Table.js +0 -82
- package/dist/Target.d.ts +0 -30
- package/dist/Target.js +0 -37
- package/dist/Update.d.ts +0 -4
- package/dist/Update.js +0 -0
- package/dist/sqlite/index.d.ts +0 -2
- package/dist/sqlite/index.js +0 -3
package/dist/lib/Cursor.d.ts
CHANGED
|
@@ -1,77 +1,78 @@
|
|
|
1
|
-
import { EV, Expr } from './Expr';
|
|
2
|
-
import { OrderBy } from './OrderBy';
|
|
3
|
-
import { Query } from './Query';
|
|
4
|
-
import { Schema } from './Schema';
|
|
5
|
-
import { Selection } from './Selection';
|
|
6
|
-
import { Table } from './Table';
|
|
7
|
-
import { Update as UpdateSet } from './Update';
|
|
8
|
-
export declare class Cursor<T> {
|
|
9
|
-
[Selection.__cursorType](): T;
|
|
10
|
-
constructor(query: Query<T>);
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
1
|
+
import { EV, Expr } from './Expr';
|
|
2
|
+
import { OrderBy } from './OrderBy';
|
|
3
|
+
import { Query } from './Query';
|
|
4
|
+
import { Schema } from './Schema';
|
|
5
|
+
import { Selection } from './Selection';
|
|
6
|
+
import { Table } from './Table';
|
|
7
|
+
import { Update as UpdateSet } from './Update';
|
|
8
|
+
export declare class Cursor<T> {
|
|
9
|
+
[Selection.__cursorType](): T;
|
|
10
|
+
constructor(query: Query<T>);
|
|
11
|
+
static all(strings: TemplateStringsArray, ...params: Array<any>): Cursor<any>;
|
|
12
|
+
query(): Query<T>;
|
|
13
|
+
toJSON(): Query<T>;
|
|
14
|
+
}
|
|
15
|
+
export declare namespace Cursor {
|
|
16
|
+
class Limitable<T> extends Cursor<T> {
|
|
17
|
+
take(limit: number | undefined): Limitable<T>;
|
|
18
|
+
skip(offset: number | undefined): Limitable<T>;
|
|
19
|
+
}
|
|
20
|
+
class Filterable<T> extends Limitable<T> {
|
|
21
|
+
where(...where: Array<EV<boolean>>): Filterable<T>;
|
|
22
|
+
}
|
|
23
|
+
class Delete extends Filterable<{
|
|
24
|
+
rowsAffected: number;
|
|
25
|
+
}> {
|
|
26
|
+
query(): Query.Delete;
|
|
27
|
+
}
|
|
28
|
+
class Update<T> extends Filterable<{
|
|
29
|
+
rowsAffected: number;
|
|
30
|
+
}> {
|
|
31
|
+
query: () => Query.Update;
|
|
32
|
+
set(set: UpdateSet<T>): Update<T>;
|
|
33
|
+
}
|
|
34
|
+
class InsertValuesReturning<T> extends Cursor<T> {
|
|
35
|
+
}
|
|
36
|
+
class InsertValues extends Cursor<{
|
|
37
|
+
rowsAffected: number;
|
|
38
|
+
}> {
|
|
39
|
+
query(): Query.Insert;
|
|
40
|
+
returning<X extends Selection>(selection: X): InsertValuesReturning<Selection.Infer<X>>;
|
|
41
|
+
}
|
|
42
|
+
class Insert<T> {
|
|
43
|
+
protected into: Schema;
|
|
44
|
+
constructor(into: Schema);
|
|
45
|
+
values(...data: Array<Table.Insert<T>>): InsertValues;
|
|
46
|
+
}
|
|
47
|
+
class Create extends Cursor<void> {
|
|
48
|
+
protected table: Schema;
|
|
49
|
+
constructor(table: Schema);
|
|
50
|
+
}
|
|
51
|
+
class Batch<T = void> extends Cursor<T> {
|
|
52
|
+
protected queries: Array<Query>;
|
|
53
|
+
constructor(queries: Array<Query>);
|
|
54
|
+
}
|
|
55
|
+
class SelectMultiple<T> extends Filterable<Array<T>> {
|
|
56
|
+
query(): Query.Select;
|
|
57
|
+
leftJoin<C>(that: Table<C>, ...on: Array<EV<boolean>>): SelectMultiple<T>;
|
|
58
|
+
innerJoin<C>(that: Table<C>, ...on: Array<EV<boolean>>): SelectMultiple<T>;
|
|
59
|
+
select<X extends Selection>(selection: X): SelectMultiple<Selection.Infer<X>>;
|
|
60
|
+
count(): SelectSingle<number>;
|
|
61
|
+
orderBy(...orderBy: Array<Expr<any> | OrderBy>): SelectMultiple<T>;
|
|
62
|
+
groupBy(...groupBy: Array<Expr<any>>): SelectMultiple<T>;
|
|
63
|
+
first(): SelectSingle<T | undefined>;
|
|
64
|
+
where(...where: Array<EV<boolean>>): SelectMultiple<T>;
|
|
65
|
+
toExpr(): Expr<T>;
|
|
66
|
+
}
|
|
67
|
+
class SelectSingle<T> extends Filterable<T> {
|
|
68
|
+
query(): Query.Select;
|
|
69
|
+
leftJoin<C>(that: Table<C>, ...on: Array<EV<boolean>>): SelectSingle<T>;
|
|
70
|
+
innerJoin<C>(that: Table<C>, ...on: Array<EV<boolean>>): SelectSingle<T>;
|
|
71
|
+
select<X extends Selection>(selection: X): SelectSingle<Selection.Infer<X>>;
|
|
72
|
+
orderBy(...orderBy: Array<OrderBy>): SelectSingle<T>;
|
|
73
|
+
groupBy(...groupBy: Array<Expr<any>>): SelectSingle<T>;
|
|
74
|
+
where(...where: Array<EV<boolean>>): SelectSingle<T>;
|
|
75
|
+
all(): SelectMultiple<T>;
|
|
76
|
+
toExpr(): Expr<T>;
|
|
77
|
+
}
|
|
78
|
+
}
|
package/dist/lib/Cursor.js
CHANGED
package/dist/lib/Driver.d.ts
CHANGED
|
@@ -1,89 +1,105 @@
|
|
|
1
|
-
import { Cursor } from './Cursor';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
1
|
+
import { Cursor } from './Cursor';
|
|
2
|
+
import { Expr } from './Expr';
|
|
3
|
+
import { Formatter } from './Formatter';
|
|
4
|
+
import { Query } from './Query';
|
|
5
|
+
import { SchemaInstructions } from './Schema';
|
|
6
|
+
import { CompiledStatement } from './Statement';
|
|
7
|
+
import { Table } from './Table';
|
|
8
|
+
declare class Callable extends Function {
|
|
9
|
+
constructor(fn: Function);
|
|
10
|
+
}
|
|
11
|
+
declare abstract class DriverBase extends Callable {
|
|
12
|
+
formatter: Formatter;
|
|
13
|
+
constructor(formatter: Formatter);
|
|
14
|
+
compile<T extends Array<Expr<any>>, R>(create: (...params: T) => Cursor<R>): [Query<T>, CompiledStatement];
|
|
15
|
+
all(...args: Array<any>): any;
|
|
16
|
+
get(...args: Array<any>): any;
|
|
17
|
+
sql(strings: TemplateStringsArray, ...params: Array<any>): Cursor<unknown>;
|
|
18
|
+
executeTemplate(expectedReturn: Query.RawReturn, strings: TemplateStringsArray, ...params: Array<any>): any;
|
|
19
|
+
abstract executeQuery(query: Query<any>): any;
|
|
20
|
+
}
|
|
21
|
+
type ParamTypes<Params extends [...any[]]> = {
|
|
22
|
+
[K in keyof Params]: Params[K] extends Expr<infer T> ? T : never;
|
|
23
|
+
} & {
|
|
24
|
+
length: Params['length'];
|
|
25
|
+
};
|
|
26
|
+
interface SyncDriver {
|
|
27
|
+
<T>(query: Cursor<T>): T;
|
|
28
|
+
<T>(...queries: Array<Cursor<any>>): T;
|
|
29
|
+
(strings: TemplateStringsArray, ...values: any[]): any;
|
|
30
|
+
}
|
|
31
|
+
declare abstract class SyncDriver extends DriverBase {
|
|
32
|
+
transactionId: number;
|
|
33
|
+
abstract prepareStatement(stmt: CompiledStatement): SyncPreparedStatement;
|
|
34
|
+
abstract schemaInstructions(tableName: string): SchemaInstructions | undefined;
|
|
35
|
+
prepare<T extends Array<Expr<any>>, R>(create: (...params: T) => Cursor<R>): (...params: ParamTypes<T>) => R;
|
|
36
|
+
migrateSchema(...tables: Array<Table<any>>): unknown;
|
|
37
|
+
executeQuery<T>(query: Query<T>, stmt?: SyncPreparedStatement, params?: Array<any>): T;
|
|
38
|
+
all<T>(cursor: Cursor.SelectSingle<T>): Array<T>;
|
|
39
|
+
all<T>(cursor: Cursor<T>): T;
|
|
40
|
+
all<T>(strings: TemplateStringsArray, ...params: Array<any>): Array<T>;
|
|
41
|
+
get<T>(cursor: Cursor.SelectMultiple<T>): T | null;
|
|
42
|
+
get<T>(cursor: Cursor<T>): T;
|
|
43
|
+
get<T>(strings: TemplateStringsArray, ...params: Array<any>): T;
|
|
44
|
+
transaction<T>(run: (query: SyncDriver) => T): T;
|
|
45
|
+
toAsync(): SyncWrapper;
|
|
46
|
+
}
|
|
47
|
+
interface SyncPreparedStatement {
|
|
48
|
+
run(params?: Array<any>): {
|
|
49
|
+
rowsAffected: number;
|
|
50
|
+
};
|
|
51
|
+
all<T>(params?: Array<any>): Array<T>;
|
|
52
|
+
get<T>(params?: Array<any>): T;
|
|
53
|
+
execute(params?: Array<any>): void;
|
|
54
|
+
}
|
|
55
|
+
interface AsyncDriver {
|
|
56
|
+
<T>(query: Cursor<T>): Promise<T>;
|
|
57
|
+
<T>(...queries: Array<Cursor<any>>): Promise<T>;
|
|
58
|
+
(strings: TemplateStringsArray, ...values: any[]): Promise<any>;
|
|
59
|
+
}
|
|
60
|
+
declare abstract class AsyncDriver extends DriverBase {
|
|
61
|
+
transactionId: number;
|
|
62
|
+
abstract isolate(): [connection: AsyncDriver, release: () => Promise<void>];
|
|
63
|
+
abstract prepareStatement(stmt: CompiledStatement): AsyncPreparedStatement;
|
|
64
|
+
abstract schemaInstructions(tableName: string): Promise<SchemaInstructions | undefined>;
|
|
65
|
+
prepare<T extends Array<Expr<any>>, R>(create: (...params: T) => Cursor<R>): (...params: ParamTypes<T>) => Promise<R>;
|
|
66
|
+
migrateSchema(...tables: Array<Table<any>>): Promise<unknown>;
|
|
67
|
+
executeQuery<T>(query: Query<T>, stmt?: AsyncPreparedStatement, params?: Array<any>): Promise<T>;
|
|
68
|
+
all<T>(cursor: Cursor.SelectSingle<T>): Promise<Array<T>>;
|
|
69
|
+
all<T>(cursor: Cursor<T>): Promise<T>;
|
|
70
|
+
all<T>(strings: TemplateStringsArray, ...params: Array<any>): Promise<Array<T>>;
|
|
71
|
+
get<T>(cursor: Cursor.SelectMultiple<T>): Promise<T | null>;
|
|
72
|
+
get<T>(cursor: Cursor<T>): Promise<T>;
|
|
73
|
+
get<T>(strings: TemplateStringsArray, ...params: Array<any>): Promise<T>;
|
|
74
|
+
transaction<T>(run: (query: AsyncDriver) => T): Promise<T>;
|
|
75
|
+
}
|
|
76
|
+
declare class SyncWrapper extends AsyncDriver {
|
|
77
|
+
private sync;
|
|
78
|
+
lock: Promise<void> | undefined;
|
|
79
|
+
constructor(sync: SyncDriver);
|
|
80
|
+
executeQuery<T>(query: Query<T>, stmt?: AsyncPreparedStatement, params?: Array<any>): Promise<T>;
|
|
81
|
+
prepareStatement(stmt: CompiledStatement): AsyncPreparedStatement;
|
|
82
|
+
schemaInstructions(tableName: string): Promise<SchemaInstructions | undefined>;
|
|
83
|
+
isolate(): [connection: AsyncDriver, release: () => Promise<void>];
|
|
84
|
+
}
|
|
85
|
+
interface AsyncPreparedStatement {
|
|
86
|
+
run(params?: Array<any>): Promise<{
|
|
87
|
+
rowsAffected: number;
|
|
88
|
+
}>;
|
|
89
|
+
all<T>(params?: Array<any>): Promise<Array<T>>;
|
|
90
|
+
get<T>(params?: Array<any>): Promise<T>;
|
|
91
|
+
execute(params?: Array<any>): Promise<void>;
|
|
92
|
+
}
|
|
93
|
+
export declare namespace Driver {
|
|
94
|
+
type Sync = SyncDriver;
|
|
95
|
+
const Sync: typeof SyncDriver;
|
|
96
|
+
namespace Sync {
|
|
97
|
+
type PreparedStatement = SyncPreparedStatement;
|
|
98
|
+
}
|
|
99
|
+
type Async = AsyncDriver;
|
|
100
|
+
const Async: typeof AsyncDriver;
|
|
101
|
+
namespace Async {
|
|
102
|
+
type PreparedStatement = AsyncPreparedStatement;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export {};
|
package/dist/lib/Driver.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// src/lib/Driver.ts
|
|
2
2
|
import { Cursor } from "./Cursor.js";
|
|
3
|
+
import { Expr, ExprData } from "./Expr.js";
|
|
4
|
+
import { ParamData } from "./Param.js";
|
|
3
5
|
import { Query, QueryType } from "./Query.js";
|
|
4
6
|
import { Schema } from "./Schema.js";
|
|
5
7
|
var Callable = class extends Function {
|
|
@@ -31,6 +33,16 @@ var DriverBase = class extends Callable {
|
|
|
31
33
|
});
|
|
32
34
|
this.formatter = formatter;
|
|
33
35
|
}
|
|
36
|
+
compile(create) {
|
|
37
|
+
const { length } = create;
|
|
38
|
+
const paramNames = Array.from({ length }, (_, i) => `p${i}`);
|
|
39
|
+
const params = paramNames.map(
|
|
40
|
+
(name) => new Expr(ExprData.Param(ParamData.Named(name)))
|
|
41
|
+
);
|
|
42
|
+
const cursor = create(...params);
|
|
43
|
+
const query = cursor.query();
|
|
44
|
+
return [query, this.formatter.compile(query)];
|
|
45
|
+
}
|
|
34
46
|
all(...args) {
|
|
35
47
|
const [input, ...rest] = args;
|
|
36
48
|
if (input instanceof Cursor.SelectSingle)
|
|
@@ -56,6 +68,16 @@ var DriverBase = class extends Callable {
|
|
|
56
68
|
};
|
|
57
69
|
var SyncDriver = class extends DriverBase {
|
|
58
70
|
transactionId = 0;
|
|
71
|
+
prepare(create) {
|
|
72
|
+
const [query, compiled] = this.compile(create);
|
|
73
|
+
const prepared = this.prepareStatement(compiled);
|
|
74
|
+
return (...params) => {
|
|
75
|
+
const namedParams = Object.fromEntries(
|
|
76
|
+
params.map((value, i) => [`p${i}`, value])
|
|
77
|
+
);
|
|
78
|
+
return this.executeQuery(query, prepared, compiled.params(namedParams));
|
|
79
|
+
};
|
|
80
|
+
}
|
|
59
81
|
migrateSchema(...tables) {
|
|
60
82
|
const queries = [];
|
|
61
83
|
for (const table of Object.values(tables)) {
|
|
@@ -71,7 +93,7 @@ var SyncDriver = class extends DriverBase {
|
|
|
71
93
|
}
|
|
72
94
|
return this.executeQuery(Query.Batch({ queries }));
|
|
73
95
|
}
|
|
74
|
-
executeQuery(query) {
|
|
96
|
+
executeQuery(query, stmt, params) {
|
|
75
97
|
switch (query.type) {
|
|
76
98
|
case QueryType.Batch:
|
|
77
99
|
let result;
|
|
@@ -86,24 +108,26 @@ var SyncDriver = class extends DriverBase {
|
|
|
86
108
|
return result;
|
|
87
109
|
});
|
|
88
110
|
default:
|
|
89
|
-
const
|
|
111
|
+
const compiled = stmt ? void 0 : this.formatter.compile(query);
|
|
112
|
+
stmt = stmt || this.prepareStatement(compiled);
|
|
113
|
+
params = params || compiled.params();
|
|
90
114
|
if ("selection" in query) {
|
|
91
|
-
const res =
|
|
115
|
+
const res = stmt.all(params).map((row) => JSON.parse(row.result).result);
|
|
92
116
|
if (query.singleResult)
|
|
93
117
|
return res[0];
|
|
94
118
|
return res;
|
|
95
119
|
} else if (query.type === QueryType.Raw) {
|
|
96
120
|
switch (query.expectedReturn) {
|
|
97
121
|
case "row":
|
|
98
|
-
return
|
|
122
|
+
return stmt.all(params)[0];
|
|
99
123
|
case "rows":
|
|
100
|
-
return
|
|
124
|
+
return stmt.all(params);
|
|
101
125
|
default:
|
|
102
|
-
|
|
126
|
+
stmt.execute(params);
|
|
103
127
|
return void 0;
|
|
104
128
|
}
|
|
105
129
|
} else {
|
|
106
|
-
return
|
|
130
|
+
return stmt.run(params);
|
|
107
131
|
}
|
|
108
132
|
}
|
|
109
133
|
}
|
|
@@ -137,6 +161,16 @@ var SyncDriver = class extends DriverBase {
|
|
|
137
161
|
};
|
|
138
162
|
var AsyncDriver = class extends DriverBase {
|
|
139
163
|
transactionId = 0;
|
|
164
|
+
prepare(create) {
|
|
165
|
+
const [query, compiled] = this.compile(create);
|
|
166
|
+
const prepared = this.prepareStatement(compiled);
|
|
167
|
+
return (...params) => {
|
|
168
|
+
const namedParams = Object.fromEntries(
|
|
169
|
+
params.map((value, i) => [`p${i}`, value])
|
|
170
|
+
);
|
|
171
|
+
return this.executeQuery(query, prepared, compiled.params(namedParams));
|
|
172
|
+
};
|
|
173
|
+
}
|
|
140
174
|
async migrateSchema(...tables) {
|
|
141
175
|
const queries = [];
|
|
142
176
|
for (const table of Object.values(tables)) {
|
|
@@ -152,7 +186,7 @@ var AsyncDriver = class extends DriverBase {
|
|
|
152
186
|
}
|
|
153
187
|
return this.executeQuery(Query.Batch({ queries }));
|
|
154
188
|
}
|
|
155
|
-
async executeQuery(query) {
|
|
189
|
+
async executeQuery(query, stmt, params) {
|
|
156
190
|
switch (query.type) {
|
|
157
191
|
case QueryType.Batch:
|
|
158
192
|
let result;
|
|
@@ -167,10 +201,12 @@ var AsyncDriver = class extends DriverBase {
|
|
|
167
201
|
return result;
|
|
168
202
|
});
|
|
169
203
|
default:
|
|
170
|
-
const
|
|
204
|
+
const compiled = stmt ? void 0 : this.formatter.compile(query);
|
|
205
|
+
stmt = stmt || this.prepareStatement(compiled);
|
|
206
|
+
params = params || compiled.params();
|
|
171
207
|
if ("selection" in query) {
|
|
172
|
-
const res = (await
|
|
173
|
-
(
|
|
208
|
+
const res = (await stmt.all(params)).map(
|
|
209
|
+
(item) => JSON.parse(item.result).result
|
|
174
210
|
);
|
|
175
211
|
if (query.singleResult)
|
|
176
212
|
return res[0];
|
|
@@ -178,15 +214,15 @@ var AsyncDriver = class extends DriverBase {
|
|
|
178
214
|
} else if (query.type === QueryType.Raw) {
|
|
179
215
|
switch (query.expectedReturn) {
|
|
180
216
|
case "row":
|
|
181
|
-
return (await
|
|
217
|
+
return (await stmt.all(params))[0];
|
|
182
218
|
case "rows":
|
|
183
|
-
return await
|
|
219
|
+
return await stmt.all(params);
|
|
184
220
|
default:
|
|
185
|
-
await
|
|
221
|
+
await stmt.execute(params);
|
|
186
222
|
return void 0;
|
|
187
223
|
}
|
|
188
224
|
} else {
|
|
189
|
-
return await
|
|
225
|
+
return await stmt.run(params);
|
|
190
226
|
}
|
|
191
227
|
}
|
|
192
228
|
}
|
|
@@ -218,27 +254,35 @@ var AsyncDriver = class extends DriverBase {
|
|
|
218
254
|
}
|
|
219
255
|
}
|
|
220
256
|
};
|
|
257
|
+
var SyncPreparedStatementWrapper = class {
|
|
258
|
+
constructor(stmt) {
|
|
259
|
+
this.stmt = stmt;
|
|
260
|
+
}
|
|
261
|
+
async run(params) {
|
|
262
|
+
return this.stmt.run(params);
|
|
263
|
+
}
|
|
264
|
+
async all(params) {
|
|
265
|
+
return this.stmt.all(params);
|
|
266
|
+
}
|
|
267
|
+
async get(params) {
|
|
268
|
+
return this.stmt.get(params);
|
|
269
|
+
}
|
|
270
|
+
async execute(params) {
|
|
271
|
+
return this.stmt.execute(params);
|
|
272
|
+
}
|
|
273
|
+
};
|
|
221
274
|
var SyncWrapper = class extends AsyncDriver {
|
|
222
275
|
constructor(sync) {
|
|
223
276
|
super(sync.formatter);
|
|
224
277
|
this.sync = sync;
|
|
225
278
|
}
|
|
226
279
|
lock;
|
|
227
|
-
async executeQuery(query) {
|
|
280
|
+
async executeQuery(query, stmt, params) {
|
|
228
281
|
await this.lock;
|
|
229
|
-
return super.executeQuery(query);
|
|
230
|
-
}
|
|
231
|
-
async rows(stmt) {
|
|
232
|
-
return this.sync.rows(stmt);
|
|
233
|
-
}
|
|
234
|
-
async values(stmt) {
|
|
235
|
-
return this.sync.values(stmt);
|
|
236
|
-
}
|
|
237
|
-
async execute(stmt) {
|
|
238
|
-
return this.sync.execute(stmt);
|
|
282
|
+
return super.executeQuery(query, stmt, params);
|
|
239
283
|
}
|
|
240
|
-
|
|
241
|
-
return this.sync.
|
|
284
|
+
prepareStatement(stmt) {
|
|
285
|
+
return new SyncPreparedStatementWrapper(this.sync.prepareStatement(stmt));
|
|
242
286
|
}
|
|
243
287
|
async schemaInstructions(tableName) {
|
|
244
288
|
return this.sync.schemaInstructions(tableName);
|