STET

agent_patch

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

36676 bytes

Back to adjudication
diff --git a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/ast/query.rs b/app/src/ast/query.rs
index 078bbc8..864ac2f 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/ast/query.rs
+++ b/app/src/ast/query.rs
@@ -968,6 +968,9 @@ pub enum TableFactor {
         /// Optional version qualifier to facilitate table time-travel, as
         /// supported by BigQuery and MSSQL.
         version: Option<TableVersion>,
+        /// Optional PartiQL-style JSON path suffix applied to this table
+        /// reference (for example: `table_name[0].field`).
+        json_path: Option<JsonPath>,
         //  Optional table function modifier to generate the ordinality for column.
         /// For example, `SELECT * FROM generate_series(1, 10) WITH ORDINALITY AS t(a, b);`
         /// [WITH ORDINALITY](https://www.postgresql.org/docs/current/functions-srf.html), supported by Postgres.
@@ -1373,10 +1376,14 @@ impl fmt::Display for TableFactor {
                 args,
                 with_hints,
                 version,
+                json_path,
                 partitions,
                 with_ordinality,
             } => {
                 write!(f, "{name}")?;
+                if let Some(path) = json_path {
+                    write!(f, "{path}")?;
+                }
                 if !partitions.is_empty() {
                     write!(f, "PARTITION ({})", display_comma_separated(partitions))?;
                 }
diff --git a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/dialect/mod.rs b/app/src/dialect/mod.rs
index 985cad7..dccf07d 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/dialect/mod.rs
+++ b/app/src/dialect/mod.rs
@@ -293,6 +293,14 @@ pub trait Dialect: Debug + Any {
         false
     }
 
+    /// Returns true if the dialect supports PartiQL-style path navigation.
+    ///
+    /// This enables parsing JSON-like bracket/dot path suffixes in places such
+    /// as expressions and table references.
+    fn supports_partiql_path(&self) -> bool {
+        false
+    }
+
     /// Returns true if the dialect supports lambda functions, for example:
     ///
     /// ```sql
diff --git a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/dialect/redshift.rs b/app/src/dialect/redshift.rs
index 4d07738..3659cd2 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/dialect/redshift.rs
+++ b/app/src/dialect/redshift.rs
@@ -69,6 +69,10 @@ impl Dialect for RedshiftSqlDialect {
         true
     }
 
+    fn supports_partiql_path(&self) -> bool {
+        true
+    }
+
     /// Redshift expects the `TOP` option before the `ALL/DISTINCT` option:
     /// <https://docs.aws.amazon.com/redshift/latest/dg/r_SELECT_list.html#r_SELECT_list-parameters>
     fn supports_top_before_distinct(&self) -> bool {
diff --git a/tmp/agent-patch-flux-pr-1534.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 c835876..63628d0 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/parser/mod.rs
+++ b/app/src/parser/mod.rs
@@ -2936,7 +2936,9 @@ impl<'a> Parser<'a> {
         } else if Token::LBracket == tok {
             if dialect_of!(self is PostgreSqlDialect | DuckDbDialect | GenericDialect) {
                 self.parse_subscript(expr)
-            } else if dialect_of!(self is SnowflakeDialect) {
+            } else if dialect_of!(self is SnowflakeDialect)
+                || self.dialect.supports_partiql_path()
+            {
                 self.prev_token();
                 self.parse_json_access(expr)
             } else {
@@ -3101,6 +3103,31 @@ impl<'a> Parser<'a> {
         })
     }
 
+    /// Parse a PartiQL path suffix used in table references (e.g. `[0].x[1]`).
+    ///
+    /// Parser is positioned at the first path token.
+    fn parse_partiql_table_path(&mut self) -> Result<JsonPath, ParserError> {
+        let mut path = Vec::new();
+        loop {
+            match self.next_token().token {
+                Token::Period if !path.is_empty() => {
+                    path.push(self.parse_json_path_object_key()?);
+                }
+                Token::LBracket => {
+                    let key = self.parse_expr()?;
+                    self.expect_token(&Token::RBracket)?;
+                    path.push(JsonPathElem::Bracket { key });
+                }
+                _ => {
+                    self.prev_token();
+                    break;
+                }
+            }
+        }
+        debug_assert!(!path.is_empty());
+        Ok(JsonPath { path })
+    }
+
     pub fn parse_map_access(&mut self, expr: Expr) -> Result<Expr, ParserError> {
         let key = self.parse_expr()?;
         self.expect_token(&Token::RBracket)?;
@@ -10337,6 +10364,13 @@ impl<'a> Parser<'a> {
             self.parse_open_json_table_factor()
         } else {
             let name = self.parse_object_name(true)?;
+            let json_path = if self.dialect.supports_partiql_path()
+                && self.peek_token().token == Token::LBracket
+            {
+                Some(self.parse_partiql_table_path()?)
+            } else {
+                None
+            };
 
             let partitions: Vec<Ident> = if dialect_of!(self is MySqlDialect | GenericDialect)
                 && self.parse_keyword(Keyword::PARTITION)
@@ -10378,6 +10412,7 @@ impl<'a> Parser<'a> {
                 args,
                 with_hints,
                 version,
+                json_path,
                 partitions,
                 with_ordinality,
             };
diff --git a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/test_utils.rs b/app/src/test_utils.rs
index b35fc45..1c21f6e 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/src/test_utils.rs
+++ b/app/src/test_utils.rs
@@ -343,7 +343,8 @@ pub fn table(name: impl Into<String>) -> TableFactor {
         args: None,
         with_hints: vec![],
         version: None,
-        partitions: vec![],
+        json_path: None,
+            partitions: vec![],
         with_ordinality: false,
     }
 }
@@ -358,7 +359,8 @@ pub fn table_with_alias(name: impl Into<String>, alias: impl Into<String>) -> Ta
         args: None,
         with_hints: vec![],
         version: None,
-        partitions: vec![],
+        json_path: None,
+            partitions: vec![],
         with_ordinality: false,
     }
 }
diff --git a/tmp/agent-patch-flux-pr-1534.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 2bf470f..8a94674 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_bigquery.rs
+++ b/app/tests/sqlparser_bigquery.rs
@@ -227,7 +227,8 @@ fn parse_delete_statement() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 from[0].relation
@@ -1371,7 +1372,8 @@ fn parse_table_identifiers() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 joins: vec![]
@@ -1544,7 +1546,8 @@ fn parse_table_time_travel() {
                 version: Some(TableVersion::ForSystemTimeAsOf(Expr::Value(
                     Value::SingleQuotedString(version)
                 ))),
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             },
             joins: vec![]
@@ -1642,6 +1645,7 @@ fn parse_merge() {
                     args: Default::default(),
                     with_hints: Default::default(),
                     version: Default::default(),
+                    json_path: Default::default(),
                     partitions: Default::default(),
                     with_ordinality: false,
                 },
@@ -1657,6 +1661,7 @@ fn parse_merge() {
                     args: Default::default(),
                     with_hints: Default::default(),
                     version: Default::default(),
+                    json_path: Default::default(),
                     partitions: Default::default(),
                     with_ordinality: false,
                 },
diff --git a/tmp/agent-patch-flux-pr-1534.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 a718711..5d69a80 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_clickhouse.rs
+++ b/app/tests/sqlparser_clickhouse.rs
@@ -65,7 +65,8 @@ fn parse_map_access_expr() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 joins: vec![],
@@ -170,6 +171,7 @@ fn parse_delimited_identifiers() {
             args,
             with_hints,
             version,
+            json_path: _,
             with_ordinality: _,
             partitions: _,
         } => {
diff --git a/tmp/agent-patch-flux-pr-1534.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 3d9ba5d..5504ed5 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_common.rs
+++ b/app/tests/sqlparser_common.rs
@@ -362,7 +362,8 @@ fn parse_update_set_from() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 joins: vec![],
@@ -392,7 +393,8 @@ fn parse_update_set_from() {
                                     args: None,
                                     with_hints: vec![],
                                     version: None,
-                                    partitions: vec![],
+                                    json_path: None,
+            partitions: vec![],
                                     with_ordinality: false,
                                 },
                                 joins: vec![],
@@ -471,7 +473,8 @@ fn parse_update_with_table_alias() {
                         args: None,
                         with_hints: vec![],
                         version: None,
-                        partitions: vec![],
+                        json_path: None,
+            partitions: vec![],
                         with_ordinality: false,
                     },
                     joins: vec![],
@@ -562,7 +565,8 @@ fn parse_select_with_table_alias() {
                 args: None,
                 with_hints: vec![],
                 version: None,
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             },
             joins: vec![],
@@ -599,7 +603,8 @@ fn parse_delete_statement() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 from[0].relation
@@ -646,7 +651,8 @@ fn parse_delete_statement_for_multi_tables() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 from[0].relation
@@ -658,7 +664,8 @@ fn parse_delete_statement_for_multi_tables() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 from[0].joins[0].relation
@@ -684,7 +691,8 @@ fn parse_delete_statement_for_multi_tables_with_using() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 from[0].relation
@@ -696,7 +704,8 @@ fn parse_delete_statement_for_multi_tables_with_using() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 from[1].relation
@@ -708,7 +717,8 @@ fn parse_delete_statement_for_multi_tables_with_using() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 using[0].relation
@@ -720,7 +730,8 @@ fn parse_delete_statement_for_multi_tables_with_using() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 using[0].joins[0].relation
@@ -751,7 +762,8 @@ fn parse_where_delete_statement() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 from[0].relation,
@@ -796,7 +808,8 @@ fn parse_where_delete_with_alias_statement() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 from[0].relation,
@@ -812,7 +825,8 @@ fn parse_where_delete_with_alias_statement() {
                         args: None,
                         with_hints: vec![],
                         version: None,
-                        partitions: vec![],
+                        json_path: None,
+            partitions: vec![],
                         with_ordinality: false,
                     },
                     joins: vec![],
@@ -4716,7 +4730,8 @@ fn test_parse_named_window() {
                 args: None,
                 with_hints: vec![],
                 version: None,
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             },
             joins: vec![],
@@ -5299,7 +5314,8 @@ fn parse_interval_and_or_xor() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 joins: vec![],
@@ -5910,7 +5926,8 @@ fn parse_implicit_join() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 joins: vec![],
@@ -5922,7 +5939,8 @@ fn parse_implicit_join() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 joins: vec![],
@@ -5942,7 +5960,8 @@ fn parse_implicit_join() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 joins: vec![Join {
@@ -5952,7 +5971,8 @@ fn parse_implicit_join() {
                         args: None,
                         with_hints: vec![],
                         version: None,
-                        partitions: vec![],
+                        json_path: None,
+            partitions: vec![],
                         with_ordinality: false,
                     },
                     global: false,
@@ -5966,7 +5986,8 @@ fn parse_implicit_join() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 joins: vec![Join {
@@ -5976,7 +5997,8 @@ fn parse_implicit_join() {
                         args: None,
                         with_hints: vec![],
                         version: None,
-                        partitions: vec![],
+                        json_path: None,
+            partitions: vec![],
                         with_ordinality: false,
                     },
                     global: false,
@@ -6000,7 +6022,8 @@ fn parse_cross_join() {
                 args: None,
                 with_hints: vec![],
                 version: None,
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             },
             global: false,
@@ -6025,7 +6048,8 @@ fn parse_joins_on() {
                 args: None,
                 with_hints: vec![],
                 version: None,
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             },
             global,
@@ -6152,7 +6176,8 @@ fn parse_joins_using() {
                 args: None,
                 with_hints: vec![],
                 version: None,
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             },
             global: false,
@@ -6225,7 +6250,8 @@ fn parse_natural_join() {
                 args: None,
                 with_hints: vec![],
                 version: None,
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             },
             global: false,
@@ -6494,7 +6520,8 @@ fn parse_derived_tables() {
                         args: None,
                         with_hints: vec![],
                         version: None,
-                        partitions: vec![],
+                        json_path: None,
+            partitions: vec![],
                         with_ordinality: false,
                     },
                     global: false,
@@ -7441,7 +7468,8 @@ fn lateral_function() {
                 args: None,
                 with_hints: vec![],
                 version: None,
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             },
             joins: vec![Join {
@@ -8256,7 +8284,8 @@ fn parse_merge() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 }
             );
@@ -8283,7 +8312,8 @@ fn parse_merge() {
                                     args: None,
                                     with_hints: vec![],
                                     version: None,
-                                    partitions: vec![],
+                                    json_path: None,
+            partitions: vec![],
                                     with_ordinality: false,
                                 },
                                 joins: vec![],
@@ -9357,7 +9387,8 @@ fn parse_pivot_table() {
                 args: None,
                 with_hints: vec![],
                 version: None,
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             }),
             aggregate_functions: vec![
@@ -9430,7 +9461,8 @@ fn parse_unpivot_table() {
                 args: None,
                 with_hints: vec![],
                 version: None,
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             }),
             value: Ident {
@@ -9497,7 +9529,8 @@ fn parse_pivot_unpivot_table() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 }),
                 value: Ident {
@@ -9908,7 +9941,8 @@ fn parse_unload() {
                             args: None,
                             with_hints: vec![],
                             version: None,
-                            partitions: vec![],
+                            json_path: None,
+            partitions: vec![],
                             with_ordinality: false,
                         },
                         joins: vec![],
@@ -10087,7 +10121,8 @@ fn parse_connect_by() {
                 args: None,
                 with_hints: vec![],
                 version: None,
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             },
             joins: vec![],
@@ -10174,7 +10209,8 @@ fn parse_connect_by() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 joins: vec![],
@@ -10335,7 +10371,8 @@ fn test_match_recognize() {
         args: None,
         with_hints: vec![],
         version: None,
-        partitions: vec![],
+        json_path: None,
+            partitions: vec![],
         with_ordinality: false,
     };
 
diff --git a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_databricks.rs b/app/tests/sqlparser_databricks.rs
index 7b917bd..dc08237 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_databricks.rs
+++ b/app/tests/sqlparser_databricks.rs
@@ -191,6 +191,7 @@ fn test_values_clause() {
             args: None,
             with_hints: vec![],
             version: None,
+            json_path: None,
             partitions: vec![],
             with_ordinality: false,
         }),
diff --git a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_duckdb.rs b/app/tests/sqlparser_duckdb.rs
index a2db5c2..b0c567e 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_duckdb.rs
+++ b/app/tests/sqlparser_duckdb.rs
@@ -280,7 +280,8 @@ fn test_select_union_by_name() {
                         args: None,
                         with_hints: vec![],
                         version: None,
-                        partitions: vec![],
+                        json_path: None,
+            partitions: vec![],
                         with_ordinality: false,
                     },
                     joins: vec![],
@@ -321,7 +322,8 @@ fn test_select_union_by_name() {
                         args: None,
                         with_hints: vec![],
                         version: None,
-                        partitions: vec![],
+                        json_path: None,
+            partitions: vec![],
                         with_ordinality: false,
                     },
                     joins: vec![],
diff --git a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_hive.rs b/app/tests/sqlparser_hive.rs
index 10bd374..e3429c9 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_hive.rs
+++ b/app/tests/sqlparser_hive.rs
@@ -455,6 +455,7 @@ fn parse_delimited_identifiers() {
             args,
             with_hints,
             version,
+            json_path: _,
             with_ordinality: _,
             partitions: _,
         } => {
diff --git a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_mssql.rs b/app/tests/sqlparser_mssql.rs
index 73fd99c..035c9d4 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_mssql.rs
+++ b/app/tests/sqlparser_mssql.rs
@@ -68,7 +68,8 @@ fn parse_table_time_travel() {
                 version: Some(TableVersion::ForSystemTimeAsOf(Expr::Value(
                     Value::SingleQuotedString(version)
                 ))),
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             },
             joins: vec![]
@@ -217,6 +218,7 @@ fn parse_mssql_openjson() {
                 args: None,
                 with_hints: vec![],
                 version: None,
+                json_path: None,
                 with_ordinality: false,
                 partitions: vec![]
             },
@@ -292,6 +294,7 @@ fn parse_mssql_openjson() {
                 args: None,
                 with_hints: vec![],
                 version: None,
+                json_path: None,
                 with_ordinality: false,
                 partitions: vec![]
             },
@@ -367,6 +370,7 @@ fn parse_mssql_openjson() {
                 args: None,
                 with_hints: vec![],
                 version: None,
+                json_path: None,
                 with_ordinality: false,
                 partitions: vec![]
             },
@@ -442,6 +446,7 @@ fn parse_mssql_openjson() {
                 args: None,
                 with_hints: vec![],
                 version: None,
+                json_path: None,
                 with_ordinality: false,
                 partitions: vec![]
             },
@@ -495,6 +500,7 @@ fn parse_mssql_openjson() {
                 args: None,
                 with_hints: vec![],
                 version: None,
+                json_path: None,
                 with_ordinality: false,
                 partitions: vec![]
             },
@@ -677,6 +683,7 @@ fn parse_delimited_identifiers() {
             args,
             with_hints,
             version,
+            json_path: _,
             with_ordinality: _,
             partitions: _,
         } => {
@@ -1312,7 +1319,8 @@ fn parse_substring_in_select() {
                                 args: None,
                                 with_hints: vec![],
                                 version: None,
-                                partitions: vec![],
+                                json_path: None,
+            partitions: vec![],
                                 with_ordinality: false,
                             },
                             joins: vec![]
diff --git a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_mysql.rs b/app/tests/sqlparser_mysql.rs
index ce32967..33ba4d2 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_mysql.rs
+++ b/app/tests/sqlparser_mysql.rs
@@ -1860,7 +1860,8 @@ fn parse_select_with_numeric_prefix_column_name() {
                             args: None,
                             with_hints: vec![],
                             version: None,
-                            partitions: vec![],
+                            json_path: None,
+            partitions: vec![],
                             with_ordinality: false,
                         },
                         joins: vec![]
@@ -1916,7 +1917,8 @@ fn parse_select_with_concatenation_of_exp_number_and_numeric_prefix_column() {
                             args: None,
                             with_hints: vec![],
                             version: None,
-                            partitions: vec![],
+                            json_path: None,
+            partitions: vec![],
                             with_ordinality: false,
                         },
                         joins: vec![]
@@ -1983,7 +1985,8 @@ fn parse_update_with_joins() {
                         args: None,
                         with_hints: vec![],
                         version: None,
-                        partitions: vec![],
+                        json_path: None,
+            partitions: vec![],
                         with_ordinality: false,
                     },
                     joins: vec![Join {
@@ -1996,7 +1999,8 @@ fn parse_update_with_joins() {
                             args: None,
                             with_hints: vec![],
                             version: None,
-                            partitions: vec![],
+                            json_path: None,
+            partitions: vec![],
                             with_ordinality: false,
                         },
                         global: false,
@@ -2426,7 +2430,8 @@ fn parse_substring_in_select() {
                                 args: None,
                                 with_hints: vec![],
                                 version: None,
-                                partitions: vec![],
+                                json_path: None,
+            partitions: vec![],
                                 with_ordinality: false,
                             },
                             joins: vec![]
diff --git a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_postgres.rs b/app/tests/sqlparser_postgres.rs
index 2e2c440..c2b8704 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_postgres.rs
+++ b/app/tests/sqlparser_postgres.rs
@@ -3509,6 +3509,7 @@ fn parse_delimited_identifiers() {
             args,
             with_hints,
             version,
+            json_path: _,
             with_ordinality: _,
             partitions: _,
         } => {
diff --git a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_redshift.rs b/app/tests/sqlparser_redshift.rs
index a25d506..f864e99 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_redshift.rs
+++ b/app/tests/sqlparser_redshift.rs
@@ -52,7 +52,8 @@ fn test_square_brackets_over_db_schema_table_name() {
                 args: None,
                 with_hints: vec![],
                 version: None,
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             },
             joins: vec![],
@@ -99,7 +100,8 @@ fn test_double_quotes_over_db_schema_table_name() {
                 args: None,
                 with_hints: vec![],
                 version: None,
-                partitions: vec![],
+                json_path: None,
+            partitions: vec![],
                 with_ordinality: false,
             },
             joins: vec![],
@@ -121,6 +123,7 @@ fn parse_delimited_identifiers() {
             args,
             with_hints,
             version,
+            json_path: _,
             with_ordinality: _,
             partitions: _,
         } => {
@@ -196,3 +199,62 @@ fn test_create_view_with_no_schema_binding() {
     redshift_and_generic()
         .verified_stmt("CREATE VIEW myevent AS SELECT eventname FROM event WITH NO SCHEMA BINDING");
 }
+
+#[test]
+fn parse_partiql_path_in_expr() {
+    let select = redshift().verified_only_select(
+        "SELECT c.c_orders[0].o_orderkey FROM customer_orders_lineitem c",
+    );
+    assert_eq!(
+        select.projection[0],
+        SelectItem::UnnamedExpr(Expr::JsonAccess {
+            value: Box::new(Expr::CompoundIdentifier(vec![
+                Ident::new("c"),
+                Ident::new("c_orders")
+            ])),
+            path: JsonPath {
+                path: vec![
+                    JsonPathElem::Bracket {
+                        key: Expr::Value(number("0"))
+                    },
+                    JsonPathElem::Dot {
+                        key: "o_orderkey".to_string(),
+                        quoted: false
+                    }
+                ]
+            }
+        }),
+    );
+}
+
+#[test]
+fn parse_partiql_path_in_table_factor() {
+    let select =
+        redshift().verified_only_select("SELECT * FROM customer_orders_lineitem[0].o_orderkey c");
+    assert_eq!(
+        select.from[0].relation,
+        TableFactor::Table {
+            name: ObjectName(vec![Ident::new("customer_orders_lineitem")]),
+            alias: Some(TableAlias {
+                name: Ident::new("c"),
+                columns: vec![],
+            }),
+            args: None,
+            with_hints: vec![],
+            version: None,
+            json_path: Some(JsonPath {
+                path: vec![
+                    JsonPathElem::Bracket {
+                        key: Expr::Value(number("0"))
+                    },
+                    JsonPathElem::Dot {
+                        key: "o_orderkey".to_string(),
+                        quoted: false
+                    }
+                ]
+            }),
+            partitions: vec![],
+            with_ordinality: false,
+        }
+    );
+}
diff --git a/tmp/agent-patch-flux-pr-1534.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 1d053bb..4e144d6 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_snowflake.rs
+++ b/app/tests/sqlparser_snowflake.rs
@@ -1188,6 +1188,7 @@ fn parse_delimited_identifiers() {
             args,
             with_hints,
             version,
+            json_path: _,
             with_ordinality: _,
             partitions: _,
         } => {
diff --git a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_sqlite.rs b/app/tests/sqlparser_sqlite.rs
index 6f8e654..815058a 100644
--- a/tmp/agent-patch-flux-pr-1534.1-of-1.2026-02-28__18-27-22__gpt-5-3-codex/app/tests/sqlparser_sqlite.rs
+++ b/app/tests/sqlparser_sqlite.rs
@@ -484,7 +484,8 @@ fn parse_update_tuple_row_values() {
                     args: None,
                     with_hints: vec![],
                     version: None,
-                    partitions: vec![],
+                    json_path: None,
+            partitions: vec![],
                     with_ordinality: false,
                 },
                 joins: vec![],