rado 0.1.62 → 0.1.63

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.
Files changed (148) hide show
  1. package/dist/define/Column.d.ts +58 -58
  2. package/dist/define/Cursor.d.ts +87 -87
  3. package/dist/define/Expr.d.ts +172 -172
  4. package/dist/define/Fields.d.ts +13 -13
  5. package/dist/define/Functions.d.ts +5 -5
  6. package/dist/define/Id.d.ts +3 -3
  7. package/dist/define/Index.d.ts +17 -17
  8. package/dist/define/Ops.d.ts +7 -7
  9. package/dist/define/OrderBy.d.ts +9 -9
  10. package/dist/define/Param.d.ts +15 -15
  11. package/dist/define/Query.d.ts +109 -109
  12. package/dist/define/Schema.d.ts +18 -18
  13. package/dist/define/Selection.d.ts +20 -20
  14. package/dist/define/Table.d.ts +62 -62
  15. package/dist/define/Target.d.ts +38 -38
  16. package/dist/define/Update.d.ts +4 -4
  17. package/dist/driver/better-sqlite3.d.ts +15 -15
  18. package/dist/driver/bun-sqlite.d.ts +18 -18
  19. package/dist/driver/sql.js.d.ts +15 -15
  20. package/dist/driver/sqlite3.d.ts +18 -18
  21. package/dist/index.d.ts +21 -21
  22. package/dist/lib/Driver.d.ts +110 -110
  23. package/dist/lib/Formatter.d.ts +81 -81
  24. package/dist/lib/Formatter.js +3 -3
  25. package/dist/lib/Sanitizer.d.ts +5 -5
  26. package/dist/lib/SqlError.d.ts +3 -3
  27. package/dist/lib/Statement.d.ts +33 -33
  28. package/dist/sqlite/SqliteFormatter.d.ts +11 -11
  29. package/dist/sqlite/SqliteFunctions.d.ts +165 -165
  30. package/dist/sqlite/SqliteSchema.d.ts +25 -25
  31. package/dist/sqlite.d.ts +2 -2
  32. package/package.json +60 -60
  33. package/dist/CPU.20230126.092143.12244.0.001.cpuprofile +0 -1
  34. package/dist/Column.d.ts +0 -54
  35. package/dist/Column.js +0 -63
  36. package/dist/Cursor.d.ts +0 -77
  37. package/dist/Cursor.js +0 -221
  38. package/dist/Driver.d.ts +0 -89
  39. package/dist/Driver.js +0 -262
  40. package/dist/Expr.d.ts +0 -149
  41. package/dist/Expr.js +0 -284
  42. package/dist/Fields.d.ts +0 -11
  43. package/dist/Fields.js +0 -0
  44. package/dist/Formatter.d.ts +0 -55
  45. package/dist/Formatter.js +0 -496
  46. package/dist/Functions.d.ts +0 -7
  47. package/dist/Functions.js +0 -11
  48. package/dist/Id.d.ts +0 -3
  49. package/dist/Id.js +0 -0
  50. package/dist/Ops.d.ts +0 -8
  51. package/dist/Ops.js +0 -45
  52. package/dist/OrderBy.d.ts +0 -9
  53. package/dist/OrderBy.js +0 -9
  54. package/dist/Param.d.ts +0 -15
  55. package/dist/Param.js +0 -18
  56. package/dist/Query.d.ts +0 -107
  57. package/dist/Query.js +0 -74
  58. package/dist/Sanitizer.d.ts +0 -4
  59. package/dist/Sanitizer.js +0 -0
  60. package/dist/Schema.d.ts +0 -23
  61. package/dist/Schema.js +0 -60
  62. package/dist/Selection.d.ts +0 -20
  63. package/dist/Selection.js +0 -7
  64. package/dist/Statement.d.ts +0 -57
  65. package/dist/Statement.js +0 -184
  66. package/dist/Table.d.ts +0 -56
  67. package/dist/Table.js +0 -104
  68. package/dist/Target.d.ts +0 -30
  69. package/dist/Target.js +0 -37
  70. package/dist/Update.d.ts +0 -4
  71. package/dist/Update.js +0 -0
  72. package/dist/lib/Column.d.ts +0 -57
  73. package/dist/lib/Column.js +0 -63
  74. package/dist/lib/Cursor.d.ts +0 -79
  75. package/dist/lib/Cursor.js +0 -231
  76. package/dist/lib/Expr.d.ts +0 -154
  77. package/dist/lib/Expr.js +0 -284
  78. package/dist/lib/Fields.d.ts +0 -13
  79. package/dist/lib/Fields.js +0 -0
  80. package/dist/lib/Functions.d.ts +0 -5
  81. package/dist/lib/Functions.js +0 -11
  82. package/dist/lib/Id.d.ts +0 -3
  83. package/dist/lib/Id.js +0 -0
  84. package/dist/lib/Index.d.ts +0 -17
  85. package/dist/lib/Index.js +0 -20
  86. package/dist/lib/Ops.d.ts +0 -8
  87. package/dist/lib/Ops.js +0 -45
  88. package/dist/lib/OrderBy.d.ts +0 -9
  89. package/dist/lib/OrderBy.js +0 -9
  90. package/dist/lib/Param.d.ts +0 -20
  91. package/dist/lib/Param.js +0 -27
  92. package/dist/lib/Query.d.ts +0 -109
  93. package/dist/lib/Query.js +0 -74
  94. package/dist/lib/Schema.d.ts +0 -18
  95. package/dist/lib/Schema.js +0 -67
  96. package/dist/lib/Selection.d.ts +0 -20
  97. package/dist/lib/Selection.js +0 -7
  98. package/dist/lib/Table.d.ts +0 -62
  99. package/dist/lib/Table.js +0 -130
  100. package/dist/lib/Target.d.ts +0 -30
  101. package/dist/lib/Target.js +0 -37
  102. package/dist/lib/Update.d.ts +0 -4
  103. package/dist/lib/Update.js +0 -0
  104. package/dist/sqlite/index.d.ts +0 -2
  105. package/dist/sqlite/index.js +0 -3
  106. package/dist/src/driver/better-sqlite3.js +0 -49
  107. package/dist/src/driver/sql.js.js +0 -66
  108. package/dist/src/driver/sqlite3.js +0 -87
  109. package/dist/src/index.js +0 -24
  110. package/dist/src/lib/Column.js +0 -63
  111. package/dist/src/lib/Cursor.js +0 -231
  112. package/dist/src/lib/Driver.js +0 -316
  113. package/dist/src/lib/Expr.js +0 -284
  114. package/dist/src/lib/Fields.js +0 -0
  115. package/dist/src/lib/Formatter.js +0 -625
  116. package/dist/src/lib/Functions.js +0 -11
  117. package/dist/src/lib/Id.js +0 -0
  118. package/dist/src/lib/Index.js +0 -20
  119. package/dist/src/lib/Ops.js +0 -45
  120. package/dist/src/lib/OrderBy.js +0 -9
  121. package/dist/src/lib/Param.js +0 -27
  122. package/dist/src/lib/Query.js +0 -74
  123. package/dist/src/lib/Sanitizer.js +0 -0
  124. package/dist/src/lib/Schema.js +0 -67
  125. package/dist/src/lib/Selection.js +0 -7
  126. package/dist/src/lib/Statement.js +0 -103
  127. package/dist/src/lib/Table.js +0 -130
  128. package/dist/src/lib/Target.js +0 -37
  129. package/dist/src/lib/Update.js +0 -0
  130. package/dist/src/sqlite/SqliteFormatter.js +0 -67
  131. package/dist/src/sqlite/SqliteFunctions.js +0 -146
  132. package/dist/src/sqlite/SqliteSchema.js +0 -47
  133. package/dist/src/sqlite.js +0 -3
  134. package/dist/test/DbSuite.js +0 -28
  135. package/dist/test/TSTestTypes.js +0 -6
  136. package/dist/test/TestBasic.js +0 -172
  137. package/dist/test/TestExtend.js +0 -68
  138. package/dist/test/TestFts5.js +0 -34
  139. package/dist/test/TestFunctions.js +0 -28
  140. package/dist/test/TestJoins.js +0 -34
  141. package/dist/test/TestJson.js +0 -33
  142. package/dist/test/TestPrepare.js +0 -27
  143. package/dist/test/TestRawSql.js +0 -31
  144. package/dist/test/TestSchema.js +0 -69
  145. package/dist/test/TestSubQueries.js +0 -79
  146. package/dist/test/TestTransaction.js +0 -54
  147. package/dist/test/TestUpdate.js +0 -95
  148. package/dist/test/index.js +0 -14
