Multiplying CASE statement by field generates TypeError: can only concatenate list (not "itertools.chain") to list

Issue #1388 resolved
Former user created an issue

The following code works under 0.5.2 but produces an error under 0.5.3:

from sqlalchemy import Table, Column, Integer, MetaData, create_engine, case, select

engine = create_engine('sqlite:///:memory:')

metadata = MetaData()
users_table = Table('users', metadata,
     Column('id', Integer, primary_key=True),
     Column('foo', Integer),
)

metadata.create_all(engine)

print select([(users_table.c.foo)*case([(users_table.c.id>10, 1), (users_table.c.id<10, 2)](users_table.c.id,))])

The desired SQL is:

SELECT users.id, users.foo * CASE WHEN (users.id > 10) THEN 1 WHEN (users.id < 10) THEN 2 END AS anon_1
FROM users

Comments (5)

  1. Former user Account Deleted

    The test code is self contained and can be run by simply pasting it into a file. The traceback is:

    Traceback (most recent call last):
      File "error_test.py", line 13, in <module>
        print select([(users_table.c.foo)*case([(users_table.c.id>10, 1), (users_table.c.id<10, 2)](users_table.c.id,))])
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/sql/expression.py", line 246, in select
        s = Select(columns, whereclause=whereclause, from_obj=from_obj, **kwargs)
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/sql/expression.py", line 3218, in __init__
        self._froms.update(_from_objects(*self._raw_columns))
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/sql/expression.py", line 886, in _from_objects
        return itertools.chain(*[for element in elements](element._from_objects))
      File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/sql/expression.py", line 2384, in _from_objects
        return self.left._from_objects + self.right._from_objects
    TypeError: can only concatenate list (not "itertools.chain") to list
    
  2. Log in to comment