@@ -3347,6 +3347,8 @@ pub enum Statement {
33473347 secret_type : Ident ,
33483348 options : Vec < SecretOption > ,
33493349 } ,
3350+ /// A `CREATE SERVER` statement.
3351+ CreateServer ( CreateServerStatement ) ,
33503352 /// ```sql
33513353 /// CREATE POLICY
33523354 /// ```
@@ -5207,6 +5209,9 @@ impl fmt::Display for Statement {
52075209 write ! ( f, " )" ) ?;
52085210 Ok ( ( ) )
52095211 }
5212+ Statement :: CreateServer ( stmt) => {
5213+ write ! ( f, "{stmt}" )
5214+ }
52105215 Statement :: CreatePolicy {
52115216 name,
52125217 table_name,
@@ -8005,6 +8010,70 @@ impl fmt::Display for SecretOption {
80058010 }
80068011}
80078012
8013+ /// A `CREATE SERVER` statement.
8014+ ///
8015+ /// [PostgreSQL Documentation](https://www.postgresql.org/docs/current/sql-createserver.html)
8016+ #[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
8017+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
8018+ #[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
8019+ pub struct CreateServerStatement {
8020+ pub name : ObjectName ,
8021+ pub if_not_exists : bool ,
8022+ pub server_type : Option < Ident > ,
8023+ pub version : Option < Ident > ,
8024+ pub foreign_data_wrapper : ObjectName ,
8025+ pub options : Option < Vec < CreateServerOption > > ,
8026+ }
8027+
8028+ impl fmt:: Display for CreateServerStatement {
8029+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
8030+ let CreateServerStatement {
8031+ name,
8032+ if_not_exists,
8033+ server_type,
8034+ version,
8035+ foreign_data_wrapper,
8036+ options,
8037+ } = self ;
8038+
8039+ write ! (
8040+ f,
8041+ "CREATE SERVER {if_not_exists}{name} " ,
8042+ if_not_exists = if * if_not_exists { "IF NOT EXISTS " } else { "" } ,
8043+ ) ?;
8044+
8045+ if let Some ( st) = server_type {
8046+ write ! ( f, "TYPE {st} " ) ?;
8047+ }
8048+
8049+ if let Some ( v) = version {
8050+ write ! ( f, "VERSION {v} " ) ?;
8051+ }
8052+
8053+ write ! ( f, "FOREIGN DATA WRAPPER {foreign_data_wrapper}" ) ?;
8054+
8055+ if let Some ( o) = options {
8056+ write ! ( f, " OPTIONS ({o})" , o = display_comma_separated( o) ) ?;
8057+ }
8058+
8059+ Ok ( ( ) )
8060+ }
8061+ }
8062+
8063+ #[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
8064+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
8065+ #[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
8066+ pub struct CreateServerOption {
8067+ pub key : Ident ,
8068+ pub value : Ident ,
8069+ }
8070+
8071+ impl fmt:: Display for CreateServerOption {
8072+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
8073+ write ! ( f, "{} {}" , self . key, self . value)
8074+ }
8075+ }
8076+
80088077#[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
80098078#[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
80108079#[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
0 commit comments