package/dist/Cursor.d.ts DELETED
@@ -1,77 +0,0 @@
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
- query(): Query<T>;
12
- toJSON(): Query<T>;
13
- }
14
- export declare namespace Cursor {
15
- class Limitable<T> extends Cursor<T> {
16
- take(limit: number | undefined): Limitable<T>;
17
- skip(offset: number | undefined): Limitable<T>;
18
- }
19
- class Filterable<T> extends Limitable<T> {
20
- where(...where: Array<EV<boolean>>): Filterable<T>;
21
- }
22
- class Delete<T> extends Filterable<{
23
- rowsAffected: number;
24
- }> {
25
- query(): Query.Delete;
26
- }
27
- class Update<T> extends Filterable<{
28
- rowsAffected: number;
29
- }> {
30
- query: () => Query.Update;
31
- set(set: UpdateSet<T>): Update<T>;
32
- }
33
- class InsertValuesReturning<T> extends Cursor<T> {
34
- }
35
- class InsertValues extends Cursor<{
36
- rowsAffected: number;
37
- }> {
38
- query(): Query.Insert;
39
- returning<X extends Selection>(selection: X): InsertValuesReturning<Selection.Infer<X>>;
40
- }
41
- class Insert<T> {
42
- protected into: Schema;
43
- constructor(into: Schema);
44
- values(...data: Array<Table.Insert<T>>): InsertValues;
45
- }
46
- class Create extends Cursor<void> {
47
- protected table: Schema;
48
- constructor(table: Schema);
49
- }
50
- class Batch<T = void> extends Cursor<T> {
51
- protected queries: Array<Query>;
52
- constructor(queries: Array<Query>);
53
- }
54
- class SelectMultiple<T> extends Filterable<Array<T>> {
55
- query(): Query.Select;
56
- leftJoin<C>(that: Table<C>, ...on: Array<EV<boolean>>): SelectMultiple<T>;
57
- innerJoin<C>(that: Table<C>, ...on: Array<EV<boolean>>): SelectMultiple<T>;
58
- select<X extends Selection>(selection: X): SelectMultiple<Selection.Infer<X>>;
59
- count(): SelectSingle<number>;
60
- orderBy(...orderBy: Array<Expr<any> | OrderBy>): SelectMultiple<T>;
61
- groupBy(...groupBy: Array<Expr<any>>): SelectMultiple<T>;
62
- first(): SelectSingle<T | undefined>;
63
- where(...where: Array<EV<boolean>>): SelectMultiple<T>;
64
- toExpr(): Expr<T>;
65
- }
66
- class SelectSingle<T> extends Filterable<T> {
67
- query(): Query.Select;
68
- leftJoin<C>(that: Table<C>, ...on: Array<EV<boolean>>): SelectSingle<T>;
69
- innerJoin<C>(that: Table<C>, ...on: Array<EV<boolean>>): SelectSingle<T>;
70
- select<X extends Selection>(selection: X): SelectSingle<Selection.Infer<X>>;
71
- orderBy(...orderBy: Array<OrderBy>): SelectSingle<T>;
72
- groupBy(...groupBy: Array<Expr<any>>): SelectSingle<T>;
73
- where(...where: Array<EV<boolean>>): SelectSingle<T>;
74
- all(): SelectMultiple<T>;
75
- toExpr(): Expr<T>;
76
- }
77
- }
package/dist/Cursor.js DELETED
@@ -1,221 +0,0 @@
1
- // src/Cursor.ts
2
- import { Expr, ExprData } from "./Expr.js";
3
- import { Functions } from "./Functions.js";
4
- import { Query } from "./Query.js";
5
- import { Schema } from "./Schema.js";
6
- import { Selection } from "./Selection.js";
7
- import { Target } from "./Target.js";
8
- var Cursor = class {
9
- [Selection.__cursorType]() {
10
- throw "assert";
11
- }
12
- constructor(query) {
13
- Object.defineProperty(this, "query", {
14
- enumerable: false,
15
- value: () => query
16
- });
17
- }
18
- query() {
19
- throw new Error("Not implemented");
20
- }
21
- toJSON() {
22
- return this.query();
23
- }
24
- };
25
- ((Cursor2) => {
26
- class Limitable extends Cursor2 {
27
- take(limit) {
28
- return new Limitable({ ...this.query(), limit });
29
- }
30
- skip(offset) {
31
- return new Limitable({ ...this.query(), offset });
32
- }
33
- }
34
- Cursor2.Limitable = Limitable;
35
- class Filterable extends Limitable {
36
- where(...where) {
37
- const condition = Expr.and(...where);
38
- const query = this.query();
39
- return new Filterable({
40
- ...query,
41
- where: (query.where ? condition.and(new Expr(query.where)) : condition).expr
42
- });
43
- }
44
- }
45
- Cursor2.Filterable = Filterable;
46
- class Delete extends Filterable {
47
- query() {
48
- return super.query();
49
- }
50
- }
51
- Cursor2.Delete = Delete;
52
- class Update extends Filterable {
53
- set(set) {
54
- return new Update({ ...this.query(), set });
55
- }
56
- }
57
- Cursor2.Update = Update;
58
- class InsertValuesReturning extends Cursor2 {
59
- }
60
- Cursor2.InsertValuesReturning = InsertValuesReturning;
61
- class InsertValues extends Cursor2 {
62
- query() {
63
- return super.query();
64
- }
65
- returning(selection) {
66
- return new InsertValuesReturning(
67
- Query.Insert({ ...this.query(), selection: ExprData.create(selection) })
68
- );
69
- }
70
- }
71
- Cursor2.InsertValues = InsertValues;
72
- class Insert {
73
- constructor(into) {
74
- this.into = into;
75
- }
76
- values(...data) {
77
- return new InsertValues(Query.Insert({ into: this.into, data }));
78
- }
79
- }
80
- Cursor2.Insert = Insert;
81
- class Create extends Cursor2 {
82
- constructor(table) {
83
- super(Schema.create(table));
84
- this.table = table;
85
- }
86
- }
87
- Cursor2.Create = Create;
88
- class Batch extends Cursor2 {
89
- constructor(queries) {
90
- super(Query.Batch({ queries }));
91
- this.queries = queries;
92
- }
93
- }
94
- Cursor2.Batch = Batch;
95
- class SelectMultiple extends Filterable {
96
- query() {
97
- return super.query();
98
- }
99
- leftJoin(that, ...on) {
100
- const query = this.query();
101
- return new SelectMultiple({
102
- ...query,
103
- from: Target.Join(
104
- query.from,
105
- Target.Table(that.schema()),
106
- "left",
107
- Expr.and(...on).expr
108
- )
109
- });
110
- }
111
- innerJoin(that, ...on) {
112
- const query = this.query();
113
- return new SelectMultiple({
114
- ...query,
115
- from: Target.Join(
116
- query.from,
117
- Target.Table(that.schema()),
118
- "inner",
119
- Expr.and(...on).expr
120
- )
121
- });
122
- }
123
- select(selection) {
124
- return new SelectMultiple({
125
- ...this.query(),
126
- selection: ExprData.create(selection)
127
- });
128
- }
129
- count() {
130
- return new SelectSingle({
131
- ...this.query(),
132
- selection: Functions.count().expr,
133
- singleResult: true
134
- });
135
- }
136
- orderBy(...orderBy) {
137
- return new SelectMultiple({
138
- ...this.query(),
139
- orderBy: orderBy.map((e) => {
140
- return e instanceof Expr ? e.asc() : e;
141
- })
142
- });
143
- }
144
- groupBy(...groupBy) {
145
- return new SelectMultiple({
146
- ...this.query(),
147
- groupBy: groupBy.map(ExprData.create)
148
- });
149
- }
150
- first() {
151
- return new SelectSingle({ ...this.query(), singleResult: true });
152
- }
153
- where(...where) {
154
- return new SelectMultiple(super.where(...where).query());
155
- }
156
- toExpr() {
157
- return new Expr(ExprData.Query(this.query()));
158
- }
159
- }
160
- Cursor2.SelectMultiple = SelectMultiple;
161
- class SelectSingle extends Filterable {
162
- query() {
163
- return super.query();
164
- }
165
- leftJoin(that, ...on) {
166
- const query = this.query();
167
- return new SelectSingle({
168
- ...query,
169
- from: Target.Join(
170
- query.from,
171
- Target.Table(that.schema()),
172
- "left",
173
- Expr.and(...on).expr
174
- )
175
- });
176
- }
177
- innerJoin(that, ...on) {
178
- const query = this.query();
179
- return new SelectSingle({
180
- ...query,
181
- from: Target.Join(
182
- query.from,
183
- Target.Table(that.schema()),
184
- "inner",
185
- Expr.and(...on).expr
186
- )
187
- });
188
- }
189
- select(selection) {
190
- return new SelectSingle({
191
- ...this.query(),
192
- selection: ExprData.create(selection)
193
- });
194
- }
195
- orderBy(...orderBy) {
196
- return new SelectSingle({
197
- ...this.query(),
198
- orderBy
199
- });
200
- }
201
- groupBy(...groupBy) {
202
- return new SelectSingle({
203
- ...this.query(),
204
- groupBy: groupBy.map(ExprData.create)
205
- });
206
- }
207
- where(...where) {
208
- return new SelectSingle(super.where(...where).query());
209
- }
210
- all() {
211
- return new SelectMultiple({ ...this.query(), singleResult: false });
212
- }
213
- toExpr() {
214
- return new Expr(ExprData.Query(this.query()));
215
- }
216
- }
217
- Cursor2.SelectSingle = SelectSingle;
218
- })(Cursor || (Cursor = {}));
219
- export {
220
- Cursor
221
- };
package/dist/Driver.d.ts DELETED
@@ -1,89 +0,0 @@
1
- import { Cursor } from './Cursor';
2
- import { Formatter } from './Formatter';
3
- import { Query } from './Query';
4
- import { SchemaInstructions } from './Schema';
5
- import { Statement } from './Statement';
6
- import { Table } from './Table';
7
- declare class Callable extends Function {
8
- constructor(fn: Function);
9
- }
10
- declare abstract class DriverBase extends Callable {
11
- formatter: Formatter;
12
- constructor(formatter: Formatter);
13
- all(...args: Array<any>): any;
14
- get(...args: Array<any>): any;
15
- sql(strings: TemplateStringsArray, ...params: Array<any>): Cursor<unknown>;
16
- executeTemplate(expectedReturn: Query.RawReturn, strings: TemplateStringsArray, ...params: Array<any>): any;
17
- abstract executeQuery(query: Query<any>): any;
18
- }
19
- interface SyncDriver {
20
- <T>(query: Cursor<T>): T;
21
- <T>(...queries: Array<Cursor<any>>): T;
22
- (strings: TemplateStringsArray, ...values: any[]): any;
23
- }
24
- declare abstract class SyncDriver extends DriverBase {
25
- transactionId: number;
26
- abstract rows(stmt: Statement.Compiled): Array<object>;
27
- abstract values(stmt: Statement.Compiled): Array<Array<any>>;
28
- abstract execute(stmt: Statement.Compiled): void;
29
- abstract mutate(stmt: Statement.Compiled): {
30
- rowsAffected: number;
31
- };
32
- abstract schemaInstructions(tableName: string): SchemaInstructions | undefined;
33
- migrateSchema(...tables: Array<Table<any>>): unknown;
34
- executeQuery<T>(query: Query<T>): T;
35
- all<T>(cursor: Cursor.SelectSingle<T>): Array<T>;
36
- all<T>(cursor: Cursor<T>): Array<T>;
37
- all<T>(strings: TemplateStringsArray, ...params: Array<any>): Array<T>;
38
- get<T>(cursor: Cursor.SelectMultiple<T>): T | null;
39
- get<T>(cursor: Cursor<T>): T;
40
- get<T>(strings: TemplateStringsArray, ...params: Array<any>): T;
41
- transaction<T>(run: (query: SyncDriver) => T): T;
42
- toAsync(): SyncWrapper;
43
- }
44
- interface AsyncDriver {
45
- <T>(query: Cursor<T>): Promise<T>;
46
- <T>(...queries: Array<Cursor<any>>): Promise<T>;
47
- (strings: TemplateStringsArray, ...values: any[]): Promise<any>;
48
- }
49
- declare abstract class AsyncDriver extends DriverBase {
50
- transactionId: number;
51
- abstract isolate(): [connection: AsyncDriver, release: () => Promise<void>];
52
- abstract rows(stmt: Statement.Compiled): Promise<Array<object>>;
53
- abstract values(stmt: Statement.Compiled): Promise<Array<Array<any>>>;
54
- abstract execute(stmt: Statement.Compiled): Promise<void>;
55
- abstract mutate(stmt: Statement.Compiled): Promise<{
56
- rowsAffected: number;
57
- }>;
58
- abstract schemaInstructions(tableName: string): Promise<SchemaInstructions | undefined>;
59
- migrateSchema(...tables: Array<Table<any>>): Promise<unknown>;
60
- executeQuery<T>(query: Query<T>): Promise<T>;
61
- all<T>(cursor: Cursor.SelectSingle<T>): Promise<Array<T>>;
62
- all<T>(cursor: Cursor<T>): Promise<T>;
63
- all<T>(strings: TemplateStringsArray, ...params: Array<any>): Promise<Array<T>>;
64
- get<T>(cursor: Cursor.SelectMultiple<T>): Promise<T | null>;
65
- get<T>(cursor: Cursor<T>): Promise<T>;
66
- get<T>(strings: TemplateStringsArray, ...params: Array<any>): Promise<T>;
67
- transaction<T>(run: (query: AsyncDriver) => T): Promise<T>;
68
- }
69
- declare class SyncWrapper extends AsyncDriver {
70
- private sync;
71
- lock: Promise<void> | undefined;
72
- constructor(sync: SyncDriver);
73
- executeQuery<T>(query: Query<T>): Promise<T>;
74
- rows(stmt: Statement.Compiled): Promise<Array<object>>;
75
- values(stmt: Statement.Compiled): Promise<Array<Array<any>>>;
76
- execute(stmt: Statement.Compiled): Promise<void>;
77
- mutate(stmt: Statement.Compiled): Promise<{
78
- rowsAffected: number;
79
- }>;
80
- schemaInstructions(tableName: string): Promise<SchemaInstructions | undefined>;
81
- isolate(): [connection: AsyncDriver, release: () => Promise<void>];
82
- }
83
- export declare namespace Driver {
84
- type Sync = SyncDriver;
85
- const Sync: typeof SyncDriver;
86
- type Async = AsyncDriver;
87
- const Async: typeof AsyncDriver;
88
- }
89
- export {};
package/dist/Driver.js DELETED
@@ -1,262 +0,0 @@
1
- // src/Driver.ts
2
- import { Cursor } from "./Cursor.js";
3
- import { Query, QueryType } from "./Query.js";
4
- import { Schema } from "./Schema.js";
5
- var Callable = class extends Function {
6
- constructor(fn) {
7
- super();
8
- return new Proxy(this, {
9
- apply(_, thisArg, input) {
10
- return fn.apply(thisArg, input);
11
- }
12
- });
13
- }
14
- };
15
- function isTemplateStringsArray(input) {
16
- return Boolean(Array.isArray(input) && input.raw);
17
- }
18
- var DriverBase = class extends Callable {
19
- constructor(formatter) {
20
- super((...args) => {
21
- const [input, ...rest] = args;
22
- if (input instanceof Cursor && rest.length === 0)
23
- return this.executeQuery(input.query());
24
- if (isTemplateStringsArray(input))
25
- return this.executeTemplate(void 0, input, ...rest);
26
- return this.executeQuery(
27
- Query.Batch({
28
- queries: args.filter((arg) => arg instanceof Cursor).map((arg) => arg.query())
29
- })
30
- );
31
- });
32
- this.formatter = formatter;
33
- }
34
- all(...args) {
35
- const [input, ...rest] = args;
36
- if (input instanceof Cursor.SelectSingle)
37
- return this.executeQuery(input.all().query());
38
- if (input instanceof Cursor)
39
- return this.executeQuery(input.query());
40
- return this.executeTemplate("rows", input, ...rest);
41
- }
42
- get(...args) {
43
- const [input, ...rest] = args;
44
- if (input instanceof Cursor.SelectMultiple)
45
- return this.executeQuery(input.first().query());
46
- if (input instanceof Cursor)
47
- return this.executeQuery(input.query());
48
- return this.executeTemplate("row", input, ...rest);
49
- }
50
- sql(strings, ...params) {
51
- return new Cursor(Query.Raw({ strings, params }));
52
- }
53
- executeTemplate(expectedReturn, strings, ...params) {
54
- return this.executeQuery(Query.Raw({ strings, params, expectedReturn }));
55
- }
56
- };
57
- var SyncDriver = class extends DriverBase {
58
- transactionId = 0;
59
- migrateSchema(...tables) {
60
- const queries = [];
61
- for (const table of Object.values(tables)) {
62
- const schema = table.schema();
63
- const localSchema = this.schemaInstructions(schema.name);
64
- if (!localSchema) {
65
- queries.push(...Schema.create(schema).queries);
66
- } else {
67
- const changes = Schema.upgrade(this.formatter, localSchema, schema);
68
- if (changes.length)
69
- queries.push(...changes);
70
- }
71
- }
72
- return this.executeQuery(Query.Batch({ queries }));
73
- }
74
- executeQuery(query) {
75
- switch (query.type) {
76
- case QueryType.Batch:
77
- let result;
78
- const stmts = query.queries;
79
- if (stmts.length === 0)
80
- return void 0;
81
- if (stmts.length === 1)
82
- return this.executeQuery(stmts[0]);
83
- return this.transaction((cnx) => {
84
- for (const query2 of stmts)
85
- result = cnx.executeQuery(query2);
86
- return result;
87
- });
88
- default:
89
- const stmt = this.formatter.compile(query);
90
- if ("selection" in query) {
91
- const res = this.values(stmt).map(([item]) => JSON.parse(item).result);
92
- if (query.singleResult)
93
- return res[0];
94
- return res;
95
- } else if (query.type === QueryType.Raw) {
96
- switch (query.expectedReturn) {
97
- case "row":
98
- return this.rows(stmt)[0];
99
- case "rows":
100
- return this.rows(stmt);
101
- default:
102
- this.execute(stmt);
103
- return void 0;
104
- }
105
- } else {
106
- return this.mutate(stmt);
107
- }
108
- }
109
- }
110
- all(...args) {
111
- return super.all(...args);
112
- }
113
- get(...args) {
114
- return super.get(...args);
115
- }
116
- transaction(run) {
117
- const id = `t${this.transactionId++}`;
118
- this.executeQuery(
119
- Query.Transaction({ op: Query.TransactionOperation.Begin, id })
120
- );
121
- try {
122
- const res = run(this);
123
- this.executeQuery(
124
- Query.Transaction({ op: Query.TransactionOperation.Commit, id })
125
- );
126
- return res;
127
- } catch (e) {
128
- this.executeQuery(
129
- Query.Transaction({ op: Query.TransactionOperation.Rollback, id })
130
- );
131
- throw e;
132
- }
133
- }
134
- toAsync() {
135
- return new SyncWrapper(this);
136
- }
137
- };
138
- var AsyncDriver = class extends DriverBase {
139
- transactionId = 0;
140
- async migrateSchema(...tables) {
141
- const queries = [];
142
- for (const table of Object.values(tables)) {
143
- const schema = table.schema();
144
- const localSchema = await this.schemaInstructions(schema.name);
145
- if (!localSchema) {
146
- queries.push(...Schema.create(schema).queries);
147
- } else {
148
- const changes = Schema.upgrade(this.formatter, localSchema, schema);
149
- if (changes.length)
150
- queries.push(...changes);
151
- }
152
- }
153
- return this.executeQuery(Query.Batch({ queries }));
154
- }
155
- async executeQuery(query) {
156
- switch (query.type) {
157
- case QueryType.Batch:
158
- let result;
159
- const stmts = query.queries;
160
- if (stmts.length === 0)
161
- return void 0;
162
- if (stmts.length === 1)
163
- return this.executeQuery(stmts[0]);
164
- return this.transaction(async (cnx) => {
165
- for (const query2 of stmts)
166
- result = await cnx.executeQuery(query2);
167
- return result;
168
- });
169
- default:
170
- const stmt = this.formatter.compile(query);
171
- if ("selection" in query) {
172
- const res = (await this.values(stmt)).map(
173
- ([item]) => JSON.parse(item).result
174
- );
175
- if (query.singleResult)
176
- return res[0];
177
- return res;
178
- } else if (query.type === QueryType.Raw) {
179
- switch (query.expectedReturn) {
180
- case "row":
181
- return (await this.rows(stmt))[0];
182
- case "rows":
183
- return await this.rows(stmt);
184
- default:
185
- await this.execute(stmt);
186
- return void 0;
187
- }
188
- } else {
189
- return await this.mutate(stmt);
190
- }
191
- }
192
- }
193
- all(...args) {
194
- return super.all(...args);
195
- }
196
- get(...args) {
197
- return super.get(...args);
198
- }
199
- async transaction(run) {
200
- const id = `t${this.transactionId++}`;
201
- const [connection, release] = this.isolate();
202
- await connection.executeQuery(
203
- Query.Transaction({ op: Query.TransactionOperation.Begin, id })
204
- );
205
- try {
206
- const res = await run(connection);
207
- await connection.executeQuery(
208
- Query.Transaction({ op: Query.TransactionOperation.Commit, id })
209
- );
210
- return res;
211
- } catch (e) {
212
- await connection.executeQuery(
213
- Query.Transaction({ op: Query.TransactionOperation.Rollback, id })
214
- );
215
- throw e;
216
- } finally {
217
- await release();
218
- }
219
- }
220
- };
221
- var SyncWrapper = class extends AsyncDriver {
222
- constructor(sync) {
223
- super(sync.formatter);
224
- this.sync = sync;
225
- }
226
- lock;
227
- async executeQuery(query) {
228
- 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);
239
- }
240
- async mutate(stmt) {
241
- return this.sync.mutate(stmt);
242
- }
243
- async schemaInstructions(tableName) {
244
- return this.sync.schemaInstructions(tableName);
245
- }
246
- isolate() {
247
- const connection = new SyncWrapper(this.sync);
248
- let release, trigger = new Promise((resolve) => {
249
- release = async () => resolve();
250
- });
251
- this.lock = Promise.resolve(this.lock).then(() => trigger);
252
- return [connection, release];
253
- }
254
- };
255
- var Driver;
256
- ((Driver2) => {
257
- Driver2.Sync = SyncDriver;
258
- Driver2.Async = AsyncDriver;
259
- })(Driver || (Driver = {}));
260
- export {
261
- Driver
262
- };