@dsqlbase/core 0.0.1
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/client/base.d.ts +9 -0
- package/dist/client/base.d.ts.map +1 -0
- package/dist/client/base.js +13 -0
- package/dist/client/base.js.map +1 -0
- package/dist/client/database.d.ts +5 -0
- package/dist/client/database.d.ts.map +1 -0
- package/dist/client/database.js +8 -0
- package/dist/client/database.js.map +1 -0
- package/dist/client/model.d.ts +19 -0
- package/dist/client/model.d.ts.map +1 -0
- package/dist/client/model.js +12 -0
- package/dist/client/model.js.map +1 -0
- package/dist/definition/base.d.ts +49 -0
- package/dist/definition/base.d.ts.map +1 -0
- package/dist/definition/base.js +54 -0
- package/dist/definition/base.js.map +1 -0
- package/dist/definition/column.d.ts +74 -0
- package/dist/definition/column.d.ts.map +1 -0
- package/dist/definition/column.js +94 -0
- package/dist/definition/column.js.map +1 -0
- package/dist/definition/constraint.d.ts +69 -0
- package/dist/definition/constraint.d.ts.map +1 -0
- package/dist/definition/constraint.js +79 -0
- package/dist/definition/constraint.js.map +1 -0
- package/dist/definition/domain.d.ts +39 -0
- package/dist/definition/domain.d.ts.map +1 -0
- package/dist/definition/domain.js +48 -0
- package/dist/definition/domain.js.map +1 -0
- package/dist/definition/index.d.ts +11 -0
- package/dist/definition/index.d.ts.map +1 -0
- package/dist/definition/index.js +11 -0
- package/dist/definition/index.js.map +1 -0
- package/dist/definition/indexes.d.ts +64 -0
- package/dist/definition/indexes.d.ts.map +1 -0
- package/dist/definition/indexes.js +84 -0
- package/dist/definition/indexes.js.map +1 -0
- package/dist/definition/namespace.d.ts +14 -0
- package/dist/definition/namespace.d.ts.map +1 -0
- package/dist/definition/namespace.js +15 -0
- package/dist/definition/namespace.js.map +1 -0
- package/dist/definition/relations.d.ts +53 -0
- package/dist/definition/relations.d.ts.map +1 -0
- package/dist/definition/relations.js +40 -0
- package/dist/definition/relations.js.map +1 -0
- package/dist/definition/schema.d.ts +14 -0
- package/dist/definition/schema.d.ts.map +1 -0
- package/dist/definition/schema.js +15 -0
- package/dist/definition/schema.js.map +1 -0
- package/dist/definition/sequence.d.ts +32 -0
- package/dist/definition/sequence.d.ts.map +1 -0
- package/dist/definition/sequence.js +59 -0
- package/dist/definition/sequence.js.map +1 -0
- package/dist/definition/table.d.ts +66 -0
- package/dist/definition/table.d.ts.map +1 -0
- package/dist/definition/table.js +59 -0
- package/dist/definition/table.js.map +1 -0
- package/dist/definition/view.d.ts +9 -0
- package/dist/definition/view.d.ts.map +1 -0
- package/dist/definition/view.js +11 -0
- package/dist/definition/view.js.map +1 -0
- package/dist/driver/codec.d.ts +13 -0
- package/dist/driver/codec.d.ts.map +1 -0
- package/dist/driver/codec.js +15 -0
- package/dist/driver/codec.js.map +1 -0
- package/dist/driver/index.d.ts +3 -0
- package/dist/driver/index.d.ts.map +1 -0
- package/dist/driver/index.js +2 -0
- package/dist/driver/index.js.map +1 -0
- package/dist/driver/session.d.ts +23 -0
- package/dist/driver/session.d.ts.map +1 -0
- package/dist/driver/session.js +2 -0
- package/dist/driver/session.js.map +1 -0
- package/dist/execution/column.d.ts +17 -0
- package/dist/execution/column.d.ts.map +1 -0
- package/dist/execution/column.js +23 -0
- package/dist/execution/column.js.map +1 -0
- package/dist/execution/context.d.ts +19 -0
- package/dist/execution/context.d.ts.map +1 -0
- package/dist/execution/context.js +14 -0
- package/dist/execution/context.js.map +1 -0
- package/dist/execution/dialect.d.ts +75 -0
- package/dist/execution/dialect.d.ts.map +1 -0
- package/dist/execution/dialect.js +123 -0
- package/dist/execution/dialect.js.map +1 -0
- package/dist/execution/index.d.ts +8 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +7 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/operation.d.ts +140 -0
- package/dist/execution/operation.d.ts.map +1 -0
- package/dist/execution/operation.js +303 -0
- package/dist/execution/operation.js.map +1 -0
- package/dist/execution/schema.d.ts +38 -0
- package/dist/execution/schema.d.ts.map +1 -0
- package/dist/execution/schema.js +104 -0
- package/dist/execution/schema.js.map +1 -0
- package/dist/execution/table.d.ts +107 -0
- package/dist/execution/table.d.ts.map +1 -0
- package/dist/execution/table.js +46 -0
- package/dist/execution/table.js.map +1 -0
- package/dist/execution/thenable.d.ts +7 -0
- package/dist/execution/thenable.d.ts.map +1 -0
- package/dist/execution/thenable.js +12 -0
- package/dist/execution/thenable.js.map +1 -0
- package/dist/execution/types.d.ts +42 -0
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/execution/types.js +2 -0
- package/dist/execution/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/base.d.ts +29 -0
- package/dist/runtime/base.d.ts.map +1 -0
- package/dist/runtime/base.js +3 -0
- package/dist/runtime/base.js.map +1 -0
- package/dist/runtime/column.d.ts +18 -0
- package/dist/runtime/column.d.ts.map +1 -0
- package/dist/runtime/column.js +24 -0
- package/dist/runtime/column.js.map +1 -0
- package/dist/runtime/context.d.ts +21 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/context.js +14 -0
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/dialect.d.ts +42 -0
- package/dist/runtime/dialect.d.ts.map +1 -0
- package/dist/runtime/dialect.js +2 -0
- package/dist/runtime/dialect.js.map +1 -0
- package/dist/runtime/executor.d.ts +12 -0
- package/dist/runtime/executor.d.ts.map +1 -0
- package/dist/runtime/executor.js +18 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/index.d.ts +10 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +8 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/operation.d.ts +82 -0
- package/dist/runtime/operation.d.ts.map +1 -0
- package/dist/runtime/operation.js +236 -0
- package/dist/runtime/operation.js.map +1 -0
- package/dist/runtime/query.d.ts +77 -0
- package/dist/runtime/query.d.ts.map +1 -0
- package/dist/runtime/query.js +125 -0
- package/dist/runtime/query.js.map +1 -0
- package/dist/runtime/registry.d.ts +27 -0
- package/dist/runtime/registry.d.ts.map +1 -0
- package/dist/runtime/registry.js +106 -0
- package/dist/runtime/registry.js.map +1 -0
- package/dist/runtime/session.d.ts +23 -0
- package/dist/runtime/session.d.ts.map +1 -0
- package/dist/runtime/session.js +2 -0
- package/dist/runtime/session.js.map +1 -0
- package/dist/runtime/table.d.ts +34 -0
- package/dist/runtime/table.d.ts.map +1 -0
- package/dist/runtime/table.js +46 -0
- package/dist/runtime/table.js.map +1 -0
- package/dist/sql/expressions.d.ts +25 -0
- package/dist/sql/expressions.d.ts.map +1 -0
- package/dist/sql/expressions.js +79 -0
- package/dist/sql/expressions.js.map +1 -0
- package/dist/sql/index.d.ts +4 -0
- package/dist/sql/index.d.ts.map +1 -0
- package/dist/sql/index.js +4 -0
- package/dist/sql/index.js.map +1 -0
- package/dist/sql/nodes.d.ts +49 -0
- package/dist/sql/nodes.d.ts.map +1 -0
- package/dist/sql/nodes.js +102 -0
- package/dist/sql/nodes.js.map +1 -0
- package/dist/sql/tag.d.ts +13 -0
- package/dist/sql/tag.d.ts.map +1 -0
- package/dist/sql/tag.js +32 -0
- package/dist/sql/tag.js.map +1 -0
- package/dist/sql/utils.d.ts +7 -0
- package/dist/sql/utils.d.ts.map +1 -0
- package/dist/sql/utils.js +15 -0
- package/dist/sql/utils.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/object.d.ts +29 -0
- package/dist/types/object.d.ts.map +1 -0
- package/dist/types/object.js +2 -0
- package/dist/types/object.js.map +1 -0
- package/dist/types/prettify.d.ts +5 -0
- package/dist/types/prettify.d.ts.map +1 -0
- package/dist/types/prettify.js +3 -0
- package/dist/types/prettify.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/thenable.d.ts +7 -0
- package/dist/utils/thenable.d.ts.map +1 -0
- package/dist/utils/thenable.js +12 -0
- package/dist/utils/thenable.js.map +1 -0
- package/dist/utils/types.d.ts +46 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +2 -0
- package/dist/utils/types.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { SQLQuery } from "../sql/nodes.js";
|
|
2
|
+
import { DefinitionNode, Kind, NodeRef } from "./base.js";
|
|
3
|
+
import { CheckConstraintDefinition, PrimaryKeyConstraintDefinition, UniqueConstraintDefinition, } from "./constraint.js";
|
|
4
|
+
import { IndexDefinition } from "./indexes.js";
|
|
5
|
+
export class TableDefinition extends DefinitionNode {
|
|
6
|
+
kind = Kind.TABLE;
|
|
7
|
+
_namespace;
|
|
8
|
+
_indexes = [];
|
|
9
|
+
_constraints = [];
|
|
10
|
+
columns;
|
|
11
|
+
constructor(name, config) {
|
|
12
|
+
super(name);
|
|
13
|
+
this._namespace = config.schema;
|
|
14
|
+
this.columns = config.columns;
|
|
15
|
+
}
|
|
16
|
+
/** @internal */
|
|
17
|
+
_getColumnRefs() {
|
|
18
|
+
return Object.fromEntries(Object.entries(this.columns).map(([field, column]) => [field, new NodeRef(column)]));
|
|
19
|
+
}
|
|
20
|
+
index(name, config = {}) {
|
|
21
|
+
const idx = new IndexDefinition(name, { ...config, table: this });
|
|
22
|
+
this._indexes.push(idx);
|
|
23
|
+
return idx;
|
|
24
|
+
}
|
|
25
|
+
check(cb, name) {
|
|
26
|
+
const expression = new SQLQuery(cb(this._getColumnRefs()));
|
|
27
|
+
this._constraints?.push(new CheckConstraintDefinition(name ?? `${this.name}_check`, { expression }));
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
unique(cb) {
|
|
31
|
+
const cols = cb(this._getColumnRefs());
|
|
32
|
+
const constraint = new UniqueConstraintDefinition(`${this.name}_unique`, {
|
|
33
|
+
table: this,
|
|
34
|
+
columns: cols,
|
|
35
|
+
});
|
|
36
|
+
this._constraints?.push(constraint);
|
|
37
|
+
return constraint;
|
|
38
|
+
}
|
|
39
|
+
primaryKey(cb) {
|
|
40
|
+
const cols = cb(this._getColumnRefs());
|
|
41
|
+
const constraint = new PrimaryKeyConstraintDefinition(`${this.name}_primary_key`, {
|
|
42
|
+
table: this,
|
|
43
|
+
columns: cols,
|
|
44
|
+
});
|
|
45
|
+
this._constraints?.push(constraint);
|
|
46
|
+
return constraint;
|
|
47
|
+
}
|
|
48
|
+
toJSON() {
|
|
49
|
+
return {
|
|
50
|
+
kind: this.kind,
|
|
51
|
+
name: this.name,
|
|
52
|
+
namespace: this._namespace?.toJSON() ?? "public",
|
|
53
|
+
columns: Object.values(this.columns).map((col) => col.toJSON()),
|
|
54
|
+
indexes: this._indexes.map((idx) => idx.toJSON()),
|
|
55
|
+
constraints: this._constraints?.map((constraint) => constraint.toJSON()),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/definition/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1D,OAAO,EAEL,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAmC,eAAe,EAAE,MAAM,cAAc,CAAC;AAkBhF,MAAM,OAAO,eAIX,SAAQ,cAAqD;IACpD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;IAEjB,UAAU,CAA0B;IACpC,QAAQ,GAAyB,EAAE,CAAC;IACpC,YAAY,GAA8B,EAAE,CAAC;IAE9C,OAAO,CAAqB;IAErC,YAAY,IAAW,EAAE,MAAsC;QAC7D,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAA6B,CAAC;IACtD,CAAC;IAED,gBAAgB;IAChB,cAAc;QACZ,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CACrD,CAAC;IACnC,CAAC;IAEM,KAAK,CACV,IAAc,EACd,SAA6C,EAAE;QAE/C,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAExB,OAAO,GAAsC,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,EAAqD,EAAE,IAAa;QAC/E,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,EAAE,IAAI,CACrB,IAAI,yBAAyB,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAC5E,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CACX,EAEyD;QAEzD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAEvC,MAAM,UAAU,GAAG,IAAI,0BAA0B,CAAC,GAAG,IAAI,CAAC,IAAI,SAAS,EAAE;YACvE,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpC,OAAO,UAAU,CAAC;IACpB,CAAC;IAEM,UAAU,CACf,EAEyD;QAEzD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAEvC,MAAM,UAAU,GAAG,IAAI,8BAA8B,CAAC,GAAG,IAAI,CAAC,IAAI,cAAc,EAAE;YAChF,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpC,OAAO,UAAU,CAAC;IACpB,CAAC;IAEM,MAAM;QACX,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,QAAQ;YAChD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAC/D,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACjD,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;SAChE,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DefinitionNode } from "./base.js";
|
|
2
|
+
export declare class ViewDefinition<TName extends string> extends DefinitionNode<TName> {
|
|
3
|
+
readonly kind: "VIEW";
|
|
4
|
+
toJSON(): {
|
|
5
|
+
readonly kind: "VIEW";
|
|
6
|
+
readonly name: TName;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/definition/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAQ,MAAM,WAAW,CAAC;AAEjD,qBAAa,cAAc,CAAC,KAAK,SAAS,MAAM,CAAE,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC7E,SAAgB,IAAI,SAAa;IAE1B,MAAM;;;;CAMd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/definition/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,OAAO,cAAqC,SAAQ,cAAqB;IAC7D,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAE1B,MAAM;QACX,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;SACP,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { SQLNode } from "../sql/index.js";
|
|
2
|
+
export interface ValueEncoder<TIn, TOut = TIn> {
|
|
3
|
+
encode(value: TIn): TOut | SQLNode;
|
|
4
|
+
}
|
|
5
|
+
export interface ValueDecoder<TIn, TOut = TIn> {
|
|
6
|
+
decode(value: TIn): TOut;
|
|
7
|
+
}
|
|
8
|
+
export interface ValueCodec<TIn, TOut = TIn> extends ValueEncoder<TIn, TOut>, ValueDecoder<TOut, TIn> {
|
|
9
|
+
}
|
|
10
|
+
export declare const DEFAULT_ENCODER: ValueEncoder<unknown>;
|
|
11
|
+
export declare const DEFAULT_DECODER: ValueDecoder<unknown>;
|
|
12
|
+
export declare const DEFAULT_CODEC: ValueCodec<unknown>;
|
|
13
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/driver/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,WAAW,YAAY,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG;IAC3C,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,YAAY,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG;IAC3C,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,CACzC,SAAQ,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC;CAAG;AAE7D,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,OAAO,CAIjD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,OAAO,CAIjD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,UAAU,CAAC,OAAO,CAG7C,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const DEFAULT_ENCODER = {
|
|
2
|
+
encode(value) {
|
|
3
|
+
return value;
|
|
4
|
+
},
|
|
5
|
+
};
|
|
6
|
+
export const DEFAULT_DECODER = {
|
|
7
|
+
decode(value) {
|
|
8
|
+
return value;
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
export const DEFAULT_CODEC = {
|
|
12
|
+
...DEFAULT_ENCODER,
|
|
13
|
+
...DEFAULT_DECODER,
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/driver/codec.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,eAAe,GAA0B;IACpD,MAAM,CAAC,KAAc;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA0B;IACpD,MAAM,CAAC,KAAc;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAwB;IAChD,GAAG,eAAe;IAClB,GAAG,eAAe;CACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,GAIhB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SQLStatement } from "../sql/nodes.js";
|
|
2
|
+
/**
|
|
3
|
+
* Defines the Session interface for executing SQL queries and managing transactions.
|
|
4
|
+
*
|
|
5
|
+
* This interface abstracts the underlying driver connection and provides methods
|
|
6
|
+
* for executing queries and handling transactions.
|
|
7
|
+
*/
|
|
8
|
+
export interface Session {
|
|
9
|
+
execute<T = unknown>(query: SQLStatement): Promise<T[]>;
|
|
10
|
+
beginTransaction?(): Promise<TransactionSession>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Defines the TransactionSession interface, which extends the Session interface with
|
|
14
|
+
* additional methods for committing and rolling back transactions.
|
|
15
|
+
*
|
|
16
|
+
* This interface is used when a transaction is active, allowing the caller to
|
|
17
|
+
* manage the transaction lifecycle explicitly.
|
|
18
|
+
*/
|
|
19
|
+
export interface TransactionSession extends Session {
|
|
20
|
+
commit(): Promise<void>;
|
|
21
|
+
rollback(): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/driver/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;;GAKG;AAEH,MAAM,WAAW,OAAO;IACtB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACxD,gBAAgB,CAAC,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAClD;AAED;;;;;;GAMG;AAEH,MAAM,WAAW,kBAAmB,SAAQ,OAAO;IACjD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/driver/session.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TypedObject } from "../types/object.js";
|
|
2
|
+
import { ColumnConfig, ColumnDefinition } from "../definition/column.js";
|
|
3
|
+
import { SQLContext, SQLNode, SQLStatement } from "../sql/index.js";
|
|
4
|
+
import { AnyTable } from "./table.js";
|
|
5
|
+
export type AnyColumn = Column<AnyTable, string, ColumnConfig>;
|
|
6
|
+
export declare class Column<TTable extends AnyTable, TName extends string, TConfig extends ColumnConfig> implements SQLNode, TypedObject<TConfig> {
|
|
7
|
+
readonly __type: TConfig;
|
|
8
|
+
readonly table: TTable;
|
|
9
|
+
readonly name: TName;
|
|
10
|
+
readonly notNull: TConfig["notNull"];
|
|
11
|
+
readonly primaryKey: TConfig["primaryKey"];
|
|
12
|
+
readonly unique: TConfig["unique"];
|
|
13
|
+
constructor(table: TTable, definition: ColumnDefinition<TName, TConfig>);
|
|
14
|
+
resolve(value: unknown): TConfig["valueType"];
|
|
15
|
+
toSQL(ctx: SQLContext): SQLStatement;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=column.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../src/execution/column.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAO,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAE/D,qBAAa,MAAM,CAAC,MAAM,SAAS,QAAQ,EAAE,KAAK,SAAS,MAAM,EAAE,OAAO,SAAS,YAAY,CAC7F,YAAW,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;IAExC,SAAiB,MAAM,EAAE,OAAO,CAAC;IAEjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAEvB,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC;IAQhE,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAKpD,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,YAAY;CAGrC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { sql } from "../sql/index.js";
|
|
2
|
+
export class Column {
|
|
3
|
+
table;
|
|
4
|
+
name;
|
|
5
|
+
notNull;
|
|
6
|
+
primaryKey;
|
|
7
|
+
unique;
|
|
8
|
+
constructor(table, definition) {
|
|
9
|
+
this.table = table;
|
|
10
|
+
this.name = definition.name;
|
|
11
|
+
this.notNull = definition["_notNull"];
|
|
12
|
+
this.primaryKey = definition["_primaryKey"];
|
|
13
|
+
this.unique = definition["_unique"];
|
|
14
|
+
}
|
|
15
|
+
resolve(value) {
|
|
16
|
+
// In a real implementation, this would include type checking and conversion logic
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
toSQL(ctx) {
|
|
20
|
+
return sql.join([sql.identifier(this.table.name), sql.identifier(this.name)], ".").toSQL(ctx);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=column.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column.js","sourceRoot":"","sources":["../../src/execution/column.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqC,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAKzE,MAAM,OAAO,MAAM;IAKR,KAAK,CAAS;IACd,IAAI,CAAQ;IACZ,OAAO,CAAqB;IAC5B,UAAU,CAAwB;IAClC,MAAM,CAAoB;IAEnC,YAAY,KAAa,EAAE,UAA4C;QACrE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAEM,OAAO,CAAC,KAAc;QAC3B,kFAAkF;QAClF,OAAO,KAA6B,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,GAAe;QACnB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChG,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { QueryDialect } from "./dialect.js";
|
|
2
|
+
import { OperationFactory } from "./operation.js";
|
|
3
|
+
import { SchemaRegistry } from "./schema.js";
|
|
4
|
+
import { Session } from "../driver/session.js";
|
|
5
|
+
import { DefinitionNode } from "../definition/base.js";
|
|
6
|
+
import { Schema } from "./types.js";
|
|
7
|
+
export interface ExecutionContextOptions<TSchema extends Record<string, DefinitionNode> = Record<string, DefinitionNode>> {
|
|
8
|
+
session: Session;
|
|
9
|
+
dialect: QueryDialect;
|
|
10
|
+
schema: SchemaRegistry<TSchema>;
|
|
11
|
+
}
|
|
12
|
+
export declare class ExecutionContext<TSchema extends Record<string, DefinitionNode> = Record<string, DefinitionNode>> {
|
|
13
|
+
readonly dialect: QueryDialect;
|
|
14
|
+
readonly operations: OperationFactory<Schema<TSchema>>;
|
|
15
|
+
readonly schema: SchemaRegistry<TSchema>;
|
|
16
|
+
readonly session: Session;
|
|
17
|
+
constructor(options: ExecutionContextOptions<TSchema>);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/execution/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,MAAM,WAAW,uBAAuB,CACtC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAE/E,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;CACjC;AAED,qBAAa,gBAAgB,CAC3B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAE/E,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAEd,OAAO,EAAE,uBAAuB,CAAC,OAAO,CAAC;CAMtD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { OperationFactory } from "./operation.js";
|
|
2
|
+
export class ExecutionContext {
|
|
3
|
+
dialect;
|
|
4
|
+
operations;
|
|
5
|
+
schema;
|
|
6
|
+
session;
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.session = options.session;
|
|
9
|
+
this.dialect = options.dialect;
|
|
10
|
+
this.schema = options.schema;
|
|
11
|
+
this.operations = new OperationFactory(this);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/execution/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAclD,MAAM,OAAO,gBAAgB;IAGlB,OAAO,CAAe;IACtB,UAAU,CAAoC;IAC9C,MAAM,CAA0B;IAChC,OAAO,CAAU;IAE1B,YAAY,OAAyC;QACnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CAAkB,IAAI,CAAC,CAAC;IAChE,CAAC;CACF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { SQLIdentifier, SQLNode, SQLQuery } from "../sql/nodes.js";
|
|
2
|
+
export interface JoinParams {
|
|
3
|
+
alias: string;
|
|
4
|
+
type: "one" | "many";
|
|
5
|
+
from: SQLNode;
|
|
6
|
+
to: SQLNode;
|
|
7
|
+
params: SelectParams;
|
|
8
|
+
}
|
|
9
|
+
export interface SelectParams {
|
|
10
|
+
table: SQLIdentifier;
|
|
11
|
+
select: SQLNode[];
|
|
12
|
+
where?: SQLNode;
|
|
13
|
+
order?: SQLNode[];
|
|
14
|
+
limit?: number;
|
|
15
|
+
offset?: number;
|
|
16
|
+
distinct?: boolean;
|
|
17
|
+
join?: JoinParams[];
|
|
18
|
+
}
|
|
19
|
+
export interface InsertParams {
|
|
20
|
+
table: SQLIdentifier;
|
|
21
|
+
columns: SQLNode[];
|
|
22
|
+
values: SQLNode[][];
|
|
23
|
+
return?: SQLNode[];
|
|
24
|
+
}
|
|
25
|
+
export interface UpdateParams {
|
|
26
|
+
table: SQLIdentifier;
|
|
27
|
+
set: [column: SQLNode, value: SQLNode][];
|
|
28
|
+
where?: SQLNode;
|
|
29
|
+
return?: SQLNode[];
|
|
30
|
+
}
|
|
31
|
+
export interface DeleteParams {
|
|
32
|
+
table: SQLIdentifier;
|
|
33
|
+
where?: SQLNode;
|
|
34
|
+
return?: SQLNode[];
|
|
35
|
+
}
|
|
36
|
+
export declare class QueryDialect {
|
|
37
|
+
private _getSelection;
|
|
38
|
+
/**
|
|
39
|
+
* @example
|
|
40
|
+
* Given a `tasks` table with a relation to an `assignee` in the `users` table, the following join definition:
|
|
41
|
+
* ```ts
|
|
42
|
+
* const join: JoinParams = {
|
|
43
|
+
* alias: "assignee",
|
|
44
|
+
* type: "one",
|
|
45
|
+
* from: sql`${tasks.assigneeId}`,
|
|
46
|
+
* to: sql`${users.id}`,
|
|
47
|
+
* params: {
|
|
48
|
+
* table: users,
|
|
49
|
+
* select: [users.id, users.name, users.email],
|
|
50
|
+
* where: sql`${users.id} = ${tasks.assigneeId}`,
|
|
51
|
+
* },
|
|
52
|
+
* }
|
|
53
|
+
* ```
|
|
54
|
+
* would produce the following SQL:
|
|
55
|
+
*
|
|
56
|
+
* ```sql
|
|
57
|
+
* SELECT "id", "title", "description", "__rel_assignee"."data" AS "assignee" FROM "tasks"
|
|
58
|
+
* LEFT JOIN LATERAL (
|
|
59
|
+
* SELECT row_to_json("__t".*) AS "data"
|
|
60
|
+
* FROM (
|
|
61
|
+
* SELECT "id", "name", "email"
|
|
62
|
+
* FROM "users"
|
|
63
|
+
* WHERE "users"."id" = "tasks"."assignee_id"
|
|
64
|
+
* ) AS "__t"
|
|
65
|
+
* ) AS "__rel_assignee"
|
|
66
|
+
* ON true
|
|
67
|
+
* ```
|
|
68
|
+
**/
|
|
69
|
+
private _buildLateralJoin;
|
|
70
|
+
buildSelectQuery(params: SelectParams): SQLQuery;
|
|
71
|
+
buildInsertQuery(params: InsertParams): SQLQuery;
|
|
72
|
+
buildUpdateQuery(params: UpdateParams): SQLQuery<unknown>;
|
|
73
|
+
buildDeleteQuery(params: DeleteParams): SQLQuery<unknown>;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../src/execution/dialect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGnE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa;IAiBrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8BI;IACJ,OAAO,CAAC,iBAAiB;IAmBzB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ;IAsChD,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ;IAehD,gBAAgB,CAAC,MAAM,EAAE,YAAY;IAmBrC,gBAAgB,CAAC,MAAM,EAAE,YAAY;CAetC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { sql } from "../sql/tag.js";
|
|
2
|
+
export class QueryDialect {
|
|
3
|
+
_getSelection(columns, joinFields) {
|
|
4
|
+
const selection = [...columns];
|
|
5
|
+
if (columns.length === 0 && joinFields.length === 0) {
|
|
6
|
+
return sql `*`;
|
|
7
|
+
}
|
|
8
|
+
for (const field of joinFields) {
|
|
9
|
+
const alias = sql.identifier(`__join_${field}`);
|
|
10
|
+
const node = sql `${alias}.${sql.identifier("data")} AS ${sql.identifier(field)}`;
|
|
11
|
+
selection.push(node);
|
|
12
|
+
}
|
|
13
|
+
return sql.join(selection, ", ");
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @example
|
|
17
|
+
* Given a `tasks` table with a relation to an `assignee` in the `users` table, the following join definition:
|
|
18
|
+
* ```ts
|
|
19
|
+
* const join: JoinParams = {
|
|
20
|
+
* alias: "assignee",
|
|
21
|
+
* type: "one",
|
|
22
|
+
* from: sql`${tasks.assigneeId}`,
|
|
23
|
+
* to: sql`${users.id}`,
|
|
24
|
+
* params: {
|
|
25
|
+
* table: users,
|
|
26
|
+
* select: [users.id, users.name, users.email],
|
|
27
|
+
* where: sql`${users.id} = ${tasks.assigneeId}`,
|
|
28
|
+
* },
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
* would produce the following SQL:
|
|
32
|
+
*
|
|
33
|
+
* ```sql
|
|
34
|
+
* SELECT "id", "title", "description", "__rel_assignee"."data" AS "assignee" FROM "tasks"
|
|
35
|
+
* LEFT JOIN LATERAL (
|
|
36
|
+
* SELECT row_to_json("__t".*) AS "data"
|
|
37
|
+
* FROM (
|
|
38
|
+
* SELECT "id", "name", "email"
|
|
39
|
+
* FROM "users"
|
|
40
|
+
* WHERE "users"."id" = "tasks"."assignee_id"
|
|
41
|
+
* ) AS "__t"
|
|
42
|
+
* ) AS "__rel_assignee"
|
|
43
|
+
* ON true
|
|
44
|
+
* ```
|
|
45
|
+
**/
|
|
46
|
+
_buildLateralJoin(join) {
|
|
47
|
+
const alias = sql.identifier(`__join_${join.alias}`);
|
|
48
|
+
const innerAlias = sql.identifier(`__t`);
|
|
49
|
+
const innerQuery = this.buildSelectQuery(join.params);
|
|
50
|
+
const subquery = sql `SELECT`;
|
|
51
|
+
if (join.type === "many") {
|
|
52
|
+
subquery.append(sql ` COALESCE(json_agg(row_to_json(${innerAlias}.*)), '[]'::json)`);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
subquery.append(sql ` row_to_json(${innerAlias}.*)`);
|
|
56
|
+
}
|
|
57
|
+
subquery.append(sql ` AS ${sql.identifier("data")} FROM (${innerQuery}) AS ${innerAlias}`);
|
|
58
|
+
return sql `LEFT JOIN LATERAL (${subquery}) AS ${alias} ON true`;
|
|
59
|
+
}
|
|
60
|
+
buildSelectQuery(params) {
|
|
61
|
+
const { table, select, distinct, where, order, limit, offset, join } = params;
|
|
62
|
+
const query = sql `SELECT`;
|
|
63
|
+
if (distinct) {
|
|
64
|
+
query.append(sql ` DISTINCT`);
|
|
65
|
+
}
|
|
66
|
+
const selection = this._getSelection(select, join?.map(({ alias }) => alias) ?? []);
|
|
67
|
+
query.append(sql ` ${selection} FROM ${table}`);
|
|
68
|
+
if (join) {
|
|
69
|
+
for (const joinEntry of join) {
|
|
70
|
+
const joinNode = this._buildLateralJoin(joinEntry);
|
|
71
|
+
query.append(sql ` ${joinNode}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (where) {
|
|
75
|
+
query.append(sql ` WHERE ${where}`);
|
|
76
|
+
}
|
|
77
|
+
if (order && order.length > 0) {
|
|
78
|
+
query.append(sql ` ORDER BY ${sql.join(order, ", ")}`);
|
|
79
|
+
}
|
|
80
|
+
if (limit !== undefined) {
|
|
81
|
+
query.append(sql ` LIMIT ${sql.param(limit)}`);
|
|
82
|
+
}
|
|
83
|
+
if (offset !== undefined) {
|
|
84
|
+
query.append(sql ` OFFSET ${sql.param(offset)}`);
|
|
85
|
+
}
|
|
86
|
+
return query;
|
|
87
|
+
}
|
|
88
|
+
buildInsertQuery(params) {
|
|
89
|
+
const { table, columns, values, return: returning } = params;
|
|
90
|
+
const query = sql `INSERT INTO ${table} (${sql.join(columns, ", ")})`;
|
|
91
|
+
const rows = values.map((row) => sql.wrap(sql.join(row, ", ")));
|
|
92
|
+
query.append(sql ` VALUES ${sql.join(rows, ", ")}`);
|
|
93
|
+
if (returning) {
|
|
94
|
+
query.append(sql ` RETURNING ${sql.join(returning, ", ")}`);
|
|
95
|
+
}
|
|
96
|
+
return query;
|
|
97
|
+
}
|
|
98
|
+
buildUpdateQuery(params) {
|
|
99
|
+
const { table, set, where, return: returning } = params;
|
|
100
|
+
const query = sql `UPDATE ${table}`;
|
|
101
|
+
const sets = set.map(([col, val]) => sql `${col} = ${val}`);
|
|
102
|
+
query.append(sql ` SET ${sql.join(sets, ", ")}`);
|
|
103
|
+
if (where) {
|
|
104
|
+
query.append(sql ` WHERE ${where}`);
|
|
105
|
+
}
|
|
106
|
+
if (returning) {
|
|
107
|
+
query.append(sql ` RETURNING ${sql.join(returning, ", ")}`);
|
|
108
|
+
}
|
|
109
|
+
return query;
|
|
110
|
+
}
|
|
111
|
+
buildDeleteQuery(params) {
|
|
112
|
+
const { table, where, return: returning } = params;
|
|
113
|
+
const query = sql `DELETE FROM ${table}`;
|
|
114
|
+
if (where) {
|
|
115
|
+
query.append(sql ` WHERE ${where}`);
|
|
116
|
+
}
|
|
117
|
+
if (returning) {
|
|
118
|
+
query.append(sql ` RETURNING ${sql.join(returning, ", ")}`);
|
|
119
|
+
}
|
|
120
|
+
return query;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=dialect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../src/execution/dialect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { Column, type AnyColumn } from "./column.js";
|
|
2
|
+
export { ExecutionContext, type ExecutionContextOptions } from "./context.js";
|
|
3
|
+
export { QueryDialect, type InsertParams, type SelectParams, type DeleteParams, type UpdateParams, type JoinParams, } from "./dialect.js";
|
|
4
|
+
export { OperationFactory, type DeleteArgs, type DeleteOperation, type FieldSelection, type InsertArgs, type InsertOperation, type Operation, type SelectArgs, type SelectOperation, type UpdateArgs, type UpdateOperation, type FilterCondition, type InsertRecordOf, type UpdateRecordOf, type OperationType, type OrderDirection, type ColumnSelectionOf, type ColumnValueOf, type OperationResult, type SelectResult, type JoinExpressionOf, type OperationMode, type OrderByExpressionOf, type RelationTargetTable, type SelectionOf, type WhereExpressionOf, } from "./operation.js";
|
|
5
|
+
export { SchemaRegistry, type TableNameOf, type FieldRelationOf, type RelationDefinitionsOf, type TableRelationsFields, } from "./schema.js";
|
|
6
|
+
export { Table, type AnyTable, type ColumnNamesOf, type ColumsOf, type RecordOf, type SchemaNameOf, type WithRelations, } from "./table.js";
|
|
7
|
+
export type { Schema, TableByName, AnySchema, CreateParams, CreateRecordOf, RelationNameOf, SchemaRelations, SchemaRelationsOf, SchemaTables, SelectColumnsOf, TableRelations, } from "./types.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EACL,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,EACL,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,MAAM,EACN,WAAW,EACX,SAAS,EACT,YAAY,EACZ,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { Column } from "./column.js";
|
|
2
|
+
export { ExecutionContext } from "./context.js";
|
|
3
|
+
export { QueryDialect, } from "./dialect.js";
|
|
4
|
+
export { OperationFactory, } from "./operation.js";
|
|
5
|
+
export { SchemaRegistry, } from "./schema.js";
|
|
6
|
+
export { Table, } from "./table.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkB,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAgC,MAAM,cAAc,CAAC;AAC9E,OAAO,EACL,YAAY,GAMb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,gBAAgB,GA0BjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,GAKf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,GAON,MAAM,YAAY,CAAC"}
|