1use std::fmt::Display;
16
17use serde::Serialize;
18use sqlparser::ast::ObjectName;
19use sqlparser_derive::{Visit, VisitMut};
20
21use crate::statements::query::Query;
22
23#[derive(Debug, Clone, PartialEq, Eq, Visit, VisitMut, Serialize)]
27pub struct DeclareCursor {
28    pub cursor_name: ObjectName,
29    pub query: Box<Query>,
30}
31
32impl Display for DeclareCursor {
33    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34        write!(f, "DECLARE {} CURSOR FOR {}", self.cursor_name, self.query)
35    }
36}
37
38#[derive(Debug, Clone, PartialEq, Eq, Visit, VisitMut, Serialize)]
40pub struct FetchCursor {
41    pub cursor_name: ObjectName,
42    pub fetch_size: u64,
43}
44
45impl Display for FetchCursor {
46    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
47        write!(f, "FETCH {} FROM {}", self.fetch_size, self.cursor_name)
48    }
49}
50
51#[derive(Debug, Clone, PartialEq, Eq, Visit, VisitMut, Serialize)]
53pub struct CloseCursor {
54    pub cursor_name: ObjectName,
55}
56
57impl Display for CloseCursor {
58    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
59        write!(f, "CLOSE {}", self.cursor_name)
60    }
61}