comparison OrthancServer/Sources/Database/StatelessDatabaseOperations.cpp @ 5677:dc96401dbe88 find-refactoring

starting the refactoring of /tools/find
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 08 Jul 2024 19:03:23 +0200
parents 3f13db27b399
children 527918e9c5d9
comparison
equal deleted inserted replaced
5676:b744a2cf408a 5677:dc96401dbe88
3704 3704
3705 3705
3706 void StatelessDatabaseOperations::ExecuteFind(FindResponse& response, 3706 void StatelessDatabaseOperations::ExecuteFind(FindResponse& response,
3707 const FindRequest& request) 3707 const FindRequest& request)
3708 { 3708 {
3709 class IntegratedFind : public ReadOnlyOperationsT2<FindResponse&, const FindRequest&> 3709 class IntegratedFind : public ReadOnlyOperationsT3<FindResponse&, const FindRequest&,
3710 const IDatabaseWrapper::Capabilities&>
3710 { 3711 {
3711 public: 3712 public:
3712 virtual void ApplyTuple(ReadOnlyTransaction& transaction, 3713 virtual void ApplyTuple(ReadOnlyTransaction& transaction,
3713 const Tuple& tuple) ORTHANC_OVERRIDE 3714 const Tuple& tuple) ORTHANC_OVERRIDE
3714 { 3715 {
3715 transaction.ExecuteFind(tuple.get<0>(), tuple.get<1>()); 3716 transaction.ExecuteFind(tuple.get<0>(), tuple.get<1>(), tuple.get<2>());
3716 } 3717 }
3717 }; 3718 };
3718 3719
3719 class FindStage : public ReadOnlyOperationsT2<std::list<std::string>&, const FindRequest&> 3720 class FindStage : public ReadOnlyOperationsT3<std::list<std::string>&, const FindRequest&,
3721 const IDatabaseWrapper::Capabilities&>
3720 { 3722 {
3721 public: 3723 public:
3722 virtual void ApplyTuple(ReadOnlyTransaction& transaction, 3724 virtual void ApplyTuple(ReadOnlyTransaction& transaction,
3723 const Tuple& tuple) ORTHANC_OVERRIDE 3725 const Tuple& tuple) ORTHANC_OVERRIDE
3724 { 3726 {
3725 transaction.ExecuteFind(tuple.get<0>(), tuple.get<1>()); 3727 transaction.ExecuteFind(tuple.get<0>(), tuple.get<1>(), tuple.get<2>());
3726 } 3728 }
3727 }; 3729 };
3728 3730
3729 class ExpandStage : public ReadOnlyOperationsT3<FindResponse&, const FindRequest&, const std::string&> 3731 class ExpandStage : public ReadOnlyOperationsT3<FindResponse&, const FindRequest&, const std::string&>
3730 { 3732 {
3733 const Tuple& tuple) ORTHANC_OVERRIDE 3735 const Tuple& tuple) ORTHANC_OVERRIDE
3734 { 3736 {
3735 transaction.ExecuteExpand(tuple.get<0>(), tuple.get<1>(), tuple.get<2>()); 3737 transaction.ExecuteExpand(tuple.get<0>(), tuple.get<1>(), tuple.get<2>());
3736 } 3738 }
3737 }; 3739 };
3740
3741 IDatabaseWrapper::Capabilities capabilities = db_.GetDatabaseCapabilities();
3738 3742
3739 if (db_.HasIntegratedFind()) 3743 if (db_.HasIntegratedFind())
3740 { 3744 {
3741 /** 3745 /**
3742 * In this flavor, the "find" and the "expand" phases are 3746 * In this flavor, the "find" and the "expand" phases are
3743 * executed in one single transaction. 3747 * executed in one single transaction.
3744 **/ 3748 **/
3745 IntegratedFind operations; 3749 IntegratedFind operations;
3746 operations.Apply(*this, response, request); 3750 operations.Apply(*this, response, request, capabilities);
3747 } 3751 }
3748 else 3752 else
3749 { 3753 {
3750 /** 3754 /**
3751 * In this flavor, the "find" and the "expand" phases for each 3755 * In this flavor, the "find" and the "expand" phases for each
3753 * the compatibility mode equivalent to Orthanc <= 1.12.3. 3757 * the compatibility mode equivalent to Orthanc <= 1.12.3.
3754 **/ 3758 **/
3755 std::list<std::string> identifiers; 3759 std::list<std::string> identifiers;
3756 3760
3757 FindStage find; 3761 FindStage find;
3758 find.Apply(*this, identifiers, request); 3762 find.Apply(*this, identifiers, request, capabilities);
3759 3763
3760 ExpandStage expand; 3764 ExpandStage expand;
3761 3765
3762 for (std::list<std::string>::const_iterator it = identifiers.begin(); it != identifiers.end(); ++it) 3766 for (std::list<std::string>::const_iterator it = identifiers.begin(); it != identifiers.end(); ++it)
3763 { 3767 {