]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- added op() operator to instrumented attributes; i.e.
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 18 Nov 2007 22:19:05 +0000 (22:19 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 18 Nov 2007 22:19:05 +0000 (22:19 +0000)
User.name.op('ilike')('%somename%') [ticket:767]

CHANGES
lib/sqlalchemy/sql/expression.py
lib/sqlalchemy/sql/operators.py
test/orm/query.py

diff --git a/CHANGES b/CHANGES
index fef0c241766e7c6a9f135512e918850203155bf7..6a6963ab85dac1dcb989302ce9200f84195de6c7 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -84,6 +84,9 @@ CHANGES
     "attribute_names", a list of individual attribute keynames to be refreshed
     or expired, allowing partial reloads of attributes on an already-loaded 
     instance. [ticket:802]
+  
+  - added op() operator to instrumented attributes; i.e. 
+    User.name.op('ilike')('%somename%') [ticket:767]
     
   - Mapped classes may now define __eq__, __hash__, and __nonzero__ methods
     with arbitrary semantics.  The orm now handles all mapped instances on
index fbef02857dcb9f6b3a54e829fd74969b70d29f8a..c7ab342722f08e43c6693a289c7976b0fc341be7 100644 (file)
@@ -1049,7 +1049,12 @@ class Operators(object):
 
     def __invert__(self):
         return self.operate(operators.inv)
-
+    
+    def op(self, opstring):
+        def op(b):
+            return self.operate(operators.op, opstring, b)
+        return op
+        
     def clause_element(self):
         raise NotImplementedError()
 
index 78159697be0ffc72bdf25c427f43b032af384341..4ee5f4a189aa424a6c244e1383c800f3f97afdd7 100644 (file)
@@ -21,6 +21,9 @@ def is_():
 def isnot():
     raise NotImplementedError()
 
+def op(a, opstring, b):
+    return a.op(opstring)(b)
+
 def like_op(a, b):
     return a.like(b)
 
index cea8d1ac2e3a3eb0cca2c71e7fb5829b6ea6fdf8..d60f72c639cc2480f2ef1d23f2ac8780639f8914 100644 (file)
@@ -209,6 +209,9 @@ class OperatorTest(QueryTest):
                              "\n'" + compiled + "'\n does not match\n'" +
                              fwd_sql + "'\n or\n'" + rev_sql + "'")
 
+    def test_op(self):
+        assert str(User.name.op('ilike')('17').compile(dialect=default.DefaultDialect())) == "users.name ilike :users_name"
+        
     def test_in(self):
          self._test(User.id.in_(['a', 'b']),
                     "users.id IN (:users_id, :users_id_1)")