null, 'server_version' => null, 'charset' => null, 'collation' => null, 'ready' => null ); if ( is_object( $wpdb ) ) { // Read only these public operational fields. Never serialize the connection. $metadata['ready'] = isset( $wpdb->ready ) ? (bool) $wpdb->ready : null; foreach ( array( 'charset' => 'charset', 'collation' => 'collate' ) as $key => $property ) { $value = $wpdb->$property ?? null; $metadata[ $key ] = is_string( $value ) && preg_match( '/^[a-zA-Z0-9_]+$/D', $value ) ? $value : null; } // A ready flag is WordPress state, not a new connection/ping or health check. if ( $metadata['ready'] && ! empty( $wpdb->is_mysql ) ) { $metadata['server_type'] = 'MySQL'; try { $info = is_callable( array( $wpdb, 'db_server_info' ) ) ? $wpdb->db_server_info() : ''; if ( is_string( $info ) && stripos( $info, 'MariaDB' ) !== false ) { $metadata['server_type'] = 'MariaDB'; // Ignore MariaDB's legacy 5.5.5 compatibility prefix. if ( preg_match( '/(\d+\.\d+\.\d+)-MariaDB/i', $info, $match ) ) { $metadata['server_version'] = $match[1]; } } if ( $metadata['server_version'] === null && is_callable( array( $wpdb, 'db_version' ) ) ) { $version = $wpdb->db_version(); if ( is_string( $version ) && preg_match( '/^\d+(?:\.\d+)+$/D', $version ) ) { $metadata['server_version'] = $version; } } } catch ( \Throwable $error ) { // Unavailable server data stays unknown; never expose connection errors. } } } return array( 'nodes' => array( new Node( 'system:database', 'database', 'system', 'Database', 'unknown', 0, $metadata ) ), 'edges' => array() ); } }