@type32/tauri-sqlite-orm 0.1.18-3 → 0.1.18-5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -254,20 +254,43 @@ var InsertQueryBuilder = class extends BaseQueryBuilder {
254
254
  if (this.dataSets.length === 0) {
255
255
  throw new Error("No data provided for insert");
256
256
  }
257
- const columns = Object.keys(
258
- this.dataSets[0]
259
- );
260
- const columnNames = columns.map(
261
- (c) => this.table._.columns[c]._.name
262
- );
263
- const placeholders = `(${columnNames.map(() => "?").join(", ")})`;
264
- const valuesSql = this.dataSets.map(() => placeholders).join(", ");
265
- this.query += ` (${columnNames.join(", ")}) VALUES ${valuesSql}`;
266
- const params = this.dataSets.flatMap(
267
- (data) => columns.map((col) => data[col])
268
- );
269
- const result = await this.db.execute(this.query, params);
270
- return result.lastInsertId ?? 0;
257
+ const processedDataSets = this.dataSets.map((dataSet) => {
258
+ const finalData = { ...dataSet };
259
+ for (const [key, column] of Object.entries(this.table._.columns)) {
260
+ if (finalData[key] === void 0) {
261
+ if (column.options.$defaultFn) {
262
+ finalData[key] = column.options.$defaultFn();
263
+ }
264
+ }
265
+ }
266
+ return finalData;
267
+ });
268
+ const groups = /* @__PURE__ */ new Map();
269
+ for (const dataSet of processedDataSets) {
270
+ const keys = Object.keys(dataSet).sort().join(",");
271
+ if (!groups.has(keys)) {
272
+ groups.set(keys, []);
273
+ }
274
+ groups.get(keys).push(dataSet);
275
+ }
276
+ let lastInsertId = void 0;
277
+ for (const [_, dataSets] of groups) {
278
+ const columns = Object.keys(dataSets[0]);
279
+ const columnNames = columns.map(
280
+ (key) => this.table._.columns[key]._.name
281
+ );
282
+ const placeholders = `(${columns.map(() => "?").join(", ")})`;
283
+ const valuesSql = dataSets.map(() => placeholders).join(", ");
284
+ const finalQuery = `${this.query} (${columnNames.join(
285
+ ", "
286
+ )}) VALUES ${valuesSql}`;
287
+ const params = dataSets.flatMap(
288
+ (data) => columns.map((col) => data[col] ?? null)
289
+ );
290
+ const result = await this.db.execute(finalQuery, params);
291
+ lastInsertId = result.lastInsertId;
292
+ }
293
+ return lastInsertId ?? 0;
271
294
  }
272
295
  };
