Autore Topic: Progetto pgDesigner 2/3  (Letto 87004 volte)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #135 il: 18 Maggio 2011, 10:48:20 »
Odiarti?!? Ma ti detesto proprio...  ;D

Scherzi a parte, stai facendo un'ottimo lavoro e per questo ti ringrazio. Ormai sono arrivato al punto che questi particolari non li vedo, tenendo presente che, a parte qualche test diretto su MySQL, non è che abbia approfondito più di tanto, e tenendo anche presente che ho fatto nel frattempo parecchie modifiche al codice, per cui molto cose è probabile che risultino errate a causa dei vari cut&paste...
Purtroppo molte cose Gambas non le recepisce, e nella compilazione non vengono fuori.

Stasera, se riesco, faccio le modifiche che mi hai segnalato, e ti avverto quando aggiorno il repository.

Che posso dire... BRAVO!!! e... GRAZIE!!!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #136 il: 18 Maggio 2011, 20:21:49 »
Fatto!!!  :ok:

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #137 il: 18 Maggio 2011, 23:58:36 »
Ormai che siamo in ballo balliamo...
ho modificato la classe pgProject introducendo la verifica che le tabelle parte di una relazione siano entrambe di tipo InnoDB. Le modifiche le trovi alle righe da 2605 a 2609 e da 2782 a 2787 del file allegato.
Puoi verificare che sia tutto ok?
Se sei d'accordo nei prossimi giorni provo ad inserire il controllo sui campi della relazione.
A presto.
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #138 il: 19 Maggio 2011, 09:09:43 »
Quindi ti sei impazzito del tutto, eh?!?  ;D

Stasera verifico e ti dico...

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #139 il: 19 Maggio 2011, 14:50:57 »
Beh si, diciamo che ci ho preso gusto... :2birre:
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #140 il: 19 Maggio 2011, 16:14:00 »
Ahiahiahi.... bè, peggio per te...  ;D

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #141 il: 19 Maggio 2011, 19:06:45 »
Stò controllando le tue modifiche, però devo farti un appunto, non nel senso cattivo, ma solo per segnalarti alcune cose, visto che non ho fornito documentazione a riguardo:

1) le classi, oltre i driver e i pannelli specifici del singolo db, devono essere il più possibile slegati, nel senso che controlli puntuali a proprietà specifiche non devono essere presenti. Al più si crea un metodo specifico all'interno del driver stesso che, come forse avrai notato, contiene tutti i metodi presenti nelle altre classi analoghe, e solo il contenuto ovviamente cambia.

2) Il punto 1 è valido per tutte le proprietà, ad eccezione di alcune, in particolare quelle appunto legate agli oggetti relazione. Se dai un'occhiata ai metodi privati _createTable(), per esempio, ci sono alcuni elementi che sono comuni in tutti gli oggetti Table presenti nei driver.

A parte il codice che hai scritto, che formalmente è corretto, adesso il problema è capire dove inserire i controlli che hai indicato.
Le possibilità sono 2:

1) inserire la validazione all'interno del pannello di gestione dell'oggetto
2) creare un metodo all'interno dei driver per la validazione

In tutti e due i casi, è necessario prevedere che la validazione venga effettuata in tutti i casi:

a) creazione/modifica oggetto da pgDesigner,
b) import oggetto da fonti esterne (db, file sql, file progetto), onde evitare l'ingresso di valori non congrui.

In parole povere, questa verifica deve essere analizzata bene, onde evitare di commettere lo stesso errore che feci con la vecchia versione, ovvero includere codice di difficile controllo e manutenzione.

Ripeto, le tue modifiche sintatticamente sono ben integrate nel codice, solo che credo sia il punto meno indicato dove inserirle.

A questo punto farò un'analisi direttamente sul codice, per capire come e dove meglio inserire queste validazioni ma, ovviamente se hai qualche proposta tu, la analizziamo insieme....  :ok:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #142 il: 19 Maggio 2011, 19:26:03 »
Analizzando velocemente il codice di pgDesigner2, riferito a MySQL, in effetti il codice per gli oggetti di tipo RELATION è scritto solo in parte. In realtà mancano le funzionalità per il caricamento da db e un altro bel pò di roba che, forse, avevo lasciato appesa e non più ripresa.

Ho dato anche un'occhiata alla documentazione ufficiale:

