From 73a1637628021cf66a7e234bf6047fbae5893df0 Mon Sep 17 00:00:00 2001 From: Samuel Pietro Date: Sat, 23 Nov 2024 22:26:16 -0300 Subject: [PATCH] [feature] Add support for FIND_IN_SET operator --- src/Medoo.php | 8 ++++++++ tests/SelectTest.php | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/Medoo.php b/src/Medoo.php index 5c9eb6ae..6447f991 100644 --- a/src/Medoo.php +++ b/src/Medoo.php @@ -1002,6 +1002,14 @@ protected function dataImplode(array $data, array &$map, string $conjunctor): st } elseif ($operator === 'REGEXP') { $stack[] = "{$column} REGEXP {$mapKey}"; $map[$mapKey] = [$value, PDO::PARAM_STR]; + } elseif ($operator === 'FIND_IN_SET') { + $mapKey = $this->mapKey(); + $stack[] = "FIND_IN_SET({$mapKey}, {$column})"; + if (is_array($value)) { + $map[$mapKey] = [implode(',', $value), PDO::PARAM_STR]; + } else { + $map[$mapKey] = [$value, PDO::PARAM_STR]; + } } else { throw new InvalidArgumentException("Invalid operator [{$operator}] for column {$column} supplied."); } diff --git a/tests/SelectTest.php b/tests/SelectTest.php index 7da61586..2070c5d4 100644 --- a/tests/SelectTest.php +++ b/tests/SelectTest.php @@ -712,4 +712,30 @@ public function testSelectWithSingleCharacter($type) $this->database->queryString ); } + + /** + * @covers ::select() + * @covers ::selectContext() + * @covers ::isJoin() + * @covers ::columnMap() + * @covers ::columnPush() + * @dataProvider typesProvider + */ + public function testFindInSet($type) + { + $this->setType($type); + + + $this->database->select("table", 'column', [ + "column[FIND_IN_SET]" => ["values", "values_two"] + ]); + + $this->assertQuery( + <<database->queryString + ); + } + }