Make WordPress Core

Ticket #54841: 54841.diff

File 54841.diff, 3.1 KB (added by SergeyBiryukov, 3 years ago)
  • src/wp-includes/class-wpdb.php

     
    39453945         * @return bool True when the database feature is supported, false otherwise.
    39463946         */
    39473947        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();
    39493950
     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
    39503960                switch ( strtolower( $db_cap ) ) {
    39513961                        case 'collation':    // @since 2.5.0
    39523962                        case 'group_concat': // @since 2.7.0
    39533963                        case 'subqueries':   // @since 2.7.0
    3954                                 return version_compare( $version, '4.1', '>=' );
     3964                                return version_compare( $db_version, '4.1', '>=' );
    39553965                        case 'set_charset':
    3956                                 return version_compare( $version, '5.0.7', '>=' );
     3966                                return version_compare( $db_version, '5.0.7', '>=' );
    39573967                        case 'utf8mb4':      // @since 4.1.0
    3958                                 if ( version_compare( $version, '5.5.3', '<' ) ) {
     3968                                if ( version_compare( $db_version, '5.5.3', '<' ) ) {
    39593969                                        return false;
    39603970                                }
    39613971                                if ( $this->use_mysqli ) {
     
    39753985                                        return version_compare( $client_version, '5.5.3', '>=' );
    39763986                                }
    39773987                        case 'utf8mb4_520': // @since 4.6.0
    3978                                 return version_compare( $version, '5.6', '>=' );
     3988                                return version_compare( $db_version, '5.6', '>=' );
    39793989                        case 'identifier_placeholders': // @since 6.1.0
    39803990                                /*
    39813991                                 * As of WordPress 6.1, wpdb::prepare() supports identifiers via '%i',
  • tests/phpunit/tests/db/charset.php

     
    4747                self::$db_server_info = self::$_wpdb->db_server_info();
    4848
    4949                // 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_version
     50                if ( '5.5.5' === self::$db_version && str_contains( self::$db_server_info, 'MariaDB' )
    5151                        && PHP_VERSION_ID < 80016 // PHP 8.0.15 or older.
    5252                ) {
    5353                        // Strip the '5.5.5-' prefix and set the version to the correct value.
     
    11891189
    11901190                self::$_wpdb->set_charset( self::$_wpdb->dbh );
    11911191        }
     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        }
    11921208}