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.
- package/dist/core/Builder.d.ts +36 -0
- package/dist/core/Builder.js +99 -0
- package/dist/core/Column.d.ts +38 -0
- package/dist/core/Column.js +59 -0
- package/dist/core/Constraint.d.ts +39 -0
- package/dist/core/Constraint.js +87 -0
- package/dist/core/Database.d.ts +43 -0
- package/dist/core/Database.js +58 -0
- package/dist/core/Dialect.d.ts +6 -0
- package/dist/core/Dialect.js +16 -0
- package/dist/core/Driver.d.ts +28 -0
- package/dist/core/Emitter.d.ts +35 -0
- package/dist/core/Emitter.js +153 -0
- package/dist/core/Index.d.ts +28 -0
- package/dist/core/Index.js +50 -0
- package/dist/core/Internal.d.ts +67 -0
- package/dist/core/Internal.js +62 -0
- package/dist/core/MetaData.d.ts +27 -0
- package/dist/core/Param.d.ts +9 -0
- package/dist/core/Param.js +14 -0
- package/dist/core/Query.d.ts +40 -0
- package/dist/core/Query.js +70 -0
- package/dist/core/Resolver.d.ts +23 -0
- package/dist/core/Resolver.js +54 -0
- package/dist/core/Schema.d.ts +4 -0
- package/dist/core/Schema.js +13 -0
- package/dist/core/Selection.d.ts +27 -0
- package/dist/core/Selection.js +88 -0
- package/dist/core/Sql.d.ts +49 -0
- package/dist/core/Sql.js +153 -0
- package/dist/core/Table.d.ts +56 -0
- package/dist/core/Table.js +103 -0
- package/dist/core/Types.d.ts +3 -0
- package/dist/core/Virtual.d.ts +2 -0
- package/dist/core/Virtual.js +28 -0
- package/dist/core/expr/Aggregate.d.ts +10 -0
- package/dist/core/expr/Aggregate.js +38 -0
- package/dist/core/expr/Conditions.d.ts +40 -0
- package/dist/core/expr/Conditions.js +137 -0
- package/dist/core/expr/Field.d.ts +14 -0
- package/dist/core/expr/Field.js +15 -0
- package/dist/core/expr/Functions.d.ts +6 -0
- package/dist/core/expr/Functions.js +11 -0
- package/dist/core/expr/Input.d.ts +3 -0
- package/dist/core/expr/Input.js +14 -0
- package/dist/core/query/CreateTable.d.ts +13 -0
- package/dist/core/query/CreateTable.js +23 -0
- package/dist/core/query/Delete.d.ts +19 -0
- package/dist/core/query/Delete.js +44 -0
- package/dist/core/query/DropTable.d.ts +13 -0
- package/dist/core/query/DropTable.js +23 -0
- package/dist/core/query/Insert.d.ts +43 -0
- package/dist/core/query/Insert.js +111 -0
- package/dist/core/query/Select.d.ts +93 -0
- package/dist/core/query/Select.js +196 -0
- package/dist/core/query/Union.d.ts +27 -0
- package/dist/core/query/Union.js +86 -0
- package/dist/core/query/Update.d.ts +23 -0
- package/dist/core/query/Update.js +55 -0
- package/dist/driver/better-sqlite3.d.ts +3 -16
- package/dist/driver/better-sqlite3.js +27 -33
- package/dist/driver/bun-sqlite.d.ts +3 -18
- package/dist/driver/bun-sqlite.js +26 -42
- package/dist/driver/pg.d.ts +25 -0
- package/dist/driver/pg.js +81 -0
- package/dist/driver/pglite.d.ts +24 -0
- package/dist/driver/pglite.js +59 -0
- package/dist/driver/sql.js.d.ts +3 -16
- package/dist/driver/sql.js.js +41 -47
- package/dist/index.d.ts +16 -21
- package/dist/index.js +16 -14
- package/dist/migrate/Scan.d.ts +1 -0
- package/dist/migrate/Scan.js +0 -0
- package/dist/postgres/PostgresColumns.d.ts +10 -0
- package/dist/postgres/PostgresColumns.js +58 -0
- package/dist/postgres/PostgresDialect.d.ts +2 -0
- package/dist/postgres/PostgresDialect.js +58 -0
- package/dist/postgres/PostgresSchema.d.ts +1 -0
- package/dist/postgres/PostgresSchema.js +4 -0
- package/dist/postgres/PostgresTable.d.ts +1 -0
- package/dist/postgres/PostgresTable.js +4 -0
- package/dist/postgres.d.ts +2 -0
- package/dist/postgres.js +2 -0
- package/dist/sqlite/SqliteColumns.d.ts +9 -0
- package/dist/sqlite/SqliteColumns.js +63 -0
- package/dist/sqlite/SqliteDialect.d.ts +2 -0
- package/dist/sqlite/SqliteDialect.js +51 -0
- package/dist/sqlite/SqliteFunctions.d.ts +8 -167
- package/dist/sqlite/SqliteFunctions.js +6 -3
- package/dist/sqlite/SqliteTable.d.ts +1 -0
- package/dist/sqlite/SqliteTable.js +4 -0
- package/dist/sqlite.d.ts +3 -2
- package/dist/sqlite.js +3 -2
- package/dist/src/core/Builder.d.ts +36 -0
- package/dist/src/core/Column.d.ts +38 -0
- package/dist/src/core/Constraint.d.ts +39 -0
- package/dist/src/core/Database.d.ts +43 -0
- package/dist/src/core/Dialect.d.ts +6 -0
- package/dist/src/core/Driver.d.ts +28 -0
- package/dist/src/core/Emitter.d.ts +35 -0
- package/dist/src/core/Index.d.ts +28 -0
- package/dist/src/core/Internal.d.ts +67 -0
- package/dist/src/core/MetaData.d.ts +27 -0
- package/dist/src/core/Param.d.ts +9 -0
- package/dist/src/core/Query.d.ts +40 -0
- package/dist/src/core/Resolver.d.ts +23 -0
- package/dist/src/core/Schema.d.ts +4 -0
- package/dist/src/core/Selection.d.ts +27 -0
- package/dist/src/core/Sql.d.ts +49 -0
- package/dist/src/core/Table.d.ts +56 -0
- package/dist/src/core/Types.d.ts +3 -0
- package/dist/src/core/Virtual.d.ts +2 -0
- package/dist/src/core/expr/Aggregate.d.ts +10 -0
- package/dist/src/core/expr/Conditions.d.ts +40 -0
- package/dist/src/core/expr/Field.d.ts +14 -0
- package/dist/src/core/expr/Functions.d.ts +6 -0
- package/dist/src/core/expr/Input.d.ts +3 -0
- package/dist/src/core/query/CreateTable.d.ts +13 -0
- package/dist/src/core/query/Delete.d.ts +19 -0
- package/dist/src/core/query/DropTable.d.ts +13 -0
- package/dist/src/core/query/Insert.d.ts +43 -0
- package/dist/src/core/query/Select.d.ts +93 -0
- package/dist/src/core/query/Union.d.ts +27 -0
- package/dist/src/core/query/Update.d.ts +23 -0
- package/dist/src/driver/better-sqlite3.d.ts +3 -0
- package/dist/src/driver/bun-sqlite.d.ts +4 -0
- package/dist/src/driver/pg.d.ts +25 -0
- package/dist/src/driver/pglite.d.ts +24 -0
- package/dist/src/driver/sql.js.d.ts +3 -0
- package/dist/src/index.d.ts +16 -0
- package/dist/src/migrate/Scan.d.ts +1 -0
- package/dist/src/postgres/PostgresColumns.d.ts +10 -0
- package/dist/src/postgres/PostgresDialect.d.ts +2 -0
- package/dist/src/postgres/PostgresSchema.d.ts +1 -0
- package/dist/src/postgres/PostgresTable.d.ts +1 -0
- package/dist/src/postgres.d.ts +2 -0
- package/dist/src/sqlite/SqliteColumns.d.ts +9 -0
- package/dist/src/sqlite/SqliteDialect.d.ts +2 -0
- package/dist/src/sqlite/SqliteFunctions.d.ts +8 -0
- package/dist/src/sqlite/SqliteTable.d.ts +1 -0
- package/dist/src/sqlite.d.ts +3 -0
- package/dist/src/universal/UniversalColumns.d.ts +6 -0
- package/dist/src/universal/UniversalTransaction.d.ts +3 -0
- package/dist/src/universal.d.ts +2 -0
- package/dist/test/Suite.d.ts +11 -0
- package/dist/test/TestDriver.d.ts +2 -0
- package/dist/test/TestUtils.d.ts +4 -0
- package/dist/test/core/Expr.test.d.ts +1 -0
- package/dist/test/core/Selection.test.d.ts +1 -0
- package/dist/test/core/Sql.test.d.ts +1 -0
- package/dist/test/core/SqliteFunctions.test.d.ts +1 -0
- package/dist/test/core/Table.test.d.ts +1 -0
- package/dist/test/driver/better-sqlite3.test.d.ts +1 -0
- package/dist/test/driver/bun-sqlite.test.d.ts +1 -0
- package/dist/test/driver/pg.test.d.ts +1 -0
- package/dist/test/driver/pglite.test.d.ts +1 -0
- package/dist/test/driver/sql.js.test.d.ts +1 -0
- package/dist/test/query/CreateTable.test.d.ts +1 -0
- package/dist/test/query/Delete.test.d.ts +1 -0
- package/dist/test/query/DropTable.test.d.ts +1 -0
- package/dist/test/query/Insert.test.d.ts +1 -0
- package/dist/test/query/Select.test.d.ts +1 -0
- package/dist/test/query/Union.test.d.ts +1 -0
- package/dist/test/query/Update.test.d.ts +1 -0
- package/dist/universal/UniversalColumns.d.ts +6 -0
- package/dist/universal/UniversalColumns.js +56 -0
- package/dist/universal/UniversalTransaction.d.ts +3 -0
- package/dist/universal/UniversalTransaction.js +14 -0
- package/dist/universal.d.ts +2 -0
- package/dist/universal.js +2 -0
- package/package.json +25 -43
- package/dist/define/Column.d.ts +0 -122
- package/dist/define/Column.js +0 -183
- package/dist/define/Expr.d.ts +0 -183
- package/dist/define/Expr.js +0 -453
- package/dist/define/Fields.d.ts +0 -18
- package/dist/define/Functions.d.ts +0 -5
- package/dist/define/Functions.js +0 -12
- package/dist/define/Id.d.ts +0 -3
- package/dist/define/Index.d.ts +0 -17
- package/dist/define/Index.js +0 -19
- package/dist/define/Ops.d.ts +0 -36
- package/dist/define/Ops.js +0 -114
- package/dist/define/OrderBy.d.ts +0 -9
- package/dist/define/OrderBy.js +0 -8
- package/dist/define/Param.d.ts +0 -18
- package/dist/define/Param.js +0 -27
- package/dist/define/Query.d.ts +0 -268
- package/dist/define/Query.js +0 -596
- package/dist/define/Schema.d.ts +0 -12
- package/dist/define/Schema.js +0 -140
- package/dist/define/Selection.d.ts +0 -21
- package/dist/define/Selection.js +0 -6
- package/dist/define/Sql.d.ts +0 -6
- package/dist/define/Sql.js +0 -21
- package/dist/define/Table.d.ts +0 -75
- package/dist/define/Table.js +0 -138
- package/dist/define/Target.d.ts +0 -47
- package/dist/define/Target.js +0 -68
- package/dist/define/VirtualTable.d.ts +0 -31
- package/dist/define/VirtualTable.js +0 -39
- package/dist/driver/@sqlite.org/sqlite-wasm.d.ts +0 -17
- package/dist/driver/@sqlite.org/sqlite-wasm.js +0 -80
- package/dist/driver/d1.d.ts +0 -22
- package/dist/driver/d1.js +0 -71
- package/dist/driver/sqlite3.d.ts +0 -22
- package/dist/driver/sqlite3.js +0 -132
- package/dist/lib/Driver.d.ts +0 -111
- package/dist/lib/Driver.js +0 -398
- package/dist/lib/Formatter.d.ts +0 -106
- package/dist/lib/Formatter.js +0 -888
- package/dist/lib/Sanitizer.d.ts +0 -5
- package/dist/lib/SqlError.d.ts +0 -3
- package/dist/lib/SqlError.js +0 -10
- package/dist/lib/Statement.d.ts +0 -108
- package/dist/lib/Statement.js +0 -190
- package/dist/sqlite/SqliteFormatter.d.ts +0 -11
- package/dist/sqlite/SqliteFormatter.js +0 -66
- package/dist/sqlite/SqliteSchema.d.ts +0 -25
- package/dist/sqlite/SqliteSchema.js +0 -46
- package/dist/util/Alias.d.ts +0 -1
- package/dist/util/Alias.js +0 -6
- package/dist/util/Callable.d.ts +0 -16
- package/dist/util/Callable.js +0 -9
- /package/dist/{define/Fields.js → core/Driver.js} +0 -0
- /package/dist/{define/Id.js → core/MetaData.js} +0 -0
- /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
|
+
}
|