- replace repeated calls to len(query) with a fixed integer
- replace repeated string comparisons of paramstyle with boolean flags
- add new tests for various failure conditions
- format tests as pep8 (79 chars max / line)
- use assertEquals() built in to provide more context on failures
- remove most comparisons using len(collection)
- try using regexp for :name and %(pyformat)s matches.   not sure if this is ultimately
faster, though is at least easier to read?  maybe.
- whitespace cleanup
move tests to nose format, so that nosetests can be used to discover/run tests, run single tests, etc.
- Connection is not a Cursor, don't munge these two APIs together
- tighten up methodology in handle_messages
- pep8 as I go along
- no need for "warnings" when an extension method is used
- remove DBAPI error accessors copied on Connection, this just creates
API confusion
- the "Error on Connection" thing is in pep 249, so restore the basic
idea here without the warning fanfare
- add in the "unicode" type that akiban is still asking for
- replace the bound parameter system with a simple "pyformat"/"format" scheme
like that of psycopg2.  The scheme to use is determined by the argument format,
and the % operator is combined with a crafted tuple/dict in order to
render the output query.  The query is parsed only once, including when executemany() is used.
Overall a vast amount of overhead should be saved especially with executemany() calls,
which were previously parsing the query for every parameter set.
- convert to all absolute imports
- rework the MessageReader architecture such that each reader
is created once per response type as a class-level fixture.
Callers then call upon the fixed MessageReader with a series of
positional arguments, bypassing the overhead of creating new MessageReaders
and calling multiple add_message calls each time.
- further refine the message lookup in MessageReader to do a direct class check in
the dictionary, by storing all the message subclasses up front (which we can do now,
since these message readers are stateless/per class)
- replace PreparedStatement._lock with a faster Lock vs. RLock; the RLock was only
needed due to unnecessary reentrant call inside of _fill_cache(), which is removed
as _fill_cache() is only called within already-mutexed methods
- replace string comparisons for protocol states with identity symbols
- have MessageReader check the "handler" if it is the constant for
SUCCESS or ABORT, then act on that, saves lots of useless lambda: calls
- callcounts are *starting* to crack, a little
- create SendMessage/ReceiveMessage classes to help keep msg classes straight
- greatly reduce callcounts regarding sending and receiving messages/bytes,
at some expense of traceability.  Many no-arg messages become fixed serialized
constants that are sent directly.  ultimately the SendMessage classes should
just become functions
- remove lots of time consuming things like "read-only" property() accessors,
unneeded assertions, inline validateState messages, remove string comparisons
for state checks
- callcounts in the orm2010 suite go from 25M to 18M - progress !
tweaks
- remove support for counting rows returned
- rework row fetching to do much less work
- remove unused/untested read_dict() functionality (for now)
- implement the akiban extension, approximates cursor.description for now
- set up a demo.  doesn't work yet as the DDL doesn't appear to be
working with pg8000/akiban
- added an execute_notrans() method to allow DDL
- got cursor to be fully recursive
Merge pull request #12 from zzzeek/trunk

Some speedups for convert_paramstyle()