@memberjunction/generic-database-provider 5.32.0 → 5.33.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.
@@ -18,6 +18,7 @@
18
18
  import { BaseEntity, DatabaseProviderBase, EntityInfo, EntityFieldInfo, EntitySaveOptions, EntityDeleteOptions, EntityPermissionType, ILocalStorageProvider, RunViewParams, RunViewResult, RunViewWithCacheCheckParams, RunViewsWithCacheCheckResponse, RunViewWithCacheCheckResult, RunQueryParams, RunQueryResult, RunQueryWithCacheCheckParams, RunQueriesWithCacheCheckResponse, RunQueryWithCacheCheckResult, QueryInfo, CompositeKey, DatasetItemFilterType, DatasetResultType, DatasetStatusResultType, IMetadataProvider, UserInfo, QueryExecutionSpec, SaveContext, SaveSQLResult } from '@memberjunction/core';
19
19
  import { SqlLoggingOptions, SqlLoggingSession } from './types.js';
20
20
  import { SQLDialect } from '@memberjunction/sql-dialect';
21
+ import { CRUDSprocType } from './crudSprocFieldRules.js';
21
22
  import { MJEntityAIActionEntity, MJQueryEntity, MJUserViewEntityExtended } from '@memberjunction/core-entities';
22
23
  import { EntityAIActionParams } from '@memberjunction/aiengine';
23
24
  import { ActionResult } from '@memberjunction/actions-base';
@@ -290,6 +291,34 @@ export declare abstract class GenericDatabaseProvider extends DatabaseProviderBa
290
291
  * Auto-injected as the default `batchSeparator` in `CreateSqlLogger`.
291
292
  */
292
293
  protected get PlatformBatchSeparator(): string;
294
+ /**
295
+ * Maximum number of parameters a CRUD stored procedure (`spCreate*`/`spUpdate*`/`spDelete*`)
296
+ * may declare on this database platform before CodeGen must emit a JSON-arg shape instead.
297
+ *
298
+ * - SQL Server: `Infinity` — SS supports up to 2,100 parameters per procedure, far beyond
299
+ * any realistic CRUD sproc.
300
+ * - PostgreSQL: `90` — PG's hard `FUNC_MAX_ARGS` ceiling is 100 (compiled into the server,
301
+ * not configurable on managed services like RDS/Aurora). 90 leaves headroom for column
302
+ * adds without flipping sproc shape unexpectedly.
303
+ *
304
+ * Used by the shared `useJsonArgShape` predicate (CodeGen + provider call-site) to decide
305
+ * whether a given sproc should emit as typed-args + `_Clear` companions (today's shape) or
306
+ * as a single-JSONB-arg sproc with key-presence tri-state semantics. See
307
+ * [plans/json-arg-crud-sprocs.md](../../../plans/json-arg-crud-sprocs.md) and GitHub
308
+ * issue #2552.
309
+ */
310
+ get ProcedureParamLimit(): number;
311
+ /**
312
+ * Returns true when CRUD sproc generation and call-construction for the
313
+ * given entity + sproc verb should use a single JSON-arg shape (instead of
314
+ * typed args + `_Clear` companions).
315
+ *
316
+ * Convenience wrapper around the pure `useJsonArgShape` helper, applying
317
+ * this provider's `ProcedureParamLimit`. CodeGen and runtime call-sites
318
+ * can invoke this via the provider instance to keep sproc emit and sproc
319
+ * invocation in lockstep.
320
+ */
321
+ UseJsonArgShape(entity: EntityInfo, sprocType: CRUDSprocType): boolean;
293
322
  /**
294
323
  * Builds a platform-specific pagination clause.
295
324
  * SQL Server: `OFFSET X ROWS FETCH NEXT Y ROWS ONLY`
@@ -370,9 +399,45 @@ export declare abstract class GenericDatabaseProvider extends DatabaseProviderBa
370
399
  protected getRunTimeViewFieldArray(params: RunViewParams, viewEntity: MJUserViewEntityExtended | null): EntityFieldInfo[];
371
400
  /**
372
401
  * Builds user search SQL for the given entity and search string.
402
+ *
373
403
  * Supports full-text search (if enabled) and field-by-field LIKE searching.
404
+ * For the LIKE path:
405
+ * - honors EntityField.UserSearchPredicateAPI (Exact / BeginsWith / EndsWith / Contains)
406
+ * so index-seekable predicates can be expressed,
407
+ * - escapes LIKE metacharacters (%, _, [, ]) in user input with ESCAPE '\\',
408
+ * - skips fields that are not sensible text-search targets (non-text types,
409
+ * unbounded text columns when FTX is off).
374
410
  */
