@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.
- package/dist/client/DbPoolConnection.d.ts +1 -1
- package/dist/client/DbPoolTransaction.d.ts +1 -1
- package/dist/client/DbQuery.d.ts +1 -1
- package/dist/client/DbQueryBase.d.ts +1 -1
- package/dist/client/_type.d.ts +2 -0
- package/dist/client/interfaces.d.ts +1 -1
- package/dist/sql_gen/_statement.d.ts +1 -1
- package/dist/sql_gen/_statement.js +1 -1
- package/dist/sql_gen/mod.js +3 -1
- package/dist/sql_gen/sql_value/sql_value.d.ts +25 -41
- package/dist/sql_gen/sql_value/sql_value.js +70 -74
- package/dist/sql_gen/sql_value/type.d.ts +8 -9
- package/dist/sql_gen/statement/cte.d.ts +8 -0
- package/dist/sql_gen/statement/cte.js +33 -3
- package/dist/sql_gen/statement/delete.d.ts +2 -13
- package/dist/sql_gen/statement/delete.js +4 -38
- package/dist/sql_gen/statement/delete_chain.d.ts +15 -0
- package/dist/sql_gen/statement/delete_impl.d.ts +12 -0
- package/dist/sql_gen/statement/delete_impl.js +31 -0
- package/dist/sql_gen/statement/insert.d.ts +2 -4
- package/dist/sql_gen/statement/insert.js +4 -98
- package/dist/sql_gen/statement/insert_chain.d.ts +5 -0
- package/dist/sql_gen/statement/insert_impl.d.ts +14 -0
- package/dist/sql_gen/statement/insert_impl.js +99 -0
- package/dist/sql_gen/statement/select.d.ts +3 -36
- package/dist/sql_gen/statement/select.js +6 -146
- package/dist/sql_gen/statement/select_chain.d.ts +12 -0
- package/dist/sql_gen/statement/select_impl.d.ts +31 -0
- package/dist/sql_gen/statement/select_impl.js +146 -0
- package/dist/sql_gen/statement/update.d.ts +2 -15
- package/dist/sql_gen/statement/update.js +4 -80
- package/dist/sql_gen/statement/update_chain.d.ts +16 -0
- package/dist/sql_gen/statement/update_impl.d.ts +23 -0
- package/dist/sql_gen/statement/update_impl.js +72 -0
- package/package.json +1 -1
- package/dist/sql_gen/sql_value/_utils.d.ts +0 -11
- package/dist/sql_gen/sql_value/_utils.js +0 -37
|
@@ -1,88 +1,12 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
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,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 };
|