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é

Open
#30 0 comments 0 reactions 0 assignees View on GitHub

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 :

  1. É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 pour duckdb_memory_limit et tempdir() interpolés dans les SET de compare_datasets_from_yaml.R.
  2. Schéma : read_parquet([files]) sur la liste brute perd les garanties du schéma Arrow unifié — pas de union_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 fallback arrow::to_duckdb() les conserve toujours. Le même dataset peut donc donner des colonnes différentes selon la branche prise.
  3. Tests : aucun test dédié à cette fonction (la branche read_parquet vs 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é ou DBI::dbQuoteString) ; le reprex passe.
  • union_by_name=1 (et option hive explicite) dans le read_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 dans SET.
  • 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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.