Manlio Perillo wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hi.
>
> It seems there is a bug with SQL CASE support in SQLAlchemy (I'm testing
> using trunk).
>
> Here is the original SQL statements:
>
> CREATE TABLE test (
>     x INTEGER PRIMARY KEY
> );
>
> SELECT
>   CASE WHEN 'true'
>   THEN (SELECT EXISTS (SELECT x FROM test))
>   END;
>
>
> And here is the Python code:
>
> from sqlalchemy import schema, types, sql, create_engine
>
> metadata = schema.MetaData()
> test = schema.Table(
>     'test', metadata,
>     schema.Column('x', types.Integer, primary_key=True)
>     )
>
> engine = create_engine('sqlite://')
>
> subquery = sql.exists(test.select().as_scalar())
> clause = sql.case([(True, subquery.select().as_scalar)])
> query = clause.select()
>
> engine.execute(query)

its more SQLA not warning you about an argument it doesn't like and then
it leading into problems.  it should raise an error earlier.   basically
exists() is like a select() and accepts the list of column expressions as
a list.   if you were to pass your select inside of a [], you'd get a
valid SQL expression, though with two levels of "select". 
sql.exists([test])  or exists().select_from(test) would be more effective.

ill try to catch that issue now.


>
>
> I get an error:
>
> Traceback (most recent call last):
>   File "case.py", line 13, in <module>
>     subquery = sql.exists(test.select().as_scalar())
>   File
> "/usr/local/lib/python2.5/site-packages/sqlalchemy/sql/expression.py",
> line 520, in exists
>     return _Exists(*args, **kwargs)
>   File
> "/usr/local/lib/python2.5/site-packages/sqlalchemy/sql/expression.py",
> line 2688, in __init__
>     s = select(*args, **kwargs).as_scalar().self_group()
>   File
> "/usr/local/lib/python2.5/site-packages/sqlalchemy/sql/expression.py",
> line 238, in select
>     return Select(columns, whereclause=whereclause, from_obj=from_obj,
> **kwargs)
>   File
> "/usr/local/lib/python2.5/site-packages/sqlalchemy/sql/expression.py",
> line 3492, in __init__
>     if columns:
>   File
> "/usr/local/lib/python2.5/site-packages/sqlalchemy/sql/expression.py",
> line 1289, in __nonzero__
>     raise TypeError("Boolean value of this clause is not defined")
> TypeError: Boolean value of this clause is not defined
>
>
> I'm not sure if my code is correct.
> If it is not correct, what it the correct method to define that query?
>
>
>
> Thanks  Manlio
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iEYEARECAAYFAkth7S4ACgkQscQJ24LbaUQEXgCggBUV3orSFAPPK155cVHplpb4
> 3U0An1djFkgt3LE6LHQOCHrepVt4F0Vc
> =hL1p
> -----END PGP SIGNATURE-----
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@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 sqlalch...@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.

Reply via email to