the query is ugly; 
seems count(1) counts the decart-product or something:

 SA: INFO SELECT count(1) AS count_1
FROM "Otnoshenie", mm_nazn2rabmesto, mm_nazn2pozicia, mm_pozicia2otdel, 
mm_otdel2otdel AS mm_otdel2otdel, mm_otdel2otdel AS mm_otdel2otdel1, 
mm_otdel2otdel AS mm_otdel2otdel2, "PVOwnership" JOIN "ParamValue" 
ON "PVOwnership".param_value_id = "ParamValue".db_id
WHERE "ParamValue".time_trans <= ? AND "ParamValue".time_valid >= ? 
AND "ParamValue".time_valid <= ? AND ("Otnoshenie".db_id 
= "PVOwnership"."_AbstractNaznachenie_id" OR "Otnoshenie".db_id = 
mm_nazn2rabmesto.left_id AND mm_nazn2rabmesto.right_id 
= "PVOwnership"."_Rabotno_miasto_id" OR "Otnoshenie".db_id = 
mm_nazn2pozicia.left_id AND (mm_nazn2pozicia.right_id 
= "PVOwnership"."_Pozicia_id" OR mm_nazn2pozicia.right_id = 
mm_pozicia2otdel.left_id AND (mm_pozicia2otdel.right_id 
= "PVOwnership"."_Otdel_id" OR mm_pozicia2otdel.right_id = 
mm_otdel2otdel.left_id AND (mm_otdel2otdel.right_id 
= "PVOwnership"."_Otdel_id" OR mm_otdel2otdel.right_id = 
mm_otdel2otdel1.left_id AND (mm_otdel2otdel1.right_id 
= "PVOwnership"."_Otdel_id" OR mm_otdel2otdel1.right_id = 
mm_otdel2otdel2.left_id AND mm_otdel2otdel2.right_id 
= "PVOwnership"."_Otdel_id"))))) AND "PVOwnership".param_value_id 
= "ParamValue".db_id AND "Otnoshenie".obj_id_id = ?

that's 3 levels: 4752
4 levels: 14256
5 levels: 42768
.. 8 levels: 1154736
while there are 57 rows total.

anyway, i didnt need count, just tried it.

this thing is a instance-level value-inheritance chain, where some parameter 
can be present anywhere on the "nodes", and the nearest visible one should be 
taken.
This as a const-level recursion takes forever for levels>=5, i'm wondering 
should i try nested-sets, or directly to try organise & maintain some cache 
whats visible on each node.


On Sunday 06 July 2008 18:47, Michael Bayer wrote:
> On Jul 6, 2008, at 11:33 AM, [EMAIL PROTECTED] wrote:
> > i have some tree-walking query via many2many, having configurable
> > levels of
> > hops to look into.
> > and it returns very different results for len(query) and
> > query.count(): len()
> > stays constant above the depth of the tree (correct), while .count()
> > keeps
> > growing an growing.
> > what's can be wrong?
>
> the generated SQL will tell all, lately ive been partial towards:
>
> sess.query(func.count(func.distinct(MyClass.id))).<other
> criterion>.first()
>
> since the way count() is determined can be controlled accurately.
>
> 

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to