@@ -1690,47 +1690,47 @@ public void createMaterializedView(
16901690 materializedViewProperties ,
16911691 viewMetadata .getComment ());
16921692
1693- try {
1694- Map <String , String > properties = new HashMap <>();
1695- properties .put (PRESTO_MATERIALIZED_VIEW_FORMAT_VERSION , CURRENT_MATERIALIZED_VIEW_FORMAT_VERSION + "" );
1696- properties .put (PRESTO_MATERIALIZED_VIEW_ORIGINAL_SQL , viewDefinition .getOriginalSql ());
1697- properties .put (PRESTO_MATERIALIZED_VIEW_STORAGE_SCHEMA , storageTableName .getSchemaName ());
1698- properties .put (PRESTO_MATERIALIZED_VIEW_STORAGE_TABLE_NAME , storageTableName .getTableName ());
1699-
1700- String baseTablesStr = serializeSchemaTableNames (viewDefinition .getBaseTables ());
1701- properties .put (PRESTO_MATERIALIZED_VIEW_BASE_TABLES , baseTablesStr );
1702- properties .put (PRESTO_MATERIALIZED_VIEW_COLUMN_MAPPINGS , serializeColumnMappings (viewDefinition .getColumnMappings ()));
1703- properties .put (PRESTO_MATERIALIZED_VIEW_OWNER , viewDefinition .getOwner ()
1704- .orElseThrow (() -> new PrestoException (INVALID_VIEW , "Materialized view owner is required" )));
1705- properties .put (PRESTO_MATERIALIZED_VIEW_SECURITY_MODE , viewDefinition .getSecurityMode ()
1706- .orElseThrow (() -> new PrestoException (INVALID_VIEW , "Materialized view security mode is required (set legacy_materialized_views=false)" ))
1707- .name ());
1708-
1709- getStaleReadBehavior (materializedViewProperties )
1710- .ifPresent (behavior -> properties .put (PRESTO_MATERIALIZED_VIEW_STALE_READ_BEHAVIOR , behavior .name ()));
1711- getStalenessWindow (materializedViewProperties )
1712- .ifPresent (window -> properties .put (PRESTO_MATERIALIZED_VIEW_STALENESS_WINDOW , window .toString ()));
1713- MaterializedViewRefreshType refreshType = getRefreshType (materializedViewProperties );
1714- properties .put (PRESTO_MATERIALIZED_VIEW_REFRESH_TYPE , refreshType .name ());
1715-
1716- for (SchemaTableName baseTable : viewDefinition .getBaseTables ()) {
1717- properties .put (getBaseTableViewPropertyName (baseTable ), "0" );
1718- }
1719-
1720- createIcebergView (session , viewName , viewMetadata .getColumns (), viewDefinition .getOriginalSql (), properties );
1721- // Create materialized view should run after the creation of the underlying storage table
1722- /*transactionContext.registerCallback(() -> createIcebergView(session, viewName, viewMetadata.getColumns(), viewDefinition.getOriginalSql(), properties));
1723- createTable(session, storageTableMetadata, false);*/
1724- }
1725- catch (Exception e ) {
1693+ // Create materialized view should run after the creation of the underlying storage table
1694+ transactionContext .registerCallback (() -> {
17261695 try {
1727- dropStorageTable (session , storageTableName );
1696+ Map <String , String > properties = new HashMap <>();
1697+ properties .put (PRESTO_MATERIALIZED_VIEW_FORMAT_VERSION , CURRENT_MATERIALIZED_VIEW_FORMAT_VERSION + "" );
1698+ properties .put (PRESTO_MATERIALIZED_VIEW_ORIGINAL_SQL , viewDefinition .getOriginalSql ());
1699+ properties .put (PRESTO_MATERIALIZED_VIEW_STORAGE_SCHEMA , storageTableName .getSchemaName ());
1700+ properties .put (PRESTO_MATERIALIZED_VIEW_STORAGE_TABLE_NAME , storageTableName .getTableName ());
1701+
1702+ String baseTablesStr = serializeSchemaTableNames (viewDefinition .getBaseTables ());
1703+ properties .put (PRESTO_MATERIALIZED_VIEW_BASE_TABLES , baseTablesStr );
1704+ properties .put (PRESTO_MATERIALIZED_VIEW_COLUMN_MAPPINGS , serializeColumnMappings (viewDefinition .getColumnMappings ()));
1705+ properties .put (PRESTO_MATERIALIZED_VIEW_OWNER , viewDefinition .getOwner ()
1706+ .orElseThrow (() -> new PrestoException (INVALID_VIEW , "Materialized view owner is required" )));
1707+ properties .put (PRESTO_MATERIALIZED_VIEW_SECURITY_MODE , viewDefinition .getSecurityMode ()
1708+ .orElseThrow (() -> new PrestoException (INVALID_VIEW , "Materialized view security mode is required (set legacy_materialized_views=false)" ))
1709+ .name ());
1710+
1711+ getStaleReadBehavior (materializedViewProperties )
1712+ .ifPresent (behavior -> properties .put (PRESTO_MATERIALIZED_VIEW_STALE_READ_BEHAVIOR , behavior .name ()));
1713+ getStalenessWindow (materializedViewProperties )
1714+ .ifPresent (window -> properties .put (PRESTO_MATERIALIZED_VIEW_STALENESS_WINDOW , window .toString ()));
1715+ MaterializedViewRefreshType refreshType = getRefreshType (materializedViewProperties );
1716+ properties .put (PRESTO_MATERIALIZED_VIEW_REFRESH_TYPE , refreshType .name ());
1717+
1718+ for (SchemaTableName baseTable : viewDefinition .getBaseTables ()) {
1719+ properties .put (getBaseTableViewPropertyName (baseTable ), "0" );
1720+ }
1721+ createIcebergView (session , viewName , viewMetadata .getColumns (), viewDefinition .getOriginalSql (), properties );
17281722 }
1729- catch (Exception cleanupException ) {
1730- e .addSuppressed (cleanupException );
1723+ catch (Exception e ) {
1724+ try {
1725+ dropStorageTable (session , storageTableName );
1726+ }
1727+ catch (Exception cleanupException ) {
1728+ e .addSuppressed (cleanupException );
1729+ }
1730+ throw e ;
17311731 }
1732- throw e ;
1733- }
1732+ }) ;
1733+ createTable ( session , storageTableMetadata , false );
17341734 }
17351735 catch (PrestoException e ) {
17361736 if (e .getErrorCode () == NOT_SUPPORTED .toErrorCode ()) {
@@ -1848,6 +1848,7 @@ public Optional<MaterializedViewDefinition> getMaterializedView(ConnectorSession
18481848 @ Override
18491849 public void dropMaterializedView (ConnectorSession session , SchemaTableName viewName )
18501850 {
1851+ shouldRunInAutoCommitTransaction ("DROP MATERIALIZED VIEW" );
18511852 Optional <MaterializedViewDefinition > definition = getMaterializedView (session , viewName );
18521853
18531854 if (definition .isPresent ()) {
@@ -1936,6 +1937,7 @@ public ConnectorInsertTableHandle beginRefreshMaterializedView(
19361937 ConnectorSession session ,
19371938 ConnectorTableHandle tableHandle )
19381939 {
1940+ shouldRunInAutoCommitTransaction ("REFRESH MATERIALIZED VIEW" );
19391941 IcebergTableHandle icebergTableHandle = (IcebergTableHandle ) tableHandle ;
19401942
19411943 if (icebergTableHandle .getMaterializedViewName ().isEmpty ()) {
0 commit comments