375
411
  protected createViewUserSearchSQL(entityInfo: EntityInfo, userSearchString: string): string;
412
+ /**
413
+ * Build the SQL fragment that compares one EntityField against a user search term.
414
+ *
415
+ * Resolution order:
416
+ * 1. UserSearchParamFormatAPI (custom override) wins if set, with `{0}` replaced
417
+ * by the single-quote-escaped raw term. Caller is responsible for escaping
418
+ * LIKE metacharacters in their format string if needed.
419
+ * 2. Otherwise, the field must be a text-searchable type. Non-text and unbounded-
420
+ * text fields return '' (caller skips them).
421
+ * 3. Otherwise, the predicate is chosen from UserSearchPredicateAPI:
422
+ * Exact -> = N'term' (index-seekable)
423
+ * BeginsWith -> LIKE N'term%' ESCAPE '\\' (index-seekable)
424
+ * EndsWith -> LIKE N'%term' ESCAPE '\\'
425
+ * Contains -> LIKE N'%term%' ESCAPE '\\' (default, non-seekable)
426
+ */
427
+ protected buildPerFieldSearchPredicate(field: EntityFieldInfo, escapedTerm: string, rawSafeTerm: string): string;
428
+ /**
429
+ * Escape characters that have special meaning in SQL Server LIKE patterns.
430
+ * The backslash itself must be escaped first so its replacement isn't reprocessed.
431
+ * Pair with `ESCAPE '\\'` on the LIKE clause.
432
+ */
433
+ protected escapeLikeTerm(safeTerm: string): string;
434
+ /**
435
+ * True if the field's column type is appropriate for text-pattern search.
436
+ * Non-text types are rejected because LIKE forces an implicit per-row CONVERT
437
+ * to nvarchar. Unbounded (MAX/ntext/text) columns are rejected because the
438
+ * LIKE path cannot seek them; FTX is the right tool for those.
439
+ */
440
+ protected isTextSearchableType(field: EntityFieldInfo): boolean;
376
441
  /**************************************************************************/
377
442
  /**************************************************************************/
378
443
  /**
@@ -385,6 +450,19 @@ export declare abstract class GenericDatabaseProvider extends DatabaseProviderBa
385
450
  protected RenderViewWhereClause(viewEntity: MJUserViewEntityExtended, user: UserInfo, stack?: string[]): Promise<string>;
386
451
  /**************************************************************************/
387
452
  /**************************************************************************/
