This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git
The following commit(s) were added to refs/heads/main by this push:
new a00d5cd9 feat: Add support for SET SESSION AUTHORIZATION #2086 (#2087)
a00d5cd9 is described below
commit a00d5cd9673cc393e17135b5f710b5694005e050
Author: Christopher Watford <[email protected]>
AuthorDate: Wed Nov 12 04:52:15 2025 -0500
feat: Add support for SET SESSION AUTHORIZATION #2086 (#2087)
---
src/ast/mod.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++
src/parser/mod.rs | 12 ++++++++++++
tests/sqlparser_common.rs | 25 +++++++++++++++++++++++++
3 files changed, 83 insertions(+)
diff --git a/src/ast/mod.rs b/src/ast/mod.rs
index b32697f6..9a62b71d 100644
--- a/src/ast/mod.rs
+++ b/src/ast/mod.rs
@@ -2919,6 +2919,15 @@ pub enum Set {
/// MySQL-style
/// SET a = 1, b = 2, ..;
MultipleAssignments { assignments: Vec<SetAssignment> },
+ /// Session authorization for Postgres/Redshift
+ ///
+ /// ```sql
+ /// SET SESSION AUTHORIZATION { user_name | DEFAULT }
+ /// ```
+ ///
+ /// See
<https://www.postgresql.org/docs/current/sql-set-session-authorization.html>
+ /// See
<https://docs.aws.amazon.com/redshift/latest/dg/r_SET_SESSION_AUTHORIZATION.html>
+ SetSessionAuthorization(SetSessionAuthorizationParam),
/// MS-SQL session
///
/// See
<https://learn.microsoft.com/en-us/sql/t-sql/statements/set-statements-transact-sql>
@@ -2993,6 +3002,7 @@ impl Display for Set {
modifier = context_modifier.map(|m|
format!("{m}")).unwrap_or_default()
)
}
+ Self::SetSessionAuthorization(kind) => write!(f, "SET SESSION
AUTHORIZATION {kind}"),
Self::SetSessionParam(kind) => write!(f, "SET {kind}"),
Self::SetTransaction {
modes,
@@ -9822,6 +9832,42 @@ impl fmt::Display for TableObject {
}
}
+/// Represents a SET SESSION AUTHORIZATION statement
+#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
+pub struct SetSessionAuthorizationParam {
+ pub scope: ContextModifier,
+ pub kind: SetSessionAuthorizationParamKind,
+}
+
+impl fmt::Display for SetSessionAuthorizationParam {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "{}", self.kind)
+ }
+}
+
+/// Represents the parameter kind for SET SESSION AUTHORIZATION
+#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
+pub enum SetSessionAuthorizationParamKind {
+ /// Default authorization
+ Default,
+
+ /// User name
+ User(Ident),
+}
+
+impl fmt::Display for SetSessionAuthorizationParamKind {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+ SetSessionAuthorizationParamKind::Default => write!(f, "DEFAULT"),
+ SetSessionAuthorizationParamKind::User(name) => write!(f, "{}",
name),
+ }
+ }
+}
+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index 9615343c..e4a5af72 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -13112,6 +13112,18 @@ impl<'a> Parser<'a> {
session: false,
}
.into());
+ } else if self.parse_keyword(Keyword::AUTHORIZATION) {
+ let auth_value = if self.parse_keyword(Keyword::DEFAULT) {
+ SetSessionAuthorizationParamKind::Default
+ } else {
+ let value = self.parse_identifier()?;
+ SetSessionAuthorizationParamKind::User(value)
+ };
+ return
Ok(Set::SetSessionAuthorization(SetSessionAuthorizationParam {
+ scope: scope.expect("SET ... AUTHORIZATION must have a scope"),
+ kind: auth_value,
+ })
+ .into());
}
if self.dialect.supports_comma_separated_set_assignments() {
diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs
index a235c392..e85a8ec6 100644
--- a/tests/sqlparser_common.rs
+++ b/tests/sqlparser_common.rs
@@ -17672,3 +17672,28 @@ fn parse_reset_statement() {
_ => unreachable!(),
}
}
+
+#[test]
+fn test_parse_set_session_authorization() {
+ let stmt = verified_stmt("SET SESSION AUTHORIZATION DEFAULT");
+ assert_eq!(
+ stmt,
+
Statement::Set(Set::SetSessionAuthorization(SetSessionAuthorizationParam {
+ scope: ContextModifier::Session,
+ kind: SetSessionAuthorizationParamKind::Default,
+ }))
+ );
+
+ let stmt = verified_stmt("SET SESSION AUTHORIZATION 'username'");
+ assert_eq!(
+ stmt,
+
Statement::Set(Set::SetSessionAuthorization(SetSessionAuthorizationParam {
+ scope: ContextModifier::Session,
+ kind: SetSessionAuthorizationParamKind::User(Ident {
+ value: "username".to_string(),
+ quote_style: Some('\''),
+ span: Span::empty(),
+ }),
+ }))
+ );
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]