@@ -109,6 +109,21 @@ processDatabaseContextExprInSchema schema@(Schema morphs) dbExpr = do
109109 _ <- validateDatabaseContextExprInSchema schema dbExpr
110110 --perform the morph
111111 foldM (\ex morph -> databaseContextExprMorph morph relExprMogrifier ex) dbExpr morphs
112+
113+-- | If the database context expression adds or removes a relvar, we need to update the isomorphs to create a passthrough Isomorph.
114+processDatabaseContextExprSchemaUpdate :: Schema -> DatabaseContextExpr -> Schema
115+processDatabaseContextExprSchemaUpdate schema@(Schema morphs) expr = case expr of
116+ Define rv _ | S.notMember rv validSchemaName -> passthru rv
117+ Assign rv _ | S.notMember rv validSchemaName -> passthru rv
118+ Undefine rv | S.member rv validSchemaName -> Schema (filter (\morph -> elem rv (isomorphInRelVarNames morph)) morphs)
119+ MultipleExpr exprs -> foldr (\expr' schema' -> processDatabaseContextExprSchemaUpdate schema' expr') schema exprs
120+ _ -> schema
121+ where
122+ validSchemaName = isomorphsInRelVarNames morphs
123+ passthru rvname = Schema (morphs ++ [IsoRename rvname rvname])
124+
125+processDatabaseContextExprSchemasUpdate :: Subschemas -> DatabaseContextExpr -> Subschemas
126+processDatabaseContextExprSchemasUpdate subschemas expr = M.map (\schema -> processDatabaseContextExprSchemaUpdate schema expr) subschemas
112127
113128-- re-evaluate- it's not possible to display an incdep that may be for a foreign key to a relvar which is not available in the subschema!
114129-- weird compromise: allow inclusion dependencies failures not in the subschema to be propagated- in the worst case, only the inclusion dependency's name is leaked.