@@ -757,25 +757,14 @@ def _create_snapshot(
757757 deployability_index = deployability_index or DeployabilityIndex .all_deployable ()
758758
759759 adapter = self ._get_adapter (snapshot .model .gateway )
760- common_render_kwargs : t .Dict [str , t .Any ] = dict (
760+ create_render_kwargs : t .Dict [str , t .Any ] = dict (
761761 engine_adapter = adapter ,
762762 snapshots = parent_snapshots_by_name (snapshot , snapshots ),
763763 runtime_stage = RuntimeStage .CREATING ,
764+ deployability_index = deployability_index ,
764765 )
765- pre_post_render_kwargs = dict (
766- ** common_render_kwargs ,
767- deployability_index = deployability_index .with_deployable (snapshot ),
768- )
769- create_render_kwargs = dict (** common_render_kwargs , deployability_index = deployability_index )
770-
771- # It can still be useful for some strategies to know if the snapshot was actually deployable
772- is_snapshot_deployable = deployability_index .is_deployable (snapshot )
773- is_snapshot_representative = deployability_index .is_representative (snapshot )
774-
775- evaluation_strategy = _evaluation_strategy (snapshot , adapter )
776766
777767 with adapter .transaction (), adapter .session (snapshot .model .session_properties ):
778- adapter .execute (snapshot .model .render_pre_statements (** pre_post_render_kwargs ))
779768 rendered_physical_properties = snapshot .model .render_physical_properties (
780769 ** create_render_kwargs
781770 )
@@ -796,18 +785,16 @@ def _create_snapshot(
796785
797786 logger .info (f"Cloning table '{ source_table_name } ' into '{ target_table_name } '" )
798787
799- evaluation_strategy .create (
788+ self ._execute_create (
789+ snapshot = snapshot ,
800790 table_name = tmp_table_name ,
801- model = snapshot .model ,
802791 is_table_deployable = False ,
803- render_kwargs = dict (
804- table_mapping = {snapshot .name : tmp_table_name },
805- ** create_render_kwargs ,
806- ),
807- is_snapshot_deployable = is_snapshot_deployable ,
808- is_snapshot_representative = is_snapshot_representative ,
809- physical_properties = rendered_physical_properties ,
792+ deployability_index = deployability_index ,
793+ create_render_kwargs = create_render_kwargs ,
794+ rendered_physical_properties = rendered_physical_properties ,
795+ dry_run = True ,
810796 )
797+
811798 try :
812799 adapter .clone_table (target_table_name , snapshot .table_name (), replace = True )
813800 alter_expressions = adapter .get_alter_expressions (
@@ -828,7 +815,7 @@ def _create_snapshot(
828815 if (
829816 is_table_deployable
830817 and snapshot .model .forward_only
831- and not is_snapshot_representative
818+ and not deployability_index . is_representative ( snapshot )
832819 ):
833820 logger .info (
834821 "Skipping creation of the deployable table '%s' for the forward-only model %s. "
@@ -838,19 +825,16 @@ def _create_snapshot(
838825 )
839826 continue
840827
841- evaluation_strategy .create (
828+ self ._execute_create (
829+ snapshot = snapshot ,
842830 table_name = snapshot .table_name (is_deployable = is_table_deployable ),
843- model = snapshot .model ,
844831 is_table_deployable = is_table_deployable ,
845- render_kwargs = create_render_kwargs ,
846- is_snapshot_deployable = is_snapshot_deployable ,
847- is_snapshot_representative = is_snapshot_representative ,
832+ deployability_index = deployability_index ,
833+ create_render_kwargs = create_render_kwargs ,
834+ rendered_physical_properties = rendered_physical_properties ,
848835 dry_run = dry_run ,
849- physical_properties = rendered_physical_properties ,
850836 )
851837
852- adapter .execute (snapshot .model .render_post_statements (** pre_post_render_kwargs ))
853-
854838 if on_complete is not None :
855839 on_complete (snapshot )
856840
@@ -871,10 +855,9 @@ def _migrate_snapshot(
871855 if not needs_migration :
872856 return
873857
874- evaluation_strategy = _evaluation_strategy (snapshot , adapter )
875-
876858 target_table_name = snapshot .table_name ()
877859 if adapter .table_exists (target_table_name ):
860+ evaluation_strategy = _evaluation_strategy (snapshot , adapter )
878861 tmp_table_name = snapshot .table_name (is_deployable = False )
879862 logger .info (
880863 "Migrating table schema from '%s' to '%s'" ,
@@ -894,25 +877,25 @@ def _migrate_snapshot(
894877 target_table_name ,
895878 snapshot .snapshot_id ,
896879 )
880+ deployability_index = DeployabilityIndex .all_deployable ()
897881 render_kwargs : t .Dict [str , t .Any ] = dict (
898882 engine_adapter = adapter ,
899883 snapshots = parent_snapshots_by_name (snapshot , snapshots ),
900884 runtime_stage = RuntimeStage .CREATING ,
901- deployability_index = DeployabilityIndex . all_deployable () ,
885+ deployability_index = deployability_index ,
902886 )
903887 with adapter .transaction (), adapter .session (snapshot .model .session_properties ):
904- adapter . execute ( snapshot . model . render_pre_statements ( ** render_kwargs ))
905- evaluation_strategy . create (
888+ self . _execute_create (
889+ snapshot = snapshot ,
906890 table_name = target_table_name ,
907- model = snapshot .model ,
908891 is_table_deployable = True ,
909- render_kwargs = render_kwargs ,
910- is_snapshot_deployable = True ,
911- is_snapshot_representative = True ,
892+ deployability_index = deployability_index ,
893+ create_render_kwargs = render_kwargs ,
894+ rendered_physical_properties = snapshot .model .render_physical_properties (
895+ ** render_kwargs
896+ ),
912897 dry_run = False ,
913- physical_properties = snapshot .model .render_physical_properties (** render_kwargs ),
914898 )
915- adapter .execute (snapshot .model .render_post_statements (** render_kwargs ))
916899
917900 def _promote_snapshot (
918901 self ,
@@ -1085,6 +1068,40 @@ def _get_adapter(self, gateway: t.Optional[str] = None) -> EngineAdapter:
10851068 raise SQLMeshError (f"Gateway '{ gateway } ' not found in the available engine adapters." )
10861069 return self .adapter
10871070
1071+ def _execute_create (
1072+ self ,
1073+ snapshot : Snapshot ,
1074+ table_name : str ,
1075+ is_table_deployable : bool ,
1076+ deployability_index : DeployabilityIndex ,
1077+ create_render_kwargs : t .Dict [str , t .Any ],
1078+ rendered_physical_properties : t .Dict [str , exp .Expression ],
1079+ dry_run : bool ,
1080+ ) -> None :
1081+ adapter = self ._get_adapter (snapshot .model .gateway )
1082+ evaluation_strategy = _evaluation_strategy (snapshot , adapter )
1083+
1084+ # It can still be useful for some strategies to know if the snapshot was actually deployable
1085+ is_snapshot_deployable = deployability_index .is_deployable (snapshot )
1086+ is_snapshot_representative = deployability_index .is_representative (snapshot )
1087+
1088+ create_render_kwargs = {
1089+ ** create_render_kwargs ,
1090+ "table_mapping" : {snapshot .name : table_name },
1091+ }
1092+ adapter .execute (snapshot .model .render_pre_statements (** create_render_kwargs ))
1093+ evaluation_strategy .create (
1094+ table_name = table_name ,
1095+ model = snapshot .model ,
1096+ is_table_deployable = is_table_deployable ,
1097+ render_kwargs = create_render_kwargs ,
1098+ is_snapshot_deployable = is_snapshot_deployable ,
1099+ is_snapshot_representative = is_snapshot_representative ,
1100+ dry_run = dry_run ,
1101+ physical_properties = rendered_physical_properties ,
1102+ )
1103+ adapter .execute (snapshot .model .render_post_statements (** create_render_kwargs ))
1104+
10881105
10891106def _evaluation_strategy (snapshot : SnapshotInfoLike , adapter : EngineAdapter ) -> EvaluationStrategy :
10901107 klass : t .Type
0 commit comments