@pangza/orm 0.0.0-stage → 1.0.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.
Files changed (142) hide show
  1. package/README.md +2 -2
  2. package/dist/BaseMapper.d.ts +112 -0
  3. package/dist/BaseMapper.d.ts.map +1 -0
  4. package/dist/BaseMapper.js +653 -0
  5. package/dist/BaseMapper.js.map +1 -0
  6. package/dist/DataSource.d.ts +61 -0
  7. package/dist/DataSource.d.ts.map +1 -0
  8. package/dist/DataSource.js +350 -0
  9. package/dist/DataSource.js.map +1 -0
  10. package/dist/Db.d.ts +67 -0
  11. package/dist/Db.d.ts.map +1 -0
  12. package/dist/Db.js +222 -0
  13. package/dist/Db.js.map +1 -0
  14. package/dist/IdType.d.ts +22 -0
  15. package/dist/IdType.d.ts.map +1 -0
  16. package/dist/IdType.js +34 -0
  17. package/dist/IdType.js.map +1 -0
  18. package/dist/QueryWrapper.d.ts +110 -0
  19. package/dist/QueryWrapper.d.ts.map +1 -0
  20. package/dist/QueryWrapper.js +343 -0
  21. package/dist/QueryWrapper.js.map +1 -0
  22. package/dist/config.d.ts +12 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +80 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/dialect.d.ts +41 -0
  27. package/dist/dialect.d.ts.map +1 -0
  28. package/dist/dialect.js +171 -0
  29. package/dist/dialect.js.map +1 -0
  30. package/dist/enable.d.ts +12 -0
  31. package/dist/enable.d.ts.map +1 -0
  32. package/dist/enable.js +31 -0
  33. package/dist/enable.js.map +1 -0
  34. package/dist/entityDecorators.d.ts +77 -0
  35. package/dist/entityDecorators.d.ts.map +1 -0
  36. package/dist/entityDecorators.js +150 -0
  37. package/dist/entityDecorators.js.map +1 -0
  38. package/dist/errors.d.ts +11 -0
  39. package/dist/errors.d.ts.map +1 -0
  40. package/dist/errors.js +22 -0
  41. package/dist/errors.js.map +1 -0
  42. package/dist/fieldSelect.d.ts +49 -0
  43. package/dist/fieldSelect.d.ts.map +1 -0
  44. package/dist/fieldSelect.js +53 -0
  45. package/dist/fieldSelect.js.map +1 -0
  46. package/dist/fill.d.ts +8 -0
  47. package/dist/fill.d.ts.map +1 -0
  48. package/dist/fill.js +47 -0
  49. package/dist/fill.js.map +1 -0
  50. package/dist/flag.d.ts +2 -0
  51. package/dist/flag.d.ts.map +1 -0
  52. package/dist/flag.js +8 -0
  53. package/dist/flag.js.map +1 -0
  54. package/dist/hydrate.d.ts +38 -0
  55. package/dist/hydrate.d.ts.map +1 -0
  56. package/dist/hydrate.js +325 -0
  57. package/dist/hydrate.js.map +1 -0
  58. package/dist/identifier.d.ts +14 -0
  59. package/dist/identifier.d.ts.map +1 -0
  60. package/dist/identifier.js +51 -0
  61. package/dist/identifier.js.map +1 -0
  62. package/dist/index.d.ts +41 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +122 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/relation.d.ts +72 -0
  67. package/dist/relation.d.ts.map +1 -0
  68. package/dist/relation.js +150 -0
  69. package/dist/relation.js.map +1 -0
  70. package/dist/resultMap.d.ts +7 -0
  71. package/dist/resultMap.d.ts.map +1 -0
  72. package/dist/resultMap.js +25 -0
  73. package/dist/resultMap.js.map +1 -0
  74. package/dist/security.d.ts +16 -0
  75. package/dist/security.d.ts.map +1 -0
  76. package/dist/security.js +50 -0
  77. package/dist/security.js.map +1 -0
  78. package/dist/sqlDecorators.d.ts +60 -0
  79. package/dist/sqlDecorators.d.ts.map +1 -0
  80. package/dist/sqlDecorators.js +147 -0
  81. package/dist/sqlDecorators.js.map +1 -0
  82. package/dist/sqlLog.d.ts +30 -0
  83. package/dist/sqlLog.d.ts.map +1 -0
  84. package/dist/sqlLog.js +183 -0
  85. package/dist/sqlLog.js.map +1 -0
  86. package/dist/sqlTemplate.d.ts +38 -0
  87. package/dist/sqlTemplate.d.ts.map +1 -0
  88. package/dist/sqlTemplate.js +112 -0
  89. package/dist/sqlTemplate.js.map +1 -0
  90. package/dist/table.d.ts +17 -0
  91. package/dist/table.d.ts.map +1 -0
  92. package/dist/table.js +55 -0
  93. package/dist/table.js.map +1 -0
  94. package/dist/tableSearch.d.ts +72 -0
  95. package/dist/tableSearch.d.ts.map +1 -0
  96. package/dist/tableSearch.js +232 -0
  97. package/dist/tableSearch.js.map +1 -0
  98. package/dist/transactional.d.ts +27 -0
  99. package/dist/transactional.d.ts.map +1 -0
  100. package/dist/transactional.js +57 -0
  101. package/dist/transactional.js.map +1 -0
  102. package/dist/types.d.ts +155 -0
  103. package/dist/types.d.ts.map +1 -0
  104. package/dist/types.js +3 -0
  105. package/dist/types.js.map +1 -0
  106. package/dist/xml/MapperXml.d.ts +24 -0
  107. package/dist/xml/MapperXml.d.ts.map +1 -0
  108. package/dist/xml/MapperXml.js +92 -0
  109. package/dist/xml/MapperXml.js.map +1 -0
  110. package/dist/xml/execute.d.ts +12 -0
  111. package/dist/xml/execute.d.ts.map +1 -0
  112. package/dist/xml/execute.js +54 -0
  113. package/dist/xml/execute.js.map +1 -0
  114. package/dist/xml/index.d.ts +11 -0
  115. package/dist/xml/index.d.ts.map +1 -0
  116. package/dist/xml/index.js +29 -0
  117. package/dist/xml/index.js.map +1 -0
  118. package/dist/xml/loadMappers.d.ts +14 -0
  119. package/dist/xml/loadMappers.d.ts.map +1 -0
  120. package/dist/xml/loadMappers.js +171 -0
  121. package/dist/xml/loadMappers.js.map +1 -0
  122. package/dist/xml/parseMapperXml.d.ts +6 -0
  123. package/dist/xml/parseMapperXml.d.ts.map +1 -0
  124. package/dist/xml/parseMapperXml.js +225 -0
  125. package/dist/xml/parseMapperXml.js.map +1 -0
  126. package/dist/xml/registry.d.ts +15 -0
  127. package/dist/xml/registry.d.ts.map +1 -0
  128. package/dist/xml/registry.js +57 -0
  129. package/dist/xml/registry.js.map +1 -0
  130. package/dist/xml/renderSql.d.ts +6 -0
  131. package/dist/xml/renderSql.d.ts.map +1 -0
  132. package/dist/xml/renderSql.js +187 -0
  133. package/dist/xml/renderSql.js.map +1 -0
  134. package/dist/xml/types.d.ts +52 -0
  135. package/dist/xml/types.d.ts.map +1 -0
  136. package/dist/xml/types.js +3 -0
  137. package/dist/xml/types.js.map +1 -0
  138. package/dist/xml/xmlMapper.d.ts +16 -0
  139. package/dist/xml/xmlMapper.d.ts.map +1 -0
  140. package/dist/xml/xmlMapper.js +49 -0
  141. package/dist/xml/xmlMapper.js.map +1 -0
  142. package/package.json +35 -4
