use crate::diff::sequence::query::sequence_types::SequenceName;
use crate::diff::types::SchemaName;
use std::fmt::{Display, Formatter};
pub enum SequenceQuery {
LastValue(SchemaName, SequenceName),
AllSequences(SchemaName),
}
impl Display for SequenceQuery {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
Self::LastValue(schema_name, sequence_name) => {
write!(
f,
"SELECT last_value FROM {}.{};",
schema_name.name(),
sequence_name.name()
)
}
SequenceQuery::AllSequences(schema_name) => {
write!(
f,
r#"
SELECT sequence_name
FROM information_schema.sequences
WHERE sequence_schema = '{}';
"#,
schema_name.name()
)
}
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::diff::test::sanitize_raw_string;
#[test]
fn test_sequence_last_value_query() {
let schema_name = SchemaName::new("test_schema".to_string());
let sequence_name = SequenceName::new("test_sequence".to_string());
let last_value_query = SequenceQuery::LastValue(schema_name, sequence_name);
assert_eq!(
last_value_query.to_string(),
"SELECT last_value FROM test_schema.test_sequence;"
);
}
#[test]
fn test_all_sequences_query() {
let schema_name = SchemaName::new("test_schema".to_string());
let all_sequences_query = SequenceQuery::AllSequences(schema_name);
assert_eq!(
sanitize_raw_string(all_sequences_query.to_string()),
"SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = 'test_schema';"
);
}
}