PowerAMC peut procéder au reverse engineering dans un MPD à partir d'une connexion directe à une base de données . Les requêtes qui contrôlent le reverse engineering direct sont disponibles dans la catégorie Script/Objects.
Chaque type de requête a la même structure de base constituée d'une liste de variables PowerAMC séparées par des virgules et encadrées d'accolades { } et suivie d'une instruction Select qui permet d'extraire les valeurs destinées à renseigner ces variables. Les valeurs des enregistrements renvoyés sont stockées dans ces variables, qui sont ensuite validées comme valeurs d'attributs d'objet.
{OWNER, VIEW, VIEWSTYLE, ExtObjViewType, ExtObjOIDList, ExtObjSuperView, XMLSCHEMA EX, XMLELEMENT EX} select v.owner, v.view_name, decode (v.view_type, 'XMLTYPE', 'XML', 'View'), v.view_type, v.oid_text, v.superview_name, decode (v.view_type, 'XMLTYPE', '%SqlXMLView.'||v.owner||v.view_name||'1%', ''), decode (v.view_type, 'XMLTYPE', '%SqlXMLView.'||v.owner||v.view_name||'2%', '') from sys.all_views v [where v.owner = %.q:SCHEMA%]
Chaque partie de l'en-tête placé entre virgules est associée aux informations suivantes :
Nom de la variable - [obligatoire] peut être n'importe quelle variable de MPD (voir Variables et macros de MPD), nom public du métamodèle (voir Navigation dans le métamodèle) ou bien le nom d'un attribut étendu défini sous la métaclasse dans la catégorie Profile (voir Catégorie Profile (SGBD)).
ID - [facultatif] la variable fait partie de l'identifiant.
... - [facultatif] la variable doit être concaténée pour toutes les lignes renvoyées par la requête SQL et ayant les mêmes valeurs pour les colonnes d'ID. Les mots clé ID et ... (points de suspensions) sont mutuellement exclusifs.
Paires de valeurs - [facultatif] répertorie les conversions entre des valeurs extraites et des valeurs dans PowerAMC au format suivant (où * signifie toutes les autres valeurs) :
(value1 = PDvalue1, value2 = PDvalue2, * = PDvalue3)
Dans ce script, l'identifiant est défini comme TABLE + ISKEY+ CONSTNAME via l'utilisation du mot clé ID :
{TABLE ID, ISPKEY ID, CONSTNAME ID, COLUMNS ...} select t.table_name, 1, null, c.column_name + ', ', c.column_id from systable t, syscolumn c where etc..
Dans les lignes de résultats renvoyées par le script SQL, les valeurs du quatrième champ sont concaténées dans le champ COLUMNS tant que leurs valeurs d'ID sont identiques.
SQL Result set Table1,1,null,' ,' Table1,1,null,'col2,' Table1,1,null,'col3,' Table2,1,null,'col4,' In PowerDesigner memory Table1,1,null,'col1,col2,col3' Table2,1,null,'col4'
Dans l'exemple, COLUMNS va contenir la liste des colonnes séparée par des virgules. PowerAMC va traiter le contenu du champ COLUMNS pour supprimer la dernière virgule.
Dans cet exemple, lorsque la requête SQL renvoie la valeur 25 ou 26, elle est remplacée par JAVA dans la variable TYPE :
{ADT, OWNER, TYPE(25=JAVA , 26=JAVA)} SELECT t.type_name, u.user_name, t.domain_id FROM sysusertype t, sysuserperms u WHERE [u.user_name = '%SCHEMA%' AND] (domain_id = 25 OR domain_id = 26) AND t.creator = u.user_id