rado 0.4.8 → 1.0.0-preview.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.
Files changed (227) hide show
  1. package/dist/core/Builder.d.ts +36 -0
  2. package/dist/core/Builder.js +99 -0
  3. package/dist/core/Column.d.ts +38 -0
  4. package/dist/core/Column.js +59 -0
  5. package/dist/core/Constraint.d.ts +39 -0
  6. package/dist/core/Constraint.js +87 -0
  7. package/dist/core/Database.d.ts +43 -0
  8. package/dist/core/Database.js +58 -0
  9. package/dist/core/Dialect.d.ts +6 -0
  10. package/dist/core/Dialect.js +16 -0
  11. package/dist/core/Driver.d.ts +28 -0
  12. package/dist/core/Emitter.d.ts +35 -0
  13. package/dist/core/Emitter.js +153 -0
  14. package/dist/core/Index.d.ts +28 -0
  15. package/dist/core/Index.js +50 -0
  16. package/dist/core/Internal.d.ts +67 -0
  17. package/dist/core/Internal.js +62 -0
  18. package/dist/core/MetaData.d.ts +27 -0
  19. package/dist/core/Param.d.ts +9 -0
  20. package/dist/core/Param.js +14 -0
  21. package/dist/core/Query.d.ts +40 -0
  22. package/dist/core/Query.js +70 -0
  23. package/dist/core/Resolver.d.ts +23 -0
  24. package/dist/core/Resolver.js +54 -0
  25. package/dist/core/Schema.d.ts +4 -0
  26. package/dist/core/Schema.js +13 -0
  27. package/dist/core/Selection.d.ts +27 -0
  28. package/dist/core/Selection.js +88 -0
  29. package/dist/core/Sql.d.ts +49 -0
  30. package/dist/core/Sql.js +153 -0
  31. package/dist/core/Table.d.ts +56 -0
  32. package/dist/core/Table.js +103 -0
  33. package/dist/core/Types.d.ts +3 -0
  34. package/dist/core/Virtual.d.ts +2 -0
  35. package/dist/core/Virtual.js +28 -0
  36. package/dist/core/expr/Aggregate.d.ts +10 -0
  37. package/dist/core/expr/Aggregate.js +38 -0
  38. package/dist/core/expr/Conditions.d.ts +40 -0
  39. package/dist/core/expr/Conditions.js +137 -0
  40. package/dist/core/expr/Field.d.ts +14 -0
  41. package/dist/core/expr/Field.js +15 -0
  42. package/dist/core/expr/Functions.d.ts +6 -0
  43. package/dist/core/expr/Functions.js +11 -0
  44. package/dist/core/expr/Input.d.ts +3 -0
  45. package/dist/core/expr/Input.js +14 -0
  46. package/dist/core/query/CreateTable.d.ts +13 -0
  47. package/dist/core/query/CreateTable.js +23 -0
  48. package/dist/core/query/Delete.d.ts +19 -0
  49. package/dist/core/query/Delete.js +44 -0
  50. package/dist/core/query/DropTable.d.ts +13 -0
  51. package/dist/core/query/DropTable.js +23 -0
  52. package/dist/core/query/Insert.d.ts +43 -0
  53. package/dist/core/query/Insert.js +111 -0
  54. package/dist/core/query/Select.d.ts +93 -0
  55. package/dist/core/query/Select.js +196 -0
  56. package/dist/core/query/Union.d.ts +27 -0
  57. package/dist/core/query/Union.js +86 -0
  58. package/dist/core/query/Update.d.ts +23 -0
  59. package/dist/core/query/Update.js +55 -0
  60. package/dist/driver/better-sqlite3.d.ts +3 -16
  61. package/dist/driver/better-sqlite3.js +27 -33
  62. package/dist/driver/bun-sqlite.d.ts +3 -18
  63. package/dist/driver/bun-sqlite.js +26 -42
  64. package/dist/driver/pg.d.ts +25 -0
  65. package/dist/driver/pg.js +81 -0
  66. package/dist/driver/pglite.d.ts +24 -0
  67. package/dist/driver/pglite.js +59 -0
  68. package/dist/driver/sql.js.d.ts +3 -16
  69. package/dist/driver/sql.js.js +41 -47
  70. package/dist/index.d.ts +16 -21
  71. package/dist/index.js +16 -14
  72. package/dist/migrate/Scan.d.ts +1 -0
  73. package/dist/migrate/Scan.js +0 -0
  74. package/dist/postgres/PostgresColumns.d.ts +10 -0
  75. package/dist/postgres/PostgresColumns.js +58 -0
  76. package/dist/postgres/PostgresDialect.d.ts +2 -0
  77. package/dist/postgres/PostgresDialect.js +58 -0
  78. package/dist/postgres/PostgresSchema.d.ts +1 -0
  79. package/dist/postgres/PostgresSchema.js +4 -0
  80. package/dist/postgres/PostgresTable.d.ts +1 -0
  81. package/dist/postgres/PostgresTable.js +4 -0
  82. package/dist/postgres.d.ts +2 -0
  83. package/dist/postgres.js +2 -0
  84. package/dist/sqlite/SqliteColumns.d.ts +9 -0
  85. package/dist/sqlite/SqliteColumns.js +63 -0
  86. package/dist/sqlite/SqliteDialect.d.ts +2 -0
  87. package/dist/sqlite/SqliteDialect.js +51 -0
  88. package/dist/sqlite/SqliteFunctions.d.ts +8 -167
  89. package/dist/sqlite/SqliteFunctions.js +6 -3
  90. package/dist/sqlite/SqliteTable.d.ts +1 -0
  91. package/dist/sqlite/SqliteTable.js +4 -0
  92. package/dist/sqlite.d.ts +3 -2
  93. package/dist/sqlite.js +3 -2
  94. package/dist/src/core/Builder.d.ts +36 -0
  95. package/dist/src/core/Column.d.ts +38 -0
  96. package/dist/src/core/Constraint.d.ts +39 -0
  97. package/dist/src/core/Database.d.ts +43 -0
  98. package/dist/src/core/Dialect.d.ts +6 -0
  99. package/dist/src/core/Driver.d.ts +28 -0
  100. package/dist/src/core/Emitter.d.ts +35 -0
  101. package/dist/src/core/Index.d.ts +28 -0
  102. package/dist/src/core/Internal.d.ts +67 -0
  103. package/dist/src/core/MetaData.d.ts +27 -0
  104. package/dist/src/core/Param.d.ts +9 -0
  105. package/dist/src/core/Query.d.ts +40 -0
  106. package/dist/src/core/Resolver.d.ts +23 -0
  107. package/dist/src/core/Schema.d.ts +4 -0
  108. package/dist/src/core/Selection.d.ts +27 -0
  109. package/dist/src/core/Sql.d.ts +49 -0
  110. package/dist/src/core/Table.d.ts +56 -0
  111. package/dist/src/core/Types.d.ts +3 -0
  112. package/dist/src/core/Virtual.d.ts +2 -0
  113. package/dist/src/core/expr/Aggregate.d.ts +10 -0
  114. package/dist/src/core/expr/Conditions.d.ts +40 -0
  115. package/dist/src/core/expr/Field.d.ts +14 -0
  116. package/dist/src/core/expr/Functions.d.ts +6 -0
  117. package/dist/src/core/expr/Input.d.ts +3 -0
  118. package/dist/src/core/query/CreateTable.d.ts +13 -0
  119. package/dist/src/core/query/Delete.d.ts +19 -0
  120. package/dist/src/core/query/DropTable.d.ts +13 -0
  121. package/dist/src/core/query/Insert.d.ts +43 -0
  122. package/dist/src/core/query/Select.d.ts +93 -0
  123. package/dist/src/core/query/Union.d.ts +27 -0
  124. package/dist/src/core/query/Update.d.ts +23 -0
  125. package/dist/src/driver/better-sqlite3.d.ts +3 -0
  126. package/dist/src/driver/bun-sqlite.d.ts +4 -0
  127. package/dist/src/driver/pg.d.ts +25 -0
  128. package/dist/src/driver/pglite.d.ts +24 -0
  129. package/dist/src/driver/sql.js.d.ts +3 -0
  130. package/dist/src/index.d.ts +16 -0
  131. package/dist/src/migrate/Scan.d.ts +1 -0
  132. package/dist/src/postgres/PostgresColumns.d.ts +10 -0
  133. package/dist/src/postgres/PostgresDialect.d.ts +2 -0
  134. package/dist/src/postgres/PostgresSchema.d.ts +1 -0
  135. package/dist/src/postgres/PostgresTable.d.ts +1 -0
  136. package/dist/src/postgres.d.ts +2 -0
  137. package/dist/src/sqlite/SqliteColumns.d.ts +9 -0
  138. package/dist/src/sqlite/SqliteDialect.d.ts +2 -0
  139. package/dist/src/sqlite/SqliteFunctions.d.ts +8 -0
  140. package/dist/src/sqlite/SqliteTable.d.ts +1 -0
  141. package/dist/src/sqlite.d.ts +3 -0
  142. package/dist/src/universal/UniversalColumns.d.ts +6 -0
  143. package/dist/src/universal/UniversalTransaction.d.ts +3 -0
  144. package/dist/src/universal.d.ts +2 -0
  145. package/dist/test/Suite.d.ts +11 -0
  146. package/dist/test/TestDriver.d.ts +2 -0
  147. package/dist/test/TestUtils.d.ts +4 -0
  148. package/dist/test/core/Expr.test.d.ts +1 -0
  149. package/dist/test/core/Selection.test.d.ts +1 -0
  150. package/dist/test/core/Sql.test.d.ts +1 -0
  151. package/dist/test/core/SqliteFunctions.test.d.ts +1 -0
  152. package/dist/test/core/Table.test.d.ts +1 -0
  153. package/dist/test/driver/better-sqlite3.test.d.ts +1 -0
  154. package/dist/test/driver/bun-sqlite.test.d.ts +1 -0
  155. package/dist/test/driver/pg.test.d.ts +1 -0
  156. package/dist/test/driver/pglite.test.d.ts +1 -0
  157. package/dist/test/driver/sql.js.test.d.ts +1 -0
  158. package/dist/test/query/CreateTable.test.d.ts +1 -0
  159. package/dist/test/query/Delete.test.d.ts +1 -0
  160. package/dist/test/query/DropTable.test.d.ts +1 -0
  161. package/dist/test/query/Insert.test.d.ts +1 -0
  162. package/dist/test/query/Select.test.d.ts +1 -0
  163. package/dist/test/query/Union.test.d.ts +1 -0
  164. package/dist/test/query/Update.test.d.ts +1 -0
  165. package/dist/universal/UniversalColumns.d.ts +6 -0
  166. package/dist/universal/UniversalColumns.js +56 -0
  167. package/dist/universal/UniversalTransaction.d.ts +3 -0
  168. package/dist/universal/UniversalTransaction.js +14 -0
  169. package/dist/universal.d.ts +2 -0
  170. package/dist/universal.js +2 -0
  171. package/package.json +25 -43
  172. package/dist/define/Column.d.ts +0 -122
  173. package/dist/define/Column.js +0 -183
  174. package/dist/define/Expr.d.ts +0 -183
  175. package/dist/define/Expr.js +0 -453
  176. package/dist/define/Fields.d.ts +0 -18
  177. package/dist/define/Functions.d.ts +0 -5
  178. package/dist/define/Functions.js +0 -12
  179. package/dist/define/Id.d.ts +0 -3
  180. package/dist/define/Index.d.ts +0 -17
  181. package/dist/define/Index.js +0 -19
  182. package/dist/define/Ops.d.ts +0 -36
  183. package/dist/define/Ops.js +0 -114
  184. package/dist/define/OrderBy.d.ts +0 -9
  185. package/dist/define/OrderBy.js +0 -8
  186. package/dist/define/Param.d.ts +0 -18
  187. package/dist/define/Param.js +0 -27
  188. package/dist/define/Query.d.ts +0 -268
  189. package/dist/define/Query.js +0 -596
  190. package/dist/define/Schema.d.ts +0 -12
  191. package/dist/define/Schema.js +0 -140
  192. package/dist/define/Selection.d.ts +0 -21
  193. package/dist/define/Selection.js +0 -6
  194. package/dist/define/Sql.d.ts +0 -6
  195. package/dist/define/Sql.js +0 -21
  196. package/dist/define/Table.d.ts +0 -75
  197. package/dist/define/Table.js +0 -138
  198. package/dist/define/Target.d.ts +0 -47
  199. package/dist/define/Target.js +0 -68
  200. package/dist/define/VirtualTable.d.ts +0 -31
  201. package/dist/define/VirtualTable.js +0 -39
  202. package/dist/driver/@sqlite.org/sqlite-wasm.d.ts +0 -17
  203. package/dist/driver/@sqlite.org/sqlite-wasm.js +0 -80
  204. package/dist/driver/d1.d.ts +0 -22
  205. package/dist/driver/d1.js +0 -71
  206. package/dist/driver/sqlite3.d.ts +0 -22
  207. package/dist/driver/sqlite3.js +0 -132
  208. package/dist/lib/Driver.d.ts +0 -111
  209. package/dist/lib/Driver.js +0 -398
  210. package/dist/lib/Formatter.d.ts +0 -106
  211. package/dist/lib/Formatter.js +0 -888
  212. package/dist/lib/Sanitizer.d.ts +0 -5
  213. package/dist/lib/SqlError.d.ts +0 -3
  214. package/dist/lib/SqlError.js +0 -10
  215. package/dist/lib/Statement.d.ts +0 -108
  216. package/dist/lib/Statement.js +0 -190
  217. package/dist/sqlite/SqliteFormatter.d.ts +0 -11
  218. package/dist/sqlite/SqliteFormatter.js +0 -66
  219. package/dist/sqlite/SqliteSchema.d.ts +0 -25
  220. package/dist/sqlite/SqliteSchema.js +0 -46
  221. package/dist/util/Alias.d.ts +0 -1
  222. package/dist/util/Alias.js +0 -6
  223. package/dist/util/Callable.d.ts +0 -16
  224. package/dist/util/Callable.js +0 -9
  225. /package/dist/{define/Fields.js → core/Driver.js} +0 -0
  226. /package/dist/{define/Id.js → core/MetaData.js} +0 -0
  227. /package/dist/{lib/Sanitizer.js → core/Types.js} +0 -0
