@carbonorm/carbonnode 3.3.10 → 3.4.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/api/C6Constants.d.ts +2 -0
- package/dist/api/executors/SqlExecutor.d.ts +12 -28
- package/dist/api/orm/builders/ConditionBuilder.d.ts +4 -2
- package/dist/api/orm/builders/JoinBuilder.d.ts +1 -1
- package/dist/api/orm/builders/PaginationBuilder.d.ts +1 -1
- package/dist/api/orm/queries/DeleteQueryBuilder.d.ts +3 -3
- package/dist/api/orm/queries/PostQueryBuilder.d.ts +8 -0
- package/dist/api/orm/queries/SelectQueryBuilder.d.ts +1 -1
- package/dist/api/orm/queries/UpdateQueryBuilder.d.ts +1 -1
- package/dist/api/types/ormInterfaces.d.ts +1 -1
- package/dist/index.cjs.js +170 -214
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +170 -215
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/api/C6Constants.ts +1 -0
- package/src/api/executors/SqlExecutor.ts +61 -91
- package/src/api/handlers/ExpressHandler.ts +23 -3
- package/src/api/orm/builders/ConditionBuilder.ts +6 -3
- package/src/api/orm/builders/JoinBuilder.ts +1 -1
- package/src/api/orm/builders/PaginationBuilder.ts +1 -1
- package/src/api/orm/queries/DeleteQueryBuilder.ts +13 -18
- package/src/api/orm/queries/PostQueryBuilder.ts +29 -0
- package/src/api/orm/queries/SelectQueryBuilder.ts +2 -4
- package/src/api/orm/queries/UpdateQueryBuilder.ts +7 -12
- package/src/api/types/ormInterfaces.ts +3 -1
- package/src/index.ts +1 -0
|
@@ -2,7 +2,7 @@ import isVerbose from "../../../variables/isVerbose";
|
|
|
2
2
|
import {OrmGenerics} from "../../types/ormGenerics";
|
|
3
3
|
import {ConditionBuilder} from "./ConditionBuilder";
|
|
4
4
|
|
|
5
|
-
export class JoinBuilder<G extends OrmGenerics> extends ConditionBuilder<G>{
|
|
5
|
+
export abstract class JoinBuilder<G extends OrmGenerics> extends ConditionBuilder<G>{
|
|
6
6
|
|
|
7
7
|
buildJoinClauses(joinArgs: any, params: any[] | Record<string, any>): string {
|
|
8
8
|
let sql = '';
|
|
@@ -3,7 +3,7 @@ import isVerbose from "../../../variables/isVerbose";
|
|
|
3
3
|
import {OrmGenerics} from "../../types/ormGenerics";
|
|
4
4
|
import {JoinBuilder} from "./JoinBuilder";
|
|
5
5
|
|
|
6
|
-
export class PaginationBuilder<G extends OrmGenerics> extends JoinBuilder<G> {
|
|
6
|
+
export abstract class PaginationBuilder<G extends OrmGenerics> extends JoinBuilder<G> {
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* MySQL ORDER/LIMIT/OFFSET generator.
|
|
@@ -1,28 +1,23 @@
|
|
|
1
|
-
import {OrmGenerics} from "../../types/ormGenerics";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { OrmGenerics } from "../../types/ormGenerics";
|
|
2
|
+
import { SqlBuilderResult } from "../utils/sqlUtils";
|
|
3
|
+
import { JoinBuilder } from "../builders/JoinBuilder";
|
|
4
4
|
|
|
5
|
-
export class DeleteQueryBuilder<G extends OrmGenerics>
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
export class DeleteQueryBuilder<G extends OrmGenerics> extends JoinBuilder<G> {
|
|
6
|
+
build(
|
|
7
|
+
table: string
|
|
8
|
+
): SqlBuilderResult {
|
|
9
9
|
const params = this.useNamedParams ? {} : [];
|
|
10
|
-
let sql = args.JOIN ? `DELETE ${table}
|
|
11
|
-
FROM \`${table}\`` : `DELETE
|
|
12
|
-
FROM \`${table}\``;
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
sql += this.buildJoinClauses(args.JOIN, params);
|
|
16
|
-
}
|
|
11
|
+
let sql = `DELETE \`${table}\` FROM \`${table}\``;
|
|
17
12
|
|
|
18
|
-
if (
|
|
19
|
-
sql += this.
|
|
13
|
+
if (this.request.JOIN) {
|
|
14
|
+
sql += this.buildJoinClauses(this.request.JOIN, params);
|
|
20
15
|
}
|
|
21
16
|
|
|
22
|
-
if (
|
|
23
|
-
sql += this.
|
|
17
|
+
if (this.request.WHERE) {
|
|
18
|
+
sql += this.buildWhereClause(this.request.WHERE, params);
|
|
24
19
|
}
|
|
25
20
|
|
|
26
|
-
return {sql, params};
|
|
21
|
+
return { sql, params };
|
|
27
22
|
}
|
|
28
23
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {C6C} from "@carbonorm/carbonnode";
|
|
2
|
+
import {ConditionBuilder} from "../builders/ConditionBuilder";
|
|
3
|
+
import {OrmGenerics} from "../../types/ormGenerics";
|
|
4
|
+
|
|
5
|
+
export class PostQueryBuilder<G extends OrmGenerics> extends ConditionBuilder<G>{
|
|
6
|
+
|
|
7
|
+
build(table: string) {
|
|
8
|
+
const verb = C6C.REPLACE in this.request ? C6C.REPLACE : C6C.INSERT;
|
|
9
|
+
const keys = Object.keys(verb in this.request ? this.request[verb] : this.request);
|
|
10
|
+
const params: any[] = []
|
|
11
|
+
const placeholders: string[] = []
|
|
12
|
+
for (const key of keys) {
|
|
13
|
+
const value = this.request[key];
|
|
14
|
+
const placeholder = this.addParam(params, key, value);
|
|
15
|
+
placeholders.push(placeholder);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
let sql = `${verb} INTO \`${table}\` (${keys.map(k => `\`${k}\``).join(', ')})
|
|
19
|
+
VALUES (${placeholders.join(', ')})`;
|
|
20
|
+
|
|
21
|
+
if (C6C.UPDATE in this.request) {
|
|
22
|
+
const updateData = this.request[C6C.UPDATE];
|
|
23
|
+
const updateClause = updateData.map(k => `\`${k}\` = VALUES(\`${k}\`)`).join(', ');
|
|
24
|
+
sql += ` ON DUPLICATE KEY UPDATE ${updateClause}`;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return {sql, params};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -6,12 +6,10 @@ export class SelectQueryBuilder<G extends OrmGenerics> extends PaginationBuilder
|
|
|
6
6
|
|
|
7
7
|
build(
|
|
8
8
|
table: string,
|
|
9
|
-
args: any,
|
|
10
|
-
primary?: string,
|
|
11
9
|
isSubSelect: boolean = false
|
|
12
10
|
): SqlBuilderResult {
|
|
11
|
+
const args = this.request;
|
|
13
12
|
const params = this.useNamedParams ? {} : [];
|
|
14
|
-
|
|
15
13
|
const selectList = args.SELECT ?? ['*'];
|
|
16
14
|
const selectFields = selectList
|
|
17
15
|
.map((f: any) => this.buildAggregateField(f))
|
|
@@ -41,7 +39,7 @@ export class SelectQueryBuilder<G extends OrmGenerics> extends PaginationBuilder
|
|
|
41
39
|
if (args.PAGINATION) {
|
|
42
40
|
sql += this.buildPaginationClause(args.PAGINATION);
|
|
43
41
|
} else if (!isSubSelect) {
|
|
44
|
-
sql +=
|
|
42
|
+
sql += ` LIMIT 100`;
|
|
45
43
|
}
|
|
46
44
|
|
|
47
45
|
return { sql, params };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import {C6C} from "../../C6Constants";
|
|
1
2
|
import {OrmGenerics} from "../../types/ormGenerics";
|
|
2
3
|
import { PaginationBuilder } from '../builders/PaginationBuilder';
|
|
3
4
|
import {SqlBuilderResult} from "../utils/sqlUtils";
|
|
@@ -6,9 +7,8 @@ export class UpdateQueryBuilder<G extends OrmGenerics> extends PaginationBuilder
|
|
|
6
7
|
|
|
7
8
|
build(
|
|
8
9
|
table: string,
|
|
9
|
-
data: Record<string, any>,
|
|
10
|
-
args: any = {}
|
|
11
10
|
): SqlBuilderResult {
|
|
11
|
+
const args = this.request;
|
|
12
12
|
const params = this.useNamedParams ? {} : [];
|
|
13
13
|
let sql = `UPDATE \`${table}\``;
|
|
14
14
|
|
|
@@ -16,16 +16,11 @@ export class UpdateQueryBuilder<G extends OrmGenerics> extends PaginationBuilder
|
|
|
16
16
|
sql += this.buildJoinClauses(args.JOIN, params);
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const key = `param${Object.keys(params).length}`;
|
|
25
|
-
params[key] = val;
|
|
26
|
-
return `\`${col}\` = :${key}`;
|
|
27
|
-
}
|
|
28
|
-
});
|
|
19
|
+
if (!(C6C.UPDATE in this.request)) {
|
|
20
|
+
throw new Error("No update data provided in the request.");
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const setClauses = Object.entries(this.request[C6C.UPDATE]).map(([col, val]) => this.addParam(params, col, val));
|
|
29
24
|
|
|
30
25
|
sql += ` SET ${setClauses.join(', ')}`;
|
|
31
26
|
|
|
@@ -90,7 +90,9 @@ export type RequestQueryBody<
|
|
|
90
90
|
Overrides extends { [key: string]: any } = {}
|
|
91
91
|
> = Method extends 'GET' | 'PUT' | 'DELETE'
|
|
92
92
|
? iAPI<RequestGetPutDeleteBody<Modify<T, Overrides> & Custom>>
|
|
93
|
-
:
|
|
93
|
+
: Method extends 'POST'
|
|
94
|
+
? iAPI<RequestGetPutDeleteBody<Modify<T, Overrides> & Custom> & Modify<T, Overrides> & Custom>
|
|
95
|
+
: iAPI<Modify<T, Overrides> & Custom>;
|
|
94
96
|
|
|
95
97
|
export interface iCacheAPI<ResponseDataType = any> {
|
|
96
98
|
requestArgumentsSerialized: string;
|
package/src/index.ts
CHANGED
|
@@ -22,6 +22,7 @@ export * from "./api/orm/builders/ConditionBuilder";
|
|
|
22
22
|
export * from "./api/orm/builders/JoinBuilder";
|
|
23
23
|
export * from "./api/orm/builders/PaginationBuilder";
|
|
24
24
|
export * from "./api/orm/queries/DeleteQueryBuilder";
|
|
25
|
+
export * from "./api/orm/queries/PostQueryBuilder";
|
|
25
26
|
export * from "./api/orm/queries/SelectQueryBuilder";
|
|
26
27
|
export * from "./api/orm/queries/UpdateQueryBuilder";
|
|
27
28
|
export * from "./api/orm/utils/sqlUtils";
|