AST-based query fuzzer should randomly modify data types in CREATE TABLE queries, mostly by wrapping in Nullable, Array and LowCardinality.
class ASTOrderByElement;
struct ASTWindowDefinition;
/*
 * This is an AST-based query fuzzer that makes random modifications to query
 * AST, changing numbers, list of columns, functions, etc. It remembers part of
 * queries it fuzzed previously, and can substitute these parts to new fuzzed
 * queries, so you want to feed it a lot of queries to get some interesting mix
 * of them. Normally we feed SQL regression tests to it.
 */
struct QueryFuzzer
{
    pcg64 fuzz_rand{randomSeed()};
    
    
    
    
    
    size_t current_ast_depth = 0;
    
    
    
    
    std::unordered_set<std::string> aliases_set;
    std::vector<std::string> aliases;