bettersqlkeza 1.0.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/LICENSE +21 -0
- package/README.md +115 -0
- package/dist/bettersql.d.ts +107 -0
- package/dist/bettersql.d.ts.map +1 -0
- package/dist/bettersql.js +181 -0
- package/dist/bettersql.js.map +1 -0
- package/dist/delete-builder.d.ts +58 -0
- package/dist/delete-builder.d.ts.map +1 -0
- package/dist/delete-builder.js +129 -0
- package/dist/delete-builder.js.map +1 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/insert-builder.d.ts +62 -0
- package/dist/insert-builder.d.ts.map +1 -0
- package/dist/insert-builder.js +136 -0
- package/dist/insert-builder.js.map +1 -0
- package/dist/model.d.ts +185 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +404 -0
- package/dist/model.js.map +1 -0
- package/dist/query-builder.d.ts +140 -0
- package/dist/query-builder.d.ts.map +1 -0
- package/dist/query-builder.js +298 -0
- package/dist/query-builder.js.map +1 -0
- package/dist/raw-query-builder.d.ts +70 -0
- package/dist/raw-query-builder.d.ts.map +1 -0
- package/dist/raw-query-builder.js +118 -0
- package/dist/raw-query-builder.js.map +1 -0
- package/dist/result-proxy.d.ts +63 -0
- package/dist/result-proxy.d.ts.map +1 -0
- package/dist/result-proxy.js +166 -0
- package/dist/result-proxy.js.map +1 -0
- package/dist/types.d.ts +87 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/update-builder.d.ts +59 -0
- package/dist/update-builder.d.ts.map +1 -0
- package/dist/update-builder.js +136 -0
- package/dist/update-builder.js.map +1 -0
- package/dist/where-builder.d.ts +18 -0
- package/dist/where-builder.d.ts.map +1 -0
- package/dist/where-builder.js +117 -0
- package/dist/where-builder.js.map +1 -0
- package/package.json +48 -0
package/dist/model.js
ADDED
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Model = void 0;
|
|
4
|
+
exports.generateCreateTableSQL = generateCreateTableSQL;
|
|
5
|
+
const query_builder_1 = require("./query-builder");
|
|
6
|
+
const raw_query_builder_1 = require("./raw-query-builder");
|
|
7
|
+
const delete_builder_1 = require("./delete-builder");
|
|
8
|
+
const update_builder_1 = require("./update-builder");
|
|
9
|
+
const insert_builder_1 = require("./insert-builder");
|
|
10
|
+
const where_builder_1 = require("./where-builder");
|
|
11
|
+
const result_proxy_1 = require("./result-proxy");
|
|
12
|
+
/**
|
|
13
|
+
* Model<T> - Represents a database table with typed CRUD operations
|
|
14
|
+
*/
|
|
15
|
+
class Model {
|
|
16
|
+
db;
|
|
17
|
+
tableName;
|
|
18
|
+
schema;
|
|
19
|
+
statementCache;
|
|
20
|
+
primaryKey = null;
|
|
21
|
+
constructor(db, tableName, schema, statementCache) {
|
|
22
|
+
this.db = db;
|
|
23
|
+
this.tableName = tableName;
|
|
24
|
+
this.schema = schema;
|
|
25
|
+
this.statementCache = statementCache;
|
|
26
|
+
// Find primary key
|
|
27
|
+
for (const [key, def] of Object.entries(schema)) {
|
|
28
|
+
if (def.primary) {
|
|
29
|
+
this.primaryKey = key;
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get or create a cached prepared statement
|
|
36
|
+
*/
|
|
37
|
+
getStatement(sql) {
|
|
38
|
+
let stmt = this.statementCache.get(sql);
|
|
39
|
+
if (!stmt) {
|
|
40
|
+
stmt = this.db.prepare(sql);
|
|
41
|
+
this.statementCache.set(sql, stmt);
|
|
42
|
+
}
|
|
43
|
+
return stmt;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a QueryBuilder with optional initial WHERE conditions
|
|
47
|
+
*/
|
|
48
|
+
find(where) {
|
|
49
|
+
return new query_builder_1.QueryBuilder(this.db, this.tableName, this.statementCache, where, this.primaryKey);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Create a QueryBuilder for SELECT queries with fluent chaining
|
|
53
|
+
* @example
|
|
54
|
+
* const users = User.select().where("lid", "=", id).get();
|
|
55
|
+
* const activeUsers = User.select().where({ status: "active" }).orderBy("name").all();
|
|
56
|
+
*/
|
|
57
|
+
select(where) {
|
|
58
|
+
return new query_builder_1.QueryBuilder(this.db, this.tableName, this.statementCache, where, this.primaryKey);
|
|
59
|
+
}
|
|
60
|
+
query(whereOrRawSql, params) {
|
|
61
|
+
// If a string is passed, treat it as raw SQL
|
|
62
|
+
if (typeof whereOrRawSql === 'string') {
|
|
63
|
+
return new raw_query_builder_1.RawQueryBuilder(this.db, this.tableName, this.statementCache, this.primaryKey, whereOrRawSql, params);
|
|
64
|
+
}
|
|
65
|
+
// Otherwise, create a QueryBuilder
|
|
66
|
+
return new query_builder_1.QueryBuilder(this.db, this.tableName, this.statementCache, whereOrRawSql, this.primaryKey);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Find a record by its primary key
|
|
70
|
+
* Returns a result with chainable methods like delete(), update(), save()
|
|
71
|
+
*/
|
|
72
|
+
findById(id) {
|
|
73
|
+
if (!this.primaryKey) {
|
|
74
|
+
throw new Error(`No primary key defined for table "${this.tableName}"`);
|
|
75
|
+
}
|
|
76
|
+
const sql = `SELECT * FROM "${this.tableName}" WHERE "${this.primaryKey}" = ?`;
|
|
77
|
+
const stmt = this.getStatement(sql);
|
|
78
|
+
const data = stmt.get(id) || null;
|
|
79
|
+
return (0, result_proxy_1.createResultProxy)(this.db, this.tableName, this.statementCache, this.primaryKey, data);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Insert a new record (immediate execution)
|
|
83
|
+
*/
|
|
84
|
+
insert(data) {
|
|
85
|
+
const keys = Object.keys(data);
|
|
86
|
+
const values = Object.values(data);
|
|
87
|
+
const placeholders = keys.map(() => '?').join(', ');
|
|
88
|
+
const columns = keys.map((k) => `"${k}"`).join(', ');
|
|
89
|
+
const sql = `INSERT INTO "${this.tableName}" (${columns}) VALUES (${placeholders})`;
|
|
90
|
+
const stmt = this.getStatement(sql);
|
|
91
|
+
const info = stmt.run(...values);
|
|
92
|
+
// Use the lastInsertRowid from stmt.run() return value (more efficient)
|
|
93
|
+
if (this.primaryKey) {
|
|
94
|
+
return this.findById(Number(info.lastInsertRowid));
|
|
95
|
+
}
|
|
96
|
+
// If no primary key, return the inserted data merged with defaults
|
|
97
|
+
return { ...data };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create an InsertBuilder for fluent chaining with options like ifNotExists, orIgnore, orReplace
|
|
101
|
+
* @example
|
|
102
|
+
* // Insert with existence check (avoids UNIQUE constraint errors)
|
|
103
|
+
* const user = User.insertBuilder({ email: "test@example.com", name: "Test" })
|
|
104
|
+
* .ifNotExists({ email: "test@example.com" })
|
|
105
|
+
* .run();
|
|
106
|
+
*
|
|
107
|
+
* // Insert with OR IGNORE (silently skip on conflict)
|
|
108
|
+
* const user = User.insertBuilder({ email: "test@example.com", name: "Test" })
|
|
109
|
+
* .orIgnore()
|
|
110
|
+
* .run();
|
|
111
|
+
*
|
|
112
|
+
* // Insert with OR REPLACE (replace on conflict)
|
|
113
|
+
* const user = User.insertBuilder({ email: "test@example.com", name: "Test" })
|
|
114
|
+
* .orReplace()
|
|
115
|
+
* .run();
|
|
116
|
+
*/
|
|
117
|
+
insertBuilder(data) {
|
|
118
|
+
return new insert_builder_1.InsertBuilder(this.db, this.tableName, this.statementCache, data, this.schema, this.primaryKey);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Insert multiple records at once
|
|
122
|
+
*/
|
|
123
|
+
insertMany(dataArray) {
|
|
124
|
+
if (dataArray.length === 0)
|
|
125
|
+
return [];
|
|
126
|
+
const results = [];
|
|
127
|
+
for (const data of dataArray) {
|
|
128
|
+
results.push(this.insert(data));
|
|
129
|
+
}
|
|
130
|
+
return results;
|
|
131
|
+
}
|
|
132
|
+
update(whereOrData, data) {
|
|
133
|
+
// If only one argument, return an UpdateBuilder for chaining
|
|
134
|
+
if (data === undefined) {
|
|
135
|
+
return new update_builder_1.UpdateBuilder(this.db, this.tableName, this.statementCache, whereOrData);
|
|
136
|
+
}
|
|
137
|
+
// Otherwise, execute immediately (existing behavior)
|
|
138
|
+
const where = whereOrData;
|
|
139
|
+
const updateKeys = Object.keys(data);
|
|
140
|
+
const updateValues = Object.values(data);
|
|
141
|
+
const setClauses = updateKeys.map((k) => `"${k}" = ?`).join(', ');
|
|
142
|
+
const whereKeys = Object.keys(where);
|
|
143
|
+
const whereValues = Object.values(where);
|
|
144
|
+
const whereConditions = whereKeys.map((k) => `"${k}" = ?`).join(' AND ');
|
|
145
|
+
const sql = `UPDATE "${this.tableName}" SET ${setClauses} WHERE ${whereConditions}`;
|
|
146
|
+
const stmt = this.getStatement(sql);
|
|
147
|
+
const info = stmt.run(...updateValues, ...whereValues);
|
|
148
|
+
// Use the changes from stmt.run() return value (more efficient)
|
|
149
|
+
return info.changes;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Update a record by its primary key
|
|
153
|
+
*/
|
|
154
|
+
updateById(id, data) {
|
|
155
|
+
if (!this.primaryKey) {
|
|
156
|
+
throw new Error(`No primary key defined for table "${this.tableName}"`);
|
|
157
|
+
}
|
|
158
|
+
const changes = this.update({ [this.primaryKey]: id }, data);
|
|
159
|
+
return changes > 0;
|
|
160
|
+
}
|
|
161
|
+
delete(where) {
|
|
162
|
+
// If no argument, return a DeleteBuilder for chaining
|
|
163
|
+
if (where === undefined) {
|
|
164
|
+
return new delete_builder_1.DeleteBuilder(this.db, this.tableName, this.statementCache);
|
|
165
|
+
}
|
|
166
|
+
// Otherwise, execute immediately (existing behavior)
|
|
167
|
+
const whereKeys = Object.keys(where);
|
|
168
|
+
const whereValues = Object.values(where);
|
|
169
|
+
const whereConditions = whereKeys.map((k) => `"${k}" = ?`).join(' AND ');
|
|
170
|
+
const sql = `DELETE FROM "${this.tableName}" WHERE ${whereConditions}`;
|
|
171
|
+
const stmt = this.getStatement(sql);
|
|
172
|
+
const info = stmt.run(...whereValues);
|
|
173
|
+
// Use the changes from stmt.run() return value (more efficient)
|
|
174
|
+
return info.changes;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Delete a record by its primary key
|
|
178
|
+
*/
|
|
179
|
+
deleteById(id) {
|
|
180
|
+
if (!this.primaryKey) {
|
|
181
|
+
throw new Error(`No primary key defined for table "${this.tableName}"`);
|
|
182
|
+
}
|
|
183
|
+
const changes = this.delete({
|
|
184
|
+
[this.primaryKey]: id
|
|
185
|
+
});
|
|
186
|
+
return changes > 0;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Count records matching the WHERE conditions
|
|
190
|
+
*/
|
|
191
|
+
count(where) {
|
|
192
|
+
let sql = `SELECT COUNT(*) as count FROM "${this.tableName}"`;
|
|
193
|
+
const params = [];
|
|
194
|
+
if (where) {
|
|
195
|
+
const whereKeys = Object.keys(where);
|
|
196
|
+
if (whereKeys.length > 0) {
|
|
197
|
+
const whereConditions = whereKeys.map((k) => {
|
|
198
|
+
params.push(where[k]);
|
|
199
|
+
return `"${k}" = ?`;
|
|
200
|
+
});
|
|
201
|
+
sql += ` WHERE ${whereConditions.join(' AND ')}`;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const stmt = this.getStatement(sql);
|
|
205
|
+
return stmt.get(...params).count;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get all records from the table
|
|
209
|
+
*/
|
|
210
|
+
all() {
|
|
211
|
+
const sql = `SELECT * FROM "${this.tableName}"`;
|
|
212
|
+
const stmt = this.getStatement(sql);
|
|
213
|
+
return stmt.all();
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Insert or replace a record (upsert)
|
|
217
|
+
* Uses SQLite's INSERT OR REPLACE
|
|
218
|
+
*/
|
|
219
|
+
upsert(data) {
|
|
220
|
+
const keys = Object.keys(data);
|
|
221
|
+
const values = Object.values(data);
|
|
222
|
+
const placeholders = keys.map(() => '?').join(', ');
|
|
223
|
+
const columns = keys.map((k) => `"${k}"`).join(', ');
|
|
224
|
+
const sql = `INSERT OR REPLACE INTO "${this.tableName}" (${columns}) VALUES (${placeholders})`;
|
|
225
|
+
const stmt = this.getStatement(sql);
|
|
226
|
+
stmt.run(...values);
|
|
227
|
+
// Get the last inserted row
|
|
228
|
+
const lastIdStmt = this.db.prepare('SELECT last_insert_rowid() as id');
|
|
229
|
+
const lastId = lastIdStmt.get();
|
|
230
|
+
if (this.primaryKey) {
|
|
231
|
+
return this.findById(lastId.id);
|
|
232
|
+
}
|
|
233
|
+
return { ...data };
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Insert or update on conflict (more granular upsert)
|
|
237
|
+
* Uses SQLite's INSERT ... ON CONFLICT DO UPDATE
|
|
238
|
+
*/
|
|
239
|
+
upsertOn(data, conflictColumns, updateData) {
|
|
240
|
+
const keys = Object.keys(data);
|
|
241
|
+
const values = Object.values(data);
|
|
242
|
+
const placeholders = keys.map(() => '?').join(', ');
|
|
243
|
+
const columns = keys.map((k) => `"${k}"`).join(', ');
|
|
244
|
+
const conflictCols = conflictColumns.map((c) => `"${String(c)}"`).join(', ');
|
|
245
|
+
// Determine what to update on conflict
|
|
246
|
+
const updateKeys = updateData
|
|
247
|
+
? Object.keys(updateData)
|
|
248
|
+
: keys.filter((k) => !conflictColumns.includes(k));
|
|
249
|
+
const updateValues = updateData ? Object.values(updateData) : [];
|
|
250
|
+
const updateClauses = updateKeys.map((k) => `"${k}" = excluded."${k}"`).join(', ');
|
|
251
|
+
let sql = `INSERT INTO "${this.tableName}" (${columns}) VALUES (${placeholders})`;
|
|
252
|
+
sql += ` ON CONFLICT (${conflictCols}) DO UPDATE SET ${updateClauses}`;
|
|
253
|
+
const stmt = this.getStatement(sql);
|
|
254
|
+
stmt.run(...values, ...updateValues);
|
|
255
|
+
// Get the last inserted/updated row
|
|
256
|
+
const lastIdStmt = this.db.prepare('SELECT last_insert_rowid() as id');
|
|
257
|
+
const lastId = lastIdStmt.get();
|
|
258
|
+
if (this.primaryKey) {
|
|
259
|
+
return this.findById(lastId.id);
|
|
260
|
+
}
|
|
261
|
+
return { ...data };
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Check if any records exist matching the conditions
|
|
265
|
+
*/
|
|
266
|
+
exists(where) {
|
|
267
|
+
return this.find(where).exists();
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Find a record by primary key or throw an error
|
|
271
|
+
* Returns a result with chainable methods like delete(), update(), save()
|
|
272
|
+
*/
|
|
273
|
+
findByIdOrFail(id) {
|
|
274
|
+
const result = this.findById(id);
|
|
275
|
+
if (result === null) {
|
|
276
|
+
throw new Error(`Record with id "${id}" not found in table "${this.tableName}"`);
|
|
277
|
+
}
|
|
278
|
+
return result;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Get array of values for a single column
|
|
282
|
+
*/
|
|
283
|
+
pluck(column, where) {
|
|
284
|
+
return this.find(where).pluck(column);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get distinct values for a column
|
|
288
|
+
*/
|
|
289
|
+
distinct(column, where) {
|
|
290
|
+
const sql = where
|
|
291
|
+
? this.find(where)
|
|
292
|
+
.select(column)
|
|
293
|
+
.distinct()
|
|
294
|
+
.toSQL()
|
|
295
|
+
: { sql: `SELECT DISTINCT "${String(column)}" FROM "${this.tableName}"`, params: [] };
|
|
296
|
+
const stmt = this.db.prepare(sql.sql);
|
|
297
|
+
const results = stmt.all(...sql.params);
|
|
298
|
+
return results.map((row) => row[String(column)]);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Get the sum of a column
|
|
302
|
+
*/
|
|
303
|
+
sum(column, where) {
|
|
304
|
+
return this.find(where).sum(column);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Get the average of a column
|
|
308
|
+
*/
|
|
309
|
+
avg(column, where) {
|
|
310
|
+
return this.find(where).avg(column);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Get the minimum value of a column
|
|
314
|
+
*/
|
|
315
|
+
min(column, where) {
|
|
316
|
+
return this.find(where).min(column);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Get the maximum value of a column
|
|
320
|
+
*/
|
|
321
|
+
max(column, where) {
|
|
322
|
+
return this.find(where).max(column);
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Increment a column value
|
|
326
|
+
*/
|
|
327
|
+
increment(column, amount = 1, where) {
|
|
328
|
+
let sql = `UPDATE "${this.tableName}" SET "${String(column)}" = "${String(column)}" + ?`;
|
|
329
|
+
const params = [amount];
|
|
330
|
+
if (where) {
|
|
331
|
+
const whereClause = (0, where_builder_1.buildWhereClause)(where, params);
|
|
332
|
+
if (whereClause) {
|
|
333
|
+
sql += ` WHERE ${whereClause}`;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
const stmt = this.getStatement(sql);
|
|
337
|
+
stmt.run(...params);
|
|
338
|
+
const changesStmt = this.db.prepare('SELECT changes() as count');
|
|
339
|
+
return changesStmt.get().count;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Decrement a column value
|
|
343
|
+
*/
|
|
344
|
+
decrement(column, amount = 1, where) {
|
|
345
|
+
return this.increment(column, -amount, where);
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Truncate the table (delete all records)
|
|
349
|
+
*/
|
|
350
|
+
truncate() {
|
|
351
|
+
const sql = `DELETE FROM "${this.tableName}"`;
|
|
352
|
+
this.db.exec(sql);
|
|
353
|
+
// Reset autoincrement counter - use parameterized query for safety
|
|
354
|
+
const resetSeqStmt = this.db.prepare('DELETE FROM sqlite_sequence WHERE name = ?');
|
|
355
|
+
resetSeqStmt.run(this.tableName);
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Get the table name
|
|
359
|
+
*/
|
|
360
|
+
getTableName() {
|
|
361
|
+
return this.tableName;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Get the schema definition
|
|
365
|
+
*/
|
|
366
|
+
getSchema() {
|
|
367
|
+
return this.schema;
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Generate CREATE TABLE SQL for this model
|
|
371
|
+
*/
|
|
372
|
+
toCreateTableSQL() {
|
|
373
|
+
return generateCreateTableSQL(this.tableName, this.schema);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
exports.Model = Model;
|
|
377
|
+
/**
|
|
378
|
+
* Generate CREATE TABLE SQL from schema definition
|
|
379
|
+
*/
|
|
380
|
+
function generateCreateTableSQL(tableName, schema) {
|
|
381
|
+
const columns = [];
|
|
382
|
+
for (const [name, def] of Object.entries(schema)) {
|
|
383
|
+
let col = `"${name}" ${def.type}`;
|
|
384
|
+
if (def.primary) {
|
|
385
|
+
col += ' PRIMARY KEY';
|
|
386
|
+
}
|
|
387
|
+
if (def.autoIncrement) {
|
|
388
|
+
col += ' AUTOINCREMENT';
|
|
389
|
+
}
|
|
390
|
+
if (def.unique && !def.primary) {
|
|
391
|
+
col += ' UNIQUE';
|
|
392
|
+
}
|
|
393
|
+
if (def.notNull && !def.primary) {
|
|
394
|
+
col += ' NOT NULL';
|
|
395
|
+
}
|
|
396
|
+
if (def.default !== undefined) {
|
|
397
|
+
const defaultValue = typeof def.default === 'string' ? `'${def.default}'` : def.default;
|
|
398
|
+
col += ` DEFAULT ${defaultValue}`;
|
|
399
|
+
}
|
|
400
|
+
columns.push(col);
|
|
401
|
+
}
|
|
402
|
+
return `CREATE TABLE IF NOT EXISTS "${tableName}" (${columns.join(', ')})`;
|
|
403
|
+
}
|
|
404
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
import type { ComparisonOperator, OrderDirection, SQLQueryBindings, WhereCondition } from './types';
|
|
3
|
+
import { ResultProxy } from './result-proxy';
|
|
4
|
+
/**
|
|
5
|
+
* QueryBuilder<T> - A fluent query builder for constructing SQL queries
|
|
6
|
+
* Queries are only executed when .all(), .first(), or .run() are called
|
|
7
|
+
*/
|
|
8
|
+
export declare class QueryBuilder<T extends Record<string, unknown>> {
|
|
9
|
+
private db;
|
|
10
|
+
private tableName;
|
|
11
|
+
private _where;
|
|
12
|
+
private _orConditions;
|
|
13
|
+
private _orderBy;
|
|
14
|
+
private _limit?;
|
|
15
|
+
private _offset?;
|
|
16
|
+
private _select;
|
|
17
|
+
private _distinct;
|
|
18
|
+
private _groupBy;
|
|
19
|
+
private _having;
|
|
20
|
+
private statementCache;
|
|
21
|
+
private primaryKey;
|
|
22
|
+
constructor(db: Database.Database, tableName: string, statementCache: Map<string, Database.Statement>, initialWhere?: WhereCondition<T>, primaryKey?: string | null);
|
|
23
|
+
/**
|
|
24
|
+
* Add WHERE conditions to the query (AND)
|
|
25
|
+
* @overload where(conditions) - Add conditions object
|
|
26
|
+
* @overload where(column, operator, value) - Add single condition with operator
|
|
27
|
+
*/
|
|
28
|
+
where(conditions: WhereCondition<T>): QueryBuilder<T>;
|
|
29
|
+
where<K extends keyof T>(column: K, operator: ComparisonOperator, value: T[K]): QueryBuilder<T>;
|
|
30
|
+
/**
|
|
31
|
+
* Add OR conditions to the query
|
|
32
|
+
* @overload orWhere(conditions) - Add conditions object
|
|
33
|
+
* @overload orWhere(column, operator, value) - Add single condition with operator
|
|
34
|
+
*/
|
|
35
|
+
orWhere(conditions: WhereCondition<T>): QueryBuilder<T>;
|
|
36
|
+
orWhere<K extends keyof T>(column: K, operator: ComparisonOperator, value: T[K]): QueryBuilder<T>;
|
|
37
|
+
/**
|
|
38
|
+
* Add ORDER BY clause to the query
|
|
39
|
+
*/
|
|
40
|
+
orderBy(column: keyof T, direction?: OrderDirection): QueryBuilder<T>;
|
|
41
|
+
/**
|
|
42
|
+
* Set LIMIT for the query
|
|
43
|
+
*/
|
|
44
|
+
limit(count: number): QueryBuilder<T>;
|
|
45
|
+
/**
|
|
46
|
+
* Set OFFSET for the query
|
|
47
|
+
*/
|
|
48
|
+
offset(count: number): QueryBuilder<T>;
|
|
49
|
+
/**
|
|
50
|
+
* Select specific columns
|
|
51
|
+
*/
|
|
52
|
+
select(...columns: (keyof T)[]): QueryBuilder<T>;
|
|
53
|
+
/**
|
|
54
|
+
* Select DISTINCT rows
|
|
55
|
+
*/
|
|
56
|
+
distinct(): QueryBuilder<T>;
|
|
57
|
+
/**
|
|
58
|
+
* Add GROUP BY clause
|
|
59
|
+
*/
|
|
60
|
+
groupBy(...columns: (keyof T)[]): QueryBuilder<T>;
|
|
61
|
+
/**
|
|
62
|
+
* Add HAVING clause (for use with GROUP BY)
|
|
63
|
+
*/
|
|
64
|
+
having(conditions: WhereCondition<T>): QueryBuilder<T>;
|
|
65
|
+
/**
|
|
66
|
+
* Build the SQL query and parameters
|
|
67
|
+
*/
|
|
68
|
+
private buildQuery;
|
|
69
|
+
/**
|
|
70
|
+
* Get or create a cached prepared statement
|
|
71
|
+
*/
|
|
72
|
+
private getStatement;
|
|
73
|
+
/**
|
|
74
|
+
* Execute query and return all matching rows
|
|
75
|
+
*/
|
|
76
|
+
all(): T[];
|
|
77
|
+
/**
|
|
78
|
+
* Execute query and return the first matching row with chainable methods
|
|
79
|
+
* The result has both the data properties AND methods like delete(), update(), save()
|
|
80
|
+
* @example
|
|
81
|
+
* const user = User.query().where("id", "=", 1).first();
|
|
82
|
+
* user?.name; // Access property
|
|
83
|
+
* user?.delete(); // Delete the record
|
|
84
|
+
* user?.update({ name: "New Name" }); // Update the record
|
|
85
|
+
*/
|
|
86
|
+
first(): (T & ResultProxy<T>) | null;
|
|
87
|
+
/**
|
|
88
|
+
* Execute query and return the first matching row or throw an error
|
|
89
|
+
* The result has both the data properties AND methods like delete(), update(), save()
|
|
90
|
+
*/
|
|
91
|
+
firstOrFail(): T & ResultProxy<T>;
|
|
92
|
+
/**
|
|
93
|
+
* Check if any records exist matching the query
|
|
94
|
+
*/
|
|
95
|
+
exists(): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Get array of values for a single column
|
|
98
|
+
*/
|
|
99
|
+
pluck<K extends keyof T>(column: K): T[K][];
|
|
100
|
+
/**
|
|
101
|
+
* Execute query and return raw results (alias for all())
|
|
102
|
+
*/
|
|
103
|
+
run(): T[];
|
|
104
|
+
/**
|
|
105
|
+
* Execute query and return all matching rows (alias for all())
|
|
106
|
+
*/
|
|
107
|
+
get(): T[];
|
|
108
|
+
/**
|
|
109
|
+
* Get the count of matching records
|
|
110
|
+
*/
|
|
111
|
+
count(): number;
|
|
112
|
+
/**
|
|
113
|
+
* Get the sum of a column
|
|
114
|
+
*/
|
|
115
|
+
sum(column: keyof T): number;
|
|
116
|
+
/**
|
|
117
|
+
* Get the average of a column
|
|
118
|
+
*/
|
|
119
|
+
avg(column: keyof T): number;
|
|
120
|
+
/**
|
|
121
|
+
* Get the minimum value of a column
|
|
122
|
+
*/
|
|
123
|
+
min(column: keyof T): number;
|
|
124
|
+
/**
|
|
125
|
+
* Get the maximum value of a column
|
|
126
|
+
*/
|
|
127
|
+
max(column: keyof T): number;
|
|
128
|
+
/**
|
|
129
|
+
* Execute an aggregate function
|
|
130
|
+
*/
|
|
131
|
+
private aggregate;
|
|
132
|
+
/**
|
|
133
|
+
* Get the SQL string for debugging
|
|
134
|
+
*/
|
|
135
|
+
toSQL(): {
|
|
136
|
+
sql: string;
|
|
137
|
+
params: SQLQueryBindings[];
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=query-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"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"}
|