Mercurial > hg > orthanc
comparison OrthancServer/Sources/Search/ISqlLookupFormatter.cpp @ 5680:68fc5af30c03
added container class DatabaseConstraints
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 09 Jul 2024 10:09:57 +0200 |
parents | f7adfb22e20e |
children | afd421225eb4 |
comparison
equal
deleted
inserted
replaced
5678:e47ac5e133b1 | 5680:68fc5af30c03 |
---|---|
473 | 473 |
474 return true; | 474 return true; |
475 } | 475 } |
476 | 476 |
477 | 477 |
478 void ISqlLookupFormatter::GetLookupLevels(ResourceType& lowerLevel, ResourceType& upperLevel, const ResourceType& queryLevel, const std::vector<DatabaseConstraint>& lookup) | 478 void ISqlLookupFormatter::GetLookupLevels(ResourceType& lowerLevel, |
479 ResourceType& upperLevel, | |
480 const ResourceType& queryLevel, | |
481 const DatabaseConstraints& lookup) | |
479 { | 482 { |
480 assert(ResourceType_Patient < ResourceType_Study && | 483 assert(ResourceType_Patient < ResourceType_Study && |
481 ResourceType_Study < ResourceType_Series && | 484 ResourceType_Study < ResourceType_Series && |
482 ResourceType_Series < ResourceType_Instance); | 485 ResourceType_Series < ResourceType_Instance); |
483 | 486 |
484 lowerLevel = queryLevel; | 487 lowerLevel = queryLevel; |
485 upperLevel = queryLevel; | 488 upperLevel = queryLevel; |
486 | 489 |
487 for (size_t i = 0; i < lookup.size(); i++) | 490 for (size_t i = 0; i < lookup.GetSize(); i++) |
488 { | 491 { |
489 ResourceType level = lookup[i].GetLevel(); | 492 ResourceType level = lookup.GetConstraint(i).GetLevel(); |
490 | 493 |
491 if (level < upperLevel) | 494 if (level < upperLevel) |
492 { | 495 { |
493 upperLevel = level; | 496 upperLevel = level; |
494 } | 497 } |
501 } | 504 } |
502 | 505 |
503 | 506 |
504 void ISqlLookupFormatter::Apply(std::string& sql, | 507 void ISqlLookupFormatter::Apply(std::string& sql, |
505 ISqlLookupFormatter& formatter, | 508 ISqlLookupFormatter& formatter, |
506 const std::vector<DatabaseConstraint>& lookup, | 509 const DatabaseConstraints& lookup, |
507 ResourceType queryLevel, | 510 ResourceType queryLevel, |
508 const std::set<std::string>& labels, | 511 const std::set<std::string>& labels, |
509 LabelsConstraint labelsConstraint, | 512 LabelsConstraint labelsConstraint, |
510 size_t limit) | 513 size_t limit) |
511 { | 514 { |
519 | 522 |
520 std::string joins, comparisons; | 523 std::string joins, comparisons; |
521 | 524 |
522 size_t count = 0; | 525 size_t count = 0; |
523 | 526 |
524 for (size_t i = 0; i < lookup.size(); i++) | 527 for (size_t i = 0; i < lookup.GetSize(); i++) |
525 { | 528 { |
529 const DatabaseConstraint& constraint = lookup.GetConstraint(i); | |
530 | |
526 std::string comparison; | 531 std::string comparison; |
527 | 532 |
528 if (FormatComparison(comparison, formatter, lookup[i], count, escapeBrackets)) | 533 if (FormatComparison(comparison, formatter, constraint, count, escapeBrackets)) |
529 { | 534 { |
530 std::string join; | 535 std::string join; |
531 FormatJoin(join, lookup[i], count); | 536 FormatJoin(join, constraint, count); |
532 joins += join; | 537 joins += join; |
533 | 538 |
534 if (!comparison.empty()) | 539 if (!comparison.empty()) |
535 { | 540 { |
536 comparisons += " AND " + comparison; | 541 comparisons += " AND " + comparison; |
612 } | 617 } |
613 | 618 |
614 | 619 |
615 void ISqlLookupFormatter::ApplySingleLevel(std::string& sql, | 620 void ISqlLookupFormatter::ApplySingleLevel(std::string& sql, |
616 ISqlLookupFormatter& formatter, | 621 ISqlLookupFormatter& formatter, |
617 const std::vector<DatabaseConstraint>& lookup, | 622 const DatabaseConstraints& lookup, |
618 ResourceType queryLevel, | 623 ResourceType queryLevel, |
619 const std::set<std::string>& labels, | 624 const std::set<std::string>& labels, |
620 LabelsConstraint labelsConstraint, | 625 LabelsConstraint labelsConstraint, |
621 size_t limit | 626 size_t limit |
622 ) | 627 ) |
629 | 634 |
630 const bool escapeBrackets = formatter.IsEscapeBrackets(); | 635 const bool escapeBrackets = formatter.IsEscapeBrackets(); |
631 | 636 |
632 std::vector<std::string> mainDicomTagsComparisons, dicomIdentifiersComparisons; | 637 std::vector<std::string> mainDicomTagsComparisons, dicomIdentifiersComparisons; |
633 | 638 |
634 for (size_t i = 0; i < lookup.size(); i++) | 639 for (size_t i = 0; i < lookup.GetSize(); i++) |
635 { | 640 { |
641 const DatabaseConstraint& constraint = lookup.GetConstraint(i); | |
642 | |
636 std::string comparison; | 643 std::string comparison; |
637 | 644 |
638 if (FormatComparison2(comparison, formatter, lookup[i], escapeBrackets)) | 645 if (FormatComparison2(comparison, formatter, constraint, escapeBrackets)) |
639 { | 646 { |
640 if (!comparison.empty()) | 647 if (!comparison.empty()) |
641 { | 648 { |
642 if (lookup[i].IsIdentifier()) | 649 if (constraint.IsIdentifier()) |
643 { | 650 { |
644 dicomIdentifiersComparisons.push_back(comparison); | 651 dicomIdentifiersComparisons.push_back(comparison); |
645 } | 652 } |
646 else | 653 else |
647 { | 654 { |