feat(core): Add workflowVersionId column to ExecutionData table (no-changelog) (#21926)

This commit is contained in:
Charlie Kolb
2025-12-17 18:03:22 +01:00
committed by GitHub
parent 09566a0dd4
commit 337d8daa15
6 changed files with 27 additions and 2 deletions
@@ -27,6 +27,9 @@ export class ExecutionData {
@PrimaryColumn({ transformer: idStringifier })
executionId: string;
@Column({ type: 'varchar', length: 36, nullable: true })
workflowVersionId: string | null;
@OneToOne('ExecutionEntity', 'executionData', {
onDelete: 'CASCADE',
})
@@ -0,0 +1,11 @@
import type { MigrationContext, ReversibleMigration } from '../migration-types';
export class AddWorkflowVersionIdToExecutionData1765892199653 implements ReversibleMigration {
async up({ schemaBuilder: { addColumns, column } }: MigrationContext) {
await addColumns('execution_data', [column('workflowVersionId').varchar(36)]);
}
async down({ schemaBuilder: { dropColumns } }: MigrationContext) {
await dropColumns('execution_data', ['workflowVersionId']);
}
}
@@ -127,6 +127,7 @@ import { BackfillMissingWorkflowHistoryRecords1765448186933 } from '../common/17
import { AddResolvableFieldsToCredentials1765459448000 } from '../common/1765459448000-AddResolvableFieldsToCredentials';
import { AddIconToAgentTable1765788427674 } from '../common/1765788427674-AddIconToAgentTable';
import { AddAgentIdForeignKeys1765886667897 } from '../common/1765886667897-AddAgentIdForeignKeys';
import { AddWorkflowVersionIdToExecutionData1765892199653 } from '../common/1765892199653-AddVersionIdToExecutionData';
import type { Migration } from '../migration-types';
export const mysqlMigrations: Migration[] = [
@@ -259,4 +260,5 @@ export const mysqlMigrations: Migration[] = [
AddResolvableFieldsToCredentials1765459448000,
AddIconToAgentTable1765788427674,
AddAgentIdForeignKeys1765886667897,
AddWorkflowVersionIdToExecutionData1765892199653,
];
@@ -128,6 +128,7 @@ import { BackfillMissingWorkflowHistoryRecords1765448186933 } from '../common/17
import { AddResolvableFieldsToCredentials1765459448000 } from '../common/1765459448000-AddResolvableFieldsToCredentials';
import { AddIconToAgentTable1765788427674 } from '../common/1765788427674-AddIconToAgentTable';
import { AddAgentIdForeignKeys1765886667897 } from '../common/1765886667897-AddAgentIdForeignKeys';
import { AddWorkflowVersionIdToExecutionData1765892199653 } from '../common/1765892199653-AddVersionIdToExecutionData';
import type { Migration } from '../migration-types';
export const postgresMigrations: Migration[] = [
@@ -261,4 +262,5 @@ export const postgresMigrations: Migration[] = [
AddIconToAgentTable1765788427674,
ConvertAgentIdToUuid1765804780000,
AddAgentIdForeignKeys1765886667897,
AddWorkflowVersionIdToExecutionData1765892199653,
];
@@ -123,6 +123,7 @@ import { CreateDynamicCredentialResolverTable1764682447000 } from '../common/176
import { AddDynamicCredentialEntryTable1764689388394 } from '../common/1764689388394-AddDynamicCredentialEntryTable';
import { BackfillMissingWorkflowHistoryRecords1765448186933 } from '../common/1765448186933-BackfillMissingWorkflowHistoryRecords';
import { AddIconToAgentTable1765788427674 } from '../common/1765788427674-AddIconToAgentTable';
import { AddWorkflowVersionIdToExecutionData1765892199653 } from '../common/1765892199653-AddVersionIdToExecutionData';
import type { Migration } from '../migration-types';
const sqliteMigrations: Migration[] = [
@@ -251,6 +252,7 @@ const sqliteMigrations: Migration[] = [
AddResolvableFieldsToCredentials1764689448000,
AddIconToAgentTable1765788427674,
AddAgentIdForeignKeys1765886667897,
AddWorkflowVersionIdToExecutionData1765892199653,
];
export { sqliteMigrations };
@@ -367,7 +367,12 @@ export class ExecutionRepository extends Repository<ExecutionEntity> {
// In the non-pooling sqlite driver we can't use transactions, because that creates nested transactions under highly concurrent loads, leading to errors in the database
const { identifiers: inserted } = await this.insert({ ...rest, createdAt: new Date() });
const { id: executionId } = inserted[0] as { id: string };
await this.executionDataRepository.insert({ executionId, workflowData, data });
await this.executionDataRepository.insert({
executionId,
workflowData,
data,
workflowVersionId: currentWorkflow.versionId,
});
return String(executionId);
} else {
// All other database drivers should create executions and execution-data atomically
@@ -378,7 +383,7 @@ export class ExecutionRepository extends Repository<ExecutionEntity> {
});
const { id: executionId } = inserted[0] as { id: string };
await this.executionDataRepository.createExecutionDataForExecution(
{ executionId, workflowData, data },
{ executionId, workflowData, data, workflowVersionId: currentWorkflow.versionId },
transactionManager,
);
return String(executionId);