diff --git a/src/Pagerfanta/ExtendedPdoAdapter.php b/src/Pagerfanta/ExtendedPdoAdapter.php index 5f70fe3..34e6a1c 100644 --- a/src/Pagerfanta/ExtendedPdoAdapter.php +++ b/src/Pagerfanta/ExtendedPdoAdapter.php @@ -108,6 +108,9 @@ public function getLimitClause($offset, $length) */ public function rewriteCountQuery($query) { + if (\is_int(\strpos(\strtolower($query), 'union'))) { + return ''; + } if (\preg_match('/^\s*SELECT\s+\bDISTINCT\b/is', $query) || \preg_match('/\s+GROUP\s+BY\s+/is', $query)) { return ''; } diff --git a/tests/Pagerfanta/ExtendedPdoAdapterTest.php b/tests/Pagerfanta/ExtendedPdoAdapterTest.php index 7c75411..c194bcf 100644 --- a/tests/Pagerfanta/ExtendedPdoAdapterTest.php +++ b/tests/Pagerfanta/ExtendedPdoAdapterTest.php @@ -62,6 +62,7 @@ public function splProvider() ['SELECT * FROM posts', [], 'SELECT COUNT(*) FROM posts', 50], ['SELECT DISTINCT id FROM posts', [], '', 50], ['SELECT * FROM posts WHERE id > :num', ['num' => 10], 'SELECT COUNT(*) FROM posts WHERE id > :num', 40], + ['SELECT id FROM posts UNION SELECT id FROM posts', [], '', 50], ]; }