@@ -216,11 +216,13 @@ evalRelationalExpr (Equals relExprA relExprB) = do
216216
217217evalRelationalExpr (With views mainExpr) = do
218218 rstate <- ask
219− --let ctx = stateElemsContext rstate
220219
221− let addScopedView ctx (vname,vexpr) = case runState (evalDatabaseContextExpr (Assign vname vexpr)) (freshDatabaseState ctx) of
222− (Left err,_) -> (Left err)
223− (Right (), elems@(ctx',_,_)) -> (Right ctx')
220+ let addScopedView ctx (vname,vexpr) = if vname `M.member` relationVariables ctx then
221+ Left (RelVarAlreadyDefinedError vname)
222+ else
223+ case runState (evalDatabaseContextExpr (Assign vname vexpr)) (freshDatabaseState ctx) of
224+ (Left err,_) -> Left err
225+ (Right (), (ctx',_,_)) -> Right ctx'
224226
225227 case foldM addScopedView (stateElemsContext rstate) views of
226228 Left err -> return $ Left err