[Sqlalchemy-commits] [1117] sqlalchemy/trunk: added 'noninherited table' prop to mapper indicating t
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-03-09 00:24:27
|
<!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>[1117] sqlalchemy/trunk: added 'noninherited table' prop to mapper indicating the "lead" table, in the case of</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1117</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-03-08 18:24:15 -0600 (Wed, 08 Mar 2006)</dd> </dl> <h3>Log Message</h3> <pre>added 'noninherited table' prop to mapper indicating the "lead" table, in the case of inheritance. relations now create priamry/secondary joins against that lead table. if you want to create it against an inherited table, use explicit join conditions. added 'correlate' argument to CompoundSelect to get polymorph example working again.</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemytrunkCHANGES">sqlalchemy/trunk/CHANGES</a></li> <li><a href="#sqlalchemytrunkexamplespolymorphpolymorphpy">sqlalchemy/trunk/examples/polymorph/polymorph.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemymappingmapperpy">sqlalchemy/trunk/lib/sqlalchemy/mapping/mapper.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemymappingpropertiespy">sqlalchemy/trunk/lib/sqlalchemy/mapping/properties.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemysqlpy">sqlalchemy/trunk/lib/sqlalchemy/sql.py</a></li> <li><a href="#sqlalchemytrunktestinheritancepy">sqlalchemy/trunk/test/inheritance.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemytrunkCHANGES"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/CHANGES (1116 => 1117)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/CHANGES 2006-03-08 22:32:55 UTC (rev 1116) +++ sqlalchemy/trunk/CHANGES 2006-03-09 00:24:15 UTC (rev 1117) </span><span class="lines">@@ -1,3 +1,5 @@ </span><ins>+0.1.4 + </ins><span class="cx"> 0.1.3 </span><span class="cx"> - completed "post_update" feature, will add a second update statement before inserts </span><span class="cx"> and after deletes in order to reconcile a relationship without any dependencies </span></span></pre></div> <a id="sqlalchemytrunkexamplespolymorphpolymorphpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/examples/polymorph/polymorph.py (1116 => 1117)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/examples/polymorph/polymorph.py 2006-03-08 22:32:55 UTC (rev 1116) +++ sqlalchemy/trunk/examples/polymorph/polymorph.py 2006-03-09 00:24:15 UTC (rev 1117) </span><span class="lines">@@ -6,8 +6,8 @@ </span><span class="cx"> # extend from a common base class, although this same approach can be used </span><span class="cx"> # with </span><span class="cx"> </span><del>-#db = create_engine('sqlite://', echo=True, echo_uow=False) -db = create_engine('postgres://user=scott&password=tiger&host=127.0.0.1&database=test', echo=True, echo_uow=False) </del><ins>+db = create_engine('sqlite://', echo=True, echo_uow=False) +#db = create_engine('postgres://user=scott&password=tiger&host=127.0.0.1&database=test', echo=True, echo_uow=False) </ins><span class="cx"> </span><span class="cx"> # a table to store companies </span><span class="cx"> companies = Table('companies', db, </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemymappingmapperpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/mapping/mapper.py (1116 => 1117)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/mapping/mapper.py 2006-03-08 22:32:55 UTC (rev 1116) +++ sqlalchemy/trunk/lib/sqlalchemy/mapping/mapper.py 2006-03-09 00:24:15 UTC (rev 1117) </span><span class="lines">@@ -68,8 +68,10 @@ </span><span class="cx"> self._synchronizer = sync.ClauseSynchronizer(self, self, sync.ONETOMANY) </span><span class="cx"> self._synchronizer.compile(self.table.onclause, inherits.tables, TableFinder(table)) </span><span class="cx"> self.inherits = inherits </span><ins>+ self.noninherited_table = table </ins><span class="cx"> else: </span><span class="cx"> self.primarytable = self.table </span><ins>+ self.noninherited_table = self.table </ins><span class="cx"> self._synchronizer = None </span><span class="cx"> self.inherits = None </span><span class="cx"> </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemymappingpropertiespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/mapping/properties.py (1116 => 1117)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/mapping/properties.py 2006-03-08 22:32:55 UTC (rev 1116) +++ sqlalchemy/trunk/lib/sqlalchemy/mapping/properties.py 2006-03-09 00:24:15 UTC (rev 1117) </span><span class="lines">@@ -172,17 +172,12 @@ </span><span class="cx"> # if join conditions were not specified, figure them out based on foreign keys </span><span class="cx"> if self.secondary is not None: </span><span class="cx"> if self.secondaryjoin is None: </span><del>- self.secondaryjoin = sql.join(self.target, self.secondary).onclause </del><ins>+ self.secondaryjoin = sql.join(self.mapper.noninherited_table, self.secondary).onclause </ins><span class="cx"> if self.primaryjoin is None: </span><del>- self.primaryjoin = sql.join(parent.table, self.secondary).onclause - tf = mapper.TableFinder(self.secondaryjoin, check_columns=True) - tf2 = mapper.TableFinder(self.primaryjoin, check_columns=True) - for t in tf2: - if t is not self.secondary and t in tf: - raise ArgumentError("Ambiguous join conditions generated between '%s' and '%s' (primaryjoin='%s', secondaryjoin='%s'); please specify explicit primaryjoin and/or secondaryjoin arguments to property '%s'" % (parent.table.id, self.target.id, self.primaryjoin, self.secondaryjoin, self.key)) </del><ins>+ self.primaryjoin = sql.join(parent.noninherited_table, self.secondary).onclause </ins><span class="cx"> else: </span><span class="cx"> if self.primaryjoin is None: </span><del>- self.primaryjoin = sql.join(parent.table, self.target).onclause </del><ins>+ self.primaryjoin = sql.join(parent.noninherited_table, self.target).onclause </ins><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></pre></div> <a id="sqlalchemytrunklibsqlalchemysqlpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/sql.py (1116 => 1117)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/sql.py 2006-03-08 22:32:55 UTC (rev 1116) +++ sqlalchemy/trunk/lib/sqlalchemy/sql.py 2006-03-09 00:24:15 UTC (rev 1117) </span><span class="lines">@@ -1132,6 +1132,7 @@ </span><span class="cx"> self.selects = selects </span><span class="cx"> self.use_labels = kwargs.pop('use_labels', False) </span><span class="cx"> self.parens = kwargs.pop('parens', False) </span><ins>+ self.correlate = kwargs.pop('correlate', False) </ins><span class="cx"> self.oid_column = selects[0].oid_column </span><span class="cx"> for s in self.selects: </span><span class="cx"> s.group_by(None) </span></span></pre></div> <a id="sqlalchemytrunktestinheritancepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/inheritance.py (1116 => 1117)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/inheritance.py 2006-03-08 22:32:55 UTC (rev 1116) +++ sqlalchemy/trunk/test/inheritance.py 2006-03-09 00:24:15 UTC (rev 1117) </span><span class="lines">@@ -132,8 +132,8 @@ </span><span class="cx"> #'id':[bar.c.bid, foo.c.id] </span><span class="cx"> }) </span><span class="cx"> </span><del>- Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar, primaryjoin=bar.c.bid==foo_bar.c.bar_id, secondaryjoin=foo_bar.c.foo_id==foo.c.id, lazy=False)) - #Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar, lazy=False)) </del><ins>+ #Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar, primaryjoin=bar.c.bid==foo_bar.c.bar_id, secondaryjoin=foo_bar.c.foo_id==foo.c.id, lazy=False)) + Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar, lazy=False)) </ins><span class="cx"> </span><span class="cx"> b = Bar('barfoo') </span><span class="cx"> objectstore.commit() </span><span class="lines">@@ -209,8 +209,8 @@ </span><span class="cx"> return "Bar id %d, data %s" % (self.id, self.data) </span><span class="cx"> </span><span class="cx"> Bar.mapper = mapper(Bar, bar, inherits=Foo.mapper, properties={ </span><del>- 'foos' :relation(Foo.mapper, bar_foo, primaryjoin=bar.c.id==bar_foo.c.bar_id, lazy=False) -# 'foos' :relation(Foo.mapper, bar_foo, lazy=True) </del><ins>+ #'foos' :relation(Foo.mapper, bar_foo, primaryjoin=bar.c.id==bar_foo.c.bar_id, lazy=False) + 'foos' :relation(Foo.mapper, bar_foo, lazy=True) </ins><span class="cx"> }) </span><span class="cx"> </span><span class="cx"> b = Bar('bar #1') </span><span class="lines">@@ -239,8 +239,10 @@ </span><span class="cx"> return "Blub id %d, data %s, bars %s, foos %s" % (self.id, self.data, repr([b for b in self.bars]), repr([f for f in self.foos])) </span><span class="cx"> </span><span class="cx"> Blub.mapper = mapper(Blub, blub, inherits=Bar.mapper, properties={ </span><del>- 'bars':relation(Bar.mapper, blub_bar, primaryjoin=blub.c.id==blub_bar.c.blub_id, lazy=False), - 'foos':relation(Foo.mapper, blub_foo, primaryjoin=blub.c.id==blub_foo.c.blub_id, lazy=False), </del><ins>+# 'bars':relation(Bar.mapper, blub_bar, primaryjoin=blub.c.id==blub_bar.c.blub_id, lazy=False), +# 'foos':relation(Foo.mapper, blub_foo, primaryjoin=blub.c.id==blub_foo.c.blub_id, lazy=False), + 'bars':relation(Bar.mapper, blub_bar, lazy=False), + 'foos':relation(Foo.mapper, blub_foo, lazy=False), </ins><span class="cx"> }) </span><span class="cx"> </span><span class="cx"> useobjects = True </span></span></pre> </div> </div> </body> </html> |