use super::{PageSize, StatementConfig};
use crate::client::execution_profile::ExecutionProfileHandle;
use crate::frame::types::{Consistency, SerialConsistency};
use crate::observability::history::HistoryListener;
use crate::policies::load_balancing::LoadBalancingPolicy;
use crate::policies::retry::RetryPolicy;
use std::sync::Arc;
use std::time::Duration;
#[derive(Clone)]
pub struct Statement {
pub(crate) config: StatementConfig,
pub contents: String,
page_size: PageSize,
}
impl Statement {
pub fn new(query_text: impl Into<String>) -> Self {
Self {
contents: query_text.into(),
page_size: PageSize::default(),
config: Default::default(),
}
}
pub fn with_page_size(mut self, page_size: i32) -> Self {
self.set_page_size(page_size);
self
}
pub fn set_page_size(&mut self, page_size: i32) {
self.page_size = page_size
.try_into()
.unwrap_or_else(|err| panic!("Query::set_page_size: {err}"));
}
pub(crate) fn get_validated_page_size(&self) -> PageSize {
self.page_size
}
pub fn get_page_size(&self) -> i32 {
self.page_size.inner()
}
pub fn set_consistency(&mut self, c: Consistency) {
self.config.consistency = Some(c);
}
pub fn unset_consistency(&mut self) {
self.config.consistency = None;
}
pub fn get_consistency(&self) -> Option<Consistency> {
self.config.consistency
}
pub fn set_serial_consistency(&mut self, sc: Option<SerialConsistency>) {
self.config.serial_consistency = Some(sc);
}
pub fn unset_serial_consistency(&mut self) {
self.config.serial_consistency = None;
}
pub fn get_serial_consistency(&self) -> Option<SerialConsistency> {
self.config.serial_consistency.flatten()
}
pub fn set_is_idempotent(&mut self, is_idempotent: bool) {
self.config.is_idempotent = is_idempotent;
}
pub fn get_is_idempotent(&self) -> bool {
self.config.is_idempotent
}
pub fn set_tracing(&mut self, should_trace: bool) {
self.config.tracing = should_trace;
}
pub fn get_tracing(&self) -> bool {
self.config.tracing
}
pub fn set_timestamp(&mut self, timestamp: Option<i64>) {
self.config.timestamp = timestamp
}
pub fn get_timestamp(&self) -> Option<i64> {
self.config.timestamp
}
pub fn set_request_timeout(&mut self, timeout: Option<Duration>) {
self.config.request_timeout = timeout
}
pub fn get_request_timeout(&self) -> Option<Duration> {
self.config.request_timeout
}
#[inline]
pub fn set_retry_policy(&mut self, retry_policy: Option<Arc<dyn RetryPolicy>>) {
self.config.retry_policy = retry_policy;
}
#[inline]
pub fn get_retry_policy(&self) -> Option<&Arc<dyn RetryPolicy>> {
self.config.retry_policy.as_ref()
}
#[inline]
pub fn set_load_balancing_policy(
&mut self,
load_balancing_policy: Option<Arc<dyn LoadBalancingPolicy>>,
) {
self.config.load_balancing_policy = load_balancing_policy;
}
#[inline]
pub fn get_load_balancing_policy(&self) -> Option<&Arc<dyn LoadBalancingPolicy>> {
self.config.load_balancing_policy.as_ref()
}
pub fn set_history_listener(&mut self, history_listener: Arc<dyn HistoryListener>) {
self.config.history_listener = Some(history_listener);
}
pub fn remove_history_listener(&mut self) -> Option<Arc<dyn HistoryListener>> {
self.config.history_listener.take()
}
pub fn set_execution_profile_handle(&mut self, profile_handle: Option<ExecutionProfileHandle>) {
self.config.execution_profile_handle = profile_handle;
}
pub fn get_execution_profile_handle(&self) -> Option<&ExecutionProfileHandle> {
self.config.execution_profile_handle.as_ref()
}
}
impl From<String> for Statement {
fn from(s: String) -> Statement {
Statement::new(s)
}
}
impl<'a> From<&'a str> for Statement {
fn from(s: &'a str) -> Statement {
Statement::new(s.to_owned())
}
}