Ahoi!
Aktuell passe ich gerade ein Custom-Plugin für den JTL Shop 4.06 (Build 17) an und erstelle eine neue Version des Plugins mit SQL:
Ich erhalte folgenden Fehler (203 = SQL Syntax Error) im Log:
Dabei ist zu beachten, wenn ich die Query ganz normal in der Console laufen lasse, dann gibt es keinerlei Probleme.
Ich habe mir mal den betreffenden Code in admin/includes/pluginverwaltung_inc.php, insbesondere die Funktionen logikSQLDatei und parseSQLDatei, die Art und Weise wie da doppelte Tabellen verhindert werden und vermerkt werden welche Plugins welche Tabellen installiert haben ist fachlich gruselig, insbesondere mit der Logik in parseSQLDatei. Jedenfalls verhindert dieses Zerhacken der SQL-Datei, dass man komplexere Datenbank-Anfragen, z. B. über Prozeduren oder Prepared Statements über SQL-Variablen nicht nutzen kann.
Zudem habe ich die Doku zum Thema Plugins inzwischen mehrfach durchforstet, ob es da besondere Regeln für die Plugin-SQL-Dateien gibt, was man da rein schreiben darf und was nicht...
Ebenso habe ich keinen HOOK gefunden, der nach der Installation einer neuen Plugin-Version nutzbar wäre, um selbst tätig zu werden. Ich müsste jetzt selbst beim Installieren irgendwo in einer Tabelle vermerken, dass es ein Update gab und dies jetzt jedes Mal checken ob die dafür notwendigen SQL-Änderungen bereits ausgeführt wurden. Das möchte ich ungern machen.
Ist das gewollt, dass man außer DELETE, CREATE, INSERT, ALTER nichts anderes in die Plugin-SQL-Dateien schreiben kann?
Gibt es eine Alternative?
Freundliche Grüße
Hape von Bröös
Aktuell passe ich gerade ein Custom-Plugin für den JTL Shop 4.06 (Build 17) an und erstelle eine neue Version des Plugins mit SQL:
SQL:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_procedure$$
CREATE PROCEDURE my_procedure()
BEGIN
IF NOT EXISTS((SELECT *
FROM information_schema.COLUMNS c
WHERE c.TABLE_SCHEMA = 'datenbank_name'
AND c.TABLE_NAME = 'tabellen_name'
AND c.COLUMN_NAME = 'spalten_name')) THEN ALTER TABLE tabellen_name
ADD spalten_name BOOL NOT NULL DEFAULT FALSE;
END IF;
END $$
CALL my_procedure()$$
DROP PROCEDURE IF EXISTS my_procedure$$
DELIMITER ;
Ich erhalte folgenden Fehler (203 = SQL Syntax Error) im Log:
SQL Fehler beim Installieren des Plugins (XYZ): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near DELIMITER $$DROP PROCEDURE IF EXISTS my_procedure$$CREATE PROCEDURE ch at line 1
Dabei ist zu beachten, wenn ich die Query ganz normal in der Console laufen lasse, dann gibt es keinerlei Probleme.
Ich habe mir mal den betreffenden Code in admin/includes/pluginverwaltung_inc.php, insbesondere die Funktionen logikSQLDatei und parseSQLDatei, die Art und Weise wie da doppelte Tabellen verhindert werden und vermerkt werden welche Plugins welche Tabellen installiert haben ist fachlich gruselig, insbesondere mit der Logik in parseSQLDatei. Jedenfalls verhindert dieses Zerhacken der SQL-Datei, dass man komplexere Datenbank-Anfragen, z. B. über Prozeduren oder Prepared Statements über SQL-Variablen nicht nutzen kann.
Zudem habe ich die Doku zum Thema Plugins inzwischen mehrfach durchforstet, ob es da besondere Regeln für die Plugin-SQL-Dateien gibt, was man da rein schreiben darf und was nicht...
Ebenso habe ich keinen HOOK gefunden, der nach der Installation einer neuen Plugin-Version nutzbar wäre, um selbst tätig zu werden. Ich müsste jetzt selbst beim Installieren irgendwo in einer Tabelle vermerken, dass es ein Update gab und dies jetzt jedes Mal checken ob die dafür notwendigen SQL-Änderungen bereits ausgeführt wurden. Das möchte ich ungern machen.
Ist das gewollt, dass man außer DELETE, CREATE, INSERT, ALTER nichts anderes in die Plugin-SQL-Dateien schreiben kann?
Gibt es eine Alternative?
Freundliche Grüße
Hape von Bröös
Zuletzt bearbeitet: