Skip to main content

winterbaume_redshiftdata/
types.rs

1use chrono::{DateTime, Utc};
2
3/// Status of a Redshift Data API statement.
4#[derive(Debug, Clone, PartialEq, Eq)]
5pub enum StatementStatus {
6    Submitted,
7    Started,
8    Finished,
9    Failed,
10    Aborted,
11}
12
13impl StatementStatus {
14    pub fn as_str(&self) -> &str {
15        match self {
16            Self::Submitted => "SUBMITTED",
17            Self::Started => "STARTED",
18            Self::Finished => "FINISHED",
19            Self::Failed => "FAILED",
20            Self::Aborted => "ABORTED",
21        }
22    }
23}
24
25/// A parameter for a Redshift Data API statement.
26#[derive(Debug, Clone)]
27pub struct StatementParameter {
28    pub name: String,
29    pub value: String,
30}
31
32/// A statement executed via the Redshift Data API.
33#[derive(Debug, Clone)]
34pub struct Statement {
35    pub id: String,
36    pub sql: String,
37    pub cluster_identifier: Option<String>,
38    pub workgroup_name: Option<String>,
39    pub database: String,
40    pub db_user: Option<String>,
41    pub secret_arn: Option<String>,
42    pub status: StatementStatus,
43    pub created_at: DateTime<Utc>,
44    pub updated_at: DateTime<Utc>,
45    pub result_rows: i64,
46    pub result_size: i64,
47    pub has_result_set: bool,
48    pub query_string: String,
49    pub parameters: Vec<StatementParameter>,
50    pub sqls: Vec<String>,
51    pub statement_name: Option<String>,
52    pub is_batch: bool,
53    /// Column metadata from the query backend: `(name, type_str)` pairs.
54    pub result_columns: Vec<(String, String)>,
55    /// Row data from the query backend.
56    pub result_data: Vec<Vec<Option<String>>>,
57    /// Error message when `status == Failed`.
58    pub error_message: Option<String>,
59}