453
+ /**
454
+ * Parses a timestamp string sent by the client.
455
+ *
456
+ * Accepts both ISO 8601 strings (the canonical form) and all-digit strings
457
+ * representing milliseconds since epoch. The numeric form has been observed
458
+ * in the wild from clients whose cache layer round-tripped a Date through a
459
+ * lossy serializer — `new Date('1778004618383')` returns `Invalid Date`,
460
+ * but `new Date(Number('1778004618383'))` is a valid timestamp. Returning
461
+ * `null` on unparseable input lets callers degrade to a stale-cache fallback
462
+ * instead of throwing `RangeError: Invalid time value` on a downstream
463
+ * `.toISOString()`.
464
+ */
465
+ protected parseClientTimestamp(raw: string | null | undefined): Date | null;
388
466
  /**
389
467
  * Compares client cache status with server status to determine if cache is current.
390
468
  * Checks both row count and maxUpdatedAt timestamp.
@@ -1 +1 @@
1
- {"version":3,"file":"GenericDatabaseProvider.d.ts","sourceRoot":"","sources":["../src/GenericDatabaseProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACH,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,eAAe,EAEf,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EAEpB,qBAAqB,EAIrB,aAAa,EACb,aAAa,EACb,2BAA2B,EAC3B,8BAA8B,EAC9B,2BAA2B,EAC3B,cAAc,EACd,cAAc,EACd,4BAA4B,EAC5B,gCAAgC,EAChC,4BAA4B,EAC5B,SAAS,EAIT,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EAEjB,uBAAuB,EAEvB,iBAAiB,EACjB,QAAQ,EAQR,kBAAkB,EAClB,WAAW,EAEX,aAAa,EAChB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAIzD,OAAO,EACH,sBAAsB,EACtB,aAAa,EACb,wBAAwB,EAG3B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAY,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAG1E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAI5D;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACnC,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAeD,8BAAsB,uBAAwB,SAAQ,oBAAoB;IAGtE,4EAA4E;IAE5E,4EAA4E;IAE5E;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,qBAAqB,CAAoC;IAEjE;;;;;;;OAOG;IACH,IAAI,oBAAoB,IAAI,qBAAqB,CAKhD;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,uBAAuB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAIrE,4EAA4E;IAE5E,4EAA4E;IAE5E,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAA2D;IAChG,OAAO,KAAK,mBAAmB,GAU9B;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACU,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkCvG;;;;;OAKG;IACI,2BAA2B,IAAI,KAAK,CAAC;QACxC,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,IAAI,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,iBAAiB,CAAC;KAC9B,CAAC;IAUF;;;;;;OAMG;IACI,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIjF;;;OAGG;IACU,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAM1D;;;;;;;;;;;;OAYG;cACa,gBAAgB,CAC5B,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,OAAO,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,aAAa,GAAE,OAAe,EAC9B,UAAU,GAAE,OAAe,EAC3B,iBAAiB,CAAC,EAAE,MAAM,EAC1B,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,IAAI,CAAC;IA+DhB;;;;;;;;;;;OAWG;WACiB,eAAe,CAC/B,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,OAAO,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,GAAE,OAAe,EAC3B,iBAAiB,CAAC,EAAE,MAAM,EAC1B,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,IAAI,CAAC;IAQhB,4EAA4E;IAE5E,4EAA4E;IAE5E;;;OAGG;cACgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,sBAAsB,EAAE;IAMxG;;;OAGG;cACsB,mBAAmB,CACxC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,EACxC,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,QAAQ,GACf,OAAO,CAAC,YAAY,EAAE,CAAC;IA+B1B;;;;;;;;OAQG;cACsB,qBAAqB,CAC1C,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAC3B,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,QAAQ,GACf,OAAO,CAAC,IAAI,CAAC;IAmChB;;;;OAIG;IACH,SAAS,CAAC,wBAAwB,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAItF,4EAA4E;IAE5E,4EAA4E;cAEnD,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;cAYhF,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;cAkB9H,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;cAOzG,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;cA2D5K,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;cAO5G,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAe/G;;OAEG;YACW,+BAA+B;IAwB7C,4EAA4E;IAE5E,4EAA4E;IAE5E;;;;;;;OAOG;cACsB,eAAe,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,QAAQ,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IA2CrC,4EAA4E;IAE5E,4EAA4E;IAE5E;;;;;;;;;;;;;;;;;;OAkBG;cACa,yBAAyB,CACrC,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,EAC1C,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,IAAI,CAAC;IAqDhB;;;;;;;;;;;;OAYG;cACa,oBAAoB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,cAAc,EAAE,eAAe,EAAE,EACjC,UAAU,EAAE,UAAU,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAIrC,4EAA4E;IAE5E,4EAA4E;IAE5E;;;;;;;;;;;;;OAaG;IACU,eAAe,CACxB,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,EACxB,OAAO,CAAC,EAAE,sBAAsB,EAChC,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAevC,4EAA4E;IAE5E,4EAA4E;IAE5E,4EAA4E;IAE5E,4EAA4E;IAE5E;;;;;OAKG;IACH,SAAS,CAAC,UAAU,IAAI,UAAU,GAAG,IAAI;IAIzC;;;;;OAKG;IACH,SAAS,KAAK,sBAAsB,IAAI,MAAM,CAE7C;IAED;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAEhF;;;;OAIG;IACH,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIlD;;;;;OAKG;IACH,SAAS,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI7D;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,SAAS,CAAC,qBAAqB,CAC3B,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,OAAO,EACxB,eAAe,EAAE,MAAM,GACxB,MAAM,GAAG,IAAI;IAMhB;;;;OAIG;IACH,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,GAAG,MAAM;IAIrF;;;;OAIG;cACa,+BAA+B,CAC3C,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,QAAQ,GAChB,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAI5D;;;;;OAKG;cACsB,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;cAoRtG,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAKpI,4EAA4E;IAE5E,4EAA4E;IAE5E;;;OAGG;IACH,SAAS,CAAC,yBAAyB,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,wBAAwB,GAAG,IAAI,GAAG,MAAM;IAW/G;;;OAGG;IACH,SAAS,CAAC,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,wBAAwB,GAAG,IAAI,GAAG,eAAe,EAAE;IAwCzH;;;OAGG;IACH,SAAS,CAAC,uBAAuB,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAmC3F,4EAA4E;IAE5E,4EAA4E;IAE5E;;;;;;OAMG;cACa,qBAAqB,CACjC,UAAU,EAAE,wBAAwB,EACpC,IAAI,EAAE,QAAQ,EACd,KAAK,GAAE,MAAM,EAAO,GACrB,OAAO,CAAC,MAAM,CAAC;IAsClB,4EAA4E;IAE5E,4EAA4E;IAE5E;;;OAGG;IACH,SAAS,CAAC,cAAc,CACpB,YAAY,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EACxD,YAAY,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3D,OAAO;IAQV,4EAA4E;IAE5E,4EAA4E;IAE5E;;;;;;OAMG;IACU,sBAAsB,CAAC,CAAC,GAAG,OAAO,EAC3C,MAAM,EAAE,2BAA2B,EAAE,EACrC,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC;IAiK7C;;;;OAIG;cACa,6BAA6B,CACzC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,QAAQ,GACf,OAAO,CAAC,MAAM,CAAC;IAgClB;;;;OAIG;cACa,2BAA2B,CACvC,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,2BAA2B,CAAC;QAAC,UAAU,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EAC5G,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA2B9G;;OAEG;cACa,qBAAqB,CAAC,CAAC,GAAG,OAAO,EAC7C,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;IAS1C;;;OAGG;cACa,0BAA0B,CAAC,CAAC,GAAG,OAAO,EAClD,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;IAW1C;;;;OAIG;YACW,sBAAsB;IAsBpC;;OAEG;YACW,oBAAoB;IAalC;;;;OAIG;cACa,6BAA6B,CAAC,CAAC,GAAG,OAAO,EACrD,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,MAAM,EAC1B,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAC1D,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;IA4C1C;;;OAGG;cACa,wBAAwB,CACpC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,MAAM,EAAE,CAAC;IAWpB;;;OAGG;cACa,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAC3C,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,CAAC,EAAE,CAAC;IA2Bf,4EAA4E;IAE5E,4EAA4E;IAE5E;;;;;OAKG;IACU,wBAAwB,CAAC,CAAC,GAAG,OAAO,EAC7C,MAAM,EAAE,4BAA4B,EAAE,EACtC,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC;IAgF/C;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS;IAiCzE;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,IAAI;IAgC/K;;;;;;;;;OASG;IACH,SAAS,CAAC,yBAAyB,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,IAAI;IAWnF;;OAEG;IACH,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS;IAWtE;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAgBlE;;;OAGG;cACa,0BAA0B,CACtC,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,4BAA4B,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,CAAC,EACzF,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA0B9G;;OAEG;cACa,6BAA6B,CAAC,CAAC,GAAG,OAAO,EACrD,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,GAAG,eAAe,EACjC,WAAW,CAAC,EAAE,QAAQ,EACtB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;IAqB3C,4EAA4E;IAE5E,4EAA4E;IAE5E,OAAO,CAAC,sBAAsB,CAAkB;IAEhD,OAAO,KAAK,aAAa,GAMxB;IAED;;;;OAIG;cACa,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;IA8HzG;;OAEG;cACa,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI/G;;;OAGG;cACa,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;IA0E1G;;;OAGG;IACH,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,QAAQ,GAAG,SAAS;IAqBzF;;;;;;OAMG;IACH,SAAS,CAAC,sBAAsB,CAC5B,KAAK,EAAE,SAAS,EAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,WAAW,CAAC,EAAE,QAAQ,GACvB;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAmBlE;;;;;;;;;;;OAWG;cACsB,4BAA4B,CACjD,IAAI,EAAE,kBAAkB,EACxB,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC,cAAc,CAAC;IAkC1B;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;OAEG;cACa,eAAe,CAC3B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,cAAc,EACtB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1C,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAgCjC;;;OAGG;cACa,oBAAoB,CAChC,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,cAAc,EACtB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1C,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAgCjC;;OAEG;cACa,sBAAsB,CAClC,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,QAAQ,GACvB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAYxE;;OAEG;IACH,SAAS,CAAC,oBAAoB,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAClC,MAAM,EAAE,cAAc,GACvB;QAAE,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAexE;;;OAGG;IACH,SAAS,CAAC,mBAAmB,CACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,QAAQ,GACvB,IAAI;IAiCP;;;OAGG;cACa,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1I,4EAA4E;IAE5E,4EAA4E;IAE5E;;;OAGG;IACU,IAAI,CACb,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,YAAY,EAC1B,yBAAyB,EAAE,MAAM,EAAE,GAAG,IAAI,YAAO,EACjD,IAAI,EAAE,QAAQ,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAoE1C,4EAA4E;IAE5E,4EAA4E;IAE5E;;;;OAIG;cACsB,cAAc,CACnC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,oBAAoB,GAC3B,OAAO,CAAC,OAAO,CAAC;IAsBnB;;;OAGG;cACsB,cAAc,CACnC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,GACf,OAAO,CAAC,OAAO,CAAC;IAiBnB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAoBjC,4EAA4E;IAE5E,4EAA4E;IAE5E;;;OAGG;IACH,SAAS,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI1D;;;;;;OAMG;IACU,gBAAgB,CACzB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,qBAAqB,EAAE,EACrC,WAAW,CAAC,EAAE,QAAQ,EACtB,aAAa,CAAC,EAAE,iBAAiB,EACjC,YAAY,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,iBAAiB,CAAC;IAiN7B,4EAA4E;IAE5E,4EAA4E;IAE5E;;;OAGG;IACU,sBAAsB,CAC/B,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,qBAAqB,EAAE,EACrC,WAAW,CAAC,EAAE,QAAQ,EACtB,aAAa,CAAC,EAAE,iBAAiB,GAClC,OAAO,CAAC,uBAAuB,CAAC;IA+KnC,4EAA4E;IAE5E,4EAA4E;IAE5E;;;OAGG;IACH,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA8BrG,4EAA4E;IAE5E,4EAA4E;IAE5E;;;;;;;OAOG;IACH,SAAS,CAAC,uBAAuB,CAC7B,IAAI,EAAE,OAAO,EAAE,EACf,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,IAAI;IAoBP;;;;;;OAMG;IACH,SAAS,CAAC,2BAA2B,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM;CAc3F"}
1
+ {"version":3,"file":"GenericDatabaseProvider.d.ts","sourceRoot":"","sources":["../src/GenericDatabaseProvider.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ import { v4 as uuidv4 } from 'uuid';
23
23
  import { SqlLoggingSessionImpl } from './SqlLogger.js';
24
24
  // QueryCompositionEngine is now owned by RenderPipeline
25
25
  import { RenderPipeline } from './renderPipeline.js';
26
+ import { useJsonArgShape } from './crudSprocFieldRules.js';
26
27
  import { QueryEngine, ViewInfo, } from '@memberjunction/core-entities';
27
28
  import { AIEngine } from '@memberjunction/aiengine';
28
29
  import { QueueManager } from '@memberjunction/queue';
@@ -133,13 +134,18 @@ export class GenericDatabaseProvider extends DatabaseProviderBase {
133
134
  async CreateSqlLogger(filePath, options) {
134
135
  const sessionId = uuidv4();
135
136
  const mjCoreSchema = this.ConfigData.MJCoreSchemaName;
137
+ const dialect = this.getDialect();
136
138
  const session = new SqlLoggingSessionImpl(sessionId, filePath, {
137
139
  defaultSchemaName: mjCoreSchema,
138
140
  // Inject the platform's batch separator as the default so callers don't need to
139
141
  // hardcode 'GO'. Callers can still override by passing batchSeparator explicitly.
140
142
  batchSeparator: this.PlatformBatchSeparator || undefined,
141
143
  ...options
142
- });
144
+ },
145
+ // Pass the platform dialect through so SQL emission (Flyway placeholder escaping etc.)
146
+ // uses the right form for SQL Server vs. PostgreSQL. Falls back to the constructor's
147
+ // default (SQLServerDialect) when a subclass hasn't overridden getDialect().
148
+ dialect ?? undefined);
143
149
  // Initialize the session (create file, write header)
144
150
  await session.initialize();
145
151
  // Store in active sessions map
@@ -678,6 +684,38 @@ export class GenericDatabaseProvider extends DatabaseProviderBase {
678
684
  get PlatformBatchSeparator() {
679
685
  return this.getDialect()?.BatchSeparator() ?? '';
680
686
  }
687
+ /**
688
+ * Maximum number of parameters a CRUD stored procedure (`spCreate*`/`spUpdate*`/`spDelete*`)
689
+ * may declare on this database platform before CodeGen must emit a JSON-arg shape instead.
690
+ *
691
+ * - SQL Server: `Infinity` — SS supports up to 2,100 parameters per procedure, far beyond
692
+ * any realistic CRUD sproc.
693
+ * - PostgreSQL: `90` — PG's hard `FUNC_MAX_ARGS` ceiling is 100 (compiled into the server,
694
+ * not configurable on managed services like RDS/Aurora). 90 leaves headroom for column
695
+ * adds without flipping sproc shape unexpectedly.
696
+ *
697
+ * Used by the shared `useJsonArgShape` predicate (CodeGen + provider call-site) to decide
698
+ * whether a given sproc should emit as typed-args + `_Clear` companions (today's shape) or
699
+ * as a single-JSONB-arg sproc with key-presence tri-state semantics. See
700
+ * [plans/json-arg-crud-sprocs.md](../../../plans/json-arg-crud-sprocs.md) and GitHub
701
+ * issue #2552.
702
+ */
703
+ get ProcedureParamLimit() {
704
+ return Infinity;
705
+ }
706
+ /**
707
+ * Returns true when CRUD sproc generation and call-construction for the
708
+ * given entity + sproc verb should use a single JSON-arg shape (instead of
709
+ * typed args + `_Clear` companions).
710
+ *
711
+ * Convenience wrapper around the pure `useJsonArgShape` helper, applying
712
+ * this provider's `ProcedureParamLimit`. CodeGen and runtime call-sites
713
+ * can invoke this via the provider instance to keep sproc emit and sproc
714
+ * invocation in lockstep.
715
+ */
716
+ UseJsonArgShape(entity, sprocType) {
717
+ return useJsonArgShape(entity, sprocType, this.ProcedureParamLimit);
718
+ }
681
719
  /**
682
720
  * Builds a platform-specific TOP/LIMIT clause for non-paginated row limits.
683
721
  * SQL Server: `TOP N`; PostgreSQL returns empty (uses LIMIT via BuildPaginationSQL).
@@ -1082,7 +1120,14 @@ export class GenericDatabaseProvider extends DatabaseProviderBase {
1082
1120
  }
1083
1121
  /**
1084
1122
  * Builds user search SQL for the given entity and search string.
1123
+ *
1085
1124
  * Supports full-text search (if enabled) and field-by-field LIKE searching.
1125
+ * For the LIKE path:
1126
+ * - honors EntityField.UserSearchPredicateAPI (Exact / BeginsWith / EndsWith / Contains)
1127
+ * so index-seekable predicates can be expressed,
1128
+ * - escapes LIKE metacharacters (%, _, [, ]) in user input with ESCAPE '\\',
1129
+ * - skips fields that are not sensible text-search targets (non-text types,
1130
+ * unbounded text columns when FTX is off).
1086
1131
  */
1087
1132
  createViewUserSearchSQL(entityInfo, userSearchString) {
1088
1133
  let sUserSearchSQL = '';
@@ -1106,23 +1151,78 @@ export class GenericDatabaseProvider extends DatabaseProviderBase {
1106
1151
  sUserSearchSQL = `${pkName} IN (SELECT ${pkName} FROM ${this.QuoteSchemaAndView(entityInfo.SchemaName, entityInfo.FullTextSearchFunction ?? '')}('${u}'))`;
1107
1152
  }
1108
1153
  else {
1154
+ const escapedTerm = this.escapeLikeTerm(safeUserSearchString);
1109
1155
  for (const field of entityInfo.Fields) {
1110
- if (field.IncludeInUserSearchAPI) {
1111
- let sParam = '';
1112
- if (sUserSearchSQL.length > 0)
1113
- sUserSearchSQL += ' OR ';
1114
- if (field.UserSearchParamFormatAPI && field.UserSearchParamFormatAPI.length > 0)
1115
- sParam = field.UserSearchParamFormatAPI.replace('{0}', safeUserSearchString);
1116
- else
1117
- sParam = ` LIKE '%${safeUserSearchString}%'`;
1118
- sUserSearchSQL += `(${this.QuoteIdentifier(field.Name)} ${sParam})`;
1119
- }
1156
+ if (!field.IncludeInUserSearchAPI)
1157
+ continue;
1158
+ const sParam = this.buildPerFieldSearchPredicate(field, escapedTerm, safeUserSearchString);
1159
+ if (!sParam)
1160
+ continue;
1161
+ if (sUserSearchSQL.length > 0)
1162
+ sUserSearchSQL += ' OR ';
1163
+ sUserSearchSQL += `(${this.QuoteIdentifier(field.Name)} ${sParam})`;
1120
1164
  }
1121
1165
  if (sUserSearchSQL.length > 0)
1122
1166
  sUserSearchSQL = '(' + sUserSearchSQL + ')';
1123
1167
  }
1124
1168
  return sUserSearchSQL;
1125
1169
  }
