rust_pgdatadiff/diff/sequence/query/
sequence_query.rs1use crate::diff::sequence::query::sequence_types::SequenceName;
2use crate::diff::types::SchemaName;
3use std::fmt::{Display, Formatter};
4
5pub enum SequenceQuery {
7 LastValue(SchemaName, SequenceName),
9 AllSequences(SchemaName),
11}
12
13impl Display for SequenceQuery {
14 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
16 match self {
17 Self::LastValue(schema_name, sequence_name) => {
18 write!(
19 f,
20 "SELECT last_value FROM {}.\"{}\";",
21 schema_name.name(),
22 sequence_name.name()
23 )
24 }
25 SequenceQuery::AllSequences(schema_name) => {
26 write!(
27 f,
28 r#"
29 SELECT sequence_name
30 FROM information_schema.sequences
31 WHERE sequence_schema = '{}';
32 "#,
33 schema_name.name()
34 )
35 }
36 }
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43 use crate::diff::internal::tests::sanitize_raw_string;
44
45 impl From<SequenceQuery> for String {
46 fn from(value: SequenceQuery) -> Self {
47 value.to_string()
48 }
49 }
50
51 #[test]
52 fn test_sequence_last_value_query() {
53 let schema_name = SchemaName::new("test_schema");
54 let sequence_name = SequenceName::new("test_sequence");
55 let last_value_query = SequenceQuery::LastValue(schema_name, sequence_name);
56
57 assert_eq!(
58 last_value_query.to_string(),
59 "SELECT last_value FROM test_schema.test_sequence;"
60 );
61 }
62
63 #[test]
64 fn test_all_sequences_query() {
65 let schema_name = SchemaName::new("test_schema");
66 let all_sequences_query = SequenceQuery::AllSequences(schema_name);
67
68 assert_eq!(
69 sanitize_raw_string(all_sequences_query),
70 "SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = 'test_schema';"
71 );
72 }
73}