One issue that is troublesome for me that is not on your design list: revisions to the design to allow for easier testing of database code. In particular I would like to see Begin, Query, and QueryRow return interfaces (as Exec does), rather than structures.
Here's why. If I want to unit test a package that interacts with database/sql, I need to run it with stubs for the database/sql functionality. So I would write that code to expect a DB handle that was an interface (matching that of sql.DB) rather than an actual sql.DB. So far, so good. But the Begin call in that interface returns an actual sql.Tx structure, which I can't easily stub for testing. If it instead returned an interface, then my stub implementation of Begin could return a stub transaction that matched the same interface.
Once inside a transaction, the same is true. A stub transaction can easily stub the Exec call, because the return from it is an interface (sql.Result) that can itself be a stub. But Query and QueryRow are much harder to stub because they return actual structures.
Bottom line: any time you return a concrete structure, defined in your package, that has methods on it, you make it dramatically harder to stub out your package for unit testing of its clients. For most standard library packages, that doesn't matter too much, because stubbing them out for unit testing isn't really essential. But for standard library packages that interact with the outside world, being able to stub them is extremely helpful.
net/http is an interesting study along these lines. It takes a significantly different approach to testability, by providing its own stubs (in net/httptest). But the important thing is that it does provide a way to stub out the regular functionality for testing. I really think it would be better if database/sql did also.
Regards,
Steve