1170
+ /**
1171
+ * Build the SQL fragment that compares one EntityField against a user search term.
1172
+ *
1173
+ * Resolution order:
1174
+ * 1. UserSearchParamFormatAPI (custom override) wins if set, with `{0}` replaced
1175
+ * by the single-quote-escaped raw term. Caller is responsible for escaping
1176
+ * LIKE metacharacters in their format string if needed.
1177
+ * 2. Otherwise, the field must be a text-searchable type. Non-text and unbounded-
1178
+ * text fields return '' (caller skips them).
1179
+ * 3. Otherwise, the predicate is chosen from UserSearchPredicateAPI:
1180
+ * Exact -> = N'term' (index-seekable)
1181
+ * BeginsWith -> LIKE N'term%' ESCAPE '\\' (index-seekable)
1182
+ * EndsWith -> LIKE N'%term' ESCAPE '\\'
1183
+ * Contains -> LIKE N'%term%' ESCAPE '\\' (default, non-seekable)
1184
+ */
1185
+ buildPerFieldSearchPredicate(field, escapedTerm, rawSafeTerm) {
1186
+ if (field.UserSearchParamFormatAPI && field.UserSearchParamFormatAPI.length > 0) {
1187
+ return field.UserSearchParamFormatAPI.replace('{0}', rawSafeTerm);
1188
+ }
1189
+ if (!this.isTextSearchableType(field))
1190
+ return '';
1191
+ const pred = (field.UserSearchPredicateAPI ?? 'Contains').trim();
1192
+ switch (pred) {
1193
+ case 'Exact':
1194
+ return ` = N'${rawSafeTerm}'`;
1195
+ case 'BeginsWith':
1196
+ return ` LIKE N'${escapedTerm}%' ESCAPE '\\'`;
1197
+ case 'EndsWith':
1198
+ return ` LIKE N'%${escapedTerm}' ESCAPE '\\'`;
1199
+ case 'Contains':
1200
+ default:
1201
+ return ` LIKE N'%${escapedTerm}%' ESCAPE '\\'`;
1202
+ }
1203
+ }
1204
+ /**
1205
+ * Escape characters that have special meaning in SQL Server LIKE patterns.
1206
+ * The backslash itself must be escaped first so its replacement isn't reprocessed.
1207
+ * Pair with `ESCAPE '\\'` on the LIKE clause.
1208
+ */
1209
+ escapeLikeTerm(safeTerm) {
1210
+ return safeTerm.replace(/[\\%_\[\]]/g, m => '\\' + m);
1211
+ }
1212
+ /**
1213
+ * True if the field's column type is appropriate for text-pattern search.
1214
+ * Non-text types are rejected because LIKE forces an implicit per-row CONVERT
1215
+ * to nvarchar. Unbounded (MAX/ntext/text) columns are rejected because the
1216
+ * LIKE path cannot seek them; FTX is the right tool for those.
1217
+ */
1218
+ isTextSearchableType(field) {
1219
+ const t = (field.Type ?? '').toLowerCase();
1220
+ if (t !== 'nvarchar' && t !== 'varchar' && t !== 'char' && t !== 'nchar')
1221
+ return false;
1222
+ if (field.Length === -1)
1223
+ return false;
1224
+ return true;
1225
+ }
1126
1226
  /**************************************************************************/
