@asla/yoursql 0.8.1 → 0.8.2

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.
@@ -0,0 +1,14 @@
1
+ /** @public */
2
+ export interface DbCursorOption {
3
+ defaultSize?: number;
4
+ }
5
+ /** @public */
6
+ export declare abstract class DbCursor<T> {
7
+ /** 读取游标,如果读取结束,返回空数组 */
8
+ abstract read(maxSize?: number): Promise<T[]>;
9
+ /** 提前关闭游标,如果多次调用,会被忽略 */
10
+ abstract close(): Promise<void>;
11
+ [Symbol.asyncDispose](): Promise<void>;
12
+ [Symbol.asyncIterator](): AsyncGenerator<T, undefined, void>;
13
+ }
14
+ //# sourceMappingURL=DbCursor.d.ts.map
@@ -0,0 +1,29 @@
1
+ import type { SqlStatementDataset } from "../sql_gen/mod.ts";
2
+ import { DbQuery } from "./DbQuery.ts";
3
+ import type { MultipleQueryResult, QueryRowsResult } from "./DbQuery.ts";
4
+ import type { DbConnection, TransactionMode } from "./interfaces.ts";
5
+ /**
6
+
7
+ /**
8
+ * 池连接
9
+ * @public
10
+ */
11
+ export declare class DbPoolConnection extends DbQuery {
12
+ #private;
13
+ constructor(conn: DbConnection, onRelease: () => void);
14
+ begin(mode?: TransactionMode): Promise<void>;
15
+ query<T = any>(sql: SqlStatementDataset<T>): Promise<QueryRowsResult<T>>;
16
+ query<T = any>(sql: {
17
+ toString(): string;
18
+ }): Promise<QueryRowsResult<T>>;
19
+ multipleQuery<T extends MultipleQueryResult = MultipleQueryResult>(sql: {
20
+ toString(): string;
21
+ }): Promise<T>;
22
+ rollback(): Promise<void>;
23
+ commit(): Promise<void>;
24
+ get released(): boolean;
25
+ /** 调用 release() 时,如果事务未提交,则抛出异常 */
26
+ release(): void;
27
+ [Symbol.dispose](): void;
28
+ }
29
+ //# sourceMappingURL=DbPoolConnection.d.ts.map
@@ -0,0 +1,29 @@
1
+ import type { SqlStatementDataset } from "../sql_gen/mod.ts";
2
+ import { DbQuery } from "./DbQuery.ts";
3
+ import type { MultipleQueryResult, QueryRowsResult } from "./DbQuery.ts";
4
+ import type { DbPoolConnection } from "./DbPoolConnection.ts";
5
+ import type { DbTransaction, TransactionMode } from "./interfaces.ts";
6
+ /**
7
+ * @public
8
+ * 池连接事务
9
+ */
10
+ export declare class DbPoolTransaction extends DbQuery implements DbTransaction {
11
+ #private;
12
+ readonly mode?: TransactionMode | undefined;
13
+ constructor(connect: () => Promise<DbPoolConnection>, mode?: TransactionMode | undefined);
14
+ commit(): Promise<void>;
15
+ rollback(): Promise<void>;
16
+ savePoint(savePoint: string): Promise<void>;
17
+ rollbackTo(savePoint: string): Promise<void>;
18
+ query<T extends object = any>(sql: SqlStatementDataset<T>): Promise<QueryRowsResult<T>>;
19
+ query<T extends object = any>(sql: {
20
+ toString(): string;
21
+ }): Promise<QueryRowsResult<T>>;
22
+ multipleQuery<T extends MultipleQueryResult = MultipleQueryResult>(sql: SqlStatementDataset<T>): Promise<T>;
23
+ multipleQuery<T extends MultipleQueryResult = MultipleQueryResult>(sql: {
24
+ toString(): string;
25
+ }): Promise<T>;
26
+ get released(): boolean;
27
+ [Symbol.asyncDispose](): Promise<void>;
28
+ }
29
+ //# sourceMappingURL=DbPoolTransaction.d.ts.map
@@ -0,0 +1,68 @@
1
+ import type { SqlStatementDataset } from "../sql_gen/mod.ts";
2
+ /** @public */
3
+ export interface SingleQueryResult {
4
+ rowCount: number;
5
+ rows?: any[];
6
+ }
7
+ /** @public */
8
+ export interface QueryRowsResult<T = any> extends SingleQueryResult {
9
+ rowCount: number;
10
+ rows: T[];
11
+ }
12
+ /** @public */
13
+ export type MultipleQueryResult = SingleQueryResult[];
14
+ /** @public */
15
+ export type QueryResult = MultipleQueryResult | SingleQueryResult;
16
+ /**
17
+ * SQL 查询相关操作
18
+ * @public
19
+ */
20
+ export declare abstract class DbQuery {
21
+ /** 单语句查询,不应查询条语句,否则返回错误值 */
22
+ abstract query<T = any>(sql: SqlStatementDataset<T>): Promise<QueryRowsResult<T>>;
23
+ /** 单语句查询,不应查询条语句,否则返回错误值 */
24
+ abstract query<T = any>(sql: {
25
+ toString(): string;
26
+ }): Promise<QueryRowsResult<T>>;
27
+ /** 多语句查询 */
28
+ abstract multipleQuery<T extends MultipleQueryResult = MultipleQueryResult>(sql: SqlStatementDataset<T>): Promise<T>;
29
+ /** 多语句查询 */
30
+ abstract multipleQuery<T extends MultipleQueryResult = MultipleQueryResult>(sql: {
31
+ toString(): string;
32
+ }): Promise<T>;
33
+ /** 单语句查询受影响的行 */
34
+ queryCount(sql: string | {
35
+ toString(): string;
36
+ }): Promise<number>;
37
+ /** 单语句查询,不应查询条语句,否则返回错误值 */
38
+ queryRows<T = any>(sql: SqlStatementDataset<T>): Promise<T[]>;
39
+ /** 单语句查询,不应查询条语句,否则返回错误值 */
40
+ queryRows<T = any>(sql: {
41
+ toString(): string;
42
+ }): Promise<T[]>;
43
+ /**
44
+ * 查询行
45
+ * 不应查询单条语句,否则返回错误值
46
+ */
47
+ multipleQueryRows<T extends any[] = any[]>(sql: SqlStatementDataset<T>): Promise<T[]>;
48
+ /**
49
+ * 查询行
50
+ * 不应查询条语句,否则返回错误值
51
+ */
52
+ multipleQueryRows<T extends any[] = any[]>(sql: {
53
+ toString(): string;
54
+ }): Promise<T[]>;
55
+ /**
56
+ * 指定某一列为key,返回 key 到 row 的映射
57
+ * 单语句查询,不应查询条语句,否则返回错误值
58
+ */
59
+ queryMap<T extends Record<string, any> = Record<string, any>, K extends keyof T = string>(sql: SqlStatementDataset<T>, key: K): Promise<Map<T[K], T>>;
60
+ /**
61
+ * 指定某一列为key,返回 key 到 row 的映射
62
+ * 单语句查询,不应查询条语句,否则返回错误值
63
+ */
64
+ queryMap<T extends Record<string, any> = Record<string, any>, K extends keyof T = string>(sql: {
65
+ toString(): string;
66
+ }, key: K): Promise<Map<T[K], T>>;
67
+ }
68
+ //# sourceMappingURL=DbQuery.d.ts.map
@@ -0,0 +1,9 @@
1
+ /** @public */
2
+ export declare class ParallelQueryError extends Error {
3
+ constructor();
4
+ }
5
+ /** @public */
6
+ export declare class ConnectionNotAvailableError extends Error {
7
+ constructor(message: string);
8
+ }
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1,66 @@
1
+ import type { SqlStatementDataset } from "../sql_gen/mod.ts";
2
+ import { DbQuery } from "./DbQuery.ts";
3
+ import { DbPoolConnection } from "./DbPoolConnection.ts";
4
+ import { DbCursor, DbCursorOption } from "./DbCursor.ts";
5
+ /**
6
+ * 数据库连接
7
+ * @public
8
+ */
9
+ export interface DbConnection extends DbQuery, AsyncDisposable {
10
+ close(): Promise<void>;
11
+ }
12
+ /** @public */
13
+ export type TransactionMode = "SERIALIZABLE" | "REPEATABLE READ" | "READ COMMITTED" | "READ UNCOMMITTED";
14
+ /**
15
+ * SQL 事务查询操作
16
+ *
17
+ * 使用 `await using` 语法离开作用域时,如果没有 `commit()` 或 `rollback(`) , 则调用 `rollback()`
18
+ *
19
+ * ```ts
20
+ * async function doSomeTransaction(){
21
+ * await using transaction = pool.begin()
22
+ * await transaction.query("SELECT * FROM user")
23
+ * throw new Error("error")
24
+ * }
25
+ * try{
26
+ * await doSomeTransaction()
27
+ * }catch(e){
28
+ * console.error(e)
29
+ * }
30
+ * ```
31
+ * 下面的写法会造成连接池泄露
32
+ * ```ts
33
+ * async function doSomeTransaction(){
34
+ * const transaction = pool.begin()
35
+ * await transaction.query("SELECT * FROM user")
36
+ * }
37
+ * await doSomeTransaction() // 离开作用域后连接不会被回收
38
+ * console.warn("连接未被回收!")
39
+ *
40
+ * ```
41
+ * @public
42
+ */
43
+ export interface DbTransaction extends DbQuery, AsyncDisposable {
44
+ /** 回滚,并释放连接 */
45
+ rollback(): Promise<void>;
46
+ /** 回滚到保存点 */
47
+ rollbackTo(savePoint: string): Promise<void>;
48
+ savePoint(savePoint: string): Promise<void>;
49
+ /** 提交,并释放连接 */
50
+ commit(): Promise<void>;
51
+ }
52
+ /**
53
+ * @public
54
+ * 池链接查询
55
+ */
56
+ export interface DbQueryPool extends DbQuery {
57
+ connect(): Promise<DbPoolConnection>;
58
+ idleCount: number;
59
+ totalCount: number;
60
+ begin(mode?: TransactionMode): DbTransaction;
61
+ cursor<T extends {}>(sql: SqlStatementDataset<T>): Promise<DbCursor<T>>;
62
+ cursor<T>(sql: {
63
+ toString(): string;
64
+ }, option?: DbCursorOption): Promise<DbCursor<T>>;
65
+ }
66
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1,7 @@
1
+ export * from "./errors.ts";
2
+ export * from "./interfaces.ts";
3
+ export * from "./DbQuery.ts";
4
+ export * from "./DbCursor.ts";
5
+ export * from "./DbPoolConnection.ts";
6
+ export * from "./DbPoolTransaction.ts";
7
+ //# sourceMappingURL=mod.d.ts.map
package/dist/client.js ADDED
@@ -0,0 +1,209 @@
1
+ /** @public */
2
+ class ParallelQueryError extends Error {
3
+ constructor() {
4
+ super("The previous query was not completed and cannot be executed");
5
+ }
6
+ }
7
+ /** @public */
8
+ class ConnectionNotAvailableError extends Error {
9
+ constructor(message) {
10
+ super(message);
11
+ }
12
+ }
13
+
14
+ /**
15
+ * SQL 查询相关操作
16
+ * @public
17
+ */
18
+ class DbQuery {
19
+ /** 单语句查询受影响的行 */
20
+ queryCount(sql) {
21
+ return this.query(sql.toString()).then((res) => {
22
+ if (res.rowCount === null)
23
+ return 0;
24
+ return res.rowCount;
25
+ });
26
+ }
27
+ queryRows(sql) {
28
+ return this.query(sql.toString()).then((res) => res.rows);
29
+ }
30
+ multipleQueryRows(sql) {
31
+ return this.multipleQuery(sql.toString()).then((res) => res.map((item) => item.rows ?? []));
32
+ }
33
+ async queryMap(sql, key) {
34
+ const { rows } = await this.query(sql.toString());
35
+ let map = new Map();
36
+ for (let i = 0; i < rows.length; i++) {
37
+ map.set(rows[i][key], rows[i]);
38
+ }
39
+ return map;
40
+ }
41
+ }
42
+
43
+ /** @public */
44
+ class DbCursor {
45
+ // implement
46
+ [Symbol.asyncDispose]() {
47
+ return this.close();
48
+ }
49
+ async *[Symbol.asyncIterator]() {
50
+ let data = await this.read();
51
+ try {
52
+ while (data.length) {
53
+ yield* data;
54
+ data = await this.read();
55
+ }
56
+ }
57
+ finally {
58
+ await this.close();
59
+ }
60
+ }
61
+ }
62
+
63
+ /**
64
+
65
+ /**
66
+ * 池连接
67
+ * @public
68
+ */
69
+ class DbPoolConnection extends DbQuery {
70
+ constructor(conn, onRelease) {
71
+ super();
72
+ this.#conn = conn;
73
+ this.#onRelease = onRelease;
74
+ }
75
+ #onRelease;
76
+ //implement
77
+ async begin(mode) {
78
+ await this.query("BEGIN" + (mode ? " TRANSACTION ISOLATION LEVEL " + mode : ""));
79
+ }
80
+ #conn;
81
+ query(sql) {
82
+ if (!this.#conn)
83
+ return Promise.reject(new ConnectionNotAvailableError("Connection already release"));
84
+ return this.#conn.query(sql);
85
+ }
86
+ multipleQuery(sql) {
87
+ if (!this.#conn)
88
+ return Promise.reject(new ConnectionNotAvailableError("Connection already release"));
89
+ return this.#conn.multipleQuery(sql);
90
+ }
91
+ //implement
92
+ async rollback() {
93
+ await this.query("ROLLBACK");
94
+ }
95
+ //implement
96
+ async commit() {
97
+ await this.query("COMMIT");
98
+ }
99
+ get released() {
100
+ return !this.#conn;
101
+ }
102
+ /** 调用 release() 时,如果事务未提交,则抛出异常 */
103
+ release() {
104
+ if (this.#conn) {
105
+ this.#conn = undefined;
106
+ this.#onRelease();
107
+ }
108
+ }
109
+ //implement
110
+ [Symbol.dispose]() {
111
+ return this.release();
112
+ }
113
+ }
114
+
115
+ /**
116
+ * @public
117
+ * 池连接事务
118
+ */
119
+ class DbPoolTransaction extends DbQuery {
120
+ mode;
121
+ constructor(connect, mode) {
122
+ super();
123
+ this.mode = mode;
124
+ this.#query = (sql) => {
125
+ return new Promise((resolve, reject) => {
126
+ this.#pending = connect()
127
+ .then((conn) => {
128
+ this.#conn = conn;
129
+ const promise = conn.multipleQuery("BEGIN" + (this.mode ? " TRANSACTION ISOLATION LEVEL " + this.mode : "") + ";\n" + sql);
130
+ this.#pending = promise;
131
+ this.#query = this.#queryAfter;
132
+ return promise;
133
+ })
134
+ .then((res) => {
135
+ this.#pending = undefined;
136
+ resolve(res[1]);
137
+ }, (e) => {
138
+ this.#pending = undefined;
139
+ reject(e);
140
+ if (this.#conn)
141
+ this.#release(this.#conn, e);
142
+ });
143
+ });
144
+ };
145
+ }
146
+ #pending;
147
+ #conn;
148
+ async commit() {
149
+ if (this.#pending)
150
+ throw new ParallelQueryError();
151
+ if (this.#conn) {
152
+ const promise = this.#conn.query("COMMIT");
153
+ this.#release(this.#conn);
154
+ await promise;
155
+ }
156
+ }
157
+ async rollback() {
158
+ if (this.#pending)
159
+ throw new ParallelQueryError();
160
+ if (this.#conn) {
161
+ const promise = this.#conn.query("ROLLBACK");
162
+ this.#release(this.#conn);
163
+ await promise;
164
+ }
165
+ }
166
+ savePoint(savePoint) {
167
+ return this.query("SAVEPOINT" + savePoint).then(() => { });
168
+ }
169
+ rollbackTo(savePoint) {
170
+ return this.query("ROLLBACK TO " + savePoint).then(() => { });
171
+ }
172
+ /** 拿到连接后执行这个 */
173
+ #queryAfter(sql) {
174
+ return this.#conn.query(sql).then((res) => {
175
+ this.#pending = undefined;
176
+ return res;
177
+ }, (e) => {
178
+ this.#pending = undefined;
179
+ this.#release(this.#conn, e);
180
+ throw e;
181
+ });
182
+ }
183
+ #query;
184
+ query(sql) {
185
+ if (this.#pending)
186
+ return Promise.reject(new ParallelQueryError());
187
+ return this.#query(sql.toString());
188
+ }
189
+ multipleQuery(sql) {
190
+ if (this.#pending)
191
+ return Promise.reject(new ParallelQueryError());
192
+ return this.#query(sql.toString());
193
+ }
194
+ #error;
195
+ #release(conn, error = new ConnectionNotAvailableError("Connection already release")) {
196
+ this.#error = error;
197
+ this.#query = () => Promise.reject(this.#error);
198
+ this.#conn = undefined;
199
+ conn.release();
200
+ }
201
+ get released() {
202
+ return !!this.#error;
203
+ }
204
+ [Symbol.asyncDispose]() {
205
+ return this.rollback();
206
+ }
207
+ }
208
+
209
+ export { ConnectionNotAvailableError, DbCursor, DbPoolConnection, DbPoolTransaction, DbQuery, ParallelQueryError };
@@ -1,38 +1,3 @@
1
- /******************************************************************************
2
- Copyright (c) Microsoft Corporation.
3
-
4
- Permission to use, copy, modify, and/or distribute this software for any
5
- purpose with or without fee is hereby granted.
6
-
7
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
9
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
10
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
11
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13
- PERFORMANCE OF THIS SOFTWARE.
14
- ***************************************************************************** */
15
- /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
16
-
17
-
18
- function __classPrivateFieldGet(receiver, state, kind, f) {
19
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
20
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
21
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
22
- }
23
-
24
- function __classPrivateFieldSet(receiver, state, value, kind, f) {
25
- if (kind === "m") throw new TypeError("Private method is not writable");
26
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
27
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
28
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
29
- }
30
-
31
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
32
- var e = new Error(message);
33
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
34
- };
35
-
36
1
  function condition(conditions, type = "AND") {
37
2
  if (typeof conditions === "function")
38
3
  conditions = conditions();
@@ -271,6 +236,7 @@ class SqlStatementDataset extends SqlStatement {
271
236
  }
272
237
  /** @public */
273
238
  class SqlTextStatementDataset extends SqlStatementDataset {
239
+ sql;
274
240
  constructor(sql) {
275
241
  super();
276
242
  this.sql = sql;
@@ -280,7 +246,6 @@ class SqlTextStatementDataset extends SqlStatementDataset {
280
246
  }
281
247
  }
282
248
 
283
- var _YourValuesAs_asName, _YourValuesAs_valuesStr, _YourValuesAs_sql;
284
249
  /**
285
250
  * SQL 原始字符类。可以使用 String 类代替,这只是为了推断类型
286
251
  * @public
@@ -326,6 +291,7 @@ class SqlValuesCreator {
326
291
  }
327
292
  }
328
293
  }
294
+ _map;
329
295
  /**
330
296
  * 将 JS 对象转为 SQL 的字符值的形式 。 undefined 将被转换为 DEFAULT
331
297
  * ```ts
@@ -544,21 +510,20 @@ class SqlValuesCreator {
544
510
  class YourValuesAs extends SqlStatementDataset {
545
511
  constructor(columns, asName, valuesStr) {
546
512
  super();
547
- _YourValuesAs_asName.set(this, void 0);
548
- _YourValuesAs_valuesStr.set(this, void 0);
549
- _YourValuesAs_sql.set(this, void 0);
550
- __classPrivateFieldSet(this, _YourValuesAs_asName, asName, "f");
551
- __classPrivateFieldSet(this, _YourValuesAs_valuesStr, valuesStr, "f");
552
- __classPrivateFieldSet(this, _YourValuesAs_sql, `(VALUES\n${__classPrivateFieldGet(this, _YourValuesAs_valuesStr, "f")})\nAS ${__classPrivateFieldGet(this, _YourValuesAs_asName, "f")}(${columns.join(",")})`, "f");
513
+ this.#asName = asName;
514
+ this.#valuesStr = valuesStr;
515
+ this.#sql = `(VALUES\n${this.#valuesStr})\nAS ${this.#asName}(${columns.join(",")})`;
553
516
  }
517
+ #asName;
518
+ #valuesStr;
519
+ #sql;
554
520
  toSelect() {
555
- return __classPrivateFieldGet(this, _YourValuesAs_sql, "f");
521
+ return this.#sql;
556
522
  }
557
523
  toString() {
558
- return __classPrivateFieldGet(this, _YourValuesAs_sql, "f");
524
+ return this.#sql;
559
525
  }
560
526
  }
561
- _YourValuesAs_asName = new WeakMap(), _YourValuesAs_valuesStr = new WeakMap(), _YourValuesAs_sql = new WeakMap();
562
527
  function initColumnAssert(keys, keys_types) {
563
528
  let key;
564
529
  let value;
@@ -618,7 +583,7 @@ const pgSqlTransformer = new Map([
618
583
  ],
619
584
  ]);
620
585
 
621
- var _Selection_instances, _a, _Selection_sql, _Selection_join;
586
+ var _a;
622
587
  /**
623
588
  * @public ChainSelectWhere 的默认实现
624
589
  */
@@ -673,34 +638,40 @@ class Selection {
673
638
  static from(selectable, as) {
674
639
  return new this(selectable, as);
675
640
  }
641
+ #sql;
676
642
  constructor(selectable, as) {
677
- _Selection_instances.add(this);
678
- _Selection_sql.set(this, void 0);
679
- __classPrivateFieldSet(this, _Selection_sql, fromAs(selectable, as), "f");
643
+ this.#sql = fromAs(selectable, as);
680
644
  }
681
645
  toString() {
682
- return "FROM " + __classPrivateFieldGet(this, _Selection_sql, "f");
646
+ return "FROM " + this.#sql;
647
+ }
648
+ #join(type, selectable, as, on) {
649
+ let sql = this.#sql + "\n" + type + " " + fromAs(selectable, as);
650
+ if (on) {
651
+ sql += " ON " + condition(on);
652
+ }
653
+ return new _a(sql);
683
654
  }
684
655
  fullJoin(selectable, as, on) {
685
- return __classPrivateFieldGet(this, _Selection_instances, "m", _Selection_join).call(this, "FULL JOIN", selectable, as, on);
656
+ return this.#join("FULL JOIN", selectable, as, on);
686
657
  }
687
658
  innerJoin(selectable, as, on) {
688
- return __classPrivateFieldGet(this, _Selection_instances, "m", _Selection_join).call(this, "INNER JOIN", selectable, as, on);
659
+ return this.#join("INNER JOIN", selectable, as, on);
689
660
  }
690
661
  leftJoin(selectable, as, on) {
691
- return __classPrivateFieldGet(this, _Selection_instances, "m", _Selection_join).call(this, "LEFT JOIN", selectable, as, on);
662
+ return this.#join("LEFT JOIN", selectable, as, on);
692
663
  }
693
664
  rightJoin(selectable, as, on) {
694
- return __classPrivateFieldGet(this, _Selection_instances, "m", _Selection_join).call(this, "RIGHT JOIN", selectable, as, on);
665
+ return this.#join("RIGHT JOIN", selectable, as, on);
695
666
  }
696
667
  naturalJoin(selectable, as) {
697
- return __classPrivateFieldGet(this, _Selection_instances, "m", _Selection_join).call(this, "NATURAL JOIN", selectable, as);
668
+ return this.#join("NATURAL JOIN", selectable, as);
698
669
  }
699
670
  crossJoin(selectable, as) {
700
- return __classPrivateFieldGet(this, _Selection_instances, "m", _Selection_join).call(this, "CROSS JOIN", selectable, as);
671
+ return this.#join("CROSS JOIN", selectable, as);
701
672
  }
702
673
  from(selectable, as) {
703
- return new _a(__classPrivateFieldGet(this, _Selection_sql, "f") + "," + fromAs(selectable, as));
674
+ return new _a(this.#sql + "," + fromAs(selectable, as));
704
675
  }
705
676
  select(columnsIn) {
706
677
  if (typeof columnsIn === "function")
@@ -710,15 +681,10 @@ class Selection {
710
681
  return new SqlSelectChain(sql);
711
682
  }
712
683
  }
713
- _a = Selection, _Selection_sql = new WeakMap(), _Selection_instances = new WeakSet(), _Selection_join = function _Selection_join(type, selectable, as, on) {
714
- let sql = __classPrivateFieldGet(this, _Selection_sql, "f") + "\n" + type + " " + fromAs(selectable, as);
715
- if (on) {
716
- sql += " ON " + condition(on);
717
- }
718
- return new _a(sql);
719
- };
684
+ _a = Selection;
720
685
 
721
686
  class SqlChainModify extends SqlStatement {
687
+ sql;
722
688
  constructor(sql) {
723
689
  super();
724
690
  this.sql = sql;
@@ -753,6 +719,7 @@ class SqlChainModify extends SqlStatement {
753
719
  }
754
720
  }
755
721
  class SqlInsertConflictBranch {
722
+ sql;
756
723
  constructor(sql) {
757
724
  this.sql = sql;
758
725
  }
@@ -780,6 +747,7 @@ class SqlInsertConflictBranch {
780
747
  * @public
781
748
  */
782
749
  class DbTable {
750
+ name;
783
751
  constructor(name) {
784
752
  this.name = name;
785
753
  }
@@ -840,6 +808,7 @@ class DbTable {
840
808
 
841
809
  /** @public */
842
810
  class DbTableQuery extends DbTable {
811
+ statement;
843
812
  constructor(name, statement) {
844
813
  super(name);
845
814
  this.statement = statement;
@@ -905,6 +874,11 @@ class DbTableQuery extends DbTable {
905
874
  * @public
906
875
  */
907
876
  class ColumnMeta {
877
+ type;
878
+ sqlType;
879
+ notNull;
880
+ isArray;
881
+ sqlDefault;
908
882
  constructor(type,
909
883
  /** 数据库原始数据类型 */
910
884
  sqlType,
@@ -932,6 +906,7 @@ class ColumnMeta {
932
906
  * @public
933
907
  */
934
908
  class YourTypeMap {
909
+ typeMap;
935
910
  static create(rawTypeMap) {
936
911
  return new this(rawTypeMap);
937
912
  }
@@ -957,18 +932,21 @@ function baseType(v) {
957
932
  * @public
958
933
  */
959
934
  class CustomDbType {
935
+ is;
936
+ name;
937
+ static bigint = new CustomDbType(baseType, "bigint");
938
+ static number = new CustomDbType(baseType, "number");
939
+ static string = new CustomDbType(baseType, "string");
940
+ static boolean = new CustomDbType(baseType, "boolean");
960
941
  constructor(is, name) {
961
942
  this.is = is;
962
943
  this.name = name;
963
944
  }
964
945
  }
965
- CustomDbType.bigint = new CustomDbType(baseType, "bigint");
966
- CustomDbType.number = new CustomDbType(baseType, "number");
967
- CustomDbType.string = new CustomDbType(baseType, "string");
968
- CustomDbType.boolean = new CustomDbType(baseType, "boolean");
969
946
 
970
947
  /** @public */
971
948
  class TypeChecker {
949
+ map;
972
950
  constructor(map) {
973
951
  this.map = map;
974
952
  }
@@ -1050,11 +1028,13 @@ function getErrStr(expect, actual) {
1050
1028
  * @public
1051
1029
  */
1052
1030
  class YourTable extends DbTableQuery {
1031
+ define;
1053
1032
  constructor(name, define, sqlValue) {
1054
1033
  super(name, sqlValue);
1055
1034
  this.define = define;
1056
1035
  this.columns = Object.keys(define);
1057
1036
  }
1037
+ columns;
1058
1038
  getColumnMeta(name) {
1059
1039
  return Reflect.get(this.define, name);
1060
1040
  }
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@asla/yoursql",
3
- "version": "0.8.1",
3
+ "version": "0.8.2",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "types": "./dist/mod.d.ts",
7
+ "packageManager": "pnpm@10.4.0",
7
8
  "scripts": {
8
9
  "ci:test": "vitest run",
9
10
  "ci:build": "pnpm rollup -c build/rollup.config.js",
@@ -16,6 +17,7 @@
16
17
  "devDependencies": {
17
18
  "@microsoft/api-extractor": "^7.47.9",
18
19
  "@rollup/plugin-typescript": "^12.1.0",
20
+ "prettier": "^3.5.3",
19
21
  "rollup": "^4.22.4",
20
22
  "tslib": "^2.7.0",
21
23
  "typescript": "^5.6.2",
@@ -27,7 +29,8 @@
27
29
  "url": "https://github.com/asnowc/yoursql"
28
30
  },
29
31
  "exports": {
30
- ".": "./dist/mod.js"
32
+ ".": "./dist/sql_gen.js",
33
+ "./client": "./dist/client.js"
31
34
  },
32
35
  "files": [
33
36
  "dist/**/*.js",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes