diff OrthancServer/Sources/ServerToolbox.cpp @ 5284:56cd3444a2d8

NormalizeIdentifier: suggestion for future implementations
author Alain Mazy <am@osimis.io>
date Mon, 24 Apr 2023 18:04:07 +0200
parents acaea72a3e91
children bb07c12e3472
line wrap: on
line diff
--- a/OrthancServer/Sources/ServerToolbox.cpp	Fri Apr 21 10:35:07 2023 +0200
+++ b/OrthancServer/Sources/ServerToolbox.cpp	Mon Apr 24 18:04:07 2023 +0200
@@ -211,6 +211,13 @@
       std::string t;
       t.reserve(value.size());
 
+#if 0
+      // This version solves some indexing issue (https://discourse.orthanc-server.org/t/postgress-index-effectively-disabled-when-searching-for-greek-names/3371)
+      // and seems functional: I could run the integration tests with both SQLite and PG + the DicomWeb tests with PG.
+      // However, it can not go into production because NormalizeIdentifier is used both at ingest time and at search time;
+      // therefore, if we change it while we have an already populated DB, the searches won't work anymore and, on very large
+      // systems, running the Housekeeper to rebuild the indexes might take months ...
+      // We keep it here because it might be handy once we refactor the DicomIdentifier searches in the future.
       for (size_t i = 0; i < value.size(); i++)
       {
         if (value[i] == '%' ||
@@ -218,7 +225,7 @@
         {
           t.push_back(' ');  // These characters might break wildcard queries in SQL
         }
-        else if (isascii(value[i]) &&
+        else if (//isascii(value[i]) &&
                  !iscntrl(value[i]) &&
                  (!isspace(value[i]) || value[i] == ' '))
         {
@@ -226,7 +233,25 @@
         }
       }
 
-      Toolbox::ToUpperCase(t);
+      //Toolbox::ToUpperCase(t);
+      t = Toolbox::ToUpperCaseWithAccents(t);
+#else
+      for (size_t i = 0; i < value.size(); i++)
+      {
+        if (value[i] == '%' ||
+            value[i] == '_')
+        {
+          t.push_back(' ');  // These characters might break wildcard queries in SQL
+        }
+        else if (!iscntrl(value[i]) &&
+                 (!isspace(value[i]) || value[i] == ' '))
+        {
+          t.push_back(value[i]);
+        }
+      }
+
+      t = Toolbox::ToUpperCaseWithAccents(t);
+#endif
 
       return Toolbox::StripSpaces(t);
     }