Fix select cell path renaming behavior (#13361)

# Description

Fixes #13359

In an attempt to generate names for flat columns resulting from a nested
accesses #3016 generated new column names on nested selection, out of
convenience, that composed the cell path as a string (including `.`) and
then simply replaced all `.` with `_`. As we permit `.` in column names
as long as you quote this surprisingly alters `select`ed columns.


# User-Facing Changes
New columns generated by selection with nested cell paths will for now
be named with a string containing the keys separated by `.` instead of
`_`. We may want to reconsider the semantics for nested access.

# Tests + Formatting
- Alter test to breaking change on nested `select`
This commit is contained in:
Stefan Holderbach 2024-07-13 16:54:34 +02:00 committed by GitHub
parent b0bf54614f
commit f5bff8c9c8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 4 additions and 4 deletions

View File

@ -240,7 +240,7 @@ fn select(
//FIXME: improve implementation to not clone //FIXME: improve implementation to not clone
match input_val.clone().follow_cell_path(&path.members, false) { match input_val.clone().follow_cell_path(&path.members, false) {
Ok(fetcher) => { Ok(fetcher) => {
record.push(path.to_string().replace('.', "_"), fetcher); record.push(path.to_string(), fetcher);
if !columns_with_value.contains(&path) { if !columns_with_value.contains(&path) {
columns_with_value.push(path); columns_with_value.push(path);
} }
@ -271,7 +271,7 @@ fn select(
// FIXME: remove clone // FIXME: remove clone
match v.clone().follow_cell_path(&cell_path.members, false) { match v.clone().follow_cell_path(&cell_path.members, false) {
Ok(result) => { Ok(result) => {
record.push(cell_path.to_string().replace('.', "_"), result); record.push(cell_path.to_string(), result);
} }
Err(e) => return Err(e), Err(e) => return Err(e),
} }
@ -295,7 +295,7 @@ fn select(
//FIXME: improve implementation to not clone //FIXME: improve implementation to not clone
match x.clone().follow_cell_path(&path.members, false) { match x.clone().follow_cell_path(&path.members, false) {
Ok(value) => { Ok(value) => {
record.push(path.to_string().replace('.', "_"), value); record.push(path.to_string(), value);
} }
Err(e) => return Err(e), Err(e) => return Err(e),
} }

View File

@ -50,7 +50,7 @@ fn complex_nested_columns() {
r#" r#"
{sample} {sample}
| select nu."0xATYKARNU" nu.committers.name nu.releases.version | select nu."0xATYKARNU" nu.committers.name nu.releases.version
| get nu_releases_version | get "nu.releases.version"
| where $it > "0.8" | where $it > "0.8"
| get 0 | get 0
"# "#