ThinkR-open / ThinkR-open/datadiff
[robustesse] arrow_dataset_to_duckdb : chemins non échappés dans le SQL, schéma non unifié (union_by_name), aucun test dédié
Nobody has claimed this yet.
- Dominant language
- R
- Stars
- 6
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
Contexte
arrow_dataset_to_duckdb() (R/utils.R:30-44) matérialise un dataset Arrow via CREATE TEMP TABLE ... AS SELECT * FROM read_parquet([...]). Trois fragilités :
- Échappement : les chemins de fichiers sont interpolés entre quotes simples sans échappement — un fichier ou dossier contenant
'(ex.l'export.parquet, courant en français) casse la requête avec une erreur SQL brute. Même remarque pourduckdb_memory_limitettempdir()interpolés dans lesSETde compare_datasets_from_yaml.R. - Schéma :
read_parquet([files])sur la liste brute perd les garanties du schéma Arrow unifié — pas deunion_by_name=1(binding faux ou échec si schémas hétérogènes entre fichiers) et colonnes de partition hive dépendantes de l'auto-détection DuckDB, alors que le fallbackarrow::to_duckdb()les conserve toujours. Le même dataset peut donc donner des colonnes différentes selon la branche prise. - Tests : aucun test dédié à cette fonction (la branche
read_parquetvs fallback n'est couverte qu'indirectement, et tout test-parquet.R skippe sans arrow/duckdb).
Reprex
library(datadiff); library(arrow)
d <- file.path(tempdir(), "l'export") # apostrophe dans le chemin
dir.create(d)
write_parquet(data.frame(id = 1:3, x = 1:3), file.path(d, "part-0.parquet"))
ds <- open_dataset(d)
compare_datasets_from_yaml(ds, ds, key = "id")
#> Error: ... syntax error (requête SQL cassée par l'apostrophe)
Critères de succès
- Chemins échappés (
'doublé ouDBI::dbQuoteString) ; le reprex passe. -
union_by_name=1(et option hive explicite) dans leread_parquet, ou test prouvant l'équivalence de schéma avec le fallback sur fichiers hétérogènes. - Validation basique de
duckdb_memory_limit(format attendu) avant interpolation dansSET. - Tests unitaires dédiés : chemin avec apostrophe, dataset multi-fichiers à schémas décalés, fallback
to_duckdb().
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with arrow_dataset_to_duckdb() in R/utils.R:30-44, then inspect the SET interpolation in compare_datasets_from_yaml.R and the existing test-parquet.R coverage. Reproduce the apostrophe-path failure first, then compare heterogeneous-file schemas and the to_duckdb() fallback. Done means escaped inputs, validated memory limits, consistent schemas, and dedicated tests for each case.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- r
- Domain
- databases, testing
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100