@@ -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 } ,
@@ -1198,6 +1199,15 @@ impl __sdk::InModule for DbUpdate {{
11981199 table. name. deref( ) ,
11991200 ) ;
12001201 }
1202+ for view in iter_views ( module) {
1203+ let field_name = table_method_name ( & view. name ) ;
1204+ writeln ! (
1205+ out,
1206+ "diff.{field_name} = cache.apply_diff_to_table::<{}>({:?}, &self.{field_name});" ,
1207+ type_ref_name( module, view. product_type_ref) ,
1208+ view. name. deref( ) ,
1209+ ) ;
1210+ }
12011211 } ,
12021212 "
12031213 diff
@@ -1215,12 +1225,12 @@ fn print_applied_diff_defn(module: &ModuleDef, out: &mut Indenter) {
12151225 out. delimited_block (
12161226 "pub struct AppliedDiff<'r> {" ,
12171227 |out| {
1218- for table in iter_tables ( module) {
1228+ for ( table_name , product_type_ref ) in iter_table_names_and_types ( module) {
12191229 writeln ! (
12201230 out,
12211231 "{}: __sdk::TableAppliedDiff<'r, {}>," ,
1222- table_method_name( & table . name ) ,
1223- type_ref_name( module, table . product_type_ref) ,
1232+ table_method_name( table_name ) ,
1233+ type_ref_name( module, product_type_ref) ,
12241234 ) ;
12251235 }
12261236 // Also write a `PhantomData` field which uses the lifetime `r`,
@@ -1248,13 +1258,13 @@ impl __sdk::InModule for AppliedDiff<'_> {{
12481258 out. delimited_block (
12491259 "fn invoke_row_callbacks(&self, event: &EventContext, callbacks: &mut __sdk::DbCallbacks<RemoteModule>) {" ,
12501260 |out| {
1251- for table in iter_tables ( module) {
1261+ for ( table_name , product_type_ref ) in iter_table_names_and_types ( module) {
12521262 writeln ! (
12531263 out,
12541264 "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 ) ,
1265+ type_ref_name( module, product_type_ref) ,
1266+ table_name . deref( ) ,
1267+ table_method_name( table_name ) ,
12581268 ) ;
12591269 }
12601270 } ,
@@ -1290,8 +1300,8 @@ type SubscriptionHandle = SubscriptionHandle;
12901300 out. delimited_block (
12911301 "fn register_tables(client_cache: &mut __sdk::ClientCache<Self>) {" ,
12921302 |out| {
1293- for table in iter_tables ( module) {
1294- writeln ! ( out, "{}::register_table(client_cache);" , table_module_name( & table . name ) ) ;
1303+ for ( table_name , _ ) in iter_table_names_and_types ( module) {
1304+ writeln ! ( out, "{}::register_table(client_cache);" , table_module_name( table_name ) ) ;
12951305 }
12961306 } ,
12971307 "}\n " ,
0 commit comments