@tstdl/base 0.93.45 → 0.93.47
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/orm/sqls.d.ts +8 -1
- package/orm/sqls.js +23 -4
- package/package.json +1 -1
package/orm/sqls.d.ts
CHANGED
|
@@ -61,7 +61,14 @@ export type TsHeadlineOptions = {
|
|
|
61
61
|
fragmentDelimiter?: string;
|
|
62
62
|
};
|
|
63
63
|
export declare function enumValue<T extends EnumerationObject>(enumeration: T, dbEnum: PgEnumFromEnumeration<T> | string | null, value: EnumerationValue<T>): SQL<string>;
|
|
64
|
-
|
|
64
|
+
/**
|
|
65
|
+
* Generates a SQL condition that ensures exactly one of the specified columns is non-null and optional custom conditions.
|
|
66
|
+
* @param enumeration The enumeration object
|
|
67
|
+
* @param discriminator The column used to discriminate between different enumeration values
|
|
68
|
+
* @param conditionMapping An object mapping enumeration values to columns and conditions
|
|
69
|
+
*/
|
|
70
|
+
export declare function exclusiveReference<T extends EnumerationObject>(enumeration: T, discriminator: Column, conditionMapping: Record<EnumerationValue<T>, Column | [Column, condition: boolean | SQL] | null>): SQL;
|
|
71
|
+
export declare function exclusiveNotNull(...columns: Column[]): SQL;
|
|
65
72
|
/**
|
|
66
73
|
* Generates a SQL `CASE ... WHEN ... END` statement for dynamic condition mapping based on an enumeration.
|
|
67
74
|
*
|
package/orm/sqls.js
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* simplifying common SQL operations like generating UUIDs, working with intervals,
|
|
5
5
|
* and aggregating data.
|
|
6
6
|
*/
|
|
7
|
-
import { Column, eq, sql, isNotNull as sqlIsNotNull, Table } from 'drizzle-orm';
|
|
7
|
+
import { and, Column, eq, sql, isNotNull as sqlIsNotNull, Table } from 'drizzle-orm';
|
|
8
8
|
import { match, P } from 'ts-pattern';
|
|
9
|
-
import { objectEntries } from '../utils/object/object.js';
|
|
10
|
-
import { assertDefined, isDefined, isInstanceOf, isNull, isNumber, isString } from '../utils/type-guards.js';
|
|
9
|
+
import { mapObjectValues, objectEntries, objectValues } from '../utils/object/object.js';
|
|
10
|
+
import { assertDefined, isDefined, isInstanceOf, isNotNull, isNull, isNumber, isString } from '../utils/type-guards.js';
|
|
11
11
|
import { getEnumName } from './enums.js';
|
|
12
12
|
/** Drizzle SQL helper for getting the current transaction's timestamp. Returns a Date object. */
|
|
13
13
|
export const TRANSACTION_TIMESTAMP = sql `transaction_timestamp()`;
|
|
@@ -24,7 +24,26 @@ export function enumValue(enumeration, dbEnum, value) {
|
|
|
24
24
|
const enumType = isString(dbEnum) ? sql `"${sql.raw(dbEnum)}"` : dbEnum;
|
|
25
25
|
return sql `'${sql.raw(String(value))}'::${enumType}`;
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Generates a SQL condition that ensures exactly one of the specified columns is non-null and optional custom conditions.
|
|
29
|
+
* @param enumeration The enumeration object
|
|
30
|
+
* @param discriminator The column used to discriminate between different enumeration values
|
|
31
|
+
* @param conditionMapping An object mapping enumeration values to columns and conditions
|
|
32
|
+
*/
|
|
33
|
+
export function exclusiveReference(enumeration, discriminator, conditionMapping) {
|
|
34
|
+
const columns = objectValues(conditionMapping).filter(isNotNull).map((value) => isInstanceOf(value, Column) ? value : value[0]);
|
|
35
|
+
const mapping = mapObjectValues(conditionMapping, (value) => {
|
|
36
|
+
if (isInstanceOf(value, Column)) {
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
if (isNull(value)) {
|
|
40
|
+
return sql `FALSE`;
|
|
41
|
+
}
|
|
42
|
+
return value[1];
|
|
43
|
+
});
|
|
44
|
+
return and(exclusiveNotNull(...columns), enumerationCaseWhen(enumeration, discriminator, mapping));
|
|
45
|
+
}
|
|
46
|
+
export function exclusiveNotNull(...columns) {
|
|
28
47
|
return eq(numNonNulls(...columns), sql.raw('1'));
|
|
29
48
|
}
|
|
30
49
|
/**
|