nette / database

💾 A database layer with a familiar PDO-like API but much more powerful. Building queries, advanced joins, drivers for MySQL, PostgreSQL, SQLite, MS SQL Server and Oracle.
https://doc.nette.org/database
Other
492 stars 105 forks source link

Error in Tracy bar #259

Closed Lumeriol closed 4 years ago

Lumeriol commented 4 years ago

Version: d9b5f29c5bb1a467b2b3ce35c9dd660434d6e24a

Bug Description

With fix of #256 there is error in Tracy bar (Nette\Bridges\DatabaseTracy\ConnectionPanel)

Nette\InvalidArgumentException: Placeholder ?list expects array or Traversable object, integer given. in \vendor\nette\database\src\Database\SqlPreprocessor.php:290

Stack trace:

  1. \vendor\nette\database\src\Database\SqlPreprocessor.php(134): Nette\Database\SqlPreprocessor->formatValue(2, 'list')
  2. \vendor\nette\utils\src\Utils\Callback.php(81): preg_replace_callback('~'[^']*+'|"[^"]...', Object(Closure), 'EXPLAIN SELECT ...', -1)

By dumped data it looks that problem is with EXPLAIN statement, that not have array as parameter in added condition for IN operator:

0 => 'SELECT `id`, `use_options` FROM `user_role` WHERE (`id` IN (?))'
1 => array
    0 => 2

vs

0 => 'EXPLAIN SELECT `id`, `use_options` FROM `user_role` WHERE (`id` IN (?))'
1 => 2
Lumeriol commented 4 years ago

Fixed by f016c33f4a905659b1fe3b800a9f18310a280e41 and 45a940dda2994ae50038a1ea9aedb8aed4d4c485.

Same error described on Nette Forum.