From 4d46a06d389de85b8fbb0100e7e6cdb14aaa8f77 Mon Sep 17 00:00:00 2001 From: acanas Date: Sun, 24 Oct 2021 20:25:01 +0200 Subject: [PATCH] Version 21.41.1: Oct 24, 2021 Queries moved to module swad_tag_database. --- swad_changelog.h | 3 +- swad_tag.c | 62 ++++++------------------------- swad_tag_database.c | 90 ++++++++++++++++++++++++++++++++++++++++++++- swad_tag_database.h | 7 +++- 4 files changed, 108 insertions(+), 54 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index c34e41b4..80c75321 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo. */ -#define Log_PLATFORM_VERSION "SWAD 21.41 (2021-10-24)" +#define Log_PLATFORM_VERSION "SWAD 21.41.1 (2021-10-24)" #define CSS_FILE "swad20.45.css" #define JS_FILE "swad20.69.1.js" /* TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams + Version 21.41.1: Oct 24, 2021 Queries moved to module swad_tag_database. (320767 lines) Version 21.41: Oct 24, 2021 New module swad_tag_database for database queries related to question tags. (320721 lines) Version 21.40.1: Oct 24, 2021 Queries moved to module swad_center_database. (320621 lines) Version 21.40: Oct 24, 2021 Queries moved to module swad_survey_database. (320673 lines) diff --git a/swad_tag.c b/swad_tag.c index c0c1c344..df2b4109 100644 --- a/swad_tag.c +++ b/swad_tag.c @@ -172,8 +172,8 @@ void Tag_RenameTag (void) extern const char *Txt_The_tag_X_has_not_changed; char OldTagTxt[Tag_MAX_BYTES_TAG + 1]; char NewTagTxt[Tag_MAX_BYTES_TAG + 1]; - long ExistingTagCod; - long OldTagCod; + long ExistingTagCodNewTxt; + long TagCodOldTxt; bool ComplexRenaming; /***** Get old and new tags from the form *****/ @@ -199,81 +199,43 @@ void Tag_RenameTag (void) // are not the same (case insensitively) /* Check if the new tag text is equal to any of the tags already present in the database */ - if ((ExistingTagCod = Tag_DB_GetTagCodFromTagTxt (NewTagTxt)) > 0) + if ((ExistingTagCodNewTxt = Tag_DB_GetTagCodFromTagTxt (NewTagTxt)) > 0) // The new tag was already in database ComplexRenaming = true; if (ComplexRenaming) // Renaming is not easy { - /***** Complex update made to not repeat tags: + /***** Complex renaming made to not repeat tags: - If the new tag existed for a question ==> delete old tag from tst_question_tags; the new tag will remain - If the new tag did not exist for a question ==> change old tag to new tag in tst_question_tags *****/ /* Get tag code of the old tag */ - if ((OldTagCod = Tag_DB_GetTagCodFromTagTxt (OldTagTxt)) <= 0) + if ((TagCodOldTxt = Tag_DB_GetTagCodFromTagTxt (OldTagTxt)) <= 0) Err_WrongTagExit (); /* Create a temporary table with all the question codes that had the new tag as one of their tags */ - DB_Query ("can not remove temporary table", - "DROP TEMPORARY TABLE IF EXISTS tst_question_tags_tmp"); - - DB_Query ("can not create temporary table", - "CREATE TEMPORARY TABLE tst_question_tags_tmp" - " ENGINE=MEMORY" - " SELECT QstCod" - " FROM tst_question_tags" - " WHERE TagCod=%ld", - ExistingTagCod); + Tag_DB_DropTmpTableQuestionsWithTag (); + Tag_DB_CreateTmpTableQuestionsWithTag (ExistingTagCodNewTxt); /* Remove old tag in questions where it would be repeated */ - // New tag existed for a question ==> delete old tag - DB_QueryDELETE ("can not remove a tag from some questions", - "DELETE FROM tst_question_tags" - " WHERE TagCod=%ld" - " AND QstCod IN" - " (SELECT QstCod" - " FROM tst_question_tags_tmp)", - OldTagCod); - /* Change old tag to new tag in questions where it would not be repeated */ + // New tag existed for a question ==> delete old tag // New tag did not exist for a question ==> change old tag to new tag - DB_QueryUPDATE ("can not update a tag in some questions", - "UPDATE tst_question_tags" - " SET TagCod=%ld" - " WHERE TagCod=%ld" - " AND QstCod NOT IN" - " (SELECT QstCod" - " FROM tst_question_tags_tmp)", - ExistingTagCod, - OldTagCod); + Tag_DB_ComplexRenameTag (TagCodOldTxt,ExistingTagCodNewTxt); /* Drop temporary table, no longer necessary */ - DB_Query ("can not remove temporary table", - "DROP TEMPORARY TABLE IF EXISTS tst_question_tags_tmp"); + Tag_DB_DropTmpTableQuestionsWithTag (); /***** Delete old tag from tst_tags because it is not longer used *****/ - DB_QueryDELETE ("can not remove old tag", - "DELETE FROM tst_tags" - " WHERE TagCod=%ld", - OldTagCod); + Tag_DB_RemoveTag (TagCodOldTxt); } else // Renaming is easy - { /***** Simple update replacing each instance of the old tag by the new tag *****/ - DB_QueryUPDATE ("can not update tag", - "UPDATE tst_tags" - " SET TagTxt='%s'," - "ChangeTime=NOW()" - " WHERE tst_tags.CrsCod=%ld" - " AND tst_tags.TagTxt='%s'", - NewTagTxt, - Gbl.Hierarchy.Crs.CrsCod, - OldTagTxt); - } + Tag_DB_SimplexRenameTag (OldTagTxt,NewTagTxt); /***** Write message to show the change made *****/ Ale_ShowAlert (Ale_SUCCESS,Txt_The_tag_X_has_been_renamed_as_Y, diff --git a/swad_tag_database.c b/swad_tag_database.c index 5ba39365..1b68637b 100644 --- a/swad_tag_database.c +++ b/swad_tag_database.c @@ -35,7 +35,7 @@ // #include "swad_error.h" // #include "swad_form.h" #include "swad_global.h" -// #include "swad_tag.h" +#include "swad_tag.h" #include "swad_tag_database.h" // #include "swad_theme.h" @@ -98,6 +98,81 @@ void Tag_DB_AddTagToQst (long QstCod,long TagCod,unsigned TagInd) TagInd); } +/*****************************************************************************/ +/********** Create a temporary table with all the question codes *************/ +/********** that had the new tag as one of their tags *************/ +/*****************************************************************************/ + +void Tag_DB_CreateTmpTableQuestionsWithTag (long TagCod) + { + DB_Query ("can not create temporary table", + "CREATE TEMPORARY TABLE tst_question_tags_tmp" + " ENGINE=MEMORY" + " SELECT QstCod" + " FROM tst_question_tags" + " WHERE TagCod=%ld", + TagCod); + } + +/*****************************************************************************/ +/************* Drop temporary table with all the question codes **************/ +/************* that had the new tag as one of their tags **************/ +/*****************************************************************************/ + +void Tag_DB_DropTmpTableQuestionsWithTag (void) + { + DB_Query ("can not remove temporary table", + "DROP TEMPORARY TABLE IF EXISTS tst_question_tags_tmp"); + } + +/*****************************************************************************/ +/************************* Complex renaming of tag ***************************/ +/*****************************************************************************/ + +void Tag_DB_ComplexRenameTag (long TagCodOldTxt,long ExistingTagCodNewTxt) + { + /***** Remove old tag in questions where it would be repeated *****/ + // New tag existed for a question ==> delete old tag + DB_QueryDELETE ("can not remove a tag from some questions", + "DELETE FROM tst_question_tags" + " WHERE TagCod=%ld" + " AND QstCod IN" + // Questions that already have a tag with the new name + " (SELECT QstCod" + " FROM tst_question_tags_tmp)", + TagCodOldTxt); + + /***** Change old tag to new tag in questions where it would not be repeated *****/ + // New tag did not exist for a question ==> change old tag to new tag + DB_QueryUPDATE ("can not update a tag in some questions", + "UPDATE tst_question_tags" + " SET TagCod=%ld" + " WHERE TagCod=%ld" + " AND QstCod NOT IN" + " (SELECT QstCod" + " FROM tst_question_tags_tmp)", + ExistingTagCodNewTxt, + TagCodOldTxt); + } + +/*****************************************************************************/ +/**** Simple update replacing each instance of the old tag by the new tag ****/ +/*****************************************************************************/ + +void Tag_DB_SimplexRenameTag (const char OldTagTxt[Tag_MAX_BYTES_TAG + 1], + const char NewTagTxt[Tag_MAX_BYTES_TAG + 1]) + { + DB_QueryUPDATE ("can not update tag", + "UPDATE tst_tags" + " SET TagTxt='%s'," + "ChangeTime=NOW()" + " WHERE tst_tags.CrsCod=%ld" + " AND tst_tags.TagTxt='%s'", + NewTagTxt, + Gbl.Hierarchy.Crs.CrsCod, + OldTagTxt); + } + /*****************************************************************************/ /********** Change visibility of an existing tag into tst_tags table *********/ /*****************************************************************************/ @@ -190,13 +265,24 @@ long Tag_DB_GetTagCodFromTagTxt (const char *TagTxt) void Tag_DB_RemTagsFromQst (long QstCod) { - /***** Remove tags *****/ DB_QueryDELETE ("can not remove the tags of a question", "DELETE FROM tst_question_tags" " WHERE QstCod=%ld", QstCod); } +/*****************************************************************************/ +/******************************** Remove a tag *******************************/ +/*****************************************************************************/ + +void Tag_DB_RemoveTag (long TagCod) + { + DB_QueryDELETE ("can not remove tag", + "DELETE FROM tst_tags" + " WHERE TagCod=%ld", + TagCod); + } + /*****************************************************************************/ /********************** Remove unused tags in a course ***********************/ /*****************************************************************************/ diff --git a/swad_tag_database.h b/swad_tag_database.h index 77aa3ead..e1018f6e 100644 --- a/swad_tag_database.h +++ b/swad_tag_database.h @@ -45,7 +45,11 @@ long Tag_DB_CreateNewTag (long CrsCod,const char *TagTxt); void Tag_DB_AddTagToQst (long QstCod,long TagCod,unsigned TagInd); - +void Tag_DB_CreateTmpTableQuestionsWithTag (long TagCod); +void Tag_DB_DropTmpTableQuestionsWithTag (void); +void Tag_DB_ComplexRenameTag (long TagCodOldTxt,long ExistingTagCodNewTxt); +void Tag_DB_SimplexRenameTag (const char OldTagTxt[Tag_MAX_BYTES_TAG + 1], + const char NewTagTxt[Tag_MAX_BYTES_TAG + 1]); void Tag_DB_EnableOrDisableTag (long TagCod,bool TagHidden); unsigned Tag_DB_GetAllTagsFromCurrentCrs (MYSQL_RES **mysql_res); @@ -54,6 +58,7 @@ bool Tag_DB_CheckIfCurrentCrsHasTestTags (void); long Tag_DB_GetTagCodFromTagTxt (const char *TagTxt); void Tag_DB_RemTagsFromQst (long QstCod); +void Tag_DB_RemoveTag (long TagCod); void Tag_DB_RemoveUnusedTagsFromCrs (long CrsCod); #endif