@warlock.js/cascade 5.22.0 → 5.23.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 (37) hide show
  1. package/CHANGELOG.md +28 -11
  2. package/cjs/index.cjs +119 -40
  3. package/cjs/index.cjs.map +1 -1
  4. package/esm/drivers/postgres/index.d.mts +2 -2
  5. package/esm/drivers/postgres/index.mjs +1 -1
  6. package/esm/drivers/postgres/naming.mjs +18 -0
  7. package/esm/drivers/postgres/naming.mjs.map +1 -0
  8. package/esm/drivers/postgres/postgres-dialect.d.mts +9 -1
  9. package/esm/drivers/postgres/postgres-dialect.d.mts.map +1 -1
  10. package/esm/drivers/postgres/postgres-dialect.mjs +10 -0
  11. package/esm/drivers/postgres/postgres-dialect.mjs.map +1 -1
  12. package/esm/drivers/postgres/postgres-driver.d.mts +7 -1
  13. package/esm/drivers/postgres/postgres-driver.d.mts.map +1 -1
  14. package/esm/drivers/postgres/postgres-driver.mjs +46 -16
  15. package/esm/drivers/postgres/postgres-driver.mjs.map +1 -1
  16. package/esm/drivers/postgres/postgres-query-builder.d.mts.map +1 -1
  17. package/esm/drivers/postgres/postgres-query-builder.mjs +22 -15
  18. package/esm/drivers/postgres/postgres-query-builder.mjs.map +1 -1
  19. package/esm/drivers/postgres/postgres-query-parser.d.mts +1 -0
  20. package/esm/drivers/postgres/postgres-query-parser.d.mts.map +1 -1
  21. package/esm/drivers/postgres/postgres-query-parser.mjs +16 -10
  22. package/esm/drivers/postgres/postgres-query-parser.mjs.map +1 -1
  23. package/esm/drivers/postgres/types.d.mts +2 -1
  24. package/esm/drivers/postgres/types.d.mts.map +1 -1
  25. package/esm/index.d.mts +3 -3
  26. package/esm/index.mjs +2 -2
  27. package/esm/model/model.d.mts +5 -1
  28. package/esm/model/model.d.mts.map +1 -1
  29. package/esm/model/model.mjs +6 -0
  30. package/esm/model/model.mjs.map +1 -1
  31. package/esm/utils/connect-to-database.d.mts.map +1 -1
  32. package/esm/utils/connect-to-database.mjs +6 -0
  33. package/esm/utils/connect-to-database.mjs.map +1 -1
  34. package/esm/validation/plugins/database-rules-plugin.d.mts +12 -4
  35. package/esm/validation/plugins/database-rules-plugin.d.mts.map +1 -1
  36. package/esm/validation/plugins/database-rules-plugin.mjs.map +1 -1
  37. package/package.json +5 -5
@@ -254,7 +254,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
254
254
  similarTo(column, embedding, alias = "score") {
255
255
  const literal = `[${embedding.join(",")}]`;
256
256
  const quotedCol = this.driver.dialect.quoteIdentifier(column);
257
- const quotedTable = this.driver.dialect.quoteIdentifier(this.table);
257
+ const quotedTable = this.driver.dialect.quoteTableIdentifier(this.table);
258
258
  this.addOperation("selectRaw", {
259
259
  expression: `${quotedTable}.*`,
260
260
  bindings: []
@@ -348,7 +348,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
348
348
  }
349
349
  /** Full-text search across the whole row, plus optional equality filters. */
350
350
  textSearch(query, filters) {
351
- const table = this.driver.dialect.quoteIdentifier(this.table);
351
+ const table = this.driver.dialect.quoteTableIdentifier(this.table);
352
352
  this.addOperation("whereRaw", {
353
353
  expression: `to_tsvector('english', ${table}::text) @@ plainto_tsquery('english', ?)`,
354
354
  bindings: [query]
@@ -503,6 +503,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
503
503
  if (this.fetchingCallback) await this.fetchingCallback(this);
504
504
  const { query = "", bindings = [] } = new PostgresQueryParser({
505
505
  table: this.table,
506
+ dialect: this.driver.dialect,
506
507
  operations: toParserOps(this.operations)
507
508
  }).parse();
508
509
  try {
@@ -592,6 +593,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
592
593
  }]);
593
594
  const inner = new PostgresQueryParser({
594
595
  table: this.table,
596
+ dialect: this.driver.dialect,
595
597
  operations: innerOps
596
598
  }).parse();
597
599
  query = `SELECT COUNT(*) AS "count" FROM (${inner.query}) AS "__count"`;
@@ -603,6 +605,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
603
605
  }]);
