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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +115 -0
  3. package/dist/bettersql.d.ts +107 -0
  4. package/dist/bettersql.d.ts.map +1 -0
  5. package/dist/bettersql.js +181 -0
  6. package/dist/bettersql.js.map +1 -0
  7. package/dist/delete-builder.d.ts +58 -0
  8. package/dist/delete-builder.d.ts.map +1 -0
  9. package/dist/delete-builder.js +129 -0
  10. package/dist/delete-builder.js.map +1 -0
  11. package/dist/index.d.ts +67 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +77 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/insert-builder.d.ts +62 -0
  16. package/dist/insert-builder.d.ts.map +1 -0
  17. package/dist/insert-builder.js +136 -0
  18. package/dist/insert-builder.js.map +1 -0
  19. package/dist/model.d.ts +185 -0
  20. package/dist/model.d.ts.map +1 -0
  21. package/dist/model.js +404 -0
  22. package/dist/model.js.map +1 -0
  23. package/dist/query-builder.d.ts +140 -0
  24. package/dist/query-builder.d.ts.map +1 -0
  25. package/dist/query-builder.js +298 -0
  26. package/dist/query-builder.js.map +1 -0
  27. package/dist/raw-query-builder.d.ts +70 -0
  28. package/dist/raw-query-builder.d.ts.map +1 -0
  29. package/dist/raw-query-builder.js +118 -0
  30. package/dist/raw-query-builder.js.map +1 -0
  31. package/dist/result-proxy.d.ts +63 -0
  32. package/dist/result-proxy.d.ts.map +1 -0
  33. package/dist/result-proxy.js +166 -0
  34. package/dist/result-proxy.js.map +1 -0
  35. package/dist/types.d.ts +87 -0
  36. package/dist/types.d.ts.map +1 -0
  37. package/dist/types.js +6 -0
  38. package/dist/types.js.map +1 -0
  39. package/dist/update-builder.d.ts +59 -0
  40. package/dist/update-builder.d.ts.map +1 -0
  41. package/dist/update-builder.js +136 -0
  42. package/dist/update-builder.js.map +1 -0
  43. package/dist/where-builder.d.ts +18 -0
  44. package/dist/where-builder.d.ts.map +1 -0
  45. package/dist/where-builder.js +117 -0
  46. package/dist/where-builder.js.map +1 -0
  47. package/package.json +48 -0
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResultProxy = void 0;
4
+ exports.createResultProxy = createResultProxy;
5
+ /**
6
+ * ResultProxy<T> - Wraps a query result with chainable methods
7
+ * Allows patterns like: Model.query().where(...).first().delete()
8
+ * While still allowing property access: Model.query().where(...).first().propertyName
9
+ */
10
+ class ResultProxy {
11
+ db;
12
+ tableName;
13
+ statementCache;
14
+ primaryKey;
15
+ _data;
16
+ constructor(db, tableName, statementCache, primaryKey, data) {
17
+ this.db = db;
18
+ this.tableName = tableName;
19
+ this.statementCache = statementCache;
20
+ this.primaryKey = primaryKey;
21
+ this._data = data;
22
+ }
23
+ /**
24
+ * Get or create a cached prepared statement
25
+ */
26
+ getStatement(sql) {
27
+ let stmt = this.statementCache.get(sql);
28
+ if (!stmt) {
29
+ stmt = this.db.prepare(sql);
30
+ this.statementCache.set(sql, stmt);
31
+ }
32
+ return stmt;
33
+ }
34
+ /**
35
+ * Delete the current record from the database
36
+ * Returns the number of deleted records (0 or 1)
37
+ */
38
+ delete() {
39
+ if (this._data === null) {
40
+ return 0;
41
+ }
42
+ if (!this.primaryKey || !(this.primaryKey in this._data)) {
43
+ throw new Error(`Cannot delete: No primary key defined or primary key not found in record`);
44
+ }
45
+ const id = this._data[this.primaryKey];
46
+ const sql = `DELETE FROM "${this.tableName}" WHERE "${this.primaryKey}" = ?`;
47
+ const stmt = this.getStatement(sql);
48
+ const info = stmt.run(id);
49
+ return info.changes;
50
+ }
51
+ /**
52
+ * Update the current record in the database
53
+ * Returns the number of updated records (0 or 1)
54
+ */
55
+ update(data) {
56
+ if (this._data === null) {
57
+ return 0;
58
+ }
59
+ if (!this.primaryKey || !(this.primaryKey in this._data)) {
60
+ throw new Error(`Cannot update: No primary key defined or primary key not found in record`);
61
+ }
62
+ const id = this._data[this.primaryKey];
63
+ const updateKeys = Object.keys(data);
64
+ const updateValues = Object.values(data);
65
+ const setClauses = updateKeys.map((k) => `"${k}" = ?`).join(', ');
66
+ const sql = `UPDATE "${this.tableName}" SET ${setClauses} WHERE "${this.primaryKey}" = ?`;
67
+ const stmt = this.getStatement(sql);
68
+ const info = stmt.run(...updateValues, id);
69
+ return info.changes;
70
+ }
71
+ /**
72
+ * Save changes made to the record back to the database
73
+ * (Re-inserts/updates the full record)
74
+ * Returns the number of affected records
75
+ */
76
+ save() {
77
+ if (this._data === null) {
78
+ return 0;
79
+ }
80
+ if (!this.primaryKey || !(this.primaryKey in this._data)) {
81
+ throw new Error(`Cannot save: No primary key defined or primary key not found in record`);
82
+ }
83
+ const id = this._data[this.primaryKey];
84
+ const updateKeys = Object.keys(this._data).filter((k) => k !== this.primaryKey);
85
+ const updateValues = updateKeys.map((k) => this._data[k]);
86
+ const setClauses = updateKeys.map((k) => `"${k}" = ?`).join(', ');
87
+ const sql = `UPDATE "${this.tableName}" SET ${setClauses} WHERE "${this.primaryKey}" = ?`;
88
+ const stmt = this.getStatement(sql);
89
+ const info = stmt.run(...updateValues, id);
90
+ return info.changes;
91
+ }
92
+ /**
93
+ * Refresh the record from the database
94
+ * Returns a new result with the refreshed data and chainable methods
95
+ */
96
+ refresh() {
97
+ if (this._data === null || !this.primaryKey || !(this.primaryKey in this._data)) {
98
+ return null;
99
+ }
100
+ const id = this._data[this.primaryKey];
101
+ const sql = `SELECT * FROM "${this.tableName}" WHERE "${this.primaryKey}" = ?`;
102
+ const stmt = this.getStatement(sql);
103
+ const data = stmt.get(id) || null;
104
+ return createResultProxy(this.db, this.tableName, this.statementCache, this.primaryKey, data);
105
+ }
106
+ /**
107
+ * Check if the record exists (is not null)
108
+ */
109
+ exists() {
110
+ return this._data !== null;
111
+ }
112
+ /**
113
+ * Get the underlying data
114
+ */
115
+ toJSON() {
116
+ return this._data;
117
+ }
118
+ /**
119
+ * Get the underlying data (alias for toJSON)
120
+ */
121
+ getData() {
122
+ return this._data;
123
+ }
124
+ /**
125
+ * Check if the result is null
126
+ */
127
+ isNull() {
128
+ return this._data === null;
129
+ }
130
+ }
131
+ exports.ResultProxy = ResultProxy;
132
+ /**
133
+ * Create a ResultProxy that also acts as a Proxy for direct property access
134
+ * This allows: result.propertyName AND result.delete()
135
+ * Returns null when data is null to maintain backward compatibility
136
+ */
137
+ function createResultProxy(db, tableName, statementCache, primaryKey, data) {
138
+ // Return null directly when data is null to maintain backward compatibility
139
+ if (data === null) {
140
+ return null;
141
+ }
142
+ const proxy = new ResultProxy(db, tableName, statementCache, primaryKey, data);
143
+ // Type-safe way to access proxy properties
144
+ const proxyAsAny = proxy;
145
+ // For non-null results, create a proxy that combines data and methods
146
+ return new Proxy(data, {
147
+ get(target, prop) {
148
+ // First check if it's a method from ResultProxy
149
+ if (prop in proxy && typeof proxyAsAny[prop] === 'function') {
150
+ return proxyAsAny[prop].bind(proxy);
151
+ }
152
+ // Then check if it's a property from the data
153
+ if (prop in target) {
154
+ return target[prop];
155
+ }
156
+ return undefined;
157
+ },
158
+ set(target, prop, value) {
159
+ // Allow setting properties on the data
160
+ ;
161
+ target[prop] = value;
162
+ return true;
163
+ }
164
+ });
165
+ }
166
+ //# sourceMappingURL=result-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-proxy.js","sourceRoot":"","sources":["../src/result-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * BetterSQL Types - Core type definitions for BetterSQL ORM
3
+ */
4
+ /** Supported SQLite column types */
5
+ export type ColumnType = 'INTEGER' | 'TEXT' | 'REAL' | 'BLOB' | 'NULL';
6
+ /** Column definition for schema */
7
+ export interface ColumnDefinition {
8
+ type: ColumnType;
9
+ primary?: boolean;
10
+ unique?: boolean;
11
+ notNull?: boolean;
12
+ default?: unknown;
13
+ autoIncrement?: boolean;
14
+ }
15
+ /** Schema definition - maps column names to their definitions */
16
+ export type SchemaDefinition = Record<string, ColumnDefinition>;
17
+ /** Maps SQLite types to TypeScript types */
18
+ export type SQLiteToTS<T extends ColumnType> = T extends 'INTEGER' ? number : T extends 'TEXT' ? string : T extends 'REAL' ? number : T extends 'BLOB' ? Uint8Array : T extends 'NULL' ? null : never;
19
+ /** Infer TypeScript type from a column definition */
20
+ export type InferColumnType<T extends ColumnDefinition> = SQLiteToTS<T['type']>;
21
+ /** Infer TypeScript type from a schema definition */
22
+ export type InferSchemaType<T extends SchemaDefinition> = {
23
+ [K in keyof T]: InferColumnType<T[K]>;
24
+ };
25
+ /** BetterSQL configuration options */
26
+ export interface BetterSQLConfig {
27
+ /** Path to the SQLite database file or ":memory:" for in-memory database */
28
+ filename: string;
29
+ /** Enable WAL mode for better concurrent performance */
30
+ wal?: boolean;
31
+ }
32
+ /** Comparison operators for WHERE clauses */
33
+ export type ComparisonOperator = '=' | '!=' | '<>' | '>' | '<' | '>=' | '<=' | 'LIKE' | 'NOT LIKE';
34
+ /** Advanced where value with operator */
35
+ export interface WhereOperator<V> {
36
+ $eq?: V;
37
+ $ne?: V;
38
+ $gt?: V;
39
+ $gte?: V;
40
+ $lt?: V;
41
+ $lte?: V;
42
+ $like?: string;
43
+ $notLike?: string;
44
+ $in?: V[];
45
+ $notIn?: V[];
46
+ $between?: [V, V];
47
+ $isNull?: boolean;
48
+ }
49
+ /** Where value - can be a simple value or an operator object */
50
+ export type WhereValue<V> = V | WhereOperator<V>;
51
+ /** Where clause conditions - supports simple equality or operator objects */
52
+ export type WhereCondition<T> = {
53
+ [K in keyof T]?: WhereValue<T[K]>;
54
+ };
55
+ /** OR condition wrapper */
56
+ export interface OrCondition<T> {
57
+ $or: WhereCondition<T>[];
58
+ }
59
+ /** AND condition wrapper */
60
+ export interface AndCondition<T> {
61
+ $and: WhereCondition<T>[];
62
+ }
63
+ /** Combined where condition that supports OR and AND */
64
+ export type AdvancedWhereCondition<T> = WhereCondition<T> | OrCondition<T> | AndCondition<T>;
65
+ /** Aggregate function types */
66
+ export type AggregateFunction = 'COUNT' | 'SUM' | 'AVG' | 'MIN' | 'MAX';
67
+ /** Order direction */
68
+ export type OrderDirection = 'ASC' | 'DESC';
69
+ /** Order by clause */
70
+ export type OrderBy<T> = {
71
+ column: keyof T;
72
+ direction?: OrderDirection;
73
+ };
74
+ /** Query options for find operations */
75
+ export interface QueryOptions<T> {
76
+ where?: WhereCondition<T>;
77
+ orderBy?: OrderBy<T> | OrderBy<T>[];
78
+ limit?: number;
79
+ offset?: number;
80
+ }
81
+ /** Update data type */
82
+ export type UpdateData<T> = Partial<T>;
83
+ /** Transaction callback type */
84
+ export type TransactionCallback<R> = () => R;
85
+ /** SQLite query parameter binding types */
86
+ export type SQLQueryBindings = string | number | bigint | boolean | null | Uint8Array;
87
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * BetterSQL Types - Core type definitions for BetterSQL ORM
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,59 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { ComparisonOperator, OrderDirection, SQLQueryBindings, UpdateData, WhereCondition } from './types';
3
+ /**
4
+ * UpdateBuilder<T> - A fluent query builder for constructing UPDATE queries
5
+ * Queries are only executed when .run() is called
6
+ */
7
+ export declare class UpdateBuilder<T> {
8
+ private db;
9
+ private tableName;
10
+ private _data;
11
+ private _where;
12
+ private _orConditions;
13
+ private _orderBy;
14
+ private _limit?;
15
+ private statementCache;
16
+ constructor(db: Database.Database, tableName: string, statementCache: Map<string, Database.Statement>, data: UpdateData<T>, initialWhere?: WhereCondition<T>);
17
+ /**
18
+ * Add WHERE conditions to the query (AND)
19
+ * @overload where(conditions) - Add conditions object
20
+ * @overload where(column, operator, value) - Add single condition with operator
21
+ */
22
+ where(conditions: WhereCondition<T>): UpdateBuilder<T>;
23
+ where<K extends keyof T>(column: K, operator: ComparisonOperator, value: T[K]): UpdateBuilder<T>;
24
+ /**
25
+ * Add OR conditions to the query
26
+ * @overload orWhere(conditions) - Add conditions object
27
+ * @overload orWhere(column, operator, value) - Add single condition with operator
28
+ */
29
+ orWhere(conditions: WhereCondition<T>): UpdateBuilder<T>;
30
+ orWhere<K extends keyof T>(column: K, operator: ComparisonOperator, value: T[K]): UpdateBuilder<T>;
31
+ /**
32
+ * Add ORDER BY clause to the query (SQLite supports ORDER BY in UPDATE with LIMIT)
33
+ */
34
+ orderBy(column: keyof T, direction?: OrderDirection): UpdateBuilder<T>;
35
+ /**
36
+ * Set LIMIT for the query (SQLite supports LIMIT in UPDATE)
37
+ */
38
+ limit(count: number): UpdateBuilder<T>;
39
+ /**
40
+ * Build the SQL query and parameters
41
+ */
42
+ private buildQuery;
43
+ /**
44
+ * Get or create a cached prepared statement
45
+ */
46
+ private getStatement;
47
+ /**
48
+ * Execute the UPDATE query and return the number of updated records
49
+ */
50
+ run(): number;
51
+ /**
52
+ * Get the SQL string for debugging
53
+ */
54
+ toSQL(): {
55
+ sql: string;
56
+ params: SQLQueryBindings[];
57
+ };
58
+ }
59
+ //# sourceMappingURL=update-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-builder.d.ts","sourceRoot":"","sources":["../src/update-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EACV,kBAAkB,EAElB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,SAAS,CAAA;AAGhB;;;GAGG;AACH,qBAAa,aAAa,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,cAAc,CAAiC;gBAGrD,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC/C,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACnB,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IAWlC;;;;OAIG;IACH,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;IACtD,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;IAiBhG;;;;OAIG;IACH,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;IAiBlG;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAE,cAAsB,GAAG,aAAa,CAAC,CAAC,CAAC;IAK7E;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC;IAKtC;;OAEG;IACH,OAAO,CAAC,UAAU;IA6ClB;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,GAAG,IAAI,MAAM;IASb;;OAEG;IACH,KAAK,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,EAAE,CAAA;KAAE;CAGrD"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpdateBuilder = void 0;
4
+ const where_builder_1 = require("./where-builder");
5
+ /**
6
+ * UpdateBuilder<T> - A fluent query builder for constructing UPDATE queries
7
+ * Queries are only executed when .run() is called
8
+ */
9
+ class UpdateBuilder {
10
+ db;
11
+ tableName;
12
+ _data;
13
+ _where = {};
14
+ _orConditions = [];
15
+ _orderBy = [];
16
+ _limit;
17
+ statementCache;
18
+ constructor(db, tableName, statementCache, data, initialWhere) {
19
+ this.db = db;
20
+ this.tableName = tableName;
21
+ this.statementCache = statementCache;
22
+ this._data = data;
23
+ if (initialWhere) {
24
+ this._where = { ...initialWhere };
25
+ }
26
+ }
27
+ where(conditionsOrColumn, operator, value) {
28
+ if (typeof conditionsOrColumn === 'string' && operator !== undefined && value !== undefined) {
29
+ // Called as where(column, operator, value)
30
+ const condition = (0, where_builder_1.operatorToCondition)(operator, value);
31
+ this._where = { ...this._where, [conditionsOrColumn]: condition };
32
+ }
33
+ else {
34
+ // Called as where(conditions)
35
+ this._where = { ...this._where, ...conditionsOrColumn };
36
+ }
37
+ return this;
38
+ }
39
+ orWhere(conditionsOrColumn, operator, value) {
40
+ if (typeof conditionsOrColumn === 'string' && operator !== undefined && value !== undefined) {
41
+ // Called as orWhere(column, operator, value)
42
+ const condition = (0, where_builder_1.operatorToCondition)(operator, value);
43
+ this._orConditions.push({ [conditionsOrColumn]: condition });
44
+ }
45
+ else {
46
+ // Called as orWhere(conditions)
47
+ this._orConditions.push(conditionsOrColumn);
48
+ }
49
+ return this;
50
+ }
51
+ /**
52
+ * Add ORDER BY clause to the query (SQLite supports ORDER BY in UPDATE with LIMIT)
53
+ */
54
+ orderBy(column, direction = 'ASC') {
55
+ this._orderBy.push({ column, direction });
56
+ return this;
57
+ }
58
+ /**
59
+ * Set LIMIT for the query (SQLite supports LIMIT in UPDATE)
60
+ */
61
+ limit(count) {
62
+ this._limit = count;
63
+ return this;
64
+ }
65
+ /**
66
+ * Build the SQL query and parameters
67
+ */
68
+ buildQuery() {
69
+ const params = [];
70
+ // Build SET clause
71
+ const updateKeys = Object.keys(this._data);
72
+ const updateValues = Object.values(this._data);
73
+ const setClauses = updateKeys.map((k) => `"${k}" = ?`).join(', ');
74
+ params.push(...updateValues);
75
+ let sql = `UPDATE "${this.tableName}" SET ${setClauses}`;
76
+ // WHERE clause
77
+ const whereClause = (0, where_builder_1.buildWhereClause)(this._where, params);
78
+ const orClauses = this._orConditions.map((orCond) => {
79
+ const orParams = [];
80
+ const clause = (0, where_builder_1.buildWhereClause)(orCond, orParams);
81
+ params.push(...orParams);
82
+ return `(${clause})`;
83
+ });
84
+ if (whereClause || orClauses.length > 0) {
85
+ if (whereClause && orClauses.length > 0) {
86
+ // Combine AND conditions with OR conditions: (AND conditions) OR (OR condition 1) OR (OR condition 2)
87
+ sql += ` WHERE (${whereClause}) OR ${orClauses.join(' OR ')}`;
88
+ }
89
+ else if (orClauses.length > 0) {
90
+ sql += ` WHERE ${orClauses.join(' OR ')}`;
91
+ }
92
+ else {
93
+ sql += ` WHERE ${whereClause}`;
94
+ }
95
+ }
96
+ // ORDER BY clause (SQLite supports this with LIMIT)
97
+ if (this._orderBy.length > 0) {
98
+ const orderClauses = this._orderBy.map((o) => `"${String(o.column)}" ${o.direction || 'ASC'}`);
99
+ sql += ` ORDER BY ${orderClauses.join(', ')}`;
100
+ }
101
+ // LIMIT clause
102
+ if (this._limit !== undefined) {
103
+ sql += ` LIMIT ${this._limit}`;
104
+ }
105
+ return { sql, params };
106
+ }
107
+ /**
108
+ * Get or create a cached prepared statement
109
+ */
110
+ getStatement(sql) {
111
+ let stmt = this.statementCache.get(sql);
112
+ if (!stmt) {
113
+ stmt = this.db.prepare(sql);
114
+ this.statementCache.set(sql, stmt);
115
+ }
116
+ return stmt;
117
+ }
118
+ /**
119
+ * Execute the UPDATE query and return the number of updated records
120
+ */
121
+ run() {
122
+ const { sql, params } = this.buildQuery();
123
+ const stmt = this.getStatement(sql);
124
+ const info = stmt.run(...params);
125
+ // Use the changes from stmt.run() return value (more efficient)
126
+ return info.changes;
127
+ }
128
+ /**
129
+ * Get the SQL string for debugging
130
+ */
131
+ toSQL() {
132
+ return this.buildQuery();
133
+ }
134
+ }
135
+ exports.UpdateBuilder = UpdateBuilder;
136
+ //# sourceMappingURL=update-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-builder.js","sourceRoot":"","sources":["../src/update-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ComparisonOperator, SQLQueryBindings, WhereCondition, WhereOperator } from "./types";
2
+ /**
3
+ * Check if a value is a WhereOperator object
4
+ */
5
+ export declare function isWhereOperator<V>(value: unknown): value is WhereOperator<V>;
6
+ /**
7
+ * Map comparison operator string to WhereOperator key
8
+ */
9
+ export declare function operatorToCondition<V>(operator: ComparisonOperator, value: V): WhereOperator<V>;
10
+ /**
11
+ * Build conditions for a single key-value pair with operator support
12
+ */
13
+ export declare function buildCondition(key: string, value: unknown, params: SQLQueryBindings[]): string;
14
+ /**
15
+ * Build WHERE clause from conditions object
16
+ */
17
+ export declare function buildWhereClause<T>(where: WhereCondition<T>, params: SQLQueryBindings[]): string;
18
+ //# sourceMappingURL=where-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where-builder.d.ts","sourceRoot":"","sources":["../src/where-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEnG;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,CAI5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAsB/F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CA+D9F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAShG"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isWhereOperator = isWhereOperator;
4
+ exports.operatorToCondition = operatorToCondition;
5
+ exports.buildCondition = buildCondition;
6
+ exports.buildWhereClause = buildWhereClause;
7
+ /**
8
+ * Check if a value is a WhereOperator object
9
+ */
10
+ function isWhereOperator(value) {
11
+ if (value === null || typeof value !== "object")
12
+ return false;
13
+ const ops = ["$eq", "$ne", "$gt", "$gte", "$lt", "$lte", "$like", "$notLike", "$in", "$notIn", "$between", "$isNull"];
14
+ return ops.some(op => op in value);
15
+ }
16
+ /**
17
+ * Map comparison operator string to WhereOperator key
18
+ */
19
+ function operatorToCondition(operator, value) {
20
+ switch (operator) {
21
+ case "=":
22
+ return { $eq: value };
23
+ case "!=":
24
+ case "<>":
25
+ return { $ne: value };
26
+ case ">":
27
+ return { $gt: value };
28
+ case ">=":
29
+ return { $gte: value };
30
+ case "<":
31
+ return { $lt: value };
32
+ case "<=":
33
+ return { $lte: value };
34
+ case "LIKE":
35
+ return { $like: value };
36
+ case "NOT LIKE":
37
+ return { $notLike: value };
38
+ default:
39
+ return { $eq: value };
40
+ }
41
+ }
42
+ /**
43
+ * Build conditions for a single key-value pair with operator support
44
+ */
45
+ function buildCondition(key, value, params) {
46
+ const column = `"${key}"`;
47
+ if (isWhereOperator(value)) {
48
+ const conditions = [];
49
+ const op = value;
50
+ if (op.$eq !== undefined) {
51
+ params.push(op.$eq);
52
+ conditions.push(`${column} = ?`);
53
+ }
54
+ if (op.$ne !== undefined) {
55
+ params.push(op.$ne);
56
+ conditions.push(`${column} != ?`);
57
+ }
58
+ if (op.$gt !== undefined) {
59
+ params.push(op.$gt);
60
+ conditions.push(`${column} > ?`);
61
+ }
62
+ if (op.$gte !== undefined) {
63
+ params.push(op.$gte);
64
+ conditions.push(`${column} >= ?`);
65
+ }
66
+ if (op.$lt !== undefined) {
67
+ params.push(op.$lt);
68
+ conditions.push(`${column} < ?`);
69
+ }
70
+ if (op.$lte !== undefined) {
71
+ params.push(op.$lte);
72
+ conditions.push(`${column} <= ?`);
73
+ }
74
+ if (op.$like !== undefined) {
75
+ params.push(op.$like);
76
+ conditions.push(`${column} LIKE ?`);
77
+ }
78
+ if (op.$notLike !== undefined) {
79
+ params.push(op.$notLike);
80
+ conditions.push(`${column} NOT LIKE ?`);
81
+ }
82
+ if (op.$in !== undefined && Array.isArray(op.$in)) {
83
+ const placeholders = op.$in.map(() => "?").join(", ");
84
+ params.push(...op.$in);
85
+ conditions.push(`${column} IN (${placeholders})`);
86
+ }
87
+ if (op.$notIn !== undefined && Array.isArray(op.$notIn)) {
88
+ const placeholders = op.$notIn.map(() => "?").join(", ");
89
+ params.push(...op.$notIn);
90
+ conditions.push(`${column} NOT IN (${placeholders})`);
91
+ }
92
+ if (op.$between !== undefined && Array.isArray(op.$between)) {
93
+ params.push(op.$between[0], op.$between[1]);
94
+ conditions.push(`${column} BETWEEN ? AND ?`);
95
+ }
96
+ if (op.$isNull !== undefined) {
97
+ conditions.push(op.$isNull ? `${column} IS NULL` : `${column} IS NOT NULL`);
98
+ }
99
+ return conditions.join(" AND ");
100
+ }
101
+ // Simple equality check
102
+ params.push(value);
103
+ return `${column} = ?`;
104
+ }
105
+ /**
106
+ * Build WHERE clause from conditions object
107
+ */
108
+ function buildWhereClause(where, params) {
109
+ const whereKeys = Object.keys(where);
110
+ if (whereKeys.length === 0)
111
+ return "";
112
+ const conditions = whereKeys.map((key) => {
113
+ return buildCondition(String(key), where[key], params);
114
+ });
115
+ return conditions.join(" AND ");
116
+ }
117
+ //# sourceMappingURL=where-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where-builder.js","sourceRoot":"","sources":["../src/where-builder.ts"],"names":[],"mappings":"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"}