fix(Record): wildcard for missing partition keys in where()#2
Conversation
gedera
left a comment
There was a problem hiding this comment.
Review: fix(Record): wildcard for missing partition keys in where()
Verdict: LGTM ✅
Overview
Fix correcto para issue #1. build_query_path generaba paths con valores vacíos (key=) cuando where() recibía partition keys parciales. Ahora usa wildcards (key=*), consistente con destroy_partitions en local adapter (línea 51).
Correctness
- Lógica
val.nil? || val.to_s.empty?cubre ambos casos (key ausente →nil, key presente pero vacía). - Wildcard
*funciona tanto paraDir.glob(local) como pararead_parquetde DuckDB con el sufijo/**/*.parquetque agregabuild_path. - Consistente con patrón existente en
Storage::Local#destroy_partitions.
Un detalle menor (no bloqueante)
val = partitions[k.to_sym] || partitions[k.to_s]El || trata valores falsy (false, 0) como ausentes. Si partitions[:month] fuera 0, caería al string key lookup y potencialmente generaría wildcard. Para partition keys reales (strings, integers positivos) no es problema práctico — pero destroy_partitions en local adapter usa partitions[key] directo sin doble lookup, así que hay una asimetría menor en el manejo de keys.
Considerar para futuro:
val = partitions.key?(k.to_sym) ? partitions[k.to_sym] : partitions[k.to_s]Tests
- 2 nuevos specs cubren partial keys y all-missing. Adecuado.
- 23 specs pasan, 0 failures.
- RuboCop clean.
Risk
Bajo. Cambio backward-compatible — paths que antes tenían valores siguen igual, solo cambia el caso de valores ausentes (que antes generaba paths rotos).
When where() is called without specifying all partition_keys, the path now uses 'key=*' wildcards instead of empty values like 'key='. Closes #1
2cbd1e2 to
6523103
Compare
Summary
where()generating invalid paths with empty values (key=) when not all partition_keys are specifiedkey=*) for missing partition keys, matching behavior ofdestroy_partitionsChanges
lib/data_drain/record.rb:134- Use wildcard when value is nil or emptyspec/data_drain/record_spec.rb- 2 new test casesCloses #1