Hi,
The example below is from our search called "All by Stereotype". It searches all elements, operations, attributes, connectors and diagrams that have a stereotype that matches the search term.
The query is a union of different queries for each type of result.
It might be that it won't work on .eap files. I remember having some problems with the joins. In that case you can create individual searches for each part.
Anyway, because of the different types of results it looked like a good example.
You can simply add more layers of parent package by adding more left joins to t_package.
select o.ea_guid as CLASSGUID,'Operation' as CLASSTYPE,o.name as Name,o.Stereotype, class.name as ClassName ,
package.name as PackageName,package_p1.name as PackageLevel1 ,package_p2.name as PackageLevel2,
package_p3.name as PackageLevel3
from t_operation as o
join t_object as class on (o.object_id = class.object_id)
join t_package as package on (class.package_id = package.package_id)
left join t_xref as xref on xref.Client = o.ea_guid
left join t_package as package_p1 on (package_p1.package_id = package.parent_id)
left join t_package as package_p2 on (package_p2.package_id = package_p1.parent_id)
left join t_package as package_p3 on (package_p3.package_id = package_p2.parent_id)
where
o.Stereotype like '<Search Term>'
or
(xref.Name = 'StereoTypes'
and xref.Description like '#WC#Name=<Search Term>;#WC#' )
union
select a.ea_guid as CLASSGUID,'Attribute' as CLASSTYPE,a.name as Name,a.Stereotype, class.name as ClassName ,
package.name as PackageName ,package_p1.name as PackageLevel1,package_p2.name as PackageLevel2,
package_p3.name as PackageLevel3
from t_attribute as a
join t_object as class on (a.object_id = class.object_id)
join t_package as package on (class.package_id = package.package_id)
left join t_xref as xref on xref.Client = a.ea_guid
left join t_package as package_p1 on (package_p1.package_id = package.parent_id)
left join t_package as package_p2 on (package_p2.package_id = package_p1.parent_id)
left join t_package as package_p3 on (package_p3.package_id = package_p2.parent_id)
where
a.Stereotype like '<Search Term>'
or
(xref.Name = 'StereoTypes'
and xref.Description like '#WC#Name=<Search Term>;#WC#')
union
select e.ea_guid as CLASSGUID, e.object_type as CLASSTYPE,e.name as Name,e.Stereotype, e.Name as ClassName ,
package.name as PackageName ,package_p1.name as PackageLevel1,package_p2.name as PackageLevel2,
package_p3.name as PackageLevel3
from t_object as e
join t_package as package on (e.package_id = package.package_id)
left join t_xref as xref on xref.Client = e.ea_guid
left join t_package as package_p1 on (package_p1.package_id = package.parent_id)
left join t_package as package_p2 on (package_p2.package_id = package_p1.parent_id)
left join t_package as package_p3 on (package_p3.package_id = package_p2.parent_id)
where
e.Stereotype like '<Search Term>'
or
(xref.Name = 'StereoTypes'
and xref.Description like '#WC#Name=<Search Term>;#WC#')
union
select d.ea_guid as CLASSGUID, d.Diagram_Type as CLASSTYPE,d.name as Name,d.Stereotype, d.Name as ClassName ,
package.name as PackageName ,package_p1.name as PackageLevel1,package_p2.name as PackageLevel2,
package_p3.name as PackageLevel3
from t_diagram as d
join t_package as package on (d.package_id = package.package_id)
left join t_xref as xref on xref.Client = d.ea_guid
left join t_package as package_p1 on (package_p1.package_id = package.parent_id)
left join t_package as package_p2 on (package_p2.package_id = package_p1.parent_id)
left join t_package as package_p3 on (package_p3.package_id = package_p2.parent_id)
where
d.Stereotype like '<Search Term>'
or
(xref.Name = 'StereoTypes'
and xref.Description like '#WC#Name=<Search Term>;#WC#')
union
select c.ea_guid as CLASSGUID, c.Connector_Type as ClassType,
isnull(c.name,source.name + '.' + target.name) as Name,c.Stereotype, source.Name as ClassName ,package.name as PackageName ,
package_p1.name as PackageLevel1,package_p2.name as PackageLevel2,package_p3.name as PackageLevel3
from t_connector as c
join t_object as source on (c.Start_Object_ID = source.Object_ID)
join t_object as target on (c.End_Object_ID = target.Object_ID)
join t_package as package on (source.package_id = package.package_id)
left join t_xref as xref on xref.Client = c.ea_guid
left join t_package as package_p1 on (package_p1.package_id = package.parent_id)
left join t_package as package_p2 on (package_p2.package_id = package_p1.parent_id)
left join t_package as package_p3 on (package_p3.package_id = package_p2.parent_id)
where
c.Stereotype like '<Search Term>'
or
(xref.Name = 'StereoTypes'
and xref.Description like '#WC#Name=<Search Term>;#WC#')