ResourceClosedError for all "this
connection/transaction/result is closed" types of
errors.
-
+
+ - the text() construct, if placed in a column
+ oriented situation, will at least return NULLTYPE
+ for its type instead of None, allowing it to
+ be used a little more freely for ad-hoc column
+ expressions than before. literal_column()
+ is still the better choice, however.
+
- declarative
- if @classproperty is used with a regular class-bound
mapper property attribute, it will be called to get the
The expressions used for THEN and ELSE,
when specified as strings, will be interpreted
as bound values. To specify textual SQL expressions
- for these, use the literal_column(<string>) or
- text(<string>) construct.
+ for these, use the :func:`literal_column`
+ construct.
The expressions used for the WHEN criterion
may only be literal strings when "value" is
if self.typemap is not None and len(self.typemap) == 1:
return list(self.typemap)[0]
else:
- return None
+ return sqltypes.NULLTYPE
def self_group(self, against=None):
if against is operators.in_op:
-from sqlalchemy.test.testing import assert_raises, assert_raises_message
+from sqlalchemy.test.testing import assert_raises, assert_raises_message, eq_
import sys
from sqlalchemy import *
from sqlalchemy.test import *
self.assert_compile(case([("x", "y")], value=t.c.col1), "CASE test.col1 WHEN :param_1 THEN :param_2 END")
self.assert_compile(case([(t.c.col1==7, "y")], else_="z"), "CASE WHEN (test.col1 = :col1_1) THEN :param_1 ELSE :param_2 END")
-
+
+ def test_text_doesnt_explode(self):
+
+ for s in [
+ select([case([(info_table.c.info == 'pk_4_data',
+ text("'yes'"))], else_=text("'no'"
+ ))]).order_by(info_table.c.info),
+
+ select([case([(info_table.c.info == 'pk_4_data',
+ literal_column("'yes'"))], else_=literal_column("'no'"
+ ))]).order_by(info_table.c.info),
+
+ ]:
+ eq_(s.execute().fetchall(), [
+ (u'no', ), (u'no', ), (u'no', ), (u'yes', ),
+ (u'no', ), (u'no', ),
+ ])
+
+
@testing.fails_on('firebird', 'FIXME: unknown')
@testing.fails_on('maxdb', 'FIXME: unknown')