@cellaware/utils 8.17.0 → 8.17.2

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.
@@ -340,7 +340,7 @@ function injectParameters(query, parameters) {
340
340
  if (parameters.length > 0) {
341
341
  let whereBuf = '1 = 1';
342
342
  for (const parameter of parameters) {
343
- whereBuf += ` AND ${codifyCondition(parameter)}`;
343
+ whereBuf += ` AND ${codifyCondition(parameter, 'cosmos')}`;
344
344
  }
345
345
  const subquery = `SELECT * FROM ${SUBQUERY_QUERY_PLACEHOLDER} param_sq WHERE ${whereBuf}`;
346
346
  queryMut = injectSubquery(queryMut, subquery);
@@ -147,7 +147,8 @@ export declare function initDatagridCondition(): DatagridCondition;
147
147
  export declare function summarizeCondition(condition: DatagridCondition, localeMessageFn: (language: string, messageId: string) => Promise<string>): Promise<string>;
148
148
  export declare function summarizeConditionMarkdown(condition: DatagridCondition, localeMessageFn: (language: string, messageId: string) => Promise<string>): Promise<string>;
149
149
  export declare function summarizeConditionHtml(condition: DatagridCondition, localeMessageFn: (language: string, messageId: string) => Promise<string>): Promise<string>;
150
- export declare function codifyCondition(condition: DatagridCondition): string;
150
+ /** Supported dialects: `mssql` | `oracle` | `snowflake` | `sqlite` | `cosmos` */
151
+ export declare function codifyCondition(condition: DatagridCondition, sqlDialect: string): string;
151
152
  /**
152
153
  * Equivalent of `parseNumeric` in front end
153
154
  *
@@ -379,7 +379,15 @@ export async function summarizeConditionHtml(condition, localeMessageFn) {
379
379
  }
380
380
  return `<code>${condition.columnName}</code> ${ruleStr}`;
381
381
  }
382
- export function codifyCondition(condition) {
382
+ const DATE_FORMATTERS = {
383
+ mssql: column => `CONVERT(VARCHAR(10), CAST(${column} AS DATE), 23)`,
384
+ oracle: column => `TO_CHAR(CAST(${column} AS DATE), 'YYYY-MM-DD')`,
385
+ snowflake: column => `TO_CHAR(TO_DATE(${column}), 'YYYY-MM-DD')`,
386
+ sqlite: column => `strftime('%Y-%m-%d', date(${column}))`,
387
+ cosmos: column => `SUBSTRING(String(${column}), 0, 10)`,
388
+ };
389
+ /** Supported dialects: `mssql` | `oracle` | `snowflake` | `sqlite` | `cosmos` */
390
+ export function codifyCondition(condition, sqlDialect) {
383
391
  // NOTE: since we check for action/unsafe SQL with every query, we do not need to check for SQL injection here.
384
392
  if (condition.dataType === 'number') {
385
393
  const v1 = !condition.value || condition.value == '' ? 0 : condition.value;
@@ -413,7 +421,9 @@ export function codifyCondition(condition) {
413
421
  const v1 = !condition.value || condition.value == '' ? 0 : condition.value;
414
422
  const v2 = !condition.value2 || condition.value2 == '' ? 0 : condition.value2;
415
423
  // Need to wrap in quotes due to how ChatWMS will alias columns (ex: location_id -> Location ID).
416
- const quotedColumnName = `"${condition.columnName}"`;
424
+ // Also need to make sure we are using a consistent date format.
425
+ // **Important:** since we do not currently support times, we will use a simple date format (YYYY-MM-DD).
426
+ const quotedColumnName = DATE_FORMATTERS[sqlDialect](`"${condition.columnName}"`);
417
427
  switch (condition.rule) {
418
428
  case ConditionalFormatRule.EQUALS:
419
429
  return `${quotedColumnName} = '${v1}'`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cellaware/utils",
3
- "version": "8.17.0",
3
+ "version": "8.17.2",
4
4
  "description": "Cellaware Utilities for Node.js",
5
5
  "author": "Cellaware Technologies",
6
6
  "type": "module",