`DuckDBPyRelation.query()`: reusing a virtual table name silently changes the result of an existing relation
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 45/100
Línea de trabajo
Comienza en el punto de entrada DuckDBPyRelation.query() y ejecuta la reproducción de Python proporcionada con las versiones del paquete indicadas. Rastrea cuándo se resuelve el nombre de la tabla virtual y, a continuación, añade una prueba de regresión para el comportamiento elegido: una relación existente no debe cambiar silenciosamente después de que se reutilice el nombre, o el contrato de resolución tardía debe documentarse en la documentación de la API relacional.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happens?
rel.query(virtual_table_name, sql) returns a lazy relation that re-resolves virtual_table_name through the connection's catalog on every execution. Registering the same name again from a different relation therefore changes what an already-constructed relation returns, with no error, even after that relation has been executed once.
Why it matters
Wrong data rather than an error. For a library this rules out any fixed name, so we generate a unique random name per call, which then accumulates.
What I would expect
One of:
- the derived relation binds the virtual table once, at construction, so it is unaffected by later registrations; or
- re-registering a name that a live relation depends on raises; or
- if this is intended, a note on the relational API docs saying that the name is resolved late and must not be reused.
To Reproduce
import duckdb
con = duckdb.connect()
a = con.sql("select 1 as a")
b = con.sql("select 999 as a")
first = a.query("v", "select a from v")
print(first.fetchall()) # [(1,)]
second = b.query("v", "select a from v") # same name, unrelated relation
print(second.fetchall()) # [(999,)]
print(first.fetchall()) # [(999,)] <- silently changed
OS:
Darwin, arm64
DuckDB Package Version:
1.1.0, 1.2.2 and 1.5.5.
Python Version:
3.12
Full Name:
Francesco Bruzzesi
Affiliation:
narwhals-dev
What is the latest build you tested with? If possible, we recommend testing with the latest nightly build.
I have tested with a stable release
Did you include all relevant data sets for reproducing the issue?
Not applicable - the reproduction does not require a data set
Did you include all code required to reproduce the issue?
- Yes, I have
Did you include all relevant configuration to reproduce the issue?
- Yes, I have
- Lenguaje dominante
- Python
- Estrellas
- 186
- Forks
- 113
- Merge medio
- 20 h 58 min
- PR fusionados (30 d)
- 11
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de duckdb/duckdb-python
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
duckdb/duckdb-python#627 ·
-
needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
duckdb/duckdb-python#576 · 3 comentarios ·
-
needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
duckdb/duckdb-python#534 ·
-
needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
duckdb/duckdb-python#386 ·
-
needs triage
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
duckdb/duckdb-python#622 ·
Todos los issues de duckdb/duckdb-python
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100