Joomla.it Forum

Non solo Joomla... => Sviluppo => : imesh 07 Feb 2014, 08:28:22

: Creare un trigger dentro il file install.sql, mi da syntax error
: imesh 07 Feb 2014, 08:28:22
Salve, ho la necessità di creare un trigger con l'installazione di un nuovo componente ma, anche se lo script SQL è corretto (scritto direttamente su phpmyadmin viene creato senza problemi), se messo nel file install.sql mi da errore di sintassi a tutto lo script del trigger


:

DELIMITER //
CREATE TRIGGER `indice_test` BEFORE INSERT ON `conf_protocollazione`
FOR EACH ROW BEGIN
INSERT INTO protocollazione_id (id) VALUES (NULL);
SET NEW.idprot = CONCAT(YEAR(NOW()),'/',(SELECT id FROM protocollazione_id ORDER BY id desc limit 1));
END
//
DELIMITER ;

Non so proprio cosa fare...
: Re:Creare un trigger dentro il file install.sql, mi da syntax error
: mmleoni 07 Feb 2014, 09:12:21
crea un file di install e metti la query in quest'ultimo aprendo la connessione diretta al db e usando multi query.
il parser del sql nella classe db divide il file sql nelle singole queries per mandarle una alla volta al sql server. per lui la riga termina al ';'

ciao,
marco

: Re:Creare un trigger dentro il file install.sql, mi da syntax error
: imesh 07 Feb 2014, 09:15:06
non ho capito cosa devo fare :D cmq è MySQL
: Re:Creare un trigger dentro il file install.sql, mi da syntax error
: mmleoni 07 Feb 2014, 09:33:11
che fosse mysql era abbastanza chiaro, data la sintassi.
comuque per il parser di joomla quelle sono tre queries:

1.
:
DELIMITER //
CREATE TRIGGER `indice_test` BEFORE INSERT ON `conf_protocollazione`
FOR EACH ROW BEGIN
INSERT INTO protocollazione_id (id) VALUES (NULL);

2.
:
SET NEW.idprot = CONCAT(YEAR(NOW()),'/',(SELECT id FROM protocollazione_id ORDER BY id desc limit 1));
3.
:
END
//
DELIMITER ;

da qui gli errori ed il motivo per cui non puoi passare dalla classe database di joomla. ergo ti devi scrivere tu un file di install (vedi documentazione) per mandare direttamente la query al server.

magari aspetta un attimo e vedi se qualcun altro ha la soluzione.

ciao

: Re:Creare un trigger dentro il file install.sql, mi da syntax error
: imesh 07 Feb 2014, 09:34:28
Ok grazie :) inizio a provare con il file di install e intanto aspetto altre risposte, sei stato gentilissimo
: Re:Creare un trigger dentro il file install.sql, mi da syntax error
: imesh 07 Feb 2014, 10:03:49
Ho creato la struttura dello script per eseguire la query all'installazione e all'update della componente:
:
defined('_JEXEC') or die;
class com_protocollazioneInstallerScript
{
   function install($parent)
   {
      $db   = JFactory::getDbo();
      $query = $db->getQuery(true);        $query .=
"DROP TRIGGER IF EXISTS `indice_protocollazione`;
DELIMITER //
CREATE TRIGGER `indice_protocollazione` BEFORE INSERT ON `conf_protocollazione`
FOR EACH ROW
BEGIN
INSERT INTO protocollazione_id (id) VALUES (NULL);
SET NEW.idprot = CONCAT(YEAR(NOW()),'/',(SELECT id FROM protocollazione_id ORDER BY id desc limit 1));
SET NEW.anno = YEAR(NOW());
END
//
DELIMITER ;";
      $db->setQuery($query, 0, 0);
      $db->loadObjectList();
   }
   
   function update($parent)
   {
      $db   = JFactory::getDbo();
      $query = $db->getQuery(true);
 $query .=
"DROP TRIGGER IF EXISTS `indice_protocollazione`;
DELIMITER //
CREATE TRIGGER `indice_protocollazione` BEFORE INSERT ON `conf_protocollazione`
FOR EACH ROW
BEGIN
INSERT INTO protocollazione_id (id) VALUES (NULL);
SET NEW.idprot = CONCAT(YEAR(NOW()),'/',(SELECT id FROM protocollazione_id ORDER BY id desc limit 1));
SET NEW.anno = YEAR(NOW());
END
//
DELIMITER ;";
     
      $db->setQuery($query, 0, 0);
      $db->loadObjectList();
   }
}

La query da sempre errore di sintassi, :(
cosa sbaglio? Non ho trovato come si fa il multi query
: Re:Creare un trigger dentro il file install.sql, mi da syntax error
: mmleoni 07 Feb 2014, 11:01:38
come detto sopra NON puoi passare dalla classe database di joomla...
: Re:Creare un trigger dentro il file install.sql, mi da syntax error
: imesh 07 Feb 2014, 11:25:35
Ok e come prelevo i dati di accesso al database? per connettermi con mysqli mi servono i parametri di connessione
: Re:Creare un trigger dentro il file install.sql, mi da syntax error
: mmleoni 07 Feb 2014, 12:01:44
usa:
:
$config = JFactory::getConfig();
$value = $config->getValue( 'config.NomeChiave' );

i valori per NomeChiave li recuperi dal file di configurazione di joomla o da un var_dump dell'oggetto $config.

comunque, visto che mi sembra che tu non sappia proprio come procedere, aspetta di vedere se qualcuno ha un'altra soluzione.

ciao

: Re:Creare un trigger dentro il file install.sql, mi da syntax error
: imesh 07 Feb 2014, 12:09:25
usa:
:
$config = JFactory::getConfig();
$value = $config->getValue( 'config.NomeChiave' );

i valori per NomeChiave li recuperi dal file di configurazione di joomla o da un var_dump dell'oggetto $config.

comunque, visto che mi sembra che tu non sappia proprio come procedere, aspetta di vedere se qualcuno ha un'altra soluzione.

ciao


Ah ok, con questo mi basta eseguire msqli multi query e dovrebbe andare :) provo