Ho controllato per bene il metodo pgMySQL50 che ho modificato attenendomi alle seguenti regole del comando CREATE TABLE...
- Ogni definizione di Field deve terminare con la virgola
- La definizione della Primary Key deve essere seguita dalla virgola solo se ci sono indici nella tabella
NB Gli indici sono obbligatori su tutti i campi che costituiscono una Foreign Key - La definizione di un indice deve terminare con la virgola se:
- ci sono altri indici
- ci sono delle Foreign Key
- La definizione di una Foreign Key deve terminare con la virgola solo se ci sono altre FK
Le modifiche apportate le trovi:
pgMySSQL50._sqlTable():
- riga 2048: aggiunto carattere "," al termine del commento.
- eliminata istruzione:
IIf(oField <> data.GetValue("Fields")[data.GetValue("Fields").Count - 1], ",", "")&
- attivati i metodi PreSql() e PostSql()
pgSqlExport._openFile():
- righe 151 e 160: inserito una spazio dopo i primi due caratteri --
MySQL interpreta tutto ciò che segue "--" come commento, senza lo spazio ottieni un errore Sql Syntax Error
Con le suddette modifiche l'esportazione su Video e su File funziona perfettamente, ho eseguito l'importazione del file .sql tramite phpPgAdmin e il DB è stato popolato correttamente.
L'esportazione su Database fallisce a causa del diverso utilizzo dei metodi _preSql e _postSql.
Mentre per l'esportazione su Video o File viene eseguito il metodo _output() che scrive su video o stream il contenuto dell'array ritornato dai metodi, l'esportazione su Database apre una connessione, esegue la query con le sql dei metodi e chiude la connessione; così facendo i comandi si perdono in quanto le Server System Variable corrispondenti sono di tipo Session Scope e quindi riacquistano il valore predefinito ad ogni connessione.
Per ovviare al problema credo si debbano inserire i comandi nell'array $Data i cui item vengono eseguiti in un'unica connessione.
La buona notizia é che dalla versione 5.5 entrambe le variabili sono sia SESSION che GLOBAL.