a syncrule is an object generated internally when you associate one Mapper with another Mapper via a relation(), which is actually an object called a PropertyLoader.

so lets use the Users/Address example. say we have classes User and Address. the join condition is users.c.user_id==addresses.c.user_id . When you attach the Address to the User and do a save, the "user_id" property of the User object is copied to the Address object. That is done by a syncrule. The syncrule is generated at mapper construction time by looking at the tables inside of "users.c.user_id==addresses.c.user_id", i.e. "users" and "addresses", matching those up to the mappers for the User and Address classes, and correlating the "user_id" column to the appropriate attribute in the User and Address class. the SyncRule then has an execute() method that is called at save time, which copies a single attribute from source to destination, in this case copying the "user_id" attribute from a User object to an Address object.

So when the relation system has that error with "no syncrules generated", its a sign that the join conditions of the relationship do not correspond to the tables represented by the mappers.

the code for this is pretty well isolated and docstring'ed in the module sqlalchemy.mapping.sync, containing the two objects ClauseSynchronizer and SyncRule.


On Apr 23, 2006, at 1:50 PM, Gambit wrote:

Hey All,

For the line:
Customer.mapper.add_property('checkout_history', relation (CheckoutEntry.mapper, t_customer_tours,
      primaryjoin=Customer.c.cust_id==CustomerTour.c.cust_id,
secondaryjoin=and_(CustomerTour.c.start_date <= CheckoutEntry.c.ts_checkout, CoreDb.CustomerTour.c.finish_date >= CheckoutEntry.c.ts_checkout)))
it generates the following error:

ArgumentError: No syncrules generated for join criterion
customer_tours.start_date <= checkout_trail.ts_checkout AND customer_tours.finish_date >= checkout_trail.ts_checkout

It turns out that that property is, well, not what I wanted in the first place (there's no explicit 1:1 relationship between Customer and CustomerTour, amongst other things) but I am pretty curious what a syncrule is, what causes it to be generated (or not generated), and, if I encounter it again, what
should I look for?

I'm sure it must make sense to /someone/, but as a user I'm left scratching my
head :)

Cheers,
-G




-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel? cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users



-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to