rado 0.2.24 → 0.2.26

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 (44) hide show
  1. package/dist/define/Expr.d.ts +5 -4
  2. package/dist/define/Expr.js +3 -2
  3. package/dist/define/Fields.d.ts +2 -2
  4. package/dist/define/Ops.d.ts +13 -7
  5. package/dist/define/Ops.js +17 -7
  6. package/dist/define/Query.d.ts +4 -104
  7. package/dist/define/Query.js +8 -388
  8. package/dist/define/Selection.d.ts +2 -2
  9. package/dist/define/Table.d.ts +10 -16
  10. package/dist/define/Table.js +3 -41
  11. package/dist/define/Target.d.ts +6 -6
  12. package/dist/define/Target.js +8 -8
  13. package/dist/define/VirtualTable.d.ts +33 -0
  14. package/dist/define/VirtualTable.js +41 -0
  15. package/dist/define/query/Batch.d.ts +7 -0
  16. package/dist/define/query/Batch.js +18 -0
  17. package/dist/define/query/CreateTable.d.ts +6 -0
  18. package/dist/define/query/CreateTable.js +12 -0
  19. package/dist/define/query/Delete.d.ts +11 -0
  20. package/dist/define/query/Delete.js +19 -0
  21. package/dist/define/query/Insert.d.ts +19 -0
  22. package/dist/define/query/Insert.js +36 -0
  23. package/dist/define/query/Select.d.ts +40 -0
  24. package/dist/define/query/Select.js +173 -0
  25. package/dist/define/query/TableSelect.d.ts +21 -0
  26. package/dist/define/query/TableSelect.js +71 -0
  27. package/dist/define/query/Union.d.ts +17 -0
  28. package/dist/define/query/Union.js +117 -0
  29. package/dist/define/query/Update.d.ts +12 -0
  30. package/dist/define/query/Update.js +19 -0
  31. package/dist/driver/bun-sqlite.js +3 -2
  32. package/dist/driver/sql.js.d.ts +2 -2
  33. package/dist/driver/sql.js.js +2 -2
  34. package/dist/lib/Driver.d.ts +3 -16
  35. package/dist/lib/Driver.js +0 -28
  36. package/dist/lib/Formatter.d.ts +3 -1
  37. package/dist/lib/Formatter.js +28 -9
  38. package/dist/sqlite/SqliteSchema.js +3 -3
  39. package/dist/util/Alias.d.ts +1 -0
  40. package/dist/util/Alias.js +7 -0
  41. package/dist/util/Callable.d.ts +8 -0
  42. package/package.json +1 -1
  43. package/dist/define/CTE.d.ts +0 -2
  44. package/dist/define/CTE.js +0 -51
@@ -1,9 +1,10 @@
1
1
  import { Fields } from './Fields';
2
2
  import { OrderBy } from './OrderBy';
3
3
  import { ParamData } from './Param';
4
- import { Query, QueryData } from './Query';
4
+ import { QueryData } from './Query';
5
5
  import { Selection } from './Selection';
6
6
  import { Target } from './Target';
7
+ import { SelectMultiple, SelectSingle } from './query/Select';
7
8
  declare const DATA: unique symbol;
8
9
  declare const TO_EXPR: unique symbol;
9
10
  declare const IS_EXPR: unique symbol;
