Este anexo apresenta as consultas SQLs executadas sobre a camada de persistência do modelo para geração do DPModel. Este modelo de dados é utilizado na implementação da proposta deste trabalho.
Entidade Model
Entidade que contém um identificador único para o modelo, o autor, a data de criação, a descrição e o nome.
SQL
SELECT mit.id, mif.author, mif.creationtime, mif.description, mif.name from modelinstance mit left outer join modelinformation mif on mit.modelinformation_id = mif.id
Entidade Model Element
Entidade que representa todos os elementos dos modelos, sejam relações ou tipos. Contém um identificador único, o identificador do modelo o qual a entidade pertence e o nome da entidade.
SQL:
SELECT modelinstance_id model_id, instances_id id, ore.value name FROM
modelinstance_ontoeinstance m
left outer join ontoeentity_ontoerestriction oo on (m.instances_id = oo.ontoeentity_id)
left outer join ontoerestriction ore on oo."restrictionsMap_uuid" = ore.uuid WHERE
ore.name='name'
Entidade Model Element Relationship
Entidade que representa somente os relacionamentos dos modelos. Contém um identificador único, o modelo que contém a relação, e as entidades fonte e alvo da relação.
SQL:
SELECT m.model_id, m.id, m.value, source_id, target_id FROM ontoerelationobject oe, view.modelelement_vw m
Entidade Estereótipos
Entidade que representa todas as metaclasses contidas em um metamodelo. O estereótipo utilizado na linguagem são essas metaclasses. Contém um identificador único, um nome amigável e um nome que é idêntico ao que aparece no metamodelo.
SQL:
select id, label, name from ontoerelation union
select id, label, name from ontoeclass
Entidade Classification
Entidade que representa a classificação de um model element, ou seja qual o papel dentro de um padrão de projeto que a entidade está executando. Esta informação é útil para várias pesquisas como demonstrado durante o trabalho. Esta SQL é composta vários trechos que são unidos por uniões – em SQL o comando “UNION” – cada trecho extrai do modelo elementos que estão executando um determinado papel.
SQL:
select modelelement_stereotype_vw.element_id, 11 role_id from view.modelelement_vw,
view.stereotype_vw, view.modelelement_stereotype_vw where stereotype_vw.name = 'Phase' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id --PhaseSuperType
union
select distinct m.id, 10 role_id
from view.modelelement_vw m, view.stereotype_vw, view.modelelement_stereotype_vw where
m.id in (
select m.source_id from view.modelelement_relations_vw m, view.stereotype_vw, view.modelelement_stereotype_vw where
stereotype_vw.name = 'Generalization' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id and m.id = modelelement_stereotype_vw.element_id
and m.target_id in (
select modelelement_stereotype_vw.element_id from view.modelelement_vw, view.stereotype_vw, view.modelelement_stereotype_vw
where
stereotype_vw.name = 'Role' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id
) ) union
-- Role
select modelelement_stereotype_vw.element_id, 31 role_id from view.modelelement_vw, view.stereotype_vw,
view.modelelement_stereotype_vw where stereotype_vw.name = 'Role' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id --RoleSuperType
union
select distinct m.id, 30 role_id
from view.modelelement_vw m, view.stereotype_vw, view.modelelement_stereotype_vw where m.id in ( select m.source_id from view.modelelement_relations_vw m, view.stereotype_vw, view.modelelement_stereotype_vw where
stereotype_vw.name = 'Generalization' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id and m.id = modelelement_stereotype_vw.element_id and m.target_id in ( select modelelement_stereotype_vw.element_id from view.modelelement_vw, view.stereotype_vw, view.modelelement_stereotype_vw where
stereotype_vw.name = 'Role' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id ) ) -- Subkind union
select modelelement_stereotype_vw.element_id, 21 role_id
from view.modelelement_vw, view.stereotype_vw, view.modelelement_stereotype_vw where
stereotype_vw.name = 'SubKind' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id --SubKindSuperType union select distinct m.id,20 role_id from view.modelelement_vw m, view.stereotype_vw, view.modelelement_stereotype_vw where m.id in ( select m.source_id from view.modelelement_relations_vw m,
view.stereotype_vw,
view.modelelement_stereotype_vw where
stereotype_vw.name = 'Generalization' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id and m.id = modelelement_stereotype_vw.element_id
and m.target_id in (
select modelelement_stereotype_vw.element_id from view.modelelement_vw, view.stereotype_vw, view.modelelement_stereotype_vw
where
stereotype_vw.name = 'SubKind' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id
)
)
Associação entre os Classifications
Esta SQL é responsável por extrair do modelo a relação entre entidades que atuam em uma mesma instância de um padrão de projeto.
OCL:
--Ser Superphase.
select (m.source_id || m.target_id || 10) id, m.source_id, m.target_id, 10 association_type_id from
view.modelelement_relations_vw m, view.stereotype_vw,
view.modelelement_stereotype_vw where
stereotype_vw.name = 'Generalization' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id and m.id = modelelement_stereotype_vw.element_id
and m.target_id in (
select c.element_id target from view.classification_vw c
where role_id = 11 )
union
--Ser SuperSubKind
select (m.source_id || m.target_id || 20) id, m.source_id, m.target_id, 20 association_type_id from
view.modelelement_relations_vw m, view.stereotype_vw,
view.modelelement_stereotype_vw where
stereotype_vw.name = 'Generalization' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id and m.id = modelelement_stereotype_vw.element_id
and m.target_id in (
select c.element_id target from view.classification_vw c
where role_id = 21 )
--Ser SuperRole
select (m.source_id || m.target_id || 30) id, m.source_id, m.target_id,30 association_type_id from
view.modelelement_relations_vw m, view.stereotype_vw,
view.modelelement_stereotype_vw where
stereotype_vw.name = 'Generalization' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id and m.id = modelelement_stereotype_vw.element_id
and m.target_id in (
select c.element_id target from view.classification_vw c
where role_id = 31 )
union
-- Phase Partition
select (m1.source_id || m2.target_id || 11) id, m1.target_id, m2.target_id , 11 association_type_id
from
(select m.source_id, m.target_id, m.name from view.modelelement_relations_vw m, view.stereotype_vw,
view.modelelement_stereotype_vw where
stereotype_vw.name = 'Generalization' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id and m.id = modelelement_stereotype_vw.element_id
and m.target_id in (
select c.element_id target from view.classification_vw c
where role_id = 11 ) ) m1,
(select m.source_id, m.target_id, m.name from view.modelelement_relations_vw m, view.stereotype_vw,
view.modelelement_stereotype_vw where
stereotype_vw.name = 'Generalization' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id and m.id = modelelement_stereotype_vw.element_id
and m.target_id in (
select c.element_id target from view.classification_vw c where role_id = 11 ) ) m2 where m1.source_id=m2.source_id and m1.target_id<> m2.target_id
and COALESCE(m1.name,’STANDARDGSET’)= COALESCE (m2.name, ’STANDARDGSET’) union
-- SubKindPartition
association_type_id from
(select m.source_id, m.target_id from
view.modelelement_relations_vw m, view.stereotype_vw,
view.modelelement_stereotype_vw where
stereotype_vw.name = 'Generalization' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id and m.id = modelelement_stereotype_vw.element_id
and m.target_id in (
select c.element_id target from view.classification_vw c
where role_id = 21 ) ) m1,
(select m.source_id, m.target_id from
view.modelelement_relations_vw m, view.stereotype_vw,
view.modelelement_stereotype_vw where
stereotype_vw.name = 'Generalization' and
modelelement_stereotype_vw.stereotype_id = stereotype_vw.id and m.id = modelelement_stereotype_vw.element_id
and m.target_id in (
select c.element_id target from view.classification_vw c where role_id = 21 ) ) m2 where m1.source_id=m2.source_id and m1.target_id<> m2.target_id