@@ -0,0 +1,36 @@
1
+ import { internalData, type HasQuery, type HasSql, type HasTable, type HasTarget } from './Internal.ts';
2
+ import type { IsPostgres, QueryMeta } from './MetaData.ts';
3
+ import type { QueryData } from './Query.ts';
4
+ import type { SelectionInput } from './Selection.ts';
5
+ import type { Table, TableDefinition } from './Table.ts';
6
+ import { Create } from './query/CreateTable.ts';
7
+ import { DeleteFrom } from './query/Delete.ts';
8
+ import { Drop } from './query/DropTable.ts';
9
+ import { InsertInto } from './query/Insert.ts';
10
+ import type { SelectBase, WithSelection, WithoutSelection } from './query/Select.ts';
11
+ import { UpdateTable } from './query/Update.ts';
12
+ declare class BuilderBase<Meta extends QueryMeta> {
13
+ readonly [internalData]: QueryData<Meta>;
14
+ constructor(data: QueryData<Meta>);
15
+ createTable<Definition extends TableDefinition>(table: Table<Definition>): Create<Meta>;
16
+ dropTable(table: HasTable): Drop<Meta>;
17
+ select(): WithoutSelection<Meta>;
18
+ select<Input extends SelectionInput>(selection: Input): WithSelection<Input, Meta>;
19
+ selectDistinct(): WithoutSelection<Meta>;
20
+ selectDistinct<Input extends SelectionInput>(selection: Input): WithSelection<Input, Meta>;
21
+ selectDistinctOn(this: Builder<IsPostgres>, columns: Array<HasSql>): WithoutSelection<Meta>;
22
+ selectDistinctOn<Input extends SelectionInput>(this: Builder<IsPostgres>, columns: Array<HasSql>, selection: Input): WithSelection<Input, Meta>;
23
+ update<Definition extends TableDefinition>(table: Table<Definition>): UpdateTable<Definition, Meta>;
24
+ insert<Definition extends TableDefinition>(into: Table<Definition>): InsertInto<Definition, Meta>;
25
+ delete(from: HasTable): DeleteFrom<Meta>;
26
+ }
27
+ export type CTE<Input = unknown> = Input & HasTarget & HasQuery;
28
+ export declare class Builder<Meta extends QueryMeta> extends BuilderBase<Meta> {
29
+ $with(cteName: string): {
30
+ as<Input extends SelectionInput>(query: SelectBase<Input, Meta>): CTE<Input>;
31
+ };
32
+ with(...cte: Array<CTE>): BuilderBase<Meta>;
33
+ createTable<Definition extends TableDefinition>(table: Table<Definition>): Create<Meta>;
34
+ dropTable(table: HasTable): Drop<Meta>;
35
+ }
36
+ export {};
@@ -0,0 +1,99 @@
1
+ import {
2
+ getData,
3
+ getQuery,
4
+ getSelection,
5
+ internalData,
6
+ internalQuery,
7
+ internalTarget
8
+ } from "./Internal.ts";
9
+ import { sql } from "./Sql.ts";
10
+ import { Create } from "./query/CreateTable.ts";
11
+ import { DeleteFrom } from "./query/Delete.ts";
12
+ import { Drop } from "./query/DropTable.ts";
13
+ import { InsertInto } from "./query/Insert.ts";
14
+ import { Select } from "./query/Select.ts";
15
+ import { UpdateTable } from "./query/Update.ts";
16
+ class BuilderBase {
17
+ [internalData];
18
+ constructor(data) {
19
+ this[internalData] = data;
20
+ }
21
+ createTable(table) {
22
+ return new Create({ ...getData(this), table });
23
+ }
24
+ dropTable(table) {
25
+ return new Drop({ ...getData(this), table });
26
+ }
27
+ select(input) {
28
+ return new Select({
29
+ ...getData(this),
30
+ select: {
31
+ type: input ? "selection" : "allFrom",
32
+ input,
33
+ tables: [],
34
+ nullable: []
35
+ }
36
+ });
37
+ }
38
+ selectDistinct(input) {
39
+ return new Select({
40
+ ...getData(this),
41
+ select: {
42
+ type: input ? "selection" : "allFrom",
43
+ input,
44
+ tables: [],
45
+ nullable: []
46
+ },
47
+ distinct: true
48
+ });
49
+ }
50
+ selectDistinctOn(columns, selection) {
51
+ return new Select({
52
+ ...getData(this),
53
+ select: {
54
+ type: selection ? "selection" : "allFrom",
55
+ input: selection,
56
+ tables: [],
57
+ nullable: []
58
+ },
59
+ distinctOn: columns
60
+ });
61
+ }
62
+ update(table) {
63
+ return new UpdateTable({ ...getData(this), table });
64
+ }
65
+ insert(into) {
66
+ return new InsertInto({ ...getData(this), into });
67
+ }
68
+ delete(from) {
69
+ return new DeleteFrom({ ...getData(this), from });
70
+ }
71
+ }
72
+ class Builder extends BuilderBase {
73
+ $with(cteName) {
74
+ return {
75
+ as(query) {
76
+ const fields = getSelection(query).makeVirtual(cteName);
77
+ return Object.assign(fields, {
78
+ [internalTarget]: sql.identifier(cteName),
79
+ [internalQuery]: getQuery(query)
80
+ });
81
+ }
82
+ };
83
+ }
84
+ with(...cte) {
85
+ return new BuilderBase({
86
+ ...getData(this),
87
+ cte
88
+ });
89
+ }
90
+ createTable(table) {
91
+ return new Create({ ...getData(this), table });
92
+ }
93
+ dropTable(table) {
94
+ return new Drop({ ...getData(this), table });
95
+ }
96
+ }
97
+ export {
98
+ Builder
99
+ };
@@ -0,0 +1,38 @@
1
+ import type { HasColumn, HasSql } from './Internal.ts';
2
+ import { internalColumn } from './Internal.ts';
3
+ import type { Sql } from './Sql.ts';
4
+ import type { Field, FieldData } from './expr/Field.ts';
5
+ import { type Input } from './expr/Input.ts';
6
+ export declare class ColumnData {
7
+ type: Sql;
8
+ name?: string;
9
+ json?: boolean;
10
+ primary?: boolean;
11
+ notNull?: boolean;
12
+ isUnique?: boolean;
13
+ autoIncrement?: boolean;
14
+ defaultValue?(): HasSql;
15
+ references?(): FieldData;
16
+ onUpdate?: HasSql;
17
+ onDelete?: HasSql;
18
+ mapFromDriverValue?(value: unknown): unknown;
19
+ mapToDriverValue?(value: unknown): unknown;
20
+ }
21
+ export declare class Column<Value = unknown> implements HasColumn {
22
+ readonly [internalColumn]: ColumnData;
23
+ constructor(data: ColumnData);
24
+ notNull(): RequiredColumn<NonNullable<Value>>;
25
+ default(value: Input<NonNullable<Value>> | (() => Input<NonNullable<Value>>)): Column<NonNullable<Value>>;
26
+ primaryKey(): Column<NonNullable<Value>>;
27
+ unique(name?: string): Column<Value>;
28
+ references(foreignField: Field | (() => Field)): Column<Value>;
29
+ }
30
+ export declare class JsonColumn<Value = unknown> extends Column<Value> {
31
+ private brand;
32
+ constructor(data: ColumnData);
33
+ }
34
+ declare const required: unique symbol;
35
+ export interface RequiredColumn<Value = unknown> extends Column<Value> {
36
+ [required]: true;
37
+ }
38
+ export {};
@@ -0,0 +1,59 @@
1
+ import { getField, internalColumn } from "./Internal.ts";
2
+ import { input } from "./expr/Input.ts";
3
+ class ColumnData {
4
+ type;
5
+ name;
6
+ json;
7
+ primary;
8
+ notNull;
9
+ isUnique;
10
+ autoIncrement;
11
+ onUpdate;
12
+ onDelete;
13
+ }
14
+ class Column {
15
+ [internalColumn];
16
+ constructor(data) {
17
+ this[internalColumn] = data;
18
+ }
19
+ notNull() {
20
+ return new Column({
21
+ ...this[internalColumn],
22
+ notNull: true
23
+ });
24
+ }
25
+ default(value) {
26
+ return new Column({
27
+ ...this[internalColumn],
28
+ defaultValue() {
29
+ return input(value instanceof Function ? value() : value);
30
+ }
31
+ });
32
+ }
33
+ primaryKey() {
34
+ return new Column({ ...this[internalColumn], primary: true });
35
+ }
36
+ unique(name) {
37
+ return new Column({ ...this[internalColumn], isUnique: true });
38
+ }
39
+ references(foreignField) {
40
+ return new Column({
41
+ ...this[internalColumn],
42
+ references() {
43
+ return getField(
44
+ typeof foreignField === "function" ? foreignField() : foreignField
45
+ );
46
+ }
47
+ });
48
+ }
49
+ }
50
+ class JsonColumn extends Column {
51
+ constructor(data) {
52
+ super({ ...data, json: true });
53
+ }
54
+ }
55
+ export {
56
+ Column,
57
+ ColumnData,
58
+ JsonColumn
59
+ };
@@ -0,0 +1,39 @@
1
+ import { internalConstraint, internalData, type HasConstraint, type HasData } from './Internal.ts';
2
+ import type { Field, FieldData } from './expr/Field.ts';
3
+ export interface UniqueConstraintData {
4
+ fields: Array<FieldData>;
5
+ nullsNotDistinct?: boolean;
6
+ }
7
+ export declare class UniqueConstraint<TableName extends string = string> implements HasData<UniqueConstraintData>, HasConstraint {
8
+ private brand;
9
+ [internalData]: UniqueConstraintData;
10
+ constructor(data: UniqueConstraintData);
11
+ on<TableName extends string>(...columns: Array<Field<unknown, TableName>>): UniqueConstraint<TableName>;
12
+ nullsNotDistinct(): UniqueConstraint<string>;
13
+ get [internalConstraint](): import("./Sql.ts").Sql<unknown>;
14
+ }
15
+ export declare function unique(): UniqueConstraint<string>;
16
+ export interface PrimaryKeyConstraintData {
17
+ fields: Array<FieldData>;
18
+ }
19
+ export declare class PrimaryKeyConstraint<TableName extends string = string> implements HasData<PrimaryKeyConstraintData>, HasConstraint {
20
+ data: PrimaryKeyConstraintData;
21
+ private brand;
22
+ [internalData]: PrimaryKeyConstraintData;
23
+ constructor(data: PrimaryKeyConstraintData);
24
+ get [internalConstraint](): import("./Sql.ts").Sql<unknown>;
25
+ }
26
+ export declare function primaryKey<TableName extends string = string>(...fields: Array<Field<unknown, TableName>>): PrimaryKeyConstraint<TableName>;
27
+ export interface ForeignKeyConstraintData {
28
+ fields: Array<FieldData>;
29
+ references: Array<FieldData>;
30
+ }
31
+ export declare class ForeignKeyConstraint<TableName extends string = string> implements HasData<ForeignKeyConstraintData>, HasConstraint {
32
+ private brand;
33
+ [internalData]: ForeignKeyConstraintData;
34
+ constructor(data: ForeignKeyConstraintData);
35
+ references<ForeignTable extends string>(...fields: Array<Field<unknown, ForeignTable>>): ForeignKeyConstraint<TableName>;
36
+ get [internalConstraint](): import("./Sql.ts").Sql<unknown>;
37
+ }
38
+ export declare function foreignKey<TableName extends string = string>(...fields: Array<Field<unknown, TableName>>): ForeignKeyConstraint<TableName>;
39
+ export type Constraint = UniqueConstraint | PrimaryKeyConstraint | ForeignKeyConstraint;
@@ -0,0 +1,87 @@
1
+ import {
2
+ getData,
3
+ getField,
4
+ internalConstraint,
5
+ internalData
6
+ } from "./Internal.ts";
7
+ import { sql } from "./Sql.ts";
8
+ class UniqueConstraint {
9
+ [internalData];
10
+ constructor(data) {
11
+ this[internalData] = data;
12
+ }
13
+ on(...columns) {
14
+ const fields = columns.map(getField);
15
+ return new UniqueConstraint({ ...getData(this), fields });
16
+ }
17
+ nullsNotDistinct() {
18
+ return new UniqueConstraint({ ...getData(this), nullsNotDistinct: true });
19
+ }
20
+ get [internalConstraint]() {
21
+ const { fields, nullsNotDistinct } = getData(this);
22
+ return sql.join([
23
+ sql`unique`,
24
+ nullsNotDistinct ? sql`nulls not distinct` : void 0,
25
+ sql`(${sql.join(
26
+ fields.map((field) => sql.identifier(field.fieldName)),
27
+ sql`, `
28
+ )})`
29
+ ]);
30
+ }
31
+ }
32
+ function unique() {
33
+ return new UniqueConstraint({ fields: [] });
34
+ }
35
+ class PrimaryKeyConstraint {
36
+ constructor(data) {
37
+ this.data = data;
38
+ this[internalData] = data;
39
+ }
40
+ [internalData];
41
+ get [internalConstraint]() {
42
+ const { fields } = getData(this);
43
+ return sql`primary key (${sql.join(
44
+ fields.map((field) => sql.identifier(field.fieldName)),
45
+ sql`, `
46
+ )})`;
47
+ }
48
+ }
49
+ function primaryKey(...fields) {
50
+ return new PrimaryKeyConstraint({ fields: fields.map(getField) });
51
+ }
52
+ class ForeignKeyConstraint {
53
+ [internalData];
54
+ constructor(data) {
55
+ this[internalData] = data;
56
+ }
57
+ references(...fields) {
58
+ return new ForeignKeyConstraint({
59
+ ...getData(this),
60
+ references: fields.map(getField)
61
+ });
62
+ }
63
+ get [internalConstraint]() {
64
+ const { fields, references } = getData(this);
65
+ return sql`foreign key (${sql.join(
66
+ fields.map((field) => sql.identifier(field.fieldName)),
67
+ sql`, `
68
+ )}) references ${sql.identifier(references[0].targetName)} (${sql.join(
69
+ references.map((field) => sql.identifier(field.fieldName)),
70
+ sql`, `
71
+ )})`;
72
+ }
73
+ }
74
+ function foreignKey(...fields) {
75
+ return new ForeignKeyConstraint({
76
+ fields: fields.map(getField),
77
+ references: []
78
+ });
79
+ }
80
+ export {
81
+ ForeignKeyConstraint,
82
+ PrimaryKeyConstraint,
83
+ UniqueConstraint,
84
+ foreignKey,
85
+ primaryKey,
86
+ unique
87
+ };
@@ -0,0 +1,43 @@
1
+ import { Builder } from './Builder.ts';
2
+ import type { Dialect } from './Dialect.ts';
3
+ import type { Driver } from './Driver.ts';
4
+ import { internalResolver, type HasResolver } from './Internal.ts';
5
+ import type { Async, Either, QueryDialect, QueryMeta, Sync } from './MetaData.ts';
6
+ import { Resolver } from './Resolver.ts';
7
+ export declare class Database<Meta extends QueryMeta = Either> extends Builder<Meta> implements HasResolver<Meta> {
8
+ #private;
9
+ readonly [internalResolver]: Resolver<Meta>;
10
+ constructor(driver: Driver, dialect: Dialect, transactionDepth?: number);
11
+ close(this: Database<Async>): Promise<void>;
12
+ close(this: Database<Sync>): void;
13
+ [Symbol.dispose](this: Database<Sync>): void;
14
+ [Symbol.asyncDispose](this: Database<Async>): Promise<void>;
15
+ transaction<T>(this: Database<Sync>, run: (tx: Transaction<Meta>) => T, options?: TransactionOptions[Meta['dialect']]): T;
16
+ transaction<T>(this: Database<Async>, run: (tx: Transaction<Meta>) => Promise<T>, options?: TransactionOptions[Meta['dialect']]): Promise<T>;
17
+ transaction<T>(run: (tx: Transaction<Meta>) => T | Promise<T>, options?: TransactionOptions[Meta['dialect']]): T | Promise<T>;
18
+ }
19
+ export interface TransactionOptions {
20
+ universal: never;
21
+ sqlite: {
22
+ behavior?: 'deferred' | 'immediate' | 'exclusive';
23
+ };
24
+ postgres: {
25
+ isolationLevel?: 'read uncommitted' | 'read committed' | 'repeatable read' | 'serializable';
26
+ accessMode?: 'read only' | 'read write';
27
+ deferrable?: boolean;
28
+ };
29
+ mysql: {
30
+ isolationLevel?: 'read uncommitted' | 'read committed' | 'repeatable read' | 'serializable';
31
+ accessMode?: 'read only' | 'read write';
32
+ withConsistentSnapshot?: boolean;
33
+ };
34
+ }
35
+ export declare class Rollback extends Error {
36
+ }
37
+ export declare class Transaction<Meta extends QueryMeta> extends Database<Meta> {
38
+ rollback(): never;
39
+ }
40
+ export declare class SyncDatabase<Dialect extends QueryDialect> extends Database<Sync<Dialect>> {
41
+ }
42
+ export declare class AsyncDatabase<Dialect extends QueryDialect> extends Database<Async<Dialect>> {
43
+ }
@@ -0,0 +1,58 @@
1
+ import { Builder } from "./Builder.ts";
2
+ import { internalResolver } from "./Internal.ts";
3
+ import { Resolver } from "./Resolver.ts";
4
+ class Database extends Builder {
5
+ [internalResolver];
6
+ #driver;
7
+ #dialect;
8
+ #transactionDepth;
9
+ constructor(driver, dialect, transactionDepth = 0) {
10
+ const resolver = new Resolver(driver, dialect);
11
+ super({ resolver });
12
+ this[internalResolver] = resolver;
13
+ this.#driver = driver;
14
+ this.#dialect = dialect;
15
+ this.#transactionDepth = transactionDepth;
16
+ }
17
+ close() {
18
+ return this.#driver.close();
19
+ }
20
+ [Symbol.dispose]() {
21
+ this.close();
22
+ }
23
+ async [Symbol.asyncDispose]() {
24
+ return this.close();
25
+ }
26
+ transaction(run, options = {}) {
27
+ return this.#driver.transaction(
28
+ (inner) => {
29
+ const tx = new Transaction(
30
+ inner,
31
+ this.#dialect,
32
+ this.#transactionDepth + 1
33
+ );
34
+ return run(tx);
35
+ },
36
+ options,
37
+ this.#transactionDepth
38
+ );
39
+ }
40
+ }
41
+ class Rollback extends Error {
42
+ }
43
+ class Transaction extends Database {
44
+ rollback() {
45
+ throw new Rollback("Rollback");
46
+ }
47
+ }
48
+ class SyncDatabase extends Database {
49
+ }
50
+ class AsyncDatabase extends Database {
51
+ }
52
+ export {
53
+ AsyncDatabase,
54
+ Database,
55
+ Rollback,
56
+ SyncDatabase,
57
+ Transaction
58
+ };
@@ -0,0 +1,6 @@
1
+ import type { Emitter } from './Emitter.ts';
2
+ import { type HasQuery, type HasSql } from './Internal.ts';
3
+ export declare function dialect(createEmitter: {
4
+ new (): Emitter;
5
+ }): (input: HasSql | HasQuery) => Emitter;
6
+ export type Dialect = ReturnType<typeof dialect>;
@@ -0,0 +1,16 @@
1
+ import {
2
+ getQuery,
3
+ getSql,
4
+ hasSql
5
+ } from "./Internal.ts";
6
+ function dialect(createEmitter) {
7
+ return (input) => {
8
+ const sql = hasSql(input) ? getSql(input) : getQuery(input);
9
+ const emitter = new createEmitter();
10
+ sql.emit(emitter);
11
+ return emitter;
12
+ };
13
+ }
14
+ export {
15
+ dialect
16
+ };
@@ -0,0 +1,28 @@
1
+ export type Driver = SyncDriver | AsyncDriver;
2
+ export type Statement = SyncStatement | AsyncStatement;
3
+ export interface SyncDriver {
4
+ close(): void;
5
+ exec(query: string): void;
6
+ prepare(query: string, name?: string): SyncStatement;
7
+ transaction<T>(run: (inner: SyncDriver) => T, options: unknown, depth: number): T;
8
+ }
9
+ export interface SyncStatement {
10
+ all(params: Array<unknown>): Array<object>;
11
+ run(params: Array<unknown>): void;
12
+ get(params: Array<unknown>): object | null;
13
+ values(params: Array<unknown>): Array<Array<unknown>>;
14
+ free(): void;
15
+ }
16
+ export interface AsyncDriver {
17
+ close(): Promise<void>;
18
+ exec(query: string): Promise<void>;
19
+ prepare(query: string, name?: string): AsyncStatement;
20
+ transaction<T>(run: (inner: AsyncDriver) => Promise<T>, options: unknown, depth: number): Promise<T>;
21
+ }
22
+ export interface AsyncStatement {
23
+ all(params: Array<unknown>): Promise<Array<object>>;
24
+ run(params: Array<unknown>): Promise<void>;
25
+ get(params: Array<unknown>): Promise<object | null>;
26
+ values(params: Array<unknown>): Promise<Array<Array<unknown>>>;
27
+ free(): void;
28
+ }
@@ -0,0 +1,35 @@
1
+ import type { ColumnData } from './Column.ts';
2
+ import { type HasQuery, type HasTarget } from './Internal.ts';
3
+ import { type Param } from './Param.ts';
4
+ import type { FieldData } from './expr/Field.ts';
5
+ import type { Create } from './query/CreateTable.ts';
6
+ import type { Delete } from './query/Delete.ts';
7
+ import type { Drop } from './query/DropTable.ts';
8
+ import type { Insert } from './query/Insert.ts';
9
+ import type { Select } from './query/Select.ts';
10
+ import type { Union } from './query/Union.ts';
11
+ import type { Update } from './query/Update.ts';
12
+ export declare abstract class Emitter {
13
+ sql: string;
14
+ params: Array<Param>;
15
+ bind(inputs?: Record<string, unknown>): Array<unknown>;
16
+ abstract emitIdentifier(value: string): void;
17
+ abstract emitValue(value: unknown): void;
18
+ abstract emitInline(value: unknown): void;
19
+ abstract emitJsonPath(value: Array<number | string>): void;
20
+ abstract emitPlaceholder(value: string): void;
21
+ abstract emitDefaultValue(): void;
22
+ emitUnsafe(value: string): void;
23
+ emitField(field: FieldData): void;
24
+ emitCreateTable(create: Create): void;
25
+ emitDrop(drop: Drop): void;
26
+ emitColumn(column: ColumnData): void;
27
+ emitReferences(fields: Array<FieldData>): void;
28
+ emitDelete(deleteOp: Delete<unknown>): void;
29
+ emitInsert(insert: Insert<unknown>): void;
30
+ emitSelect(select: Select<unknown>): void;
31
+ emitUnion(union: Union<unknown>): void;
32
+ emitUpdate(update: Update<unknown>): void;
33
+ abstract emitIdColumn(): void;
34
+ emitWith(cte: Array<HasQuery & HasTarget>): void;
35
+ }