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 a99fe54c PostgreSQL: Support more COMMENT ON object types (#2220)
a99fe54c is described below

commit a99fe54c73399757002eb8e2bdc2dbf4fa4e9647
Author: Guan-Ming (Wesley) Chiu <[email protected]>
AuthorDate: Fri Feb 20 23:03:23 2026 +0800

    PostgreSQL: Support more COMMENT ON object types (#2220)
    
    Signed-off-by: Guan-Ming Chiu <[email protected]>
---
 src/ast/mod.rs            | 42 +++++++++++++++++++++++++++++++++---------
 src/parser/mod.rs         | 40 ++++++++++++++++++++++++++++++++++------
 tests/sqlparser_common.rs | 15 ++++++++++++---
 3 files changed, 79 insertions(+), 18 deletions(-)

diff --git a/src/ast/mod.rs b/src/ast/mod.rs
index d534b300..a06526ec 100644
--- a/src/ast/mod.rs
+++ b/src/ast/mod.rs
@@ -2439,30 +2439,54 @@ impl fmt::Display for ShowCreateObject {
 pub enum CommentObject {
     /// A table column.
     Column,
-    /// A table.
-    Table,
+    /// A database.
+    Database,
+    /// A domain.
+    Domain,
     /// An extension.
     Extension,
+    /// A function.
+    Function,
+    /// An index.
+    Index,
+    /// A materialized view.
+    MaterializedView,
+    /// A procedure.
+    Procedure,
+    /// A role.
+    Role,
     /// A schema.
     Schema,
-    /// A database.
-    Database,
+    /// A sequence.
+    Sequence,
+    /// A table.
+    Table,
+    /// A type.
+    Type,
     /// A user.
     User,
-    /// A role.
-    Role,
+    /// A view.
+    View,
 }
 
 impl fmt::Display for CommentObject {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         match self {
             CommentObject::Column => f.write_str("COLUMN"),
-            CommentObject::Table => f.write_str("TABLE"),
+            CommentObject::Database => f.write_str("DATABASE"),
+            CommentObject::Domain => f.write_str("DOMAIN"),
             CommentObject::Extension => f.write_str("EXTENSION"),
+            CommentObject::Function => f.write_str("FUNCTION"),
+            CommentObject::Index => f.write_str("INDEX"),
+            CommentObject::MaterializedView => f.write_str("MATERIALIZED 
VIEW"),
+            CommentObject::Procedure => f.write_str("PROCEDURE"),
+            CommentObject::Role => f.write_str("ROLE"),
             CommentObject::Schema => f.write_str("SCHEMA"),
-            CommentObject::Database => f.write_str("DATABASE"),
+            CommentObject::Sequence => f.write_str("SEQUENCE"),
+            CommentObject::Table => f.write_str("TABLE"),
+            CommentObject::Type => f.write_str("TYPE"),
             CommentObject::User => f.write_str("USER"),
-            CommentObject::Role => f.write_str("ROLE"),
+            CommentObject::View => f.write_str("VIEW"),
         }
     }
 }
diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index de12078a..a7ee5415 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -901,23 +901,51 @@ impl<'a> Parser<'a> {
             Token::Word(w) if w.keyword == Keyword::COLUMN => {
                 (CommentObject::Column, self.parse_object_name(false)?)
             }
-            Token::Word(w) if w.keyword == Keyword::TABLE => {
-                (CommentObject::Table, self.parse_object_name(false)?)
+            Token::Word(w) if w.keyword == Keyword::DATABASE => {
+                (CommentObject::Database, self.parse_object_name(false)?)
+            }
+            Token::Word(w) if w.keyword == Keyword::DOMAIN => {
+                (CommentObject::Domain, self.parse_object_name(false)?)
             }
             Token::Word(w) if w.keyword == Keyword::EXTENSION => {
                 (CommentObject::Extension, self.parse_object_name(false)?)
             }
+            Token::Word(w) if w.keyword == Keyword::FUNCTION => {
+                (CommentObject::Function, self.parse_object_name(false)?)
+            }
+            Token::Word(w) if w.keyword == Keyword::INDEX => {
+                (CommentObject::Index, self.parse_object_name(false)?)
+            }
+            Token::Word(w) if w.keyword == Keyword::MATERIALIZED => {
+                self.expect_keyword_is(Keyword::VIEW)?;
+                (
+                    CommentObject::MaterializedView,
+                    self.parse_object_name(false)?,
+                )
+            }
+            Token::Word(w) if w.keyword == Keyword::PROCEDURE => {
+                (CommentObject::Procedure, self.parse_object_name(false)?)
+            }
+            Token::Word(w) if w.keyword == Keyword::ROLE => {
+                (CommentObject::Role, self.parse_object_name(false)?)
+            }
             Token::Word(w) if w.keyword == Keyword::SCHEMA => {
                 (CommentObject::Schema, self.parse_object_name(false)?)
             }
-            Token::Word(w) if w.keyword == Keyword::DATABASE => {
-                (CommentObject::Database, self.parse_object_name(false)?)
+            Token::Word(w) if w.keyword == Keyword::SEQUENCE => {
+                (CommentObject::Sequence, self.parse_object_name(false)?)
+            }
+            Token::Word(w) if w.keyword == Keyword::TABLE => {
+                (CommentObject::Table, self.parse_object_name(false)?)
+            }
+            Token::Word(w) if w.keyword == Keyword::TYPE => {
+                (CommentObject::Type, self.parse_object_name(false)?)
             }
             Token::Word(w) if w.keyword == Keyword::USER => {
                 (CommentObject::User, self.parse_object_name(false)?)
             }
-            Token::Word(w) if w.keyword == Keyword::ROLE => {
-                (CommentObject::Role, self.parse_object_name(false)?)
+            Token::Word(w) if w.keyword == Keyword::VIEW => {
+                (CommentObject::View, self.parse_object_name(false)?)
             }
             _ => self.expected("comment object_type", token)?,
         };
diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs
index 4f01ea0c..c37cfa44 100644
--- a/tests/sqlparser_common.rs
+++ b/tests/sqlparser_common.rs
@@ -15185,14 +15185,23 @@ fn parse_comments() {
         _ => unreachable!(),
     }
 
+    // https://www.postgresql.org/docs/current/sql-comment.html
     let object_types = [
         ("COLUMN", CommentObject::Column),
+        ("DATABASE", CommentObject::Database),
+        ("DOMAIN", CommentObject::Domain),
         ("EXTENSION", CommentObject::Extension),
-        ("TABLE", CommentObject::Table),
+        ("FUNCTION", CommentObject::Function),
+        ("INDEX", CommentObject::Index),
+        ("MATERIALIZED VIEW", CommentObject::MaterializedView),
+        ("PROCEDURE", CommentObject::Procedure),
+        ("ROLE", CommentObject::Role),
         ("SCHEMA", CommentObject::Schema),
-        ("DATABASE", CommentObject::Database),
+        ("SEQUENCE", CommentObject::Sequence),
+        ("TABLE", CommentObject::Table),
+        ("TYPE", CommentObject::Type),
         ("USER", CommentObject::User),
-        ("ROLE", CommentObject::Role),
+        ("VIEW", CommentObject::View),
     ];
     for (keyword, expected_object_type) in object_types.iter() {
         match all_dialects_where(|d| d.supports_comment_on())


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to