Rewrite UDAF reversed expression name
- Lingua principale
- Rust
- Stelle
- 9.3k
- Fork
- 2.4k
- Merge medio
- 3g 11h
- PR unite (30g)
- 362
Descrizione
I think it would be good to eventually move this to a method in `https://github.com/apache/datafusion/pull/11611` though I agree this is good for now. Maybe we can file a ticket to track
_Originally posted by @alamb in https://github.com/apache/datafusion/pull/11611#discussion_r1688699754_
I think we could extend to rewrite the whole expression name, and it could be more straightforward what the name is rewritten
```rust
let mut name = self.name().to_string();
// If the function is changed, we need to reverse order_by clause as well
// i.e. First(a order by b asc null first) -> Last(a order by b desc null last)
if self.fun().name() == reverse_udf.name() {
} else {
replace_order_by_clause(&mut name);
}
replace_fn_name_clause(&mut name, self.fun.name(), reverse_udf.name());
```
Something like
```rust
let mut name = self.name().to_string();
name = self.fun.reverse_name(name)
```
Add `reverse_name` in `AggregateUDFImpl`
```rust
trait AggregateUDFImpl {
fn reverse_name(&self) -> String {
...
}
}
```
Specificially we need to rewrite name for First/Last. For array_agg, the name should be the same.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia individuando la gestione esistente delle espressioni invertite che chiama replace_order_by_clause e replace_fn_name_clause, quindi leggi AggregateUDFImpl e le implementazioni di First, Last e array_agg. La modifica è completa quando reverse_name centralizza la riscrittura dei nomi delle espressioni, First e Last producono i nomi invertiti corretti e array_agg mantiene invariato il proprio nome.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- rust
- Ambito
- databases
- Tipo di issue
- Refactoring
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 45/100