@@ -7919,7 +7919,7 @@ impl<'a> Parser<'a> {
79197919 }
79207920
79217921 pub fn parse_column_def(&mut self) -> Result<ColumnDef, ParserError> {
7922- let name = self.parse_identifier()?;
7922+ let col_name = self.parse_identifier()?;
79237923 let data_type = if self.is_column_type_sqlite_unspecified() {
79247924 DataType::Unspecified
79257925 } else {
@@ -7929,22 +7929,22 @@ impl<'a> Parser<'a> {
79297929 loop {
79307930 if self.parse_keyword(Keyword::CONSTRAINT) {
79317931 let name = Some(self.parse_identifier()?);
7932- if let Some(option) = self.parse_optional_column_option()? {
7932+ if let Some(option) = self.parse_optional_column_option(&col_name )? {
79337933 options.push(ColumnOptionDef { name, option });
79347934 } else {
79357935 return self.expected(
79367936 "constraint details after CONSTRAINT <name>",
79377937 self.peek_token(),
79387938 );
79397939 }
7940- } else if let Some(option) = self.parse_optional_column_option()? {
7940+ } else if let Some(option) = self.parse_optional_column_option(&col_name )? {
79417941 options.push(ColumnOptionDef { name: None, option });
79427942 } else {
79437943 break;
79447944 };
79457945 }
79467946 Ok(ColumnDef {
7947- name,
7947+ name: col_name ,
79487948 data_type,
79497949 options,
79507950 })
@@ -7973,20 +7973,26 @@ impl<'a> Parser<'a> {
79737973 }
79747974 }
79757975
7976- pub fn parse_optional_column_option(&mut self) -> Result<Option<ColumnOption>, ParserError> {
7976+ pub fn parse_optional_column_option(
7977+ &mut self,
7978+ column_ident: &Ident,
7979+ ) -> Result<Option<ColumnOption>, ParserError> {
79777980 if let Some(option) = self.dialect.parse_column_option(self)? {
79787981 return option;
79797982 }
79807983
79817984 self.with_state(
79827985 ColumnDefinition,
79837986 |parser| -> Result<Option<ColumnOption>, ParserError> {
7984- parser.parse_optional_column_option_inner()
7987+ parser.parse_optional_column_option_inner(column_ident )
79857988 },
79867989 )
79877990 }
79887991
7989- fn parse_optional_column_option_inner(&mut self) -> Result<Option<ColumnOption>, ParserError> {
7992+ fn parse_optional_column_option_inner(
7993+ &mut self,
7994+ column_ident: &Ident,
7995+ ) -> Result<Option<ColumnOption>, ParserError> {
79907996 if self.parse_keywords(&[Keyword::CHARACTER, Keyword::SET]) {
79917997 Ok(Some(ColumnOption::CharacterSet(
79927998 self.parse_object_name(false)?,
@@ -8068,7 +8074,7 @@ impl<'a> Parser<'a> {
80688074 ForeignKeyConstraint {
80698075 name: None, // Column-level constraints don't have names
80708076 index_name: None, // Not applicable for column-level constraints
8071- columns: vec![], // Column is implicit for column-level constraints
8077+ columns: vec![column_ident.clone()],
80728078 foreign_table,
80738079 referred_columns,
80748080 on_delete,
@@ -9076,7 +9082,7 @@ impl<'a> Parser<'a> {
90769082 let new_name = self.parse_identifier()?;
90779083 let data_type = self.parse_data_type()?;
90789084 let mut options = vec![];
9079- while let Some(option) = self.parse_optional_column_option()? {
9085+ while let Some(option) = self.parse_optional_column_option(&new_name )? {
90809086 options.push(option);
90819087 }
90829088
@@ -9094,7 +9100,7 @@ impl<'a> Parser<'a> {
90949100 let col_name = self.parse_identifier()?;
90959101 let data_type = self.parse_data_type()?;
90969102 let mut options = vec![];
9097- while let Some(option) = self.parse_optional_column_option()? {
9103+ while let Some(option) = self.parse_optional_column_option(&col_name )? {
90989104 options.push(option);
90999105 }
91009106
@@ -11355,7 +11361,7 @@ impl<'a> Parser<'a> {
1135511361 /// Parses a column definition within a view.
1135611362 fn parse_view_column(&mut self) -> Result<ViewColumnDef, ParserError> {
1135711363 let name = self.parse_identifier()?;
11358- let options = self.parse_view_column_options()?;
11364+ let options = self.parse_view_column_options(&name )?;
1135911365 let data_type = if dialect_of!(self is ClickHouseDialect) {
1136011366 Some(self.parse_data_type()?)
1136111367 } else {
@@ -11368,10 +11374,13 @@ impl<'a> Parser<'a> {
1136811374 })
1136911375 }
1137011376
11371- fn parse_view_column_options(&mut self) -> Result<Option<ColumnOptions>, ParserError> {
11377+ fn parse_view_column_options(
11378+ &mut self,
11379+ column_ident: &Ident,
11380+ ) -> Result<Option<ColumnOptions>, ParserError> {
1137211381 let mut options = Vec::new();
1137311382 loop {
11374- let option = self.parse_optional_column_option()?;
11383+ let option = self.parse_optional_column_option(column_ident )?;
1137511384 if let Some(option) = option {
1137611385 options.push(option);
1137711386 } else {
0 commit comments