@@ -4,8 +4,9 @@ use crate::query_builder::Query;
44use crate :: table:: IndexAlgo ;
55use crate :: { sys, AnonymousViewContext , IterBuf , ReducerContext , ReducerResult , SpacetimeType , Table , ViewContext } ;
66use spacetimedb_lib:: bsatn:: EncodeError ;
7+ use spacetimedb_lib:: db:: raw_def:: v10:: RawModuleDefV10Builder ;
78pub use spacetimedb_lib:: db:: raw_def:: v9:: Lifecycle as LifecycleReducer ;
8- use spacetimedb_lib:: db:: raw_def:: v9:: { RawIndexAlgorithm , RawModuleDefV9Builder , TableType , ViewResultHeader } ;
9+ use spacetimedb_lib:: db:: raw_def:: v9:: { RawIndexAlgorithm , TableType , ViewResultHeader } ;
910use spacetimedb_lib:: de:: { self , Deserialize , DeserializeOwned , Error as _, SeqProductAccess } ;
1011use spacetimedb_lib:: sats:: typespace:: TypespaceBuilder ;
1112use spacetimedb_lib:: sats:: { impl_deserialize, impl_serialize, ProductTypeElement } ;
@@ -674,7 +675,7 @@ pub trait RowLevelSecurityInfo {
674675}
675676
676677/// A function which will be registered by [`register_describer`] into [`DESCRIBERS`],
677- /// which will be called by [`__describe_module__ `] to construct a module definition.
678+ /// which will be called by [`__describe_module_v10__ `] to construct a module definition.
678679///
679680/// May be a closure over static data, so that e.g.
680681/// [`register_row_level_security`] doesn't need to take a type parameter.
@@ -700,6 +701,13 @@ pub fn register_reftype<T: SpacetimeType>() {
700701pub fn register_table < T : Table > ( ) {
701702 register_describer ( |module| {
702703 let product_type_ref = * T :: Row :: make_type ( & mut module. inner ) . as_ref ( ) . unwrap ( ) ;
704+ if let Some ( schedule) = T :: SCHEDULE {
705+ module. inner . add_schedule (
706+ T :: TABLE_NAME ,
707+ schedule. scheduled_at_column ,
708+ schedule. reducer_or_procedure_name ,
709+ ) ;
710+ }
703711
704712 let mut table = module
705713 . inner
@@ -719,10 +727,6 @@ pub fn register_table<T: Table>() {
719727 for & col in T :: SEQUENCES {
720728 table = table. with_column_sequence ( col) ;
721729 }
722- if let Some ( schedule) = T :: SCHEDULE {
723- table = table. with_schedule ( schedule. reducer_or_procedure_name , schedule. scheduled_at_column ) ;
724- }
725-
726730 for col in T :: get_default_col_values ( ) . iter_mut ( ) {
727731 table = table. with_default_column_value ( col. col_id , col. value . clone ( ) )
728732 }
@@ -749,7 +753,11 @@ impl From<IndexAlgo<'_>> for RawIndexAlgorithm {
749753pub fn register_reducer < ' a , A : Args < ' a > , I : FnInfo < Invoke = ReducerFn > > ( _: impl Reducer < ' a , A > ) {
750754 register_describer ( |module| {
751755 let params = A :: schema :: < I > ( & mut module. inner ) ;
752- module. inner . add_reducer ( I :: NAME , params, I :: LIFECYCLE ) ;
756+ if let Some ( lifecycle) = I :: LIFECYCLE {
757+ module. inner . add_lifecycle_reducer ( lifecycle, I :: NAME , params) ;
758+ } else {
759+ module. inner . add_reducer ( I :: NAME , params) ;
760+ }
753761 module. reducers . push ( I :: INVOKE ) ;
754762 } )
755763}
@@ -805,16 +813,14 @@ where
805813
806814/// Registers a row-level security policy.
807815pub fn register_row_level_security ( sql : & ' static str ) {
808- register_describer ( |module| {
809- module. inner . add_row_level_security ( sql) ;
810- } )
816+ panic ! ( "row-level security is not supported anymore" ) ;
811817}
812818
813819/// A builder for a module.
814820#[ derive( Default ) ]
815821pub struct ModuleBuilder {
816822 /// The module definition.
817- inner : RawModuleDefV9Builder ,
823+ inner : RawModuleDefV10Builder ,
818824 /// The reducers of the module.
819825 reducers : Vec < ReducerFn > ,
820826 /// The procedures of the module.
@@ -863,7 +869,7 @@ static ANONYMOUS_VIEWS: OnceLock<Vec<AnonymousFn>> = OnceLock::new();
863869/// including when modules are updated (re-publishing).
864870/// After initialization, the module cannot alter the schema.
865871#[ no_mangle]
866- extern "C" fn __describe_module__ ( description : BytesSink ) {
872+ extern "C" fn __describe_module_v10__ ( description : BytesSink ) {
867873 // Collect the `module`.
868874 let mut module = ModuleBuilder :: default ( ) ;
869875 for describer in & mut * DESCRIBERS . lock ( ) . unwrap ( ) {
@@ -872,7 +878,7 @@ extern "C" fn __describe_module__(description: BytesSink) {
872878
873879 // Serialize the module to bsatn.
874880 let module_def = module. inner . finish ( ) ;
875- let module_def = RawModuleDef :: V9 ( module_def) ;
881+ let module_def = RawModuleDef :: V10 ( module_def) ;
876882 let bytes = bsatn:: to_vec ( & module_def) . expect ( "unable to serialize typespace" ) ;
877883
878884 // Write the sets of reducers, procedures and views.
0 commit comments