]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
lock in replacing '%' with '%%'
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 4 Feb 2008 22:35:29 +0000 (22:35 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 4 Feb 2008 22:35:29 +0000 (22:35 +0000)
lib/sqlalchemy/sql/compiler.py
test/sql/select.py

index 5cfb42a6319921450be9a1f9aec14df64a933b2b..cdb6804317c68fa2be2ec60fd205216491166ca8 100644 (file)
@@ -281,7 +281,8 @@ class DefaultCompiler(engine.Compiled):
     def escape_literal_column(self, text):
         """provide escaping for the literal_column() construct."""
 
-        return re.sub('%', '%%', text)
+        # TODO: some dialects might need different behavior here
+        return text.replace('%', '%%')
         
     def visit_fromclause(self, fromclause, **kwargs):
         return fromclause.name
index 9d561eb2d4b926408d3b2efcd1b6a2da00a24c91..69d39ede65f63fc7dda3acdfc46f03b3393f3bea 100644 (file)
@@ -440,29 +440,29 @@ sq.myothertable_othername AS sq_myothertable_othername FROM (" + sqstring + ") A
 
     def test_composed_string_comparators(self):
         self.assert_compile(
-            table1.c.name.contains('jo'), "mytable.name LIKE '%' || :mytable_name_1 || '%'" , checkparams = {'mytable_name_1': u'jo'},
+            table1.c.name.contains('jo'), "mytable.name LIKE '%%' || :mytable_name_1 || '%%'" , checkparams = {'mytable_name_1': u'jo'},
         )
         self.assert_compile(
-            table1.c.name.contains('jo'), "mytable.name LIKE concat(concat('%', %s), '%')" , checkparams = {'mytable_name_1': u'jo'},
+            table1.c.name.contains('jo'), "mytable.name LIKE concat(concat('%%', %s), '%%')" , checkparams = {'mytable_name_1': u'jo'},
             dialect=mysql.dialect()
         )
         self.assert_compile(
-            table1.c.name.endswith('hn'), "mytable.name LIKE '%' || :mytable_name_1", checkparams = {'mytable_name_1': u'hn'},
+            table1.c.name.endswith('hn'), "mytable.name LIKE '%%' || :mytable_name_1", checkparams = {'mytable_name_1': u'hn'},
         )
         self.assert_compile(
-            table1.c.name.endswith('hn'), "mytable.name LIKE concat('%', %s)",
+            table1.c.name.endswith('hn'), "mytable.name LIKE concat('%%', %s)",
             checkparams = {'mytable_name_1': u'hn'}, dialect=mysql.dialect()
         )
         self.assert_compile(
-            table1.c.name.startswith(u"hi \xf6 \xf5"), "mytable.name LIKE :mytable_name_1 || '%'",
+            table1.c.name.startswith(u"hi \xf6 \xf5"), "mytable.name LIKE :mytable_name_1 || '%%'",
             checkparams = {'mytable_name_1': u'hi \xf6 \xf5'},
         )
-        self.assert_compile(column('name').endswith(text("'foo'")), "name LIKE '%' || 'foo'"  )
-        self.assert_compile(column('name').endswith(literal_column("'foo'")), "name LIKE '%' || 'foo'"  )
-        self.assert_compile(column('name').startswith(text("'foo'")), "name LIKE 'foo' || '%'"  )
-        self.assert_compile(column('name').startswith(text("'foo'")), "name LIKE concat('foo', '%')", dialect=mysql.dialect())
-        self.assert_compile(column('name').startswith(literal_column("'foo'")), "name LIKE 'foo' || '%'"  )
-        self.assert_compile(column('name').startswith(literal_column("'foo'")), "name LIKE concat('foo', '%')", dialect=mysql.dialect())
+        self.assert_compile(column('name').endswith(text("'foo'")), "name LIKE '%%' || 'foo'"  )
+        self.assert_compile(column('name').endswith(literal_column("'foo'")), "name LIKE '%%' || 'foo'"  )
+        self.assert_compile(column('name').startswith(text("'foo'")), "name LIKE 'foo' || '%%'"  )
+        self.assert_compile(column('name').startswith(text("'foo'")), "name LIKE concat('foo', '%%')", dialect=mysql.dialect())
+        self.assert_compile(column('name').startswith(literal_column("'foo'")), "name LIKE 'foo' || '%%'"  )
+        self.assert_compile(column('name').startswith(literal_column("'foo'")), "name LIKE concat('foo', '%%')", dialect=mysql.dialect())
 
     def test_multiple_col_binds(self):
         self.assert_compile(