@@ -2,8 +2,8 @@ use super::code_indenter::{CodeIndenter, Indenter};
22use super :: util:: { collect_case, iter_reducers, print_lines, type_ref_name} ;
33use super :: Lang ;
44use crate :: util:: {
5- iter_procedures, iter_tables, iter_types, iter_unique_cols, print_auto_generated_file_comment ,
6- print_auto_generated_version_comment,
5+ iter_procedures, iter_table_names_and_types , iter_tables, iter_types, iter_unique_cols, iter_views ,
6+ print_auto_generated_file_comment , print_auto_generated_version_comment,
77} ;
88use crate :: OutputFile ;
99use convert_case:: { Case , Casing } ;
@@ -930,12 +930,13 @@ fn reducer_flags_trait_name(reducer: &ReducerDef) -> String {
930930 format ! ( "set_flags_for_{}" , reducer_function_name( reducer) )
931931}
932932
933- /// Iterate over all of the Rust `mod`s for types, reducers and tables in the `module`.
933+ /// Iterate over all of the Rust `mod`s for types, reducers, views, and tables in the `module`.
934934fn iter_module_names ( module : & ModuleDef ) -> impl Iterator < Item = String > + ' _ {
935935 itertools:: chain!(
936936 iter_types( module) . map( |ty| type_module_name( & ty. name) ) ,
937937 iter_reducers( module) . map( |r| reducer_module_name( & r. name) ) ,
938938 iter_tables( module) . map( |tbl| table_module_name( & tbl. name) ) ,
939+ iter_views( module) . map( |view| table_module_name( & view. name) ) ,
939940 iter_procedures( module) . map( |proc| procedure_module_name( & proc. name) ) ,
940941 )
941942}
@@ -954,8 +955,8 @@ fn print_module_reexports(module: &ModuleDef, out: &mut Indenter) {
954955 let type_name = collect_case ( Case :: Pascal , ty. name . name_segments ( ) ) ;
955956 writeln ! ( out, "pub use {mod_name}::{type_name};" )
956957 }
957- for table in iter_tables ( module) {
958- let mod_name = table_module_name ( & table . name ) ;
958+ for ( table_name , _ ) in iter_table_names_and_types ( module) {
959+ let mod_name = table_module_name ( table_name ) ;
959960 // TODO: More precise reexport: we want:
960961 // - The trait name.
961962 // - The insert, delete and possibly update callback ids.
@@ -1113,12 +1114,12 @@ fn print_db_update_defn(module: &ModuleDef, out: &mut Indenter) {
11131114 out. delimited_block (
11141115 "pub struct DbUpdate {" ,
11151116 |out| {
1116- for table in iter_tables ( module) {
1117+ for ( table_name , product_type_ref ) in iter_table_names_and_types ( module) {
11171118 writeln ! (
11181119 out,
11191120 "{}: __sdk::TableUpdate<{}>," ,
1120- table_method_name( & table . name ) ,
1121- type_ref_name( module, table . product_type_ref) ,
1121+ table_method_name( table_name ) ,
1122+ type_ref_name( module, product_type_ref) ,
11221123 ) ;
11231124 }
11241125 } ,
@@ -1137,13 +1138,13 @@ impl TryFrom<__ws::DatabaseUpdate<__ws::BsatnFormat>> for DbUpdate {
11371138 match &table_update.table_name[..] {
11381139" ,
11391140 |out| {
1140- for table in iter_tables ( module) {
1141+ for ( table_name , _ ) in iter_table_names_and_types ( module) {
11411142 writeln ! (
11421143 out,
11431144 "{:?} => db_update.{}.append({}::parse_table_update(table_update)?)," ,
1144- table . name . deref( ) ,
1145- table_method_name( & table . name ) ,
1146- table_module_name( & table . name ) ,
1145+ table_name . deref( ) ,
1146+ table_method_name( table_name ) ,
1147+ table_module_name( table_name ) ,
11471148 ) ;
11481149 }
11491150 } ,
@@ -1181,21 +1182,28 @@ impl __sdk::InModule for DbUpdate {{
11811182 let mut diff = AppliedDiff::default();
11821183 " ,
11831184 |out| {
1184- for table in iter_tables ( module) {
1185- let with_updates = table
1186- . primary_key
1187- . map ( |col| {
1188- let pk_field = table. get_column ( col) . unwrap ( ) . name . deref ( ) . to_case ( Case :: Snake ) ;
1189- format ! ( ".with_updates_by_pk(|row| &row.{pk_field})" )
1190- } )
1191- . unwrap_or_default ( ) ;
1192-
1193- let field_name = table_method_name ( & table. name ) ;
1185+ for ( table_name, product_type_ref, with_updates) in itertools:: chain!(
1186+ iter_tables( module) . map( |table| {
1187+ (
1188+ & table. name,
1189+ table. product_type_ref,
1190+ table
1191+ . primary_key
1192+ . map( |col| {
1193+ let pk_field = table. get_column( col) . unwrap( ) . name. deref( ) . to_case( Case :: Snake ) ;
1194+ format!( ".with_updates_by_pk(|row| &row.{pk_field})" )
1195+ } )
1196+ . unwrap_or_default( ) ,
1197+ )
1198+ } ) ,
1199+ iter_views( module) . map( |view| ( & view. name, view. product_type_ref, "" . into( ) ) )
1200+ ) {
1201+ let field_name = table_method_name ( table_name) ;
11941202 writeln ! (
11951203 out,
11961204 "diff.{field_name} = cache.apply_diff_to_table::<{}>({:?}, &self.{field_name}){with_updates};" ,
1197- type_ref_name( module, table . product_type_ref) ,
1198- table . name . deref( ) ,
1205+ type_ref_name( module, product_type_ref) ,
1206+ table_name . deref( ) ,
11991207 ) ;
12001208 }
12011209 } ,
@@ -1215,12 +1223,12 @@ fn print_applied_diff_defn(module: &ModuleDef, out: &mut Indenter) {
12151223 out. delimited_block (
12161224 "pub struct AppliedDiff<'r> {" ,
12171225 |out| {
1218- for table in iter_tables ( module) {
1226+ for ( table_name , product_type_ref ) in iter_table_names_and_types ( module) {
12191227 writeln ! (
12201228 out,
12211229 "{}: __sdk::TableAppliedDiff<'r, {}>," ,
1222- table_method_name( & table . name ) ,
1223- type_ref_name( module, table . product_type_ref) ,
1230+ table_method_name( table_name ) ,
1231+ type_ref_name( module, product_type_ref) ,
12241232 ) ;
12251233 }
12261234 // Also write a `PhantomData` field which uses the lifetime `r`,
@@ -1248,13 +1256,13 @@ impl __sdk::InModule for AppliedDiff<'_> {{
12481256 out. delimited_block (
12491257 "fn invoke_row_callbacks(&self, event: &EventContext, callbacks: &mut __sdk::DbCallbacks<RemoteModule>) {" ,
12501258 |out| {
1251- for table in iter_tables ( module) {
1259+ for ( table_name , product_type_ref ) in iter_table_names_and_types ( module) {
12521260 writeln ! (
12531261 out,
12541262 "callbacks.invoke_table_row_callbacks::<{}>({:?}, &self.{}, event);" ,
1255- type_ref_name( module, table . product_type_ref) ,
1256- table . name . deref( ) ,
1257- table_method_name( & table . name ) ,
1263+ type_ref_name( module, product_type_ref) ,
1264+ table_name . deref( ) ,
1265+ table_method_name( table_name ) ,
12581266 ) ;
12591267 }
12601268 } ,
@@ -1290,8 +1298,8 @@ type SubscriptionHandle = SubscriptionHandle;
12901298 out. delimited_block (
12911299 "fn register_tables(client_cache: &mut __sdk::ClientCache<Self>) {" ,
12921300 |out| {
1293- for table in iter_tables ( module) {
1294- writeln ! ( out, "{}::register_table(client_cache);" , table_module_name( & table . name ) ) ;
1301+ for ( table_name , _ ) in iter_table_names_and_types ( module) {
1302+ writeln ! ( out, "{}::register_table(client_cache);" , table_module_name( table_name ) ) ;
12951303 }
12961304 } ,
12971305 "}\n " ,
0 commit comments