This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch 
gh-readonly-queue/main/pr-2179-62cf16f3ece6f3d5985e35893407c8db359ffd3f
in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git

commit ed983e09c24e2e4c9d4e6d9800c6a34e615efcb8
Author: Michael Victor Zink <[email protected]>
AuthorDate: Fri Jan 30 03:11:07 2026 -0800

    PostgreSQL: Fix REPLICA IDENTITY to use NOTHING (#2179)
---
 src/ast/ddl.rs              | 10 +++++-----
 src/parser/mod.rs           |  6 +++---
 tests/sqlparser_postgres.rs | 24 ++++++++++++++++++++++++
 3 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/src/ast/ddl.rs b/src/ast/ddl.rs
index 3a5cd32b..1d0059db 100644
--- a/src/ast/ddl.rs
+++ b/src/ast/ddl.rs
@@ -99,8 +99,8 @@ impl fmt::Display for IndexColumn {
 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
 #[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
 pub enum ReplicaIdentity {
-    /// No replica identity (`REPLICA IDENTITY NONE`).
-    None,
+    /// No replica identity (`REPLICA IDENTITY NOTHING`).
+    Nothing,
     /// Full replica identity (`REPLICA IDENTITY FULL`).
     Full,
     /// Default replica identity (`REPLICA IDENTITY DEFAULT`).
@@ -112,7 +112,7 @@ pub enum ReplicaIdentity {
 impl fmt::Display for ReplicaIdentity {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         match self {
-            ReplicaIdentity::None => f.write_str("NONE"),
+            ReplicaIdentity::Nothing => f.write_str("NOTHING"),
             ReplicaIdentity::Full => f.write_str("FULL"),
             ReplicaIdentity::Default => f.write_str("DEFAULT"),
             ReplicaIdentity::Index(idx) => write!(f, "USING INDEX {idx}"),
@@ -1911,7 +1911,7 @@ pub enum ColumnOption {
     /// [ MATCH { FULL | PARTIAL | SIMPLE } ]
     /// { [ON DELETE <referential_action>] [ON UPDATE <referential_action>] |
     ///   [ON UPDATE <referential_action>] [ON DELETE <referential_action>]
-    /// }         
+    /// }
     /// [<constraint_characteristics>]
     /// `).
     ForeignKey(ForeignKeyConstraint),
@@ -4363,7 +4363,7 @@ impl Spanned for CreateExtension {
     }
 }
 
-/// DROP EXTENSION statement  
+/// DROP EXTENSION statement
 /// Note: this is a PostgreSQL-specific statement
 ///
 /// # References
diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index 9b6b67bd..59ca4522 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -10145,8 +10145,8 @@ impl<'a> Parser<'a> {
             let value = self.parse_number_value()?;
             AlterTableOperation::AutoIncrement { equals, value }
         } else if self.parse_keywords(&[Keyword::REPLICA, Keyword::IDENTITY]) {
-            let identity = if self.parse_keyword(Keyword::NONE) {
-                ReplicaIdentity::None
+            let identity = if self.parse_keyword(Keyword::NOTHING) {
+                ReplicaIdentity::Nothing
             } else if self.parse_keyword(Keyword::FULL) {
                 ReplicaIdentity::Full
             } else if self.parse_keyword(Keyword::DEFAULT) {
@@ -10155,7 +10155,7 @@ impl<'a> Parser<'a> {
                 ReplicaIdentity::Index(self.parse_identifier()?)
             } else {
                 return self.expected(
-                    "NONE, FULL, DEFAULT, or USING INDEX index_name after 
REPLICA IDENTITY",
+                    "NOTHING, FULL, DEFAULT, or USING INDEX index_name after 
REPLICA IDENTITY",
                     self.peek_token(),
                 );
             };
diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs
index a449eebc..54e9ee0c 100644
--- a/tests/sqlparser_postgres.rs
+++ b/tests/sqlparser_postgres.rs
@@ -6643,6 +6643,30 @@ fn parse_alter_table_replica_identity() {
         }
         _ => unreachable!(),
     }
+
+    match pg_and_generic().verified_stmt("ALTER TABLE foo REPLICA IDENTITY 
NOTHING") {
+        Statement::AlterTable(AlterTable { operations, .. }) => {
+            assert_eq!(
+                operations,
+                vec![AlterTableOperation::ReplicaIdentity {
+                    identity: ReplicaIdentity::Nothing
+                }]
+            );
+        }
+        _ => unreachable!(),
+    }
+
+    match pg_and_generic().verified_stmt("ALTER TABLE foo REPLICA IDENTITY 
DEFAULT") {
+        Statement::AlterTable(AlterTable { operations, .. }) => {
+            assert_eq!(
+                operations,
+                vec![AlterTableOperation::ReplicaIdentity {
+                    identity: ReplicaIdentity::Default
+                }]
+            );
+        }
+        _ => unreachable!(),
+    }
 }
 
 #[test]


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

Reply via email to