Page MenuHomePhabricator

Make insertId()/affectedRows() for upsert() and replace() consistent for sqlite/mysql/postgres
Closed, ResolvedPublic

Description

Mysql can might return 1 or 2 for a single row upsert (special mysql exception to distinguish update/create that predated RETURNING), whereas sqlite will return 1 (1 row updated or created).

I think the sqlite/postgres value makes more sense. With, REPLACE it is more defensible returning 2 since it is DELETE + INSERT, though that is not consistent with sqlite either.

Event Timeline

Change 818393 had a related patch set uploaded (by Aaron Schulz; author: Aaron Schulz):

[mediawiki/core@master] rdbms: make insertId() and affectedRows() less fragile and more consistent

https://gerrit.wikimedia.org/r/818393

Change 823204 had a related patch set uploaded (by Aaron Schulz; author: Aaron Schulz):

[mediawiki/core@master] rdbms: make affectedRows() count each updated row in upsert() as one

https://gerrit.wikimedia.org/r/823204

Change 823205 had a related patch set uploaded (by Aaron Schulz; author: Aaron Schulz):

[mediawiki/core@master] rdbms: make affectedRows() count each updated row in replace() as one

https://gerrit.wikimedia.org/r/823205

aaron renamed this task from Make affectedRows() for upsert() and replace() consistent for sqlite/mysql/postgres to Make insertId()/affectedRows() for upsert() and replace() consistent for sqlite/mysql/postgres.Apr 24 2023, 4:36 PM

Change 912353 had a related patch set uploaded (by Aaron Schulz; author: Aaron Schulz):

[mediawiki/core@master] rdbms: simplify affectedRows() by using the QueryStatus result

https://gerrit.wikimedia.org/r/912353

Change 912353 merged by jenkins-bot:

[mediawiki/core@master] rdbms: simplify affectedRows() by using the QueryStatus result

https://gerrit.wikimedia.org/r/912353

Change 818393 merged by jenkins-bot:

[mediawiki/core@master] rdbms: make IDatabase::insertId() less fragile and more consistent

https://gerrit.wikimedia.org/r/818393

Change 823204 merged by jenkins-bot:

[mediawiki/core@master] rdbms: make affectedRows() count each updated row in upsert() as one

https://gerrit.wikimedia.org/r/823204

Change 823205 merged by jenkins-bot:

[mediawiki/core@master] rdbms: make affectedRows() count each updated row in replace() as one

https://gerrit.wikimedia.org/r/823205