- changed status to invalid
CompileError after upgrading to r3866
Issue #894
resolved
I get following type of error after upgrading to r3866:
File "c:\svn\sqlalchemy\lib\sqlalchemy\engine\base.py", line 796, in execute
return Connection.executors[c](c)(self, object, multiparams, params)
File "c:\svn\sqlalchemy\lib\sqlalchemy\engine\base.py", line 847, in execute_clauseelement
return self._execute_compiled(elem.compile(dialect=self.dialect, column_keys=keys, inline=len(params) > 1), distilled_params=params)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\expression.py", line 1040, in compile
compiler.compile()
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 167, in compile
self.string = self.process(self.statement)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 175, in process
return meth(obj, **kwargs)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 522, in visit_select
t = self.process(whereclause)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 175, in process
return meth(obj, **kwargs)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 368, in visit_binary
return self.process(binary.left) + " " + op + " " + self.process(binary.right)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 175, in process
return meth(obj, **kwargs)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 220, in visit_grouping
return "(" + self.process(grouping.elem) + ")"
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 175, in process
return meth(obj, **kwargs)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 522, in visit_select
t = self.process(whereclause)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 175, in process
return meth(obj, **kwargs)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 306, in visit_clauselist
return sep.join([for s in [self.process(c) for c in clauselist.clauses](s) if s is not None])
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 175, in process
return meth(obj, **kwargs)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 368, in visit_binary
return self.process(binary.left) + " " + op + " " + self.process(binary.right)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 175, in process
return meth(obj, **kwargs)
File "c:\svn\sqlalchemy\lib\sqlalchemy\sql\compiler.py", line 380, in visit_bindparam
raise exceptions.CompileError("Bind parameter '%s' conflicts with unique bind parameter of the same name" % bindparam.key)
sqlalchemy.exceptions.CompileError: Bind parameter '{ANON 37553072 object_properties_name}' conflicts with unique bind parameter of the same name
This query uses no explicit bind params, and prior to r3866 used to work fine. There are 2 implicit (from column==literal type criteria) bind params created by sqlalchemy though, one in subquery, which i suspect is somehow connected to reason for the error. Generated SQL (postgres) looked like this before r3866:
SELECT user_domains.name,
(SELECT object_properties.value FROM object_properties
WHERE object_properties.id = user_domains.id
AND object_properties.name = %(object_properties_name)s)
AS anon_1 FROM user_domains
WHERE user_domains.name = %(user_domains_name)s
Comments (4)
-
repo owner -
Account Deleted - changed status to open
- removed status
Shortest test case i was able to come up with. Works fine with 261e76259ae6d7c9b99ce2a858e86ec8115ad81d, fails with 541b6772e9b8a09b10bd7a16fa9e2b7f693d1194:
from sqlalchemy import * metadata = MetaData() main = Table('main', metadata, Column('id', Integer, primary_key = True, autoincrement=False), Column('name', Unicode, nullable = False), ) sub = Table('sub', metadata, Column('id', Integer, ForeignKey(main.c.id), primary_key = True, autoincrement=False), Column('name', Unicode, primary_key = True), Column('value', Unicode, nullable = False) ) subquery = select(columns = [sub.c.name](sub.c.name), whereclause = and_(sub.c.id==main.c.id,sub.c.value==u'test')).as_scalar() mainquery = select(columns = [subquery](main.c.name,), whereclause = and_(subquery==u'test3')) print str(mainquery)
-
Account Deleted - attached te.py
Test case attached as file for convenience
-
repo owner - changed status to resolved
thats great, thanks. needed to adjust the contract for "unique" params a bit there, fixed 7bf90e2f4dc211423a409a747a2392922ed7a9c7.
- Log in to comment
i cant possibly do anything here without a working test script. over 1000 unit tests pass with the new code including hundreds of subqueries, so its not at all obvious what your specific situation is....
reopen this ticket with a test case.