Back to top

Autore Topic: Creare un trigger dentro il file install.sql, mi da syntax error  (Letto 3216 volte)

Offline imesh

  • Nuovo arrivato
  • *
  • Post: 35
    • Mostra profilo
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


Codice: [Seleziona]

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...

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Creare un trigger dentro il file install.sql, mi da syntax error
« Risposta #1 il: 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

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline imesh

  • Nuovo arrivato
  • *
  • Post: 35
    • Mostra profilo
Re:Creare un trigger dentro il file install.sql, mi da syntax error
« Risposta #2 il: 07 Feb 2014, 09:15:06 »
non ho capito cosa devo fare :D cmq è MySQL

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Creare un trigger dentro il file install.sql, mi da syntax error
« Risposta #3 il: 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.
Codice: [Seleziona]
DELIMITER //
CREATE TRIGGER `indice_test` BEFORE INSERT ON `conf_protocollazione`
FOR EACH ROW BEGIN
INSERT INTO protocollazione_id (id) VALUES (NULL);

2.
Codice: [Seleziona]
SET NEW.idprot = CONCAT(YEAR(NOW()),'/',(SELECT id FROM protocollazione_id ORDER BY id desc limit 1));
3.
Codice: [Seleziona]
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

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline imesh

  • Nuovo arrivato
  • *
  • Post: 35
    • Mostra profilo
Re:Creare un trigger dentro il file install.sql, mi da syntax error
« Risposta #4 il: 07 Feb 2014, 09:34:28 »
Ok grazie :) inizio a provare con il file di install e intanto aspetto altre risposte, sei stato gentilissimo

Offline imesh

  • Nuovo arrivato
  • *
  • Post: 35
    • Mostra profilo
Re:Creare un trigger dentro il file install.sql, mi da syntax error
« Risposta #5 il: 07 Feb 2014, 10:03:49 »
Ho creato la struttura dello script per eseguire la query all'installazione e all'update della componente:
Codice: [Seleziona]
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
« Ultima modifica: 07 Feb 2014, 10:15:14 da imesh »

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Creare un trigger dentro il file install.sql, mi da syntax error
« Risposta #6 il: 07 Feb 2014, 11:01:38 »
come detto sopra NON puoi passare dalla classe database di joomla...
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline imesh

  • Nuovo arrivato
  • *
  • Post: 35
    • Mostra profilo
Re:Creare un trigger dentro il file install.sql, mi da syntax error
« Risposta #7 il: 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

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Creare un trigger dentro il file install.sql, mi da syntax error
« Risposta #8 il: 07 Feb 2014, 12:01:44 »
usa:
Codice: [Seleziona]
$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

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline imesh

  • Nuovo arrivato
  • *
  • Post: 35
    • Mostra profilo
Re:Creare un trigger dentro il file install.sql, mi da syntax error
« Risposta #9 il: 07 Feb 2014, 12:09:25 »
usa:
Codice: [Seleziona]
$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

 



Web Design Bolzano Kreatif