From ce293ddb216cd3005b1253d916d87dab9557f18c Mon Sep 17 00:00:00 2001 From: Niklas van Schrick Date: Fri, 13 Feb 2026 21:29:06 +0100 Subject: [PATCH 1/3] Fix deletion of function and reference values --- app/services/namespaces/projects/flows/update_service.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/namespaces/projects/flows/update_service.rb b/app/services/namespaces/projects/flows/update_service.rb index e1c44795..c69003b1 100644 --- a/app/services/namespaces/projects/flows/update_service.rb +++ b/app/services/namespaces/projects/flows/update_service.rb @@ -197,7 +197,7 @@ def update_node_parameters(t, current_node, current_node_input, all_nodes) db_parameters[index].function_value = node[:node] else - db_parameters[index].function_value = nil + db_parameters[index].function_value&.destroy end if parameter.value.reference_value.present? @@ -227,7 +227,7 @@ def update_node_parameters(t, current_node, current_node_input, all_nodes) reference_paths: reference_paths ) else - db_parameters[index].reference_value = nil + db_parameters[index].reference_value&.destroy end next if db_parameters[index].valid? From 3f3c4b4bb07cc263b2324b5d614ec955e7bb24ab Mon Sep 17 00:00:00 2001 From: Niklas van Schrick Date: Fri, 13 Feb 2026 21:38:28 +0100 Subject: [PATCH 2/3] Destroy function and reference value on parameter destroy --- app/models/node_parameter.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/models/node_parameter.rb b/app/models/node_parameter.rb index e6bc7b80..59e10497 100644 --- a/app/models/node_parameter.rb +++ b/app/models/node_parameter.rb @@ -8,6 +8,8 @@ class NodeParameter < ApplicationRecord validate :only_one_value_present + before_destroy :destroy_value_objects + def to_grpc param = Tucana::Shared::NodeParameter.new( database_id: id, @@ -35,4 +37,9 @@ def only_one_value_present errors.add(:value, 'Only one of literal_value, reference_value, or function_value must be present') end + + def destroy_value_objects + reference_value.destroy if reference_value.present? + function_value.destroy if function_value.present? + end end From 3a779bce17ad6e566e76e5309269f6c055ff08e1 Mon Sep 17 00:00:00 2001 From: Niklas van Schrick Date: Sat, 14 Feb 2026 01:00:13 +0100 Subject: [PATCH 3/3] Make constraints to node functions deferrable --- ...ke_node_function_constraints_deferrable.rb | 23 +++++++++++++++++++ db/schema_migrations/20260213230904 | 1 + db/structure.sql | 4 ++-- 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20260213230904_make_node_function_constraints_deferrable.rb create mode 100644 db/schema_migrations/20260213230904 diff --git a/db/migrate/20260213230904_make_node_function_constraints_deferrable.rb b/db/migrate/20260213230904_make_node_function_constraints_deferrable.rb new file mode 100644 index 00000000..7f43c16b --- /dev/null +++ b/db/migrate/20260213230904_make_node_function_constraints_deferrable.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class MakeNodeFunctionConstraintsDeferrable < Code0::ZeroTrack::Database::Migration[1.0] + def change + remove_foreign_key :reference_values, + :node_functions, + on_delete: :restrict + + add_foreign_key :reference_values, + :node_functions, + deferrable: :deferred + + remove_foreign_key :node_functions, + :node_functions, + column: :next_node_id, + on_delete: :restrict + + add_foreign_key :node_functions, + :node_functions, + column: :next_node_id, + deferrable: :deferred + end +end diff --git a/db/schema_migrations/20260213230904 b/db/schema_migrations/20260213230904 new file mode 100644 index 00000000..5f03b02d --- /dev/null +++ b/db/schema_migrations/20260213230904 @@ -0,0 +1 @@ +501fc65ab83b207de468a27d7e65c82b75fcf7f55def5678bd84e666b16dbd7f \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index cf25cd98..14cb22f0 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -1343,7 +1343,7 @@ ALTER TABLE ONLY node_functions ADD CONSTRAINT fk_rails_8615bd0635 FOREIGN KEY (flow_id) REFERENCES flows(id) ON DELETE CASCADE; ALTER TABLE ONLY reference_values - ADD CONSTRAINT fk_rails_8b9d8f68cc FOREIGN KEY (node_function_id) REFERENCES node_functions(id) ON DELETE RESTRICT; + ADD CONSTRAINT fk_rails_8b9d8f68cc FOREIGN KEY (node_function_id) REFERENCES node_functions(id) DEFERRABLE INITIALLY DEFERRED; ALTER TABLE ONLY data_type_identifiers ADD CONSTRAINT fk_rails_8d8385e8ec FOREIGN KEY (runtime_id) REFERENCES runtimes(id) ON DELETE CASCADE; @@ -1415,4 +1415,4 @@ ALTER TABLE ONLY flow_type_settings ADD CONSTRAINT fk_rails_f6af7d8edf FOREIGN KEY (flow_type_id) REFERENCES flow_types(id) ON DELETE CASCADE; ALTER TABLE ONLY node_functions - ADD CONSTRAINT fk_rails_fbc91a3407 FOREIGN KEY (next_node_id) REFERENCES node_functions(id) ON DELETE RESTRICT; + ADD CONSTRAINT fk_rails_fbc91a3407 FOREIGN KEY (next_node_id) REFERENCES node_functions(id) DEFERRABLE INITIALLY DEFERRED;