Doru d1a8992590
Initial --params implementation (#12249)
# Description
This PR adds a `--params` param to `query db`. This closes #11643.

You can't combine both named and positional parameters, I think this
might be a limitation with rusqlite itself. I tried using named
parameters with indices like `{ ':named': 123, '1': "positional" }` but
that always failed with a rusqlite error. On the flip side, the other
way around works: for something like `VALUES (:named, ?)`, you can treat
both as positional: `-p [hello 123]`.

This PR introduces some very gnarly code repetition in
`prepared_statement_to_nu_list`. I tried, I swear; the compiler wasn't
having any of it, it kept telling me to box my closures and then it said
that the reference lifetimes were incompatible in the match arms. I gave
up and put the mapping code in the match itself, but I'm still not
happy.

Another thing I'm unhappy about: I don't like how you have to put the
`:colon` in named parameters. I think nushell should insert it if it's
[missing](https://www.sqlite.org/lang_expr.html#parameters). But this is
the way [rusqlite
works](https://docs.rs/rusqlite/latest/rusqlite/trait.Params.html#example-named),
so for now, I'll let it be consistent. Just know that it's not really a
blocker, and it isn't a compatibility change to later make `{ colon: 123
}` work, without the quotes and `:`. This would require allocating and
turning our pretty little `&str` into a `String`, though

# User-Facing Changes
Less incentive to leave yourself open to SQL injection with statements
like `query db $"INSERT INTO x VALUES \($unsafe_user_input)"`.
Additionally, the `$""` syntax being annoying with parentheses plays in
our favor, making users even more likely to use ? with `--params`.

# Tests + Formatting
Hehe
2024-03-24 15:40:21 -05:00
..
2022-11-22 16:58:11 -08:00
2023-11-16 15:14:45 -06:00
2023-10-24 12:48:05 -05:00
2024-01-25 14:16:49 +08:00
2024-03-14 15:51:55 -05:00
2023-11-03 10:09:33 -05:00
2023-10-19 09:30:34 -05:00
2023-10-10 03:31:15 +13:00
2024-03-14 15:51:55 -05:00
2024-03-08 22:49:41 +01:00
2023-11-17 19:30:53 -06:00
2024-03-14 06:30:50 -05:00
2024-03-09 18:58:02 +02:00
2023-09-16 21:49:10 +02:00
2023-03-15 18:54:55 +13:00
2023-04-28 13:25:44 +02:00
2023-04-28 13:25:44 +02:00
2024-02-17 10:51:20 +02:00
2023-04-28 13:25:44 +02:00
2024-03-11 19:46:04 +01:00
2023-04-28 13:25:44 +02:00
2024-03-14 06:30:50 -05:00
2024-03-11 19:46:04 +01:00