comparison Resources/Orthanc/Databases/ISqlLookupFormatter.cpp @ 354:2a3bbb4104fa

fix changeset 389c037387ea
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 25 Nov 2021 13:17:51 +0100
parents 389c037387ea
children 1280b40d6696
comparison
equal deleted inserted replaced
353:389c037387ea 354:2a3bbb4104fa
65 65
66 66
67 static bool FormatComparison(std::string& target, 67 static bool FormatComparison(std::string& target,
68 ISqlLookupFormatter& formatter, 68 ISqlLookupFormatter& formatter,
69 const DatabaseConstraint& constraint, 69 const DatabaseConstraint& constraint,
70 size_t index) 70 size_t index,
71 bool escapeBrackets)
71 { 72 {
72 std::string tag = "t" + boost::lexical_cast<std::string>(index); 73 std::string tag = "t" + boost::lexical_cast<std::string>(index);
73 74
74 std::string comparison; 75 std::string comparison;
75 76
170 } 171 }
171 else if (value[i] == '?') 172 else if (value[i] == '?')
172 { 173 {
173 escaped += "_"; 174 escaped += "_";
174 } 175 }
175 else if (value[i] == '[') 176 else if (value[i] == '%')
177 {
178 escaped += "\\%";
179 }
180 else if (value[i] == '_')
181 {
182 escaped += "\\_";
183 }
184 else if (value[i] == '\\')
185 {
186 escaped += "\\\\";
187 }
188 else if (escapeBrackets && value[i] == '[')
176 { 189 {
177 escaped += "\\["; 190 escaped += "\\[";
178 } 191 }
179 else if (value[i] == ']') 192 else if (escapeBrackets && value[i] == ']')
180 { 193 {
181 escaped += "\\]"; 194 escaped += "\\]";
182 }
183 else if (value[i] == '%')
184 {
185 escaped += "\\%";
186 }
187 else if (value[i] == '_')
188 {
189 escaped += "\\_";
190 }
191 else if (value[i] == '\\')
192 {
193 escaped += "\\\\";
194 } 195 }
195 else 196 else
196 { 197 {
197 escaped += value[i]; 198 escaped += value[i];
198 } 199 }
297 } 298 }
298 299
299 assert(upperLevel <= queryLevel && 300 assert(upperLevel <= queryLevel &&
300 queryLevel <= lowerLevel); 301 queryLevel <= lowerLevel);
301 302
303 const bool escapeBrackets = formatter.IsEscapeBrackets();
304
302 std::string joins, comparisons; 305 std::string joins, comparisons;
303 306
304 size_t count = 0; 307 size_t count = 0;
305 308
306 for (size_t i = 0; i < lookup.size(); i++) 309 for (size_t i = 0; i < lookup.size(); i++)
307 { 310 {
308 std::string comparison; 311 std::string comparison;
309 312
310 if (FormatComparison(comparison, formatter, lookup[i], count)) 313 if (FormatComparison(comparison, formatter, lookup[i], count, escapeBrackets))
311 { 314 {
312 std::string join; 315 std::string join;
313 FormatJoin(join, lookup[i], count); 316 FormatJoin(join, lookup[i], count);
314 joins += join; 317 joins += join;
315 318