1pub(crate) mod catalyst_id_for_public_key;
4pub(crate) mod catalyst_id_for_stake_address;
5pub(crate) mod catalyst_id_for_txn_id;
6pub(crate) mod cip36_registration;
7pub(crate) mod cip36_registration_for_vote_key;
8pub(crate) mod cip36_registration_invalid;
9pub(crate) mod rbac509_invalid_registration;
10pub(crate) mod rbac509_registration;
11pub(crate) mod stake_registration;
12pub(crate) mod txi_by_hash;
13pub(crate) mod txo_ada;
14pub(crate) mod txo_assets;
15pub(crate) mod unstaked_txo_ada;
16pub(crate) mod unstaked_txo_assets;
17
18use std::{fmt::Debug, sync::Arc};
19
20use scylla::{
21 client::{pager::QueryPager, session::Session},
22 serialize::row::SerializeRow,
23 statement::prepared::PreparedStatement,
24};
25
26use super::{FallibleQueryResults, SizedBatch};
27use crate::settings::cassandra_db;
28
29const NO_PARAMS: () = ();
31
32#[derive(strum_macros::Display)]
34pub(crate) enum PreparedDeleteQuery {
35 TxoAda,
37 TxoAssets,
39 UnstakedTxoAda,
41 UnstakedTxoAsset,
43 Txi,
45 StakeRegistration,
47 Cip36Registration,
49 Cip36RegistrationInvalid,
51 Cip36RegistrationForVoteKey,
53 Rbac509,
55 Rbac509Invalid,
57 CatalystIdForTxnId,
59 CatalystIdForStakeAddress,
61 CatalystIdForPublicKey,
63}
64
65#[derive(strum_macros::Display)]
67pub(crate) enum PreparedSelectQuery {
68 TxoAda,
70 TxoAssets,
72 UnstakedTxoAda,
74 UnstakedTxoAsset,
76 Txi,
78 StakeRegistration,
80 Cip36Registration,
82 Cip36RegistrationInvalid,
84 Cip36RegistrationForVoteKey,
86 Rbac509,
88 Rbac509Invalid,
90 CatalystIdForTxnId,
92 CatalystIdForStakeAddress,
94 CatalystIdForPublicKey,
96}
97
98pub(crate) struct PreparedQueries {
100 select_txo_ada: PreparedStatement,
102 delete_txo_ada: SizedBatch,
104 select_txo_assets: PreparedStatement,
106 delete_txo_assets: SizedBatch,
108 select_unstaked_txo_ada: PreparedStatement,
110 delete_unstaked_txo_ada: SizedBatch,
112 select_unstaked_txo_assets: PreparedStatement,
114 delete_unstaked_txo_assets: SizedBatch,
116 select_txi_by_hash: PreparedStatement,
118 delete_txi_by_hash: SizedBatch,
120 select_stake_registration: PreparedStatement,
122 delete_stake_registration: SizedBatch,
124 select_cip36_registration: PreparedStatement,
126 delete_cip36_registration: SizedBatch,
128 select_cip36_registration_invalid: PreparedStatement,
130 delete_cip36_registration_invalid: SizedBatch,
132 select_cip36_registration_for_vote_key: PreparedStatement,
134 delete_cip36_registration_for_vote_key: SizedBatch,
136 select_rbac509_registration: PreparedStatement,
138 delete_rbac509_registration: SizedBatch,
140 select_rbac509_invalid_registration: PreparedStatement,
142 delete_rbac509_invalid_registration: SizedBatch,
144 select_catalyst_id_for_txn_id: PreparedStatement,
146 delete_catalyst_id_for_txn_id: SizedBatch,
148 select_catalyst_id_for_stake_address: PreparedStatement,
150 delete_catalyst_id_for_stake_address: SizedBatch,
152 select_catalyst_id_for_public_key: PreparedStatement,
154 delete_catalyst_id_for_public_key: SizedBatch,
156}
157
158impl PreparedQueries {
159 pub(crate) async fn new(
161 session: Arc<Session>, cfg: &cassandra_db::EnvVars,
162 ) -> anyhow::Result<Self> {
163 Ok(Self {
165 select_txo_ada: txo_ada::PrimaryKeyQuery::prepare(&session).await?,
166 delete_txo_ada: txo_ada::DeleteQuery::prepare_batch(&session, cfg).await?,
167 select_txo_assets: txo_assets::PrimaryKeyQuery::prepare(&session).await?,
168 delete_txo_assets: txo_assets::DeleteQuery::prepare_batch(&session, cfg).await?,
169 select_unstaked_txo_ada: unstaked_txo_ada::PrimaryKeyQuery::prepare(&session).await?,
170 delete_unstaked_txo_ada: unstaked_txo_ada::DeleteQuery::prepare_batch(&session, cfg)
171 .await?,
172 select_unstaked_txo_assets: unstaked_txo_assets::PrimaryKeyQuery::prepare(&session)
173 .await?,
174 delete_unstaked_txo_assets: unstaked_txo_assets::DeleteQuery::prepare_batch(
175 &session, cfg,
176 )
177 .await?,
178 select_txi_by_hash: txi_by_hash::PrimaryKeyQuery::prepare(&session).await?,
179 delete_txi_by_hash: txi_by_hash::DeleteQuery::prepare_batch(&session, cfg).await?,
180 select_stake_registration: stake_registration::PrimaryKeyQuery::prepare(&session)
181 .await?,
182 delete_stake_registration: stake_registration::DeleteQuery::prepare_batch(
183 &session, cfg,
184 )
185 .await?,
186 select_cip36_registration: cip36_registration::PrimaryKeyQuery::prepare(&session)
187 .await?,
188 delete_cip36_registration: cip36_registration::DeleteQuery::prepare_batch(
189 &session, cfg,
190 )
191 .await?,
192 select_cip36_registration_invalid:
193 cip36_registration_invalid::PrimaryKeyQuery::prepare(&session).await?,
194 delete_cip36_registration_invalid:
195 cip36_registration_invalid::DeleteQuery::prepare_batch(&session, cfg).await?,
196 select_cip36_registration_for_vote_key:
197 cip36_registration_for_vote_key::PrimaryKeyQuery::prepare(&session).await?,
198 delete_cip36_registration_for_vote_key:
199 cip36_registration_for_vote_key::DeleteQuery::prepare_batch(&session, cfg).await?,
200 select_rbac509_registration: rbac509_registration::PrimaryKeyQuery::prepare(&session)
201 .await?,
202 delete_rbac509_registration: rbac509_registration::DeleteQuery::prepare_batch(
203 &session, cfg,
204 )
205 .await?,
206 select_rbac509_invalid_registration:
207 rbac509_invalid_registration::PrimaryKeyQuery::prepare(&session).await?,
208 delete_rbac509_invalid_registration:
209 rbac509_invalid_registration::DeleteQuery::prepare_batch(&session, cfg).await?,
210 select_catalyst_id_for_txn_id: catalyst_id_for_txn_id::PrimaryKeyQuery::prepare(
211 &session,
212 )
213 .await?,
214 delete_catalyst_id_for_txn_id: catalyst_id_for_txn_id::DeleteQuery::prepare_batch(
215 &session, cfg,
216 )
217 .await?,
218 select_catalyst_id_for_stake_address:
219 catalyst_id_for_stake_address::PrimaryKeyQuery::prepare(&session).await?,
220 delete_catalyst_id_for_stake_address:
221 catalyst_id_for_stake_address::DeleteQuery::prepare_batch(&session, cfg).await?,
222 select_catalyst_id_for_public_key:
223 catalyst_id_for_public_key::PrimaryKeyQuery::prepare(&session).await?,
224 delete_catalyst_id_for_public_key:
225 catalyst_id_for_public_key::DeleteQuery::prepare_batch(&session, cfg).await?,
226 })
227 }
228
229 pub(crate) async fn prepare(
231 session: Arc<Session>, query: &str, consistency: scylla::statement::Consistency,
232 idempotent: bool,
233 ) -> anyhow::Result<PreparedStatement> {
234 super::PreparedQueries::prepare(session, query, consistency, idempotent).await
235 }
236
237 pub(crate) async fn prepare_batch(
241 session: Arc<Session>, query: &str, cfg: &cassandra_db::EnvVars,
242 consistency: scylla::statement::Consistency, idempotent: bool, logged: bool,
243 ) -> anyhow::Result<SizedBatch> {
244 super::PreparedQueries::prepare_batch(session, query, cfg, consistency, idempotent, logged)
245 .await
246 }
247
248 pub(crate) async fn execute_iter(
253 &self, session: Arc<Session>, select_query: PreparedSelectQuery,
254 ) -> anyhow::Result<QueryPager> {
255 let prepared_stmt = match select_query {
256 PreparedSelectQuery::TxoAda => &self.select_txo_ada,
257 PreparedSelectQuery::TxoAssets => &self.select_txo_assets,
258 PreparedSelectQuery::UnstakedTxoAda => &self.select_unstaked_txo_ada,
259 PreparedSelectQuery::UnstakedTxoAsset => &self.select_unstaked_txo_assets,
260 PreparedSelectQuery::Txi => &self.select_txi_by_hash,
261 PreparedSelectQuery::StakeRegistration => &self.select_stake_registration,
262 PreparedSelectQuery::Cip36Registration => &self.select_cip36_registration,
263 PreparedSelectQuery::Cip36RegistrationInvalid => {
264 &self.select_cip36_registration_invalid
265 },
266 PreparedSelectQuery::Cip36RegistrationForVoteKey => {
267 &self.select_cip36_registration_for_vote_key
268 },
269 PreparedSelectQuery::Rbac509 => &self.select_rbac509_registration,
270 PreparedSelectQuery::Rbac509Invalid => &self.select_rbac509_invalid_registration,
271 PreparedSelectQuery::CatalystIdForTxnId => &self.select_catalyst_id_for_txn_id,
272 PreparedSelectQuery::CatalystIdForStakeAddress => {
273 &self.select_catalyst_id_for_stake_address
274 },
275 PreparedSelectQuery::CatalystIdForPublicKey => &self.select_catalyst_id_for_public_key,
276 };
277
278 super::session_execute_iter(session, prepared_stmt, NO_PARAMS).await
279 }
280
281 pub(crate) async fn execute_batch<T: SerializeRow + Debug>(
283 &self, session: Arc<Session>, cfg: Arc<cassandra_db::EnvVars>, query: PreparedDeleteQuery,
284 values: Vec<T>,
285 ) -> FallibleQueryResults {
286 let query_map = match query {
287 PreparedDeleteQuery::TxoAda => &self.delete_txo_ada,
288 PreparedDeleteQuery::TxoAssets => &self.delete_txo_assets,
289 PreparedDeleteQuery::UnstakedTxoAda => &self.delete_unstaked_txo_ada,
290 PreparedDeleteQuery::UnstakedTxoAsset => &self.delete_unstaked_txo_assets,
291 PreparedDeleteQuery::Txi => &self.delete_txi_by_hash,
292 PreparedDeleteQuery::StakeRegistration => &self.delete_stake_registration,
293 PreparedDeleteQuery::Cip36Registration => &self.delete_cip36_registration,
294 PreparedDeleteQuery::Cip36RegistrationInvalid => {
295 &self.delete_cip36_registration_invalid
296 },
297 PreparedDeleteQuery::Cip36RegistrationForVoteKey => {
298 &self.delete_cip36_registration_for_vote_key
299 },
300 PreparedDeleteQuery::Rbac509 => &self.delete_rbac509_registration,
301 PreparedDeleteQuery::Rbac509Invalid => &self.delete_rbac509_invalid_registration,
302 PreparedDeleteQuery::CatalystIdForTxnId => &self.delete_catalyst_id_for_txn_id,
303 PreparedDeleteQuery::CatalystIdForStakeAddress => {
304 &self.delete_catalyst_id_for_stake_address
305 },
306 PreparedDeleteQuery::CatalystIdForPublicKey => &self.delete_catalyst_id_for_public_key,
307 };
308
309 super::session_execute_batch(session, query_map, cfg, query, values).await
310 }
311}