604
606
  const parsed = new PostgresQueryParser({
605
607
  table: this.table,
608
+ dialect: this.driver.dialect,
606
609
  operations: countOps
607
610
  }).parse();
608
611
  query = parsed.query ?? "";
@@ -670,6 +673,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
670
673
  ]);
671
674
  const { query = "", bindings = [] } = new PostgresQueryParser({
672
675
  table: this.table,
676
+ dialect: this.driver.dialect,
673
677
  operations: probeOps
674
678
  }).parse();
675
679
  return (await this.driver.query(query, bindings)).rows.length > 0;
@@ -693,7 +697,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
693
697
  this.applyPendingScopes();
694
698
  const { sql: filterSql, params: filterParams } = this.buildFilter();
695
699
  const amountPlaceholder = `$${filterParams.length + 1}`;
696
- const updateSql = `UPDATE ${this.driver.dialect.quoteIdentifier(this.table)} SET ${this.driver.dialect.quoteIdentifier(field)} = COALESCE(${this.driver.dialect.quoteIdentifier(field)}, 0) + ${amountPlaceholder} WHERE ctid IN (SELECT ctid FROM ${this.driver.dialect.quoteIdentifier(this.table)} ${filterSql} LIMIT 1 FOR UPDATE SKIP LOCKED) RETURNING ${this.driver.dialect.quoteIdentifier(field)}`;
700
+ const updateSql = `UPDATE ${this.driver.dialect.quoteTableIdentifier(this.table)} SET ${this.driver.dialect.quoteIdentifier(field)} = COALESCE(${this.driver.dialect.quoteIdentifier(field)}, 0) + ${amountPlaceholder} WHERE ctid IN (SELECT ctid FROM ${this.driver.dialect.quoteTableIdentifier(this.table)} ${filterSql} LIMIT 1 FOR UPDATE SKIP LOCKED) RETURNING ${this.driver.dialect.quoteIdentifier(field)}`;
697
701
  return (await this.driver.query(updateSql, [...filterParams, amount])).rows[0]?.[field] ?? 0;
698
702
  }
699
703
  /** Decrement a numeric field. Returns new value. */
@@ -705,7 +709,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
705
709
  this.applyPendingScopes();
706
710
  const { sql: filterSql, params: filterParams } = this.buildFilter();
707
711
  const amountPlaceholder = `$${filterParams.length + 1}`;
708
- const updateSql = `UPDATE ${this.driver.dialect.quoteIdentifier(this.table)} SET ${this.driver.dialect.quoteIdentifier(field)} = COALESCE(${this.driver.dialect.quoteIdentifier(field)}, 0) + ${amountPlaceholder}` + (filterSql ? ` WHERE ${filterSql.replace("WHERE ", "")}` : "");
712
+ const updateSql = `UPDATE ${this.driver.dialect.quoteTableIdentifier(this.table)} SET ${this.driver.dialect.quoteIdentifier(field)} = COALESCE(${this.driver.dialect.quoteIdentifier(field)}, 0) + ${amountPlaceholder}` + (filterSql ? ` WHERE ${filterSql.replace("WHERE ", "")}` : "");
709
713
  return (await this.driver.query(updateSql, [...filterParams, amount])).rowCount ?? 0;
710
714
  }
711
715
  /** Decrement a field for all matching rows. Returns affected row count. */
@@ -802,7 +806,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
802
806
  async delete() {
803
807
  this.applyPendingScopes();
804
808
  const { sql, params } = this.buildFilter();
805
- const deleteSql = `DELETE FROM ${this.driver.dialect.quoteIdentifier(this.table)} ${sql}`;
809
+ const deleteSql = `DELETE FROM ${this.driver.dialect.quoteTableIdentifier(this.table)} ${sql}`;
806
810
  return (await this.driver.query(deleteSql, params)).rowCount ?? 0;
807
811
  }
808
812
  /**
@@ -814,7 +818,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
814
818
  async deleteOne() {
815
819
  this.applyPendingScopes();
816
820
  const { sql: filterSql, params } = this.buildFilter();
817
- const quotedTable = this.driver.dialect.quoteIdentifier(this.table);
821
+ const quotedTable = this.driver.dialect.quoteTableIdentifier(this.table);
818
822
  const deleteSql = `DELETE FROM ${quotedTable} WHERE ctid IN (SELECT ctid FROM ${quotedTable} ${filterSql} LIMIT 1 FOR UPDATE SKIP LOCKED)`;
819
823
  return (await this.driver.query(deleteSql, params)).rowCount ?? 0;
820
824
  }
@@ -834,7 +838,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
834
838
  setParams.push(value);
835
839
  }
836
840
  if (setClauses.length === 0) throw new Error("No update operations specified");
837
- const updateSql = `UPDATE ${this.driver.dialect.quoteIdentifier(this.table)} SET ${setClauses.join(", ")}` + (filterSql ? ` ${filterSql}` : "");
841
+ const updateSql = `UPDATE ${this.driver.dialect.quoteTableIdentifier(this.table)} SET ${setClauses.join(", ")}` + (filterSql ? ` ${filterSql}` : "");
838
842
  return (await this.driver.query(updateSql, [...filterParams, ...setParams])).rowCount ?? 0;
839
843
  }
840
844
  /**
@@ -846,7 +850,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
846
850
  if (fields.length === 0) throw new Error("No update operations specified");
847
851
  const { sql: filterSql, params: filterParams } = this.buildFilter();
848
852
  const setClauses = fields.map((field) => `${this.driver.dialect.quoteIdentifier(field)} = NULL`);
849
- const updateSql = `UPDATE ${this.driver.dialect.quoteIdentifier(this.table)} SET ${setClauses.join(", ")}` + (filterSql ? ` ${filterSql}` : "");
853
+ const updateSql = `UPDATE ${this.driver.dialect.quoteTableIdentifier(this.table)} SET ${setClauses.join(", ")}` + (filterSql ? ` ${filterSql}` : "");
850
854
  return (await this.driver.query(updateSql, filterParams)).rowCount ?? 0;
851
855
  }
852
856
  /**
@@ -866,6 +870,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
866
870
  this.applyGroupByAggregates();
867
871
  return new PostgresQueryParser({
868
872
  table: this.table,
873
+ dialect: this.driver.dialect,
869
874
  operations: toParserOps(this.operations)
870
875
  }).parse();
871
876
  }
@@ -1017,8 +1022,8 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
1017
1022
  */
