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 {