@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,106 @@
|
|
|
1
|
+
import { RelationsDefinition, TableDefinition, } from "../definition/index.js";
|
|
2
|
+
import { Table } from "./table.js";
|
|
3
|
+
export class SchemaRegistry {
|
|
4
|
+
_tables;
|
|
5
|
+
_relations;
|
|
6
|
+
constructor(definition) {
|
|
7
|
+
const schema = this._validateAndTransformSchema(definition);
|
|
8
|
+
this._tables = this._buildTables(schema);
|
|
9
|
+
this._relations = this._buildRelations(schema);
|
|
10
|
+
}
|
|
11
|
+
_mergeTableRelations(existing, newRelations) {
|
|
12
|
+
for (const [name, relation] of Object.entries(newRelations)) {
|
|
13
|
+
if (existing[name]) {
|
|
14
|
+
throw new Error(`Duplicate relation name: ${name}`);
|
|
15
|
+
}
|
|
16
|
+
existing[name] = relation;
|
|
17
|
+
}
|
|
18
|
+
return existing;
|
|
19
|
+
}
|
|
20
|
+
_validateAndTransformSchema(schema) {
|
|
21
|
+
const relations = {};
|
|
22
|
+
const tables = {};
|
|
23
|
+
for (const [name, node] of Object.entries(schema)) {
|
|
24
|
+
if (node instanceof RelationsDefinition) {
|
|
25
|
+
const tableName = node.table.name;
|
|
26
|
+
if (relations[tableName]) {
|
|
27
|
+
relations[tableName] = this._mergeTableRelations(relations[tableName], node.relations);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
relations[tableName] = node.relations;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (node instanceof TableDefinition) {
|
|
34
|
+
tables[name] =
|
|
35
|
+
node;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return { tables, relations };
|
|
40
|
+
}
|
|
41
|
+
_buildTables(schema) {
|
|
42
|
+
const tables = new Map();
|
|
43
|
+
for (const [key, def] of Object.entries(schema.tables)) {
|
|
44
|
+
if (def instanceof TableDefinition) {
|
|
45
|
+
const relations = schema.relations[def.name];
|
|
46
|
+
const table = new Table(def, relations);
|
|
47
|
+
tables.set(def.name, table);
|
|
48
|
+
tables.set(key, table);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return tables;
|
|
52
|
+
}
|
|
53
|
+
_buildRelations(schema) {
|
|
54
|
+
const map = new Map();
|
|
55
|
+
for (const [tableName, relations] of Object.entries(schema.relations)) {
|
|
56
|
+
const table = this._tables.get(tableName);
|
|
57
|
+
if (!table) {
|
|
58
|
+
throw new Error(`Table not found for relations: ${tableName}`);
|
|
59
|
+
}
|
|
60
|
+
map.set(tableName, relations);
|
|
61
|
+
}
|
|
62
|
+
return map;
|
|
63
|
+
}
|
|
64
|
+
getTable(aliasOrName) {
|
|
65
|
+
const table = this._tables.get(aliasOrName);
|
|
66
|
+
if (!table) {
|
|
67
|
+
throw new Error(`Table not found: ${aliasOrName}`);
|
|
68
|
+
}
|
|
69
|
+
return table;
|
|
70
|
+
}
|
|
71
|
+
hasTable(aliasOrName) {
|
|
72
|
+
return this._tables.has(aliasOrName);
|
|
73
|
+
}
|
|
74
|
+
getTables() {
|
|
75
|
+
return Object.fromEntries(this._tables.entries());
|
|
76
|
+
}
|
|
77
|
+
hasRelations(tableNameOrAlias) {
|
|
78
|
+
if (!this.hasTable(tableNameOrAlias)) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
const table = this.getTable(tableNameOrAlias);
|
|
82
|
+
return this._relations.has(table.name);
|
|
83
|
+
}
|
|
84
|
+
getRelations(tableNameOrAlias) {
|
|
85
|
+
const table = this.getTable(tableNameOrAlias);
|
|
86
|
+
const relations = this._relations.get(table.name);
|
|
87
|
+
if (!relations) {
|
|
88
|
+
throw new Error(`Relations not found for table: ${tableNameOrAlias}`);
|
|
89
|
+
}
|
|
90
|
+
return relations;
|
|
91
|
+
}
|
|
92
|
+
getRelationTarget(tableNameOrAlias, field) {
|
|
93
|
+
const sourceTable = this.getTable(tableNameOrAlias);
|
|
94
|
+
const relations = this._relations.get(sourceTable.name);
|
|
95
|
+
if (!relations?.[field]) {
|
|
96
|
+
throw new Error(`Relation not found for field: ${field} on table: ${sourceTable.name}`);
|
|
97
|
+
}
|
|
98
|
+
const targetTableName = relations[field].target.name;
|
|
99
|
+
const targetTable = this.getTable(targetTableName);
|
|
100
|
+
if (!targetTable) {
|
|
101
|
+
throw new Error(`Target table not found for relation: ${field} on table: ${sourceTable.name}`);
|
|
102
|
+
}
|
|
103
|
+
return targetTable;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/runtime/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -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/runtime/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/runtime/session.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { TypedObject } from "../utils/index.js";
|
|
2
|
+
import { AnyColumnDefinition, AnyTableRelations, ColumnConfig, ColumnDefinition, AnyNamespaceDefinition, TableConfig, TableDefinition, NamespaceDefinition } from "../definition/index.js";
|
|
3
|
+
import { SQLContext, SQLNode, SQLStatement } from "../sql/index.js";
|
|
4
|
+
import { Column } from "./column.js";
|
|
5
|
+
export type AnyTable = Table<any, any, any, any>;
|
|
6
|
+
export type WithRelations<TColumns extends Record<string, AnyColumnDefinition>, TNamespace extends AnyNamespaceDefinition, TRelations extends AnyTableRelations | undefined> = TableConfig<TColumns, TNamespace> & {
|
|
7
|
+
relations: TRelations extends AnyTableRelations ? TRelations : never;
|
|
8
|
+
};
|
|
9
|
+
export type TableSchemaName<T extends AnyTable> = T["__type"] extends {
|
|
10
|
+
schema: infer S;
|
|
11
|
+
} ? S extends NamespaceDefinition<infer SN> ? SN : never : undefined;
|
|
12
|
+
export type TableColumnName<T extends AnyTable> = T["__type"] extends {
|
|
13
|
+
columns: infer C;
|
|
14
|
+
} ? C extends Record<string, AnyColumnDefinition> ? keyof C : never : never;
|
|
15
|
+
export type TableColumns<T extends AnyTable> = {
|
|
16
|
+
readonly [K in TableColumnName<T>]: T["__type"] extends {
|
|
17
|
+
columns: infer C;
|
|
18
|
+
} ? C extends Record<K, infer CD> ? CD extends ColumnDefinition<infer CName, infer CConfig> ? Column<CName, CConfig, T> : never : never : never;
|
|
19
|
+
};
|
|
20
|
+
export declare class Table<TName extends string, TColumns extends Record<string, AnyColumnDefinition>, TNamespace extends AnyNamespaceDefinition, TRelations extends AnyTableRelations> implements SQLNode, TypedObject<TableConfig<TColumns, TNamespace>> {
|
|
21
|
+
readonly __type: WithRelations<TColumns, TNamespace, TRelations>;
|
|
22
|
+
readonly name: TName;
|
|
23
|
+
readonly schema: TableSchemaName<this>;
|
|
24
|
+
readonly columns: TableColumns<this>;
|
|
25
|
+
readonly relations: TRelations;
|
|
26
|
+
constructor(definition: TableDefinition<TName, TColumns, TNamespace>, relations?: TRelations);
|
|
27
|
+
private _buildColumns;
|
|
28
|
+
hasColumn(name: string): boolean;
|
|
29
|
+
getColumn(name: string): Column<string, ColumnConfig<unknown, unknown>, this> | undefined;
|
|
30
|
+
hasRelation(fieldName: string): boolean;
|
|
31
|
+
getRelation(fieldName: string): import("../definition/relations.js").AnyFieldRelation | undefined;
|
|
32
|
+
toSQL(ctx: SQLContext): SQLStatement;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/runtime/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAO,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEjD,MAAM,MAAM,aAAa,CACvB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACpD,UAAU,SAAS,sBAAsB,EACzC,UAAU,SAAS,iBAAiB,GAAG,SAAS,IAC9C,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG;IACtC,SAAS,EAAE,UAAU,SAAS,iBAAiB,GAAG,UAAU,GAAG,KAAK,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACrF,CAAC,SAAS,mBAAmB,CAAC,MAAM,EAAE,CAAC,GACrC,EAAE,GACF,KAAK,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC,CAAA;CAAE,GACtF,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAC3C,MAAM,CAAC,GACP,KAAK,GACP,KAAK,CAAC;AAEV,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,QAAQ,IAAI;IAC7C,QAAQ,EAAE,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC,CAAA;KAAE,GACxE,CAAC,SAAS,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAC3B,EAAE,SAAS,gBAAgB,CAAC,MAAM,KAAK,EAAE,MAAM,OAAO,CAAC,GACrD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,GACzB,KAAK,GACP,KAAK,GACP,KAAK;CACV,CAAC;AAEF,qBAAa,KAAK,CAChB,KAAK,SAAS,MAAM,EACpB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACpD,UAAU,SAAS,sBAAsB,EACzC,UAAU,SAAS,iBAAiB,CAEpC,YAAW,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAElE,SAAiB,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAEzE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;gBAEnB,UAAU,EAAE,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,EAAE,UAAU;IAO5F,OAAO,CAAC,aAAa;IAYd,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhC,SAAS,CAAC,IAAI,EAAE,MAAM;IAUtB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIvC,WAAW,CAAC,SAAS,EAAE,MAAM;IAQ7B,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,YAAY;CAO5C"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { sql } from "../sql/index.js";
|
|
2
|
+
import { Column } from "./column.js";
|
|
3
|
+
export class Table {
|
|
4
|
+
name;
|
|
5
|
+
schema;
|
|
6
|
+
columns;
|
|
7
|
+
relations;
|
|
8
|
+
constructor(definition, relations) {
|
|
9
|
+
this.schema = definition["_namespace"]?.name;
|
|
10
|
+
this.name = definition.name;
|
|
11
|
+
this.columns = this._buildColumns(definition);
|
|
12
|
+
this.relations = relations;
|
|
13
|
+
}
|
|
14
|
+
_buildColumns(definition) {
|
|
15
|
+
const columns = {};
|
|
16
|
+
for (const [name, def] of Object.entries(definition.columns)) {
|
|
17
|
+
columns[name] = new Column(this, def);
|
|
18
|
+
}
|
|
19
|
+
return columns;
|
|
20
|
+
}
|
|
21
|
+
hasColumn(name) {
|
|
22
|
+
return Object.hasOwn(this.columns, name);
|
|
23
|
+
}
|
|
24
|
+
getColumn(name) {
|
|
25
|
+
if (this.columns[name]) {
|
|
26
|
+
return this.columns[name];
|
|
27
|
+
}
|
|
28
|
+
return Object.values(this.columns).find((col) => col.name === name);
|
|
29
|
+
}
|
|
30
|
+
hasRelation(fieldName) {
|
|
31
|
+
return this.relations ? Object.hasOwn(this.relations, fieldName) : false;
|
|
32
|
+
}
|
|
33
|
+
getRelation(fieldName) {
|
|
34
|
+
if (!this.relations || !this.relations[fieldName]) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
return this.relations[fieldName];
|
|
38
|
+
}
|
|
39
|
+
toSQL(ctx) {
|
|
40
|
+
if (this.schema) {
|
|
41
|
+
return sql.join([sql.identifier(this.schema), sql.identifier(this.name)], ".").toSQL(ctx);
|
|
42
|
+
}
|
|
43
|
+
return sql.identifier(this.name).toSQL(ctx);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/runtime/table.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,GAAG,EAAqC,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAmCrC,MAAM,OAAO,KAAK;IAUP,IAAI,CAAQ;IACZ,MAAM,CAAwB;IAC9B,OAAO,CAAqB;IAC5B,SAAS,CAAa;IAE/B,YAAY,UAAwD,EAAE,SAAsB;QAC1F,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,EAAE,IAA6B,CAAC;QACtE,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,SAAuB,CAAC;IAC3C,CAAC;IAEO,aAAa,CACnB,UAAwD;QAExD,MAAM,OAAO,GAAG,EAAwD,CAAC;QAEzE,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,OAA6B,CAAC;IACvC,CAAC;IAEM,SAAS,CAAC,IAAY;QAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEM,SAAS,CAAC,IAAY;QAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,IAA6B,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,OAAO,CAAC,IAA6B,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAqC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACzE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAC3B,CAAC;IACJ,CAAC;IAEM,WAAW,CAAC,SAAiB;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3E,CAAC;IAEM,WAAW,CAAC,SAAiB;QAClC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,GAAe;QAC1B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { SQLNode, SQLValue } from "./nodes.js";
|
|
2
|
+
export declare const asNode: (value: SQLValue) => SQLNode;
|
|
3
|
+
export declare const equals: (left: SQLNode, right: SQLValue) => SQLNode;
|
|
4
|
+
export declare const notEquals: (left: SQLNode, right: SQLValue) => SQLNode;
|
|
5
|
+
export declare const greaterThan: (left: SQLNode, right: SQLValue) => SQLNode;
|
|
6
|
+
export declare const lessThan: (left: SQLNode, right: SQLValue) => SQLNode;
|
|
7
|
+
export declare const greaterThanOrEquals: (left: SQLNode, right: SQLValue) => SQLNode;
|
|
8
|
+
export declare const lessThanOrEquals: (left: SQLNode, right: SQLValue) => SQLNode;
|
|
9
|
+
export declare const and: (conditions: SQLNode[]) => SQLNode;
|
|
10
|
+
export declare const or: (conditions: SQLNode[]) => SQLNode;
|
|
11
|
+
export declare const not: (condition: SQLNode) => SQLNode;
|
|
12
|
+
export declare const isNull: (node: SQLNode) => SQLNode;
|
|
13
|
+
export declare const isNotNull: (node: SQLNode) => SQLNode;
|
|
14
|
+
export declare const like: (node: SQLNode, pattern: SQLValue) => SQLNode;
|
|
15
|
+
export declare const notLike: (node: SQLNode, pattern: SQLValue) => SQLNode;
|
|
16
|
+
export declare const iLike: (node: SQLNode, pattern: SQLValue) => SQLNode;
|
|
17
|
+
export declare const notILike: (node: SQLNode, pattern: SQLValue) => SQLNode;
|
|
18
|
+
export declare const between: (node: SQLNode, lower: SQLValue, upper: SQLValue) => SQLNode;
|
|
19
|
+
export declare const inList: (node: SQLNode, values: SQLValue[]) => SQLNode;
|
|
20
|
+
export declare const notInList: (node: SQLNode, values: SQLValue[]) => SQLNode;
|
|
21
|
+
export declare const inQuery: (node: SQLNode, subquery: SQLNode) => SQLNode;
|
|
22
|
+
export declare const notInQuery: (node: SQLNode, subquery: SQLNode) => SQLNode;
|
|
23
|
+
export declare const exists: (subquery: SQLNode) => SQLNode;
|
|
24
|
+
export declare const notExists: (subquery: SQLNode) => SQLNode;
|
|
25
|
+
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/sql/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,OAAO,EAAY,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGpE,eAAO,MAAM,MAAM,GAAI,OAAO,QAAQ,KAAG,OAMxC,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,MAAM,OAAO,EAAE,OAAO,QAAQ,KAAG,OAEvD,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,MAAM,OAAO,EAAE,OAAO,QAAQ,KAAG,OAE1D,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,MAAM,OAAO,EAAE,OAAO,QAAQ,KAAG,OAE5D,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,MAAM,OAAO,EAAE,OAAO,QAAQ,KAAG,OAEzD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,MAAM,OAAO,EAAE,OAAO,QAAQ,KAAG,OAEpE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,OAAO,EAAE,OAAO,QAAQ,KAAG,OAEjE,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,YAAY,OAAO,EAAE,KAAG,OAE3C,CAAC;AAEF,eAAO,MAAM,EAAE,GAAI,YAAY,OAAO,EAAE,KAAG,OAE1C,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,WAAW,OAAO,KAAG,OAExC,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,MAAM,OAAO,KAAG,OAEtC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,MAAM,OAAO,KAAG,OAEzC,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,MAAM,OAAO,EAAE,SAAS,QAAQ,KAAG,OAEvD,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,MAAM,OAAO,EAAE,SAAS,QAAQ,KAAG,OAE1D,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,MAAM,OAAO,EAAE,SAAS,QAAQ,KAAG,OAExD,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,MAAM,OAAO,EAAE,SAAS,QAAQ,KAAG,OAE3D,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,MAAM,OAAO,EAAE,OAAO,QAAQ,EAAE,OAAO,QAAQ,KAAG,OAEzE,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,MAAM,OAAO,EAAE,QAAQ,QAAQ,EAAE,KAAG,OAG1D,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,MAAM,OAAO,EAAE,QAAQ,QAAQ,EAAE,KAAG,OAG7D,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,MAAM,OAAO,EAAE,UAAU,OAAO,KAAG,OAE1D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,OAAO,EAAE,UAAU,OAAO,KAAG,OAE7D,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,UAAU,OAAO,KAAG,OAE1C,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,UAAU,OAAO,KAAG,OAE7C,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { isSQLNode, SQLParam } from "./nodes.js";
|
|
2
|
+
import { sql } from "./tag.js";
|
|
3
|
+
export const asNode = (value) => {
|
|
4
|
+
if (isSQLNode(value)) {
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
return new SQLParam(value);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
export const equals = (left, right) => {
|
|
12
|
+
return sql.join([left, sql.raw("="), asNode(right)]);
|
|
13
|
+
};
|
|
14
|
+
export const notEquals = (left, right) => {
|
|
15
|
+
return sql.join([left, sql.raw("<>"), asNode(right)]);
|
|
16
|
+
};
|
|
17
|
+
export const greaterThan = (left, right) => {
|
|
18
|
+
return sql.join([left, sql.raw(">"), asNode(right)]);
|
|
19
|
+
};
|
|
20
|
+
export const lessThan = (left, right) => {
|
|
21
|
+
return sql.join([left, sql.raw("<"), asNode(right)]);
|
|
22
|
+
};
|
|
23
|
+
export const greaterThanOrEquals = (left, right) => {
|
|
24
|
+
return sql.join([left, sql.raw(">="), asNode(right)]);
|
|
25
|
+
};
|
|
26
|
+
export const lessThanOrEquals = (left, right) => {
|
|
27
|
+
return sql.join([left, sql.raw("<="), asNode(right)]);
|
|
28
|
+
};
|
|
29
|
+
export const and = (conditions) => {
|
|
30
|
+
return sql.join(conditions, sql.raw(" AND "));
|
|
31
|
+
};
|
|
32
|
+
export const or = (conditions) => {
|
|
33
|
+
return sql.join(conditions, sql.raw(" OR "));
|
|
34
|
+
};
|
|
35
|
+
export const not = (condition) => {
|
|
36
|
+
return sql.join([sql.raw("NOT"), sql.wrap(condition)]);
|
|
37
|
+
};
|
|
38
|
+
export const isNull = (node) => {
|
|
39
|
+
return sql.join([node, sql.raw("IS NULL")]);
|
|
40
|
+
};
|
|
41
|
+
export const isNotNull = (node) => {
|
|
42
|
+
return sql.join([node, sql.raw("IS NOT NULL")]);
|
|
43
|
+
};
|
|
44
|
+
export const like = (node, pattern) => {
|
|
45
|
+
return sql.join([node, sql.raw("LIKE"), asNode(pattern)]);
|
|
46
|
+
};
|
|
47
|
+
export const notLike = (node, pattern) => {
|
|
48
|
+
return sql.join([node, sql.raw("NOT LIKE"), asNode(pattern)]);
|
|
49
|
+
};
|
|
50
|
+
export const iLike = (node, pattern) => {
|
|
51
|
+
return sql.join([node, sql.raw("ILIKE"), asNode(pattern)]);
|
|
52
|
+
};
|
|
53
|
+
export const notILike = (node, pattern) => {
|
|
54
|
+
return sql.join([node, sql.raw("NOT ILIKE"), asNode(pattern)]);
|
|
55
|
+
};
|
|
56
|
+
export const between = (node, lower, upper) => {
|
|
57
|
+
return sql.join([node, sql.raw("BETWEEN"), asNode(lower), sql.raw("AND"), asNode(upper)]);
|
|
58
|
+
};
|
|
59
|
+
export const inList = (node, values) => {
|
|
60
|
+
const valueNodes = values.map(asNode);
|
|
61
|
+
return sql.join([node, sql.raw("IN"), sql.join(valueNodes, sql.raw(", "))]);
|
|
62
|
+
};
|
|
63
|
+
export const notInList = (node, values) => {
|
|
64
|
+
const valueNodes = values.map(asNode);
|
|
65
|
+
return sql.join([node, sql.raw("NOT IN"), sql.join(valueNodes, sql.raw(", "))]);
|
|
66
|
+
};
|
|
67
|
+
export const inQuery = (node, subquery) => {
|
|
68
|
+
return sql.join([node, sql.raw("IN"), sql.wrap(subquery)]);
|
|
69
|
+
};
|
|
70
|
+
export const notInQuery = (node, subquery) => {
|
|
71
|
+
return sql.join([node, sql.raw("NOT IN"), sql.wrap(subquery)]);
|
|
72
|
+
};
|
|
73
|
+
export const exists = (subquery) => {
|
|
74
|
+
return sql.join([sql.raw("EXISTS"), sql.wrap(subquery)]);
|
|
75
|
+
};
|
|
76
|
+
export const notExists = (subquery) => {
|
|
77
|
+
return sql.join([sql.raw("NOT EXISTS"), sql.wrap(subquery)]);
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=expressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../src/sql/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAW,QAAQ,EAAY,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAe,EAAW,EAAE;IACjD,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAa,EAAE,KAAe,EAAW,EAAE;IAChE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAa,EAAE,KAAe,EAAW,EAAE;IACnE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAa,EAAE,KAAe,EAAW,EAAE;IACrE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAE,KAAe,EAAW,EAAE;IAClE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAa,EAAE,KAAe,EAAW,EAAE;IAC7E,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAE,KAAe,EAAW,EAAE;IAC1E,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,UAAqB,EAAW,EAAE;IACpD,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,UAAqB,EAAW,EAAE;IACnD,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,SAAkB,EAAW,EAAE;IACjD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAa,EAAW,EAAE;IAC/C,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAa,EAAW,EAAE;IAClD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,IAAa,EAAE,OAAiB,EAAW,EAAE;IAChE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,OAAiB,EAAW,EAAE;IACnE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,OAAiB,EAAW,EAAE;IACjE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAE,OAAiB,EAAW,EAAE;IACpE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,KAAe,EAAE,KAAe,EAAW,EAAE;IAClF,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAa,EAAE,MAAkB,EAAW,EAAE;IACnE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAa,EAAE,MAAkB,EAAW,EAAE;IACtE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,QAAiB,EAAW,EAAE;IACnE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,QAAiB,EAAW,EAAE;IACtE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,QAAiB,EAAW,EAAE;IACnD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAiB,EAAW,EAAE;IACtD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { type SQLNode, type SQLStatement, type SQLContext, SQLRaw, SQLParam, SQLIdentifier, SQLQuery, SQLWrapper, isSQLNode, type SQLValue, type ValueSerializer, } from "./nodes.js";
|
|
2
|
+
export { sql } from "./tag.js";
|
|
3
|
+
export { counter, escapeValue, escapeIdentifier, type ParamIndexCounter } from "./utils.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,MAAM,EACN,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,UAAU,EACV,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,MAAM,EACN,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,UAAU,EACV,SAAS,GAGV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAA0B,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type ParamIndexCounter } from "./utils.js";
|
|
2
|
+
export interface SQLStatement {
|
|
3
|
+
text: string;
|
|
4
|
+
params: unknown[];
|
|
5
|
+
}
|
|
6
|
+
export interface SQLContext {
|
|
7
|
+
inlineParams: boolean;
|
|
8
|
+
paramCounter: ParamIndexCounter;
|
|
9
|
+
escapeValue(str: string): string;
|
|
10
|
+
escapeIdentifier(str: string): string;
|
|
11
|
+
}
|
|
12
|
+
export type SQLValue = string | number | boolean | bigint | null | object;
|
|
13
|
+
export type ValueSerializer<T> = (value: T) => unknown;
|
|
14
|
+
export interface SQLNode {
|
|
15
|
+
toSQL(ctx: SQLContext): SQLStatement;
|
|
16
|
+
}
|
|
17
|
+
export declare const isSQLNode: (value: unknown) => value is SQLNode;
|
|
18
|
+
export declare class SQLRaw implements SQLNode {
|
|
19
|
+
private readonly _text;
|
|
20
|
+
constructor(text: string);
|
|
21
|
+
toSQL(): SQLStatement;
|
|
22
|
+
}
|
|
23
|
+
export declare class SQLParam<TValue> implements SQLNode {
|
|
24
|
+
private readonly _value;
|
|
25
|
+
private readonly _serialize;
|
|
26
|
+
constructor(value: TValue, serializer?: ValueSerializer<TValue>);
|
|
27
|
+
private _serializeInlineParam;
|
|
28
|
+
toSQL(ctx: SQLContext): SQLStatement;
|
|
29
|
+
}
|
|
30
|
+
export declare class SQLWrapper implements SQLNode {
|
|
31
|
+
private readonly _node;
|
|
32
|
+
constructor(node: SQLNode);
|
|
33
|
+
toSQL(ctx: SQLContext): SQLStatement;
|
|
34
|
+
}
|
|
35
|
+
export declare class SQLIdentifier implements SQLNode {
|
|
36
|
+
readonly name: string;
|
|
37
|
+
constructor(name: string);
|
|
38
|
+
toSQL(ctx: SQLContext): SQLStatement;
|
|
39
|
+
}
|
|
40
|
+
export declare class SQLQuery<T = unknown> implements SQLNode {
|
|
41
|
+
__type: T;
|
|
42
|
+
private readonly _nodes;
|
|
43
|
+
constructor(nodes?: SQLNode | SQLNode[]);
|
|
44
|
+
private _mergeChunks;
|
|
45
|
+
append(...nodes: SQLNode[]): this;
|
|
46
|
+
toQuery(ctx?: Partial<SQLContext>): SQLStatement;
|
|
47
|
+
toSQL(ctx: SQLContext): SQLStatement;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=nodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/sql/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE5F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,iBAAiB,CAAC;IAChC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAE1E,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;AAEvD,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,YAAY,CAAC;CACtC;AAED,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,OAOnD,CAAC;AAEF,qBAAa,MAAO,YAAW,OAAO;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,IAAI,EAAE,MAAM;IAIxB,KAAK,IAAI,YAAY;CAGtB;AAED,qBAAa,QAAQ,CAAC,MAAM,CAAE,YAAW,OAAO;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0B;gBAEzC,KAAK,EAAE,MAAM,EAAE,UAAU,GAAE,eAAe,CAAC,MAAM,CAAoB;IAKjF,OAAO,CAAC,qBAAqB;IAqB7B,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,YAAY;CAcrC;AAED,qBAAa,UAAW,YAAW,OAAO;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;gBAEpB,IAAI,EAAE,OAAO;IAIzB,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,YAAY;CAQrC;AAED,qBAAa,aAAc,YAAW,OAAO;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM;IAIxB,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,YAAY;CAGrC;AAED,qBAAa,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,OAAO;IAC3C,MAAM,EAAE,CAAC,CAAC;IAElB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAE5B,KAAK,GAAE,OAAO,GAAG,OAAO,EAAO;IAI3C,OAAO,CAAC,YAAY;IAOb,MAAM,CAAC,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;IAKjC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,YAAY;IAShD,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,YAAY;CAI5C"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { counter, escapeIdentifier, escapeValue } from "./utils.js";
|
|
2
|
+
export const isSQLNode = (value) => {
|
|
3
|
+
return (typeof value === "object" &&
|
|
4
|
+
value !== null &&
|
|
5
|
+
"toSQL" in value &&
|
|
6
|
+
typeof value.toSQL === "function");
|
|
7
|
+
};
|
|
8
|
+
export class SQLRaw {
|
|
9
|
+
_text;
|
|
10
|
+
constructor(text) {
|
|
11
|
+
this._text = text;
|
|
12
|
+
}
|
|
13
|
+
toSQL() {
|
|
14
|
+
return { text: this._text, params: [] };
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class SQLParam {
|
|
18
|
+
_value;
|
|
19
|
+
_serialize;
|
|
20
|
+
constructor(value, serializer = (value) => value) {
|
|
21
|
+
this._value = value;
|
|
22
|
+
this._serialize = serializer;
|
|
23
|
+
}
|
|
24
|
+
_serializeInlineParam(value, ctx) {
|
|
25
|
+
if (value === null)
|
|
26
|
+
return "null";
|
|
27
|
+
if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") {
|
|
28
|
+
return value.toString();
|
|
29
|
+
}
|
|
30
|
+
if (typeof value === "string") {
|
|
31
|
+
return ctx.escapeValue(value);
|
|
32
|
+
}
|
|
33
|
+
if (typeof value === "object") {
|
|
34
|
+
const str = value.toString();
|
|
35
|
+
return str === "[object Object]"
|
|
36
|
+
? ctx.escapeValue(JSON.stringify(value))
|
|
37
|
+
: ctx.escapeValue(str);
|
|
38
|
+
}
|
|
39
|
+
throw new Error(`Unsupported parameter type: ${typeof value}`);
|
|
40
|
+
}
|
|
41
|
+
toSQL(ctx) {
|
|
42
|
+
const encodedValue = this._value === null ? this._value : this._serialize(this._value);
|
|
43
|
+
if (isSQLNode(encodedValue)) {
|
|
44
|
+
return encodedValue.toSQL(ctx);
|
|
45
|
+
}
|
|
46
|
+
if (ctx.inlineParams) {
|
|
47
|
+
return { text: this._serializeInlineParam(encodedValue, ctx), params: [] };
|
|
48
|
+
}
|
|
49
|
+
const paramIndex = ctx.paramCounter.next();
|
|
50
|
+
return { text: `$${paramIndex}`, params: [encodedValue] };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export class SQLWrapper {
|
|
54
|
+
_node;
|
|
55
|
+
constructor(node) {
|
|
56
|
+
this._node = node;
|
|
57
|
+
}
|
|
58
|
+
toSQL(ctx) {
|
|
59
|
+
const contents = this._node.toSQL(ctx);
|
|
60
|
+
return {
|
|
61
|
+
text: `(${contents.text})`,
|
|
62
|
+
params: contents.params,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export class SQLIdentifier {
|
|
67
|
+
name;
|
|
68
|
+
constructor(name) {
|
|
69
|
+
this.name = name;
|
|
70
|
+
}
|
|
71
|
+
toSQL(ctx) {
|
|
72
|
+
return { text: ctx.escapeIdentifier(this.name), params: [] };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export class SQLQuery {
|
|
76
|
+
_nodes = [];
|
|
77
|
+
constructor(nodes = []) {
|
|
78
|
+
this._nodes = Array.isArray(nodes) ? nodes : [nodes];
|
|
79
|
+
}
|
|
80
|
+
_mergeChunks(chunks) {
|
|
81
|
+
const text = chunks.map((chunk) => chunk.text).join("");
|
|
82
|
+
const params = chunks.flatMap((chunk) => chunk.params);
|
|
83
|
+
return { text, params };
|
|
84
|
+
}
|
|
85
|
+
append(...nodes) {
|
|
86
|
+
this._nodes.push(...nodes);
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
toQuery(ctx) {
|
|
90
|
+
return this.toSQL({
|
|
91
|
+
inlineParams: ctx?.inlineParams ?? false,
|
|
92
|
+
paramCounter: ctx?.paramCounter ?? counter(),
|
|
93
|
+
escapeValue: ctx?.escapeValue ?? escapeValue,
|
|
94
|
+
escapeIdentifier: ctx?.escapeIdentifier ?? escapeIdentifier,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
toSQL(ctx) {
|
|
98
|
+
const chunks = this._nodes.map((node) => node.toSQL(ctx));
|
|
99
|
+
return this._mergeChunks(chunks);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/sql/nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type SQLNode, SQLRaw, SQLQuery, SQLParam, SQLIdentifier, SQLWrapper, SQLValue } from "./nodes.js";
|
|
2
|
+
declare function sql<T>(strings: TemplateStringsArray, ...params: any[]): SQLQuery<T>;
|
|
3
|
+
declare namespace sql {
|
|
4
|
+
export var raw: (text: string) => SQLRaw;
|
|
5
|
+
export var param: <TValue extends SQLValue>(value: TValue, serialize?: (value: TValue) => TValue) => SQLParam<TValue>;
|
|
6
|
+
export var identifier: (name: string) => SQLIdentifier;
|
|
7
|
+
export var wrap: (node: SQLNode) => SQLWrapper;
|
|
8
|
+
export var join: (nodes: SQLNode[], separator?: string | SQLNode) => SQLQuery<unknown>;
|
|
9
|
+
var _a: (name: string | SQLNode, values: SQLValue[]) => SQLQuery<unknown>;
|
|
10
|
+
export { _a as in };
|
|
11
|
+
}
|
|
12
|
+
export { sql };
|
|
13
|
+
//# sourceMappingURL=tag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/sql/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,MAAM,EACN,QAAQ,EACR,QAAQ,EAER,aAAa,EACb,UAAU,EACV,QAAQ,EACT,MAAM,YAAY,CAAC;AAGpB,iBAAS,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;kBAArE,GAAG;2BAgBK,MAAM;uBACV,MAAM,SAAS,QAAQ,SAAS,MAAM,cAAc,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM;kCAElE,MAAM;4BACZ,OAAO;6BAEN,OAAO,EAAE,cAAa,MAAM,GAAG,OAAO;mBAczC,MAAM,GAAG,OAAO,UAAU,QAAQ,EAAE;;;AAWpD,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
package/dist/sql/tag.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SQLRaw, SQLQuery, SQLParam, isSQLNode, SQLIdentifier, SQLWrapper, } from "./nodes.js";
|
|
2
|
+
function sql(strings, ...params) {
|
|
3
|
+
const node = new SQLQuery();
|
|
4
|
+
if (params.length > 0 || (strings.length > 0 && strings[0] !== "")) {
|
|
5
|
+
node.append(new SQLRaw(strings[0]));
|
|
6
|
+
}
|
|
7
|
+
for (const [paramIndex, param] of params.entries()) {
|
|
8
|
+
node.append(isSQLNode(param) ? param : new SQLParam(param));
|
|
9
|
+
node.append(new SQLRaw(strings[paramIndex + 1]));
|
|
10
|
+
}
|
|
11
|
+
return node;
|
|
12
|
+
}
|
|
13
|
+
sql.raw = (text) => new SQLRaw(text);
|
|
14
|
+
sql.param = (value, serialize) => new SQLParam(value, serialize);
|
|
15
|
+
sql.identifier = (name) => new SQLIdentifier(name);
|
|
16
|
+
sql.wrap = (node) => new SQLWrapper(node);
|
|
17
|
+
sql.join = (nodes, separator = " ") => {
|
|
18
|
+
const node = new SQLQuery();
|
|
19
|
+
for (const [index, childNode] of nodes.entries()) {
|
|
20
|
+
if (index > 0) {
|
|
21
|
+
node.append(typeof separator === "string" ? new SQLRaw(separator) : separator);
|
|
22
|
+
}
|
|
23
|
+
node.append(childNode);
|
|
24
|
+
}
|
|
25
|
+
return node;
|
|
26
|
+
};
|
|
27
|
+
sql.in = (name, values) => {
|
|
28
|
+
const identifier = typeof name === "string" ? new SQLIdentifier(name) : name;
|
|
29
|
+
return sql `${identifier} IN ${sql.wrap(sql.join(values.map((value) => sql.param(value)), ", "))}`;
|
|
30
|
+
};
|
|
31
|
+
export { sql };
|
|
32
|
+
//# sourceMappingURL=tag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/sql/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,aAAa,EACb,UAAU,GAEX,MAAM,YAAY,CAAC;AAIpB,SAAS,GAAG,CAAC,OAA6B,EAAE,GAAG,MAAiB;IAC9D,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAE5B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,GAAG,CAAC,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7C,GAAG,CAAC,KAAK,GAAG,CAA0B,KAAa,EAAE,SAAqC,EAAE,EAAE,CAC5F,IAAI,QAAQ,CAAS,KAAK,EAAE,SAAS,CAAC,CAAC;AACzC,GAAG,CAAC,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;AAC3D,GAAG,CAAC,IAAI,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAEnD,GAAG,CAAC,IAAI,GAAG,CAAC,KAAgB,EAAE,YAA8B,GAAG,EAAE,EAAE;IACjE,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAE5B,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,GAAG,CAAC,EAAE,GAAG,CAAC,IAAsB,EAAE,MAAkB,EAAE,EAAE;IACtD,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7E,OAAO,GAAG,CAAA,GAAG,UAAU,OAAO,GAAG,CAAC,IAAI,CACpC,GAAG,CAAC,IAAI,CACN,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EACvC,IAAI,CACL,CACF,EAAE,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ParamIndexCounter {
|
|
2
|
+
next(): number;
|
|
3
|
+
}
|
|
4
|
+
export declare function counter(): ParamIndexCounter;
|
|
5
|
+
export declare function escapeValue(str: string): string;
|
|
6
|
+
export declare function escapeIdentifier(str: string): string;
|
|
7
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/sql/utils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,IAAI,MAAM,CAAC;CAChB;AAED,wBAAgB,OAAO,IAAI,iBAAiB,CAQ3C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function counter() {
|
|
2
|
+
let index = 1;
|
|
3
|
+
return {
|
|
4
|
+
next() {
|
|
5
|
+
return index++;
|
|
6
|
+
},
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export function escapeValue(str) {
|
|
10
|
+
return `'${str.replace(/'/g, "''")}'`;
|
|
11
|
+
}
|
|
12
|
+
export function escapeIdentifier(str) {
|
|
13
|
+
return `"${str.replace(/"/g, '""')}"`;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=utils.js.map
|