lunedì 5 ottobre 2026

Free PlyxSQL© - 1.0.0.108 Bug fix

il generatore SQL diventa più affidabile, consapevole e pronto per la produzione

Con la versione 108, PlyxSQL compie un importante passo avanti nella qualità del proprio generatore SQL. Non si tratta soltanto di una serie di correzioni puntuali: è un consolidamento strutturale che rende la generazione delle query più precisa, più sicura e più consapevole delle differenze reali tra i database supportati.

Un generatore che conosce il database

Generare SQL non significa soltanto comporre testo sintatticamente corretto. Ogni database ha regole proprie: nomi qualificati, quoting, JOIN, funzioni, locking, tipi di dato, RETURNING, MERGE, PIVOT e molte altre caratteristiche.

La versione 108 introduce un approccio più maturo: il generatore non si limita più a produrre una query, ma valuta se quella query è realmente supportata dal database di destinazione, con quale sintassi e con quali eventuali differenze semantiche.

SQL più corretto e strutturato

Sono stati corretti diversi aspetti fondamentali della generazione degli statement SQL:

  • Il terminatore ; viene ora aggiunto una sola volta, anche in presenza di UNION, CTE, INTERSECT, EXCEPT e commenti finali.
  • I JOIN sono generati tramite un JoinTree esplicito, con gestione corretta di JOIN multipli, annidati, CROSS JOIN, LATERAL e APPLY.
  • I cicli nelle relazioni non sono più considerati automaticamente un errore, perché possono essere perfettamente leciti in un modello dati.
  • La validazione è stata resa più chiara, distinguendo la validità della query dalla presenza effettiva di errori.

Identificatori, schemi e quoting

Una delle aree più delicate nella generazione SQL è la gestione dei nomi: tabelle, colonne, alias, schemi, cataloghi e oggetti DDL.

PlyxSQL 108 introduce un quoting centralizzato e un modello strutturato per i nomi qualificati. Il sistema riconosce ora correttamente forme come:

  • schema.table
  • database.schema.table
  • server.database.schema.table
  • identificatori già delimitati
  • Oracle database link

Inoltre, la qualificazione di catalogo e schema viene applicata solo quando è effettivamente supportata dal database di destinazione.

JOIN e capability per dialetto

Non tutti i database supportano gli stessi tipi di JOIN nello stesso modo. La nuova gestione delle capability distingue sintassi supportata, dipendente dalla versione e non supportata.

Sono stati migliorati in particolare INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN, LATERAL e APPLY. È inoltre possibile associare predicati JOIN più articolati, utili per condizioni composte, intervalli di date e JOIN non equi.

Locking più consapevole

Il locking è un altro punto in cui le differenze tra database diventano decisive. La versione 108 introduce un rendering dedicato per i lock, con supporto a:

  • FOR UPDATE
  • FOR SHARE
  • SKIP LOCKED
  • SQL Server UPDLOCK, ROWLOCK e READPAST
  • Firebird WITH LOCK

Il sistema distingue ora tra traduzione esatta, approssimata e non disponibile. Questo evita di presentare come equivalenti meccanismi di locking che, in realtà, hanno semantiche diverse.

CTE, GROUP BY e funzioni avanzate

Sono state migliorate anche le aree più espressive del linguaggio SQL:

  • Corretto il posizionamento di RECURSIVE nelle CTE.
  • Aggiunte capability specifiche per GROUP BY, ROLLUP, CUBE e GROUPING SETS.
  • Migliorata la gestione di STRING_AGG con DISTINCT e ORDER BY.
  • Suddiviso il supporto JSON in funzioni distinte, invece di un’unica generica capability.
  • Introdotto il controllo delle capability runtime, utile ad esempio per REGEXP in SQLite.

Server Profile e versioni del database

Una novità importante è il Server Profile: il generatore può ora valutare le capability non solo in base al dialetto, ma anche in base alla versione effettiva del server.

Questo permette di scegliere la sintassi più appropriata per MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, InterBase e SQLite, tenendo conto di versione, compatibility level e configurazione runtime.

MERGE, UPSERT, RETURNING e OUTPUT

La generazione DML è stata notevolmente rafforzata:

  • MERGE Oracle con sintassi e comportamenti specifici.
  • Distinzione chiara tra MERGE da valori e MERGE da tabella.
  • UPSERT corretto per tabelle con sole colonne chiave.
  • UPSERT version-aware per MySQL e MariaDB.
  • RETURNING e OUTPUT valutati separatamente per INSERT, UPDATE e DELETE.

Sicurezza nelle operazioni DML

La versione 108 introduce un vero DML Safety Engine. Le operazioni UPDATE e DELETE vengono classificate come:

  • Safe
  • Warning
  • Dangerous

Non si tratta di un semplice commento SQL: il rischio viene valutato e segnalato tramite un evento dedicato, aiutando a prevenire operazioni distruttive accidentali.

Metadati, tipi e colonne speciali

Il mapping dei tipi è stato migliorato con un percorso a tre fasi:

TIPO SORGENTE → TIPO CANONICO → TIPO DIALETTO

Sono inoltre stati migliorati il riconoscimento delle colonne identity, computed e read-only, la loro esclusione automatica da INSERT, UPDATE e MERGE quando non devono essere valorizzate, e la generazione di identificatori sicuri per PK, FK, indici, sequence e trigger.

Importazione, serializzazione e UI più stabili

Oltre al motore SQL, la versione 108 porta numerosi miglioramenti di robustezza:

  • Gestione più sicura del ciclo di vita del worker di importazione.
  • Migliore gestione di connessioni, filtri, encoding e diagnostica.
  • Deserializzazione JSON più atomica e resistente a dati incompleti o non validi.
  • Correzioni su drag & drop multiplo, paginazione, resize, doppio click, cambio tab e sincronizzazione dell’albero.
  • Rimozione di chiamate potenzialmente pericolose a ProcessMessages, riducendo rischi di reentrancy e stati UI incoerenti.

Regressione automatizzata

La versione 108 introduce anche una base importante per la qualità futura del prodotto: una suite di regressioni automatizzate con 34 casi per 7 dialetti, per un totale di 238 combinazioni SQL.

I test coprono SELECT, JOIN, CTE, UNION, window function, paginazione, RETURNING, MERGE, JSON, funzioni data e stringa, DDL, foreign key, PIVOT, UNPIVOT, tabelle temporanee, viste e locking.

PlyxSQL 108 non è solo una release di bug fix: è una release di consolidamento. Il generatore SQL diventa più preciso, più consapevole delle differenze tra database, più sicuro nelle operazioni DML e più stabile nell’interfaccia e nei processi di importazione.

Il risultato è un prodotto più adatto a scenari reali, dove la correttezza sintattica non basta: serve sapere che la query generata è realmente compatibile, semanticamente coerente e sicura per il database su cui verrà eseguita.

#SQL #database #ETL #DataEngineering #plyxSQL #FireDAC #PGSOFT

Nessun commento:

Posta un commento