Hi,

I have a self-referential mapper that looks like that.
Basicially a tree of 'HierarchyNode' where the leafs are
'ArbeitsmittelHierarchyNode' (accessed through the '_tools' property)

   mapper(HierarchyNode, HierarchyTable, properties={
       '_children' : relation(
                       HierarchyNode,

primaryjoin=and_(HierarchyTable.c.parentid==HierarchyTable.c.id, HierarchyTable.c.deleted==False),
                       order_by=[HierarchyTable.c.pos],
                       cascade="all",
backref=backref("parent", remote_side=[HierarchyTable.c.id])
                    ),
       '_children_shared' : relation(
                       HierarchyNode,

primaryjoin=and_(HierarchyTable.c.id==HierarchyTable.c.idhierarchy_share),
                       remote_side=[HierarchyTable.c.id],
                       order_by=[HierarchyTable.c.pos],
                       cascade="all",
                       uselist=True,
backref=backref("parent", remote_side=[HierarchyTable.c.id])
                    ),
       'parent' : relation(
                       HierarchyNode,

primaryjoin=HierarchyTable.c.parentid==HierarchyTable.c.id,
                       remote_side=[HierarchyTable.c.id],
                       uselist=False,
                    ),

# internal property, never use it directly
       '_tools' : relation(
                       ArbeitsmittelHierarchyNode,

primaryjoin=AMH_View.c.idhierarchy==HierarchyTable.c.id,
                       foreign_keys=[AMH_View.c.idhierarchy],
                       uselist=True,
backref=backref('parent', remote_side=[HierarchyTable.c.id]),
                    ),
       }

I am using the following code to iterate over an example tree

   for h in tree._children:
       tools = h._tools
       print '-->',h, h.id, tools

--> <toolbox.database.model.HierarchyNode object at 0xb75dcaec> 3 [<toolbox.database.model.ArbeitsmittelHierarchyNode object at 0xb75dc40c>, <toolbox.database.model.ArbeitsmittelHierarchyNode object at 0xb75ea04c>]

-> <toolbox.database.model.HierarchyNode object at 0xb75e048c> 10 [<toolbox.database.model.ArbeitsmittelHierarchyNode object at 0xb75dc40c>]

The output shows me that both HierarchyNode have a child ArbeitsmittelHierarchyNode at 0xb75dc40c - which is definitely wrong.

With enabled SQL debugging I see the following queries:

2007-06-15 09:08:20,729 INFO sqlalchemy.engine.base.Engine.0x..b4 SELECT amhier_am_view.idautor AS amhier_am_view_idautor, amhier_am_view.idsachgebiet AS amhier_am_view_idsachgebiet, amhier_am_view.num_hre AS amhier_am_view_num_hre, amhier_am_view.bemerkung AS amhier_am_view_bemerkung, amhier_am_view.versionsnr AS amhier_am_view_versionsnr, amhier_am_view.idzielgruppe AS amhier_am_view_idzielgruppe, amhier_am_view. idfassung AS amhier_am_view_idfassung, amhier_am_view.dateiname AS amhier_am_view_dateiname, amhier_am_view.originalname AS amhier_am_view_originalname, amhier_am_view.rechnerstand AS amhier_am_view_rechnersta nd, amhier_am_view.id AS amhier_am_view_id, amhier_am_view.hidx_master AS amhier_am_view_hidx_master, amhier_am_view.stammdatenverwaltung_tauglich AS amhier_am_view_stammdatenverwaltung_tauglich, amhier_am_vie w.rechner_stand AS amhier_am_view_rechner_stand, amhier_am_view.rechner_version AS amhier_am_view_rechner_version, amhier_am_view.version AS amhier_am_view_version, amhier_am_view.generator_tauglich AS amhier_ am_view_generator_tauglich, amhier_am_view.aedat AS amhier_am_view_aedat, amhier_am_view.hidx AS amhier_am_view_hidx, amhier_am_view.honorarfrei AS amhier_am_view_honorarfrei, amhier_am_view.neudat AS amhier_a m_view_neudat, amhier_am_view.rechtefrei AS amhier_am_view_rechtefrei, amhier_am_view.status AS amhier_am_view_status, amhier_am_view.signatur AS amhier_am_view_signatur, amhier_am_view.faxabruf AS amhier_am_v iew_faxabruf, amhier_am_view.format AS amhier_am_view_format, amhier_am_view.idgattung AS amhier_am_view_idgattung, amhier_am_view.bezeichnung_custom AS amhier_am_view_bezeichnung_custom, amhier_am_view.stellv ertreter AS amhier_am_view_stellvertreter, amhier_am_view.seiten AS amhier_am_view_seiten, amhier_am_view.zodb_path AS amhier_am_view_zodb_path, amhier_am_view.markierung AS amhier_am_view_markierung, amhier_a m_view.umfang AS amhier_am_view_umfang, amhier_am_view.num_pdf AS amhier_am_view_num_pdf, amhier_am_view.chgdat AS amhier_am_view_chgdat, amhier_am_view.versionskommentar AS amhier_am_view_versionskommentar, a mhier_am_view.aedat_string AS amhier_am_view_aedat_string, amhier_am_view.idhierarchy AS amhier_am_view_idhierarchy, amhier_am_view.versionsize AS amhier_am_view_versionsize, amhier_am_view.sperrgrund AS amhie r_am_view_sperrgrund, amhier_am_view.summary AS amhier_am_view_summary, amhier_am_view.gesperrt_bis AS amhier_am_view_gesperrt_bis, amhier_am_view.pos AS amhier_am_view_pos, amhier_am_view.stand AS amhier_am_v iew_stand, amhier_am_view.bezeichnung AS amhier_am_view_bezeichnung, amhier_am_view.num_rtf AS amhier_am_view_num_rtf, amhier_am_view.formular_version AS amhier_am_view_formular_version, amhier_am_view.benutze
r AS amhier_am_view_benutzer
FROM amhier_am_view
WHERE amhier_am_view.idhierarchy = %(lazy_1bca)s ORDER BY amhier_am_view.hidx 2007-06-15 09:08:20,729 INFO sqlalchemy.engine.base.Engine.0x..b4 {'lazy_1bca': 3}



and

SELECT amhier_am_view.idautor AS amhier_am_view_idautor, amhier_am_view.idsachgebiet AS amhier_am_view_idsachgebiet, amhier_am_view.num_hre AS amhier_am_view_num_hre, amhier_am_view.bemerkung AS amhier_am_view_bemerkung, amhier_am_view.versionsnr AS amhier_am_view_versionsnr, amhier_am_view.idzielgruppe AS amhier_am_view_idzielgruppe, amhier_am_view. idfassung AS amhier_am_view_idfassung, amhier_am_view.dateiname AS amhier_am_view_dateiname, amhier_am_view.originalname AS amhier_am_view_originalname, amhier_am_view.rechnerstand AS amhier_am_view_rechnersta nd, amhier_am_view.id AS amhier_am_view_id, amhier_am_view.hidx_master AS amhier_am_view_hidx_master, amhier_am_view.stammdatenverwaltung_tauglich AS amhier_am_view_stammdatenverwaltung_tauglich, amhier_am_vie w.rechner_stand AS amhier_am_view_rechner_stand, amhier_am_view.rechner_version AS amhier_am_view_rechner_version, amhier_am_view.version AS amhier_am_view_version, amhier_am_view.generator_tauglich AS amhier_ am_view_generator_tauglich, amhier_am_view.aedat AS amhier_am_view_aedat, amhier_am_view.hidx AS amhier_am_view_hidx, amhier_am_view.honorarfrei AS amhier_am_view_honorarfrei, amhier_am_view.neudat AS amhier_a m_view_neudat, amhier_am_view.rechtefrei AS amhier_am_view_rechtefrei, amhier_am_view.status AS amhier_am_view_status, amhier_am_view.signatur AS amhier_am_view_signatur, amhier_am_view.faxabruf AS amhier_am_v iew_faxabruf, amhier_am_view.format AS amhier_am_view_format, amhier_am_view.idgattung AS amhier_am_view_idgattung, amhier_am_view.bezeichnung_custom AS amhier_am_view_bezeichnung_custom, amhier_am_view.stellv ertreter AS amhier_am_view_stellvertreter, amhier_am_view.seiten AS amhier_am_view_seiten, amhier_am_view.zodb_path AS amhier_am_view_zodb_path, amhier_am_view.markierung AS amhier_am_view_markierung, amhier_a m_view.umfang AS amhier_am_view_umfang, amhier_am_view.num_pdf AS amhier_am_view_num_pdf, amhier_am_view.chgdat AS amhier_am_view_chgdat, amhier_am_view.versionskommentar AS amhier_am_view_versionskommentar, a mhier_am_view.aedat_string AS amhier_am_view_aedat_string, amhier_am_view.idhierarchy AS amhier_am_view_idhierarchy, amhier_am_view.versionsize AS amhier_am_view_versionsize, amhier_am_view.sperrgrund AS amhie r_am_view_sperrgrund, amhier_am_view.summary AS amhier_am_view_summary, amhier_am_view.gesperrt_bis AS amhier_am_view_gesperrt_bis, amhier_am_view.pos AS amhier_am_view_pos, amhier_am_view.stand AS amhier_am_v iew_stand, amhier_am_view.bezeichnung AS amhier_am_view_bezeichnung, amhier_am_view.num_rtf AS amhier_am_view_num_rtf, amhier_am_view.formular_version AS amhier_am_view_formular_version, amhier_am_view.benutze
r AS amhier_am_view_benutzer
FROM amhier_am_view
WHERE amhier_am_view.idhierarchy = %(lazy_1bca)s ORDER BY amhier_am_view.hidx 2007-06-15 09:08:20,820 INFO sqlalchemy.engine.base.Engine.0x..b4 {'lazy_1bca': 10}


which looks FINE.

When I perform the same SQL statement (in abbreviated from on the console) I get this

  hidx   | idhierarchy
----------+-------------
HI933407 |           3
HI435846 |           3
(2 rows)

Toolbox2Test=# select hidx, idhierarchy from amhier_am_view where idhierarchy=10;
  hidx   | idhierarchy
----------+-------------
HI435846 |          10
(1 row)

So I would expect to get a different ArbeitsmittelHierarchy instance when idhierarchy=10 but SA
returns the instance from the previous query.

Bug or feature?

Andreas

--
ZOPYX Ltd. & Co. KG - Charlottenstr. 37/1 - 72070 Tübingen - Germany
Web: www.zopyx.com - Email: [EMAIL PROTECTED] - Phone +49 - 7071 - 793376
Registergericht: Amtsgericht Stuttgart, Handelsregister A 381535
Geschäftsführer/Gesellschafter: ZOPYX Limited, Birmingham, UK
------------------------------------------------------------------------
E-Publishing, Python, Zope & Plone development, Consulting

Attachment: pgppPxXwBzpeq.pgp
Description: PGP signature

Reply via email to