1use crate::{OracleArguments, OracleStatement};
2use either::Either;
3use rbdc::Error;
4
5#[derive(Debug, Clone)]
6pub struct OracleQuery {
7 pub statement: Either<String, OracleStatement>,
8 pub arguments: Vec<rbs::Value>,
9 pub persistent: bool,
10}
11
12impl OracleQuery {
13 #[inline]
14 pub fn sql(&self) -> &str {
15 match self.statement {
16 Either::Right(ref statement) => &statement.sql,
17 Either::Left(ref sql) => sql,
18 }
19 }
20
21 pub fn statement(&self) -> Option<&OracleStatement> {
22 match self.statement {
23 Either::Right(ref statement) => Some(statement),
24 Either::Left(_) => None,
25 }
26 }
27
28 #[inline]
29 pub fn take_arguments(self) -> Result<Option<OracleArguments>, Error> {
30 if self.arguments.is_empty() {
31 return Ok(None);
32 }
33 Ok(Some(OracleArguments::from_args(self.arguments)?))
34 }
35
36 #[inline]
37 pub fn persistent(&self) -> bool {
38 self.persistent
39 }
40}