Null equivalence - remove feature flag (#16222)

This commit is contained in:
Etienne
2025-12-01 19:06:24 +01:00
committed by GitHub
parent da7536124e
commit 68c429a54a
23 changed files with 61 additions and 249 deletions
@@ -1,79 +0,0 @@
import { isNonEmptyString } from '@sniptt/guards';
import {
FieldMetadataType,
compositeTypeDefinitions,
} from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import {
FieldMetadataException,
FieldMetadataExceptionCode,
} from 'src/engine/metadata-modules/field-metadata/field-metadata.exception';
import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import {
IndexMetadataException,
IndexMetadataExceptionCode,
} from 'src/engine/metadata-modules/index-metadata/index-field-metadata.exception';
//TODO : To delete once IS_NULL_EQUIVALENCE_ENABLED feature flag removed
export const computeUniqueIndexWhereClause = (
fieldMetadata: Pick<FieldMetadataEntity, 'type' | 'name' | 'defaultValue'>,
) => {
const defaultValue = fieldMetadata.defaultValue;
if (!isDefined(defaultValue)) return;
if (
fieldMetadata.type === FieldMetadataType.RELATION ||
fieldMetadata.type === FieldMetadataType.MORPH_RELATION
) {
throw new IndexMetadataException(
`Unique index cannot be created for relation or morph relation field ${fieldMetadata.name}`,
IndexMetadataExceptionCode.INDEX_NOT_SUPPORTED_FOR_MORH_RELATION_FIELD_AND_RELATION_FIELD,
);
}
if (!isCompositeFieldMetadataType(fieldMetadata.type)) {
return `"${fieldMetadata.name}" != ${defaultValue}`;
}
const compositeType = compositeTypeDefinitions.get(fieldMetadata.type);
if (!isDefined(compositeType)) {
throw new FieldMetadataException(
`Composite type not found for field metadata type: ${fieldMetadata.type}`,
FieldMetadataExceptionCode.INTERNAL_SERVER_ERROR,
);
}
const defaultDefaultValueProperties = Object.keys(defaultValue);
const columnNamesWithDefaultValues = compositeType.properties
.filter(
(property) =>
property.isIncludedInUniqueConstraint &&
defaultDefaultValueProperties.includes(property.name),
)
.map((property) => {
const defaultValueProperty =
defaultValue[property.name as keyof typeof defaultValue];
if (isNonEmptyString(defaultValueProperty)) {
return [
computeCompositeColumnName(fieldMetadata, property),
defaultValueProperty,
];
}
})
.filter(isDefined);
return columnNamesWithDefaultValues.length > 0
? columnNamesWithDefaultValues
.map(
([columnName, defaultValue]) => `"${columnName}" != ${defaultValue}`,
)
.join(' OR ')
: undefined;
};