| 572 | } |
| 573 | |
| 574 | void FuzzConfig::loadFunctions() |
| 575 | { |
| 576 | static const String query = R"sql(WITH |
| 577 | args_by_function AS |
| 578 | ( |
| 579 | SELECT |
| 580 | name, |
| 581 | min(args_min) AS min_arguments, |
| 582 | if (max(args_variadic) = 1, NULL, max(args_max)) AS max_arguments, |
| 583 | max(lambda_syntax) AS lambda_syntax |
| 584 | FROM |
| 585 | ( |
| 586 | SELECT |
| 587 | name, |
| 588 | syntax_line, |
| 589 | replaceRegexpOne(syntax_line, '^[^\\(]*\\((.*)\\)[^)]*$', '\\1') AS args_raw, |
| 590 | match(args_raw, '(\\.\\.\\.|…)') AS args_variadic, |
| 591 | multiIf(match(trim(args_raw), '^(func|λ)'), 2, 0) AS lambda_syntax, |
| 592 | replaceRegexpAll(args_raw, '\\[[^\\]]*\\]', '') AS args_required_raw, |
| 593 | replaceRegexpAll(args_raw, '[\\[\\]]', '') AS args_all_raw, |
| 594 | if ( |
| 595 | trim(args_required_raw) = '', |
| 596 | 0, |
| 597 | length(arrayFilter( |
| 598 | x -> trim(x) != '' AND NOT match(trim(x), '^(\\.\\.\\.|…)$') AND position(x, '->') = 0, |
| 599 | splitByChar(',', args_required_raw))) |
| 600 | ) AS args_min, |
| 601 | if ( |
| 602 | args_variadic, NULL, |
| 603 | if ( |
| 604 | trim(args_all_raw) = '', |
| 605 | 0, |
| 606 | length(arrayFilter( |
| 607 | x -> trim(x) != '' AND NOT match(trim(x), '^(\\.\\.\\.|…)$') AND position(x, '->') = 0, |
| 608 | splitByChar(',', args_all_raw))) |
| 609 | ) |
| 610 | ) AS args_max |
| 611 | FROM system.functions |
| 612 | ARRAY JOIN splitByRegexp('\\n+', syntax) AS syntax_line |
| 613 | WHERE syntax != '' AND match(syntax_line, '\\(.*\\)') |
| 614 | ) |
| 615 | GROUP BY name |
| 616 | ), |
| 617 | params_by_function AS |
| 618 | ( |
| 619 | SELECT |
| 620 | name, |
| 621 | min(params_min) AS min_parameters, |
| 622 | if (max(params_variadic) = 1, NULL, max(params_max)) AS max_parameters |
| 623 | FROM |
| 624 | ( |
| 625 | SELECT |
| 626 | name, |
| 627 | parameter_line, |
| 628 | match(parameter_line, '(\\.\\.\\.|…)') AS params_variadic, |
| 629 | replaceRegexpAll(parameter_line, '\\[[^\\]]*\\]', '') AS params_required_raw, |
| 630 | replaceRegexpAll(parameter_line, '[\\[\\]]', '') AS params_all_raw, |
| 631 | if ( |