From b1090574dad61c240f3c9d9669e308ea9c544522 Mon Sep 17 00:00:00 2001 From: Celine Mercier Date: Wed, 7 Nov 2018 13:35:11 +0100 Subject: [PATCH] View import: associated column informations are now correctly updated with the new versions --- src/obidms.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/src/obidms.c b/src/obidms.c index ffaf542..871c2f3 100755 --- a/src/obidms.c +++ b/src/obidms.c @@ -1526,7 +1526,9 @@ int obi_import_view(const char* dms_path_1, const char* dms_path_2, const char* Obiview_p view_1; Obiview_p view_2; obiversion_t new_version; - int i; + int i, j; + OBIDMS_column_header_p header = NULL; + OBIDMS_column_header_p header_2 = NULL; dms_1 = obi_open_dms(dms_path_1); if (dms_1 == NULL) @@ -1606,6 +1608,48 @@ int obi_import_view(const char* dms_path_1, const char* dms_path_2, const char* } } + // Go through columns again to update associated columns + for (i=0; i < (view_1->infos->column_count); i++) + { + header = obi_column_get_header_from_name(dms_1, ((((view_1->infos)->column_references)[i]).column_refs).column_name, ((((view_1->infos)->column_references)[i]).column_refs).version); + if (header == NULL) + { + obidebug(1, "\nError opening a column header while importing a view"); + return -1; + } + + if (header->returned_data_type == OBI_QUAL) // TODO maybe there should be a bool in column headers + { + // Look for the index of the associated column in the list + for (j=0; j < (view_1->infos->column_count); j++) + { + if ((strcmp((header->associated_column).column_name, ((((view_1->infos)->column_references)[j]).column_refs).column_name) == 0) && + ((header->associated_column).version == ((((view_1->infos)->column_references)[j]).column_refs).version)) + break; + } + + header_2 = obi_column_get_header_from_name(dms_2, ((((view_2->infos)->column_references)[i]).column_refs).column_name, ((((view_2->infos)->column_references)[i]).column_refs).version); + if (header_2 == NULL) + { + obidebug(1, "\nError opening a column header while importing a view"); + return -1; + } + + // Update version of associated column + (header_2->associated_column).version = ((((view_2->infos)->column_references)[j]).column_refs).version; + if (obi_close_header(header_2) < 0) + { + obidebug(1, "\nError closing a column header while importing a view"); + return -1; + } + } + if (obi_close_header(header) < 0) + { + obidebug(1, "\nError closing a column header while importing a view"); + return -1; + } + } + // Close the views if (obi_save_and_close_view(view_1) < 0) {