@asla/yoursql 0.10.1 → 0.11.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.
Files changed (37) hide show
  1. package/dist/client/DbPoolConnection.d.ts +1 -1
  2. package/dist/client/DbPoolTransaction.d.ts +1 -1
  3. package/dist/client/DbQuery.d.ts +1 -1
  4. package/dist/client/DbQueryBase.d.ts +1 -1
  5. package/dist/client/_type.d.ts +2 -0
  6. package/dist/client/interfaces.d.ts +1 -1
  7. package/dist/sql_gen/_statement.d.ts +1 -1
  8. package/dist/sql_gen/_statement.js +1 -1
  9. package/dist/sql_gen/mod.js +3 -1
  10. package/dist/sql_gen/sql_value/sql_value.d.ts +25 -41
  11. package/dist/sql_gen/sql_value/sql_value.js +70 -74
  12. package/dist/sql_gen/sql_value/type.d.ts +8 -9
  13. package/dist/sql_gen/statement/cte.d.ts +8 -0
  14. package/dist/sql_gen/statement/cte.js +33 -3
  15. package/dist/sql_gen/statement/delete.d.ts +2 -13
  16. package/dist/sql_gen/statement/delete.js +4 -38
  17. package/dist/sql_gen/statement/delete_chain.d.ts +15 -0
  18. package/dist/sql_gen/statement/delete_impl.d.ts +12 -0
  19. package/dist/sql_gen/statement/delete_impl.js +31 -0
  20. package/dist/sql_gen/statement/insert.d.ts +2 -4
  21. package/dist/sql_gen/statement/insert.js +4 -98
  22. package/dist/sql_gen/statement/insert_chain.d.ts +5 -0
  23. package/dist/sql_gen/statement/insert_impl.d.ts +14 -0
  24. package/dist/sql_gen/statement/insert_impl.js +99 -0
  25. package/dist/sql_gen/statement/select.d.ts +3 -36
  26. package/dist/sql_gen/statement/select.js +6 -146
  27. package/dist/sql_gen/statement/select_chain.d.ts +12 -0
  28. package/dist/sql_gen/statement/select_impl.d.ts +31 -0
  29. package/dist/sql_gen/statement/select_impl.js +146 -0
  30. package/dist/sql_gen/statement/update.d.ts +2 -15
  31. package/dist/sql_gen/statement/update.js +4 -80
  32. package/dist/sql_gen/statement/update_chain.d.ts +16 -0
  33. package/dist/sql_gen/statement/update_impl.d.ts +23 -0
  34. package/dist/sql_gen/statement/update_impl.js +72 -0
  35. package/package.json +1 -1
  36. package/dist/sql_gen/sql_value/_utils.d.ts +0 -11
  37. package/dist/sql_gen/sql_value/_utils.js +0 -37
@@ -1,88 +1,12 @@
1
- import { selectColumns } from '../util.js';
2
- import { SqlStatement, SqlTextStatementDataset } from '../SqlStatement.js';
3
- import { createUpdateSetFromObject, whereToString } from '../_statement.js';
1
+ import { UpdateChain } from './update_impl.js';
4
2
 
