1- """Readds indexes and primary keys in case tables were restored from a backup ."""
1+ """The baseline migration script that sets up the initial state tables ."""
22
33from sqlglot import exp
4- from sqlmesh .utils import random_id
5- from sqlmesh .utils .migration import index_text_type
6- from sqlmesh .utils .migration import blob_text_type
4+ from sqlmesh .utils .migration import blob_text_type , index_text_type
75
86
97def migrate_schemas (state_sync , ** kwargs ): # type: ignore
108 schema = state_sync .schema
119 engine_adapter = state_sync .engine_adapter
12- if not engine_adapter .SUPPORTS_INDEXES :
13- return
1410
1511 intervals_table = "_intervals"
1612 snapshots_table = "_snapshots"
1713 environments_table = "_environments"
14+ versions_table = "_versions"
1815 if state_sync .schema :
16+ engine_adapter .create_schema (schema )
1917 intervals_table = f"{ schema } .{ intervals_table } "
2018 snapshots_table = f"{ schema } .{ snapshots_table } "
2119 environments_table = f"{ schema } .{ environments_table } "
22-
23- table_suffix = random_id (short = True )
20+ versions_table = f"{ schema } .{ versions_table } "
2421
2522 index_type = index_text_type (engine_adapter .dialect )
2623 blob_type = blob_text_type (engine_adapter .dialect )
2724
28- new_snapshots_table = f"{ snapshots_table } __{ table_suffix } "
2925 snapshots_columns_to_types = {
3026 "name" : exp .DataType .build (index_type ),
3127 "identifier" : exp .DataType .build (index_type ),
@@ -38,7 +34,6 @@ def migrate_schemas(state_sync, **kwargs): # type: ignore
3834 "unrestorable" : exp .DataType .build ("boolean" ),
3935 }
4036
41- new_environments_table = f"{ environments_table } __{ table_suffix } "
4237 environments_columns_to_types = {
4338 "name" : exp .DataType .build (index_type ),
4439 "snapshots" : exp .DataType .build (blob_type ),
@@ -53,9 +48,9 @@ def migrate_schemas(state_sync, **kwargs): # type: ignore
5348 "catalog_name_override" : exp .DataType .build ("text" ),
5449 "previous_finalized_snapshots" : exp .DataType .build (blob_type ),
5550 "normalize_name" : exp .DataType .build ("boolean" ),
51+ "requirements" : exp .DataType .build (blob_type ),
5652 }
5753
58- new_intervals_table = f"{ intervals_table } __{ table_suffix } "
5954 intervals_columns_to_types = {
6055 "id" : exp .DataType .build (index_type ),
6156 "created_ts" : exp .DataType .build ("bigint" ),
@@ -69,53 +64,34 @@ def migrate_schemas(state_sync, **kwargs): # type: ignore
6964 "is_compacted" : exp .DataType .build ("boolean" ),
7065 }
7166
72- # Recreate the snapshots table and its indexes.
73- engine_adapter .create_table (
74- new_snapshots_table , snapshots_columns_to_types , primary_key = ("name" , "identifier" )
75- )
76- engine_adapter .create_index (
77- new_snapshots_table , "_snapshots_name_version_idx" , ("name" , "version" )
78- )
79- engine_adapter .insert_append (
80- new_snapshots_table ,
81- exp .select ("*" ).from_ (snapshots_table ),
82- target_columns_to_types = snapshots_columns_to_types ,
83- )
67+ versions_columns_to_types = {
68+ "schema_version" : exp .DataType .build ("int" ),
69+ "sqlglot_version" : exp .DataType .build (index_type ),
70+ "sqlmesh_version" : exp .DataType .build (index_type ),
71+ }
8472
85- # Recreate the environments table and its indexes.
86- engine_adapter .create_table (
87- new_environments_table , environments_columns_to_types , primary_key = ("name" ,)
88- )
89- engine_adapter .insert_append (
90- new_environments_table ,
91- exp .select ("*" ).from_ (environments_table ),
92- target_columns_to_types = environments_columns_to_types ,
73+ # Create the versions table.
74+ engine_adapter .create_state_table (versions_table , versions_columns_to_types )
75+
76+ # Create the snapshots table and its indexes.
77+ engine_adapter .create_state_table (
78+ snapshots_table , snapshots_columns_to_types , primary_key = ("name" , "identifier" )
9379 )
80+ engine_adapter .create_index (snapshots_table , "_snapshots_name_version_idx" , ("name" , "version" ))
9481
95- # Recreate the intervals table and its indexes.
96- engine_adapter .create_table (
97- new_intervals_table , intervals_columns_to_types , primary_key = ("id " ,)
82+ # Create the environments table and its indexes.
83+ engine_adapter .create_state_table (
84+ environments_table , environments_columns_to_types , primary_key = ("name " ,)
9885 )
99- engine_adapter .create_index (
100- new_intervals_table , "_intervals_name_identifier_idx" , ("name" , "identifier" )
86+
87+ # Create the intervals table and its indexes.
88+ engine_adapter .create_state_table (
89+ intervals_table , intervals_columns_to_types , primary_key = ("id" ,)
10190 )
10291 engine_adapter .create_index (
103- new_intervals_table , "_intervals_name_version_idx " , ("name" , "version " )
92+ intervals_table , "_intervals_name_identifier_idx " , ("name" , "identifier " )
10493 )
105- engine_adapter .insert_append (
106- new_intervals_table ,
107- exp .select ("*" ).from_ (intervals_table ),
108- target_columns_to_types = intervals_columns_to_types ,
109- )
110-
111- # Drop old tables.
112- for table in (snapshots_table , environments_table , intervals_table ):
113- engine_adapter .drop_table (table )
114-
115- # Replace old tables with new ones.
116- engine_adapter .rename_table (new_snapshots_table , snapshots_table )
117- engine_adapter .rename_table (new_environments_table , environments_table )
118- engine_adapter .rename_table (new_intervals_table , intervals_table )
94+ engine_adapter .create_index (intervals_table , "_intervals_name_version_idx" , ("name" , "version" ))
11995
12096
12197def migrate_rows (state_sync , ** kwargs ): # type: ignore
0 commit comments