@@ -7942,7 +7942,7 @@ impl<'a> Parser<'a> {
79427942 }
79437943
79447944 pub fn parse_column_def(&mut self) -> Result<ColumnDef, ParserError> {
7945- let name = self.parse_identifier()?;
7945+ let col_name = self.parse_identifier()?;
79467946 let data_type = if self.is_column_type_sqlite_unspecified() {
79477947 DataType::Unspecified
79487948 } else {
@@ -7952,22 +7952,22 @@ impl<'a> Parser<'a> {
79527952 loop {
79537953 if self.parse_keyword(Keyword::CONSTRAINT) {
79547954 let name = Some(self.parse_identifier()?);
7955- if let Some(option) = self.parse_optional_column_option()? {
7955+ if let Some(option) = self.parse_optional_column_option(&col_name )? {
79567956 options.push(ColumnOptionDef { name, option });
79577957 } else {
79587958 return self.expected(
79597959 "constraint details after CONSTRAINT <name>",
79607960 self.peek_token(),
79617961 );
79627962 }
7963- } else if let Some(option) = self.parse_optional_column_option()? {
7963+ } else if let Some(option) = self.parse_optional_column_option(&col_name )? {
79647964 options.push(ColumnOptionDef { name: None, option });
79657965 } else {
79667966 break;
79677967 };
79687968 }
79697969 Ok(ColumnDef {
7970- name,
7970+ name: col_name ,
79717971 data_type,
79727972 options,
79737973 })
@@ -7996,20 +7996,26 @@ impl<'a> Parser<'a> {
79967996 }
79977997 }
79987998
7999- pub fn parse_optional_column_option(&mut self) -> Result<Option<ColumnOption>, ParserError> {
7999+ pub fn parse_optional_column_option(
8000+ &mut self,
8001+ column_ident: &Ident,
8002+ ) -> Result<Option<ColumnOption>, ParserError> {
80008003 if let Some(option) = self.dialect.parse_column_option(self)? {
80018004 return option;
80028005 }
80038006
80048007 self.with_state(
80058008 ColumnDefinition,
80068009 |parser| -> Result<Option<ColumnOption>, ParserError> {
8007- parser.parse_optional_column_option_inner()
8010+ parser.parse_optional_column_option_inner(column_ident )
80088011 },
80098012 )
80108013 }
80118014
8012- fn parse_optional_column_option_inner(&mut self) -> Result<Option<ColumnOption>, ParserError> {
8015+ fn parse_optional_column_option_inner(
8016+ &mut self,
8017+ column_ident: &Ident,
8018+ ) -> Result<Option<ColumnOption>, ParserError> {
80138019 if self.parse_keywords(&[Keyword::CHARACTER, Keyword::SET]) {
80148020 Ok(Some(ColumnOption::CharacterSet(
80158021 self.parse_object_name(false)?,
@@ -8091,7 +8097,7 @@ impl<'a> Parser<'a> {
80918097 ForeignKeyConstraint {
80928098 name: None, // Column-level constraints don't have names
80938099 index_name: None, // Not applicable for column-level constraints
8094- columns: vec![], // Column is implicit for column-level constraints
8100+ columns: vec![column_ident.clone()],
80958101 foreign_table,
80968102 referred_columns,
80978103 on_delete,
@@ -9099,7 +9105,7 @@ impl<'a> Parser<'a> {
90999105 let new_name = self.parse_identifier()?;
91009106 let data_type = self.parse_data_type()?;
91019107 let mut options = vec![];
9102- while let Some(option) = self.parse_optional_column_option()? {
9108+ while let Some(option) = self.parse_optional_column_option(&new_name )? {
91039109 options.push(option);
91049110 }
91059111
@@ -9117,7 +9123,7 @@ impl<'a> Parser<'a> {
91179123 let col_name = self.parse_identifier()?;
91189124 let data_type = self.parse_data_type()?;
91199125 let mut options = vec![];
9120- while let Some(option) = self.parse_optional_column_option()? {
9126+ while let Some(option) = self.parse_optional_column_option(&col_name )? {
91219127 options.push(option);
91229128 }
91239129
@@ -11379,7 +11385,7 @@ impl<'a> Parser<'a> {
1137911385 /// Parses a column definition within a view.
1138011386 fn parse_view_column(&mut self) -> Result<ViewColumnDef, ParserError> {
1138111387 let name = self.parse_identifier()?;
11382- let options = self.parse_view_column_options()?;
11388+ let options = self.parse_view_column_options(&name )?;
1138311389 let data_type = if dialect_of!(self is ClickHouseDialect) {
1138411390 Some(self.parse_data_type()?)
1138511391 } else {
@@ -11392,10 +11398,13 @@ impl<'a> Parser<'a> {
1139211398 })
1139311399 }
1139411400
11395- fn parse_view_column_options(&mut self) -> Result<Option<ColumnOptions>, ParserError> {
11401+ fn parse_view_column_options(
11402+ &mut self,
11403+ column_ident: &Ident,
11404+ ) -> Result<Option<ColumnOptions>, ParserError> {
1139611405 let mut options = Vec::new();
1139711406 loop {
11398- let option = self.parse_optional_column_option()?;
11407+ let option = self.parse_optional_column_option(column_ident )?;
1139911408 if let Some(option) = option {
1140011409 options.push(option);
1140111410 } else {
0 commit comments