Handle and utilize MD5 prepared query ID
This commit is contained in:
@@ -429,8 +429,9 @@ class ResultMessage(_MessageType):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def recv_results_prepared(cls, f):
|
def recv_results_prepared(cls, f):
|
||||||
query_id = read_short(f)
|
query_id = read_short(f)
|
||||||
|
md5_id = f.read(16)
|
||||||
column_metadata = cls.recv_results_metadata(f)
|
column_metadata = cls.recv_results_metadata(f)
|
||||||
return (query_id, column_metadata)
|
return (query_id, md5_id, column_metadata)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def recv_results_metadata(cls, f):
|
def recv_results_metadata(cls, f):
|
||||||
@@ -492,10 +493,11 @@ class PrepareMessage(_MessageType):
|
|||||||
class ExecuteMessage(_MessageType):
|
class ExecuteMessage(_MessageType):
|
||||||
opcode = 0x0A
|
opcode = 0x0A
|
||||||
name = 'EXECUTE'
|
name = 'EXECUTE'
|
||||||
params = ('query_id', 'query_params', 'consistency_level',)
|
params = ('query_id', 'md5_id', 'query_params', 'consistency_level',)
|
||||||
|
|
||||||
def send_body(self, f):
|
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))
|
write_short(f, len(self.query_params))
|
||||||
for param in self.query_params:
|
for param in self.query_params:
|
||||||
write_value(f, param)
|
write_value(f, param)
|
||||||
|
|||||||
@@ -38,24 +38,26 @@ class PreparedStatement(object):
|
|||||||
|
|
||||||
column_metadata = None
|
column_metadata = None
|
||||||
query_id = None
|
query_id = None
|
||||||
query = None
|
md5_id = None
|
||||||
|
query_string = None
|
||||||
keyspace = None
|
keyspace = None
|
||||||
|
|
||||||
routing_key_indexes = 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.column_metadata = column_metadata
|
||||||
self.query_id = query_id
|
self.query_id = query_id
|
||||||
|
self.md5_id = md5_id
|
||||||
self.routing_key_indexes = routing_key_indexes
|
self.routing_key_indexes = routing_key_indexes
|
||||||
self.query = query
|
self.query_string = query
|
||||||
self.keyspace = keyspace
|
self.keyspace = keyspace
|
||||||
|
|
||||||
@classmethod
|
@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:
|
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
|
partition_key_columns = None
|
||||||
routing_key_indexes = None
|
routing_key_indexes = None
|
||||||
@@ -78,7 +80,10 @@ class PreparedStatement(object):
|
|||||||
pass # we're missing a partition key component in the prepared
|
pass # we're missing a partition key component in the prepared
|
||||||
# statement; just leave routing_key_indexes as None
|
# 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):
|
class BoundStatement(Query):
|
||||||
@@ -107,6 +112,8 @@ class BoundStatement(Query):
|
|||||||
col_type = col_spec[-1]
|
col_type = col_spec[-1]
|
||||||
self.values.append(col_type.serialize(value))
|
self.values.append(col_type.serialize(value))
|
||||||
|
|
||||||
|
return self
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def routing_key(self):
|
def routing_key(self):
|
||||||
if not self.prepared_statement.routing_key_indexes:
|
if not self.prepared_statement.routing_key_indexes:
|
||||||
|
|||||||
Reference in New Issue
Block a user