@@ -24,7 +24,7 @@ import Control.Monad.Trans.Except
2424
2525import GHC
2626import GHC.Paths
27−import Debug.Trace
27+--import Debug.Trace
2828
2929-- we need to pass around a higher level RelationTuple and Attributes in order to solve #52
3030data RelationalExprStateElems = RelationalExprStateTupleElems DatabaseContext RelationTuple | -- used when fully evaluating a relexpr
@@ -525,9 +525,8 @@ predicateRestrictionFilter attrs (AttributeEqualityPredicate attrName atomExpr)
525525 Right atomIn ->
526526 let atomEvald = evalState (evalAtomExpr tupleIn atomExpr) rstate in
527527 case atomEvald of
528− Left _ -> False
529528 Right atomCmp -> atomCmp == atomIn
530−
529+ Left _ -> False
531530-- in the future, it would be useful to do typechecking on the attribute and atom expr filters in advance
532531predicateRestrictionFilter attrs (AtomExprPredicate atomExpr) = do
533532 --merge attrs into the state attributes
@@ -565,7 +564,15 @@ extendTupleExpressionProcessor relIn (AttributeExtendTupleExpr newAttrName atomE
565564 )
566565
567566evalAtomExpr :: RelationTuple -> AtomExpr -> RelationalExprState (Either RelationalError Atom)
568−evalAtomExpr tupIn (AttributeAtomExpr attrName) = pure (atomForAttributeName attrName tupIn)
567+evalAtomExpr tupIn (AttributeAtomExpr attrName) = case atomForAttributeName attrName tupIn of
568+ Right atom -> pure (Right atom)
569+ err@(Left (NoSuchAttributeNamesError _)) -> do
570+ rstate <- get
571+ case rstate of
572+ RelationalExprStateElems _ -> pure err
573+ RelationalExprStateAttrsElems _ _ -> pure err
574+ RelationalExprStateTupleElems _ ctxtup -> pure (atomForAttributeName attrName ctxtup)
575+ Left err -> pure (Left err)
569576evalAtomExpr _ (NakedAtomExpr atom) = pure (Right atom)
570577evalAtomExpr tupIn (FunctionAtomExpr funcName arguments ()) = do
571578 argTypes <- mapM (typeFromAtomExpr (tupleAttributes tupIn)) arguments
@@ -589,7 +596,6 @@ evalAtomExpr tupIn (RelationAtomExpr relExpr) = do
589596 rstate <- get
590597 runExceptT $ do
591598 let newState = mergeTuplesIntoRelationalExprState tupIn rstate
592− traceShowM newState
593599 relAtom <- either throwE pure (evalState (evalRelationalExpr relExpr) newState)
594600 pure (RelationAtom relAtom)
595601evalAtomExpr tupIn cons@(ConstructedAtomExpr dConsName dConsArgs ()) = runExceptT $ do