From 335c534f7f89f84afa4f9931f830eba5dd26c79d Mon Sep 17 00:00:00 2001 From: Mo Sureerat Date: Thu, 13 Oct 2022 03:01:09 +0700 Subject: [PATCH 1/3] Fix issue - search UUID data type error Signed-off-by: Mo Sureerat --- libraries/classes/Table/Search.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/classes/Table/Search.php b/libraries/classes/Table/Search.php index d40ae49659..042509e9cc 100644 --- a/libraries/classes/Table/Search.php +++ b/libraries/classes/Table/Search.php @@ -164,7 +164,7 @@ final class Search // strings to numbers and numbers to strings as necessary // during the comparison if ( - preg_match('@char|binary|blob|text|set|date|time|year@i', $types) + preg_match('@char|binary|blob|text|set|date|time|year|uuid@i', $types) || mb_strpos(' ' . $func_type, 'LIKE') ) { $quot = '\''; From 582476e5a5e570183b21be97fd52f6e7426b0678 Mon Sep 17 00:00:00 2001 From: Mo Sureerat Date: Thu, 13 Oct 2022 03:38:25 +0700 Subject: [PATCH 2/3] Update operator options for UUID Signed-off-by: Mo Sureerat --- libraries/classes/Types.php | 21 ++++++++++++++++ test/classes/TypesTest.php | 50 +++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/libraries/classes/Types.php b/libraries/classes/Types.php index 5c65b4e44b..ab15d7a7ed 100644 --- a/libraries/classes/Types.php +++ b/libraries/classes/Types.php @@ -139,6 +139,25 @@ class Types ]; } + /** + * UUID search operators + * + * @return string[] + */ + public function getUUIDOperators() + { + return [ + '=', + '!=', + 'LIKE', + 'LIKE %...%', + 'NOT LIKE', + 'NOT LIKE %...%', + 'IN (...)', + 'NOT IN (...)', + ]; + } + /** * Returns operators for given type * @@ -156,6 +175,8 @@ class Types $ret = array_merge($ret, $this->getEnumOperators()); } elseif ($class === 'CHAR') { $ret = array_merge($ret, $this->getTextOperators()); + } elseif ($class === 'UUID') { + $ret = array_merge($ret, $this->getUUIDOperators()); } else { $ret = array_merge($ret, $this->getNumberOperators()); } diff --git a/test/classes/TypesTest.php b/test/classes/TypesTest.php index b736b65643..d7258597d6 100644 --- a/test/classes/TypesTest.php +++ b/test/classes/TypesTest.php @@ -130,6 +130,26 @@ class TypesTest extends AbstractTestCase ); } + /** + * Test for getUUIDOperators + */ + public function testGetUUIDOperators(): void + { + $this->assertEquals( + [ + '=', + '!=', + 'LIKE', + 'LIKE %...%', + 'NOT LIKE', + 'NOT LIKE %...%', + 'IN (...)', + 'NOT IN (...)', + ], + $this->object->getUUIDOperators() + ); + } + /** * Test for getting type operators * @@ -194,6 +214,36 @@ class TypesTest extends AbstractTestCase ], ], ], + [ + 'UUID', + false, + [ + '=', + '!=', + 'LIKE', + 'LIKE %...%', + 'NOT LIKE', + 'NOT LIKE %...%', + 'IN (...)', + 'NOT IN (...)', + ], + ], + [ + 'UUID', + true, + [ + '=', + '!=', + 'LIKE', + 'LIKE %...%', + 'NOT LIKE', + 'NOT LIKE %...%', + 'IN (...)', + 'NOT IN (...)', + 'IS NULL', + 'IS NOT NULL', + ], + ], ]; } From 8d3dc6c3f1c3ee3c9c74b08b97c7276086fba628 Mon Sep 17 00:00:00 2001 From: Mo Sureerat Date: Thu, 13 Oct 2022 04:38:12 +0700 Subject: [PATCH 3/3] Add test for Search UUID Signed-off-by: Mo Sureerat --- test/classes/Table/SearchTest.php | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/classes/Table/SearchTest.php b/test/classes/Table/SearchTest.php index d90f6cda23..867c28b10e 100644 --- a/test/classes/Table/SearchTest.php +++ b/test/classes/Table/SearchTest.php @@ -208,4 +208,34 @@ class SearchTest extends AbstractTestCase $this->search->buildSqlQuery() ); } + + public function testBuildSqlQueryWithWhereClauseUUID(): void + { + $_POST['zoom_submit'] = true; + $_POST['table'] = 'PMA'; + + $this->assertEquals( + 'SELECT * FROM `PMA`', + $this->search->buildSqlQuery() + ); + + $_POST['customWhereClause'] = ''; + + $this->assertEquals( + 'SELECT * FROM `PMA`', + $this->search->buildSqlQuery() + ); + + unset($_POST['customWhereClause']); + $_POST['criteriaColumnNames'] = ['id']; + $_POST['criteriaColumnOperators'] = ['=']; + + $_POST['criteriaValues'] = ['07ca1fdd-4805-11ed-a4dc-0242ac110002']; + $_POST['criteriaColumnTypes'] = ['uuid']; + + $this->assertEquals( + "SELECT * FROM `PMA` WHERE `id` = '07ca1fdd-4805-11ed-a4dc-0242ac110002'", + $this->search->buildSqlQuery() + ); + } }