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}