cassandra-python-driver v3.1.0 Release Notes

  • March 10, 2016

    ๐Ÿ”‹ Features

    • Pass name of server auth class to AuthProvider (PYTHON-454)
    • Surface schema agreed flag for DDL statements (PYTHON-458)
    • Automatically convert float and int to Decimal on serialization (PYTHON-468)
    • Eventlet Reactor IO improvement (PYTHON-495)
    • ๐Ÿ‘‰ Make pure Python ProtocolHandler available even when Cython is present (PYTHON-501)
    • Optional Cython deserializer for bytes as bytearray (PYTHON-503)
    • Add Session.default_serial_consistency_level (github #510)
    • cqlengine: Expose prior state information via cqlengine LWTException (github #343, PYTHON-336)
    • ๐Ÿ‘ cqlengine: Collection datatype "contains" operators support (Cassandra 2.1) #278 (PYTHON-258)
    • cqlengine: Add DISTINCT query operator (PYTHON-266)
    • cqlengine: Tuple cqlengine api (PYTHON-306)
    • โšก๏ธ cqlengine: Add support for UPDATE/DELETE ... IF EXISTS statements (PYTHON-432)
    • cqlengine: Allow nested container types (PYTHON-478)
    • cqlengine: Add ability to set query's fetch_size and limit (PYTHON-323)
    • 0๏ธโƒฃ cqlengine: Internalize default keyspace from successive set_session (PYTHON-486)
    • ๐Ÿ—„ cqlengine: Warn when Model.create() on Counters (to be deprecated) (PYTHON-333)

    ๐Ÿ› Bug Fixes

    • Bus error (alignment issues) when running cython on some ARM platforms (PYTHON-450)
    • Overflow when decoding large collections (cython) (PYTHON-459)
    • Timer heap comparison issue with Python 3 (github #466)
    • Cython deserializer date overflow at 231 - 1 (PYTHON-452)
    • Decode error encountered when cython deserializing large map results (PYTHON-459)
    • ๐Ÿ— Don't require Cython for build if compiler or Python header not present (PYTHON-471)
    • โฑ Unorderable types in task scheduling with Python 3 (h(PYTHON-473)
    • โšก๏ธ cqlengine: Fix crash when updating a UDT column with a None value (github #467)
    • cqlengine: Race condition in ..connection.execute with lazy_connect (PYTHON-310)
    • ๐Ÿ‘ cqlengine: doesn't support case sensitive column family names (PYTHON-337)
    • โšก๏ธ cqlengine: UserDefinedType mandatory in create or update (PYTHON-344)
    • cqlengine: db_field breaks UserType (PYTHON-346)
    • cqlengine: UDT badly quoted (PYTHON-347)
    • cqlengine: Use of db_field on primary key prevents querying except while tracing. (PYTHON-351)
    • cqlengine: DateType.deserialize being called with one argument vs two (PYTHON-354)
    • cqlengine: Querying without setting up connection now throws AttributeError and not CQLEngineException (PYTHON-395)
    • cqlengine: BatchQuery multiple time executing execute statements. (PYTHON-445)
    • ๐Ÿ‘ cqlengine: Better error for management functions when no connection set (PYTHON-451)
    • cqlengine: Handle None values for UDT attributes in cqlengine (PYTHON-470)
    • cqlengine: Fix inserting None for model save (PYTHON-475)
    • cqlengine: EQ doesn't map to a QueryOperator (setup race condition) (PYTHON-476)
    • cqlengine: class.MultipleObjectsReturned has DoesNotExist as base class (PYTHON-489)
    • cqlengine: Typo in cqlengine UserType len breaks attribute assignment (PYTHON-502)

    Other

    • cqlengine: a major improvement on queryset has been introduced. It is a lot more efficient to iterate large datasets: the rows are now fetched on demand using the driver pagination.

    • cqlengine: the queryset len() and count() behaviors have changed. It now executes a "SELECT COUNT(*)" of the query rather than returning the size of the internal result_cache (loaded rows). On large queryset, you might want to avoid using them due to the performance cost. Note that trying to access objects using list index/slicing with negative indices also requires a count to be executed.