diff --git a/cassandra/decoder.py b/cassandra/decoder.py index de836eb0..515f0874 100644 --- a/cassandra/decoder.py +++ b/cassandra/decoder.py @@ -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) diff --git a/cassandra/query.py b/cassandra/query.py index 162cf204..ea68f384 100644 --- a/cassandra/query.py +++ b/cassandra/query.py @@ -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: