コード例 #1
0
 def execute(self, query, *args, **kwargs):
     """
     Execute a CQL query on a remote node.
     
     Params:
     * query .........: CQL query string.
     * args ..........: Query parameters.
     * compression ...: Query compression type (optional).
     """
     def _error(err):
         if isinstance(err, InvalidRequestException):
             raise CQLException("Bad Request: %s" % err.why)
         elif isinstance(err, TApplicationException):
             raise CQLException("Internal application error")
         elif isinstance(err, SchemaDisagreementException):
             raise CQLException("schema versions disagree, (try again later).")
         else:
             raise CQLException(err)
         
     def _success(response):
         if response.type == CqlResultType.ROWS:
             return RowsProxy(response.rows,
                              self.keyspace,
                              self.column_family,
                              self.decoder)
         if response.type == CqlResultType.INT:
             return response.num
         return None
         
     if kwargs.has_key("compression"):
         compress = kwargs.get("compression").upper()
     else:
         compress = DEFAULT_COMPRESSION
     
     compressed_query = connection.compress_query(self.prepare(query, *args),
                                                  compress)
     request_compression = getattr(Compression, compress)
     
     d = self.client.execute_cql_query(compressed_query,
                                                  request_compression)
     d.addCallbacks(_success, _error)
     return d