@warlock.js/cascade 5.22.1 → 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.
- package/CHANGELOG.md +28 -17
- package/cjs/index.cjs +119 -40
- package/cjs/index.cjs.map +1 -1
- package/esm/drivers/postgres/index.d.mts +2 -2
- package/esm/drivers/postgres/index.mjs +1 -1
- package/esm/drivers/postgres/naming.mjs +18 -0
- package/esm/drivers/postgres/naming.mjs.map +1 -0
- package/esm/drivers/postgres/postgres-dialect.d.mts +9 -1
- package/esm/drivers/postgres/postgres-dialect.d.mts.map +1 -1
- package/esm/drivers/postgres/postgres-dialect.mjs +10 -0
- package/esm/drivers/postgres/postgres-dialect.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-driver.d.mts +7 -1
- package/esm/drivers/postgres/postgres-driver.d.mts.map +1 -1
- package/esm/drivers/postgres/postgres-driver.mjs +46 -16
- package/esm/drivers/postgres/postgres-driver.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-query-builder.d.mts.map +1 -1
- package/esm/drivers/postgres/postgres-query-builder.mjs +22 -15
- package/esm/drivers/postgres/postgres-query-builder.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-query-parser.d.mts +1 -0
- package/esm/drivers/postgres/postgres-query-parser.d.mts.map +1 -1
- package/esm/drivers/postgres/postgres-query-parser.mjs +16 -10
- package/esm/drivers/postgres/postgres-query-parser.mjs.map +1 -1
- package/esm/drivers/postgres/types.d.mts +2 -1
- package/esm/drivers/postgres/types.d.mts.map +1 -1
- package/esm/index.d.mts +3 -3
- package/esm/index.mjs +2 -2
- package/esm/model/model.d.mts +5 -1
- package/esm/model/model.d.mts.map +1 -1
- package/esm/model/model.mjs +6 -0
- package/esm/model/model.mjs.map +1 -1
- package/esm/utils/connect-to-database.d.mts.map +1 -1
- package/esm/utils/connect-to-database.mjs +6 -0
- package/esm/utils/connect-to-database.mjs.map +1 -1
- package/esm/validation/plugins/database-rules-plugin.d.mts +12 -4
- package/esm/validation/plugins/database-rules-plugin.d.mts.map +1 -1
- package/esm/validation/plugins/database-rules-plugin.mjs.map +1 -1
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
1021
|
-
const quotedRelatedTable = dialect.
|
|
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.
|
|
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.
|
|
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.
|
|
1114
|
-
const quotedRelatedTable = dialect.
|
|
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.
|
|
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 .+$/);
|