From 725a056e39935fe2f90e9fa1052e2157feda1f80 Mon Sep 17 00:00:00 2001 From: Igor Lazarev Date: Sun, 8 Mar 2020 13:23:15 +0300 Subject: [PATCH 1/3] feature: similar to functions added --- .../ORM/Query/AST/Functions/NotSimilarTo.php | 22 +++++++++++++ .../ORM/Query/AST/Functions/SimilarTo.php | 22 +++++++++++++ .../Query/AST/Functions/NotSimilarToTest.php | 32 +++++++++++++++++++ .../ORM/Query/AST/Functions/SimilarToTest.php | 32 +++++++++++++++++++ 4 files changed, 108 insertions(+) create mode 100644 src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarTo.php create mode 100644 src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarTo.php create mode 100644 tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarToTest.php create mode 100644 tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarToTest.php diff --git a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarTo.php b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarTo.php new file mode 100644 index 0000000..d11b93e --- /dev/null +++ b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarTo.php @@ -0,0 +1,22 @@ + + */ +class NotSimilarTo extends BaseFunction +{ + protected function customiseFunction(): void + { + $this->setFunctionPrototype('%s not similar to %s'); + $this->addNodeMapping('StringPrimary'); + $this->addNodeMapping('StringPrimary'); + } +} diff --git a/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarTo.php b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarTo.php new file mode 100644 index 0000000..7f38fa6 --- /dev/null +++ b/src/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarTo.php @@ -0,0 +1,22 @@ + + */ +class SimilarTo extends BaseFunction +{ + protected function customiseFunction(): void + { + $this->setFunctionPrototype('%s similar to %s'); + $this->addNodeMapping('StringPrimary'); + $this->addNodeMapping('StringPrimary'); + } +} diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarToTest.php b/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarToTest.php new file mode 100644 index 0000000..8354a50 --- /dev/null +++ b/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarToTest.php @@ -0,0 +1,32 @@ + NotSimilarTo::class, + ]; + } + + protected function getExpectedSqlStatements(): array + { + return [ + "SELECT c0_.text not similar to 'TEST' AS sclr_0 FROM ContainsText c0_", + ]; + } + + protected function getDqlStatements(): array + { + return [ + \sprintf("SELECT NOT_SIMILAR_TO(e.text,'TEST') FROM %s e", ContainsText::class), + ]; + } +} diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarToTest.php b/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarToTest.php new file mode 100644 index 0000000..afccb5c --- /dev/null +++ b/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarToTest.php @@ -0,0 +1,32 @@ + SimilarTo::class, + ]; + } + + protected function getExpectedSqlStatements(): array + { + return [ + "SELECT c0_.text similar to 'TEST' AS sclr_0 FROM ContainsText c0_", + ]; + } + + protected function getDqlStatements(): array + { + return [ + \sprintf("SELECT SIMILAR_TO(e.text,'TEST') FROM %s e", ContainsText::class), + ]; + } +} From 3e522632558d3060f81cdc8754115224162b78ad Mon Sep 17 00:00:00 2001 From: Igor Lazarev Date: Mon, 9 Mar 2020 09:33:16 +0300 Subject: [PATCH 2/3] feature: similar to functions added * docs updated --- docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md b/docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md index f6fc9ab..b67ebf9 100644 --- a/docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md +++ b/docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md @@ -10,6 +10,8 @@ | #> | JSON_GET_OBJECT | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetObject` | | #>> | JSON_GET_OBJECT_AS_TEXT | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetObjectAsText` | | ilike | ILIKE | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Ilike` | +| similar to | SIMILAR_TO | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\SimilarTo` | +| not similar to | NOT_SIMILAR_TO | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\NotSimilarTo` | # Available functions From 5f9dd5692efe5ddd9d70e43debbdedc86e731e91 Mon Sep 17 00:00:00 2001 From: Igor Lazarev Date: Mon, 9 Mar 2020 19:24:51 +0300 Subject: [PATCH 3/3] feature: similar to functions added * docs updated --- docs/INTEGRATING-WITH-LARAVEL.md | 2 ++ docs/INTEGRATING-WITH-SYMFONY.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/docs/INTEGRATING-WITH-LARAVEL.md b/docs/INTEGRATING-WITH-LARAVEL.md index 322904b..0bf5da0 100644 --- a/docs/INTEGRATING-WITH-LARAVEL.md +++ b/docs/INTEGRATING-WITH-LARAVEL.md @@ -115,6 +115,8 @@ return [ # other operators 'ILIKE' => MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Ilike::class, + 'SIMILAR_TO' => MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\SimilarTo::class, + 'NOT_SIMILAR_TO' => MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\NotSimilarTo::class, ], ... diff --git a/docs/INTEGRATING-WITH-SYMFONY.md b/docs/INTEGRATING-WITH-SYMFONY.md index 340bbcc..f95f7bd 100644 --- a/docs/INTEGRATING-WITH-SYMFONY.md +++ b/docs/INTEGRATING-WITH-SYMFONY.md @@ -117,4 +117,6 @@ doctrine: # other operators ILIKE: MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Ilike + SIMILAR_TO: MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\SimilarTo + NOT_SIMILAR_TO: MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\NotSimilarTo ``` \ No newline at end of file