drive/query/drive_document_having_query/
executors.rs1use super::super::drive_document_ranked_query::RankedEntry;
12use super::{resolve_having_query_for_mode, DocumentHavingMode};
13use crate::drive::Drive;
14use crate::error::Error;
15use crate::query::ResolvedTimeRange;
16use dpp::data_contract::document_type::accessors::DocumentTypeV0Getters;
17use dpp::data_contract::document_type::DocumentTypeRef;
18use dpp::version::PlatformVersion;
19use grovedb::TransactionArg;
20
21impl Drive {
22 #[allow(clippy::too_many_arguments)]
24 pub fn execute_document_having_range_no_proof(
25 &self,
26 contract_id: [u8; 32],
27 document_type: DocumentTypeRef,
28 document_type_name: String,
29 mode: &DocumentHavingMode,
30 resolved_time_ranges: &[ResolvedTimeRange],
31 transaction: TransactionArg,
32 platform_version: &PlatformVersion,
33 ) -> Result<Vec<RankedEntry>, Error> {
34 let indexes = document_type.indexes();
35 let having_query = resolve_having_query_for_mode(
36 contract_id,
37 document_type,
38 document_type_name,
39 indexes,
40 mode,
41 resolved_time_ranges,
42 platform_version,
43 )?;
44 having_query.execute_range_no_proof(self, transaction, platform_version)
45 }
46
47 #[allow(clippy::too_many_arguments)]
54 pub fn execute_document_having_range_proof(
55 &self,
56 contract_id: [u8; 32],
57 document_type: DocumentTypeRef,
58 document_type_name: String,
59 mode: &DocumentHavingMode,
60 resolved_time_ranges: &[ResolvedTimeRange],
61 transaction: TransactionArg,
62 platform_version: &PlatformVersion,
63 ) -> Result<Vec<u8>, Error> {
64 let indexes = document_type.indexes();
65 let having_query = resolve_having_query_for_mode(
66 contract_id,
67 document_type,
68 document_type_name,
69 indexes,
70 mode,
71 resolved_time_ranges,
72 platform_version,
73 )?;
74 having_query.execute_range_with_proof(self, transaction, platform_version)
75 }
76}