@warlock.js/cascade 4.6.0 → 4.7.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 (61) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/cjs/index.cjs +372 -56
  3. package/cjs/index.cjs.map +1 -1
  4. package/esm/contracts/database-driver.contract.d.mts +8 -0
  5. package/esm/contracts/database-driver.contract.d.mts.map +1 -1
  6. package/esm/contracts/index.d.mts +1 -1
  7. package/esm/contracts/query-builder.contract.d.mts +36 -1
  8. package/esm/contracts/query-builder.contract.d.mts.map +1 -1
  9. package/esm/drivers/mongodb/mongodb-driver.d.mts +5 -0
  10. package/esm/drivers/mongodb/mongodb-driver.d.mts.map +1 -1
  11. package/esm/drivers/mongodb/mongodb-driver.mjs +10 -4
  12. package/esm/drivers/mongodb/mongodb-driver.mjs.map +1 -1
  13. package/esm/drivers/mongodb/mongodb-migration-driver.d.mts +4 -0
  14. package/esm/drivers/mongodb/mongodb-migration-driver.d.mts.map +1 -1
  15. package/esm/drivers/mongodb/mongodb-migration-driver.mjs +5 -2
  16. package/esm/drivers/mongodb/mongodb-migration-driver.mjs.map +1 -1
  17. package/esm/drivers/mongodb/mongodb-query-builder.d.mts +15 -0
  18. package/esm/drivers/mongodb/mongodb-query-builder.d.mts.map +1 -1
  19. package/esm/drivers/mongodb/mongodb-query-builder.mjs +24 -0
  20. package/esm/drivers/mongodb/mongodb-query-builder.mjs.map +1 -1
  21. package/esm/drivers/mongodb/mongodb-query-parser.d.mts +16 -0
  22. package/esm/drivers/mongodb/mongodb-query-parser.d.mts.map +1 -1
  23. package/esm/drivers/mongodb/mongodb-query-parser.mjs +33 -1
  24. package/esm/drivers/mongodb/mongodb-query-parser.mjs.map +1 -1
  25. package/esm/drivers/postgres/postgres-driver.d.mts +69 -13
  26. package/esm/drivers/postgres/postgres-driver.d.mts.map +1 -1
  27. package/esm/drivers/postgres/postgres-driver.mjs +155 -27
  28. package/esm/drivers/postgres/postgres-driver.mjs.map +1 -1
  29. package/esm/drivers/postgres/postgres-query-builder.d.mts +14 -3
  30. package/esm/drivers/postgres/postgres-query-builder.d.mts.map +1 -1
  31. package/esm/drivers/postgres/postgres-query-builder.mjs +44 -8
  32. package/esm/drivers/postgres/postgres-query-builder.mjs.map +1 -1
  33. package/esm/drivers/postgres/postgres-query-parser.d.mts +6 -1
  34. package/esm/drivers/postgres/postgres-query-parser.d.mts.map +1 -1
  35. package/esm/drivers/postgres/postgres-query-parser.mjs +13 -0
  36. package/esm/drivers/postgres/postgres-query-parser.mjs.map +1 -1
  37. package/esm/drivers/postgres/postgres-sql-serializer.mjs +15 -4
  38. package/esm/drivers/postgres/postgres-sql-serializer.mjs.map +1 -1
  39. package/esm/index.d.mts +2 -2
  40. package/esm/migration/migration-runner.d.mts.map +1 -1
  41. package/esm/migration/migration-runner.mjs +25 -3
  42. package/esm/migration/migration-runner.mjs.map +1 -1
  43. package/esm/migration/migration.d.mts +6 -3
  44. package/esm/migration/migration.d.mts.map +1 -1
  45. package/esm/migration/migration.mjs +6 -3
  46. package/esm/migration/migration.mjs.map +1 -1
  47. package/esm/model/methods/scope-methods.mjs +18 -4
  48. package/esm/model/methods/scope-methods.mjs.map +1 -1
  49. package/esm/model/model.d.mts +6 -0
  50. package/esm/model/model.d.mts.map +1 -1
  51. package/esm/model/model.mjs +6 -0
  52. package/esm/model/model.mjs.map +1 -1
  53. package/esm/query-builder/query-builder.d.mts +12 -1
  54. package/esm/query-builder/query-builder.d.mts.map +1 -1
  55. package/esm/query-builder/query-builder.mjs +19 -0
  56. package/esm/query-builder/query-builder.mjs.map +1 -1
  57. package/llms-full.txt +41 -7
  58. package/llms.txt +1 -1
  59. package/package.json +4 -4
  60. package/skills/README.md +1 -1
  61. package/skills/manage-transactions/SKILL.md +41 -7
