For compatibility with SQLAlchemy (close_with_result) values for lastrowid and rowcount should be retrieved immediately after execute/executemany, and stored in cursor->lastrowid and cursor->rowcount.
When using unbuffered result sets, rowcount should be updated per fetch.
Also the behaviour of rowcount and lastrowid should be changed:
In case of an error, or if statement wasn't executed rowcount should be -1 (see PEP-249)
- For DML statements the number of affected rows returned in OK packet by server:
- > 0 for DML statements which modify or insert, e.g. ALTER TABLE or CREATE TABLE .. SELECT FROM
- otherwise 0
- For DQL statement
- if field_count > 0: number of rows returned
- otherwise affected rows returned in OK packet by server.
- if server returns no value (0) for last_insert_id, lastrowid should be None.
- if last_insert_id is > 0, return it's value