Avoid UnicodeDecodeError when query string is unicode

Fixes PYTHON-76
This commit is contained in:
Tyler Hobbs
2014-06-26 16:47:02 -05:00
parent 392288aa2b
commit 9468f6bd8f
3 changed files with 11 additions and 1 deletions

View File

@@ -35,6 +35,7 @@ Bug Fixes
* Fix cassandra.concurrent behavior when dealing with automatic paging
(PYTHON-81)
* Properly defunct connections after protocol errors
* Avoid UnicodeDecodeError when query string is unicode (PYTHON-76)
2.0.2
=====

View File

@@ -1253,8 +1253,10 @@ class Session(object):
if isinstance(query, SimpleStatement):
query_string = query.query_string
if six.PY2 and isinstance(query_string, six.text_type):
query_string = query_string.encode('utf-8')
if parameters:
query_string = bind_params(query.query_string, parameters, self.encoders)
query_string = bind_params(query_string, parameters, self.encoders)
message = QueryMessage(
query_string, cl, query.serial_consistency_level,
fetch_size, timestamp=timestamp)

View File

@@ -436,3 +436,10 @@ class TypeTests(unittest.TestCase):
prepared = s.prepare("SELECT b FROM mytable WHERE a=?")
self.assertEqual(complete, s.execute(prepared, (2,))[0].b)
self.assertEqual(partial_result, s.execute(prepared, (3,))[0].b)
def test_unicode_query_string(self):
c = Cluster(protocol_version=PROTOCOL_VERSION)
s = c.connect()
query = u"SELECT * FROM system.schema_columnfamilies WHERE keyspace_name = 'ef\u2052ef' AND columnfamily_name = %s"
s.execute(query, (u"fe\u2051fe",))