Skip to content

fix: sottoquery barcode Articoli incompatibile con MariaDB (derived table correlata)#1837

Open
AllWorkNoPlay-95 wants to merge 1 commit into
devcode-it:masterfrom
AllWorkNoPlay-95:fix/articoli-barcode-mariadb-correlated-derived-table
Open

fix: sottoquery barcode Articoli incompatibile con MariaDB (derived table correlata)#1837
AllWorkNoPlay-95 wants to merge 1 commit into
devcode-it:masterfrom
AllWorkNoPlay-95:fix/articoli-barcode-mariadb-correlated-derived-table

Conversation

@AllWorkNoPlay-95

Copy link
Copy Markdown
Contributor

Problema

Aprire Magazzino > Articoli solleva un errore AJAX:

SQLSTATE[42S22]: Column not found: 1054 Unknown column
'mg_articoli_barcode.id_articolo' in 'WHERE'

La colonna mg_articoli_barcode.id_articolo esiste: 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 table
correlata
nel ramo ELSE del CASE:

ELSE CONCAT((SELECT GROUP_CONCAT(`b1`.`barcode` SEPARATOR '<br />')
            FROM (SELECT `barcode` FROM `mg_articoli_barcode` `b2`
                  WHERE `b2`.`id_articolo` = `mg_articoli_barcode`.`id_articolo`  -- riferimento esterno
                  ORDER BY `b2`.`barcode` ASC) `b1`)) END

La derived table b2 (dentro la FROM) referenzia il mg_articoli_barcode della 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 CASE produce comunque "tutti i barcode dell'articolo, ordinati" (la colonna a video tronca poi
a 2 voci con SUBSTRING_INDEX), quindi il ramo ELSE può essere riscritto con un GROUP_CONCAT
ordinato — equivalente nel risultato e valido sia su MariaDB sia su MySQL:

ELSE GROUP_CONCAT(`mg_articoli_barcode`.`barcode`
                  ORDER BY `mg_articoli_barcode`.`barcode` ASC SEPARATOR '<br />') END

Compatibilità dichiarata

Il README.md dichiara 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 corregge zz_modules.options del modulo Articoli
    sulle installazioni esistenti, con un REPLACE mirato sul frammento (idempotente). Le migrazioni
    già rilasciate (2_9_1.sql, 2_11.sql) non vengono modificate; l'installazione pulita le esegue
    e poi applica 2_11_1.sql, ottenendo lo stato corretto.

Test

  • Riprodotto l'errore 1054 con la query di listato ricostruita dai dati reali (zz_modules.options
    • colonne zz_views) su MariaDB 12.3.2.
  • Verificato che, sostituito il ramo ELSE, la stessa query gira senza errori e restituisce
    l'elenco dei barcode ordinato.

…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)
@AllWorkNoPlay-95 AllWorkNoPlay-95 marked this pull request as ready for review June 9, 2026 08:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant