While investigating #818, I noticed that the server-side scrollable cursor implementation reported the wrong size if I inserted a row through the result set immediately after execute (thus without fetching any rows), and the inserted row was included twice in the result set: once server-side, and once locally.
This happens because the cursor is not materialized server-side until the first fetch, and so the inserted row was materialized in the server-side cursor, and also stored in the local "inserted rows" list, and thus reported twice. We need to address this by forcing materialization of the cursor earlier, maybe immediately on creating the fetcher.