Added connection pool logic (follows query plan)
Started to connect result parsing to API

Moved body buffer lifetime to MessageBody, remove opcode virtual
method. Started to implement external interface.
Variable bindings and error codes

Changed serialization so we can encode/decode more complex types. Got
rid of “void*”s in C API.
Able to bind variable types string and inet

Fixed unit tests
Prepared statements working on a single node

Also, all primitive types working for bound variables
Renamed prepared statement bind method
Handling collections as input

Started output iterators.
Also, removed “case::Value”. This was a misguided path to go down.
Working on results API
Decoding value and collections

Organized and made API consistent. Also, broke up the cassandra.cpp
implementation into multiple files.
Retrieved and decoded set<text>

Add const to places where it made sense in the API
Validate collection before returning iterator
API Cleanup, Examples, Bug fixes
Forgot to free collection in an example
Simplified and fixed futures

Big simplification and I’m pretty sure it fixed the spurious crash that
happened under high load.
Removed old future implementation
Removed committed execs
Cleanup, fixed memory leaks
Remove memory leaks, wrapped tcp connection
Fixed spurious hang in future and memory issues

The future would hang  very randomly (repeatable within ~70k
iterations) for this and the previous implementation.  I think the
internal condition variable was being deleted before it was done
notifying the wait threads.
Used some memory tools to weed out memory corruption
Solid as rock now!
Handle node failures. Read/Write timeouts.