AST-based query fuzzer should randomly modify data types in CREATE TABLE queries, mostly by wrapping in Nullable, Array and LowCardinality.
fmt::print(stderr, "Dump after fuzz:\n");
                WriteBufferFromOStream cerr_buf(std::cerr, 4096);
                fuzz_base->dumpTree(cerr_buf);
                cerr_buf.next();
                fmt::print(
                    stderr,
                    "Found error: IAST::clone() is broken for some AST node. This is a bug. The original AST ('dump before fuzz') and its cloned copy ('dump of cloned AST') refer to the same nodes, which must never happen. This means that their parent node doesn't implement clone() correctly.");
                _exit(1);
            }
            auto fuzzed_text = ast_to_process->formatForErrorMessage();
            if (fuzz_step > 0 && fuzzed_text == base_before_fuzz)
            {
                fmt::print(stderr, "Got boring AST\n");
                continue;
            }
            parsed_query = ast_to_process;
            query_to_execute = parsed_query->formatForErrorMessage();
            processParsedSingleQuery(full_query, query_to_execute, parsed_query);
        }
        catch (...)
        {
            
            
            
            
            
            client_exception = std::make_unique<Exception>(getCurrentExceptionMessage(print_stack_trace), getCurrentExceptionCode());
            have_error = true;
        }
        const auto * exception = server_exception ? server_exception.get() : client_exception.get();