Resolves function arguments, handling named and positional notation. This function validates and reorders arguments to match the function's parameter names when named arguments are used. # Rules - All positional arguments must come before named arguments - Named arguments can be in any order after positional arguments - Parameter names follow SQL identifier rules: unquoted names are case-insensi
(
param_names: &[String],
args: Vec<Expr>,
arg_names: Vec<Option<ArgumentName>>,
)
| 61 | /// Returns: [Expr(10), Expr(20), Expr(30)] |
| 62 | /// ``` |
| 63 | pub fn resolve_function_arguments( |
| 64 | param_names: &[String], |
| 65 | args: Vec<Expr>, |
| 66 | arg_names: Vec<Option<ArgumentName>>, |
| 67 | ) -> Result<Vec<Expr>> { |
| 68 | if args.len() != arg_names.len() { |
| 69 | return plan_err!( |
| 70 | "Internal error: args length ({}) != arg_names length ({})", |
| 71 | args.len(), |
| 72 | arg_names.len() |
| 73 | ); |
| 74 | } |
| 75 | |
| 76 | // Check if all arguments are positional (fast path) |
| 77 | if arg_names.iter().all(|name| name.is_none()) { |
| 78 | return Ok(args); |
| 79 | } |
| 80 | |
| 81 | validate_argument_order(&arg_names)?; |
| 82 | |
| 83 | reorder_named_arguments(param_names, args, arg_names) |
| 84 | } |
| 85 | |
| 86 | /// Validates that positional arguments come before named arguments |
| 87 | fn validate_argument_order(arg_names: &[Option<ArgumentName>]) -> Result<()> { |
searching dependent graphs…