Complete rewrite of the client library to remove dependencies and add new features

Registered by Eric Day

Some key features:

1 - Support for non-blocking I/O. This would not just be for an entire connection, but be able to toggle this at different times throughout the connection (the socket code will always use non-blocking I/O, so it would be a simple flag for library behavior).

2 - Finer granularity of what to cache in large response (and when to do it). Be able to stream at the column or partial-column level (for large text/blob). For example, if you are pulling down a large BLOB, you could read it in smaller chunks to process or pass through in applications.

3 - Improved buffer management over existing library. This means being able to use the original read buffer and pass this back to the application for processing, reducing excessive mallocs and memcpy's. There will of course be a cached interface that does malloc/memcpy like the existing library does too.

4 - BSD license.

5 - Support for multiple protocols, including the existing MySQL versions. A new drizzle protocol is being developed to add features. At some later point we may look at other protocol wrappers, such as HTTP.

6 - Support for a callback interface.

7 - Support for libevent integration, as well as other non-blocking event libraries.

8 - Possibly create a wrapper library for the the existing libmysqlclient interface for easier integration, but we may just push for using the new interface (so clients can make full use of new features).

9 - Convert existing client applications to use new library.

10 - Develop new interfaces for other languages such as PHP and Perl. These will be broken out into other projects.

Blueprint information

Status:
Complete
Approver:
Eric Day
Priority:
Essential
Drafter:
Eric Day
Direction:
Approved
Assignee:
Eric Day
Definition:
Approved
Series goal:
Accepted for trunk
Implementation:
Implemented
Milestone target:
milestone icon cirrus
Started by
Eric Day
Completed by
Eric Day

Related branches

Sprints

Whiteboard

This is now mostly complete at lp:libdrizzle

(?)

Work Items

Dependency tree

* Blueprints in grey have been implemented.

This blueprint contains Public information 
Everyone can see this information.