pglite icon indicating copy to clipboard operation
pglite copied to clipboard

`PGlite.exec()` returns result objects with misplaced `affectedRows`

Open nurturenature opened this issue 9 months ago • 0 comments

The return results of PGlite.exec() misplace affectedRows.

Here's an example of a query whose results show affectedRows:

  • missing from INSERTs
  • only present on last SELECT
  • as a total for the whole transaction on the last SELECT result
{
  "query": "SELECT k,v FROM lww WHERE k = 0; INSERT INTO lww (k,v) VALUES (1,'0') ON CONFLICT (k) DO UPDATE SET v = lww.v || ' ' || '0'; INSERT INTO lww (k,v) VALUES (2,'0') ON CONFLICT (k) DO UPDATE SET v = lww.v || ' ' || '0'; SELECT k,v FROM lww WHERE k = 1; SELECT k,v FROM lww WHERE k = 2; INSERT INTO lww (k,v) VALUES (3,'0') ON CONFLICT (k) DO UPDATE SET v = lww.v || ' ' || '0'; SELECT k,v FROM lww WHERE k = 3;"
}
[
  {
    "rows": [],
    "fields": [
      {
        "name": "k",
        "dataTypeID": 23
      },
      {
        "name": "v",
        "dataTypeID": 25
      }
    ]
  },
  {
    "rows": [],
    "fields": []
  },
  {
    "rows": [],
    "fields": []
  },
  {
    "rows": [
      {
        "k": 1,
        "v": "0 0"
      }
    ],
    "fields": [
      {
        "name": "k",
        "dataTypeID": 23
      },
      {
        "name": "v",
        "dataTypeID": 25
      }
    ]
  },
  {
    "rows": [
      {
        "k": 2,
        "v": "0 0 0 0"
      }
    ],
    "fields": [
      {
        "name": "k",
        "dataTypeID": 23
      },
      {
        "name": "v",
        "dataTypeID": 25
      }
    ]
  },
  {
    "rows": [],
    "fields": []
  },
  {
    "rows": [
      {
        "k": 3,
        "v": "0"
      }
    ],
    "fields": [
      {
        "name": "k",
        "dataTypeID": 23
      },
      {
        "name": "v",
        "dataTypeID": 25
      }
    ],
    "affectedRows": 3
  }
]

nurturenature avatar May 21 '24 23:05 nurturenature