Editing di una vista già creata | Interfaccie grafiche, Utilities, software di gestione

Topic: Pubblico - Composto da 6 Posts di 2 Utenti.

01 Aprile, 2011 09:53 #1
ema
Utente

ema
Registrato: Aug, 2010
Posts: 7
Offline

Quando creo una vista, tipicamente il codice viene suddiviso su più righe per maggior leggibilità.
Mysql salva la vista in una riga unica, tra l'altro aggiungendo parentesi a dismisura in caso di join, e in caso di dover rimetter mano ad una vista leggermente più complessa del normale bisogna fare i salti mortali.
C'è modo di far salvare il codice di una vista, esattamente come viene scritto dal programmatore?

Esempio (spero sia comprensibile):

La mia vista:

CREATE VIEW `sla`.`v_kqi_indisp_disserv` AS
select kd.iid_kqi,
concat('G=',d.data) as periodo,
d.data,
d.durata_netta as casi_bad,
d.iid_servizio
from disservizi d
inner join serv_dett_kqi sdk on (d.iid_servizio = sdk.iid_servizio and d.iid_dettaglio = sdk.iid_dettaglio and d.flg_bloccante = sdk.flg_bloccante and d.flg_dovuto_terzi = sdk.flg_dovuto_terzi)
inner join kqi_descr kd on (sdk.iid_kqi = kd.iid_kqi and d.data between kd.inizio and ifnull(kd.fine, d.data))
inner join servizi s on (d.iid_servizio = s.iid_servizio)
where f_day_in (d.data, s.giorni_lavorativi)

La riproposizione della vista da parte di Mysql dopo la creazione:

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_kqi_indisp_disserv` AS
select `kd`.`iid_kqi` AS `iid_kqi`,concat('G=',`d`.`data`) AS `periodo`,`d`.`data` AS `data`,`d`.`durata_netta` AS `casi_bad`,`d`.`iid_servizio` AS `iid_servizio` from (((`disservizi` `d` join `serv_dett_kqi` `sdk` on(((`d`.`iid_servizio` = `sdk`.`iid_servizio`) and (`d`.`iid_dettaglio` = `sdk`.`iid_dettaglio`) and (`d`.`flg_bloccante` = `sdk`.`flg_bloccante`) and (`d`.`flg_dovuto_terzi` = `sdk`.`flg_dovuto_terzi`)))) join `kqi_descr` `kd` on(((`sdk`.`iid_kqi` = `kd`.`iid_kqi`) and (`d`.`data` between `kd`.`inizio` and ifnull(`kd`.`fine`,`d`.`data`))))) join `servizi` `s` on((`d`.`iid_servizio` = `s`.`iid_servizio`))) where `f_day_in`(`d`.`data`,`s`.`giorni_lavorativi`)

01 Aprile, 2011 18:16 #2
john_revelator
Moderatore

john_revelator
Registrato: Jun, 2009
Posts: 270
Offline

Ciao. Se lavori sotto windows e nel caso non l'abbia mai provata ti consiglio la gui

sqlyog community edition

http://code.google.com/p/sqlyog/

la formattazione del codice viene preservata anche qualora debba mettere mano a viste create in precedenza.


No PVT tecnici. Non rispondo nemmeno. Usate il forum.
My SO profile

02 Aprile, 2011 15:02 #3
ema
Utente

ema
Registrato: Aug, 2010
Posts: 7
Offline

Grazie del post, sto giusto usando sqlyog community, l'ultima versione disponibile.

Sebbene in generale sia vero quello che dici, per la vista che ho riportato sopra (ma non è l'unica) anche sqlyog la ripropone tutta su una riga, come se non riuscisse a riformattarla.

03 Aprile, 2011 09:38 #4
john_revelator
Moderatore

john_revelator
Registrato: Jun, 2009
Posts: 270
Offline

Ho fatto qualche ricerca in rete per vedere se ci fosse una soluzione a questo problema. Purtroppo senza successo.
Prova a dare uno sguardo a quanto riportato qui

http://stackoverflow.com/questions/5083640/mysql-views-definition-changes-after-saving

Il problema è stato segnalato da anni anche tra i bug

http://bugs.mysql.com/bug.php?id=14369

ma non sembra rientrare tra le loro priorità visto il tempo ormai trascorso.
Alla fine l'unico suggerimento pare essere quello di salvarsi da qualche parte il codice "pulito" e riutilizzarlo all'occorrenza.


No PVT tecnici. Non rispondo nemmeno. Usate il forum.
My SO profile

03 Aprile, 2011 10:52 #5
ema
Utente

ema
Registrato: Aug, 2010
Posts: 7
Offline

Anche le mie ricerche in rete non avevano portato a niente di utile.
Sospettavo che non ci fosse una soluzione.

Il file esterno in cui salvare il codice originale è il workaround che sto usando adesso.

Giusto pour parler, a questo punto, ho pensato anche di fare una tabella delle viste:

nome varchar(64),
data_creazione datetime,
codice text

in modo da evitare che la perdita di un file 'volante' possa pregiudicare la manutenzione futura (d'altronde il fatto di salvare il codice nel db stesso in cui esso viene eseguito è la filosofia di viste e stored routines)

Però tenere allineato il tutto è un po' noioso :)

Grazie cmq per lo sbattimento.

Ciaooo!

03 Aprile, 2011 11:54 #6
john_revelator
Moderatore

john_revelator
Registrato: Jun, 2009
Posts: 270
Offline

Giusto pour parler, a questo punto, ho pensato anche di fare una tabella delle viste:

nome varchar(64),
data_creazione datetime,
codice text

Mah, se ritieni possa farti comodo fai cosi. :)

L'information_schema memorizza data di creazione e di aggiornamento solo delle "base table".

1select * from information_schema.tables
2where table_schema = 'nome_database'

mentre per le viste tali metadati sono uguali a NULL.
Sempre nell'information_schema ma nella tabella views, trovi il contenuto delle tue viste con i noti problemi di formattazione.

1select * from information_schema.views
2where table_schema = 'nome_db'

Personalmente tendo a conservare una copia aggiuntiva del mio "repository" su gmail. ;)


No PVT tecnici. Non rispondo nemmeno. Usate il forum.
My SO profile

Condividi su:

Loggati o Registrati per replicare