[Sqlalchemy-commits] [1045] sqlalchemy/trunk/test: adjustment to compile synchronizers which allows
Brought to you by:
zzzeek
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:':';} #msg dl, #msg dt, #msg ul, #msg li { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[1045] sqlalchemy/trunk/test: adjustment to compile synchronizers which allows many-to-many synchronize to work even when one side of the relation has both tables in it (new unittest will be added to inheritance.py to show this...)</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1045</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-02-26 00:14:12 -0600 (Sun, 26 Feb 2006)</dd> </dl> <h3>Log Message</h3> <pre>adjustment to compile synchronizers which allows many-to-many synchronize to work even when one side of the relation has both tables in it (new unittest will be added to inheritance.py to show this...)</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemytrunklibsqlalchemymappingpropertiespy">sqlalchemy/trunk/lib/sqlalchemy/mapping/properties.py</a></li> <li><a href="#sqlalchemytrunktestmapperpy">sqlalchemy/trunk/test/mapper.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemytrunklibsqlalchemymappingpropertiespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/mapping/properties.py (1044 => 1045)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/mapping/properties.py 2006-02-26 02:25:42 UTC (rev 1044) +++ sqlalchemy/trunk/lib/sqlalchemy/mapping/properties.py 2006-02-26 06:14:12 UTC (rev 1045) </span><span class="lines">@@ -171,7 +171,6 @@ </span><span class="cx"> else: </span><span class="cx"> if self.primaryjoin is None: </span><span class="cx"> self.primaryjoin = sql.join(parent.table, self.target).onclause </span><del>- </del><span class="cx"> # if the foreign key wasnt specified and theres no assocaition table, try to figure </span><span class="cx"> # out who is dependent on who. we dont need all the foreign keys represented in the join, </span><span class="cx"> # just one of them. </span><span class="lines">@@ -572,7 +571,10 @@ </span><span class="cx"> elif self.direction == PropertyLoader.MANYTOONE: </span><span class="cx"> self.syncrules.append(SyncRule(self.mapper, tt, pt, dest_mapper=self.parent)) </span><span class="cx"> else: </span><del>- raise AssertionError("assert failed") </del><ins>+ if visiting is self.primaryjoin: + self.syncrules.append(SyncRule(self.parent, pt, st, direction=PropertyLoader.ONETOMANY)) + else: + self.syncrules.append(SyncRule(self.mapper, tt, st, direction=PropertyLoader.MANYTOONE)) </ins><span class="cx"> elif pt and st: </span><span class="cx"> self.syncrules.append(SyncRule(self.parent, pt, st, direction=PropertyLoader.ONETOMANY)) </span><span class="cx"> elif tt and st: </span><span class="lines">@@ -580,8 +582,10 @@ </span><span class="cx"> </span><span class="cx"> self.syncrules = [] </span><span class="cx"> processor = BinaryVisitor(compile) </span><ins>+ visiting = self.primaryjoin </ins><span class="cx"> self.primaryjoin.accept_visitor(processor) </span><span class="cx"> if self.secondaryjoin is not None: </span><ins>+ visiting = self.secondaryjoin </ins><span class="cx"> self.secondaryjoin.accept_visitor(processor) </span><span class="cx"> if len(self.syncrules) == 0: </span><span class="cx"> raise ArgumentError("No syncrules generated for join criterion " + str(self.primaryjoin)) </span><span class="lines">@@ -622,6 +626,7 @@ </span><span class="cx"> self.direction = direction </span><span class="cx"> self.dest_mapper = dest_mapper </span><span class="cx"> self.dest_column = dest_column </span><ins>+ #print "SyncRule", source_mapper, source_column, dest_column, dest_mapper, direction </ins><span class="cx"> </span><span class="cx"> def execute(self, source, dest, obj, child, clearkeys): </span><span class="cx"> if self.direction is not None: </span></span></pre></div> <a id="sqlalchemytrunktestmapperpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/mapper.py (1044 => 1045)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/mapper.py 2006-02-26 02:25:42 UTC (rev 1044) +++ sqlalchemy/trunk/test/mapper.py 2006-02-26 06:14:12 UTC (rev 1045) </span><span class="lines">@@ -254,6 +254,29 @@ </span><span class="cx"> au = AddressUser.mapper.get_by(user_name='jack') </span><span class="cx"> self.assert_(au.email_address == 'ja...@gm...') </span><span class="cx"> </span><ins>+ def testinherits2(self): + class _Order(object): + pass + class _Address(object): + pass + class AddressUser(_Address): + pass + assign_mapper(_Order, orders) + assign_mapper(_Address, addresses) + assign_mapper(AddressUser, users, inherits = _Address.mapper, + properties = { + 'orders' : relation(_Order.mapper, lazy=False) + }) + l = AddressUser.mapper.select() + jack = l[0] + self.assert_(jack.user_name=='jack') + jack.email_address = 'ja...@gm...' + objectstore.commit() + objectstore.clear() + au = AddressUser.mapper.get_by(user_name='jack') + self.assert_(au.email_address == 'ja...@gm...') + + </ins><span class="cx"> class DeferredTest(MapperSuperTest): </span><span class="cx"> </span><span class="cx"> def testbasic(self): </span></span></pre> </div> </div> </body> </html> |