STET

agent_patch

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

8632 bytes

Back to adjudication
diff --git a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-4/app/src/ast/ddl.rs b/app/src/ast/ddl.rs
index 4578ae8..7687f90 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-4/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 '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-4/app/src/ast/mod.rs b/app/src/ast/mod.rs
index 8c4bc25..aee18d4 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-4/app/src/ast/mod.rs
+++ b/app/src/ast/mod.rs
@@ -3930,13 +3930,6 @@ 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 matches!(options, CreateTableOptions::With(_)) {
                     write!(f, " {options}")?;
                 }
@@ -3949,6 +3942,13 @@ impl fmt::Display for Statement {
                 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-4/app/src/parser/mod.rs b/app/src/parser/mod.rs
index 88c3bd1..b0ae5d1 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-4/app/src/parser/mod.rs
+++ b/app/src/parser/mod.rs
@@ -8361,6 +8361,11 @@ impl<'a> Parser<'a> {
     /// Parses a column definition within a view.
     fn parse_view_column(&mut self) -> Result<ViewColumnDef, ParserError> {
         let name = self.parse_identifier(false)?;
+        let data_type = if dialect_of!(self is ClickHouseDialect) {
+            Some(self.parse_data_type()?)
+        } else {
+            None
+        };
         let options = if dialect_of!(self is BigQueryDialect | GenericDialect)
             && self.parse_keyword(Keyword::OPTIONS)
         {
@@ -8369,8 +8374,14 @@ impl<'a> Parser<'a> {
         } else {
             None
         };
-        let data_type = if dialect_of!(self is ClickHouseDialect) {
-            Some(self.parse_data_type()?)
+        let comment = if dialect_of!(self is SnowflakeDialect | GenericDialect)
+            && self.parse_keyword(Keyword::COMMENT)
+        {
+            let next_token = self.next_token();
+            match next_token.token {
+                Token::SingleQuotedString(str) => Some(str),
+                _ => self.expected("string literal", next_token)?,
+            }
         } else {
             None
         };
@@ -8378,6 +8389,7 @@ impl<'a> Parser<'a> {
             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-4/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-4/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-4/app/tests/sqlparser_clickhouse.rs b/app/tests/sqlparser_clickhouse.rs
index e30c336..76e255e 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-4/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-4/app/tests/sqlparser_common.rs b/app/tests/sqlparser_common.rs
index 5d5a17c..0d95563 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-4/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-4/app/tests/sqlparser_snowflake.rs b/app/tests/sqlparser_snowflake.rs
index 50c5f74..e668bfb 100644
--- a/tmp/agent-patch-flux-pr-1441.1-of-1.2026-02-28__18-27-22__gpt-5-4/app/tests/sqlparser_snowflake.rs
+++ b/app/tests/sqlparser_snowflake.rs
@@ -576,6 +576,40 @@ fn parse_sf_create_or_replace_with_comment_for_snowflake() {
     }
 }
 
+#[test]
+fn parse_sf_create_view_column_with_comment() {
+    let sql = "CREATE VIEW v (c COMMENT 'hello, world') AS SELECT 1";
+
+    match snowflake().verified_stmt(sql) {
+        Statement::CreateView { columns, .. } => {
+            assert_eq!(
+                columns,
+                vec![ViewColumnDef {
+                    name: Ident::new("c"),
+                    data_type: None,
+                    options: None,
+                    comment: Some("hello, world".to_string()),
+                }]
+            );
+        }
+        _ => unreachable!(),
+    }
+}
+
+#[test]
+fn parse_create_view_renders_columns_and_options_before_comment() {
+    let sql = "CREATE VIEW v (c OPTIONS(a = 'b') COMMENT 'hello') OPTIONS(x = 'y') COMMENT = 'view comment' AS SELECT 1";
+    let dialect = test_utils::TestedDialects {
+        dialects: vec![Box::new(GenericDialect {}) as Box<dyn Dialect>],
+        options: None,
+    };
+
+    dialect.one_statement_parses_to(
+        sql,
+        "CREATE VIEW v (c OPTIONS(a = 'b') COMMENT 'hello') OPTIONS(x = 'y') COMMENT = 'view comment' AS SELECT 1",
+    );
+}
+
 #[test]
 fn test_sf_derived_table_in_parenthesis() {
     // Nesting a subquery in an extra set of parentheses is non-standard,