STET

agent_patch

runs/2026-02-28__18-27-22__gpt-5-3-codex/flux-pr-1441/flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/agent-logs/agent.patch

8431 bytes

Back to adjudication
diff --git a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/ast/ddl.rs b/app/src/ast/ddl.rs
index 4578ae8..41bdc7b 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/ast/ddl.rs
+++ b/app/src/ast/ddl.rs
@@ -1031,7 +1031,7 @@ impl fmt::Display for ColumnDef {
 ///
 /// Syntax
 /// ```markdown
-/// <name> [data_type][OPTIONS(option, ...)]
+/// <name> [data_type] [OPTIONS(option, ...)] [COMMENT '...']
 ///
 /// option: <name> = <value>
 /// ```
@@ -1049,6 +1049,7 @@ pub struct ViewColumnDef {
     pub name: Ident,
     pub data_type: Option<DataType>,
     pub options: Option<Vec<SqlOption>>,
+    pub comment: Option<String>,
 }
 
 impl fmt::Display for ViewColumnDef {
@@ -1064,6 +1065,9 @@ impl fmt::Display for ViewColumnDef {
                 display_comma_separated(options.as_slice())
             )?;
         }
+        if let Some(comment) = self.comment.as_ref() {
+            write!(f, " COMMENT '{}'", escape_single_quote_string(comment))?;
+        }
         Ok(())
     }
 }
diff --git a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/ast/mod.rs b/app/src/ast/mod.rs
index 8c4bc25..0d0d3c1 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/ast/mod.rs
+++ b/app/src/ast/mod.rs
@@ -3930,25 +3930,25 @@ impl fmt::Display for Statement {
                         .map(|to| format!(" TO {to}"))
                         .unwrap_or_default()
                 )?;
-                if let Some(comment) = comment {
-                    write!(
-                        f,
-                        " COMMENT = '{}'",
-                        value::escape_single_quote_string(comment)
-                    )?;
+                if !columns.is_empty() {
+                    write!(f, " ({})", display_comma_separated(columns))?;
                 }
                 if matches!(options, CreateTableOptions::With(_)) {
                     write!(f, " {options}")?;
                 }
-                if !columns.is_empty() {
-                    write!(f, " ({})", display_comma_separated(columns))?;
-                }
                 if !cluster_by.is_empty() {
                     write!(f, " CLUSTER BY ({})", display_comma_separated(cluster_by))?;
                 }
                 if matches!(options, CreateTableOptions::Options(_)) {
                     write!(f, " {options}")?;
                 }
+                if let Some(comment) = comment {
+                    write!(
+                        f,
+                        " COMMENT = '{}'",
+                        value::escape_single_quote_string(comment)
+                    )?;
+                }
                 write!(f, " AS {query}")?;
                 if *with_no_schema_binding {
                     write!(f, " WITH NO SCHEMA BINDING")?;
diff --git a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/parser/mod.rs b/app/src/parser/mod.rs
index 88c3bd1..019f251 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/parser/mod.rs
+++ b/app/src/parser/mod.rs
@@ -8374,10 +8374,18 @@ impl<'a> Parser<'a> {
         } else {
             None
         };
+        let comment = if dialect_of!(self is SnowflakeDialect | GenericDialect)
+            && self.parse_keyword(Keyword::COMMENT)
+        {
+            Some(self.parse_literal_string()?)
+        } else {
+            None
+        };
         Ok(ViewColumnDef {
             name,
             data_type,
             options,
+            comment,
         })
     }
 
diff --git a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_bigquery.rs b/app/tests/sqlparser_bigquery.rs
index 55afe47..873422f 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_bigquery.rs
+++ b/app/tests/sqlparser_bigquery.rs
@@ -268,6 +268,7 @@ fn parse_create_view_with_options() {
                         name: Ident::new("name"),
                         data_type: None,
                         options: None,
+                        comment: None,
                     },
                     ViewColumnDef {
                         name: Ident::new("age"),
@@ -275,7 +276,8 @@ fn parse_create_view_with_options() {
                         options: Some(vec![SqlOption::KeyValue {
                             key: Ident::new("description"),
                             value: Expr::Value(Value::DoubleQuotedString("field age".to_string())),
-                        }])
+                        }]),
+                        comment: None,
                     },
                 ],
                 columns
diff --git a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_clickhouse.rs b/app/tests/sqlparser_clickhouse.rs
index e30c336..6cc3091 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_clickhouse.rs
+++ b/app/tests/sqlparser_clickhouse.rs
@@ -904,7 +904,8 @@ fn parse_create_view_with_fields_data_types() {
                             }]),
                             vec![]
                         )),
-                        options: None
+                        options: None,
+                        comment: None,
                     },
                     ViewColumnDef {
                         name: "f".into(),
@@ -915,7 +916,8 @@ fn parse_create_view_with_fields_data_types() {
                             }]),
                             vec![]
                         )),
-                        options: None
+                        options: None,
+                        comment: None,
                     },
                 ]
             );
diff --git a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_common.rs b/app/tests/sqlparser_common.rs
index 5d5a17c..8761f9d 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_common.rs
+++ b/app/tests/sqlparser_common.rs
@@ -6867,7 +6867,8 @@ fn parse_create_view_with_columns() {
                     .map(|name| ViewColumnDef {
                         name,
                         data_type: None,
-                        options: None
+                        options: None,
+                        comment: None,
                     })
                     .collect::<Vec<_>>()
             );
diff --git a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_snowflake.rs b/app/tests/sqlparser_snowflake.rs
index 50c5f74..be3f86d 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_snowflake.rs
+++ b/app/tests/sqlparser_snowflake.rs
@@ -576,6 +576,42 @@ fn parse_sf_create_or_replace_with_comment_for_snowflake() {
     }
 }
 
+#[test]
+fn parse_sf_create_or_replace_view_with_column_comments() {
+    let sql = "CREATE OR REPLACE VIEW v (c1 COMMENT 'first', c2 COMMENT 'it''s second') COMMENT = 'view level' AS SELECT 1, 2";
+    match snowflake_and_generic().verified_stmt(sql) {
+        Statement::CreateView {
+            columns, comment, ..
+        } => {
+            assert_eq!(
+                columns,
+                vec![
+                    ViewColumnDef {
+                        name: Ident::new("c1"),
+                        data_type: None,
+                        options: None,
+                        comment: Some("first".to_string()),
+                    },
+                    ViewColumnDef {
+                        name: Ident::new("c2"),
+                        data_type: None,
+                        options: None,
+                        comment: Some("it's second".to_string()),
+                    },
+                ]
+            );
+            assert_eq!(comment, Some("view level".to_string()));
+        }
+        _ => unreachable!(),
+    }
+}
+
+#[test]
+fn parse_sf_create_or_replace_view_comment_ordering() {
+    let sql = "CREATE OR REPLACE VIEW v (c) WITH (foo = 'bar') COMMENT = 'view level' AS SELECT 1";
+    assert_eq!(snowflake_and_generic().verified_stmt(sql).to_string(), sql);
+}
+
 #[test]
 fn test_sf_derived_table_in_parenthesis() {
     // Nesting a subquery in an extra set of parentheses is non-standard,