package/dist/Db.js ADDED
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDialect = exports.DataSource = void 0;
4
+ const sqlLog_1 = require("./sqlLog");
5
+ const DataSource_1 = require("./DataSource");
6
+ Object.defineProperty(exports, "DataSource", { enumerable: true, get: function () { return DataSource_1.DataSource; } });
7
+ const dialect_1 = require("./dialect");
8
+ Object.defineProperty(exports, "getDialect", { enumerable: true, get: function () { return dialect_1.getDialect; } });
9
+ const config_1 = require("@pangza/core/config");
10
+ /**
11
+ * 多数据源门面(默认名 default)。
12
+ *
13
+ * @example
14
+ * // 默认库(项目根目录 application*.yaml 的 datasource.default)
15
+ * await Db.query("SELECT 1")
16
+ *
17
+ * // 注册 PostgreSQL
18
+ * Db.register("pg", { type: "postgresql", host: "127.0.0.1", database: "app", user: "postgres", password: "x" })
19
+ * await Db.queryOn("pg", 'SELECT * FROM "user" WHERE id = ?', [1])
20
+ *
21
+ * // Mapper / 装饰器指定数据源
22
+ * @Mapper(UserEntity, { datasource: "pg" })
23
+ * @Select("SELECT ...", { datasource: "pg" })
24
+ */
25
+ class Db {
26
+ /** 注册或覆盖数据源 */
27
+ static register(nameOrConfig, config) {
28
+ let name;
29
+ let cfg;
30
+ if (typeof nameOrConfig === "string") {
31
+ name = nameOrConfig.trim() || this.DEFAULT;
32
+ cfg = { ...(config ?? {}), name };
33
+ }
34
+ else {
35
+ cfg = { ...nameOrConfig };
36
+ name = (cfg.name ?? this.DEFAULT).trim() || this.DEFAULT;
37
+ cfg.name = name;
38
+ }
39
+ const ds = new DataSource_1.DataSource(cfg);
40
+ this.sources.set(name, ds);
41
+ return ds;
42
+ }
43
+ /** 确保默认数据源(来自 YAML datasource.default);并按需注册 postgresql / sqlserver */
44
+ static ensureDefault() {
45
+ if (!this.sources.has(this.DEFAULT)) {
46
+ this.register(this.DEFAULT, {
47
+ name: this.DEFAULT,
48
+ type: config_1.mysqlConfig.type || "mysql",
49
+ host: config_1.mysqlConfig.host,
50
+ port: config_1.mysqlConfig.port,
51
+ user: config_1.mysqlConfig.user,
52
+ password: config_1.mysqlConfig.password,
53
+ database: config_1.mysqlConfig.database,
54
+ connectionLimit: config_1.mysqlConfig.connectionLimit,
55
+ });
56
+ }
57
+ this.registerOptionalFromEnv();
58
+ return this.sources.get(this.DEFAULT);
59
+ }
60
+ /** YAML 中 postgresql / sqlserver 的 host 非空时自动注册命名数据源 */
61
+ static registerOptionalFromEnv() {
62
+ if (config_1.postgresqlConfig.host && !this.sources.has("postgresql")) {
63
+ this.register("postgresql", {
64
+ name: "postgresql",
65
+ type: "postgresql",
66
+ host: config_1.postgresqlConfig.host,
67
+ port: config_1.postgresqlConfig.port,
68
+ user: config_1.postgresqlConfig.user,
69
+ password: config_1.postgresqlConfig.password,
70
+ database: config_1.postgresqlConfig.database,
71
+ connectionLimit: config_1.postgresqlConfig.connectionLimit,
72
+ });
73
+ }
74
+ if (config_1.mssqlConfig.host && !this.sources.has("sqlserver")) {
75
+ this.register("sqlserver", {
76
+ name: "sqlserver",
77
+ type: "sqlserver",
78
+ host: config_1.mssqlConfig.host,
79
+ port: config_1.mssqlConfig.port,
80
+ user: config_1.mssqlConfig.user,
81
+ password: config_1.mssqlConfig.password,
82
+ database: config_1.mssqlConfig.database,
83
+ connectionLimit: config_1.mssqlConfig.connectionLimit,
84
+ });
85
+ }
86
+ }
87
+ static getDataSource(name = this.DEFAULT) {
88
+ if (name === this.DEFAULT) {
89
+ return this.ensureDefault();
90
+ }
91
+ const ds = this.sources.get(name);
92
+ if (!ds) {
93
+ this.ensureDefault();
94
+ const registered = [...this.sources.keys()].join(", ") || "(无)";
95
+ throw new Error(`未注册数据源 [${name}]。已注册: ${registered}。请先 Db.register("${name}", { type, host, ... })`);
96
+ }
97
+ return ds;
98
+ }
99
+ /** 按数据库类型查找唯一数据源(用于 @Select({ db: "postgresql" })) */
100
+ static findByType(type) {
101
+ this.ensureDefault();
102
+ const dialect = (0, dialect_1.getDialect)(type);
103
+ const matched = [...this.sources.entries()].filter(([, ds]) => ds.type === dialect.type);
104
+ if (matched.length === 0) {
105
+ throw new Error(`没有已注册的 ${dialect.type} 数据源`);
106
+ }
107
+ if (matched.length > 1) {
108
+ throw new Error(`存在多个 ${dialect.type} 数据源 (${matched
109
+ .map(([n]) => n)
110
+ .join(", ")}),请用 datasource 指定名称`);
111
+ }
112
+ return matched[0][0];
113
+ }
114
+ static getDialect(name = this.DEFAULT) {
115
+ return this.getDataSource(name).dialect;
116
+ }
117
+ static listDataSources() {
118
+ this.ensureDefault();
119
+ return [...this.sources.keys()];
120
+ }
121
+ /** @deprecated 使用 register;保留覆盖默认连接配置 */
122
+ static configure(config = {}) {
123
+ this.register(this.DEFAULT, {
124
+ type: config_1.mysqlConfig.type || "mysql",
125
+ host: config_1.mysqlConfig.host,
126
+ port: config_1.mysqlConfig.port,
127
+ user: config_1.mysqlConfig.user,
128
+ password: config_1.mysqlConfig.password,
129
+ database: config_1.mysqlConfig.database,
130
+ connectionLimit: config_1.mysqlConfig.connectionLimit,
131
+ ...config,
132
+ name: this.DEFAULT,
133
+ });
134
+ }
135
+ static isReady(name = this.DEFAULT) {
136
+ return this.sources.get(name)?.isReady() ?? false;
137
+ }
138
+ /** 测试注入默认池驱动 */
139
+ static usePoolForTest(pool) {
140
+ const ds = this.ensureDefault();
141
+ // 兼容旧测试:传入 mysql2 Pool
142
+ if (pool && typeof pool.execute === "function") {
143
+ const mysqlPool = pool;
144
+ ds.useDriverForTest({
145
+ async query(sql, params) {
146
+ const [rows] = await mysqlPool.execute(sql, params);
147
+ return rows;
148
+ },
149
+ async getConnection() {
150
+ const conn = await mysqlPool.getConnection();
151
+ return {
152
+ async query(sql, params) {
153
+ const [rows] = await conn.execute(sql, params);
154
+ return rows;
155
+ },
156
+ async begin() {
157
+ await conn.beginTransaction();
158
+ },
159
+ async commit() {
160
+ await conn.commit();
161
+ },
162
+ async rollback() {
163
+ await conn.rollback();
164
+ },
165
+ release() {
166
+ conn.release();
167
+ },
168
+ };
169
+ },
170
+ async end() {
171
+ await mysqlPool.end();
172
+ },
173
+ });
174
+ return;
175
+ }
176
+ ds.useDriverForTest(pool);
177
+ }
178
+ static async connect(config) {
179
+ if (config)
180
+ this.configure(config);
181
+ await this.ensureDefault().connect();
182
+ }
183
+ static async connectAll() {
184
+ this.ensureDefault();
185
+ await Promise.all([...this.sources.values()].map((ds) => ds.connect()));
186
+ }
187
+ static async disconnect(name) {
188
+ if (name) {
189
+ await this.sources.get(name)?.disconnect();
190
+ return;
191
+ }
192
+ await Promise.all([...this.sources.values()].map((ds) => ds.disconnect()));
193
+ }
194
+ static inTransaction(name = this.DEFAULT) {
195
+ return this.getDataSource(name).inTransaction();
196
+ }
197
+ /** 默认数据源执行 SQL */
198
+ static async query(sql, params = []) {
199
+ return this.queryOn(this.DEFAULT, sql, params);
200
+ }
201
+ /** 指定数据源执行 SQL */
202
+ static async queryOn(datasource, sql, params = []) {
203
+ return (0, sqlLog_1.withSqlLog)(sql, params, async () => {
204
+ const ds = this.getDataSource(datasource);
205
+ return ds.query(sql, params);
206
+ });
207
+ }
208
+ static async getPool() {
209
+ await this.ensureDefault().connect();
210
+ return this.ensureDefault();
211
+ }
212
+ static async transaction(fn, options) {
213
+ return this.transactionOn(this.DEFAULT, fn, options);
214
+ }
215
+ static async transactionOn(datasource, fn, options) {
216
+ return this.getDataSource(datasource).transaction(fn, options);
217
+ }
218
+ }
219
+ Db.sources = new Map();
220
+ Db.DEFAULT = "default";
221
+ exports.default = Db;
222
+ //# sourceMappingURL=Db.js.map
package/dist/Db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Db.js","sourceRoot":"","sources":["../src/Db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 主键生成策略(对齐 MyBatis-Plus IdType)
3
+ *
4
+ * @example
5
+ * @TableId({ type: IdType.ASSIGN_ID })
6
+ * id!: string;
7
+ */
8
+ export declare enum IdType {
9
+ /** 数据库自增(不向 INSERT 写入 id,插入后回填) */
10
+ AUTO = "AUTO",
11
+ /** 未设置:跟随全局 configureOrm / ORM_ID_TYPE */
12
+ NONE = "NONE",
13
+ /** 插入前自行赋值,框架不生成 */
14
+ INPUT = "INPUT",
15
+ /** 雪花算法分配(空才生成),适合 number / string */
16
+ ASSIGN_ID = "ASSIGN_ID",
17
+ /** UUID(去横线)分配,适合 string */
18
+ ASSIGN_UUID = "ASSIGN_UUID"
19
+ }
20
+ export type IdTypeValue = IdType | keyof typeof IdType | string;
21
+ export declare function resolveIdType(value?: IdTypeValue | null): IdType;
22
+ //# sourceMappingURL=IdType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdType.d.ts","sourceRoot":"","sources":["../src/IdType.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,oBAAY,MAAM;IAChB,mCAAmC;IACnC,IAAI,SAAS;IACb,0CAA0C;IAC1C,IAAI,SAAS;IACb,oBAAoB;IACpB,KAAK,UAAU;IACf,sCAAsC;IACtC,SAAS,cAAc;IACvB,4BAA4B;IAC5B,WAAW,gBAAgB;CAC5B;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,OAAO,MAAM,GAAG,MAAM,CAAC;AAEhE,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,CAOhE"}
package/dist/IdType.js ADDED
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IdType = void 0;
4
+ exports.resolveIdType = resolveIdType;
5
+ /**
6
+ * 主键生成策略(对齐 MyBatis-Plus IdType)
7
+ *
8
+ * @example
9
+ * @TableId({ type: IdType.ASSIGN_ID })
10
+ * id!: string;
11
+ */
12
+ var IdType;
13
+ (function (IdType) {
14
+ /** 数据库自增(不向 INSERT 写入 id,插入后回填) */
15
+ IdType["AUTO"] = "AUTO";
16
+ /** 未设置:跟随全局 configureOrm / ORM_ID_TYPE */
17
+ IdType["NONE"] = "NONE";
18
+ /** 插入前自行赋值,框架不生成 */
19
+ IdType["INPUT"] = "INPUT";
20
+ /** 雪花算法分配(空才生成),适合 number / string */
21
+ IdType["ASSIGN_ID"] = "ASSIGN_ID";
22
+ /** UUID(去横线)分配,适合 string */
23
+ IdType["ASSIGN_UUID"] = "ASSIGN_UUID";
24
+ })(IdType || (exports.IdType = IdType = {}));
25
+ function resolveIdType(value) {
26
+ if (value == null || value === "")
27
+ return IdType.NONE;
28
+ const key = String(value).toUpperCase();
29
+ if (key in IdType) {
30
+ return IdType[key];
31
+ }
32
+ throw new Error(`不支持的 IdType: ${value}`);
33
+ }
34
+ //# sourceMappingURL=IdType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdType.js","sourceRoot":"","sources":["../src/IdType.ts"],"names":[],"mappings":";;;AAsBA,sCAOC;AA7BD;;;;;;GAMG;AACH,IAAY,MAWX;AAXD,WAAY,MAAM;IAChB,mCAAmC;IACnC,uBAAa,CAAA;IACb,0CAA0C;IAC1C,uBAAa,CAAA;IACb,oBAAoB;IACpB,yBAAe,CAAA;IACf,sCAAsC;IACtC,iCAAuB,CAAA;IACvB,4BAA4B;IAC5B,qCAA2B,CAAA;AAC7B,CAAC,EAXW,MAAM,sBAAN,MAAM,QAWjB;AAID,SAAgB,aAAa,CAAC,KAA0B;IACtD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACtD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC,GAA0B,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,110 @@
1
+ import type { SqlFragment } from "./types";
2
+ import { type Dialect, type DbType } from "./dialect";
3
+ export { assertIdent } from "./security";
4
+ export interface QueryWrapperOptions {
5
+ /** 方言或数据库类型,影响列名引号;默认 mysql */
6
+ dialect?: Dialect | DbType | string;
7
+ }
8
+ /**
9
+ * 条件构造器(对齐 MyBatis-Plus QueryWrapper 常用 API)
10
+ * 列名白名单校验,值一律参数绑定。
11
+ *
12
+ * @example
13
+ * new QueryWrapper().select('id', 'username').eq('status', 1).orderByDesc('id')
14
+ * new QueryWrapper({ dialect: "postgresql" }).eq("status", 1)
15
+ */
16
+ export declare class QueryWrapper {
17
+ private conditions;
18
+ private orders;
19
+ private selectColumns;
20
+ private groupColumns;
21
+ private havingClauses;
22
+ private lastSqlText;
23
+ private nextJoin;
24
+ private skipLogicDelete;
25
+ private readonly dialect;
26
+ constructor(options?: QueryWrapperOptions | Dialect | DbType | string);
27
+ getDialect(): Dialect;
28
+ /** 本条查询忽略逻辑删除条件(查回收站等) */
29
+ ignoreLogicDelete(): this;
30
+ isIgnoreLogicDelete(): boolean;
31
+ /** 复制一份,避免 Mapper 追加逻辑删除时改到调用方 */
32
+ clone(): QueryWrapper;
33
+ /** 下一条件用 OR 连接 */
34
+ or(): this;
35
+ /** 下一条件用 AND 连接(默认) */
36
+ and(): this;
37
+ private add;
38
+ private col;
39
+ /**
40
+ * 指定查询列;不传则默认 SELECT *
41
+ * @example wrapper.select('id', 'username', 'status')
42
+ */
43
+ select(...columns: string[]): this;
44
+ eq(column: string, value: unknown): this;
45
+ /** field = value OR field IS NULL(兼容历史未填逻辑删除字段的数据) */
46
+ eqOrIsNull(column: string, value: unknown): this;
47
+ ne(column: string, value: unknown): this;
48
+ gt(column: string, value: unknown): this;
49
+ ge(column: string, value: unknown): this;
50
+ lt(column: string, value: unknown): this;
51
+ le(column: string, value: unknown): this;
52
+ private likePattern;
53
+ /** 模糊查询;已转义 % / _,避免通配符注入 */
54
+ like(column: string, value: string): this;
55
+ /** 左模糊:`%value`(对齐 MP likeLeft) */
56
+ likeLeft(column: string, value: string): this;
57
+ /** 右模糊:`value%`(对齐 MP likeRight) */
58
+ likeRight(column: string, value: string): this;
59
+ /** `NOT LIKE %value%`(已转义通配符) */
60
+ notLike(column: string, value: string): this;
61
+ /**
62
+ * EXISTS (子查询)。子查询自行保证安全;参数走绑定。
63
+ * @example wrapper.exists('SELECT 1 FROM role_user ru WHERE ru.user_id = t.id AND ru.role_id = ?', [1])
64
+ */
65
+ exists(sql: string, params?: unknown[]): this;
66
+ /** NOT EXISTS (子查询) */
67
+ notExists(sql: string, params?: unknown[]): this;
68
+ /**
69
+ * 追加自定义条件片段(参数绑定)。
70
+ * 仅用于无法用 eq/like 表达的括号 OR 等场景;列名须自行保证安全。
71
+ */
72
+ apply(sql: string, params?: unknown[]): this;
73
+ /** 括号分组:fn 内条件作为整体与外层 AND/OR 连接(内层沿用本 Wrapper 方言) */
74
+ nested(fn: (w: QueryWrapper) => void): this;
75
+ /** 大数组按 batchInSize 拆成多个 IN,用 OR / AND 连接 */
76
+ private inChunks;
77
+ in(column: string, values: unknown[]): this;
78
+ /** `NOT IN (...)`;空数组视为永真(不加限制),与 in([]) 永假对称 */
79
+ notIn(column: string, values: unknown[]): this;
80
+ between(column: string, start: unknown, end: unknown): this;
81
+ notBetween(column: string, start: unknown, end: unknown): this;
82
+ /**
83
+ * 按已注册数据源方言创建 Wrapper(避免默认 mysql 引号用在 PG/MSSQL 上)。
84
+ * @example QueryWrapper.forDatasource("postgresql").eq("status", 1)
85
+ */
86
+ static forDatasource(name?: string): QueryWrapper;
87
+ isNull(column: string): this;
88
+ isNotNull(column: string): this;
89
+ orderByAsc(column: string): this;
90
+ orderByDesc(column: string): this;
91
+ /**
92
+ * GROUP BY 列(白名单标识符)。可多次调用追加。
93
+ * @example wrapper.select("status").groupBy("status")
94
+ */
95
+ groupBy(...columns: string[]): this;
96
+ /**
97
+ * HAVING 条件(参数绑定)。可多次调用,以 AND 连接。
98
+ * 聚合表达式由调用方书写,列名请自行保证安全。
99
+ * @example wrapper.groupBy("status").having("COUNT(*) > ?", [1])
100
+ */
101
+ having(sql: string, params?: unknown[]): this;
102
+ /**
103
+ * 追加安全白名单片段(禁止任意 SQL)。
104
+ * 仅允许:LIMIT n [OFFSET m] / FOR UPDATE / LOCK IN SHARE MODE
105
+ */
106
+ last(sql: string): this;
107
+ /** 生成 SELECT / WHERE / GROUP BY / HAVING / ORDER BY / LAST 片段 */
108
+ build(): SqlFragment;
109
+ }
110
+ //# sourceMappingURL=QueryWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryWrapper.d.ts","sourceRoot":"","sources":["../src/QueryWrapper.ts"],"names":[],"mappings":"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"}