Integration testing v2 enum field types fail and success path (#14010)
# Introduction Migrating and improving performances of field enum integrations tests success and failing tests cases to be using the new v2 api ## Discovered issue When deleting an object in v1 it will leave related enums until the object is re-created Something not done anymore within the create in v2 but in the delete operation We should implem an upgrade command to remove such relicas ## Bugs - Update/create default value multi select runner wrong sql query -> FIX - Update default value multi select regression, we should allow option without an id to be inserted -> FIX - default value compare dynamic json stringify convertion or not in compare tools for object and fields
This commit is contained in:
+14
-13
@@ -1,8 +1,7 @@
|
||||
import { type QueryRunner } from 'typeorm';
|
||||
import { type ColumnType, type QueryRunner } from 'typeorm';
|
||||
|
||||
import { type WorkspaceSchemaColumnDefinition } from 'src/engine/twenty-orm/workspace-schema-manager/types/workspace-schema-column-definition.type';
|
||||
import { buildSqlColumnDefinition } from 'src/engine/twenty-orm/workspace-schema-manager/utils/build-sql-column-definition.util';
|
||||
import { sanitizeDefaultValue } from 'src/engine/twenty-orm/workspace-schema-manager/utils/sanitize-default-value.util';
|
||||
import { removeSqlDDLInjection } from 'src/engine/workspace-manager/workspace-migration-runner/utils/remove-sql-injection.util';
|
||||
|
||||
export class WorkspaceSchemaColumnManagerService {
|
||||
@@ -88,23 +87,25 @@ export class WorkspaceSchemaColumnManagerService {
|
||||
tableName: string;
|
||||
columnName: string;
|
||||
defaultValue?: string | number | boolean | null;
|
||||
columnType?: ColumnType;
|
||||
}): Promise<void> {
|
||||
const safeSchemaName = removeSqlDDLInjection(schemaName);
|
||||
const safeTableName = removeSqlDDLInjection(tableName);
|
||||
const safeColumnName = removeSqlDDLInjection(columnName);
|
||||
let sql: string;
|
||||
|
||||
if (defaultValue !== undefined) {
|
||||
if (typeof defaultValue === 'string') {
|
||||
const safeDefaultValue = sanitizeDefaultValue(defaultValue);
|
||||
|
||||
sql = `ALTER TABLE "${safeSchemaName}"."${safeTableName}" ALTER COLUMN "${safeColumnName}" SET DEFAULT ${safeDefaultValue}`;
|
||||
} else {
|
||||
sql = `ALTER TABLE "${safeSchemaName}"."${safeTableName}" ALTER COLUMN "${safeColumnName}" SET DEFAULT ${defaultValue}`;
|
||||
const computeDefaultValueSqlQuery = () => {
|
||||
if (defaultValue === undefined) {
|
||||
return `ALTER TABLE "${safeSchemaName}"."${safeTableName}" ALTER COLUMN "${safeColumnName}" DROP DEFAULT`;
|
||||
}
|
||||
} else {
|
||||
sql = `ALTER TABLE "${safeSchemaName}"."${safeTableName}" ALTER COLUMN "${safeColumnName}" DROP DEFAULT`;
|
||||
}
|
||||
|
||||
if (defaultValue === null) {
|
||||
return `ALTER TABLE "${safeSchemaName}"."${safeTableName}" ALTER COLUMN "${safeColumnName}" SET DEFAULT NULL`;
|
||||
}
|
||||
|
||||
return `ALTER TABLE "${safeSchemaName}"."${safeTableName}" ALTER COLUMN "${safeColumnName}" SET DEFAULT ${defaultValue}`;
|
||||
};
|
||||
|
||||
const sql = computeDefaultValueSqlQuery();
|
||||
|
||||
await queryRunner.query(sql);
|
||||
}
|
||||
|
||||
+1
-4
@@ -1,7 +1,6 @@
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { type WorkspaceSchemaColumnDefinition } from 'src/engine/twenty-orm/workspace-schema-manager/types/workspace-schema-column-definition.type';
|
||||
import { sanitizeDefaultValue } from 'src/engine/twenty-orm/workspace-schema-manager/utils/sanitize-default-value.util';
|
||||
import { removeSqlDDLInjection } from 'src/engine/workspace-manager/workspace-migration-runner/utils/remove-sql-injection.util';
|
||||
|
||||
export const buildSqlColumnDefinition = (
|
||||
@@ -32,9 +31,7 @@ export const buildSqlColumnDefinition = (
|
||||
}
|
||||
|
||||
if (isDefined(column.default) && column.type !== 'tsvector') {
|
||||
const safeDefault = sanitizeDefaultValue(column.default);
|
||||
|
||||
parts.push(`DEFAULT ${safeDefault}`);
|
||||
parts.push(`DEFAULT ${column.default}`);
|
||||
}
|
||||
|
||||
return parts.join(' ');
|
||||
|
||||
Reference in New Issue
Block a user