5
- /**
6
- * @public
7
- * @example
8
- * ```ts
9
- * update("table1 AS t").where("t.id = b.id") // UPDATE table1 AS t WHERE t.id = b.id
10
- * update("table1",{ as: "t" }).set({ k:"'v'"}) // UPDATE table1 AS t SET t.k = 'v'
11
- * update("table1").where("id = 1") // UPDATE table1 AS t WHERE id = 1
12
- * ```
13
- */
14
- function update(table, options) {
3
+ /** @public */
4
+ const update = function update(table, options) {
15
5
  let sql = `UPDATE ${table}`;
16
6
  if (options?.as) {
17
7
  sql += ` AS ${options.as}`;
18
8
  }
19
9
  return new UpdateChain(sql);
20
- }
21
- class UpdateChain extends SqlStatement {
22
- sql;
23
- constructor(sql) {
24
- super();
25
- this.sql = sql;
26
- }
27
- from(...from) {
28
- const textList = from.map((f, i) => {
29
- if (typeof f === "function")
30
- return f();
31
- return f;
32
- });
33
- const sql = this.genSql() + `\nFROM ${textList.join(", ")}`;
34
- return new UpdateChain(sql);
35
- }
36
- /**
37
- * @example
38
- * ```ts
39
- * // SET age=3, name='hi', count=b.count
40
- * set({age: "3", name: "'hi'", count:"b.count"})
41
- * set(["age = 3", "name = 'hi'", "count = b.count"])
42
- * set("age = 3, name = 'hi', count = b.count")
43
- *
44
- * ```
45
- */
46
- set(values) {
47
- if (typeof values === "function")
48
- values = values();
49
- switch (typeof values) {
50
- case "object": {
51
- if (values instanceof Array) {
52
- let sql = values.join(", ");
53
- return new UpdateChain(this.sql + " " + sql);
54
- }
55
- else {
56
- let sql = createUpdateSetFromObject(values);
57
- return new UpdateChain(this.sql + " " + sql);
58
- }
59
- }
60
- case "string":
61
- return new UpdateChain(this.sql + " SET\n" + values);
62
- default:
63
- throw new TypeError("参数 values 类型错误");
64
- }
65
- }
66
- returning(returns) {
67
- if (typeof returns === "function")
68
- returns = returns();
69
- let columnsStr;
70
- if (returns === "*") {
71
- columnsStr = "*";
72
- }
73
- else {
74
- columnsStr = selectColumns(returns);
75
- }
76
- let sql = this.genSql() + "\nRETURNING " + columnsStr;
77
- return new SqlTextStatementDataset(sql);
78
- }
79
- where(where) {
80
- const sql = whereToString(where);
81
- return new UpdateChain(this.genSql() + sql);
82
- }
83
- genSql() {
84
- return this.sql;
85
- }
86
- }
10
+ };
87
11
 
88
12
  export { update };
@@ -1,6 +1,22 @@
1
1
  import { ConditionParam, Constructable, TableType } from "../util.ts";
2
2
  import { ChainModifyReturning } from "./_modify.ts";
3
3
  /** @public */