1127
1227
  // RenderViewWhereClause — View Template Rendering
1128
1228
  /**************************************************************************/
@@ -1177,6 +1277,24 @@ export class GenericDatabaseProvider extends DatabaseProviderBase {
1177
1277
  /**************************************************************************/
1178
1278
  // Cache Check Utilities
1179
1279
  /**************************************************************************/
1280
+ /**
1281
+ * Parses a timestamp string sent by the client.
1282
+ *
1283
+ * Accepts both ISO 8601 strings (the canonical form) and all-digit strings
1284
+ * representing milliseconds since epoch. The numeric form has been observed
1285
+ * in the wild from clients whose cache layer round-tripped a Date through a
1286
+ * lossy serializer — `new Date('1778004618383')` returns `Invalid Date`,
1287
+ * but `new Date(Number('1778004618383'))` is a valid timestamp. Returning
1288
+ * `null` on unparseable input lets callers degrade to a stale-cache fallback
1289
+ * instead of throwing `RangeError: Invalid time value` on a downstream
1290
+ * `.toISOString()`.
1291
+ */
1292
+ parseClientTimestamp(raw) {
1293
+ if (!raw)
1294
+ return null;
1295
+ const d = /^\d+$/.test(raw) ? new Date(Number(raw)) : new Date(raw);
1296
+ return isNaN(d.getTime()) ? null : d;
1297
+ }
1180
1298
  /**
1181
1299
  * Compares client cache status with server status to determine if cache is current.
1182
1300
  * Checks both row count and maxUpdatedAt timestamp.
@@ -1184,10 +1302,14 @@ export class GenericDatabaseProvider extends DatabaseProviderBase {
1184
1302
  isCacheCurrent(clientStatus, serverStatus) {
1185
1303
  if (clientStatus.rowCount !== serverStatus.rowCount)
1186
1304
  return false;
1187
- const clientDate = new Date(clientStatus.maxUpdatedAt);
1305
+ const clientDate = this.parseClientTimestamp(clientStatus.maxUpdatedAt);
1306
+ if (!clientDate)
1307
+ return false;
1188
1308
  const serverDate = serverStatus.maxUpdatedAt ? new Date(serverStatus.maxUpdatedAt) : null;
1189
1309
  if (!serverDate)
1190
1310
  return clientStatus.rowCount === 0;
1311
+ if (isNaN(serverDate.getTime()))
1312
+ return false;
1191
1313
  return clientDate.toISOString() === serverDate.toISOString();
1192
1314
  }
1193
1315
  /**************************************************************************/
@@ -1466,12 +1588,17 @@ export class GenericDatabaseProvider extends DatabaseProviderBase {
1466
1588
  const updatedRows = await this.getUpdatedRowsSince(params, entityInfo, clientMaxUpdatedAt, whereSQL, contextUser);
1467
1589
  const deletedRecordIDs = await this.getDeletedRecordIDsSince(entityInfo.ID, clientMaxUpdatedAt, contextUser);
1468
1590
  // Validation: detect hidden deletes not tracked in RecordChanges
1469
- const clientMaxUpdatedDate = new Date(clientMaxUpdatedAt);
1591
+ const clientMaxUpdatedDate = this.parseClientTimestamp(clientMaxUpdatedAt);
1592
+ if (!clientMaxUpdatedDate) {
1593
+ // Unparseable client timestamp — can't trust the differential math; fall back.
1594
+ return this.runFullQueryAndReturn(params, viewIndex, contextUser);
1595
+ }
1470
1596
  const newInserts = updatedRows.filter(row => {
1471
1597
  const createdAt = row['__mj_CreatedAt'];
1472
1598
  if (!createdAt)
1473
1599
  return false;
1474
- return new Date(String(createdAt)) > clientMaxUpdatedDate;
1600
+ const created = new Date(String(createdAt));
1601
+ return !isNaN(created.getTime()) && created > clientMaxUpdatedDate;
1475
1602
  }).length;
1476
1603
  const serverRowCount = serverStatus.rowCount ?? 0;
1477
1604
  const impliedDeletes = clientRowCount + newInserts - serverRowCount;