@@ -85,19 +85,16 @@ class FunctionFuzzQuery : public IFunction
8585 auto col_res = ColumnString::create ();
8686
8787 const ColumnString::Chars & data = assert_cast<const ColumnString &>(col_query_const->getDataColumn ()).getChars ();
88+ const char * begin = reinterpret_cast <const char *>(data.data ());
89+ const char * end = begin + data.size ();
90+ ParserQuery parser (end, false , implicit_select);
91+ ASTPtr ast = parseQuery (parser, begin, end, " fuzzQuery" , max_query_size, max_parser_depth, max_parser_backtracks);
8892
8993 for (size_t i = 0 ; i < input_rows_count; ++i)
9094 {
91- const char * begin = reinterpret_cast <const char *>(data.data ());
92- const char * end = begin + data.size ();
93-
94- ParserQuery parser (end, false , implicit_select);
95- ASTPtr ast = parseQuery (parser, begin, end, /* query_description*/ {}, max_query_size, max_parser_depth, max_parser_backtracks);
96-
97- ASTPtr fuzzed_ast;
95+ ASTPtr fuzzed_ast = ast->clone ();
9896 {
9997 auto [fuzzer, lock] = getGlobalASTFuzzer ();
100- fuzzed_ast = ast->clone ();
10198 fuzzer->fuzzMain (fuzzed_ast);
10299 }
103100
@@ -120,24 +117,22 @@ class FunctionFuzzQuery : public IFunction
120117 size_t input_rows_count) const
121118 {
122119 size_t prev_offset = 0 ;
123-
124120 for (size_t i = 0 ; i < input_rows_count; ++i)
125121 {
126122 const char * begin = reinterpret_cast <const char *>(&data[prev_offset]);
127- const char * end = begin + offsets[i] - prev_offset ;
123+ const char * end = reinterpret_cast < const char *>(&data[ offsets[i]]) ;
128124
129125 ParserQuery parser (end, false , implicit_select);
130- ASTPtr ast = parseQuery (parser, begin, end, /* query_description */ {} , max_query_size, max_parser_depth, max_parser_backtracks);
126+ ASTPtr ast = parseQuery (parser, begin, end, " fuzzQuery " , max_query_size, max_parser_depth, max_parser_backtracks);
131127
132128 ASTPtr fuzzed_ast;
133129 {
134130 auto [fuzzer, lock] = getGlobalASTFuzzer ();
135- fuzzed_ast = ast->clone ();
136- fuzzer->fuzzMain (fuzzed_ast);
131+ fuzzer->fuzzMain (ast);
137132 }
138133
139134 WriteBufferFromOwnString buf;
140- fuzzed_ast ->format (buf, IAST::FormatSettings (/* one_line=*/ true ));
135+ ast ->format (buf, IAST::FormatSettings (/* one_line=*/ true ));
141136 col_res.insertData (buf.str ().data (), buf.str ().size ());
142137 prev_offset = offsets[i];
143138 }
0 commit comments