4
+ export interface UpdateOption {
5
+ as?: string;
6
+ }
7
+ /**
8
+ * @public
9
+ * @example
10
+ * ```ts
11
+ * update("table1 AS t").where("t.id = b.id") // UPDATE table1 AS t WHERE t.id = b.id
12
+ * update("table1",{ as: "t" }).set({ k:"'v'"}) // UPDATE table1 AS t SET t.k = 'v'
13
+ * update("table1").where("id = 1") // UPDATE table1 AS t WHERE id = 1
14
+ * ```
15
+ */
16
+ export interface UpdateSqlGenerator {
17
+ <T extends TableType>(table: string, options?: UpdateOption): ChainUpdate<T>;
18
+ }
19
+ /** @public */
4
20
  export interface ChainUpdate<T extends TableType = TableType> {
5
21
  set(value: Constructable<{
6
22
  [key in keyof T]?: string;
@@ -0,0 +1,23 @@
1
+ import { ConditionParam, Constructable, SelectParam } from "../util.ts";
2
+ import { SqlStatementDataset, SqlStatement } from "../SqlStatement.ts";
3
+ import { ChainUpdate, ChainUpdateAfterForm, ChainUpdateAfterSet, ChainUpdateReturning } from "./update_chain.ts";
4
+ export declare class UpdateChain extends SqlStatement implements ChainUpdate {
5
+ private sql;
6
+ constructor(sql: string);
7
+ from(...from: Constructable<string>[]): ChainUpdateAfterForm;
8
+ /**
9
+ * @example
10
+ * ```ts
11
+ * // SET age=3, name='hi', count=b.count
12
+ * set({age: "3", name: "'hi'", count:"b.count"})
13
+ * set(["age = 3", "name = 'hi'", "count = b.count"])
14
+ * set("age = 3, name = 'hi', count = b.count")
15
+ *
16
+ * ```
17
+ */
18
+ set(values: Constructable<Record<string, string | undefined> | string[] | string>): ChainUpdateAfterSet;
19
+ returning<R extends {}>(returns: Constructable<SelectParam | "*">): SqlStatementDataset<R>;
20
+ where(where: Constructable<ConditionParam | void>): ChainUpdateReturning;
21
+ genSql(): string;
22
+ }
23
+ //# sourceMappingURL=update_impl.d.ts.map
@@ -0,0 +1,72 @@
1
+ import { selectColumns } from '../util.js';
2
+ import { SqlStatement, SqlTextStatementDataset } from '../SqlStatement.js';
3
+ import { createUpdateSetFromObject, whereToString } from '../_statement.js';
4
+
5
+ class UpdateChain extends SqlStatement {
6
+ sql;
7
+ constructor(sql) {
8
+ super();
9
+ this.sql = sql;
10
+ }
11
+ from(...from) {
12
+ const textList = from.map((f, i) => {
13
+ if (typeof f === "function")
14
+ return f();
15
+ return f;
16
+ });
17
+ const sql = this.genSql() + `\nFROM ${textList.join(", ")}`;
18
+ return new UpdateChain(sql);
19
+ }
20
+ /**
21
+ * @example
22
+ * ```ts
23
+ * // SET age=3, name='hi', count=b.count
24
+ * set({age: "3", name: "'hi'", count:"b.count"})
25
+ * set(["age = 3", "name = 'hi'", "count = b.count"])
26
+ * set("age = 3, name = 'hi', count = b.count")
27
+ *
28
+ * ```
29
+ */
30
+ set(values) {
31
+ if (typeof values === "function")
32
+ values = values();
33
+ switch (typeof values) {
34
+ case "object": {
35
+ if (values instanceof Array) {
36
+ let sql = values.join(", ");
37
+ return new UpdateChain(this.sql + " " + sql);
38
+ }
39
+ else {
40
+ let sql = createUpdateSetFromObject(values);
41
+ return new UpdateChain(this.sql + " " + sql);
42
+ }
43
+ }
44
+ case "string":
45
+ return new UpdateChain(this.sql + " SET\n" + values);
46
+ default:
47
+ throw new TypeError("参数 values 类型错误");
48
+ }
49
+ }
50
+ returning(returns) {
51
+ if (typeof returns === "function")
52
+ returns = returns();
53
+ let columnsStr;
54
+ if (returns === "*") {
55
+ columnsStr = "*";
56
+ }
57
+ else {
58
+ columnsStr = selectColumns(returns);
59
+ }
60
+ let sql = this.genSql() + "\nRETURNING " + columnsStr;
61
+ return new SqlTextStatementDataset(sql);
62
+ }
63
+ where(where) {
64
+ const sql = whereToString(where);
65
+ return new UpdateChain(this.genSql() + sql);
66
+ }
67
+ genSql() {
68
+ return this.sql;
69
+ }
70
+ }
71
+
72
+ export { UpdateChain };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asla/yoursql",
3
- "version": "0.10.1",
3
+ "version": "0.11.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "types": "./dist/mod.d.ts",
@@ -1,11 +0,0 @@
1
- import { SqlStatementDataset } from "../SqlStatement.ts";
2
- import { TableType } from "../util.ts";
3
- import { ColumnToValueConfig } from "./type.ts";
4
- export declare class YourValuesAs<T extends TableType> extends SqlStatementDataset<T> {
5
- #private;
6
- constructor(columns: readonly string[], asName: string, valuesStr: string);
7
- toSelect(): string;
8
- genSql(): string;
9
- }
10
- export declare function initColumnAssert(keys: readonly string[], keys_types: Record<string, string | undefined | ColumnToValueConfig>): any[];
11
- //# sourceMappingURL=_utils.d.ts.map
@@ -1,37 +0,0 @@
1
- import { SqlStatementDataset } from '../SqlStatement.js';
2
-
3
- class YourValuesAs extends SqlStatementDataset {
4
- constructor(columns, asName, valuesStr) {
5
- super();
6
- this.#asName = asName;
7
- this.#valuesStr = valuesStr;
8
- this.#sql = `(VALUES\n${this.#valuesStr})\nAS ${this.#asName}(${columns.join(",")})`;
9
- }
10
- #asName;
11
- #valuesStr;
12
- #sql;
13
- toSelect() {
14
- return this.#sql;
15
- }
16
- genSql() {
17
- return this.#sql;
18
- }
19
- }
20
- function initColumnAssert(keys, keys_types) {
21
- let key;
22
- let value;
23
- let type = new Array(keys.length);
24
- for (let i = 0; i < keys.length; i++) {
25
- key = keys[i];
26
- value = keys_types[key];
27
- if (typeof value === "string") {
28
- type[i] = { sqlType: value };
29
- }
30
- else {
31
- type[i] = value;
32
- }
33
- }
34
- return type;
35
- }
36
-
37
- export { YourValuesAs, initColumnAssert };