MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / makeValidation

Function makeValidation

src/dsql/StmtNodes.cpp:10710–10772  ·  view source on GitHub ↗

Build a validation list for a relation, if appropriate.

Source from the content-addressed store, hash-verified

10708
10709// Build a validation list for a relation, if appropriate.
10710static void makeValidation(thread_db* tdbb, CompilerScratch* csb, StreamType stream,
10711 Array<ValidateInfo>& validations)
10712{
10713 SET_TDBB(tdbb);
10714
10715 DEV_BLKCHK(csb, type_csb);
10716
10717 jrd_rel* relation = csb->csb_rpt[stream].csb_relation;
10718 if (!relation) //// TODO: LocalTableSourceNode
10719 return;
10720
10721 vec<jrd_fld*>* vector = relation->rel_fields;
10722 if (!vector)
10723 return;
10724
10725 StreamMap localMap;
10726 StreamType* map = csb->csb_rpt[stream].csb_map;
10727
10728 if (!map)
10729 {
10730 map = localMap.getBuffer(STREAM_MAP_LENGTH);
10731 fb_assert(stream <= MAX_STREAMS);
10732 map[0] = stream;
10733 }
10734
10735 USHORT fieldId = 0;
10736 vec<jrd_fld*>::iterator ptr1 = vector->begin();
10737
10738 for (const vec<jrd_fld*>::const_iterator end = vector->end(); ptr1 < end; ++ptr1, ++fieldId)
10739 {
10740 BoolExprNode* validation;
10741
10742 if (*ptr1 && (validation = (*ptr1)->fld_validation))
10743 {
10744 AutoSetRestore<USHORT> autoRemapVariable(&csb->csb_remap_variable,
10745 (csb->csb_variables ? csb->csb_variables->count() : 0) + 1);
10746
10747 RemapFieldNodeCopier copier(csb, map, fieldId);
10748
10749 validation = copier.copy(tdbb, validation);
10750
10751 ValidateInfo validate;
10752 validate.boolean = validation;
10753 validate.value = PAR_gen_field(tdbb, stream, fieldId);
10754 validations.add(validate);
10755 }
10756
10757 if (*ptr1 && (validation = (*ptr1)->fld_not_null))
10758 {
10759 AutoSetRestore<USHORT> autoRemapVariable(&csb->csb_remap_variable,
10760 (csb->csb_variables ? csb->csb_variables->count() : 0) + 1);
10761
10762 RemapFieldNodeCopier copier(csb, map, fieldId);
10763
10764 validation = copier.copy(tdbb, validation);
10765
10766 ValidateInfo validate;
10767 validate.boolean = validation;

Callers 2

pass1ModifyMethod · 0.85
pass1StoreMethod · 0.85

Calls 8

SET_TDBBFunction · 0.85
PAR_gen_fieldFunction · 0.85
getBufferMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
countMethod · 0.45
copyMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected