From ec0fafc7b01839c2fac7f93cb2e0a92aa3e1c41a Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 11 Mar 2010 16:18:37 -0500 Subject: [PATCH] added better typing for integer expressions, since integer is implementing _DateAffinity --- lib/sqlalchemy/types.py | 23 ++++++++++++++++++++++- test/sql/test_types.py | 5 +++++ 2 files changed, 27 insertions(+), 1 deletion(-) 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)]) -- 2.47.3