@@ -3318,6 +3318,8 @@ pub enum Statement {
33183318 secret_type : Ident ,
33193319 options : Vec < SecretOption > ,
33203320 } ,
3321+ /// A `CREATE SERVER` statement.
3322+ CreateServer ( CreateServerStatement ) ,
33213323 /// ```sql
33223324 /// CREATE POLICY
33233325 /// ```
@@ -5178,6 +5180,9 @@ impl fmt::Display for Statement {
51785180 write ! ( f, " )" ) ?;
51795181 Ok ( ( ) )
51805182 }
5183+ Statement :: CreateServer ( stmt) => {
5184+ write ! ( f, "{stmt}" )
5185+ }
51815186 Statement :: CreatePolicy {
51825187 name,
51835188 table_name,
@@ -7976,6 +7981,70 @@ impl fmt::Display for SecretOption {
79767981 }
79777982}
79787983
7984+ /// A `CREATE SERVER` statement.
7985+ ///
7986+ /// [PostgreSQL Documentation](https://www.postgresql.org/docs/current/sql-createserver.html)
7987+ #[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
7988+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
7989+ #[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
7990+ pub struct CreateServerStatement {
7991+ pub name : ObjectName ,
7992+ pub if_not_exists : bool ,
7993+ pub server_type : Option < Ident > ,
7994+ pub version : Option < Ident > ,
7995+ pub foreign_data_wrapper : ObjectName ,
7996+ pub options : Option < Vec < CreateServerOption > > ,
7997+ }
7998+
7999+ impl fmt:: Display for CreateServerStatement {
8000+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
8001+ let CreateServerStatement {
8002+ name,
8003+ if_not_exists,
8004+ server_type,
8005+ version,
8006+ foreign_data_wrapper,
8007+ options,
8008+ } = self ;
8009+
8010+ write ! (
8011+ f,
8012+ "CREATE SERVER {if_not_exists}{name} " ,
8013+ if_not_exists = if * if_not_exists { "IF NOT EXISTS " } else { "" } ,
8014+ ) ?;
8015+
8016+ if let Some ( st) = server_type {
8017+ write ! ( f, "TYPE {st} " ) ?;
8018+ }
8019+
8020+ if let Some ( v) = version {
8021+ write ! ( f, "VERSION {v} " ) ?;
8022+ }
8023+
8024+ write ! ( f, "FOREIGN DATA WRAPPER {foreign_data_wrapper}" ) ?;
8025+
8026+ if let Some ( o) = options {
8027+ write ! ( f, " OPTIONS ({o})" , o = display_comma_separated( o) ) ?;
8028+ }
8029+
8030+ Ok ( ( ) )
8031+ }
8032+ }
8033+
8034+ #[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
8035+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
8036+ #[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
8037+ pub struct CreateServerOption {
8038+ pub key : Ident ,
8039+ pub value : Ident ,
8040+ }
8041+
8042+ impl fmt:: Display for CreateServerOption {
8043+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
8044+ write ! ( f, "{} {}" , self . key, self . value)
8045+ }
8046+ }
8047+
79798048#[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
79808049#[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
79818050#[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
0 commit comments