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.