rado 0.3.4 → 0.3.6

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 (95) hide show
  1. package/README.md +277 -277
  2. package/dist/driver/better-sqlite3.d.ts +1 -0
  3. package/dist/driver/better-sqlite3.js +3 -0
  4. package/dist/driver/bun-sqlite.d.ts +1 -0
  5. package/dist/driver/bun-sqlite.js +3 -0
  6. package/dist/driver/sql.js.d.ts +1 -0
  7. package/dist/driver/sql.js.js +3 -0
  8. package/dist/driver/sqlite3.d.ts +1 -0
  9. package/dist/driver/sqlite3.js +11 -0
  10. package/dist/lib/Driver.d.ts +3 -0
  11. package/dist/lib/Driver.js +3 -0
  12. package/dist/lib/Formatter.js +2 -2
  13. package/package.json +74 -74
  14. package/dist/define/CTE.d.ts +0 -2
  15. package/dist/define/CTE.js +0 -51
  16. package/dist/define/Cursor.d.ts +0 -108
  17. package/dist/define/Cursor.js +0 -338
  18. package/dist/define/Update.d.ts +0 -4
  19. package/dist/define/Update.js +0 -0
  20. package/dist/define/query/Batch.d.ts +0 -7
  21. package/dist/define/query/Batch.js +0 -17
  22. package/dist/define/query/CreateTable.d.ts +0 -6
  23. package/dist/define/query/CreateTable.js +0 -11
  24. package/dist/define/query/Delete.d.ts +0 -11
  25. package/dist/define/query/Delete.js +0 -18
  26. package/dist/define/query/Insert.d.ts +0 -22
  27. package/dist/define/query/Insert.js +0 -47
  28. package/dist/define/query/Select.d.ts +0 -39
  29. package/dist/define/query/Select.js +0 -170
  30. package/dist/define/query/TableSelect.d.ts +0 -28
  31. package/dist/define/query/TableSelect.js +0 -79
  32. package/dist/define/query/Union.d.ts +0 -17
  33. package/dist/define/query/Union.js +0 -116
  34. package/dist/define/query/Update.d.ts +0 -12
  35. package/dist/define/query/Update.js +0 -18
  36. package/dist/deno/driver/better-sqlite3.js +0 -57
  37. package/dist/deno/driver/bun-sqlite.js +0 -69
  38. package/dist/deno/driver/sql.js.js +0 -72
  39. package/dist/deno/driver/sqlite3.js +0 -123
  40. package/dist/deno/index.js +0 -14
  41. package/dist/deno/lib/Driver.js +0 -330
  42. package/dist/deno/lib/Formatter.js +0 -715
  43. package/dist/deno/lib/Sanitizer.js +0 -0
  44. package/dist/deno/lib/SqlError.js +0 -11
  45. package/dist/deno/lib/Statement.js +0 -108
  46. package/dist/deno/sqlite/SqliteFormatter.js +0 -70
  47. package/dist/deno/sqlite/SqliteFunctions.js +0 -150
  48. package/dist/deno/sqlite/SqliteSchema.js +0 -47
  49. package/dist/deno/sqlite.js +0 -3
  50. package/dist/deno/util/Callable.js +0 -15
  51. package/dist/sqlite/index.d.ts +0 -2
  52. package/dist/sqlite/index.js +0 -3
  53. package/dist/src/driver/better-sqlite3.js +0 -49
  54. package/dist/src/driver/sql.js.js +0 -66
  55. package/dist/src/driver/sqlite3.js +0 -87
  56. package/dist/src/index.js +0 -24
  57. package/dist/src/lib/Column.js +0 -63
  58. package/dist/src/lib/Cursor.js +0 -231
  59. package/dist/src/lib/Driver.js +0 -316
  60. package/dist/src/lib/Expr.js +0 -284
  61. package/dist/src/lib/Fields.js +0 -0
  62. package/dist/src/lib/Formatter.js +0 -625
  63. package/dist/src/lib/Functions.js +0 -11
  64. package/dist/src/lib/Id.js +0 -0
  65. package/dist/src/lib/Index.js +0 -20
  66. package/dist/src/lib/Ops.js +0 -45
  67. package/dist/src/lib/OrderBy.js +0 -9
  68. package/dist/src/lib/Param.js +0 -27
  69. package/dist/src/lib/Query.js +0 -74
  70. package/dist/src/lib/Sanitizer.js +0 -0
  71. package/dist/src/lib/Schema.js +0 -67
  72. package/dist/src/lib/Selection.js +0 -7
  73. package/dist/src/lib/Statement.js +0 -103
  74. package/dist/src/lib/Table.js +0 -130
  75. package/dist/src/lib/Target.js +0 -37
  76. package/dist/src/lib/Update.js +0 -0
  77. package/dist/src/sqlite/SqliteFormatter.js +0 -67
  78. package/dist/src/sqlite/SqliteFunctions.js +0 -146
  79. package/dist/src/sqlite/SqliteSchema.js +0 -47
  80. package/dist/src/sqlite.js +0 -3
  81. package/dist/test/DbSuite.js +0 -28
  82. package/dist/test/TSTestTypes.js +0 -6
  83. package/dist/test/TestBasic.js +0 -172
  84. package/dist/test/TestExtend.js +0 -68
  85. package/dist/test/TestFts5.js +0 -34
  86. package/dist/test/TestFunctions.js +0 -28
  87. package/dist/test/TestJoins.js +0 -34
  88. package/dist/test/TestJson.js +0 -33
  89. package/dist/test/TestPrepare.js +0 -27
  90. package/dist/test/TestRawSql.js +0 -31
  91. package/dist/test/TestSchema.js +0 -69
  92. package/dist/test/TestSubQueries.js +0 -79
  93. package/dist/test/TestTransaction.js +0 -54
  94. package/dist/test/TestUpdate.js +0 -95
  95. package/dist/test/index.js +0 -14
