Handle and utilize MD5 prepared query ID

This commit is contained in:
Tyler Hobbs
2013-06-26 12:47:22 -05:00
parent 0ddc388a70
commit 3743029c9d
2 changed files with 19 additions and 10 deletions

View File

@@ -429,8 +429,9 @@ class ResultMessage(_MessageType):
@classmethod
def recv_results_prepared(cls, f):
query_id = read_short(f)
md5_id = f.read(16)
column_metadata = cls.recv_results_metadata(f)
return (query_id, column_metadata)
return (query_id, md5_id, column_metadata)
@classmethod
def recv_results_metadata(cls, f):
@@ -492,10 +493,11 @@ class PrepareMessage(_MessageType):
class ExecuteMessage(_MessageType):
opcode = 0x0A
name = 'EXECUTE'
params = ('query_id', 'query_params', 'consistency_level',)
params = ('query_id', 'md5_id', 'query_params', 'consistency_level',)
def send_body(self, f):
write_int(f, self.query_id)
write_short(f, self.query_id)
f.write(self.md5_id)
write_short(f, len(self.query_params))
for param in self.query_params:
write_value(f, param)

View File

@@ -38,24 +38,26 @@ class PreparedStatement(object):
column_metadata = None
query_id = None
query = None
md5_id = None
query_string = None
keyspace = None
routing_key_indexes = None
consistency_level = None
consistency_level = ConsistencyLevel.ONE
def __init__(self, column_metadata, query_id, routing_key_indexes, query, keyspace):
def __init__(self, column_metadata, query_id, md5_id, routing_key_indexes, query, keyspace):
self.column_metadata = column_metadata
self.query_id = query_id
self.md5_id = md5_id
self.routing_key_indexes = routing_key_indexes
self.query = query
self.query_string = query
self.keyspace = keyspace
@classmethod
def from_message(cls, query_id, column_metadata, cluster_metadata, query, keyspace):
def from_message(cls, query_id, md5_id, column_metadata, cluster_metadata, query, keyspace):
if not column_metadata:
return PreparedStatement(column_metadata, query_id, None, query, keyspace)
return PreparedStatement(column_metadata, query_id, md5_id, None, query, keyspace)
partition_key_columns = None
routing_key_indexes = None
@@ -78,7 +80,10 @@ class PreparedStatement(object):
pass # we're missing a partition key component in the prepared
# statement; just leave routing_key_indexes as None
return PreparedStatement(column_metadata, query_id, routing_key_indexes, query, keyspace)
return PreparedStatement(column_metadata, query_id, md5_id, routing_key_indexes, query, keyspace)
def bind(self, values):
return BoundStatement(self).bind(values)
class BoundStatement(Query):
@@ -107,6 +112,8 @@ class BoundStatement(Query):
col_type = col_spec[-1]
self.values.append(col_type.serialize(value))
return self
@property
def routing_key(self):
if not self.prepared_statement.routing_key_indexes: