@mrnafisia/type-query 1.2.11 → 2.0.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/prd.tsconfig.tsbuildinfo +1 -0
- package/dist/src/Table.d.ts +82 -0
- package/dist/src/Table.d.ts.map +1 -0
- package/dist/{types/pool.js → src/Table.js} +3 -3
- package/dist/{types → src}/Table.js.map +1 -1
- package/dist/src/context.d.ts +76 -0
- package/dist/src/context.d.ts.map +1 -0
- package/dist/src/context.js +70 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/createModelParser.d.ts +33 -0
- package/dist/src/createModelParser.d.ts.map +1 -0
- package/dist/src/createModelParser.js +178 -0
- package/dist/src/createModelParser.js.map +1 -0
- package/dist/src/ddl.d.ts +11 -0
- package/dist/src/ddl.d.ts.map +1 -0
- package/dist/src/ddl.js +83 -0
- package/dist/src/ddl.js.map +1 -0
- package/dist/src/entity.d.ts +100 -0
- package/dist/src/entity.d.ts.map +1 -0
- package/dist/src/entity.js +425 -0
- package/dist/src/entity.js.map +1 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +54 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/keywords.d.ts +143 -0
- package/dist/src/keywords.d.ts.map +1 -0
- package/dist/src/keywords.js +169 -0
- package/dist/src/keywords.js.map +1 -0
- package/dist/src/resolve.d.ts +15 -0
- package/dist/src/resolve.d.ts.map +1 -0
- package/dist/src/resolve.js +535 -0
- package/dist/src/resolve.js.map +1 -0
- package/dist/src/testTransaction.d.ts +19 -0
- package/dist/src/testTransaction.d.ts.map +1 -0
- package/dist/src/testTransaction.js +85 -0
- package/dist/src/testTransaction.js.map +1 -0
- package/dist/src/transaction.d.ts +6 -0
- package/dist/src/transaction.d.ts.map +1 -0
- package/dist/src/transaction.js +28 -0
- package/dist/src/transaction.js.map +1 -0
- package/dist/src/utils.d.ts +70 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +229 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +42 -38
- package/dist/U.d.ts +0 -3
- package/dist/U.d.ts.map +0 -1
- package/dist/U.js +0 -29
- package/dist/U.js.map +0 -1
- package/dist/cast.d.ts +0 -15
- package/dist/cast.d.ts.map +0 -1
- package/dist/cast.js +0 -151
- package/dist/cast.js.map +0 -1
- package/dist/context.d.ts +0 -949
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js +0 -85
- package/dist/context.js.map +0 -1
- package/dist/dictionary.d.ts +0 -13
- package/dist/dictionary.d.ts.map +0 -1
- package/dist/dictionary.js +0 -180
- package/dist/dictionary.js.map +0 -1
- package/dist/entity.d.ts +0 -3469
- package/dist/entity.d.ts.map +0 -1
- package/dist/entity.js +0 -1067
- package/dist/entity.js.map +0 -1
- package/dist/error.d.ts +0 -5
- package/dist/error.d.ts.map +0 -1
- package/dist/error.js +0 -8
- package/dist/error.js.map +0 -1
- package/dist/index.d.ts +0 -19
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -35
- package/dist/index.js.map +0 -1
- package/dist/model.d.ts +0 -967
- package/dist/model.d.ts.map +0 -1
- package/dist/model.js +0 -244
- package/dist/model.js.map +0 -1
- package/dist/pool.d.ts +0 -7
- package/dist/pool.d.ts.map +0 -1
- package/dist/pool.js +0 -123
- package/dist/pool.js.map +0 -1
- package/dist/schema.d.ts +0 -26
- package/dist/schema.d.ts.map +0 -1
- package/dist/schema.js +0 -406
- package/dist/schema.js.map +0 -1
- package/dist/testUtil.d.ts +0 -5
- package/dist/testUtil.d.ts.map +0 -1
- package/dist/testUtil.js +0 -338
- package/dist/testUtil.js.map +0 -1
- package/dist/types/Context.d.ts +0 -52
- package/dist/types/Context.d.ts.map +0 -1
- package/dist/types/Context.js +0 -3
- package/dist/types/Context.js.map +0 -1
- package/dist/types/Entity.d.ts +0 -71
- package/dist/types/Entity.d.ts.map +0 -1
- package/dist/types/Entity.js +0 -3
- package/dist/types/Entity.js.map +0 -1
- package/dist/types/Json.d.ts +0 -9
- package/dist/types/Json.d.ts.map +0 -1
- package/dist/types/Json.js +0 -3
- package/dist/types/Json.js.map +0 -1
- package/dist/types/Model.d.ts +0 -22
- package/dist/types/Model.d.ts.map +0 -1
- package/dist/types/Model.js +0 -3
- package/dist/types/Model.js.map +0 -1
- package/dist/types/Table.d.ts +0 -234
- package/dist/types/Table.d.ts.map +0 -1
- package/dist/types/Table.js +0 -3
- package/dist/types/pool.d.ts +0 -19
- package/dist/types/pool.d.ts.map +0 -1
- package/dist/types/pool.js.map +0 -1
- package/dist/types/postgres.d.ts +0 -10
- package/dist/types/postgres.d.ts.map +0 -1
- package/dist/types/postgres.js +0 -3
- package/dist/types/postgres.js.map +0 -1
- package/dist/types/testUtil.d.ts +0 -27
- package/dist/types/testUtil.d.ts.map +0 -1
- package/dist/types/testUtil.js +0 -3
- package/dist/types/testUtil.js.map +0 -1
- package/dist/utils.d.ts +0 -68
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -221
- package/dist/utils.js.map +0 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Table } from './Table';
|
|
2
|
+
declare const generateCreateSequencesSQL: (table: Table) => string[];
|
|
3
|
+
declare const generateDropSequencesSQL: (table: Table) => string[];
|
|
4
|
+
declare const generateCreateTableSQL: (table: Table) => string;
|
|
5
|
+
declare const generateDropTableSQL: (table: Table) => string;
|
|
6
|
+
declare const getSequenceName: (schemaName: string, tableName: string, columnKey: string, column: {
|
|
7
|
+
title?: string;
|
|
8
|
+
sequenceTitle?: string;
|
|
9
|
+
}) => string;
|
|
10
|
+
export { generateCreateSequencesSQL, generateDropSequencesSQL, generateCreateTableSQL, generateDropTableSQL, getSequenceName };
|
|
11
|
+
//# sourceMappingURL=ddl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ddl.d.ts","sourceRoot":"","sources":["../../src/ddl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,QAAA,MAAM,0BAA0B,UAAW,KAAK,aAyB/C,CAAC;AAEF,QAAA,MAAM,wBAAwB,UAAW,KAAK,aAe7C,CAAC;AAEF,QAAA,MAAM,sBAAsB,UAAW,KAAK,WAoE3C,CAAC;AAEF,QAAA,MAAM,oBAAoB,UAAW,KAAK,WACiB,CAAC;AAE5D,QAAA,MAAM,eAAe,eACL,MAAM,aACP,MAAM,aACN,MAAM,UACT;IACJ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,WAKE,CAAC;AAER,OAAO,EACH,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EAClB,CAAC"}
|
package/dist/src/ddl.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSequenceName = exports.generateDropTableSQL = exports.generateCreateTableSQL = exports.generateDropSequencesSQL = exports.generateCreateSequencesSQL = void 0;
|
|
4
|
+
const keywords_1 = require("./keywords");
|
|
5
|
+
const generateCreateSequencesSQL = (table) => {
|
|
6
|
+
const queries = [];
|
|
7
|
+
for (const [key, column] of Object.entries(table.columns)) {
|
|
8
|
+
if (column
|
|
9
|
+
.defaultValue?.[0] !== 'auto-increment') {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
const tokens = [
|
|
13
|
+
`CREATE SEQUENCE ${getSequenceName(table.schemaName, table.tableName, key, column)}`
|
|
14
|
+
];
|
|
15
|
+
switch (column.type) {
|
|
16
|
+
case 'int2':
|
|
17
|
+
tokens.push('AS SMALLINT');
|
|
18
|
+
break;
|
|
19
|
+
case 'int4':
|
|
20
|
+
tokens.push('AS INTEGER');
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
queries.push(tokens.join(' '));
|
|
24
|
+
}
|
|
25
|
+
return queries;
|
|
26
|
+
};
|
|
27
|
+
exports.generateCreateSequencesSQL = generateCreateSequencesSQL;
|
|
28
|
+
const generateDropSequencesSQL = (table) => {
|
|
29
|
+
const queries = [];
|
|
30
|
+
for (const [key, column] of Object.entries(table.columns)) {
|
|
31
|
+
if (column
|
|
32
|
+
.defaultValue?.[0] !== 'auto-increment') {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
queries.push(`DROP SEQUENCE ${getSequenceName(table.schemaName, table.tableName, key, column)}`);
|
|
36
|
+
}
|
|
37
|
+
return queries;
|
|
38
|
+
};
|
|
39
|
+
exports.generateDropSequencesSQL = generateDropSequencesSQL;
|
|
40
|
+
const generateCreateTableSQL = (table) => {
|
|
41
|
+
const columnsAsEntries = Object.entries(table.columns);
|
|
42
|
+
const columns = columnsAsEntries.map(([key, column]) => {
|
|
43
|
+
const tokens = [
|
|
44
|
+
`"${column.title ?? key}" ${keywords_1.Dictionary.PostgresType[column.type]}`
|
|
45
|
+
];
|
|
46
|
+
if (column.default) {
|
|
47
|
+
const defaultValue = column.defaultValue;
|
|
48
|
+
switch (defaultValue[0]) {
|
|
49
|
+
case 'auto-increment':
|
|
50
|
+
tokens.push(`DEFAULT NEXTVAL('${getSequenceName(table.schemaName, table.tableName, key, column)}'::REGCLASS)`);
|
|
51
|
+
break;
|
|
52
|
+
case 'sql':
|
|
53
|
+
tokens.push(`DEFAULT ${defaultValue[1]}`);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
tokens.push(column.nullable ? 'NULL' : 'NOT NULL');
|
|
58
|
+
if (column.reference !== undefined) {
|
|
59
|
+
tokens.push(`REFERENCES "${column.reference.table.schemaName}"."${column.reference.table.tableName}"` +
|
|
60
|
+
`("${column.reference.table.columns[column.reference.column]
|
|
61
|
+
.title ?? column.reference.column}") ` +
|
|
62
|
+
`ON UPDATE ${keywords_1.Dictionary.ReferenceAction[column.reference.onUpdate ?? 'no-action']} ON DELETE ${keywords_1.Dictionary.ReferenceAction[column.reference.onDelete ?? 'no-action']}`);
|
|
63
|
+
}
|
|
64
|
+
return tokens.join(' ');
|
|
65
|
+
});
|
|
66
|
+
const constraints = [];
|
|
67
|
+
const primaryKeys = columnsAsEntries.filter(([, column]) => !column.nullable && column.primary);
|
|
68
|
+
if (primaryKeys.length !== 0) {
|
|
69
|
+
constraints.push(`CONSTRAINT "${table.tableName}_pk" PRIMARY KEY(${primaryKeys
|
|
70
|
+
.map(([key, column]) => `"${column.title ?? key}"`)
|
|
71
|
+
.join(', ')})`);
|
|
72
|
+
}
|
|
73
|
+
return `CREATE TABLE "${table.schemaName}"."${table.tableName}"(${[...columns, ...constraints].join(', ')})`;
|
|
74
|
+
};
|
|
75
|
+
exports.generateCreateTableSQL = generateCreateTableSQL;
|
|
76
|
+
const generateDropTableSQL = (table) => `DROP TABLE "${table.schemaName}"."${table.tableName}"`;
|
|
77
|
+
exports.generateDropTableSQL = generateDropTableSQL;
|
|
78
|
+
const getSequenceName = (schemaName, tableName, columnKey, column) => `"${schemaName}"."` +
|
|
79
|
+
(column.sequenceTitle ??
|
|
80
|
+
tableName + '_' + (column.title ?? columnKey) + '_seq') +
|
|
81
|
+
'"';
|
|
82
|
+
exports.getSequenceName = getSequenceName;
|
|
83
|
+
//# sourceMappingURL=ddl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ddl.js","sourceRoot":"","sources":["../../src/ddl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { ClientBase } from 'pg';
|
|
2
|
+
import { Result } from 'never-catch';
|
|
3
|
+
import { Context } from './context';
|
|
4
|
+
import { NullableType, Schema, Table } from './Table';
|
|
5
|
+
declare const createEntity: <S extends Schema = Schema>(table: Table<S>) => {
|
|
6
|
+
table: Table<S>;
|
|
7
|
+
context: Context<S>;
|
|
8
|
+
select: <R extends readonly (CustomColumn<unknown, string> | (keyof S & string))[]>(returning: R | ((context: Context<S>) => R), where: boolean | ((context: Context<S>) => boolean), options?: SelectOptions<S>) => Query<S, R>;
|
|
9
|
+
insert: <R_1 extends readonly (CustomColumn<unknown, string> | (keyof S & string))[], N extends readonly (keyof NullableAndDefaultColumns<S>)[] = []>(rows: InsertingRow<S, N>[] | ((context: Context<S>) => InsertingRow<S, N>[]), returning: R_1 | ((context: Context<S>) => R_1), options?: InsertOptions<S, N>) => Query<S, R_1>;
|
|
10
|
+
update: <R_2 extends readonly (CustomColumn<unknown, string> | (keyof S & string))[]>(sets: UpdateSets<S> | ((context: Context<S>) => UpdateSets<S>), where: boolean | ((context: Context<S>) => boolean), returning: R_2 | ((context: Context<S>) => R_2)) => Query<S, R_2>;
|
|
11
|
+
delete: <R_3 extends readonly (CustomColumn<unknown, string> | (keyof S & string))[]>(where: boolean | ((context: Context<S>) => boolean), returning: R_3 | ((context: Context<S>) => R_3)) => Query<S, R_3>;
|
|
12
|
+
join: <MA extends string, JS extends Schema, JA extends string>(mainAlias: MA, joinType: JoinType, joinTable: Table<JS>, joinAlias: JA, on: boolean | ((contexts: SchemaMapContexts<Record<MA, S> & Record<JA, JS>>) => boolean)) => JoinEntity<Record<MA, S> & Record<JA, JS>, PrefixAliasOnSchema<S, MA> & PrefixAliasOnSchema<JS, JA>>;
|
|
13
|
+
};
|
|
14
|
+
type SelectOptions<S extends Schema = Schema> = {
|
|
15
|
+
distinct?: true | (keyof S & string)[];
|
|
16
|
+
groupBy?: unknown[] | ((context: Context<S>) => unknown[]);
|
|
17
|
+
orders?: {
|
|
18
|
+
by: keyof S & string;
|
|
19
|
+
direction: OrderDirection;
|
|
20
|
+
}[];
|
|
21
|
+
start?: bigint;
|
|
22
|
+
step?: number;
|
|
23
|
+
};
|
|
24
|
+
declare const createSelectQuery: (context: Context, table: Table, returning: ReturningRows | ((context: Context) => ReturningRows), where: boolean | ((context: Context) => boolean), options: SelectOptions, params: string[]) => Result<QueryData, string>;
|
|
25
|
+
type InsertOptions<S extends Schema, N extends readonly (keyof NullableAndDefaultColumns<S>)[]> = {
|
|
26
|
+
nullableDefaultColumns?: N;
|
|
27
|
+
};
|
|
28
|
+
type InsertingRow<S extends Schema, N extends readonly (keyof NullableAndDefaultColumns<S>)[]> = {
|
|
29
|
+
[key in Exclude<keyof S, keyof NullableAndDefaultColumns<S>>]: S[key]['type'];
|
|
30
|
+
} & {
|
|
31
|
+
[key in Exclude<keyof N, keyof never[]> as N[key] & string]?: NullableType<S[N[key] & string]['type'], S[N[key] & string]['nullable']>;
|
|
32
|
+
};
|
|
33
|
+
declare const createInsertQuery: (context: Context, table: Table, rows: Record<string, unknown>[] | ((context: Context) => Record<string, unknown>[]), returning: ReturningRows | ((context: Context) => ReturningRows), options: InsertOptions<Schema, readonly string[]>, params: string[]) => Result<QueryData, string>;
|
|
34
|
+
type UpdateSets<S extends Schema = Schema> = {
|
|
35
|
+
[key in keyof S]?: NullableType<S[key]['type'], S[key]['nullable']>;
|
|
36
|
+
};
|
|
37
|
+
declare const createUpdateQuery: (context: Context, table: Table, sets: UpdateSets<Schema> | ((context: Context) => UpdateSets), where: boolean | ((context: Context) => boolean), returning: ReturningRows | ((context: Context) => ReturningRows), params: string[]) => Result<QueryData, string>;
|
|
38
|
+
declare const createDeleteQuery: (context: Context, table: Table, returning: ReturningRows | ((context: Context) => ReturningRows), where: boolean | ((context: Context) => boolean), params: string[]) => Result<QueryData, string>;
|
|
39
|
+
type JoinType = 'inner' | 'left' | 'right' | 'full';
|
|
40
|
+
type TableWithAlias = {
|
|
41
|
+
table: Table;
|
|
42
|
+
alias: string;
|
|
43
|
+
};
|
|
44
|
+
type JoinData = {
|
|
45
|
+
joinType: JoinType;
|
|
46
|
+
on: boolean | ((contexts: Record<string, Context>) => boolean);
|
|
47
|
+
};
|
|
48
|
+
type SchemaMapKeys<SMap extends Record<string, Schema>> = {
|
|
49
|
+
[key in keyof SMap & string]: `${key}_${keyof SMap[key] & string}`;
|
|
50
|
+
}[keyof SMap & string];
|
|
51
|
+
type SchemaMapContexts<SMap extends Record<string, Schema>> = {
|
|
52
|
+
[key in keyof SMap & string as `${key}Context`]: Context<SMap[key]>;
|
|
53
|
+
};
|
|
54
|
+
type PrefixAliasOnSchema<S extends Schema, A extends string> = {
|
|
55
|
+
[key in keyof S as `${A}_${key & string}`]: S[key];
|
|
56
|
+
};
|
|
57
|
+
type JoinEntity<SMap extends Record<string, Schema>, AllS extends Schema> = {
|
|
58
|
+
contexts: SchemaMapContexts<SMap>;
|
|
59
|
+
select: <R extends readonly ((keyof AllS & string) | CustomColumn<unknown, string>)[]>(returning: R | ((contexts: SchemaMapContexts<SMap>) => R), where: boolean | ((contexts: SchemaMapContexts<SMap>) => boolean), options?: JoinSelectOptions<SMap>) => Query<AllS, R>;
|
|
60
|
+
join: <JS extends Schema, JA extends string>(joinType: JoinType, joinTable: Table<JS>, joinAlias: JA, on: boolean | ((contexts: SchemaMapContexts<SMap & Record<JA, JS>>) => boolean)) => JoinEntity<SMap & Record<JA, JS>, AllS & PrefixAliasOnSchema<JS, JA>>;
|
|
61
|
+
};
|
|
62
|
+
type JoinSelectOptions<Ss extends Record<string, Schema> = Record<string, Schema>> = {
|
|
63
|
+
distinct?: true | SchemaMapKeys<Ss>[];
|
|
64
|
+
groupBy?: unknown[] | ((contexts: SchemaMapContexts<Ss>) => unknown[]);
|
|
65
|
+
orders?: {
|
|
66
|
+
by: SchemaMapKeys<Ss>;
|
|
67
|
+
direction: OrderDirection;
|
|
68
|
+
}[];
|
|
69
|
+
start?: bigint;
|
|
70
|
+
step?: number;
|
|
71
|
+
};
|
|
72
|
+
declare const createJoinSelectEntity: <SMap extends Record<string, Schema>, AllS extends Schema>(main: TableWithAlias, joinTables: (TableWithAlias & JoinData)[], contexts: SchemaMapContexts<SMap>) => JoinEntity<SMap, AllS>;
|
|
73
|
+
declare const createJoinSelectQuery: (contexts: Record<string, Context>, main: TableWithAlias, joinTables: (TableWithAlias & JoinData)[], returning: ReturningRows | ((contexts: Record<string, Context>) => ReturningRows), where: boolean | ((contexts: Record<string, Context>) => boolean), options: JoinSelectOptions, params: string[]) => Result<QueryData, string>;
|
|
74
|
+
declare const getTableDataOfJoinSelectColumn: (tablesData: TableWithAlias[], column: string) => TableWithAlias;
|
|
75
|
+
type OrderDirection = 'asc' | 'desc';
|
|
76
|
+
type Mode = [] | ['count', number] | ['get', 'one' | number];
|
|
77
|
+
type CustomColumn<T, N extends string> = {
|
|
78
|
+
expression: T;
|
|
79
|
+
name: N;
|
|
80
|
+
};
|
|
81
|
+
type NullableAndDefaultColumns<S extends Schema> = {
|
|
82
|
+
[key in keyof S as true extends S[key]['nullable'] ? key : true extends S[key]['default'] ? key : never]: true extends S[key]['nullable'] ? S[key] : true extends S[key]['default'] ? S[key] : never;
|
|
83
|
+
};
|
|
84
|
+
type Query<S extends Schema, R extends readonly (keyof S | CustomColumn<unknown, string>)[]> = {
|
|
85
|
+
getData: (params?: string[]) => Result<QueryData, string>;
|
|
86
|
+
execute: <M extends Mode>(client: ClientBase, mode: M, params?: string[]) => Promise<Result<QueryResult<S, R, M>, unknown>>;
|
|
87
|
+
};
|
|
88
|
+
type QueryData = {
|
|
89
|
+
sql: string;
|
|
90
|
+
params: string[];
|
|
91
|
+
};
|
|
92
|
+
type QueryResult<S extends Schema, R extends readonly (keyof S | CustomColumn<unknown, string>)[], M extends Mode> = M extends ['get', 'one'] ? QueryResultRow<S, R> : M extends ['get', number] | [] ? QueryResultRow<S, R>[] : M extends ['count', number] ? undefined : never;
|
|
93
|
+
type QueryResultRow<S extends Schema, R extends readonly (keyof S | CustomColumn<unknown, string>)[]> = {
|
|
94
|
+
[key in Exclude<keyof R, keyof never[]> as R[key] extends CustomColumn<unknown, infer N> ? N : R[key] & string]: R[key] extends CustomColumn<infer T, string> ? T : NullableType<S[R[key] & string]['type'], S[R[key] & string]['nullable']>;
|
|
95
|
+
};
|
|
96
|
+
type ReturningRows = readonly (string | CustomColumn<unknown, string>)[];
|
|
97
|
+
declare const createQuery: <S extends Schema, R extends readonly (CustomColumn<unknown, string> | keyof S)[]>(createQueryData: (params: string[]) => Result<QueryData, string>) => Query<S, R>;
|
|
98
|
+
export { createEntity, createSelectQuery, createInsertQuery, createUpdateQuery, createDeleteQuery, createJoinSelectEntity, createJoinSelectQuery, getTableDataOfJoinSelectColumn, createQuery };
|
|
99
|
+
export type { SelectOptions, InsertOptions, InsertingRow, UpdateSets, JoinType, TableWithAlias, JoinData, SchemaMapKeys, SchemaMapContexts, PrefixAliasOnSchema, JoinEntity, JoinSelectOptions, OrderDirection, Mode, CustomColumn, NullableAndDefaultColumns, Query, QueryData, QueryResult, QueryResultRow, ReturningRows };
|
|
100
|
+
//# sourceMappingURL=entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/entity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.createQuery = exports.getTableDataOfJoinSelectColumn = exports.createJoinSelectQuery = exports.createJoinSelectEntity = exports.createDeleteQuery = exports.createUpdateQuery = exports.createInsertQuery = exports.createSelectQuery = exports.createEntity = void 0;
|
|
27
|
+
const U = __importStar(require("./utils"));
|
|
28
|
+
const keywords_1 = require("./keywords");
|
|
29
|
+
const never_catch_1 = require("never-catch");
|
|
30
|
+
const context_1 = require("./context");
|
|
31
|
+
const resolve_1 = require("./resolve");
|
|
32
|
+
const createEntity = (table) => ({
|
|
33
|
+
table,
|
|
34
|
+
context: (0, context_1.createContext)(table),
|
|
35
|
+
select: function (returning, where, options = {}) {
|
|
36
|
+
return createQuery(params => createSelectQuery(this.context, table, returning, where, options, params));
|
|
37
|
+
},
|
|
38
|
+
insert: function (rows, returning, options = {}) {
|
|
39
|
+
return createQuery(params => createInsertQuery(this.context, table, rows, returning, options, params));
|
|
40
|
+
},
|
|
41
|
+
update: function (sets, where, returning) {
|
|
42
|
+
return createQuery(params => createUpdateQuery(this.context, table, sets, where, returning, params));
|
|
43
|
+
},
|
|
44
|
+
delete: function (where, returning) {
|
|
45
|
+
return createQuery(params => createDeleteQuery(this.context, table, returning, where, params));
|
|
46
|
+
},
|
|
47
|
+
join: function (mainAlias, joinType, joinTable, joinAlias, on) {
|
|
48
|
+
return createJoinSelectEntity({ table: table, alias: mainAlias }, [
|
|
49
|
+
{
|
|
50
|
+
table: joinTable,
|
|
51
|
+
joinType,
|
|
52
|
+
alias: joinAlias,
|
|
53
|
+
on: on
|
|
54
|
+
}
|
|
55
|
+
], {
|
|
56
|
+
[`${mainAlias}Context`]: (0, context_1.createContext)(table, mainAlias),
|
|
57
|
+
[`${joinAlias}Context`]: (0, context_1.createContext)(joinTable, joinAlias)
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
exports.createEntity = createEntity;
|
|
62
|
+
const createSelectQuery = (context, table, returning, where, options, params) => {
|
|
63
|
+
const errorPrefix = `select("${table.schemaName}"."${table.tableName}")`;
|
|
64
|
+
const { distinct = false, groupBy = [], orders = [], start, step } = options;
|
|
65
|
+
const tokens = ['SELECT'];
|
|
66
|
+
if (distinct === true) {
|
|
67
|
+
tokens.push('DISTINCT');
|
|
68
|
+
}
|
|
69
|
+
else if (Array.isArray(distinct)) {
|
|
70
|
+
tokens.push(`DISTINCT ON(${distinct.map(column => (0, resolve_1.resolveColumn)(table, column, false)).join(', ')})`);
|
|
71
|
+
}
|
|
72
|
+
const _returning = typeof returning === 'function' ? returning(context) : returning;
|
|
73
|
+
const resolvedReturning = (0, resolve_1.resolveReturning)(column => [table.columns[column].title, undefined], _returning, params.length + 1);
|
|
74
|
+
if (!resolvedReturning.ok) {
|
|
75
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> ${resolvedReturning.error}`);
|
|
76
|
+
}
|
|
77
|
+
params.push(...resolvedReturning.value.params);
|
|
78
|
+
tokens.push(resolvedReturning.value.text);
|
|
79
|
+
tokens.push(`FROM "${table.schemaName}"."${table.tableName}"`);
|
|
80
|
+
const resolvedWhereResult = (0, resolve_1.resolveExpression)(typeof where === 'function' ? where(context) : where, params.length + 1, false);
|
|
81
|
+
if (!resolvedWhereResult.ok) {
|
|
82
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> where -> ${resolvedWhereResult.error}`);
|
|
83
|
+
}
|
|
84
|
+
if (resolvedWhereResult.value.text === '') {
|
|
85
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> where -> neutral`);
|
|
86
|
+
}
|
|
87
|
+
params.push(...resolvedWhereResult.value.params);
|
|
88
|
+
tokens.push('WHERE', resolvedWhereResult.value.text);
|
|
89
|
+
const _groupBy = typeof groupBy === 'function' ? groupBy(context) : groupBy;
|
|
90
|
+
if (_groupBy.length !== 0) {
|
|
91
|
+
const groupByTextArray = [];
|
|
92
|
+
for (const aGroupBy of _groupBy) {
|
|
93
|
+
const resolvedGroupBy = (0, resolve_1.resolveExpression)(aGroupBy, params.length + 1, false);
|
|
94
|
+
if (!resolvedGroupBy.ok) {
|
|
95
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> groupBy -> ${_groupBy.indexOf(aGroupBy)} -> ${resolvedGroupBy.error}`);
|
|
96
|
+
}
|
|
97
|
+
params.push(...resolvedGroupBy.value.params);
|
|
98
|
+
groupByTextArray.push(resolvedGroupBy.value.text);
|
|
99
|
+
}
|
|
100
|
+
tokens.push('GROUP BY', groupByTextArray.join(', '));
|
|
101
|
+
}
|
|
102
|
+
if (orders.length !== 0) {
|
|
103
|
+
const ordersTextArray = [];
|
|
104
|
+
for (const order of orders) {
|
|
105
|
+
const { by, direction } = order;
|
|
106
|
+
ordersTextArray.push(`${(0, resolve_1.resolveColumn)(table, by, false)} ${keywords_1.Dictionary.OrderDirection[direction]}`);
|
|
107
|
+
}
|
|
108
|
+
tokens.push('ORDER BY', ordersTextArray.join(', '));
|
|
109
|
+
}
|
|
110
|
+
if (start !== undefined) {
|
|
111
|
+
if (start < 0) {
|
|
112
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> start -> invalid`);
|
|
113
|
+
}
|
|
114
|
+
tokens.push('OFFSET', start.toString());
|
|
115
|
+
}
|
|
116
|
+
if (step !== undefined) {
|
|
117
|
+
if (step <= 0) {
|
|
118
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> step -> invalid`);
|
|
119
|
+
}
|
|
120
|
+
tokens.push('LIMIT', step.toString());
|
|
121
|
+
}
|
|
122
|
+
return (0, never_catch_1.ok)({ sql: tokens.join(' '), params });
|
|
123
|
+
};
|
|
124
|
+
exports.createSelectQuery = createSelectQuery;
|
|
125
|
+
const createInsertQuery = (context, table, rows, returning, options, params) => {
|
|
126
|
+
const errorPrefix = `insert("${table.schemaName}"."${table.tableName}")`;
|
|
127
|
+
const { nullableDefaultColumns = [] } = options;
|
|
128
|
+
const tokens = [`INSERT INTO "${table.schemaName}"."${table.tableName}"`];
|
|
129
|
+
const insertingColumns = [];
|
|
130
|
+
const columnsTextArray = [];
|
|
131
|
+
for (const column in table.columns) {
|
|
132
|
+
if (nullableDefaultColumns.includes(column) ||
|
|
133
|
+
!table.columns[column].nullable ||
|
|
134
|
+
table.columns[column].default) {
|
|
135
|
+
insertingColumns.push(column);
|
|
136
|
+
columnsTextArray.push((0, resolve_1.resolveColumn)(table, column, false));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
tokens.push(`(${columnsTextArray.join(', ')})`, 'VALUES');
|
|
140
|
+
const rowsTextArray = [];
|
|
141
|
+
const _rows = typeof rows === 'function' ? rows(context) : rows;
|
|
142
|
+
if (_rows.length === 0) {
|
|
143
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> rows -> empty`);
|
|
144
|
+
}
|
|
145
|
+
for (const _row of _rows) {
|
|
146
|
+
const rowTokens = [];
|
|
147
|
+
for (const insertingColumn of insertingColumns) {
|
|
148
|
+
if (_row[insertingColumn] === undefined) {
|
|
149
|
+
const column = table.columns[insertingColumn];
|
|
150
|
+
if (column.defaultValue !== undefined) {
|
|
151
|
+
switch (column.defaultValue[0]) {
|
|
152
|
+
case 'auto-increment':
|
|
153
|
+
rowTokens.push('DEFAULT');
|
|
154
|
+
continue;
|
|
155
|
+
case 'created-at':
|
|
156
|
+
case 'updated-at':
|
|
157
|
+
rowTokens.push(U.stringify(new Date(), true));
|
|
158
|
+
continue;
|
|
159
|
+
case 'sql':
|
|
160
|
+
rowTokens.push(column.defaultValue[1]);
|
|
161
|
+
continue;
|
|
162
|
+
case 'js':
|
|
163
|
+
rowTokens.push(U.stringify(column.defaultValue[1], true));
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (column.nullable) {
|
|
168
|
+
rowTokens.push(U.stringify(null, true));
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> rows -> ${_rows.indexOf(_row)} -> ${insertingColumn} -> no-value`);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
const resolvedExpressionResult = (0, resolve_1.resolveExpression)(_row[insertingColumn], params.length + 1, false);
|
|
175
|
+
if (!resolvedExpressionResult.ok) {
|
|
176
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> rows -> ${_rows.indexOf(_row)}][${insertingColumn} -> ${resolvedExpressionResult.error}`);
|
|
177
|
+
}
|
|
178
|
+
if (resolvedExpressionResult.value.text === '') {
|
|
179
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> rows -> ${_rows.indexOf(_row)}][${insertingColumn} -> neutral`);
|
|
180
|
+
}
|
|
181
|
+
params.push(...resolvedExpressionResult.value.params);
|
|
182
|
+
rowTokens.push(resolvedExpressionResult.value.text);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
rowsTextArray.push(`(${rowTokens.join(', ')})`);
|
|
186
|
+
}
|
|
187
|
+
tokens.push(rowsTextArray.join(', '));
|
|
188
|
+
const _returning = typeof returning === 'function' ? returning(context) : returning;
|
|
189
|
+
if (_returning.length !== 0) {
|
|
190
|
+
const resolvedReturning = (0, resolve_1.resolveReturning)(column => [table.columns[column].title, undefined], _returning, params.length + 1);
|
|
191
|
+
if (!resolvedReturning.ok) {
|
|
192
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> ${resolvedReturning.error}`);
|
|
193
|
+
}
|
|
194
|
+
params.push(...resolvedReturning.value.params);
|
|
195
|
+
tokens.push('RETURNING', resolvedReturning.value.text);
|
|
196
|
+
}
|
|
197
|
+
return (0, never_catch_1.ok)({ sql: tokens.join(' '), params });
|
|
198
|
+
};
|
|
199
|
+
exports.createInsertQuery = createInsertQuery;
|
|
200
|
+
const createUpdateQuery = (context, table, sets, where, returning, params) => {
|
|
201
|
+
const errorPrefix = `update("${table.schemaName}"."${table.tableName}")`;
|
|
202
|
+
const tokens = [`UPDATE "${table.schemaName}"."${table.tableName}" SET`];
|
|
203
|
+
const _set = typeof sets === 'function' ? sets(context) : sets;
|
|
204
|
+
const setsTextArray = [];
|
|
205
|
+
let key;
|
|
206
|
+
for (key in _set) {
|
|
207
|
+
if (_set[key] === undefined) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
const setExpressionResult = (0, resolve_1.resolveExpression)(_set[key], params.length + 1, false);
|
|
211
|
+
if (!setExpressionResult.ok) {
|
|
212
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> sets -> ${key} -> ${setExpressionResult.error}`);
|
|
213
|
+
}
|
|
214
|
+
if (setExpressionResult.value.text === '') {
|
|
215
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> sets -> ${key} -> neutral`);
|
|
216
|
+
}
|
|
217
|
+
params.push(...setExpressionResult.value.params);
|
|
218
|
+
setsTextArray.push(`${(0, resolve_1.resolveColumn)(table, key, false)} = ${setExpressionResult.value.text}`);
|
|
219
|
+
}
|
|
220
|
+
for (const column in table.columns) {
|
|
221
|
+
switch (table.columns[column].defaultValue?.[0]) {
|
|
222
|
+
case 'updated-at':
|
|
223
|
+
setsTextArray.push(`${(0, resolve_1.resolveColumn)(table, column, false)} = ${U.stringify(new Date(), true)}`);
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (setsTextArray.length === 0) {
|
|
228
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> sets -> empty`);
|
|
229
|
+
}
|
|
230
|
+
tokens.push(setsTextArray.join(', '));
|
|
231
|
+
const resolvedWhereResult = (0, resolve_1.resolveExpression)(typeof where === 'function' ? where(context) : where, params.length + 1, false);
|
|
232
|
+
if (!resolvedWhereResult.ok) {
|
|
233
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> where -> ${resolvedWhereResult.error}`);
|
|
234
|
+
}
|
|
235
|
+
if (resolvedWhereResult.value.text === '') {
|
|
236
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> where -> neutral`);
|
|
237
|
+
}
|
|
238
|
+
params.push(...resolvedWhereResult.value.params);
|
|
239
|
+
tokens.push('WHERE', resolvedWhereResult.value.text);
|
|
240
|
+
const _returning = typeof returning === 'function' ? returning(context) : returning;
|
|
241
|
+
if (_returning.length !== 0) {
|
|
242
|
+
const resolvedReturning = (0, resolve_1.resolveReturning)(column => [table.columns[column].title, undefined], _returning, params.length + 1);
|
|
243
|
+
if (!resolvedReturning.ok) {
|
|
244
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> ${resolvedReturning.error}`);
|
|
245
|
+
}
|
|
246
|
+
params.push(...resolvedReturning.value.params);
|
|
247
|
+
tokens.push('RETURNING', resolvedReturning.value.text);
|
|
248
|
+
}
|
|
249
|
+
return (0, never_catch_1.ok)({ sql: tokens.join(' '), params });
|
|
250
|
+
};
|
|
251
|
+
exports.createUpdateQuery = createUpdateQuery;
|
|
252
|
+
const createDeleteQuery = (context, table, returning, where, params) => {
|
|
253
|
+
const tokens = [`DELETE FROM "${table.schemaName}"."${table.tableName}"`];
|
|
254
|
+
const resolvedWhereResult = (0, resolve_1.resolveExpression)(typeof where === 'function' ? where(context) : where, params.length + 1, false);
|
|
255
|
+
if (!resolvedWhereResult.ok) {
|
|
256
|
+
return (0, never_catch_1.err)(`delete("${table.schemaName}"."${table.tableName}") -> where -> ${resolvedWhereResult.error}`);
|
|
257
|
+
}
|
|
258
|
+
if (resolvedWhereResult.value.text === '') {
|
|
259
|
+
return (0, never_catch_1.err)(`delete("${table.schemaName}"."${table.tableName}") -> where -> neutral`);
|
|
260
|
+
}
|
|
261
|
+
params.push(...resolvedWhereResult.value.params);
|
|
262
|
+
tokens.push('WHERE', resolvedWhereResult.value.text);
|
|
263
|
+
const _returning = typeof returning === 'function' ? returning(context) : returning;
|
|
264
|
+
if (_returning.length !== 0) {
|
|
265
|
+
const resolvedReturning = (0, resolve_1.resolveReturning)(column => [table.columns[column].title, undefined], _returning, params.length + 1);
|
|
266
|
+
if (!resolvedReturning.ok) {
|
|
267
|
+
return (0, never_catch_1.err)(`delete("${table.schemaName}"."${table.tableName}") -> ${resolvedReturning.error}`);
|
|
268
|
+
}
|
|
269
|
+
params.push(...resolvedReturning.value.params);
|
|
270
|
+
tokens.push('RETURNING', resolvedReturning.value.text);
|
|
271
|
+
}
|
|
272
|
+
return (0, never_catch_1.ok)({ sql: tokens.join(' '), params });
|
|
273
|
+
};
|
|
274
|
+
exports.createDeleteQuery = createDeleteQuery;
|
|
275
|
+
const createJoinSelectEntity = (main, joinTables, contexts) => ({
|
|
276
|
+
contexts: contexts,
|
|
277
|
+
select: function (returning, where, options = {}) {
|
|
278
|
+
return createQuery(params => createJoinSelectQuery(this.contexts, main, joinTables, returning, where, options, params));
|
|
279
|
+
},
|
|
280
|
+
join: function (joinType, joinTable, joinAlias, on) {
|
|
281
|
+
joinTables.push({
|
|
282
|
+
table: joinTable,
|
|
283
|
+
on: on,
|
|
284
|
+
joinType,
|
|
285
|
+
alias: joinAlias
|
|
286
|
+
});
|
|
287
|
+
return createJoinSelectEntity(main, joinTables, {
|
|
288
|
+
...contexts,
|
|
289
|
+
[`${joinAlias}Context`]: (0, context_1.createContext)(joinTable, joinAlias)
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
exports.createJoinSelectEntity = createJoinSelectEntity;
|
|
294
|
+
const createJoinSelectQuery = (contexts, main, joinTables, returning, where, options, params) => {
|
|
295
|
+
const errorPrefix = `join-select("${main.table.schemaName}"."${main.table.tableName}")`;
|
|
296
|
+
const allTables = [main, ...joinTables];
|
|
297
|
+
const { distinct = false, groupBy = [], orders = [], start, step } = options;
|
|
298
|
+
const tokens = ['SELECT'];
|
|
299
|
+
if (distinct === true) {
|
|
300
|
+
tokens.push('DISTINCT');
|
|
301
|
+
}
|
|
302
|
+
else if (Array.isArray(distinct)) {
|
|
303
|
+
tokens.push(`DISTINCT ON(${distinct
|
|
304
|
+
.map(column => {
|
|
305
|
+
const { table, alias } = getTableDataOfJoinSelectColumn(allTables, column);
|
|
306
|
+
return (0, resolve_1.resolveColumn)(table, column.substring((alias + '_').length), true, alias);
|
|
307
|
+
})
|
|
308
|
+
.join(', ')})`);
|
|
309
|
+
}
|
|
310
|
+
const _returning = typeof returning === 'function' ? returning(contexts) : returning;
|
|
311
|
+
const resolvedReturning = (0, resolve_1.resolveReturning)(column => {
|
|
312
|
+
const { table, alias } = getTableDataOfJoinSelectColumn(allTables, column);
|
|
313
|
+
const columnKey = column.substring((alias + '_').length);
|
|
314
|
+
return [table.columns[columnKey].title, alias];
|
|
315
|
+
}, _returning, params.length + 1);
|
|
316
|
+
if (!resolvedReturning.ok) {
|
|
317
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> ${resolvedReturning.error}`);
|
|
318
|
+
}
|
|
319
|
+
params.push(...resolvedReturning.value.params);
|
|
320
|
+
tokens.push(resolvedReturning.value.text, `FROM "${main.table.schemaName}"."${main.table.tableName}" "${main.alias}"`);
|
|
321
|
+
for (const joinTable of joinTables) {
|
|
322
|
+
const onExpressionResult = (0, resolve_1.resolveExpression)(typeof joinTable.on === 'function'
|
|
323
|
+
? joinTable.on(contexts)
|
|
324
|
+
: joinTable.on, params.length + 1, false);
|
|
325
|
+
if (!onExpressionResult.ok) {
|
|
326
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> join -> ${joinTables.indexOf(joinTable)} -> ${onExpressionResult.error}`);
|
|
327
|
+
}
|
|
328
|
+
if (onExpressionResult.value.text === '') {
|
|
329
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> join -> ${joinTables.indexOf(joinTable)} -> neutral`);
|
|
330
|
+
}
|
|
331
|
+
params.push(...onExpressionResult.value.params);
|
|
332
|
+
tokens.push(`${keywords_1.Dictionary.JoinType[joinTable.joinType]} "${joinTable.table.schemaName}"."${joinTable.table.tableName}" "${joinTable.alias}" ON ${onExpressionResult.value.text}`);
|
|
333
|
+
}
|
|
334
|
+
const resolvedWhereResult = (0, resolve_1.resolveExpression)(typeof where === 'function' ? where(contexts) : where, params.length + 1, false);
|
|
335
|
+
if (!resolvedWhereResult.ok) {
|
|
336
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> where -> ${resolvedWhereResult.error}`);
|
|
337
|
+
}
|
|
338
|
+
if (resolvedWhereResult.value.text === '') {
|
|
339
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> where -> neutral`);
|
|
340
|
+
}
|
|
341
|
+
params.push(...resolvedWhereResult.value.params);
|
|
342
|
+
tokens.push('WHERE', resolvedWhereResult.value.text);
|
|
343
|
+
const _groupBy = typeof groupBy === 'function' ? groupBy(contexts) : groupBy;
|
|
344
|
+
if (_groupBy.length !== 0) {
|
|
345
|
+
const groupByTextArray = [];
|
|
346
|
+
for (const aGroupBy of _groupBy) {
|
|
347
|
+
const resolvedGroupBy = (0, resolve_1.resolveExpression)(aGroupBy, params.length + 1, false);
|
|
348
|
+
if (!resolvedGroupBy.ok) {
|
|
349
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> groupBy -> ${_groupBy.indexOf(aGroupBy)} -> ${resolvedGroupBy.error}`);
|
|
350
|
+
}
|
|
351
|
+
params.push(...resolvedGroupBy.value.params);
|
|
352
|
+
groupByTextArray.push(resolvedGroupBy.value.text);
|
|
353
|
+
}
|
|
354
|
+
tokens.push('GROUP BY', groupByTextArray.join(', '));
|
|
355
|
+
}
|
|
356
|
+
if (orders.length !== 0) {
|
|
357
|
+
const ordersTextArray = [];
|
|
358
|
+
for (const order of orders) {
|
|
359
|
+
const { by, direction } = order;
|
|
360
|
+
const { table, alias } = getTableDataOfJoinSelectColumn(allTables, by);
|
|
361
|
+
ordersTextArray.push(`${(0, resolve_1.resolveColumn)(table, by.substring((alias + '_').length), true, alias)} ${keywords_1.Dictionary.OrderDirection[direction]}`);
|
|
362
|
+
}
|
|
363
|
+
tokens.push('ORDER BY', ordersTextArray.join(', '));
|
|
364
|
+
}
|
|
365
|
+
if (start !== undefined) {
|
|
366
|
+
if (start < 0) {
|
|
367
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> start -> invalid`);
|
|
368
|
+
}
|
|
369
|
+
tokens.push('OFFSET', start.toString());
|
|
370
|
+
}
|
|
371
|
+
if (step !== undefined) {
|
|
372
|
+
if (step <= 0) {
|
|
373
|
+
return (0, never_catch_1.err)(`${errorPrefix} -> step -> invalid`);
|
|
374
|
+
}
|
|
375
|
+
tokens.push('LIMIT', step.toString());
|
|
376
|
+
}
|
|
377
|
+
return (0, never_catch_1.ok)({ sql: tokens.join(' '), params });
|
|
378
|
+
};
|
|
379
|
+
exports.createJoinSelectQuery = createJoinSelectQuery;
|
|
380
|
+
const getTableDataOfJoinSelectColumn = (tablesData, column) => {
|
|
381
|
+
const splitColumn = column.split('_');
|
|
382
|
+
if (splitColumn.length < 2) {
|
|
383
|
+
throw `no separator`;
|
|
384
|
+
}
|
|
385
|
+
for (let i = 1; i < splitColumn.length; i++) {
|
|
386
|
+
const tableAlias = splitColumn.slice(0, i).join('_');
|
|
387
|
+
for (const tableData of tablesData) {
|
|
388
|
+
if (tableData.alias === tableAlias &&
|
|
389
|
+
tableData.table.columns[splitColumn.slice(i).join('_')] !==
|
|
390
|
+
undefined) {
|
|
391
|
+
return tableData;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
throw `column not found`;
|
|
396
|
+
};
|
|
397
|
+
exports.getTableDataOfJoinSelectColumn = getTableDataOfJoinSelectColumn;
|
|
398
|
+
const createQuery = (createQueryData) => {
|
|
399
|
+
let queryDataResult;
|
|
400
|
+
return {
|
|
401
|
+
getData: (params = []) => {
|
|
402
|
+
if (queryDataResult === undefined) {
|
|
403
|
+
queryDataResult = createQueryData(params);
|
|
404
|
+
}
|
|
405
|
+
if (!queryDataResult.ok) {
|
|
406
|
+
return queryDataResult;
|
|
407
|
+
}
|
|
408
|
+
return queryDataResult;
|
|
409
|
+
},
|
|
410
|
+
execute: async (client, mode, params = []) => {
|
|
411
|
+
if (queryDataResult === undefined) {
|
|
412
|
+
queryDataResult = createQueryData(params);
|
|
413
|
+
}
|
|
414
|
+
if (!queryDataResult.ok) {
|
|
415
|
+
return Promise.resolve(queryDataResult);
|
|
416
|
+
}
|
|
417
|
+
return client
|
|
418
|
+
.query(queryDataResult.value.sql + ';', queryDataResult.value.params)
|
|
419
|
+
.then(({ rows }) => (0, resolve_1.resolveResult)(rows, mode))
|
|
420
|
+
.catch(e => (0, never_catch_1.err)(e));
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
};
|
|
424
|
+
exports.createQuery = createQuery;
|
|
425
|
+
//# sourceMappingURL=entity.js.map
|