@@ -489,11 +489,11 @@ class Formatter {
489
489
  return stmt;
490
490
  }
491
491
  formatLimit(ctx, { limit, offset, singleResult }) {
492
- const { stmt, forceInline } = ctx;
492
+ const { stmt } = ctx;
493
493
  if (!limit && !offset && !singleResult)
494
494
  return stmt;
495
495
  stmt.addLine("LIMIT").space();
496
- this.formatValue(ctx, singleResult ? 1 : limit);
496
+ this.formatValue(ctx, (singleResult ? 1 : limit) || -1);
497
497
  if (offset && offset > 0) {
498
498
  stmt.add("OFFSET").space();
499
499
  this.formatValue(ctx, offset);
package/package.json CHANGED
@@ -1,74 +1,74 @@
1
- {
2
- "name": "rado",
3
- "version": "0.3.4",
4
- "license": "MIT",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "exports": {
9
- ".": "./dist/index.js",
10
- "./*": "./dist/*.js",
11
- "./driver/bun:sqlite": "./dist/driver/bun-sqlite.js"
12
- },
13
- "typesVersions": {
14
- "*": {
15
- "driver/*": [
16
- "dist/driver/*.d.ts"
17
- ],
18
- "lib/*": [
19
- "dist/lib/*.d.ts"
20
- ],
21
- "driver/bun:sqlite": [
22
- "dist/driver/bun-sqlite.d.ts"
23
- ],
24
- "define/*": [
25
- "dist/define/*.d.ts"
26
- ],
27
- "sqlite/*": [
28
- "dist/sqlite/*.d.ts"
29
- ],
30
- "sqlite": [
31
- "dist/sqlite.d.ts"
32
- ],
33
- "util/*": [
34
- "dist/util/*.d.ts"
35
- ]
36
- }
37
- },
38
- "files": [
39
- "dist"
40
- ],
41
- "sideEffects": false,
42
- "scripts": {
43
- "build": "tsc -p tsconfig.build.json && tsx build.ts",
44
- "test": "tsx test",
45
- "test:bun": "bun test/index.ts --driver=bun:sqlite",
46
- "profile": "cross-env PROFILE=true tsx build.ts && cd bin && (rimraf CPU*.cpuprofile || true) && node --cpu-prof --cpu-prof-interval=100 test && speedscope CPU*.cpuprofile",
47
- "prepublishOnly": "tsc -p tsconfig.build.json && tsx build.ts"
48
- },
49
- "devDependencies": {
50
- "@types/better-sqlite3": "^5.4.1",
51
- "@types/glob": "^8.0.0",
52
- "@types/sql.js": "^1.4.2",
53
- "better-sqlite3": "^7.5.1",
54
- "bun-types": "^0.5.0",
55
- "cross-env": "^7.0.3",
56
- "esbuild": "^0.17.10",
57
- "glob": "^8.0.3",
58
- "rimraf": "^4.1.2",
59
- "sade": "^1.8.1",
60
- "speedscope": "^1.15.0",
61
- "sql.js": "^1.8.0",
62
- "sqlite3": "^5.1.6",
63
- "tsx": "^3.12.3",
64
- "typescript": "beta",
65
- "uvu": "^0.5.6"
66
- },
67
- "volta": {
68
- "node": "18.12.1"
69
- },
70
- "packageManager": "yarn@3.3.1",
71
- "resolutions": {
72
- "esbuild": "0.17.10"
73
- }
74
- }
1
+ {
2
+ "name": "rado",
3
+ "version": "0.3.6",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": "./dist/index.js",
10
+ "./*": "./dist/*.js",
11
+ "./driver/bun:sqlite": "./dist/driver/bun-sqlite.js"
12
+ },
13
+ "typesVersions": {
14
+ "*": {
15
+ "driver/*": [
16
+ "dist/driver/*.d.ts"
17
+ ],
18
+ "lib/*": [
19
+ "dist/lib/*.d.ts"
20
+ ],
21
+ "driver/bun:sqlite": [
22
+ "dist/driver/bun-sqlite.d.ts"
23
+ ],
24
+ "define/*": [
25
+ "dist/define/*.d.ts"
26
+ ],
27
+ "sqlite/*": [
28
+ "dist/sqlite/*.d.ts"
29
+ ],
30
+ "sqlite": [
31
+ "dist/sqlite.d.ts"
32
+ ],
33
+ "util/*": [
34
+ "dist/util/*.d.ts"
35
+ ]
36
+ }
37
+ },
38
+ "files": [
39
+ "dist"
40
+ ],
41
+ "sideEffects": false,
42
+ "scripts": {
43
+ "build": "tsc -p tsconfig.build.json && tsx build.ts",
44
+ "test": "tsx test",
45
+ "test:bun": "bun test/index.ts --driver=bun:sqlite",
46
+ "profile": "cross-env PROFILE=true tsx build.ts && cd bin && (rimraf CPU*.cpuprofile || true) && node --cpu-prof --cpu-prof-interval=100 test && speedscope CPU*.cpuprofile",
47
+ "prepublishOnly": "tsc -p tsconfig.build.json && tsx build.ts"
48
+ },
49
+ "devDependencies": {
50
+ "@types/better-sqlite3": "^5.4.1",
51
+ "@types/glob": "^8.0.0",
52
+ "@types/sql.js": "^1.4.2",
53
+ "better-sqlite3": "^7.5.1",
54
+ "bun-types": "^0.5.0",
55
+ "cross-env": "^7.0.3",
56
+ "esbuild": "^0.17.10",
57
+ "glob": "^8.0.3",
58
+ "rimraf": "^4.1.2",
59
+ "sade": "^1.8.1",
60
+ "speedscope": "^1.15.0",
61
+ "sql.js": "^1.8.0",
62
+ "sqlite3": "^5.1.6",
63
+ "tsx": "^3.12.3",
64
+ "typescript": "beta",
65
+ "uvu": "^0.5.6"
66
+ },
67
+ "volta": {
68
+ "node": "18.12.1"
69
+ },
70
+ "packageManager": "yarn@3.3.1",
71
+ "resolutions": {
72
+ "esbuild": "0.17.10"
73
+ }
74
+ }
@@ -1,2 +0,0 @@
1
- import { Query, QueryData } from './Query';
2
- export declare function makeRecursiveUnion<T extends Query<any>>(initial: QueryData.Select, createUnion: (target: any) => T, operator: QueryData.UnionOperation): QueryData.Select;
@@ -1,51 +0,0 @@
1
- // src/define/CTE.ts
2
- import { Expr, ExprData, ExprType } from "./Expr.js";
3
- import { Query, QueryData } from "./Query.js";
4
- import { virtualTable } from "./Table.js";
5
- import { Target, TargetType } from "./Target.js";
6
- var { keys, create, fromEntries } = Object;
7
- function columnsOf(expr) {
8
- switch (expr.type) {
9
- case ExprType.Record:
10
- return keys(expr.fields);
11
- case ExprType.Row:
12
- switch (expr.target.type) {
13
- case TargetType.Table:
14
- return keys(expr.target.table.columns);
15
- default:
16
- throw new Error("Could not retrieve CTE columns");
17
- }
18
- default:
19
- throw new Error("Could not retrieve CTE columns");
20
- }
21
- }
22
- function makeRecursiveUnion(initial, createUnion, operator) {
23
- let name;
24
- const alias = new Proxy(create(null), {
25
- get(_, key) {
26
- name = key;
27
- return virtualTable(name);
28
- }
29
- });
30
- const right = createUnion(alias)[Query.Data];
31
- if (!name)
32
- throw new TypeError("No CTE name provided");
33
- const cte = alias[name];
34
- const cols = columnsOf(initial.selection);
35
- const selection = new ExprData.Record(
36
- fromEntries(cols.map((col) => [col, cte[col][Expr.Data]]))
37
- );
38
- const union = new QueryData.Union({
39
- a: initial,
40
- operator,
41
- b: right
42
- });
43
- const from = new Target.CTE(name, union);
44
- return new QueryData.Select({
45
- selection,
46
- from
47
- });
48
- }
49
- export {
50
- makeRecursiveUnion
51
- };
@@ -1,108 +0,0 @@
1
- import { Driver } from '../lib/Driver';
2
- import { CompileOptions } from '../lib/Formatter';
3
- import { EV, Expr } from './Expr';
4
- import { OrderBy } from './OrderBy';
5
- import { Query } from './Query';
6
- import { Selection } from './Selection';
7
- import { Table, TableData } from './Table';
8
- declare const QUERY: unique symbol;
9
- export declare class Cursor<T> {
10
- [Selection.CursorType]: () => T;
11
- [QUERY]: Query<T>;
12
- static Query: typeof QUERY;
13
- constructor(query: Query<T>);
14
- static all(strings: TemplateStringsArray, ...params: Array<any>): Cursor<any>;
15
- next<T>(cursor: Cursor<T>): Cursor<T>;
16
- on(driver: Driver.Sync): T;
17
- on(driver: Driver.Async): Promise<T>;
18
- toSql(driver: Driver, options?: CompileOptions): string;
19
- toJSON(): Query<T>;
20
- }
21
- export declare namespace Cursor {
22
- class Delete extends Cursor<{
23
- rowsAffected: number;
24
- }> {
25
- query(): Query.Delete;
26
- where(...where: Array<EV<boolean>>): Delete;
27
- take(limit: number | undefined): Delete;
28
- skip(offset: number | undefined): Delete;
29
- }
30
- class Update<Definition> extends Cursor<{
31
- rowsAffected: number;
32
- }> {
33
- [QUERY]: Query.Update;
34
- set(set: Table.Update<Definition>): Update<Definition>;
35
- where(...where: Array<EV<boolean>>): Update<Definition>;
36
- take(limit: number | undefined): Update<Definition>;
37
- skip(offset: number | undefined): Update<Definition>;
38
- }
39
- class InsertValuesReturning<T> extends Cursor<T> {
40
- }
41
- class Inserted extends Cursor<{
42
- rowsAffected: number;
43
- }> {
44
- [QUERY]: Query.Insert;
45
- constructor(query: Query.Insert);
46
- returning<X extends Selection>(selection: X): InsertValuesReturning<Selection.Infer<X>>;
47
- }
48
- class Insert<Definition> {
49
- protected into: TableData;
50
- constructor(into: TableData);
51
- selection(query: Cursor.SelectMultiple<Table.Select<Definition>>): Inserted;
52
- values(...data: Array<Table.Insert<Definition>>): Inserted;
53
- }
54
- class CreateTable extends Cursor<void> {
55
- protected table: TableData;
56
- constructor(table: TableData);
57
- }
58
- class Batch<T = void> extends Cursor<T> {
59
- protected queries: Array<Query>;
60
- [QUERY]: Query.Batch;
61
- constructor(queries: Array<Query>);
62
- next<T>(cursor: Cursor<T>): Cursor<T>;
63
- }
64
- class SelectMultiple<Row> extends Cursor<Array<Row>> {
65
- [QUERY]: Query.Select;
66
- constructor(query: Query.Select);
67
- leftJoin<C>(that: Table<C> | TableSelect<C>, ...on: Array<EV<boolean>>): SelectMultiple<Row>;
68
- innerJoin<C>(that: Table<C> | TableSelect<C>, ...on: Array<EV<boolean>>): SelectMultiple<Row>;
69
- select<X extends Selection>(selection: X): SelectMultiple<Selection.Infer<X>>;
70
- count(): SelectSingle<number>;
71
- orderBy(...orderBy: Array<Expr<any> | OrderBy>): SelectMultiple<Row>;
72
- groupBy(...groupBy: Array<Expr<any>>): SelectMultiple<Row>;
73
- first(): SelectSingle<Row | undefined>;
74
- sure(): SelectSingle<Row>;
75
- where(...where: Array<EV<boolean>>): SelectMultiple<Row>;
76
- take(limit: number | undefined): SelectMultiple<Row>;
77
- skip(offset: number | undefined): SelectMultiple<Row>;
78
- [Expr.ToExpr](): Expr<Row>;
79
- }
80
- class TableSelect<Definition> extends SelectMultiple<Table.Select<Definition>> {
81
- protected table: TableData;
82
- [QUERY]: Query.Select;
83
- constructor(table: TableData, conditions?: Array<EV<boolean>>);
84
- as(alias: string): Table<Definition>;
85
- create(): CreateTable;
86
- insertSelect(query: SelectMultiple<Table.Insert<Definition>>): Inserted;
87
- insertOne(record: Table.Insert<Definition>): Cursor<Table.Select<Definition>>;
88
- insertAll(data: Array<Table.Insert<Definition>>): Inserted;
89
- set(data: Table.Update<Definition>): Update<Definition>;
90
- delete(): Delete;
91
- get(name: string): Expr<any>;
92
- }
93
- class SelectSingle<Row> extends Cursor<Row> {
94
- [QUERY]: Query.Select;
95
- constructor(query: Query.Select);
96
- leftJoin<C>(that: Table<C> | TableSelect<C>, ...on: Array<EV<boolean>>): SelectSingle<Row>;
97
- innerJoin<C>(that: Table<C> | TableSelect<C>, ...on: Array<EV<boolean>>): SelectSingle<Row>;
98
- select<X extends Selection>(selection: X): SelectSingle<Selection.Infer<X>>;
99
- orderBy(...orderBy: Array<OrderBy>): SelectSingle<Row>;
100
- groupBy(...groupBy: Array<Expr<any>>): SelectSingle<Row>;
101
- where(...where: Array<EV<boolean>>): SelectSingle<Row>;
102
- take(limit: number | undefined): SelectSingle<Row>;
103
- skip(offset: number | undefined): SelectSingle<Row>;
104
- all(): SelectMultiple<Row>;
105
- [Expr.ToExpr](): Expr<Row>;
106
- }
107
- }
108
- export {};
@@ -1,338 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => {
4
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
- return value;
6
- };
7
-
8
- // src/define/Cursor.ts
9
- import { Expr, ExprData } from "./Expr.js";
10
- import { Functions } from "./Functions.js";
11
- import { Query } from "./Query.js";
12
- import { Schema } from "./Schema.js";
13
- import { Selection } from "./Selection.js";
14
- import { Table, createTable } from "./Table.js";
15
- import { Target } from "./Target.js";
16
- var QUERY = Symbol("Cursor.Query");
17
- var _Cursor = class {
18
- [(Selection.CursorType, QUERY)];
19
- constructor(query) {
20
- this[QUERY] = query;
21
- }
22
- static all(strings, ...params) {
23
- return new _Cursor(Query.Raw({ expectedReturn: "rows", strings, params }));
24
- }
25
- next(cursor) {
26
- return new _Cursor(
27
- Query.Batch({
28
- queries: [this[QUERY], cursor[QUERY]]
29
- })
30
- );
31
- }
32
- on(driver) {
33
- return driver.executeQuery(this[QUERY]);
34
- }
35
- toSql(driver, options = { forceInline: true }) {
36
- return driver.formatter.compile(this[QUERY], options).sql;
37
- }
38
- toJSON() {
39
- return this[QUERY];
40
- }
41
- };
42
- var Cursor = _Cursor;
43
- __publicField(Cursor, "Query", QUERY);
44
- function addWhere(query, where) {
45
- const conditions = where.slice();
46
- if (query.where)
47
- conditions.push(new Expr(query.where));
48
- return {
49
- ...query,
50
- where: Expr.and(...conditions)[Expr.Data]
51
- };
52
- }
53
- ((Cursor2) => {
54
- class Delete extends Cursor2 {
55
- query() {
56
- return super[QUERY];
57
- }
58
- where(...where) {
59
- return new Delete(addWhere(this[QUERY], where));
60
- }
61
- take(limit) {
62
- return new Delete({ ...this[QUERY], limit });
63
- }
64
- skip(offset) {
65
- return new Delete({ ...this[QUERY], offset });
66
- }
67
- }
68
- Cursor2.Delete = Delete;
69
- const _Update = class extends Cursor2 {
70
- set(set) {
71
- return new _Update({ ...this[QUERY], set });
72
- }
73
- where(...where) {
74
- return new _Update(addWhere(this[QUERY], where));
75
- }
76
- take(limit) {
77
- return new _Update({ ...this[QUERY], limit });
78
- }
79
- skip(offset) {
80
- return new _Update({ ...this[QUERY], offset });
81
- }
82
- };
83
- let Update = _Update;
84
- QUERY;
85
- Cursor2.Update = Update;
86
- class InsertValuesReturning extends Cursor2 {
87
- }
88
- Cursor2.InsertValuesReturning = InsertValuesReturning;
89
- class Inserted extends Cursor2 {
90
- constructor(query) {
91
- super(query);
92
- }
93
- returning(selection) {
94
- return new InsertValuesReturning(
95
- Query.Insert({ ...this[QUERY], selection: ExprData.create(selection) })
96
- );
97
- }
98
- }
99
- QUERY;
100
- Cursor2.Inserted = Inserted;
101
- class Insert {
102
- constructor(into) {
103
- this.into = into;
104
- }
105
- selection(query) {
106
- return new Inserted(Query.Insert({ into: this.into, select: query[QUERY] }));
107
- }
108
- values(...data) {
109
- return new Inserted(Query.Insert({ into: this.into, data }));
110
- }
111
- }
112
- Cursor2.Insert = Insert;
113
- class CreateTable extends Cursor2 {
114
- constructor(table) {
115
- super(Schema.create(table));
116
- this.table = table;
117
- }
118
- }
119
- Cursor2.CreateTable = CreateTable;
120
- class Batch extends Cursor2 {
121
- constructor(queries) {
122
- super(Query.Batch({ queries }));
123
- this.queries = queries;
124
- }
125
- next(cursor) {
126
- return new Cursor2(
127
- Query.Batch({
128
- queries: [...this[QUERY].queries, cursor[QUERY]]
129
- })
130
- );
131
- }
132
- }
133
- QUERY;
134
- Cursor2.Batch = Batch;
135
- function joinTarget(joinType, query, to, on) {
136
- const toQuery = to instanceof Cursor2 ? to[QUERY] : void 0;
137
- const target = toQuery ? toQuery.from : Target.Table(to[Table.Data]);
138
- if (!query.from || !target)
139
- throw new Error("No from clause");
140
- const conditions = [...on];
141
- if (toQuery) {
142
- const where = toQuery.where;
143
- if (where)
144
- conditions.push(new Expr(where));
145
- }
146
- return Target.Join(
147
- query.from,
148
- target,
149
- joinType,
150
- Expr.and(...conditions)[Expr.Data]
151
- );
152
- }
153
- class SelectMultiple extends Cursor2 {
154
- constructor(query) {
155
- super(query);
156
- }
157
- leftJoin(that, ...on) {
158
- const query = this[QUERY];
159
- return new SelectMultiple({
160
- ...query,
161
- from: joinTarget("left", query, that, on)
162
- });
163
- }
164
- innerJoin(that, ...on) {
165
- const query = this[QUERY];
166
- return new SelectMultiple({
167
- ...query,
168
- from: joinTarget("inner", query, that, on)
169
- });
170
- }
171
- select(selection) {
172
- return new SelectMultiple({
173
- ...this[QUERY],
174
- selection: ExprData.create(selection)
175
- });
176
- }
177
- count() {
178
- return new SelectSingle({
179
- ...this[QUERY],
180
- selection: Functions.count()[Expr.Data],
181
- singleResult: true
182
- });
183
- }
184
- orderBy(...orderBy) {
185
- return new SelectMultiple({
186
- ...this[QUERY],
187
- orderBy: orderBy.map((e) => {
188
- return Expr.isExpr(e) ? e.asc() : e;
189
- })
190
- });
191
- }
192
- groupBy(...groupBy) {
193
- return new SelectMultiple({
194
- ...this[QUERY],
195
- groupBy: groupBy.map(ExprData.create)
196
- });
197
- }
198
- first() {
199
- return new SelectSingle({ ...this[QUERY], singleResult: true });
200
- }
201
- sure() {
202
- return new SelectSingle({
203
- ...this[QUERY],
204
- singleResult: true,
205
- validate: true
206
- });
207
- }
208
- where(...where) {
209
- return new SelectMultiple(addWhere(this[QUERY], where));
210
- }
211
- take(limit) {
212
- return new SelectMultiple({ ...this[QUERY], limit });
213
- }
214
- skip(offset) {
215
- return new SelectMultiple({ ...this[QUERY], offset });
216
- }
217
- [(QUERY, Expr.ToExpr)]() {
218
- return new Expr(ExprData.Query(this[QUERY]));
219
- }
220
- }
221
- Cursor2.SelectMultiple = SelectMultiple;
222
- class TableSelect extends SelectMultiple {
223
- constructor(table, conditions = []) {
224
- const target = Target.Table(table);
225
- super(
226
- Query.Select({
227
- from: target,
228
- selection: ExprData.Row(target),
229
- where: Expr.and(...conditions)[Expr.Data]
230
- })
231
- );
232
- this.table = table;
233
- }
234
- as(alias) {
235
- return createTable({ ...this.table, alias });
236
- }
237
- create() {
238
- return new Cursor2.CreateTable(this.table);
239
- }
240
- insertSelect(query) {
241
- return new Cursor2.Inserted(
242
- Query.Insert({ into: this.table, select: query[QUERY] })
243
- );
244
- }
245
- insertOne(record) {
246
- return new Cursor2(
247
- Query.Insert({
248
- into: this.table,
249
- data: [record],
250
- selection: ExprData.Row(Target.Table(this.table)),
251
- singleResult: true
252
- })
253
- );
254
- }
255
- insertAll(data) {
256
- return new Cursor2.Insert(this.table).values(...data);
257
- }
258
- set(data) {
259
- return new Cursor2.Update(
260
- Query.Update({
261
- table: this.table,
262
- where: this[QUERY].where
263
- })
264
- ).set(data);
265
- }
266
- delete() {
267
- return new Cursor2.Delete(
268
- Query.Delete({
269
- table: this.table,
270
- where: this[QUERY].where
271
- })
272
- );
273
- }
274
- get(name) {
275
- return new Expr(
276
- ExprData.Field(ExprData.Row(Target.Table(this.table)), name)
277
- );
278
- }
279
- }
280
- QUERY;
281
- Cursor2.TableSelect = TableSelect;
282
- class SelectSingle extends Cursor2 {
283
- constructor(query) {
284
- super(query);
285
- }
286
- leftJoin(that, ...on) {
287
- const query = this[QUERY];
288
- return new SelectSingle({
289
- ...query,
290
- from: joinTarget("left", query, that, on)
291
- });
292
- }
293
- innerJoin(that, ...on) {
294
- const query = this[QUERY];
295
- return new SelectSingle({
296
- ...query,
297
- from: joinTarget("inner", query, that, on)
298
- });
299
- }
300
- select(selection) {
301
- return new SelectSingle({
302
- ...this[QUERY],
303
- selection: ExprData.create(selection)
304
- });
305
- }
306
- orderBy(...orderBy) {
307
- return new SelectSingle({
308
- ...this[QUERY],
309
- orderBy
310
- });
311
- }
312
- groupBy(...groupBy) {
313
- return new SelectSingle({
314
- ...this[QUERY],
315
- groupBy: groupBy.map(ExprData.create)
316
- });
317
- }
318
- where(...where) {
319
- return new SelectSingle(addWhere(this[QUERY], where));
320
- }
321
- take(limit) {
322
- return new SelectSingle({ ...this[QUERY], limit });
323
- }
324
- skip(offset) {
325
- return new SelectSingle({ ...this[QUERY], offset });
326
- }
327
- all() {
328
- return new SelectMultiple({ ...this[QUERY], singleResult: false });
329
- }
330
- [(QUERY, Expr.ToExpr)]() {
331
- return new Expr(ExprData.Query(this[QUERY]));
332
- }
333
- }
334
- Cursor2.SelectSingle = SelectSingle;
335
- })(Cursor || (Cursor = {}));
336
- export {
337
- Cursor
338
- };
@@ -1,4 +0,0 @@
1
- import type { EV } from './Expr';
2
- export type Update<Row> = Partial<{
3
- [K in keyof Row]: EV<Row[K]>;
4
- }>;
File without changes
@@ -1,7 +0,0 @@
1
- import { Query, QueryData } from '../Query.js';
2
- export declare class Batch<T = void> extends Query<T> {
3
- protected queries: Array<QueryData>;
4
- [Query.Data]: QueryData.Batch;
5
- constructor(queries: Array<QueryData>);
6
- next<T>(cursor: Query<T>): Query<T>;
7
- }