bindFields method
void
bindFields(
- bool binding
)
Implementation
void bindFields(bool binding) {
// { FieldNo is set to -1 for calculated/lookup fields, to 0 for
// unbound field and for bound fields it is set to
// FieldDef.FieldNo } (original comment kept as-is)
_calcFieldsSize = 0;
_blobFieldCount = 0;
for (var i = 0; i < fields.count; i++) {
final field = fields[i];
field._fieldDef = null;
if (!binding) {
field._fieldNo = 0;
} else if (field.fieldKind == TFieldKind.fkCalculated ||
field.fieldKind == TFieldKind.fkLookup) {
field._fieldNo = -1;
field._offset = _calcFieldsSize;
_calcFieldsSize += field.dataSize + 1;
} else {
final fieldIndex = fieldDefs.indexOfName(field.fieldName);
if (fieldIndex == -1) {
databaseErrorFmt(SFieldNotFound, [field.fieldName], this);
} else {
final fieldDef = fieldDefs[fieldIndex];
field._fieldDef = fieldDef;
field._fieldNo = fieldDef.fieldNo;
if (fieldDef.internalCalcField) {
_internalCalcFields = true;
}
if (field.isBlob) {
field._size = fieldDef.size;
field._offset = _blobFieldCount;
_blobFieldCount++;
}
// synchronize CodePage between TFieldDef and TField (original comment)
if (field is TStringField) {
field._codePage = fieldDef.codePage;
} else if (field is TMemoField) {
field._codePage = fieldDef.codePage;
}
}
}
field.bind(binding);
}
}