@@ -127,13 +128,13 @@ export declare class Expr<T> {
127
128
  not(): Expr<boolean>;
128
129
  or(this: Expr<boolean>, that: EV<boolean>): Expr<boolean>;
129
130
  and(this: Expr<boolean>, that: EV<boolean>): Expr<boolean>;
130
- is(that: EV<T> | Query.SelectSingle<T>): Expr<boolean>;
131
+ is(that: EV<T> | SelectSingle<T>): Expr<boolean>;
131
132
  isConstant(value: T): boolean;
132
133
  isNot(that: EV<T>): Expr<boolean>;
133
134
  isNull(): Expr<boolean>;
134
135
  isNotNull(): Expr<boolean>;
135
- isIn(that: EV<Array<T>> | Query.SelectMultiple<T>): Expr<boolean>;
136
- isNotIn(that: EV<Array<T>> | Query.SelectMultiple<T>): Expr<boolean>;
136
+ isIn(that: EV<Array<T>> | SelectMultiple<T>): Expr<boolean>;
137
+ isNotIn(that: EV<Array<T>> | SelectMultiple<T>): Expr<boolean>;
137
138
  isGreater(that: EV<any>): Expr<boolean>;
138
139
  isGreaterOrEqual(that: EV<any>): Expr<boolean>;
139
140
  isLess(that: EV<any>): Expr<boolean>;
@@ -1,4 +1,5 @@
1
1
  // src/define/Expr.ts
2
+ import { randomAlias } from "../util/Alias.js";
2
3
  import { OrderDirection } from "./OrderBy.js";
3
4
  import { ParamData, ParamType } from "./Param.js";
4
5
  import { Target } from "./Target.js";
@@ -336,7 +337,7 @@ var Expr = class {
336
337
  return Expr.create(value).isIn(this);
337
338
  }
338
339
  filter(fn) {
339
- const alias = `__${Math.random().toString(36).slice(2, 9)}`;
340
+ const alias = randomAlias();
340
341
  const target = new Target.Expr(this[DATA], alias);
341
342
  return new Expr(
342
343
  new ExprData.Filter(
@@ -346,7 +347,7 @@ var Expr = class {
346
347
  );
347
348
  }
348
349
  map(fn) {
349
- const alias = `__${Math.random().toString(36).slice(2, 9)}`;
350
+ const alias = randomAlias();
350
351
  const target = new Target.Expr(this[DATA], alias);
351
352
  return new Expr(
352
353
  new ExprData.Map(
@@ -4,9 +4,9 @@ type ObjectUnion<T> = {
4
4
  };
5
5
  type RecordField<T> = Expr<T> & FieldsOf<ObjectUnion<T>>;
6
6
  type Field<T> = [T] extends [Array<any>] ? Expr<T> : [T] extends [number | string | boolean] ? Expr<T> : [T] extends [Record<string, any> | null] ? RecordField<T> : Expr<T>;
7
- type FieldsOf<Row> = Row extends Record<string, any> ? {
7
+ type FieldsOf<Row> = [Row] extends [Record<string, any>] ? {
8
8
  [K in keyof Row]-?: Field<Row[K]>;
9
9
  } : never;
10
10
  type IsStrictlyAny<T> = (T extends never ? true : false) extends false ? false : true;
11
- export type Fields<T> = IsStrictlyAny<T> extends true ? any : T extends object ? FieldsOf<T> : Field<T>;
11
+ export type Fields<T> = IsStrictlyAny<T> extends true ? any : [T] extends [object] ? FieldsOf<T> : Field<T>;
12
12
  export {};
@@ -1,9 +1,15 @@
1
- import { Query } from './Query';
2
1
  import { Selection } from './Selection';
3
2
  import { Table } from './Table';
4
- export declare function select<X extends Selection>(selection: X): Query.SelectMultiple<Selection.Infer<X>>;
5
- export declare function from<Row>(source: Table<Row> | Query.SelectMultiple<Row>): Query.SelectMultiple<Row>;
6
- export declare function update<Row>(table: Table<Row>): Query.Update<Row>;
7
- export declare function insertInto<Row>(table: Table<Row>): Query.Insert<Row>;
8
- export declare function deleteFrom<Row>(table: Table<Row>): Query.Delete;
9
- export declare function create(...tables: Array<Table<any>>): Query.Batch;
3
+ import { Batch } from './query/Batch';
4
+ import { Delete } from './query/Delete';
5
+ import { Insert } from './query/Insert';
6
+ import { SelectMultiple } from './query/Select';
7
+ import { RecursiveUnion } from './query/Union';
8
+ import { Update } from './query/Update';
9
+ export declare function withRecursive<Row>(initialSelect: SelectMultiple<Row>): RecursiveUnion<Row>;
10
+ export declare function select<X extends Selection>(selection: X): SelectMultiple<Selection.Infer<X>>;
11
+ export declare function from<Row>(source: Table<Row> | SelectMultiple<Row>): SelectMultiple<Row>;
12
+ export declare function update<Row>(table: Table<Row>): Update<Row>;
13
+ export declare function insertInto<Row>(table: Table<Row>): Insert<Row>;
14
+ export declare function deleteFrom<Row>(table: Table<Row>): Delete;
15
+ export declare function create(...tables: Array<Table<any>>): Batch;
@@ -4,8 +4,17 @@ import { Query, QueryData } from "./Query.js";
4
4
  import { Schema } from "./Schema.js";
5
5
  import { Table } from "./Table.js";
6
6
  import { Target } from "./Target.js";
7
+ import { Batch } from "./query/Batch.js";
8
+ import { Delete } from "./query/Delete.js";
9
+ import { Insert } from "./query/Insert.js";
10
+ import { SelectMultiple } from "./query/Select.js";
11
+ import { RecursiveUnion } from "./query/Union.js";
12
+ import { Update } from "./query/Update.js";
13
+ function withRecursive(initialSelect) {
14
+ return new RecursiveUnion(initialSelect[Query.Data]);
15
+ }
7
16
  function select(selection) {
8
- return new Query.SelectMultiple(
17
+ return new SelectMultiple(
9
18
  new QueryData.Select({
10
19
  selection: ExprData.create(selection)
11
20
  })
@@ -13,7 +22,7 @@ function select(selection) {
13
22
  }
14
23
  function from(source) {
15
24
  const target = Query.isQuery(source) ? new Target.Query(source[Query.Data]) : new Target.Table(source[Table.Data]);
16
- return new Query.SelectMultiple(
25
+ return new SelectMultiple(
17
26
  new QueryData.Select({
18
27
  from: target,
19
28
  selection: new ExprData.Row(target)
@@ -21,16 +30,16 @@ function from(source) {
21
30
  );
22
31
  }
23
32
  function update(table) {
24
- return new Query.Update(new QueryData.Update({ table: table[Table.Data] }));
33
+ return new Update(new QueryData.Update({ table: table[Table.Data] }));
25
34
  }
26
35
  function insertInto(table) {
27
- return new Query.Insert(table[Table.Data]);
36
+ return new Insert(table[Table.Data]);
28
37
  }
29
38
  function deleteFrom(table) {
30
- return new Query.Delete(new QueryData.Delete({ table: table[Table.Data] }));
39
+ return new Delete(new QueryData.Delete({ table: table[Table.Data] }));
31
40
  }
32
41
  function create(...tables) {
33
- return new Query.Batch(
42
+ return new Batch(
34
43
  tables.flatMap((table) => Schema.create(table[Table.Data]).queries)
35
44
  );
36
45
  }
@@ -40,5 +49,6 @@ export {
40
49
  from,
41
50
  insertInto,
42
51
  select,
43
- update
52
+ update,
53
+ withRecursive
44
54
  };
@@ -1,11 +1,11 @@
1
1
  import { Driver } from '../lib/Driver';
2
2
  import { CompileOptions } from '../lib/Formatter';
3
3
  import { ColumnData } from './Column';
4
- import { EV, Expr, ExprData } from './Expr';
4
+ import { EV, ExprData } from './Expr';
5
5
  import { IndexData } from './Index';
6
6
  import { OrderBy } from './OrderBy';
7
7
  import { Selection } from './Selection';
8
- import { Table, TableData } from './Table';
8
+ import { TableData } from './Table';
9
9
  import { Target } from './Target';
10
10
  declare const DATA: unique symbol;
11
11
  export declare enum QueryType {
@@ -49,7 +49,7 @@ export declare namespace QueryData {
49
49
  type: QueryType.Union;
50
50
  a: Select | Union;
51
51
  operator: UnionOperation;
52
- b: Select | Union;
52
+ b: Select | Union | (() => Select | Union);
53
53
  }
54
54
  export class Select extends Data<Select> {
55
55
  type: QueryType.Select;
@@ -139,115 +139,15 @@ export declare class Query<T> {
139
139
  [Selection.CursorType]: () => T;
140
140
  [DATA]: QueryData;
141
141
  constructor(query: QueryData);
142
- static all(strings: TemplateStringsArray, ...params: Array<any>): Query<any>;
143
142
  next<T>(cursor: Query<T>): Query<T>;
144
143
  on(driver: Driver.Sync): T;
145
144
  on(driver: Driver.Async): Promise<T>;
146
145
  toSql(driver: Driver, options?: CompileOptions): string;
147
146
  toJSON(): QueryData;
148
- }
149
- export declare namespace Query {
150
- class Delete extends Query<{
151
- rowsAffected: number;
152
- }> {
153
- [DATA]: QueryData.Delete;
154
- where(...where: Array<EV<boolean>>): Delete;
155
- take(limit: number | undefined): Delete;
156
- skip(offset: number | undefined): Delete;
157
- }
158
- class Update<Definition> extends Query<{
159
- rowsAffected: number;
160
- }> {
161
- [DATA]: QueryData.Update;
162
- set(set: Table.Update<Definition>): Update<Definition>;
163
- where(...where: Array<EV<boolean>>): Update<Definition>;
164
- take(limit: number | undefined): Update<Definition>;
165
- skip(offset: number | undefined): Update<Definition>;
166
- }
167
- class InsertValuesReturning<T> extends Query<T> {
168
- }
169
- class Inserted extends Query<{
170
- rowsAffected: number;
171
- }> {
172
- [DATA]: QueryData.Insert;
173
- constructor(query: QueryData.Insert);
174
- returning<X extends Selection>(selection: X): InsertValuesReturning<Selection.Infer<X>>;
175
- }
176
- class Insert<Definition> {
177
- protected into: TableData;
178
- constructor(into: TableData);
179
- selection(query: Query.SelectMultiple<Table.Select<Definition>>): Inserted;
180
- values(...data: Array<Table.Insert<Definition>>): Inserted;
181
- }
182
- class CreateTable extends Query<void> {
183
- protected table: TableData;
184
- constructor(table: TableData);
185
- }
186
- class Batch<T = void> extends Query<T> {
187
- protected queries: Array<QueryData>;
188
- [DATA]: QueryData.Batch;
189
- constructor(queries: Array<QueryData>);
190
- next<T>(cursor: Query<T>): Query<T>;
191
- }
192
- class Union<Row> extends Query<Array<Row>> {
193
- [DATA]: QueryData.Union | QueryData.Select;
194
- union(query: SelectMultiple<Row> | Union<Row>): Union<Row>;
195
- unionAll(query: SelectMultiple<Row> | Union<Row>): Union<Row>;
196
- except(query: SelectMultiple<Row> | Union<Row>): Union<Row>;
197
- intersect(query: SelectMultiple<Row> | Union<Row>): Union<Row>;
198
- }
199
- class SelectMultiple<Row> extends Union<Row> {
200
- [DATA]: QueryData.Select;
201
- constructor(query: QueryData.Select);
202
- from(table: Table<any>): SelectMultiple<Row>;
203
- leftJoin<C>(that: Table<C> | TableSelect<C>, ...on: Array<EV<boolean>>): SelectMultiple<Row>;
204
- innerJoin<C>(that: Table<C> | TableSelect<C>, ...on: Array<EV<boolean>>): SelectMultiple<Row>;
205
- select<X extends Selection>(selection: X): SelectMultiple<Selection.Infer<X>>;
206
- count(): SelectSingle<number>;
207
- orderBy(...orderBy: Array<Expr<any> | OrderBy>): SelectMultiple<Row>;
208
- groupBy(...groupBy: Array<Expr<any>>): SelectMultiple<Row>;
209
- maybeFirst(): SelectSingle<Row | undefined>;
210
- first(): SelectSingle<Row>;
211
- where(...where: Array<EV<boolean>>): SelectMultiple<Row>;
212
- take(limit: number | undefined): SelectMultiple<Row>;
213
- skip(offset: number | undefined): SelectMultiple<Row>;
214
- recursiveUnion<T extends {}>(this: SelectMultiple<T>, create: (fields: Record<string, Table.Of<T>>) => SelectMultiple<T> | Union<T>): SelectMultiple<T>;
215
- recursiveUnionAll<T extends {}>(this: SelectMultiple<T>, create: (fields: Record<string, Table.Of<T>>) => SelectMultiple<T> | Union<T>): SelectMultiple<T>;
216
- [Expr.ToExpr](): Expr<Row>;
217
- }
218
- class TableSelect<Definition> extends SelectMultiple<Table.Select<Definition>> {
219
- protected table: TableData;
220
- [DATA]: QueryData.Select;
221
- constructor(table: TableData, conditions?: Array<EV<boolean>>);
222
- as(alias: string): Table<Definition>;
223
- create(): CreateTable;
224
- insertSelect(query: SelectMultiple<Table.Insert<Definition>>): Inserted;
225
- insertOne(record: Table.Insert<Definition>): Query<Table.Select<Definition>>;
226
- insertAll(data: Array<Table.Insert<Definition>>): Inserted;
227
- set(data: Table.Update<Definition>): Update<Definition>;
228
- delete(): Delete;
229
- get(name: string): Expr<any>;
230
- }
231
- class SelectSingle<Row> extends Query<Row> {
232
- [DATA]: QueryData.Select;
233
- constructor(query: QueryData.Select);
234
- from(table: Table<any>): SelectMultiple<Row>;
235
- leftJoin<C>(that: Table<C> | TableSelect<C>, ...on: Array<EV<boolean>>): SelectSingle<Row>;
236
- innerJoin<C>(that: Table<C> | TableSelect<C>, ...on: Array<EV<boolean>>): SelectSingle<Row>;
237
- select<X extends Selection>(selection: X): SelectSingle<Selection.Infer<X>>;
238
- orderBy(...orderBy: Array<OrderBy>): SelectSingle<Row>;
239
- groupBy(...groupBy: Array<Expr<any>>): SelectSingle<Row>;
240
- where(...where: Array<EV<boolean>>): SelectSingle<Row>;
241
- take(limit: number | undefined): SelectSingle<Row>;
242
- skip(offset: number | undefined): SelectSingle<Row>;
243
- all(): SelectMultiple<Row>;
244
- [Expr.ToExpr](): Expr<Row>;
245
- }
147
+ protected addWhere(where: Array<EV<boolean>>): this[typeof DATA];
246
148
  }
247
149
  export declare namespace Query {
248
150
  const Data: typeof DATA;
249
151
  function isQuery<T>(input: any): input is Query<T>;
250
- function isSingle<T>(input: any): input is Query.SelectSingle<T>;
251
- function isMultiple<T>(input: any): input is Query.SelectMultiple<T>;
252
152
  }
253
153
  export {};