electric-sql / pglite

Lightweight Postgres packaged as WASM into a TypeScript library for the browser, Node.js, Bun and Deno
https://electric-sql.com
Apache License 2.0
4.76k stars 81 forks source link

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

Open nurturenature opened 1 month ago

nurturenature commented 1 month ago

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

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

{
  "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
  }
]