really great news, without even any coffee I came up with a patch for this one in less than 30 minutes. I need to create some tests, maybe try to figure out why this hasn't been seen more frequently and something should be committed today. It's on the ticket here: http://www.sqlalchemy.org/trac/ticket/2453#comment:1
On Mar 30, 2012, at 9:35 AM, Michael Bayer wrote: > well the good news is that these cloning bugs, which have the property that > each time I spend four hours fixing one I'm absolutely convinced it's the > last (a process which began at least four years ago), are my highest priority > since there are usually zero workarounds and also indicate there's many other > places that they can be occurring. > > The call to s._from_obj.union(s._froms) regards keeping a set around of all > the copies of from objects. At the end of the day a particular FROM can be > in these sets any number of times as various clones of itself and is normal - > the actual list of FROMs to be rendered always has a unique list. > > The issue here centers around Select._froms at line 4769. What happens > here is a SELECT that contains a selectable Q, and a JOIN of Q to R, should > be "hiding" the instance of Q by itself. But the "hiding" logic in this case > isn't matching up the cloned join of Q to R to the Q by itself, so you get > "Q, Q JOIN R" in the FROM clause. The point of _from_cloned is to keep > track of all the copies of Q. > > anyway its ticket http://www.sqlalchemy.org/trac/ticket/2453, I'd like to get > this out today but hopefully it won't be too hard. > > On Mar 30, 2012, at 6:50 AM, Christoph Rauch wrote: > >> Hello List, >> >> the problem I am facing is that _deep_deannotate, which is used in >> ColumnProperty.__init__, breaks the FROM clause of my select() object if >> this select() has a JOIN (either left or right, doesn't matter) as from_obj >> in it, _where the initial table is aliased_. >> >> To illustrate I'll append my testcase. I traced it down to >> Select._copy_internals(), line 4907 in sqlalchemy.sql.expression, where the >> call to s._from_obj.union(s._froms) will happily add an the initial table _a >> second time_ to the FROM clause, (it is already part of the join object) >> resulting in an error from the database because the alias is duplicated in >> the generated SQL. >> >> Taking any hints on how to fix this. :) >> >> Reproduced in 0.7.6 >> >> thanks, >> Christoph >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To view this discussion on the web visit >> https://groups.google.com/d/msg/sqlalchemy/-/w1P2N5cbeL4J. >> To post to this group, send email to sqlalchemy@googlegroups.com. >> To unsubscribe from this group, send email to >> sqlalchemy+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/sqlalchemy?hl=en. >> <deep_deannotate_and_aliased_tables.py> > > > -- > 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 > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. -- 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 sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.