1018
1023
  buildHasSubquery(opType, relationName, definition, RelatedModel, constraintOps, operator, count) {
1019
1024
  const dialect = this.driver.dialect;
1020
- const quotedSelfTable = dialect.quoteIdentifier(this.table);
1021
- const quotedRelatedTable = dialect.quoteIdentifier(RelatedModel.table);
1025
+ const quotedSelfTable = dialect.quoteTableIdentifier(this.table);
1026
+ const quotedRelatedTable = dialect.quoteTableIdentifier(RelatedModel.table);
1022
1027
  const relationType = definition.type;
1023
1028
  const selfModel = this.modelClass;
1024
1029
  const conventions = this.dataSource?.relationDefaults;
@@ -1037,7 +1042,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
1037
1042
  joinCondition = `${quotedRelatedTable}.${dialect.quoteIdentifier(ownerKey)} = ${quotedSelfTable}.${dialect.quoteIdentifier(foreignKey)}`;
1038
1043
  } else if (relationType === "belongsToMany") {
1039
1044
  const pivotTableName = definition.pivot ?? inferPivotTable(selfModel?.name ?? "Model", RelatedModel.name, conventions);
1040
- const quotedPivot = dialect.quoteIdentifier(pivotTableName);
1045
+ const quotedPivot = dialect.quoteTableIdentifier(pivotTableName);
1041
1046
  const pivotLocalCol = definition.localKey ?? inferPivotKey(selfModel?.name ?? "Model", conventions);
1042
1047
  const pivotForeignCol = definition.foreignKey ?? inferPivotKey(RelatedModel.name, conventions);
1043
1048
  const selfPk = definition.pivotLocalKey ?? selfModel?.primaryKey ?? "id";
@@ -1095,7 +1100,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
1095
1100
  */
1096
1101
  ensureMainColumnsForCount() {
1097
1102
  if (this.operations.some((op) => op.type === "select" || op.type === "selectRaw" || op.type === "selectRelatedColumns")) return;
1098
- const quotedTable = this.driver.dialect.quoteIdentifier(this.table);
1103
+ const quotedTable = this.driver.dialect.quoteTableIdentifier(this.table);
1099
1104
  this.addOperation("selectRaw", {
1100
1105
  expression: `${quotedTable}.*`,
1101
1106
  bindings: []
@@ -1110,8 +1115,8 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
1110
1115
  buildCountSubquery(alias, relationName, definition, RelatedModel, constraintOps) {
1111
1116
  const dialect = this.driver.dialect;
1112
1117
  const quotedAlias = dialect.quoteIdentifier(alias);
1113
- const quotedSelfTable = dialect.quoteIdentifier(this.table);
1114
- const quotedRelatedTable = dialect.quoteIdentifier(RelatedModel.table);
1118
+ const quotedSelfTable = dialect.quoteTableIdentifier(this.table);
1119
+ const quotedRelatedTable = dialect.quoteTableIdentifier(RelatedModel.table);
1115
1120
  const relationType = definition.type;
1116
1121
  const selfModel = this.modelClass;
1117
1122
  const relatedMeta = RelatedModel;
@@ -1138,7 +1143,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
1138
1143
  }
1139
1144
  if (relationType === "belongsToMany") {
1140
1145
  const pivotTableName = definition.pivot ?? inferPivotTable(selfModel?.name ?? "Model", relatedMeta.name, conventions);
1141
- const quotedPivot = dialect.quoteIdentifier(pivotTableName);
1146
+ const quotedPivot = dialect.quoteTableIdentifier(pivotTableName);
1142
1147
  const pivotLocalCol = definition.localKey ?? inferPivotKey(selfModel?.name ?? "Model", conventions);
1143
1148
  const pivotForeignCol = definition.foreignKey ?? inferPivotKey(relatedMeta.name, conventions);
1144
1149
  const selfPk = definition.pivotLocalKey ?? selfModel?.primaryKey ?? "id";
@@ -1177,6 +1182,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
1177
1182
  };
1178
1183
  const { query = "", bindings = [] } = new PostgresQueryParser({
1179
1184
  table: relatedTable,
1185
+ dialect: this.driver.dialect,
1180
1186
  operations: toParserOps(whereOps)
1181
1187
  }).parse();
1182
1188
  const match = query.match(/WHERE\s+(.+)$/);
@@ -1319,6 +1325,7 @@ var PostgresQueryBuilder = class PostgresQueryBuilder extends QueryBuilder {
1319
1325
  };
1320
1326
  const { query = "", bindings = [] } = new PostgresQueryParser({
1321
1327
  table: this.table,
1328
+ dialect: this.driver.dialect,
1322
1329
  operations: toParserOps(whereOps)
1323
1330
  }).parse();
1324
1331
  const whereMatch = query.match(/WHERE .+$/);