From: Mike Bayer Date: Thu, 11 Mar 2010 21:18:37 +0000 (-0500) Subject: added better typing for integer expressions, since integer is implementing _DateAffinity X-Git-Tag: rel_0_6beta2~57^2~9^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ec0fafc7b01839c2fac7f93cb2e0a92aa3e1c41a;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git added better typing for integer expressions, since integer is implementing _DateAffinity --- diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py index 5c4e2ca3f5..bf06ec99b7 100644 --- a/lib/sqlalchemy/types.py +++ b/lib/sqlalchemy/types.py @@ -33,6 +33,7 @@ from sqlalchemy.util import pickle from sqlalchemy.sql.visitors import Visitable from sqlalchemy import util from sqlalchemy import processors +import collections NoneType = type(None) if util.jython: @@ -820,12 +821,32 @@ class Integer(_DateAffinity, TypeEngine): @util.memoized_property def _expression_adaptations(self): + # TODO: need a dictionary object that will + # handle operators generically here, this is incomplete return { operators.add:{ Date:Date, + Integer:Integer, + Numeric:Numeric, }, operators.mul:{ - Interval:Interval + Interval:Interval, + Integer:Integer, + Numeric:Numeric, + }, + # Py2K + operators.div:{ + Integer:Integer, + Numeric:Numeric, + }, + # end Py2K + operators.truediv:{ + Integer:Integer, + Numeric:Numeric, + }, + operators.sub:{ + Integer:Integer, + Numeric:Numeric, }, } diff --git a/test/sql/test_types.py b/test/sql/test_types.py index d56a7552ea..fa8254a7a4 100644 --- a/test/sql/test_types.py +++ b/test/sql/test_types.py @@ -909,6 +909,11 @@ class ExpressionTest(TestBase, AssertsExecutionResults, AssertsCompiledSQL): expr = func.current_date() - column('foo', types.TIMESTAMP) eq_(expr.type._type_affinity, types.Interval) + + def test_expression_typing(self): + expr = column('bar', Integer) - 3 + + eq_(expr.type._type_affinity, Integer) def test_distinct(self): s = select([distinct(test_table.c.avalue)])