@@ -416,6 +416,7 @@ static bool set_linger(thread_db*, SSHORT, DeferredWork*, jrd_tra*);
416416static bool clear_cache(thread_db*, SSHORT, DeferredWork*, jrd_tra*);
417417static bool change_repl_state(thread_db*, SSHORT, DeferredWork*, jrd_tra*);
418418static bool set_statistics(thread_db*, SSHORT, DeferredWork*, jrd_tra*);
419+ static bool deps_to_disk(thread_db*, SSHORT, DeferredWork*, jrd_tra*);
419420
420421// ----------------------------------------------------------------
421422
@@ -879,13 +880,13 @@ namespace
879880 Dependency dependency(obj_relation);
880881 dependency.relation = MetadataCache::getPerm<Cached::Relation>(tdbb,
881882 parameter->prm_type_of_table, CacheFlag::AUTOCREATE);
882- dependency.subName = & parameter->prm_type_of_column;
883+ dependency.subName = parameter->prm_type_of_column;
883884 dependencies.push(dependency);
884885 }
885886 else if (!fb_utils::implicit_domain(parameter->prm_field_source.object.c_str()))
886887 {
887888 Dependency dependency(obj_field);
888- dependency.name = & parameter->prm_field_source;
889+ dependency.name = parameter->prm_field_source;
889890 dependencies.push(dependency);
890891 }
891892
@@ -899,8 +900,7 @@ namespace
899900 }
900901
901902 MET_store_dependencies(tdbb, dependencies, nullptr, depName,
902- (work->dfw_package.isEmpty() ? objType : obj_package_header),
903- transaction);
903+ (work->dfw_package.isEmpty() ? objType : obj_package_header));
904904 }
905905
906906 MetadataCache::verify_cache(tdbb);
@@ -1121,6 +1121,7 @@ namespace
11211121
11221122static inline constexpr deferred_task task_table[] =
11231123{
1124+ { dfw_deps_to_disk, deps_to_disk }, // must be first
11241125 { dfw_add_shadow, add_shadow },
11251126 { dfw_delete_ltt_index, delete_ltt_index },
11261127 { dfw_delete_index, delete_index },
@@ -4998,3 +4999,32 @@ static bool make_ltt_version(thread_db* tdbb, SSHORT phase, DeferredWork* work,
49984999}
49995000
50005001
5002+ // Store dependencies
5003+ static bool deps_to_disk(thread_db* tdbb, SSHORT phase, DeferredWork* work, jrd_tra* transaction)
5004+ {
5005+ switch (phase)
5006+ {
5007+ case 1:
5008+ case 2:
5009+ case 3:
5010+ case 4:
5011+ case 5:
5012+ case 6:
5013+ return true;
5014+
5015+ case 7:
5016+ break;
5017+
5018+ default:
5019+ return false;
5020+ }
5021+
5022+ transaction->tra_flags |= TRA_deps_to_disk;
5023+
5024+ for (auto& dep : transaction->tra_dependencies)
5025+ MET_store_dependency(tdbb, dep.dependency, dep.dep_rel, dep.object_name, dep.dependency_type);
5026+
5027+ transaction->tra_dependencies.clear();
5028+
5029+ return false;
5030+ }
0 commit comments