SET autocommit and SET foreign_key_checks are accepted but have no effect
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
Línea de trabajo
Read the driver's session-variable handling and wrapper transaction code, then trace how foreign_key_checks maps to PRAGMA foreign_keys and how autocommit interacts with COMMIT and ROLLBACK. Reproduce both SQL examples from the issue. Done means these settings either affect behavior as described or are rejected clearly instead of being stored silently.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Reproduction
CREATE TABLE p (id INT PRIMARY KEY);
CREATE TABLE c (pid INT, FOREIGN KEY (pid) REFERENCES p (id));
SET foreign_key_checks = 0;
SELECT @@foreign_key_checks;
-- 0
INSERT INTO c VALUES (99);
-- SQLSTATE[23000]: Integrity constraint violation: 19 FOREIGN KEY constraint failed
-- (MySQL: the row is inserted)
CREATE TABLE t (id INT PRIMARY KEY);
SET autocommit = 0;
SELECT @@autocommit;
-- 0
INSERT INTO t VALUES (1);
ROLLBACK;
SELECT id FROM t;
-- 1 (MySQL: no rows; with autocommit off, the INSERT opened a transaction)
Reproduced on trunk (3.1.0) with PHP 8.3 and SQLite 3.45.1.
Both statements are accepted and stored as session variables, so SELECT @@... reports the new value, but neither changes behavior. Before they are set, both variables read as NULL (MySQL: 1).
Impact
foreign_key_checks: SQL dumps disable foreign key checks so that tables can be loaded in any order.mysqldumpoutput setsFOREIGN_KEY_CHECKS=0in its header. Here, importing such a dump fails at the first row of a child table that is loaded before its parent.autocommit: Code that turns autocommit off and relies onROLLBACKto discard its changes has them committed instead. This one silently keeps data the application meant to discard.
Implementation notes
foreign_key_checks maps to PRAGMA foreign_keys, with one limit: SQLite ignores that pragma inside a transaction, so a change made inside a transaction can only take effect when it ends. The driver's wrapper transaction has the same limit, and #528 discusses running DDL outside it, which would also be the place to apply this setting.
autocommit = 0 could be emulated by opening a transaction before the next statement and keeping it open until COMMIT or ROLLBACK, as MySQL does.
Until then, would it be preferable to reject these values with an error rather than accept them silently? I'm happy to contribute a PR in whichever direction you prefer.
Use of AI
This report was prepared with Claude Code.
- Lenguaje dominante
- PHP
- Estrellas
- 362
- Forks
- 69
- Merge medio
- 4 d 7 h
- PR fusionados (30 d)
- 9
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Sin 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 WordPress/sqlite-database-integration
-
MySQL-on-SQLite does not translate DATE arithmetic with INTERVAL HOURPosiblemente ocupada @samuelmbabhazi la tomó hace 23 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
WordPress/sqlite-database-integration#454 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 40/100
WordPress/sqlite-database-integration#531 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
WordPress/sqlite-database-integration#528 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 1-2 días Aptitud para principiantes 52/100
WordPress/sqlite-database-integration#527 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
WordPress/sqlite-database-integration#526 ·
Los mantenedores suelen responder en 1 día
Todos los issues de WordPress/sqlite-database-integration
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
scanaislop/aislop#482 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
humanmade/publication-checklist#73 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Werkstattl/OpenBlogware#92 ·