summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-06-08 17:38:37 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-06-08 17:38:37 +0000
commit6d22c9318196eee8d5e5e6646a26f9953095a0e7 (patch)
tree529e7aede926c62d7074f3bf3a6ed9a53998a356 /lib/sqlalchemy/sql.py
parentc133b136e14c9ad7023f396abbcdd109513407db (diff)
downloadsqlalchemy-6d22c9318196eee8d5e5e6646a26f9953095a0e7.tar.gz
separated standalone between(), column.between(), put literal checking for both, favor column.between()
Diffstat (limited to 'lib/sqlalchemy/sql.py')
-rw-r--r--lib/sqlalchemy/sql.py21
1 files changed, 16 insertions, 5 deletions
diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py
index 48c9f8754..7ac28babe 100644
--- a/lib/sqlalchemy/sql.py
+++ b/lib/sqlalchemy/sql.py
@@ -125,10 +125,15 @@ def not_(clause):
clause.parens=True
return BooleanExpression(TextClause("NOT"), clause, None)
-def between_(ctest, cleft, cright):
- """ returns BETWEEN predicate clause (clausetest BETWEEN clauseleft AND clauseright) """
- return BooleanExpression(ctest, and_(cleft, cright), 'BETWEEN')
-between = between_
+def between(ctest, cleft, cright):
+ """ returns BETWEEN predicate clause (clausetest BETWEEN clauseleft AND clauseright).
+
+ this is better called off a ColumnElement directly, i.e.
+
+ column.between(value1, value2).
+ """
+ return BooleanExpression(ctest, and_(_check_literal(cleft, ctest.type), _check_literal(cright, ctest.type)), 'BETWEEN')
+between_ = between
def case(whens, value=None, else_=None):
""" SQL CASE statement -- whens are a sequence of pairs to be translated into "when / then" clauses;
@@ -168,6 +173,12 @@ def union_all(*selects, **params):
def alias(*args, **params):
return Alias(*args, **params)
+def _check_literal(value, type):
+ if _is_literal(value):
+ return literal(value, type)
+ else:
+ return value
+
def literal(value, type=None):
"""returns a literal clause, bound to a bind parameter.
@@ -551,7 +562,7 @@ class CompareMixin(object):
def distinct(self):
return CompoundClause(None,"DISTINCT", self)
def between(self, cleft, cright):
- return between_(self, self._check_literal(cleft), self._check_literal(cright))
+ return BooleanExpression(self, and_(self._check_literal(cleft), self._check_literal(cright)), 'BETWEEN')
def op(self, operator):
return lambda other: self._compare(operator, other)
# and here come the math operators: