Match MySQL mixed-type result and comparison semantics for IF(), CASE, and IFNULL()
I maintainer di solito rispondono entro 1 giorno
@JanJakes ci sta già lavorando.
Dal 6/10/2026.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Summary
Implement MySQL-compatible mixed-type result conversion and comparison semantics for IF(), CASE, and IFNULL().
This is a pre-existing compatibility gap, separate from the IF() condition-evaluation bug in #517. Keep #518 focused on that bug. Build this follow-up on the comparison work in #508.
Reproduction and rationale
SELECT IF(1, 2, '3') = '2';
MySQL returns 1. The raw SQLite translation returns 0:
SELECT CASE WHEN 1 THEN 2 ELSE '3' END = '2';
SQLite preserves the selected branch's integer storage class. MySQL applies result-type rules across the branches. Related mixed-type conversion gaps affect CASE and IFNULL().
An unconditional text cast can fix this example but break numeric comparisons. The solution must account for both result-type rules and the surrounding comparison semantics.
Required changes
- Determine MySQL result-type and comparison rules for mixed numeric, string, and NULL values in
IF(),CASE, andIFNULL(). - Extend the translator and comparison handling from #508 to reproduce those rules consistently.
- Preserve lazy evaluation of unselected branches and fallback expressions.
- Add regression tests against MySQL reference results for string comparisons, numeric comparisons, NULLs, nested expressions, and column-derived values.
- Avoid an unconditional text cast as the general solution.
Affected areas
packages/mysql-on-sqlite/src/sqlite/class-wp-mysql-on-sqlite.php:translate_runtime_function_call(), expression translation, and comparison handling.packages/mysql-on-sqlite/tests/WP_MySQL_On_SQLite_Tests.php: regression coverage forIF(),CASE, andIFNULL().
Acceptance criteria
SELECT IF(1, 2, '3') = '2'returns1, matching MySQL.- Mixed-type string and numeric comparison cases for all three constructs match MySQL reference results.
- NULL handling and lazy evaluation remain correct.
- Existing IF() condition-evaluation and comparison tests continue to pass.
Context
Requested by @JanJakes.
- Originating PR: https://github.com/WordPress/sqlite-database-integration/pull/518
- Review discussion: https://github.com/WordPress/sqlite-database-integration/pull/518#discussion_r4194619968
- Related comparison work: https://github.com/WordPress/sqlite-database-integration/pull/508
- Lingua principale
- PHP
- Stelle
- 362
- Fork
- 67
- Merge medio
- 1g 19h
- PR unite (30g)
- 5
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di WordPress/sqlite-database-integration
-
MySQL-on-SQLite does not translate DATE arithmetic with INTERVAL HOURForse già presa @samuelmbabhazi l’ha presa 18 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
WordPress/sqlite-database-integration#454 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
WordPress/sqlite-database-integration#516 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
WordPress/sqlite-database-integration#515 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
WordPress/sqlite-database-integration#513 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 52/100
WordPress/sqlite-database-integration#504 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di WordPress/sqlite-database-integration
Issue simili
-
maintenance
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
hawk-digital-environments/HAWKI#443 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
crazy-goat/rabbit-stream#799 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Code Quality
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Automattic/safe-publish#708 ·
I maintainer di solito rispondono entro 1 giorno