@@ -283,11 +283,22 @@ declare class PostgresQueryBuilder<T = unknown> extends QueryBuilder<T> implemen
283
283
  cursorPaginate(options?: CursorPaginationOptions): Promise<CursorPaginationResult<T>>;
284
284
  /** Delete matching rows. Returns deleted count. */
285
285
  delete(): Promise<number>;
286
- /** Delete the first matching row. */
286
+ /**
287
+ * Delete the first matching row. Wraps the filter in a ctid subquery —
288
+ * Postgres has no `DELETE ... LIMIT`, and `delete()`'s filter only reads
289
+ * `where*` ops, so a plain `limit(1)` would be silently ignored and every
290
+ * matching row deleted (MongoDB's deleteOne() is single-document).
291
+ */
287
292
  deleteOne(): Promise<number>;
288
- /** Update matching rows. */
293
+ /**
294
+ * Update matching rows. Honors every chained `where*` (and applied scopes)
295
+ * — without a filter the whole table is updated, matching SQL semantics.
296
+ */
289
297
  update(fields: Record<string, unknown>): Promise<number>;
290
- /** Unset fields from matching rows. */
298
+ /**
299
+ * Unset (NULL out) fields from matching rows. Honors every chained `where*`
300
+ * (and applied scopes), like `update()`.
301
+ */
291
302
  unset(...fields: string[]): Promise<number>;
292
303
  /**
293
304
  * Return the SQL + bindings without executing.
@@ -1 +1 @@
1
- {"version":3,"file":"postgres-query-builder.d.mts","names":[],"sources":["../../../../../../../../@warlock.js/cascade/src/drivers/postgres/postgres-query-builder.ts"],"mappings":"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"}
1
+ {"version":3,"file":"postgres-query-builder.d.mts","names":[],"sources":["../../../../../../../../@warlock.js/cascade/src/drivers/postgres/postgres-query-builder.ts"],"mappings":"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"}
@@ -485,38 +485,45 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
485
485
  /** SUM a numeric field. */
486
486
  async sum(field) {
487
487
  this.applyPendingScopes();
488
+ this.hydrateCallback = void 0;
488
489
  const result = await this.selectRaw(`SUM(${field}) as sum`).first();
489
490
  return parseFloat(result?.sum ?? "0");
490
491
  }
491
492
  /** AVG of a numeric field. */
492
493
  async avg(field) {
493
494
  this.applyPendingScopes();
495
+ this.hydrateCallback = void 0;
494
496
  const result = await this.selectRaw(`AVG(${field}) as avg`).first();
495
497
  return parseFloat(result?.avg ?? "0");
496
498
  }
497
499
  /** MIN of a numeric field. */
498
500
  async min(field) {
499
501
  this.applyPendingScopes();
502
+ this.hydrateCallback = void 0;
500
503
  const result = await this.selectRaw(`MIN(${field}) as min`).first();
501
504
  return parseFloat(result?.min ?? "0");
502
505
  }
503
506
  /** MAX of a numeric field. */
504
507
  async max(field) {
505
508
  this.applyPendingScopes();
509
+ this.hydrateCallback = void 0;
506
510
  const result = await this.selectRaw(`MAX(${field}) as max`).first();
507
511
  return parseFloat(result?.max ?? "0");
508
512
  }
509
513
  /** Get distinct values for a field. */
510
514
  async distinct(field) {
515
+ this.hydrateCallback = void 0;
511
516
  this.distinctValues(field);
512
517
  return (await this.get()).map((row) => row[field]);
513
518
  }
514
519
  /** Get array of all values for a single field. */
515
520
  async pluck(field) {
521
+ this.hydrateCallback = void 0;
516
522
  return (await this.select([field]).get()).map((row) => row[field]);
517
523
  }
518
524
  /** Get a single scalar value. */
