[TASK] Deprecate caseSensitive parameter of Extbase Query::like 56/49856/4
authorMorton Jonuschat <m.jonuschat@mojocode.de>
Sun, 4 Sep 2016 13:06:58 +0000 (15:06 +0200)
committerWouter Wolters <typo3@wouterwolters.nl>
Fri, 21 Oct 2016 13:59:48 +0000 (15:59 +0200)
In contrast to a case insensitive query a case sensitive query can
not be enforced as it largely depends on the settings of the database
system. Deprecate the parameter as it isn't used at all and log
an appropriate notice.

Change-Id: Ie767c6a9d5d3de5857c7a3bf38a5dd43ce580d07
Resolves: #57385
Releases: master
Reviewed-on: https://review.typo3.org/49856
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
typo3/sysext/core/Documentation/Changelog/master/Deprecation-57385-DeprecateParameterCaseSensitiveOfExtbaseLikeComparison.rst [new file with mode: 0644]
typo3/sysext/extbase/Classes/Persistence/Generic/Query.php

diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-57385-DeprecateParameterCaseSensitiveOfExtbaseLikeComparison.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-57385-DeprecateParameterCaseSensitiveOfExtbaseLikeComparison.rst
new file mode 100644 (file)
index 0000000..e58a284
--- /dev/null
@@ -0,0 +1,35 @@
+.. include:: ../../Includes.txt
+
+==========================================================================================
+Deprecation: #57385 - Deprecate parameter $caseSensitive of Extbase Query::like comparison
+==========================================================================================
+
+See :issue:`57385`
+
+Description
+===========
+
+The argument :php:`$caseSensitive` of the method :php:`Query::like` has been deprecated:
+
+
+Impact
+======
+
+Using the argument will trigger a deprecation log entry.
+
+
+Affected Installations
+======================
+
+Any TYPO3 installation using custom calls to :php:`Query::like` using the mentioned argument.
+
+
+Migration
+=========
+
+For MySQL change the collation of the queried field to be stored in a case sensitive fashion.
+This requires using a collation with a suffix of `_cs` for the field or table. Alternatively
+a binary column type can be used. Both solutions will ensure the field will be queried in a
+case sensitive fashion.
+
+.. index:: Database, PHP-API, ext:extbase
index 65d4358..d0ae444 100644 (file)
@@ -14,6 +14,7 @@ namespace TYPO3\CMS\Extbase\Persistence\Generic;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Persistence\QueryInterface;
 
 /**
@@ -493,13 +494,26 @@ class Query implements QueryInterface
      *
      * @param string $propertyName The name of the property to compare against
      * @param mixed $operand The value to compare with
-     * @param bool $caseSensitive Whether the matching should be done case-sensitive
+     * @param bool $caseSensitive, deprecated since TYPO3 v8, will be removed in TYPO3 v9
      * @return \TYPO3\CMS\Extbase\Persistence\Generic\Qom\ComparisonInterface
      * @api
      */
-    public function like($propertyName, $operand, $caseSensitive = true)
+    public function like($propertyName, $operand, $caseSensitive = null)
     {
-        return $this->qomFactory->comparison($this->qomFactory->propertyValue($propertyName, $this->getSelectorName()), QueryInterface::OPERATOR_LIKE, $operand);
+        if ($caseSensitive !== null) {
+            GeneralUtility::deprecationLog(
+                'The parameter $caseSensitive for the Extbase like criterion has been deprecated.' .
+                'A case sensitive comparison cannot be reliably done as it is dependent on Database ' .
+                'Server settings. For MySQL switch the field to a case sensitive collation to achieve ' .
+                'the desired result.'
+            );
+        }
+
+        return $this->qomFactory->comparison(
+            $this->qomFactory->propertyValue($propertyName, $this->getSelectorName()),
+            QueryInterface::OPERATOR_LIKE,
+            $operand
+        );
     }
 
     /**