Ticket #54841: 54841.diff
| File 54841.diff, 3.1 KB (added by , 3 years ago) |
|---|
-
src/wp-includes/class-wpdb.php
3945 3945 * @return bool True when the database feature is supported, false otherwise. 3946 3946 */ 3947 3947 public function has_cap( $db_cap ) { 3948 $version = $this->db_version(); 3948 $db_version = $this->db_version(); 3949 $db_server_info = $this->db_server_info(); 3949 3950 3951 // Account for MariaDB version being prefixed with '5.5.5-' on older PHP versions. 3952 if ( '5.5.5' === $db_version && str_contains( $db_server_info, 'MariaDB' ) 3953 && PHP_VERSION_ID < 80016 // PHP 8.0.15 or older. 3954 ) { 3955 // Strip the '5.5.5-' prefix and set the version to the correct value. 3956 $db_server_info = preg_replace( '/^5\.5\.5-(.*)/', '$1', $db_server_info ); 3957 $db_version = preg_replace( '/[^0-9.].*/', '', $db_server_info ); 3958 } 3959 3950 3960 switch ( strtolower( $db_cap ) ) { 3951 3961 case 'collation': // @since 2.5.0 3952 3962 case 'group_concat': // @since 2.7.0 3953 3963 case 'subqueries': // @since 2.7.0 3954 return version_compare( $ version, '4.1', '>=' );3964 return version_compare( $db_version, '4.1', '>=' ); 3955 3965 case 'set_charset': 3956 return version_compare( $ version, '5.0.7', '>=' );3966 return version_compare( $db_version, '5.0.7', '>=' ); 3957 3967 case 'utf8mb4': // @since 4.1.0 3958 if ( version_compare( $ version, '5.5.3', '<' ) ) {3968 if ( version_compare( $db_version, '5.5.3', '<' ) ) { 3959 3969 return false; 3960 3970 } 3961 3971 if ( $this->use_mysqli ) { … … 3975 3985 return version_compare( $client_version, '5.5.3', '>=' ); 3976 3986 } 3977 3987 case 'utf8mb4_520': // @since 4.6.0 3978 return version_compare( $ version, '5.6', '>=' );3988 return version_compare( $db_version, '5.6', '>=' ); 3979 3989 case 'identifier_placeholders': // @since 6.1.0 3980 3990 /* 3981 3991 * As of WordPress 6.1, wpdb::prepare() supports identifiers via '%i', -
tests/phpunit/tests/db/charset.php
47 47 self::$db_server_info = self::$_wpdb->db_server_info(); 48 48 49 49 // Account for MariaDB version being prefixed with '5.5.5-' on older PHP versions. 50 if ( str_contains( self::$db_server_info, 'MariaDB' ) && '5.5.5' === self::$db_version50 if ( '5.5.5' === self::$db_version && str_contains( self::$db_server_info, 'MariaDB' ) 51 51 && PHP_VERSION_ID < 80016 // PHP 8.0.15 or older. 52 52 ) { 53 53 // Strip the '5.5.5-' prefix and set the version to the correct value. … … 1189 1189 1190 1190 self::$_wpdb->set_charset( self::$_wpdb->dbh ); 1191 1191 } 1192 1193 /** 1194 * @ticket 54841 1195 */ 1196 public function test_mariadb_supports_utf8mb4_520() { 1197 global $wpdb; 1198 1199 // utf8mb4_520 is available in MariaDB since version 10.2. 1200 if ( ! str_contains( self::$db_server_info, 'MariaDB' ) 1201 || version_compare( self::$db_version, '10.2', '<' ) 1202 ) { 1203 $this->markTestSkipped( 'This test requires MariaDB 10.2 or later.' ); 1204 } 1205 1206 $this->assertTrue( $wpdb->has_cap( 'utf8mb4_520' ) ); 1207 } 1192 1208 }