@warlock.js/cascade 5.20.0 → 5.22.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 +40 -1
- package/cjs/index.cjs +2460 -1049
- package/cjs/index.cjs.map +1 -1
- package/esm/contracts/query-builder.contract.d.mts +30 -3
- package/esm/contracts/query-builder.contract.d.mts.map +1 -1
- package/esm/data-source/data-source-registry.d.mts +33 -1
- package/esm/data-source/data-source-registry.d.mts.map +1 -1
- package/esm/data-source/data-source-registry.mjs +75 -5
- package/esm/data-source/data-source-registry.mjs.map +1 -1
- package/esm/database-dirty-tracker.d.mts +5 -0
- package/esm/database-dirty-tracker.d.mts.map +1 -1
- package/esm/database-dirty-tracker.mjs +16 -0
- package/esm/database-dirty-tracker.mjs.map +1 -1
- package/esm/drivers/mongodb/mongodb-driver.d.mts +12 -0
- package/esm/drivers/mongodb/mongodb-driver.d.mts.map +1 -1
- package/esm/drivers/mongodb/mongodb-driver.mjs +47 -16
- package/esm/drivers/mongodb/mongodb-driver.mjs.map +1 -1
- package/esm/drivers/mongodb/mongodb-migration-driver.d.mts +1 -1
- package/esm/drivers/mongodb/mongodb-migration-driver.d.mts.map +1 -1
- package/esm/drivers/mongodb/mongodb-migration-driver.mjs +15 -18
- package/esm/drivers/mongodb/mongodb-migration-driver.mjs.map +1 -1
- package/esm/drivers/mongodb/mongodb-query-builder.d.mts +13 -3
- package/esm/drivers/mongodb/mongodb-query-builder.d.mts.map +1 -1
- package/esm/drivers/mongodb/mongodb-query-builder.mjs +72 -19
- package/esm/drivers/mongodb/mongodb-query-builder.mjs.map +1 -1
- package/esm/drivers/mongodb/mongodb-query-parser.d.mts +6 -0
- package/esm/drivers/mongodb/mongodb-query-parser.d.mts.map +1 -1
- package/esm/drivers/mongodb/mongodb-query-parser.mjs +128 -30
- package/esm/drivers/mongodb/mongodb-query-parser.mjs.map +1 -1
- package/esm/drivers/postgres/index.d.mts +2 -3
- package/esm/drivers/postgres/index.mjs +1 -2
- package/esm/drivers/postgres/postgres-blueprint.mjs +4 -4
- package/esm/drivers/postgres/postgres-blueprint.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-dialect.d.mts +5 -1
- package/esm/drivers/postgres/postgres-dialect.d.mts.map +1 -1
- package/esm/drivers/postgres/postgres-dialect.mjs +38 -8
- package/esm/drivers/postgres/postgres-dialect.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-driver.d.mts +52 -29
- package/esm/drivers/postgres/postgres-driver.d.mts.map +1 -1
- package/esm/drivers/postgres/postgres-driver.mjs +193 -57
- package/esm/drivers/postgres/postgres-driver.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-migration-driver.d.mts +2 -1
- package/esm/drivers/postgres/postgres-migration-driver.d.mts.map +1 -1
- package/esm/drivers/postgres/postgres-migration-driver.mjs +13 -6
- package/esm/drivers/postgres/postgres-migration-driver.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-query-builder.d.mts +18 -7
- package/esm/drivers/postgres/postgres-query-builder.d.mts.map +1 -1
- package/esm/drivers/postgres/postgres-query-builder.mjs +146 -31
- package/esm/drivers/postgres/postgres-query-builder.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-query-parser.d.mts +23 -1
- package/esm/drivers/postgres/postgres-query-parser.d.mts.map +1 -1
- package/esm/drivers/postgres/postgres-query-parser.mjs +160 -43
- package/esm/drivers/postgres/postgres-query-parser.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-sql-serializer.mjs +3 -2
- package/esm/drivers/postgres/postgres-sql-serializer.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-ttl-purge.mjs +98 -0
- package/esm/drivers/postgres/postgres-ttl-purge.mjs.map +1 -0
- package/esm/drivers/postgres/postgres-type-converters.mjs +57 -0
- package/esm/drivers/postgres/postgres-type-converters.mjs.map +1 -0
- package/esm/events/model-events.d.mts +1 -1
- package/esm/events/model-events.d.mts.map +1 -1
- package/esm/events/model-events.mjs.map +1 -1
- package/esm/index.d.mts +5 -6
- package/esm/index.mjs +4 -5
- package/esm/migration/column-builder.d.mts.map +1 -1
- package/esm/migration/column-builder.mjs +2 -2
- package/esm/migration/column-builder.mjs.map +1 -1
- package/esm/migration/index.d.mts +2 -2
- package/esm/migration/index.mjs +1 -1
- package/esm/migration/migration-order.mjs +5 -2
- package/esm/migration/migration-order.mjs.map +1 -1
- package/esm/migration/migration-runner.d.mts +50 -5
- package/esm/migration/migration-runner.d.mts.map +1 -1
- package/esm/migration/migration-runner.mjs +369 -146
- package/esm/migration/migration-runner.mjs.map +1 -1
- package/esm/migration/migration.d.mts +36 -3
- package/esm/migration/migration.d.mts.map +1 -1
- package/esm/migration/migration.mjs +62 -5
- package/esm/migration/migration.mjs.map +1 -1
- package/esm/model/methods/accessor-methods.mjs +1 -3
- package/esm/model/methods/accessor-methods.mjs.map +1 -1
- package/esm/model/methods/delete-methods.mjs +6 -2
- package/esm/model/methods/delete-methods.mjs.map +1 -1
- package/esm/model/methods/hydration-methods.mjs +16 -2
- package/esm/model/methods/hydration-methods.mjs.map +1 -1
- package/esm/model/methods/instance-event-methods.mjs +2 -1
- package/esm/model/methods/instance-event-methods.mjs.map +1 -1
- package/esm/model/methods/meta-methods.mjs +53 -16
- package/esm/model/methods/meta-methods.mjs.map +1 -1
- package/esm/model/methods/query-methods.mjs +86 -15
- package/esm/model/methods/query-methods.mjs.map +1 -1
- package/esm/model/methods/static-event-methods.mjs +16 -1
- package/esm/model/methods/static-event-methods.mjs.map +1 -1
- package/esm/model/methods/write-methods.d.mts.map +1 -1
- package/esm/model/methods/write-methods.mjs +50 -50
- package/esm/model/methods/write-methods.mjs.map +1 -1
- package/esm/model/model.d.mts +16 -1
- package/esm/model/model.d.mts.map +1 -1
- package/esm/model/model.mjs +39 -5
- package/esm/model/model.mjs.map +1 -1
- package/esm/model/register-model.d.mts +6 -1
- package/esm/model/register-model.d.mts.map +1 -1
- package/esm/model/register-model.mjs +16 -1
- package/esm/model/register-model.mjs.map +1 -1
- package/esm/query-builder/query-builder.d.mts +21 -2
- package/esm/query-builder/query-builder.d.mts.map +1 -1
- package/esm/query-builder/query-builder.mjs +97 -20
- package/esm/query-builder/query-builder.mjs.map +1 -1
- package/esm/relations/key-conventions.mjs +13 -3
- package/esm/relations/key-conventions.mjs.map +1 -1
- package/esm/relations/pivot-operations.mjs +1 -1
- package/esm/relations/relation-loader.d.mts +15 -5
- package/esm/relations/relation-loader.d.mts.map +1 -1
- package/esm/relations/relation-loader.mjs +51 -16
- package/esm/relations/relation-loader.mjs.map +1 -1
- package/esm/remover/database-remover.d.mts.map +1 -1
- package/esm/remover/database-remover.mjs +22 -8
- package/esm/remover/database-remover.mjs.map +1 -1
- package/esm/restorer/database-restorer.d.mts +11 -2
- package/esm/restorer/database-restorer.d.mts.map +1 -1
- package/esm/restorer/database-restorer.mjs +45 -13
- package/esm/restorer/database-restorer.mjs.map +1 -1
- package/esm/sync/model-events.mjs +63 -3
- package/esm/sync/model-events.mjs.map +1 -1
- package/esm/sync/model-sync-operation.d.mts.map +1 -1
- package/esm/sync/model-sync-operation.mjs +3 -2
- package/esm/sync/model-sync-operation.mjs.map +1 -1
- package/esm/sync/sync-fanout.mjs +67 -0
- package/esm/sync/sync-fanout.mjs.map +1 -0
- package/esm/sync/sync-manager.d.mts +3 -42
- package/esm/sync/sync-manager.d.mts.map +1 -1
- package/esm/sync/sync-manager.mjs +37 -126
- package/esm/sync/sync-manager.mjs.map +1 -1
- package/esm/utils/connect-to-database.d.mts.map +1 -1
- package/esm/utils/connect-to-database.mjs +4 -4
- package/esm/utils/connect-to-database.mjs.map +1 -1
- package/esm/utils/database-writer.utils.d.mts +1 -1
- package/esm/utils/database-writer.utils.d.mts.map +1 -1
- package/esm/utils/database-writer.utils.mjs +1 -0
- package/esm/utils/database-writer.utils.mjs.map +1 -1
- package/esm/utils/define-model.d.mts.map +1 -1
- package/esm/utils/define-model.mjs +2 -10
- package/esm/utils/define-model.mjs.map +1 -1
- package/esm/utils/is-valid-date-value.mjs +3 -2
- package/esm/utils/is-valid-date-value.mjs.map +1 -1
- package/esm/utils/once-connected.d.mts.map +1 -1
- package/esm/utils/once-connected.mjs +12 -2
- package/esm/utils/once-connected.mjs.map +1 -1
- package/esm/validation/mutators/embed-mutator.mjs +19 -11
- package/esm/validation/mutators/embed-mutator.mjs.map +1 -1
- package/esm/validation/plugins/embed-validator-plugin.d.mts +2 -2
- package/esm/validation/plugins/embed-validator-plugin.d.mts.map +1 -1
- package/esm/validation/plugins/embed-validator-plugin.mjs +8 -2
- package/esm/validation/plugins/embed-validator-plugin.mjs.map +1 -1
- package/esm/validation/rules/database-model-rule.mjs +6 -5
- package/esm/validation/rules/database-model-rule.mjs.map +1 -1
- package/esm/validation/rules/exists-rule.mjs +6 -4
- package/esm/validation/rules/exists-rule.mjs.map +1 -1
- package/esm/validation/rules/unique-rule.mjs +5 -2
- package/esm/validation/rules/unique-rule.mjs.map +1 -1
- package/esm/validation/validators/embed-validator.d.mts.map +1 -1
- package/esm/validation/validators/embed-validator.mjs +1 -1
- package/esm/validation/validators/embed-validator.mjs.map +1 -1
- package/esm/writer/database-writer.d.mts +27 -0
- package/esm/writer/database-writer.d.mts.map +1 -1
- package/esm/writer/database-writer.mjs +85 -18
- package/esm/writer/database-writer.mjs.map +1 -1
- package/package.json +8 -7
- package/esm/drivers/postgres/postgres-sync-adapter.d.mts +0 -79
- package/esm/drivers/postgres/postgres-sync-adapter.d.mts.map +0 -1
- package/esm/drivers/postgres/postgres-sync-adapter.mjs +0 -162
- package/esm/drivers/postgres/postgres-sync-adapter.mjs.map +0 -1
|
@@ -184,6 +184,16 @@ declare class QueryBuilder<T = unknown> {
|
|
|
184
184
|
whereNotNull(field: string): this;
|
|
185
185
|
/** WHERE field BETWEEN low AND high. */
|
|
186
186
|
whereBetween(field: string, range: [unknown, unknown]): this;
|
|
187
|
+
/** OR field IN values. */
|
|
188
|
+
orWhereIn(field: string, values: unknown[]): this;
|
|
189
|
+
/** OR field NOT IN values. */
|
|
190
|
+
orWhereNotIn(field: string, values: unknown[]): this;
|
|
191
|
+
/** OR field IS NULL. */
|
|
192
|
+
orWhereNull(field: string): this;
|
|
193
|
+
/** OR field IS NOT NULL. */
|
|
194
|
+
orWhereNotNull(field: string): this;
|
|
195
|
+
/** OR field BETWEEN low AND high. */
|
|
196
|
+
orWhereBetween(field: string, range: [unknown, unknown]): this;
|
|
187
197
|
/** WHERE field NOT BETWEEN low AND high. */
|
|
188
198
|
whereNotBetween(field: string, range: [unknown, unknown]): this;
|
|
189
199
|
/**
|
|
@@ -205,11 +215,11 @@ declare class QueryBuilder<T = unknown> {
|
|
|
205
215
|
* a string (potentially request input) is a literal.
|
|
206
216
|
*/
|
|
207
217
|
private likePatternData;
|
|
208
|
-
/** Starts with a prefix. */
|
|
218
|
+
/** Starts with a prefix (the value is literal text, `%` / `_` / `\` included). */
|
|
209
219
|
whereStartsWith(field: string, value: string | number): this;
|
|
210
220
|
/** Does NOT start with a prefix. */
|
|
211
221
|
whereNotStartsWith(field: string, value: string | number): this;
|
|
212
|
-
/** Ends with a suffix. */
|
|
222
|
+
/** Ends with a suffix (the value is literal text, `%` / `_` / `\` included). */
|
|
213
223
|
whereEndsWith(field: string, value: string | number): this;
|
|
214
224
|
/** Does NOT end with a suffix. */
|
|
215
225
|
whereNotEndsWith(field: string, value: string | number): this;
|
|
@@ -540,6 +550,15 @@ declare class QueryBuilder<T = unknown> {
|
|
|
540
550
|
orderByRandom(limit?: number): this;
|
|
541
551
|
/** Order ascending by a date column (oldest first). */
|
|
542
552
|
oldest(column?: string): this;
|
|
553
|
+
/** The model's created-at column, falling back to `createdAt` without a model. */
|
|
554
|
+
protected defaultCreatedAtColumn(): string;
|
|
555
|
+
/**
|
|
556
|
+
* Quote a column reference for raw SQL fragments.
|
|
557
|
+
* The base builder is dialect-agnostic and returns it untouched; SQL drivers override.
|
|
558
|
+
*/
|
|
559
|
+
protected quoteColumn(field: string): string;
|
|
560
|
+
/** Quote an operand only when it is a plain column name; expressions and literals pass through. */
|
|
561
|
+
protected quoteOperand(operand: unknown): string;
|
|
543
562
|
/** Limit number of results. */
|
|
544
563
|
limit(value: number): this;
|
|
545
564
|
/** Skip N results (OFFSET). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.d.mts","names":[],"sources":["../../../../../../../cascade/src/query-builder/query-builder.ts"],"mappings":";;;;;;;KAmDY,EAAA;EAAA,SACD,IAAA;EAAA,SACA,IAAA,EAAM,MAAM;AAAA;;;;;;;;;;;;;;;;;;;;;;;;cA0CV,YAAA;
|
|
1
|
+
{"version":3,"file":"query-builder.d.mts","names":[],"sources":["../../../../../../../cascade/src/query-builder/query-builder.ts"],"mappings":";;;;;;;KAmDY,EAAA;EAAA,SACD,IAAA;EAAA,SACA,IAAA,EAAM,MAAM;AAAA;;;;;;;;;;;;;;;;;;;;;;;;cA0CV,YAAA;EAq2BgB;EA/1BpB,UAAA,EAAY,EAAA;EA4iCqB;;;;;;;;;EAAA,UAjiC9B,OAAA,EAAS,GAAA;EAgqCV;EAzpCF,mBAAA,GAAsB,GAAA;EAmqChB;EAjqCN,oBAAA,GAAuB,GAAA,aAAgB,IAAA;EAmqCjC;EAjqCN,oBAAA,EAAsB,GAAA;EA2rCmB;EAzrCzC,aAAA;EAmsCqB;EA5rCrB,kBAAA,EAAoB,GAAA,qBAAwB,KAAA;EAisCrB;EA/rCvB,cAAA,EAAgB,GAAA;IAAc,QAAA;IAAkB,aAAA,GAAgB,EAAA;EAAA;EA0xCzC;EAxxCvB,mBAAA,GAAsB,MAAA;EA+3CP;EA73Cf,UAAA;EAk5CgC;EA34ChC,MAAA;EAo6CsB;;;;EAAA,UA15CnB,YAAA,CAAa,IAAA,UAAc,IAAA,EAAM,MAAA;EA5DnB;;;;;;;EA8EjB,MAAA,IAAU,KAAA,aAAkB,EAAA;EApDL;;;;;;EAkFvB,YAAA;EAvE4C;;;;;;;;;;;;;EAAA,UAsGzC,QAAA,IAAY,YAAA;EA7Df;;;;;;EAuEA,KAAA;EAyBA;;;;;;;;;EAAA,IAAA,IAAQ,YAAA,CAAa,YAAA,CAAa,CAAA;EAgDlC;EAtCA,kBAAA,IAAsB,UAAA;EAsCD;EAhCrB,mBAAA;EAiCM;;;;EAxBN,KAAA,CAAM,SAAA,aAAsB,IAAA;EAyBV;;;;;;;;;EAFlB,KAAA,CAAM,KAAA,UAAe,KAAA;EACrB,KAAA,CAAM,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,KAAA;EAC9C,KAAA,CAAM,UAAA,EAAY,WAAA;EAClB,KAAA,CAAM,QAAA,EAAU,aAAA,CAAc,CAAA;EAwCkB;;;;;;EADhD,OAAA,CAAQ,KAAA,UAAe,KAAA;EACvB,OAAA,CAAQ,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,KAAA;EAChD,OAAA,CAAQ,UAAA,EAAY,WAAA;EACpB,OAAA,CAAQ,QAAA,EAAU,aAAA,CAAc,CAAA;EAwCvB;;;;;;;EAAT,QAAA,CAAS,UAAA,EAAY,aAAA,EAAe,QAAA;EAmBC;EAbrC,UAAA,CAAW,UAAA,EAAY,aAAA,EAAe,QAAA;EAac;;;;EAApD,WAAA,CAAY,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,MAAA;EAME;EAAtD,aAAA,CAAc,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,MAAA;EAO9C;EADR,YAAA,CACL,WAAA,EAAa,KAAA,EAAO,IAAA,UAAc,QAAA,EAAU,aAAA,EAAe,KAAA;EAAzB;;;;;EAa7B,mBAAA,CAAoB,KAAA,UAAe,WAAA,UAAqB,WAAA;EAArB;EAUnC,OAAA,CAAQ,KAAA,UAAe,MAAA;EAAvB;EAMA,UAAA,CAAW,KAAA,UAAe,MAAA;EANH;EAYvB,SAAA,CAAU,KAAA;EANC;EAYX,YAAA,CAAa,KAAA;EANb;EAYA,YAAA,CAAa,KAAA,UAAe,KAAA;EAN5B;EAYA,SAAA,CAAU,KAAA,UAAe,MAAA;EANzB;EAYA,YAAA,CAAa,KAAA,UAAe,MAAA;EAZA;EAkB5B,WAAA,CAAY,KAAA;EAZF;EAkBV,cAAA,CAAe,KAAA;EAZf;EAkBA,cAAA,CAAe,KAAA,UAAe,KAAA;EAlBF;EAwB5B,eAAA,CAAgB,KAAA,UAAe,KAAA;EAlBnB;;;;;;;;;;EAqCZ,SAAA,CAAU,KAAA,UAAe,OAAA,EAAS,MAAA;EAAA;EAMlC,YAAA,CAAa,KAAA,UAAe,OAAA,EAAS,MAAA;EAArC;;;;;EAAA,QAUC,eAAA;EAQe;EAAhB,eAAA,CAAgB,KAAA,UAAe,KAAA;EAM/B;EAAA,kBAAA,CAAmB,KAAA,UAAe,KAAA;EAAA;EAMlC,aAAA,CAAc,KAAA,UAAe,KAAA;EAAf;EAMd,gBAAA,CAAiB,KAAA,UAAe,KAAA;EAAhC;;;;EAaA,SAAA,CAAU,KAAA,UAAe,KAAA,EAAO,IAAA;EAAA;EAMhC,eAAA,CAAgB,KAAA,UAAe,KAAA,EAAO,IAAA;EAAtC;EAKA,eAAA,CAAgB,KAAA,UAAe,KAAA,EAAO,IAAA;EALA;EAWtC,cAAA,CAAe,KAAA,UAAe,KAAA,EAAO,IAAA;EANrC;EAYA,gBAAA,CAAiB,KAAA,UAAe,KAAA,GAAQ,IAAA,WAAe,IAAA;EAZjB;EAkBtC,mBAAA,CAAoB,KAAA,UAAe,KAAA,GAAQ,IAAA,WAAe,IAAA;EAZ1D;;;;;EAsBA,SAAA,CAAU,KAAA,UAAe,KAAA;EAhBe;;;;;EA6BxC,QAAA,CAAS,KAAA,UAAe,KAAA;EAvBkC;EAgC1D,UAAA,CAAW,KAAA,UAAe,KAAA;EAtB1B;EA+BA,SAAA,CAAU,KAAA,UAAe,KAAA;EA/BA;;;;EA+CzB,iBAAA,CAAkB,IAAA,UAAc,KAAA;EAzBrB;EA+BX,sBAAA,CAAuB,IAAA,UAAc,KAAA;EAtBrC;;;;EA+BA,oBAAA,CAAqB,IAAA;EAfW;;;;EAwBhC,eAAA,CAAgB,IAAA,UAAc,QAAA,EAAU,aAAA,EAAe,KAAA;EATlC;EAkBrB,gBAAA,CAAiB,IAAA;EATD;EAkBhB,iBAAA,CAAkB,IAAA;EAlBY;;;;EA8B9B,gBAAA,CAAiB,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,KAAA;EAZvC;EAyBlB,OAAA,CAAQ,KAAA;EAbS;EAkBjB,QAAA,CAAS,MAAA,EAAQ,KAAA;EAlBe;EAuBhC,SAAA,CAAU,KAAA;EAVV;EAeA,SAAA,CAAU,KAAA;EAVV;;;;EAkBA,aAAA,CAAc,MAAA,qBAA2B,KAAA;EARzC;EAiBA,eAAA,CAAgB,MAAA,qBAA2B,KAAA;EAT3C;EAkBA,WAAA,CAAY,KAAA,UAAe,KAAA;EAlBc;;;;EA0BzC,UAAA,CAAW,KAAA,UAAe,OAAA,GAAU,WAAA;EARxB;;;;;;;EA2BZ,WAAA,CAAY,KAAA;EACZ,WAAA,CAAY,QAAA,EAAU,aAAA,CAAc,CAAA;EAAd;;;EAetB,cAAA,CAAe,KAAA;EACf,cAAA,CAAe,QAAA,EAAU,aAAA,CAAc,CAAA;EAAvC;;;;;;;EAmBA,SAAA,CAAU,KAAA,UAAe,IAAA;EACzB,SAAA,CAAU,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,IAAA;EAAf;;;;EAWnC,QAAA,CAAS,QAAA,EAAU,aAAA,CAAc,CAAA;EAAA;EAQjC,UAAA,CAAW,QAAA,EAAU,aAAA,CAAc,CAAA;EAAnC;;;;EAsBA,IAAA,CAAK,KAAA,UAAe,UAAA,UAAoB,YAAA;EACxC,IAAA,CAAK,OAAA,EAAS,WAAA;EADM;EAYpB,QAAA,CAAS,KAAA,UAAe,UAAA,UAAoB,YAAA;EAC5C,QAAA,CAAS,OAAA,EAAS,WAAA;EAZJ;EAuBd,SAAA,CAAU,KAAA,UAAe,UAAA,UAAoB,YAAA;EAC7C,SAAA,CAAU,OAAA,EAAS,WAAA;EAbV;EA4BT,SAAA,CAAU,KAAA,UAAe,UAAA,UAAoB,YAAA;EAC7C,SAAA,CAAU,OAAA,EAAS,WAAA;EA5BnB;EA2CA,QAAA,CAAS,KAAA,UAAe,UAAA,UAAoB,YAAA;EAC5C,QAAA,CAAS,OAAA,EAAS,WAAA;EAjClB;EA4CA,SAAA,CAAU,KAAA;EA5Ce;EAkDzB,OAAA,CAAQ,UAAA,EAAY,aAAA,EAAe,QAAA;EAjDnC;;;;;;;;;;;;;;;;;;;;;EA+EA,QAAA,IAAY,IAAA;EA9BuB;;;;;;;;EA0EnC,IAAA,IACF,IAAA,YAAgB,MAAA,qBAA2B,CAAA,qBAAsB,CAAA;EAiDlD;;;;;;;;;;;;;;;;;;;;;;;;;;EAAb,SAAA,IAAa,IAAA;EAgHqB;;;;;EAAA,UAzE/B,gBAAA,CAAiB,IAAA,UAAc,UAAA,IAAc,KAAA;EA8FhD;;;;;EAAA,UA3EG,cAAA,CAAe,IAAA;IAAiB,QAAA;IAAkB,KAAA;EAAA;EAiGhB;;;;;EA1ErC,GAAA,CAAI,QAAA,UAAkB,QAAA,GAAW,aAAA,EAAe,KAAA;EAiFU;;;;EAxE1D,QAAA,CAAS,QAAA,UAAkB,QAAA,GAAW,CAAA;EAiFD;EAzErC,UAAA,CAAW,QAAA,UAAkB,QAAA,GAAW,CAAA;EA+Ef;EAvEzB,UAAA,CAAW,QAAA;EAuE6B;EAjExC,eAAA,CAAgB,QAAA,UAAkB,QAAA,GAAW,CAAA;EA0ElD;;;;;;;;EAvDK,MAAA,CAAO,MAAA;EACP,MAAA,CAAO,MAAA,EAAQ,MAAA;EACf,MAAA,IAAU,MAAA,EAAQ,KAAA;EA2ER;EA9DV,QAAA,CAAS,KAAA,UAAe,KAAA;EA8DO;;;;EArD/B,SAAA,CAAU,UAAA,EAAY,aAAA,EAAe,QAAA;EAuD1C;EAjDK,aAAA,CACL,WAAA,EAAa,KAAA;IAAQ,KAAA;IAAe,UAAA,EAAY,aAAA;IAAe,QAAA;EAAA;EA0DpD;EAjDN,SAAA,CAAU,UAAA,EAAY,aAAA,EAAe,KAAA;EAkD1C;EA5CK,YAAA,CAAa,UAAA,EAAY,aAAA,EAAe,KAAA;EAuDO;;;;EA/C/C,eAAA,CACL,KAAA,UACA,SAAA,8DACA,KAAA;EAiD8B;EA3CzB,YAAA,CAAa,KAAA,UAAe,KAAA;EAoDd;EA/Cd,WAAA,CAAY,KAAA,UAAe,KAAA;EA+CE;;;;EAvC7B,UAAA,CACL,KAAA,EAAO,KAAA;IAAQ,IAAA,EAAM,aAAA;IAAe,IAAA,EAAM,aAAA;EAAA,IAC1C,SAAA,EAAW,aAAA,YACX,KAAA;EA8CyD;EAvCpD,UAAA,CACL,SAAA,EAAW,aAAA,EACX,SAAA,EAAW,aAAA,YACX,SAAA,EAAW,aAAA,YACX,KAAA;EAwC4B;;;;EA7BvB,sBAAA,CAAuB,SAAA,GAAY,UAAA,EAAY,MAAA;EAkC5B;EA7BnB,UAAA,CAAW,IAAA,UAAc,KAAA;EAmCzB;EA1BA,aAAA,CAAc,KAAA,UAAe,UAAA,EAAY,aAAA,EAAe,KAAA;EAmCxD;EA9BA,YAAA,CAAa,IAAA;EA4Cb;EAvCA,YAAA,CAAa,MAAA,EAAQ,KAAA,UAAe,aAAA,GAAgB,KAAA;EA4C1C;EAvCV,cAAA,CAAe,MAAA,EAAQ,KAAA,UAAe,aAAA,GAAgB,KAAA;EAgDvC;EA3Cf,YAAA,CAAa,IAAA,EAAM,aAAA;EA4DX;EAtDR,QAAA,CAAS,MAAA;EAsDc;;;;EA7CvB,WAAA;EA8DA;EArDA,SAAA;EA8DA;EAzDA,aAAA;EAyDW;EApDX,SAAA,CAAU,MAAA;EA6DV;;;;EApDA,cAAA,CAAe,MAAA;EAwEZ;;;;;;;EAvDH,OAAA,CAAQ,KAAA,UAAe,SAAA,GAAY,cAAA;EACnC,OAAA,CAAQ,MAAA,EAAQ,MAAA,SAAe,cAAA;EAmFxB;EAnEP,WAAA,CAAY,KAAA;EAwEP;;;;;EA/DL,UAAA,CAAW,UAAA,EAAY,aAAA,EAAe,QAAA;EAuG9B;;;;EA9FR,aAAA,CAAc,KAAA;EAkHd;EA3GA,MAAA,CAAO,MAAA;EA2Ge;EAAA,UAtGnB,sBAAA;EAuGI;;;;EAAA,UA/FJ,WAAA,CAAY,KAAA;EAgGG;EAAA,UA3Ff,YAAA,CAAa,OAAA;EAmHhB;EAvGA,KAAA,CAAM,KAAA;EAuGI;EAjGV,IAAA,CAAK,KAAA;EA8GL;EAxGA,MAAA,CAAO,KAAA;EAwGH;EAnGJ,IAAA,CAAK,KAAA;EA+GA;;;;;;;;;;EA7FL,aAAA,CAAc,OAAA,GAAU,oBAAA;;;;;;EAsBxB,OAAA,CAAQ,KAAA,EAAO,YAAA;;EAOf,UAAA,CAAW,UAAA,EAAY,aAAA,EAAe,QAAA;;;;;;;;;EAatC,MAAA,CAAO,KAAA,UAAe,KAAA;EACtB,MAAA,CAAO,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,KAAA;EAC/C,MAAA,CAAO,SAAA,EAAW,WAAA;;EAwBlB,SAAA,CAAU,UAAA,EAAY,aAAA,EAAe,QAAA;;;;;EAarC,GAAA,CAAI,QAAA,GAAW,OAAA;;;;;;;;EAYf,IAAA,IACL,SAAA,EAAW,CAAA,YACX,QAAA,GAAW,OAAA,QAAe,KAAA,EAAO,CAAA,WACjC,SAAA,IAAa,OAAA;AAAA"}
|
|
@@ -335,6 +335,40 @@ var QueryBuilder = class QueryBuilder {
|
|
|
335
335
|
});
|
|
336
336
|
return this;
|
|
337
337
|
}
|
|
338
|
+
/** OR field IN values. */
|
|
339
|
+
orWhereIn(field, values) {
|
|
340
|
+
this.addOperation("orWhereIn", {
|
|
341
|
+
field,
|
|
342
|
+
values
|
|
343
|
+
});
|
|
344
|
+
return this;
|
|
345
|
+
}
|
|
346
|
+
/** OR field NOT IN values. */
|
|
347
|
+
orWhereNotIn(field, values) {
|
|
348
|
+
this.addOperation("orWhereNotIn", {
|
|
349
|
+
field,
|
|
350
|
+
values
|
|
351
|
+
});
|
|
352
|
+
return this;
|
|
353
|
+
}
|
|
354
|
+
/** OR field IS NULL. */
|
|
355
|
+
orWhereNull(field) {
|
|
356
|
+
this.addOperation("orWhereNull", { field });
|
|
357
|
+
return this;
|
|
358
|
+
}
|
|
359
|
+
/** OR field IS NOT NULL. */
|
|
360
|
+
orWhereNotNull(field) {
|
|
361
|
+
this.addOperation("orWhereNotNull", { field });
|
|
362
|
+
return this;
|
|
363
|
+
}
|
|
364
|
+
/** OR field BETWEEN low AND high. */
|
|
365
|
+
orWhereBetween(field, range) {
|
|
366
|
+
this.addOperation("orWhereBetween", {
|
|
367
|
+
field,
|
|
368
|
+
range
|
|
369
|
+
});
|
|
370
|
+
return this;
|
|
371
|
+
}
|
|
338
372
|
/** WHERE field NOT BETWEEN low AND high. */
|
|
339
373
|
whereNotBetween(field, range) {
|
|
340
374
|
this.addOperation("whereNotBetween", {
|
|
@@ -379,21 +413,45 @@ var QueryBuilder = class QueryBuilder {
|
|
|
379
413
|
isRegExp: true
|
|
380
414
|
} : { pattern };
|
|
381
415
|
}
|
|
382
|
-
/** Starts with a prefix. */
|
|
416
|
+
/** Starts with a prefix (the value is literal text, `%` / `_` / `\` included). */
|
|
383
417
|
whereStartsWith(field, value) {
|
|
384
|
-
|
|
418
|
+
this.addOperation("whereLike", {
|
|
419
|
+
field,
|
|
420
|
+
pattern: `${value}%`,
|
|
421
|
+
value: String(value),
|
|
422
|
+
mode: "startsWith"
|
|
423
|
+
});
|
|
424
|
+
return this;
|
|
385
425
|
}
|
|
386
426
|
/** Does NOT start with a prefix. */
|
|
387
427
|
whereNotStartsWith(field, value) {
|
|
388
|
-
|
|
428
|
+
this.addOperation("whereNotLike", {
|
|
429
|
+
field,
|
|
430
|
+
pattern: `${value}%`,
|
|
431
|
+
value: String(value),
|
|
432
|
+
mode: "startsWith"
|
|
433
|
+
});
|
|
434
|
+
return this;
|
|
389
435
|
}
|
|
390
|
-
/** Ends with a suffix. */
|
|
436
|
+
/** Ends with a suffix (the value is literal text, `%` / `_` / `\` included). */
|
|
391
437
|
whereEndsWith(field, value) {
|
|
392
|
-
|
|
438
|
+
this.addOperation("whereLike", {
|
|
439
|
+
field,
|
|
440
|
+
pattern: `%${value}`,
|
|
441
|
+
value: String(value),
|
|
442
|
+
mode: "endsWith"
|
|
443
|
+
});
|
|
444
|
+
return this;
|
|
393
445
|
}
|
|
394
446
|
/** Does NOT end with a suffix. */
|
|
395
447
|
whereNotEndsWith(field, value) {
|
|
396
|
-
|
|
448
|
+
this.addOperation("whereNotLike", {
|
|
449
|
+
field,
|
|
450
|
+
pattern: `%${value}`,
|
|
451
|
+
value: String(value),
|
|
452
|
+
mode: "endsWith"
|
|
453
|
+
});
|
|
454
|
+
return this;
|
|
397
455
|
}
|
|
398
456
|
/**
|
|
399
457
|
* Match on date portion only (time ignored).
|
|
@@ -449,7 +507,7 @@ var QueryBuilder = class QueryBuilder {
|
|
|
449
507
|
*/
|
|
450
508
|
whereTime(field, value) {
|
|
451
509
|
this.addOperation("whereRaw", {
|
|
452
|
-
expression: `TIME(${field}) = ?`,
|
|
510
|
+
expression: `TIME(${this.quoteColumn(field)}) = ?`,
|
|
453
511
|
bindings: [value]
|
|
454
512
|
});
|
|
455
513
|
return this;
|
|
@@ -461,7 +519,7 @@ var QueryBuilder = class QueryBuilder {
|
|
|
461
519
|
*/
|
|
462
520
|
whereDay(field, value) {
|
|
463
521
|
this.addOperation("whereRaw", {
|
|
464
|
-
expression: `EXTRACT(DAY FROM ${field}) = ?`,
|
|
522
|
+
expression: `EXTRACT(DAY FROM ${this.quoteColumn(field)}) = ?`,
|
|
465
523
|
bindings: [value]
|
|
466
524
|
});
|
|
467
525
|
return this;
|
|
@@ -469,7 +527,7 @@ var QueryBuilder = class QueryBuilder {
|
|
|
469
527
|
/** Month extracted from a date field (1–12). */
|
|
470
528
|
whereMonth(field, value) {
|
|
471
529
|
this.addOperation("whereRaw", {
|
|
472
|
-
expression: `EXTRACT(MONTH FROM ${field}) = ?`,
|
|
530
|
+
expression: `EXTRACT(MONTH FROM ${this.quoteColumn(field)}) = ?`,
|
|
473
531
|
bindings: [value]
|
|
474
532
|
});
|
|
475
533
|
return this;
|
|
@@ -477,7 +535,7 @@ var QueryBuilder = class QueryBuilder {
|
|
|
477
535
|
/** Year extracted from a date field. */
|
|
478
536
|
whereYear(field, value) {
|
|
479
537
|
this.addOperation("whereRaw", {
|
|
480
|
-
expression: `EXTRACT(YEAR FROM ${field}) = ?`,
|
|
538
|
+
expression: `EXTRACT(YEAR FROM ${this.quoteColumn(field)}) = ?`,
|
|
481
539
|
bindings: [value]
|
|
482
540
|
});
|
|
483
541
|
return this;
|
|
@@ -518,7 +576,7 @@ var QueryBuilder = class QueryBuilder {
|
|
|
518
576
|
*/
|
|
519
577
|
whereJsonLength(path, operator, value) {
|
|
520
578
|
this.addOperation("whereRaw", {
|
|
521
|
-
expression: `jsonb_array_length(${path}) ${operator} ?`,
|
|
579
|
+
expression: `jsonb_array_length(${this.quoteColumn(path)}) ${operator} ?`,
|
|
522
580
|
bindings: [value]
|
|
523
581
|
});
|
|
524
582
|
return this;
|
|
@@ -552,11 +610,11 @@ var QueryBuilder = class QueryBuilder {
|
|
|
552
610
|
}
|
|
553
611
|
/** WHERE id = value. */
|
|
554
612
|
whereId(value) {
|
|
555
|
-
return this.where("id", value);
|
|
613
|
+
return this.where(this.modelClass?.primaryKey ?? "id", value);
|
|
556
614
|
}
|
|
557
615
|
/** WHERE id IN values. */
|
|
558
616
|
whereIds(values) {
|
|
559
|
-
return this.whereIn("id", values);
|
|
617
|
+
return this.whereIn(this.modelClass?.primaryKey ?? "id", values);
|
|
560
618
|
}
|
|
561
619
|
/** WHERE uuid = value. */
|
|
562
620
|
whereUuid(value) {
|
|
@@ -579,7 +637,11 @@ var QueryBuilder = class QueryBuilder {
|
|
|
579
637
|
}
|
|
580
638
|
/** Full-text search (OR). */
|
|
581
639
|
orWhereFullText(fields, query) {
|
|
582
|
-
|
|
640
|
+
this.addOperation("orWhereFullText", {
|
|
641
|
+
fields: Array.isArray(fields) ? fields : [fields],
|
|
642
|
+
query
|
|
643
|
+
});
|
|
644
|
+
return this;
|
|
583
645
|
}
|
|
584
646
|
/** Alias for whereFullText with a single field. */
|
|
585
647
|
whereSearch(field, query) {
|
|
@@ -590,8 +652,7 @@ var QueryBuilder = class QueryBuilder {
|
|
|
590
652
|
* MongoDB-style convenience shorthand.
|
|
591
653
|
*/
|
|
592
654
|
textSearch(query, filters) {
|
|
593
|
-
|
|
594
|
-
return this;
|
|
655
|
+
throw new Error(`textSearch("${query}") is not supported by this query builder; use whereFullText(fields, query).`);
|
|
595
656
|
}
|
|
596
657
|
whereExists(param) {
|
|
597
658
|
if (typeof param === "function") {
|
|
@@ -922,7 +983,7 @@ var QueryBuilder = class QueryBuilder {
|
|
|
922
983
|
* @example q.selectAggregate("price", "sum", "totalRevenue")
|
|
923
984
|
*/
|
|
924
985
|
selectAggregate(field, aggregate, alias) {
|
|
925
|
-
return this.selectRaw({ [alias]: `${aggregate.toUpperCase()}(${field})` });
|
|
986
|
+
return this.selectRaw({ [alias]: `${aggregate.toUpperCase()}(${field === "*" ? field : this.quoteColumn(field)})` });
|
|
926
987
|
}
|
|
927
988
|
/** Existence check as a projected boolean field. */
|
|
928
989
|
selectExists(field, alias) {
|
|
@@ -969,11 +1030,11 @@ var QueryBuilder = class QueryBuilder {
|
|
|
969
1030
|
}
|
|
970
1031
|
/** String concatenation as a projected field. */
|
|
971
1032
|
selectConcat(fields, alias) {
|
|
972
|
-
return this.selectRaw({ [alias]: fields.join(" || ") });
|
|
1033
|
+
return this.selectRaw({ [alias]: fields.map((field) => this.quoteOperand(field)).join(" || ") });
|
|
973
1034
|
}
|
|
974
1035
|
/** COALESCE (first non-null) as a projected field. */
|
|
975
1036
|
selectCoalesce(fields, alias) {
|
|
976
|
-
return this.selectRaw({ [alias]: `COALESCE(${fields.join(", ")})` });
|
|
1037
|
+
return this.selectRaw({ [alias]: `COALESCE(${fields.map((field) => this.quoteOperand(field)).join(", ")})` });
|
|
977
1038
|
}
|
|
978
1039
|
/** Window function expression. */
|
|
979
1040
|
selectWindow(spec) {
|
|
@@ -1056,9 +1117,25 @@ var QueryBuilder = class QueryBuilder {
|
|
|
1056
1117
|
return this;
|
|
1057
1118
|
}
|
|
1058
1119
|
/** Order ascending by a date column (oldest first). */
|
|
1059
|
-
oldest(column =
|
|
1120
|
+
oldest(column = this.defaultCreatedAtColumn()) {
|
|
1060
1121
|
return this.orderBy(column, "asc");
|
|
1061
1122
|
}
|
|
1123
|
+
/** The model's created-at column, falling back to `createdAt` without a model. */
|
|
1124
|
+
defaultCreatedAtColumn() {
|
|
1125
|
+
return this.modelClass?.createdAtColumn ?? "createdAt";
|
|
1126
|
+
}
|
|
1127
|
+
/**
|
|
1128
|
+
* Quote a column reference for raw SQL fragments.
|
|
1129
|
+
* The base builder is dialect-agnostic and returns it untouched; SQL drivers override.
|
|
1130
|
+
*/
|
|
1131
|
+
quoteColumn(field) {
|
|
1132
|
+
return field;
|
|
1133
|
+
}
|
|
1134
|
+
/** Quote an operand only when it is a plain column name; expressions and literals pass through. */
|
|
1135
|
+
quoteOperand(operand) {
|
|
1136
|
+
if (typeof operand === "string" && /^[A-Za-z_]\w*(\.[A-Za-z_]\w*)*$/.test(operand)) return this.quoteColumn(operand);
|
|
1137
|
+
return String(operand);
|
|
1138
|
+
}
|
|
1062
1139
|
/** Limit number of results. */
|
|
1063
1140
|
limit(value) {
|
|
1064
1141
|
this.addOperation("limit", { value });
|