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