AFAIK that still isn't recursive.
In theory I think you should be able to use a recursive query, but last time I tried it with SQL-server I got syntax errors.
So I just joined enough t_package enough times to cover the maximum nested dept.
This is a recursive query I used recently to find all classes without attributes in a certain package tree:
with packages (Package_ID, Name)as (
select p.Package_ID, p.Name from t_package p
where p.Package_ID = 2104662583
union all
select p.Package_ID,p.Name from t_package p
join packages on p.Parent_ID = packages.Package_ID
)
select o.Object_ID, o.Name, o.ea_guid,p.Name as PackageName from t_object o
join packages p on o.Package_ID = p.Package_ID
left join t_attribute at on at.Object_ID = o.Object_ID
where
o.Object_Type = 'Class'
and at.ID is nullthis is the code I had to use (for something similar) because the recursi ve sql query above wouldn't play nice with EA
string sqlQuery =
" SELECT o.Object_ID as ID,o.Object_Type as Type,isNull(o.Name,'') as Name,ISNULL(t.value,0) as ImportanceLevel,isnull(o.Author,'') as Author,o.CreatedDate as Created,o.ModifiedDate as Modified,isnull(o.Note,'') as Documentation,isnull(o.Package_ID,'') as ParentID,isnull(p.name,'') as ParentName " +
" ,isnull(p9.Name +'.','') + isnull(p8.Name+'.','')+ isnull(p7.Name+'.','')+ isnull(p6.Name+'.','') " +
" + isnull(p5.Name+'.','')+ isnull(p4.Name+'.','')+ isnull(p3.Name+'.','')+ isnull(p2.Name+'.','')+ isnull(p.Name,'') as QualifiedName " +
" FROM ((((((((((t_object as o " +
" left join t_objectproperties t on t.Object_ID = o.Object_ID )" +
" left join t_package p on o.Package_ID = p.Package_ID )" +
" left join t_package p2 on p.Parent_ID = p2.Package_ID )" +
" left join t_package p3 on p2.Parent_ID = p3.Package_ID )" +
" left join t_package p4 on p3.Parent_ID = p4.Package_ID )" +
" left join t_package p5 on p4.Parent_ID = p5.Package_ID )" +
" left join t_package p6 on p5.Parent_ID = p6.Package_ID )" +
" left join t_package p7 on p6.Parent_ID = p7.Package_ID )" +
" left join t_package p8 on p7.Parent_ID = p8.Package_ID )" +
" left join t_package p9 on p8.Parent_ID = p9.Package_ID )" +
" where (t.Property = 'ImportanceLevel' or t.Property is null)" +
" and o.ModifiedDate > '" + sqlDateModified + "' " +
" and (p.package_ID = " + this.getPackageID() + " " +
" or p2.package_ID = " + this.getPackageID() + " " +
" or p3.package_ID = " + this.getPackageID() + " " +
" or p4.package_ID = " + this.getPackageID() + " " +
" or p5.package_ID = " + this.getPackageID() + " " +
" or p6.package_ID = " + this.getPackageID() + " " +
" or p7.package_ID = " + this.getPackageID() + " " +
" or p8.package_ID = " + this.getPackageID() + " " +
" or p9.package_ID = " + this.getPackageID() + " ) " +
" order by QualifiedName";
Geert