inferJoinBlocks

private fnCsvCandidate[] inferJoinBlocks(const CsvTextBlock[] blocks, size_t width, const CsvReadPolicy read, bool tryParseTemporal, bool hasHeader, ddn.data.csv.CsvDialect dialect)

Full-scan inference over the text blocks: each block joins its own per-column candidates (block 0 past the header), and the per-block results join in block order. The join is associative and commutative, so the block count and boundaries - which the split derives from the bytes - cannot change the schema. Any worker error (a ragged row) propagates; the caller's serial re-walk names the canonical first one.

Parameters

blocksthe text blocks (all rows; block 0 may start with the header row)
widththe schema width
readthe reading policy
tryParseTemporalwhether temporal candidates are tested
hasHeaderwhether block 0's first row is the header
dialectthe dialect (header forced off)

Returns

the per-column joined candidates.