Je débute en SQL et j'essaie de faire une requête pour trouver tout les appelants de ma fonction, je m'explique :
J'ai 3 tables :
t_object : Contient toutes mes classes.
t_operation : Toutes les opérations (fonctions) de toutes les classes. Elles sont lié entre elles avec : t_object.Object_ID = t_operation.Object_ID
t_operationtag : Contient tous les tag associés aux opérations. Avec le lien : t_operation.OperationID = t_operationtag.ElementID
Pour chaque opération, j'ai un tag associé "Calls" qui me dit qu'elles sont les opérations appelées par elle même:
t_operationtag.Property = 'Calls'
t_operationtag.VALUE ="texte"
Le but est de lister pour chaque opération '1', les opérations '2' qui appelle l'opération '1' (CallsBy). J'ai fait une petite requête qui fonctionne bien mais qui est "static" :
SELECT op1.Name
FROM t_object AS allClass
LEFT JOIN t_operation AS op1 ON allClass.Object_ID = op1.Object_ID
INNER JOIN t_operationtag AS function_tag ON ((op1.OperationID = function_tag.ElementID) AND (function_tag.VALUE LIKE CONCAT("%", "MSA_Se_SECU_ComputeHMAC", "%") AND function_tag.Property = 'Calls'))
GROUP BY op1.OperationID
J'aimerai pouvoir faire varier "MSA_Se_SECU_ComputeHMAC" afin de sélectionner une classe et que la requête me retourne tout les "CallsBy" de toutes les fonctions de ma classe.J'ai tenté de faire ça :
SELECT op1.Name
FROM t_object AS allClass2 LEFT JOIN t_operation AS op2 ON allClass2.Object_ID = op2.Object_ID,
t_object AS allClass
LEFT JOIN t_operation AS op1 ON allClass.Object_ID = op1.Object_ID
INNER JOIN t_operationtag AS function_tag ON ((op1.OperationID = function_tag.ElementID) AND (function_tag.VALUE LIKE CONCAT("%",op2.Name, "%") AND function_tag.Property = 'Calls'))
WHERE allClass2.Object_ID = '783'
GROUP BY op1.OperationID
Le problème c'est qu'il ne connait pas op2.Name et je suis un peu a cours d'idée pour faire varier le nom de la fonction.Est ce que quelqu'un pourrais m'aider ?
Merci