From c377bf676992c0a51337ef0aa3bf52f831c6ae0e Mon Sep 17 00:00:00 2001 From: Unlink Date: Fri, 24 Jul 2015 19:15:25 +0200 Subject: [PATCH] Selection: fixed bug with zero in primary key --- src/Database/Table/Selection.php | 4 +-- tests/Database/Table/bugs/ZeroPrimaryKey.phpt | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 tests/Database/Table/bugs/ZeroPrimaryKey.phpt diff --git a/src/Database/Table/Selection.php b/src/Database/Table/Selection.php index c54948cfb..784bf8740 100644 --- a/src/Database/Table/Selection.php +++ b/src/Database/Table/Selection.php @@ -486,8 +486,8 @@ protected function execute() foreach ($result->getPdoStatement() as $key => $row) { $row = $this->createRow($result->normalizeRow($row)); $primary = $row->getSignature(FALSE); - $usedPrimary = $usedPrimary && $primary; - $this->rows[$primary ?: $key] = $row; + $usedPrimary = $usedPrimary && (string) $primary !== ''; + $this->rows[$usedPrimary ? $primary : $key] = $row; } $this->data = $this->rows; diff --git a/tests/Database/Table/bugs/ZeroPrimaryKey.phpt b/tests/Database/Table/bugs/ZeroPrimaryKey.phpt new file mode 100644 index 000000000..6dfccc22d --- /dev/null +++ b/tests/Database/Table/bugs/ZeroPrimaryKey.phpt @@ -0,0 +1,36 @@ +query('CREATE DATABASE IF NOT EXISTS nette_test'); +$context->query('USE nette_test'); + +$context->query(' + CREATE TABLE ships ( + id INTEGER PRIMARY KEY NOT NULL, + name TEXT NOT NULL + ); +'); + +$context->query(' + INSERT INTO ships (id, name) VALUES(2, "Enterprise"); +'); + +$context->query(' + INSERT INTO ships (id, name) VALUES(0, "Endeavour"); +'); + +Assert::same(2, $context->table('ships')->order('id DESC')->count()); + +$result = $context->table('ships')->order('id DESC')->fetchAll(); // SELECT * FROM `ships` ORDER BY id DESC + +Assert::same("Enterprise", $result[2]->name); + +Assert::same("Endeavour", $result[0]->name);