3.14.0
======
Features
--------
- Add one() function to the ResultSet API
- Create an utility function to fetch concurrently many keys from the
same replica
- Allow filter queries with fields that have an index managed outside
of cqlengine
- Twisted SSL Support
- Support IS NOT NULL operator in cqlengine
Other
-----
- Fix Broken Links in Docs
- Reevaluate MONKEY_PATCH_LOOP in test codebase
- Remove CASS_SERVER_VERSION and replace it for CASSANDRA_VERSION in
tests
- Refactor CASSANDRA_VERSION to a some kind of version object
- Log warning when driver configures an authenticator, but server does
not request authentication
- Warn users when using the deprecated
Session.default_consistency_level
- Add DSE smoke test to OSS driver tests
- Document long compilation times and workarounds
- Improve error for batch WriteTimeouts
- Deprecate ResultSet indexing
3.13.0
======
Features
--------
- cqlengine: LIKE filter operator
- Support cassandra.query.BatchType with cqlengine BatchQuery
Bug Fixes
---------
- AttributeError: 'NoneType' object has no attribute 'add_timer'
- Support retry_policy in PreparedStatement
- __del__ method in Session is throwing an exception
- LZ4 import issue with recent versions
- ResponseFuture._connection can be None when returning request_id
- ResultSet.was_applied doesn't support batch with LWT statements
Other
-----
- cqlengine: avoid warning when unregistering connection on shutdown
- Fix DeprecationWarning of log.warn
- Fix example_mapper.py for python3
- Possible deadlock on cassandra.concurrent.execute_concurrent
- Add some known deprecated warnings for 4.x
- Remove copyright dates from copyright notices
- Remove "Experimental" tag from execution profiles documentation
- request_timer metrics descriptions are slightly incorrect
- Remove "Experimental" tag from cqlengine connections documentation
- Set in documentation default consistency for operations is LOCAL_ONE
Features
- Send keyspace in QUERY, PREPARE, and BATCH messages
- Add IPv4Address/IPv6Address support for inet types
- WriteType.CDC and VIEW missing
- Warn on Cluster init if contact points are specified but LBP isn't
- Include hash of result set metadata in prepared stmt id
- Add NO_COMPACT startup option
- Add new exception type for CDC
Bug Fixes
- Both _set_final_exception/result called for the same ResponseFuture
- Use of DCAwareRoundRobinPolicy raises NoHostAvailable exception
- Not create two sessions by default in CQLEngine
- Bug when subclassing AyncoreConnection
- Error at cleanup when closing the asyncore connections
- Fix sites where sessions can change during iteration
- cqlengine: allow min_length=0 for Ascii and Text column types
- Rare exception when "sys.exit(0)" after query timeouts
- Dont set the session keyspace when preparing statements
- Use of DCAwareRoundRobinPolicy raises NoHostAvailable exception
Other
- Remove DeprecationWarning when using WhiteListRoundRobinPolicy
- Bump Cython dependency version to 0.27
Features
--------
- Add idle_heartbeat_timeout cluster option to tune how long to wait
for heartbeat responses.
- Add HostFilterPolicy
Bug Fixes
---------
- is_idempotent flag is not propagated from PreparedStatement to
BoundStatement
- Fix asyncore hang on exit
- Driver takes several minutes to remove a bad host from session
- Installation doesn't always fall back to no cython in Windows
- Avoid to replace a connection that is supposed to shutdown
- request_ids may not be returned to the pool
- Fix murmur3 on big-endian systems
- Ensure unused connections are closed if a Session is deleted by the
GC
- Fix .values_list by using db names internally (cqlengine)
Other
-----
- Bump Cython dependency version to 0.25.2
- Fix DeprecationWarning when using lz4
- Deprecate WhiteListRoundRobinPolicy
- Improve upgrade guide for materializing pages
- Documentation for time/date specifies timestamp inupt as
microseconds
- Point to DSA Slack, not IRC, in docs index
Features
- Add Duration type to cqlengine
- Community PR review: Raise error on primary key update only if its
value changed
- get_query_trace() contract is ambiguous
Bug Fixes
- Queries using speculative execution policy timeout prematurely
- Fix map where results are not consumed
- Driver fails to encode Duration's with large values
- UDT values are not updated correctly in CQLEngine
- UDT types are not validated in CQLEngine
- to_python is not implemented for types columns.Type and columns.Date
in CQLEngine
- Clients spin infinitely trying to connect to a host that is drained
- Resulset.get_query_trace returns empty trace sometimes
- Memory grows and doesn't get removed
- Fix RuntimeError caused by change dict size during iteration
- fix ExponentialReconnectionPolicy may throw OverflowError problem
- Avoid using nonexistent prepared statement in ResponseFuture
Other
- Update README
- Test python versions 3.5 and 3.6
- Docs Warning About Prepare "select *"
- Increase Coverage in CqlEngine Test Suite
- Example SSL connection code does not verify server certificates
3.9.0
Features
- cqlengine: remove elements by key from a map
Bug Fixes
- improve error handling when connecting to non-existent keyspace
- Sockets associated with sessions not getting cleaned up on
session.shutdown()
- rare flake on
integration.standard.test_cluster.ClusterTests.test_clone_shared_lbp
- MontonicTimestampGenerator.__init__ ignores class defaults
- race where callback or errback for request may not be called
- cqlengine: model.update() should not update columns with a default
value that hasn't changed
- cqlengine: field value manager's explicit flag is True when queried
back from cassandra
Other
- Connection not closed in example_mapper
- Remove mention of pre-2.0 C* versions from OSS 3.0+ docs
3.8.1
Bug Fixes
- implement __le__/__ge__/__ne__ on some custom types
- Fix bug in eventlet and gevent reactors that could cause hangs
- Fix DecimalType regression
Features
- Quote index names in metadata CQL generation (PYTHON-616)
- On column deserialization failure, keep error message consistent
between python and cython (PYTHON-631)
- TokenAwarePolicy always sends requests to the same replica for a given
key (PYTHON-643)
- Added cql types to result set (PYTHON-648)
- Add __len__ to BatchStatement (PYTHON-650)
- Duration Type for Cassandra (PYTHON-655)
- Send flags with PREPARE message in v5 (PYTHON-684)
Bug Fixes
- Potential Timing issue if application exits prior to session pool
initialization (PYTHON-636)
- "Host X.X.X.X has been marked down" without any exceptions
(PYTHON-640)
- NoHostAvailable or OperationTimedOut when using execute_concurrent
with a generator that inserts into more than one table (PYTHON-642)
- ResponseFuture creates Timers and don't cancel them even when result
is received which leads to memory leaks (PYTHON-644)
- Driver cannot connect to Cassandra version > 3 (PYTHON-646)
- Unable to import model using UserType without setuping connection
since 3.7 (PYTHON-649)
- Don't prepare queries on ignored hosts on_up (PYTHON-669)
- Sockets associated with sessions not getting cleaned up on
session.shutdown() (PYTHON-673)
- Make client timestamps strictly monotonic (PYTHON-676)
- cassandra.cqlengine.connection.register_connection broken when
hosts=None (PYTHON-692)
Other
- Create a cqlengine doc section explaining None semantics (PYTHON-623)
- Resolve warnings in documentation generation (PYTHON-645)
- Cython dependency (PYTHON-686)
- Drop Support for Python 2.6 (PYTHON-690)
Features
- Add v5 protocol failure map
- Don't return from initial connect on first error
- Indicate failed column when deserialization fails
- Let Cluster.refresh_nodes force a token map rebuild
- Refresh UDTs after "keyspace updated" event with v1/v2 protocol
- EC2 Address Resolver
- Speculative query retries
- Expose paging state in API
- Don't mark host down while one connection is active
- Query request size information
- Avoid quadratic ring processing with invalid replication factors
- Improve Connection/Pool creation concurrency on startup
- Add beta version native protocol flag
- cqlengine: Connections: support of multiple keyspaces and
sessions
Bug Fixes
- Race when adding a pool while setting keyspace
- Update results_metadata when prepared statement is reprepared
- CQL Export for Thrift Tables
- cqlengine: default value not applied to UserDefinedType
- cqlengine: columns are no longer hashable
- cqlengine: remove clustering keys from where clause when
deleting only static columns
Features
- Handle null values in NumpyProtocolHandler (PYTHON-553)
- Collect greplin scales stats per cluster (PYTHON-561)
- Update mock unit test dependency requirement (PYTHON-591)
- Handle Missing CompositeType metadata following C* upgrade
(PYTHON-562)
- Improve Host.is_up state for HostDistance.IGNORED hosts
(PYTHON-551)
- Utilize v2 protocol's ability to skip result set metadata for
prepared statement execution (PYTHON-71)
- Return from Cluster.connect() when first contact point
connection(pool) is opened (PYTHON-105)
- cqlengine: Add ContextQuery to allow cqlengine models to switch
the keyspace context easily (PYTHON-598)
- Standardize Validation between Ascii and Text types in Cqlengine
(PYTHON-609)
Bug Fixes
- Fix geventreactor with SSL support (PYTHON-600)
- Don't downgrade protocol version if explicitly set (PYTHON-537)
- Nonexistent contact point tries to connect indefinitely
(PYTHON-549)
- Execute_concurrent can exceed max recursion depth in failure
mode (PYTHON-585)
- Libev loop shutdown race (PYTHON-578)
- Include aliases in DCT type string (PYTHON-579)
- cqlengine: Comparison operators for Columns (PYTHON-595)
- cqlengine: disentangle default_time_to_live table option from
model query default TTL (PYTHON-538)
- cqlengine: pk__token column name issue with the equality
operator (PYTHON-584)
- cqlengine: Fix "__in" filtering operator converts True to string
"True" automatically (PYTHON-596)
- cqlengine: Avoid LWTExceptions when updating columns that are
part of the condition (PYTHON-580)
- cqlengine: Cannot execute a query when the filter contains all
columns (PYTHON-599)
- cqlengine: routing key computation issue when a primary key
column is overriden by model inheritance (PYTHON-576)
Features
- Optional Execution Profiles for the core driver (PYTHON-569)
- API to get the host metadata associated with the control
connection node (PYTHON-583)
- Expose CDC option in table metadata CQL (PYTHON-593)
Bug Fixes
- Clean up Asyncore socket map when fork is detected (PYTHON-577)
- cqlengine: QuerySet only() is not respected when there are
deferred fields (PYTHON-560)
3.4.1
Bug Fixes
- Gevent connection closes on IO timeout
- "dictionary changed size during iteration" with Python 3
3.4.0
Features
- Include DSE version and workload in Host data
- Add a context manager to Cluster and Session
- Better Error Message for Unsupported Protocol Version
- Make the error message explicitly state when an error comes from
the server
- Short Circuit meta refresh on topo change if NEW_NODE already
exists
- Show warning when the wrong config is passed to SimpleStatement
- Return namedtuple result pairs from execute_concurrent
- BatchStatement should enforce batch size limit in a better way
- Validate min/max request thresholds for connection pool scaling
- Handle or warn about multiple hosts with the same rpc_address
- Write docs around working with datetime and timezones
Bug Fixes
- High CPU utilization when using asyncore event loop
- Fix CQL Export for non-ASCII Identifiers
- Make stress scripts Python 2.6 compatible
- UnicodeDecodeError when unicode characters in key in BOP
- WhiteListRoundRobinPolicy should resolve hosts
- Cluster and Session do not GC after leaving scope
- Don't wait for schema agreement on ignored nodes
- Reprepare on_up with many clients causes node overload
- None inserted into host map when control connection node is
decommissioned
- weakref.ref does not accept keyword arguments
Features
- Add an AddressTranslator interface
- New Retry Policy Decision - try next host
- Don't mark host down on timeout
- SSL hostname verification
- Add C* version to metadata or cluster objects
- Options to Disable Schema, Token Metadata Processing
- Expose listen_address of node we get ring information from
- Use A-record with multiple IPs for contact points
- Custom consistency level for populating query traces
- Normalize Server Exception Types
- Propagate exception message when DDL schema agreement fails
- Specialized exceptions for metadata refresh methods failure
Bug Fixes
- Resolve contact point hostnames to avoid duplicate hosts
- GeventConnection stalls requests when read is a multiple of the
input buffer size
- named_tuple_factory breaks with duplicate "cleaned" col names
- Connection leak if Cluster.shutdown() happens during
reconnection
- HostConnection.borrow_connection does not block when all request
ids are used
- Empty field not being handled by the NumpyProtocolHandler
Features
- cqlengine: Warn on sync_schema type mismatch
- cqlengine: Automatically defer fields with the '=' operator
(and immutable values) in select queries
- cqlengine: support non-equal conditions for LWT
- cqlengine: sync_table should validate the primary key composition
- cqlengine: token-aware routing for mapper statements
Bug Fixes
- Deleting a column in a lightweight transaction raises
a SyntaxException
- cqlengine: make Token function works with named tables/columns
- comparing models with datetime fields fail #79
- cython date deserializer integer math should be aligned
with CPython
- db_field is not always respected with UpdateStatement
- Sync_table fails on column.Set with secondary index
Features
- Pass name of server auth class to AuthProvider
- Surface schema agreed flag for DDL statements
- Automatically convert float and int to Decimal on serialization
- Eventlet Reactor IO improvement
- Make pure Python ProtocolHandler available even when Cython is
present
- Optional Cython deserializer for bytes as bytearray
- Add Session.default_serial_consistency_level
- cqlengine: Expose prior state information via cqlengine
LWTException
- cqlengine: Collection datatype "contains" operators support
(Cassandra 2.1)
- cqlengine: Add DISTINCT query operator
- cqlengine: Tuple cqlengine api
- cqlengine: Add support for UPDATE/DELETE ... IF EXISTS statements
- cqlengine: Allow nested container types
- cqlengine: Add ability to set query's fetch_size and limit
- cqlengine: Internalize default keyspace from successive set_session
- cqlengine: Warn when Model.create() on Counters
Bug Fixes
- Bus error (alignment issues) when running cython on some ARM
platforms
- Overflow when decoding large collections (cython)
- Timer heap comparison issue with Python 3
- Cython deserializer date overflow at 2^31 - 1
- Decode error encountered when cython deserializing large map
results
- Don't require Cython for build if compiler or Python header
not present
- Unorderable types in task scheduling with Python 3
- cqlengine: Fix crash when updating a UDT column with a None value
- cqlengine: Race condition in ..connection.execute with lazy_connect
- cqlengine: doesn't support case sensitive column family names
- cqlengine: UserDefinedType mandatory in create or update
- cqlengine: db_field breaks UserType
- cqlengine: UDT badly quoted
- cqlengine: Use of db_field on primary key prevents querying except
while tracing.
- cqlengine: DateType.deserialize being called with one argument
vs two
- cqlengine: Querying without setting up connection now throws
AttributeError and not CQLEngineException
- cqlengine: BatchQuery multiple time executing execute statements.
- cqlengine: Better error for management functions when no connection
set
- cqlengine: Handle None values for UDT attributes in cqlengine
- cqlengine: Fix inserting None for model save
- cqlengine: EQ doesn't map to a QueryOperator (setup race condition)
- cqlengine: class.MultipleObjectsReturned has DoesNotExist as base
class
- cqlengine: Typo in cqlengine UserType __len__ breaks attribute
assignment
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.
3.0.0
Features
- Support datetime.date objects as a DateType
- Add Cluster.update_view_metadata
- QueryTrace option to populate partial trace sessions
- Attach column names to ResultSet
- Change default consistency level to LOCAL_ONE
Bug Fixes
- Properly SerDes nested collections when protocol_version < 3
- Evict UDTs from UserType cache on change
- Make sure query strings are always encoded UTF-8
- Track previous value of columns at instantiation in CQLengine
- UDT CQL encoding does not work for unicode values
- NetworkTopologyStrategy#make_token_replica_map does not account
for multiple racks in a DC
- Cython integer overflow on decimal type deserialization
- Query trace: if session hasn't been logged, query trace can
throw exception
3.0.0rc1
Features
- Process Modernized Schema Tables for Cassandra 3.0
- Remove deprecated features
- Don't assign trace data to Statements
- Normalize results return
- Process Materialized View Metadata/Events
- Remove blist as soft dependency
- Change default consistency level to LOCAL_QUORUM
- Normalize CQL query/export in metadata model
Bug Fixes
- Implementation of named arguments bind is non-pythonic
- CQL encoding is incorrect for NaN and Infinity floats
- Protocol downgrade issue with C* 2.0.x, 2.1.x, and python3,
with non-default logging
- ValueError when accessing usertype with non-alphanumeric
field names
- NumpyProtocolHandler does not play well with PagedResult
2.7.2
Bug Fixes
- Resolve CQL export error for UDF with zero parameters
- Remove futures dep. for Python 3
2.7.1
Bug Fixes
- Explicitly include extension source files in Manifest
2.7.0
Cython is introduced, providing compiled extensions for core modules,
and extensions for optimized results deserialization.
Features
- General Performance Improvements for Throughput
- Improve synchronous request performance with Timers
- Enable C Extensions for PyPy Runtime
- Refactor SerDes functionality for pluggable interface
- Cython SerDes Extension
- Accept iterators/generators for execute_concurrent()
- cythonize existing modules
- Pure Python murmur3 implementation
- Make driver tolerant of inconsistent metadata
Bug Fixes
- Drop Events out-of-order Cause KeyError on Processing
- DowngradingConsistencyRetryPolicy doesn't check response count on write
timeouts
- Blocking connect does not use connect_timeout
- Properly protect partition key in CQL export
- Trigger error callbacks on timeout
2.6.0
Bug Fixes
- Output proper CQL for compact tables with no clustering columns
2.6.0c2
Features
- Automatic Protocol Version Downgrade
- cqlengine Python 2.6 compatibility
- Double-dollar string quote UDF body
- Set models.DEFAULT_KEYSPACE when calling set_session
Bug Fixes
- Avoid stall while connecting to mixed version cluster
- Make SSL work with AsyncoreConnection in python 2.6.9
- Fix Murmur3Token.from_key() on Windows
- Fix cqlengine TimeUUID rounding error for Windows
- Avoid invalid compaction options in CQL export for non-SizeTiered
2.6.0c1
This release adds support for Cassandra 2.2 features, including
version 4 of the native protocol.
Features
- Default load balancing policy to TokenAware(DCAware)
- Configuration option for connection timeout
- Support User Defined Function and Aggregate metadata in C* 2.2
- Surface request client in QueryTrace for C* 2.2+
- Implement new request failure messages in protocol v4+
- Metadata model now maps index meta by index name
- Support new types in C* 2.2: date, time, smallint, tinyint
- cqle: add Double column type and remove Float overload
- Use partition key column information in prepared response for protocol v4+
- Support message custom payloads in protocol v4+
- Deprecate refresh_schema and replace with functions for specific entities
- Save trace id even when trace complete times out
- Warn when registering client UDT class for protocol < v3
- Support client warnings returned with messages in protocol v4+
- Ability to distinguish between NULL and UNSET values in protocol v4+
- Expose CQL keywords in API
Bug Fixes
- IPv6 address support on Windows
- Convert exceptions during automatic re-preparation to nice exceptions
- cqle: Quote keywords properly in table management functions
- Don't default to GeventConnection when gevent is loaded, but
not monkey-patched
- Pass dynamic host from SaslAuthProvider to SaslAuthenticator
- Make protocol read_inet work for Windows
- cqle: Correct encoding for nested types
- Update list of CQL keywords used quoting identifiers
- Make ConstantReconnectionPolicy work with infinite retries
- Accept UUIDs with uppercase hex as valid in cqlengine
2.5.0
- Integrated cqlengine object mapping package
- Utility functions for converting timeuuids and datetime (PYTHON-99)
- Schema metadata fetch window randomized, config options added (PYTHON-202)
- Support for new Date and Time Cassandra types (PYTHON-190)
- Fix index target for collection indexes (full(), keys()) (PYTHON-222)
- Thread exception during GIL cleanup (PYTHON-229)
- Workaround for rounding anomaly in datetime.utcfromtime (Python 3.4)
(PYTHON-230)
- Normalize text serialization for lookup in OrderedMap (PYTHON-231)
- Support reading CompositeType data (PYTHON-234)
- Preserve float precision in CQL encoding (PYTHON-243)
2.1.4
- SaslAuthenticator for Kerberos support (PYTHON-109)
- Heartbeat for network device keepalive and detecting failures on idle
connections (PYTHON-197)
- Support nested, frozen collections for Cassandra 2.1.3+ (PYTHON-186)
- Schema agreement wait bypass config, new call for synchronous schema
refresh (PYTHON-205)
- Add eventlet connection support (PYTHON-194)
- Schema meta fix for complex thrift tables (PYTHON-191)
- Support for 'unknown' replica placement strategies in schema meta
(PYTHON-192)
- Resolve stream ID leak on set_keyspace (PYTHON-195)
- Remove implicit timestamp scaling on serialization of numeric
timestamps (PYTHON-204)
- Resolve stream id collision when using SASL auth (PYTHON-210)
- Correct unhexlify usage for user defined type meta in Python3 (PYTHON-208)
Python client driver for Apache Cassandra. This driver works exclusively
with the Cassandra Query Language v3 (CQL3) and Cassandra's native protocol.
Cassandra versions 1.2 through 2.1 are supported.