Mercurial > hg > orthanc-databases
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 |