nextcloud / nextcloud/tables

Cannot open a table with 25k rows

Open
#1,490 0 comments 1 reaction 1 assignee View on GitHub

@blizzz is already working on this.

Since Dec 4, 2024.

1. to develop bug performance
Dominant language
JavaScript
Stars
214
Forks
52
Avg merge
1d 10h
Merged PRs (30d)
82

Description

Steps to reproduce
  1. Have a table with 25k rows (e.g. via CSV import)
  2. Go to tables app
  3. Open this table
Expected behavior

The table is being loaded and values are being shown. Pagination is available.

Actual behavior

Could not load rows. Unknown error. appears as error popup.

On the backend, an Exception is thrown: An exception occurred while executing a query: SQLSTATE[HY000]: General error: 7 number of parameters must be between 0 and 65535

Tables app version

main

Browser

No response

Client operating system

No response

Operating system

No response

Web server

None

PHP engine version

None

Database

PostgreSQL

Additional info

Actually the number of parameters is smaller, actually 25k row ids, plus ten column ids. However the query contains UNIONS and the row IDs are inserted 5 times in the total query – this would make sense again.

Excerpt from the log (omitting the 25k ids…):

{
  "reqId": "jgnUNqgUUWi2A9hU5S7d",
  "level": 3,
  "time": "2024-12-04T16:39:10+00:00",
  "remoteAddr": "127.0.0.1",
  "user": "master",
  "app": "tables",
  "method": "GET",
  "url": "/master/index.php/apps/tables/row/table/830",
  "message": "An exception occurred while executing a query: SQLSTATE[HY000]: General error: 7 number of parameters must be between 0 and 65535",
  "userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0",
  "version": "31.0.0.5",
  "exception": {
    "Exception": "OC\\DB\\Exceptions\\DbalException",
    "Message": "An exception occurred while executing a query: SQLSTATE[HY000]: General error: 7 number of parameters must be between 0 and 65535",
    "Code": 7,
    "Trace": [
      {
        "file": "/srv/http/nextcloud/master/lib/private/DB/ConnectionAdapter.php",
        "line": 53,
        "function": "wrap",
        "class": "OC\\DB\\Exceptions\\DbalException",
        "type": "::",
        "args": [
          {
            "__class__": "Doctrine\\DBAL\\Exception\\DriverException"
          }
        ]
      },
      {
        "file": "/srv/http/nextcloud/master/apps-repos/tables/lib/Db/Row2Mapper.php",
        "line": 227,
        "function": "executeQuery",
        "class": "OC\\DB\\ConnectionAdapter",
        "type": "->",
        "args": [
          "SELECT `row_id`, `column_id`, `created_by`, `created_at`, `t1`.`last_edit_by`, `t1`.`last_edit_at`, `value`, `table_id`, `value_type` FROM (SELECT `row_id`, `column_id`, `last_edit_at`, `last_edit_by`, CAST(`value` AS TEXT) AS `value`, NULL AS `value_type` FROM `*PREFIX*tables_row_cells_text` WHERE (`column_id` IN (:columnIds)) AND (`row_id` IN (:rowsIds)) UNION ALL SELECT `row_id`, `column_id`, `last_edit_at`, `last_edit_by`, CAST(`value` AS TEXT) AS `value`, NULL AS `value_type` FROM `*PREFIX*tables_row_cells_number` WHERE (`column_id` IN (:columnIds)) AND (`row_id` IN (:rowsIds))  UNION ALL SELECT `row_id`, `column_id`, `last_edit_at`, `last_edit_by`, CAST(`value` AS TEXT) AS `value`, NULL AS `value_type` FROM `*PREFIX*tables_row_cells_datetime` WHERE (`column_id` IN (:columnIds)) AND (`row_id` IN (:rowsIds))  UNION ALL SELECT `row_id`, `column_id`, `last_edit_at`, `last_edit_by`, CAST(`value` AS TEXT) AS `value`, NULL AS `value_type` FROM `*PREFIX*tables_row_cells_selection` WHERE (`column_id` IN (:columnIds)) AND (`row_id` IN (:rowsIds))  UNION ALL SELECT `row_id`, `column_id`, `last_edit_at`, `last_edit_by`, CAST(`value` AS TEXT) AS `value`, CAST(`value_type` AS TEXT) AS `value_type` FROM `*PREFIX*tables_row_cells_usergroup` WHERE (`column_id` IN (:columnIds)) AND (`row_id` IN (:rowsIds)) ) `t1` INNER JOIN `*PREFIX*tables_row_sleeves` `rs` ON rs.id = t1.row_id",
          {
            "columnIds": [
              …
            ],
            "rowsIds": [
              …
            ]
          },
          {
            "columnIds": 101,
            "rowsIds": 101
          }
        ]
      },
      {
        "file": "/srv/http/nextcloud/master/apps-repos/tables/lib/Db/Row2Mapper.php",
        "line": 180,
        "function": "getRows",
        "class": "OCA\\Tables\\Db\\Row2Mapper",
        "type": "->",
        "args": [
          [
            …
          ],
          [
            …
          ]
        ]
      },
      {
        "file": "/srv/http/nextcloud/master/apps-repos/tables/lib/Service/RowService.php",
        "line": 86,
        "function": "findAll",
        "class": "OCA\\Tables\\Db\\Row2Mapper",
        "type": "->",
        "args": [
          [
            …
          ]
      },
      {
        "file": "/srv/http/nextcloud/master/apps-repos/tables/lib/Controller/RowController.php",
        "line": 45,
        "function": "findAllByTable",
        "class": "OCA\\Tables\\Service\\RowService",
        "type": "->",
        "args": [
          830,
          "master"
        ]
      },
      {
        "file": "/srv/http/nextcloud/master/apps-repos/tables/lib/Controller/Errors.php",
        "line": 22,
        "function": "OCA\\Tables\\Controller\\{closure}",
        "class": "OCA\\Tables\\Controller\\RowController",
        "type": "->",
        "args": [
          "*** sensitive parameters replaced ***"
        ]
      },
      {
        "file": "/srv/http/nextcloud/master/apps-repos/tables/lib/Controller/RowController.php",
        "line": 44,
        "function": "handleError",
        "class": "OCA\\Tables\\Controller\\RowController",
        "type": "->",
        "args": [
          {
            "__class__": "Closure"
          }
        ]
      },
      {
        "file": "/srv/http/nextcloud/master/lib/private/AppFramework/Http/Dispatcher.php",
        "line": 208,
        "function": "index",
        "class": "OCA\\Tables\\Controller\\RowController",
        "type": "->",
        "args": [
          830
        ]
      },
      {
        "file": "/srv/http/nextcloud/master/lib/private/AppFramework/Http/Dispatcher.php",
        "line": 114,
        "function": "executeController",
        "class": "OC\\AppFramework\\Http\\Dispatcher",
        "type": "->",
        "args": [
          {
            "__class__": "OCA\\Tables\\Controller\\RowController"
          },
          "index"
        ]
      },
      {
        "file": "/srv/http/nextcloud/master/lib/private/AppFramework/App.php",
        "line": 161,
        "function": "dispatch",
        "class": "OC\\AppFramework\\Http\\Dispatcher",
        "type": "->",
        "args": [
          {
            "__class__": "OCA\\Tables\\Controller\\RowController"
          },
          "index"
        ]
      },
      {
        "file": "/srv/http/nextcloud/master/lib/private/Route/Router.php",
        "line": 306,
        "function": "main",
        "class": "OC\\AppFramework\\App",
        "type": "::",
        "args": [
          "OCA\\Tables\\Controller\\RowController",
          "index",
          {
            "__class__": "OC\\AppFramework\\DependencyInjection\\DIContainer"
          },
          {
            "tableId": "830",
            "_route": "tables.row.index"
          }
        ]
      },
      {
        "file": "/srv/http/nextcloud/master/lib/base.php",
        "line": 1012,
        "function": "match",
        "class": "OC\\Route\\Router",
        "type": "->",
        "args": [
          "/apps/tables/row/table/830"
        ]
      },
      {
        "file": "/srv/http/nextcloud/master/index.php",
        "line": 24,
        "function": "handleRequest",
        "class": "OC",
        "type": "::",
        "args": []
      }
    ],
    …
}

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.