@@ -14,6 +14,14 @@ static RESERVED_NAMES: &[&str] = &[
1414 "type" , "typeof" , "unsafe" , "unsized" , "use" , "virtual" , "where" , "while" , "yield" ,
1515] ;
1616
17+ fn is_reserved ( name : & str ) -> bool {
18+ RESERVED_NAMES . contains ( & name) || (
19+ // Names ending in an underscore are not considered reserved so that we
20+ // can always just append an underscore to generate an unreserved name.
21+ name. starts_with ( "__" ) && !name. ends_with ( "_" )
22+ )
23+ }
24+
1725pub fn load_table_names (
1826 database_url : & str ,
1927 schema_name : Option < & str > ,
@@ -110,9 +118,9 @@ pub fn load_foreign_key_constraints(
110118 constraints. map ( |mut ct| {
111119 ct. sort ( ) ;
112120 ct. iter_mut ( ) . for_each ( |foreign_key_constraint| {
113- if RESERVED_NAMES . contains ( & foreign_key_constraint. foreign_key_rust_name . as_str ( ) ) {
121+ if is_reserved ( & foreign_key_constraint. foreign_key_rust_name ) {
114122 foreign_key_constraint. foreign_key_rust_name =
115- format ! ( "{}_" , foreign_key_constraint. foreign_key_rust_name. as_str ( ) ) ;
123+ format ! ( "{}_" , foreign_key_constraint. foreign_key_rust_name) ;
116124 }
117125 } ) ;
118126 ct
@@ -141,7 +149,7 @@ pub fn load_table_data(database_url: &str, name: TableName) -> Result<TableData,
141149 let primary_key = primary_key
142150 . iter ( )
143151 . map ( |k| {
144- if RESERVED_NAMES . contains ( & k. as_str ( ) ) {
152+ if is_reserved ( & k) {
145153 format ! ( "{}_" , k)
146154 } else {
147155 k. clone ( )
@@ -153,7 +161,7 @@ pub fn load_table_data(database_url: &str, name: TableName) -> Result<TableData,
153161 . into_iter ( )
154162 . map ( |c| {
155163 let ty = determine_column_type ( & c, & connection) ?;
156- let rust_name = if RESERVED_NAMES . contains ( & c. column_name . as_str ( ) ) {
164+ let rust_name = if is_reserved ( & c. column_name ) {
157165 Some ( format ! ( "{}_" , c. column_name) )
158166 } else {
159167 None
0 commit comments