519
525
  async value(field) {
526
+ this.hydrateCallback = void 0;
520
527
  return (await this.select([field]).first())?.[field] ?? null;
521
528
  }
522
529
  /** Check whether any matching rows exist. */
@@ -529,6 +536,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
529
536
  }
530
537
  /** COUNT DISTINCT a field. */
531
538
  async countDistinct(field) {
539
+ this.hydrateCallback = void 0;
532
540
  const result = await this.selectRaw(`COUNT(DISTINCT ${field}) as count`).first();
533
541
  return parseInt(result?.count ?? "0", 10);
534
542
  }
@@ -653,21 +661,49 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
653
661
  const deleteSql = `DELETE FROM ${this.driver.dialect.quoteIdentifier(this.table)} ${sql}`;
654
662
  return (await this.driver.query(deleteSql, params)).rowCount ?? 0;
655
663
  }
656
- /** Delete the first matching row. */
664
+ /**
665
+ * Delete the first matching row. Wraps the filter in a ctid subquery —
666
+ * Postgres has no `DELETE ... LIMIT`, and `delete()`'s filter only reads
667
+ * `where*` ops, so a plain `limit(1)` would be silently ignored and every
668
+ * matching row deleted (MongoDB's deleteOne() is single-document).
669
+ */
657
670
  async deleteOne() {
658
- return this.limit(1).delete();
671
+ this.applyPendingScopes();
672
+ const { sql: filterSql, params } = this.buildFilter();
673
+ const quotedTable = this.driver.dialect.quoteIdentifier(this.table);
674
+ const deleteSql = `DELETE FROM ${quotedTable} WHERE ctid IN (SELECT ctid FROM ${quotedTable} ${filterSql} LIMIT 1)`;
675
+ return (await this.driver.query(deleteSql, params)).rowCount ?? 0;
659
676
  }
660
- /** Update matching rows. */
677
+ /**
678
+ * Update matching rows. Honors every chained `where*` (and applied scopes)
679
+ * — without a filter the whole table is updated, matching SQL semantics.
680
+ */
661
681
  async update(fields) {
662
682
  this.applyPendingScopes();
663
- return (await this.driver.updateMany(this.table, {}, { $set: fields })).modifiedCount;
683
+ const { sql: filterSql, params: filterParams } = this.buildFilter();
684
+ const serialized = this.driver.serialize(fields, this.table);
685
+ let paramIndex = filterParams.length + 1;
686
+ const setClauses = [];
687
+ const setParams = [];
688
+ for (const [key, value] of Object.entries(serialized)) {
689
+ setClauses.push(`${this.driver.dialect.quoteIdentifier(key)} = ${this.driver.dialect.placeholder(paramIndex++)}`);
690
+ setParams.push(value);
691
+ }
692
+ if (setClauses.length === 0) throw new Error("No update operations specified");
693
+ const updateSql = `UPDATE ${this.driver.dialect.quoteIdentifier(this.table)} SET ${setClauses.join(", ")}` + (filterSql ? ` ${filterSql}` : "");
694
+ return (await this.driver.query(updateSql, [...filterParams, ...setParams])).rowCount ?? 0;
664
695
  }
665
- /** Unset fields from matching rows. */
696
+ /**
697
+ * Unset (NULL out) fields from matching rows. Honors every chained `where*`
698
+ * (and applied scopes), like `update()`.
699
+ */
666
700
  async unset(...fields) {
667
701
  this.applyPendingScopes();
668
- const updateObj = {};
669
- for (const field of fields) updateObj[field] = 1;
670
- return (await this.driver.updateMany(this.table, {}, { $unset: updateObj })).modifiedCount;
702
+ if (fields.length === 0) throw new Error("No update operations specified");
703
+ const { sql: filterSql, params: filterParams } = this.buildFilter();
704
+ const setClauses = fields.map((field) => `${this.driver.dialect.quoteIdentifier(field)} = NULL`);
705
+ const updateSql = `UPDATE ${this.driver.dialect.quoteIdentifier(this.table)} SET ${setClauses.join(", ")}` + (filterSql ? ` ${filterSql}` : "");
706
+ return (await this.driver.query(updateSql, filterParams)).rowCount ?? 0;
671
707
  }
672
708
  /**
673
709
  * Return the SQL + bindings without executing.