@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.
@@ -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 {PaginationBuilder} from "../builders/PaginationBuilder";
3
- import {SqlBuilderResult} from "../utils/sqlUtils";
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
- extends PaginationBuilder<G> {
7
-
8
- build(table: string, args: any = {}): SqlBuilderResult {
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
- if (args.JOIN) {
15
- sql += this.buildJoinClauses(args.JOIN, params);
16
- }
11
+ let sql = `DELETE \`${table}\` FROM \`${table}\``;
17
12
 
18
- if (args.WHERE) {
19
- sql += this.buildWhereClause(args.WHERE, params);
13
+ if (this.request.JOIN) {
14
+ sql += this.buildJoinClauses(this.request.JOIN, params);
20
15
  }
21
16
 
22
- if (args.PAGINATION) {
23
- sql += this.buildPaginationClause(args.PAGINATION);
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 += primary ? ` ORDER BY ${primary} ASC LIMIT 1` : ` LIMIT 100`;
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
- const setClauses = Object.entries(data).map(([col, val]) => {
20
- if (Array.isArray(params)) {
21
- params.push(val);
22
- return `\`${col}\` = ?`;
23
- } else {
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
- : iAPI<Modify<T, Overrides> & Custom>;
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";