Handle and utilize MD5 prepared query ID
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user