diff --git a/src/dsql/ExprNodes.cpp b/src/dsql/ExprNodes.cpp index b40a0f9ed51..91d7d6359cf 100644 --- a/src/dsql/ExprNodes.cpp +++ b/src/dsql/ExprNodes.cpp @@ -6539,8 +6539,6 @@ ValueExprNode* FieldNode::pass1(thread_db* tdbb, CompilerScratch* csb) { StreamType stream = fieldStream; - markVariant(csb, stream); - CompilerScratch::csb_repeat* tail = &csb->csb_rpt[stream]; jrd_rel* relation = tail->csb_relation; jrd_fld* field; @@ -6551,6 +6549,7 @@ ValueExprNode* FieldNode::pass1(thread_db* tdbb, CompilerScratch* csb) if (relation && (relation->rel_flags & REL_being_scanned)) csb->csb_g_flags |= csb_reload; + markVariant(csb, stream); return ValueExprNode::pass1(tdbb, csb); } @@ -6628,9 +6627,11 @@ ValueExprNode* FieldNode::pass1(thread_db* tdbb, CompilerScratch* csb) if (!(sub = field->fld_computation) && !(sub = field->fld_source)) { - if (!relation->rel_view_rse) + { + markVariant(csb, stream); return ValueExprNode::pass1(tdbb, csb); + } // Msg 364 "cannot access column %s in view %s" ERR_post(Arg::Gds(isc_no_field_access) << Arg::Str(field->fld_name) << @@ -6651,7 +6652,10 @@ ValueExprNode* FieldNode::pass1(thread_db* tdbb, CompilerScratch* csb) // dimitr: added an extra check for views, because we don't // want their old/new contexts to be substituted if (relation->rel_view_rse || !field->fld_computation) + { + markVariant(csb, stream); return ValueExprNode::pass1(tdbb, csb); + } } StreamMap localMap; @@ -6758,11 +6762,7 @@ ValueExprNode* FieldNode::pass1(thread_db* tdbb, CompilerScratch* csb) if (computingField) { - FB_SIZE_T pos; - - if (csb->csb_computing_fields.find(field, pos)) - csb->csb_computing_fields.remove(pos); - else + if (!csb->csb_computing_fields.findAndRemove(field)) fb_assert(false); }