AST-based query fuzzer should randomly modify data types in CREATE TABLE queries, mostly by wrapping in Nullable, Array and LowCardinality.
if (!args.storage_def->order_by && args.storage_def->primary_key)
            args.storage_def->set(args.storage_def->order_by, args.storage_def->primary_key->clone());
        if (!args.storage_def->order_by)
            throw Exception(
                "You must provide an ORDER BY or PRIMARY KEY expression in the table definition. "
                "If you don't want this table to be sorted, use ORDER BY/PRIMARY KEY tuple()",
                ErrorCodes::BAD_ARGUMENTS);
        
        
        
        
        
        metadata.sorting_key = KeyDescription::getSortingKeyFromAST(
            args.storage_def->order_by->ptr(), metadata.columns, args.getContext(), merging_param_key_arg);
        
        if (args.storage_def->primary_key)
        {
            metadata.primary_key = KeyDescription::getKeyFromAST(args.storage_def->primary_key->ptr(), metadata.columns, args.getContext());
        }
        else 
        {
            metadata.primary_key = KeyDescription::getKeyFromAST(args.storage_def->order_by->ptr(), metadata.columns, args.getContext());
            
            
            metadata.primary_key.definition_ast = nullptr;
        }
        auto minmax_columns = metadata.getColumnsRequiredForPartitionKey();
        auto partition_key = metadata.partition_key.expression_list_ast->clone();
        FunctionNameNormalizer().visit(partition_key.get());
        auto primary_key_asts = metadata.primary_key.expression_list_ast->children;