@@ -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_name: &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_name )
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_name: &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)?,
@@ -8029,16 +8035,32 @@ impl<'a> Parser<'a> {
80298035 }
80308036 } else if self.parse_keywords(&[Keyword::PRIMARY, Keyword::KEY]) {
80318037 let characteristics = self.parse_constraint_characteristics()?;
8032- Ok(Some(ColumnOption::Unique {
8033- is_primary: true,
8034- characteristics,
8035- }))
8038+ Ok(Some(
8039+ PrimaryKeyConstraint {
8040+ name: None,
8041+ index_name: None,
8042+ index_type: None,
8043+ columns: vec![column_name.clone().into()],
8044+ index_options: vec![],
8045+ characteristics,
8046+ }
8047+ .into(),
8048+ ))
80368049 } else if self.parse_keyword(Keyword::UNIQUE) {
80378050 let characteristics = self.parse_constraint_characteristics()?;
8038- Ok(Some(ColumnOption::Unique {
8039- is_primary: false,
8040- characteristics,
8041- }))
8051+ Ok(Some(
8052+ UniqueConstraint {
8053+ name: None,
8054+ index_name: None,
8055+ index_type_display: KeyOrIndexDisplay::None,
8056+ index_type: None,
8057+ columns: vec![column_name.clone().into()],
8058+ index_options: vec![],
8059+ characteristics,
8060+ nulls_distinct: NullsDistinctOption::None,
8061+ }
8062+ .into(),
8063+ ))
80428064 } else if self.parse_keyword(Keyword::REFERENCES) {
80438065 let foreign_table = self.parse_object_name(false)?;
80448066 // PostgreSQL allows omitting the column list and
@@ -9046,7 +9068,7 @@ impl<'a> Parser<'a> {
90469068 let new_name = self.parse_identifier()?;
90479069 let data_type = self.parse_data_type()?;
90489070 let mut options = vec![];
9049- while let Some(option) = self.parse_optional_column_option()? {
9071+ while let Some(option) = self.parse_optional_column_option(&new_name )? {
90509072 options.push(option);
90519073 }
90529074
@@ -9064,7 +9086,7 @@ impl<'a> Parser<'a> {
90649086 let col_name = self.parse_identifier()?;
90659087 let data_type = self.parse_data_type()?;
90669088 let mut options = vec![];
9067- while let Some(option) = self.parse_optional_column_option()? {
9089+ while let Some(option) = self.parse_optional_column_option(&col_name )? {
90689090 options.push(option);
90699091 }
90709092
@@ -11325,7 +11347,7 @@ impl<'a> Parser<'a> {
1132511347 /// Parses a column definition within a view.
1132611348 fn parse_view_column(&mut self) -> Result<ViewColumnDef, ParserError> {
1132711349 let name = self.parse_identifier()?;
11328- let options = self.parse_view_column_options()?;
11350+ let options = self.parse_view_column_options(&name )?;
1132911351 let data_type = if dialect_of!(self is ClickHouseDialect) {
1133011352 Some(self.parse_data_type()?)
1133111353 } else {
@@ -11338,10 +11360,13 @@ impl<'a> Parser<'a> {
1133811360 })
1133911361 }
1134011362
11341- fn parse_view_column_options(&mut self) -> Result<Option<ColumnOptions>, ParserError> {
11363+ fn parse_view_column_options(
11364+ &mut self,
11365+ column_name: &Ident,
11366+ ) -> Result<Option<ColumnOptions>, ParserError> {
1134211367 let mut options = Vec::new();
1134311368 loop {
11344- let option = self.parse_optional_column_option()?;
11369+ let option = self.parse_optional_column_option(column_name )?;
1134511370 if let Some(option) = option {
1134611371 options.push(option);
1134711372 } else {
0 commit comments