http://dev.mysql.com/doc/refman/5.0/en/create-table.html
http://dev.mysql.com/doc/refman/5.1/de/create-table.html

per le versione 5.0 e 5.1 e, in effetti, la sintassi per la creazione delle relazioni esiste, e per tutte e due le versioni e, credo, anche per le successive.

A questo punto, visto che finora avevo lavorato principalmente sulla base di PostgreSQL, dobbiamo ora dedicarci a sistemare la parte MySQL.
Adesso, sulla base di queste informazioni, dovrò analizzare cosa veramente manca e cosa modificare, per definire una volta per tutte la gestione di questo driver. Questo almeno iniziando dalla versione 5.0, che è l'unico driver per ora incluso in pgDesigner. Poi si verificheranno le varie modifiche con le versioni successive, eventualmente implementando nuovi driver (così come fatto per PostgreSQL).
Quindi, dovrò lavorare su questo ma, come per PostgreSQL, dovrò capire anche come estrarre le varie info dal db... Per cui i test credo dovremo sospenderli, fino a che non riesco a sistemare le cose.
Se hai modo di darmi una mano, ben venga. Puoi verificare come, andando a fare comparazioni con i driver di PostgreSQL...


Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #143 il: 19 Maggio 2011, 21:08:14 »
Citazione
Ripeto, le tue modifiche sintatticamente sono ben integrate nel codice, solo che credo sia il punto meno indicato dove inserirle.
Hai perfettamente ragione. Inserito lì il codice ha valore per tutti i DB, impedendo di creare relazioni in PGSQL e SQLite3
A sensazione opterei per un metodo all'interno del driver.
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #144 il: 20 Maggio 2011, 09:59:58 »
In realtà bastere, e bbe verificare l'esistenza della proprietà, in modo da non bloccare il tutto...
Comunque, mi sono letto la documentazione MySQL, e ho rianalizzato il codice del driver.
Sono addivenuto ad una soluzione drastica, per evitare di inserire ulteriori logiche un pò troppo dipendenti da condizioni particolai, ovvero lasciare tutto così com'è e lasciare all'utente il compito di usare o meno certe proprietà.
A livello di codice c'è tutto il necessario per gestire le relazioni per MySQL, compreso anche l'eventuale caricamento/lettura da un database esistente (la parte relazioni, visto com'è impostato MySQL, viene estratto dalle informazioni della tabella, diversamente da come fatto per PostgreSQL.
In tutti i database esistono condizioni particolari, ma non tutte possono essere gestire da un programma generalizzato come pgDesigner2, altrimenti facciamo un duplicato del motore db.
Con questo non voglio dire che non si possa fisicamente fare, solo che è necessario analizzare se ne vale la pena. Il database stesso fà già i suoi controlli sintattici e logici sui comandi sql, e non vorrei replicarne gli algoritmi anche in pgDesigner (che è già abbastanza complesso...).
Avevo anche pensato di creare un apposito metodo di validazione, ma sarebbe alquanto pesante e dipenderebbe da troppi fattori.

Che ne pensi?

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #145 il: 20 Maggio 2011, 13:05:12 »
Effettivamente dopo avere letto il tuo post di ieri, ho fatto alcune considerazioni:
1. L'utilizzatore di pgdesigner dovre, e bbe, sapere quello che sta facendo, anche se l'errore è sempre in agguato.
2. Eventuali violazioni delle regole sono certamente segnalate dal database.
3. pgDesigner è un applicativo ad uso professionale.
4. La conoscenza delle funzionalità ammesse ed utilizzabili è demandata all'utente.
...ma...
5. se fai una cosa falla bene...

Al punto 5 non intendo dire che pgdesigner sia fatto male, anzi, credo veramente non abbia competitori in particolare la versione 2; l'interrogativo che mi pongo è: potrebbe rappresentare una lacuna il fatto di non gestire alcuni controlli di particolare rilievo? Se esegui il controllo sulla compatibilità dei campi in relazione perché non controllare le tabelle?. Immagina la seguente situazione:
Creo un nuovo progetto
Lo popolo di tabelle
Configuro le relazioni, di cui una per errore su una tabella MyISAM e tutto sembra andare bene
Esporto il progetto su database
Ottengo una segnalazione di errore.
La prima reazione è darmi del p...a (un termine molto usato a Milano),  immediatamente dopo penso  ah però, c'è un baco...

Conclusione:
penso valga la pena di proseguire con i test evidenziando ciò da correggere per giungere ad una versione di rilascio e tenere in serbo per future minor releases eventuali aggiunte.

PS ho provato ad importare un db MySQL e pgd2 si blocca con un errore NULL OBJECT. Se riesco questa sera indago.
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #146 il: 20 Maggio 2011, 14:52:45 »
Hai perfettamente ragione, oltre al fatto che renderebbe il programma una software meragiosamente gagliardo..., ma è da supporre che mettere controlli a livello di dato sarebbe alquanto laborioso.

Fino ad oggi, avevo pensato ad una logica che si fermasse solo all'interazione tra i vari oggetti, i vari legami e, eventualmente fino alla validazione della singola informazione (es. il tipo di campo), ma non fino all'intreccio logico di queste ultime.

Il discorso, ovviamente, non è solo legato a MySQL, ma vale anche per gli altri rdbms, e alle singole versioni. La prima fatica vera è stata proprio quella di individuare le diverse caratteristiche tra versioni, fino ad arrivare alla sintassi finale. Però qui mi sono fermato, altrimenti non ne uscivo vivo, e dato che lo sviluppo lo avevo iniziato e continuato da solo, credo sia impossibile, nel poco tempo libero che uno dedica an progetto del genere, prevedere e fare tutto. Quindi, ho messo dei paletti, e questo delle interazioni tra le varie proprietà, è uno di questi.
Con questo non voglio dire che poi non si vada a fare, anzi, sicuramente si farà, ma solo dopo che l'applicazione avrà raggiunto una certa stabilità, e questa ancora non è stata raggiunta (vedi già le tue ultime segnalazioni).

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #147 il: 20 Maggio 2011, 17:01:32 »
Bene, visto che abbiamo comunità di vedute...andiamo avanti!
Per quanto posso farò il possibile per darti una mano anche col codice, mantenendo come priorità i test e proponendo di volta in volta una soluzione ai problemi che riscontrerò, soluzione che sarai comunque tu a valutare.

PS. pgdesigner è adesso un software gagliardo, in futuro sarà incomparabile.
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Progetto pgDesigner 2
« Risposta #148 il: 20 Maggio 2011, 17:13:26 »
PS. pgdesigner è adesso un software gagliardo, in futuro sarà incomparabile.

L'utente md9327 è stato bannato poicè si è scoperto, mediante comparazione degli IP, che aveva creato un account clone, denominato sotema, per elogiarsi da solo....peccato, il forum gambas-it perde un elemento valido ma purtroppo eccessivamente narcisista....

:rotfl:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #149 il: 20 Maggio 2011, 20:10:26 »
mmmmmmh... stò ceskho tocca eliminarlo, è come una mosca, ma più fastidioso...  :rotfl:

Comunque, e scherzi a parte, sotema hai detto bene, e ti ringrazio sia per le proposte future, sia per il lavoro che hai già svolto, che non è poco, credimi...

Riguardo ai test benissimo, così riusciamo a metterlo in condizione di renderlo publicabile definitivamente. Poi verrà il momento di espanderlo, sempre che non abbia sbagliato anche questa volta ad impostarne la logica. Purtroppo gambas, come ho più volte detto, ha dei limiti rispetto ad altri linguaggi più evoluti e conosciuti, ma questa è anche una sfida che ho intrapreso e continuo volentieri. Avrei potuto scriverlo in java, ma oltre ad esserci già qualche alternativa, era fin troppo scontato...

Una volta che avremo gambas 3, ci sarà da lavorare per adattare pgDesigner, e ho già visto più o meno le cose da fare rispetto alle differenze con l'attuale versione. CI sono anche dei conflitti di nomenclatura che toccherà sistemare, oltre a qualche funzione che è stata tolta, e che toccherà emulare...

Vedremo...

A parte PostgreSQL, che conosco abbastanza, su MySQL (conosco anche questo, ma non così bene) tocca verificare che tutto funzioni a dovere. Per SQLite potrebbero esserci dei problemi, a causa della struttura non molto chiara, e del reperimento delle informazioni circa gli oggetti. Per questo db ho usato un sistema che interroga direttamente (shell) l'eseguibile sqlite, ma sicuramente avrà qualche pecca...