When you parse Date column which have values bigger than by different format 

```sql
DROP TABLE IF EXISTS test_date_imports;
create temporary table test_date_imports (f String, t Date);
insert into test_date_imports(t) format TSV 2200-01-01
insert into test_date_imports format CSV 'csv',2200-01-01
insert into test_date_imports format JSONEachRow {"f":"JSONEachRow","t":"2200-01-01"}
insert into test_date_imports values ('values','2200-01-01')

SELECT * FROM test_date_imports FORMAT PrettyCompactMonoBlock;

┌─f───────────┬──────────t─┐
│             │ 2149-06-06 │
│ csv         │ 2020-07-27 │<-- it looks like parsing happened via Date32 or DateTime64 path, and then casted with overflow
│ JSONEachRow │ 2149-06-06 │
│ values      │ 2149-06-06 │
└─────────────┴────────────┘

TRUNCATE TABLE test_date_imports;
insert into test_date_imports(t) format TSV 9999-01-01
insert into test_date_imports format CSV 'csv',9999-01-01
insert into test_date_imports format JSONEachRow {"f":"JSONEachRow","t":"9999-01-01"}
insert into test_date_imports values ('values','9999-01-01')

SELECT * FROM test_date_imports FORMAT PrettyCompactMonoBlock

SELECT * FROM test_date_imports FORMAT PrettyCompactMonoBlock
┌─f───────────┬──────────t─┐
│             │ 2149-06-06 │
│ csv         │ 2104-06-06 │
│ JSONEachRow │ 2149-06-06 │
│ values      │ 2149-06-06 │
└─────────────┴────────────┘

4 rows in set. Elapsed: 0.002 sec. 
```

P.S. It's not the edge case found by QA. It's a real-life case from the end-user report. IRL it was the '[end of time](https://softwareengineering.stackexchange.com/questions/164843/is-there-a-constant-for-end-of-time)' date exported by another database as '9999-12-31' which was always stored in ClickHouse as '2149-06-06' but after importing from CSV as '2104-06-06'
{
    return readDateTextImpl<bool>(date, buf);
}
template <typename ReturnType = void>
inline ReturnType readUUIDTextImpl(UUID & uuid, ReadBuffer & buf)
{
    static constexpr bool throw_exception = std::is_same_v<ReturnType, void>;
    char s[36];
    size_t size = buf.read(s, 32);
    if (size == 32)
    {
        if (s[8] == '-')
        {
            size += buf.read(&s[32], 4);
            if (size != 36)
            {
                s[size] = 0;
                if constexpr (throw_exception)
                {
                    throw ParsingException(std::string("Cannot parse uuid ") + s, ErrorCodes::CANNOT_PARSE_UUID);
                }
                else
                {
                    return ReturnType(false);
                }
            }
            parseUUID(reinterpret_cast<const UInt8 *>(s), std::reverse_iterator<UInt8 *>(reinterpret_cast<UInt8 *>(&uuid) + 16));