fix: sottoquery barcode Articoli incompatibile con MariaDB (derived table correlata)#1837
Open
AllWorkNoPlay-95 wants to merge 1 commit into
Conversation
…able correlata)
La query di listato del modulo Articoli (zz_modules.options) e la ricerca articoli
usano un sottoquery barcode con una derived table correlata nel ramo ELSE del CASE:
ELSE CONCAT((SELECT GROUP_CONCAT(`b1`.`barcode` ...)
FROM (SELECT `barcode` FROM `mg_articoli_barcode` `b2`
WHERE `b2`.`id_articolo` = `mg_articoli_barcode`.`id_articolo`
ORDER BY `b2`.`barcode` ASC) `b1`)) END
La derived table `b2` referenzia il `mg_articoli_barcode` della query esterna.
MariaDB non supporta le lateral/correlated derived table, quindi all'apertura di
Magazzino > Articoli viene sollevato l'errore 1054 "Unknown column
'mg_articoli_barcode.id_articolo' in 'WHERE'". La colonna esiste: e' un problema
di scope SQL. Il README dichiara MariaDB >= 10.5 pienamente supportato.
Il ramo ELSE viene sostituito da un GROUP_CONCAT ordinato, equivalente nel
risultato (i barcode dell'articolo, ordinati) e valido sia su MariaDB sia su MySQL.
- modules/articoli/ajax/search.php: fix inline della ricerca articoli
- update/2_11_1.sql: aggiorna zz_modules.options del modulo Articoli sulle
installazioni esistenti (REPLACE mirato sul frammento)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problema
Aprire Magazzino > Articoli solleva un errore AJAX:
La colonna
mg_articoli_barcode.id_articoloesiste: non è un problema di nome, ma di scope SQL.Causa radice
La query di listato del modulo Articoli (
zz_modules.options) e la ricerca articoli(
modules/articoli/ajax/search.php) costruiscono l'elenco dei barcode con una derived tablecorrelata nel ramo
ELSEdelCASE:La derived table
b2(dentro laFROM) referenzia ilmg_articoli_barcodedella query esterna.MariaDB non supporta le lateral/correlated derived table (nessuna versione), quindi non riesce a
risolvere la colonna e fallisce con l'errore 1054.
Il
CASEproduce comunque "tutti i barcode dell'articolo, ordinati" (la colonna a video tronca poia 2 voci con
SUBSTRING_INDEX), quindi il ramoELSEpuò essere riscritto con unGROUP_CONCATordinato — equivalente nel risultato e valido sia su MariaDB sia su MySQL:
Compatibilità dichiarata
Il
README.mddichiara MariaDB >= 10.5 pienamente supportato (🟢 fino a MariaDB 12.2).Riprodotto su MariaDB 12.3.2: la query attuale fallisce; con la fix il listato si carica
correttamente.
Modifiche
modules/articoli/ajax/search.php— fix inline della ricerca articoli.update/2_11_1.sql— nuova migrazione che correggezz_modules.optionsdel modulo Articolisulle installazioni esistenti, con un
REPLACEmirato sul frammento (idempotente). Le migrazionigià rilasciate (
2_9_1.sql,2_11.sql) non vengono modificate; l'installazione pulita le eseguee poi applica
2_11_1.sql, ottenendo lo stato corretto.Test
zz_modules.optionszz_views) su MariaDB 12.3.2.ELSE, la stessa query gira senza errori e restituiscel'elenco dei barcode ordinato.