Yes, if I spraying a file that doesn't have a quote then the CCsvQuickPartitioner::findSplitPoint() called. (It is interesting because if the file after all quoted - the first check in this method - then it calls CCsvPartitioner::findSplitPoint() and my record structure discover code executed. ) 

If the file really doesn't have quote character then CCsvQuickPartitioner::findSplitPoint() start processing the file and to determine split record size it calls getSplitRecordSize() method. This method doesn't explicit defined/implemented in CCsvQuickPartitioner but it does its ancestor CCsvPartitioner therefore we landed my record structure discover code again.

If you would have it as extra pass, that means I should clone the CSV record processing implementation again only for process the first row in the file. Is it worthwhile?

About the utf8 files. Actually the utf8 CSV file processing is not correct. It has same problems as had CSV partitioner earlier, it doesn't handles QUOTE, ESCAPE, and quotes/escaped TERMINATOR and SEPARATOR characters. I think it will be a separated issue and I should clone and adapt the CSV record processor again.

If you would have this as an extra pass too, that means I should clone/adapt utf8 CSV record processing one more time and at end of the day we have 4 implementation (2 for CVS and 2 utf8 CSV) about same code.