@@ -595,6 +595,48 @@ def _create_table(
595595 target_columns_to_types or self .columns (table_name ),
596596 )
597597
598+ def create_view (
599+ self ,
600+ view_name : TableName ,
601+ query_or_df : QueryOrDF ,
602+ target_columns_to_types : t .Optional [t .Dict [str , exp .DataType ]] = None ,
603+ replace : bool = True ,
604+ materialized : bool = False ,
605+ materialized_properties : t .Optional [t .Dict [str , t .Any ]] = None ,
606+ table_description : t .Optional [str ] = None ,
607+ column_descriptions : t .Optional [t .Dict [str , str ]] = None ,
608+ view_properties : t .Optional [t .Dict [str , exp .Expr ]] = None ,
609+ source_columns : t .Optional [t .List [str ]] = None ,
610+ ** create_kwargs : t .Any ,
611+ ) -> None :
612+ if self ._default_catalog and isinstance (query_or_df , exp .Query ):
613+ from sqlmesh .utils .errors import SQLMeshError
614+
615+ query_or_df = query_or_df .copy ()
616+ for table in query_or_df .find_all (exp .Table ):
617+ if not table .catalog :
618+ continue
619+ if table .catalog != self ._default_catalog :
620+ raise SQLMeshError (
621+ f"{ self .dialect } requires that all catalog operations be against a single "
622+ f"catalog: { self ._default_catalog } . Provided catalog: { table .catalog } "
623+ )
624+ table .set ("catalog" , None )
625+
626+ super ().create_view (
627+ view_name ,
628+ query_or_df ,
629+ target_columns_to_types = target_columns_to_types ,
630+ replace = replace ,
631+ materialized = materialized ,
632+ materialized_properties = materialized_properties ,
633+ table_description = table_description ,
634+ column_descriptions = column_descriptions ,
635+ view_properties = view_properties ,
636+ source_columns = source_columns ,
637+ ** create_kwargs ,
638+ )
639+
598640 def _strip_virtual_catalog (self , name : "TableName" ) -> exp .Table :
599641 """Strip the virtual catalog prefix from a table name if present.
600642
0 commit comments