273
296
  var UpdateQueryBuilder = class extends BaseQueryBuilder {
@@ -282,6 +305,12 @@ var UpdateQueryBuilder = class extends BaseQueryBuilder {
282
305
  return this;
283
306
  }
284
307
  build() {
308
+ const finalUpdateData = { ...this.updateData };
309
+ for (const [key, column] of Object.entries(this.table._.columns)) {
310
+ if (finalUpdateData[key] === void 0 && column.options.$onUpdateFn) {
311
+ finalUpdateData[key] = column.options.$onUpdateFn();
312
+ }
313
+ }
285
314
  const baseQuery = this.query;
286
315
  const whereParams = this.params;
287
316
  let tablePart = baseQuery;
@@ -291,7 +320,7 @@ var UpdateQueryBuilder = class extends BaseQueryBuilder {
291
320
  tablePart = baseQuery.substring(0, whereIndex);
292
321
  whereClause = baseQuery.substring(whereIndex);
293
322
  }
294
- const entries = Object.entries(this.updateData);
323
+ const entries = Object.entries(finalUpdateData);
295
324
  if (entries.length === 0) {
296
325
  throw new Error("Cannot execute an update query without a .set() call.");
297
326
  }
package/dist/index.mjs CHANGED
@@ -204,20 +204,43 @@ var InsertQueryBuilder = class extends BaseQueryBuilder {
204
204
  if (this.dataSets.length === 0) {
205
205
  throw new Error("No data provided for insert");
206
206
  }
207
- const columns = Object.keys(
208
- this.dataSets[0]
209
- );
210
- const columnNames = columns.map(
211
- (c) => this.table._.columns[c]._.name
212
- );
213
- const placeholders = `(${columnNames.map(() => "?").join(", ")})`;
214
- const valuesSql = this.dataSets.map(() => placeholders).join(", ");
215
- this.query += ` (${columnNames.join(", ")}) VALUES ${valuesSql}`;
216
- const params = this.dataSets.flatMap(
217
- (data) => columns.map((col) => data[col])
218
- );
219
- const result = await this.db.execute(this.query, params);
220
- return result.lastInsertId ?? 0;
207
+ const processedDataSets = this.dataSets.map((dataSet) => {
208
+ const finalData = { ...dataSet };
209
+ for (const [key, column] of Object.entries(this.table._.columns)) {
210
+ if (finalData[key] === void 0) {
211
+ if (column.options.$defaultFn) {
212
+ finalData[key] = column.options.$defaultFn();
213
+ }
214
+ }
215
+ }
216
+ return finalData;
217
+ });
218
+ const groups = /* @__PURE__ */ new Map();
219
+ for (const dataSet of processedDataSets) {
220
+ const keys = Object.keys(dataSet).sort().join(",");
221
+ if (!groups.has(keys)) {
222
+ groups.set(keys, []);
223
+ }
224
+ groups.get(keys).push(dataSet);
225
+ }
226
+ let lastInsertId = void 0;
227
+ for (const [_, dataSets] of groups) {
228
+ const columns = Object.keys(dataSets[0]);
229
+ const columnNames = columns.map(
230
+ (key) => this.table._.columns[key]._.name
231
+ );
232
+ const placeholders = `(${columns.map(() => "?").join(", ")})`;
233
+ const valuesSql = dataSets.map(() => placeholders).join(", ");
234
+ const finalQuery = `${this.query} (${columnNames.join(
235
+ ", "
236
+ )}) VALUES ${valuesSql}`;
237
+ const params = dataSets.flatMap(
238
+ (data) => columns.map((col) => data[col] ?? null)
239
+ );
240
+ const result = await this.db.execute(finalQuery, params);
241
+ lastInsertId = result.lastInsertId;
242
+ }
243
+ return lastInsertId ?? 0;
221
244
  }
222
245
  };
223
246
  var UpdateQueryBuilder = class extends BaseQueryBuilder {
@@ -232,6 +255,12 @@ var UpdateQueryBuilder = class extends BaseQueryBuilder {
232
255
  return this;
233
256
  }
234
257
  build() {
258
+ const finalUpdateData = { ...this.updateData };
259
+ for (const [key, column] of Object.entries(this.table._.columns)) {
260
+ if (finalUpdateData[key] === void 0 && column.options.$onUpdateFn) {
261
+ finalUpdateData[key] = column.options.$onUpdateFn();
262
+ }
263
+ }
235
264
  const baseQuery = this.query;
236
265
  const whereParams = this.params;
237
266
  let tablePart = baseQuery;
@@ -241,7 +270,7 @@ var UpdateQueryBuilder = class extends BaseQueryBuilder {
241
270
  tablePart = baseQuery.substring(0, whereIndex);
242
271
  whereClause = baseQuery.substring(whereIndex);
243
272
  }
244
- const entries = Object.entries(this.updateData);
273
+ const entries = Object.entries(finalUpdateData);
245
274
  if (entries.length === 0) {
246
275
  throw new Error("Cannot execute an update query without a .set() call.");
247
276
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@type32/tauri-sqlite-orm",
3
- "version": "0.1.18-3",
3
+ "version": "0.1.18-5",
4
4
  "description": "A Drizzle-like ORM for Tauri v2's SQL JS API plugin.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",