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