Split de fichiers SQL multi-requêtes
Bonjour,
Je n'arrive pas à trouver comment faire une regex qui trouve les point-virgules pour séparer des requêtes SQL, sachant qu'il peut y avoir des fonctions (qui contiennent donc des points virgules dans leur corps);
Par exemple, avec un preg_replace(), je souhaite convertir :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| DROP FUNCTION IF EXISTS maFonction (INTEGER,INTEGER,TIMESTAMP);
CREATE FUNCTION maFonction (INTEGER,INTEGER,TIMESTAMP)
RETURNS INTEGER
AS $$
DECLARE
id INTEGER;
BEGIN
blabla;
IF id IS NULL THEN
blabla;
END IF;
RETURN id;
END;
$$ LANGUAGE PLPGSQL; |
en :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| DROP FUNCTION IF EXISTS maFonction (INTEGER,INTEGER,TIMESTAMP);###
CREATE FUNCTION maFonction (INTEGER,INTEGER,TIMESTAMP)
RETURNS INTEGER
AS $$
DECLARE
id INTEGER;
BEGIN
blabla;
IF id IS NULL THEN
blabla;
END IF;
RETURN id;
END;
$$ LANGUAGE PLPGSQL;### |
La difficulté est donc de ne pas tenir compte des point-virgules entre "CREATE FUNCTION" ET "PLPGSQL" par exemple.
Après, il me suffit de faire un explode sur '###' pour mettre chaque requête séparément dans un tableau.
(EDIT : ou preg_split(), et rajout du point-virgule en fin de chaque chaine)
J'ai regardé du côté des assertions avant/arrières, mais je n'ai pas réussi à mettre en œuvre quelque chose qui fonctionne...
Merci d'avance pour l'aide apportée.