This repository has been archived by the owner on Nov 8, 2023. It is now read-only.
/
tidb-compatibility.php
44 lines (44 loc) · 1.79 KB
/
tidb-compatibility.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
/*
Plugin Name: TiDB Compatibility
Description: Optimize slow queries in WordPress.
Version: 0.1
Author: Cheng Chen
*/
class FIX_WP_SLOW_QUERY {
public static function init() {
/**
* WP_Query
*/
add_filter( 'found_posts_query', [ __CLASS__, 'add_found_rows_query' ], 999, 2 );
add_filter( 'posts_request_ids', [ __CLASS__, 'remove_found_rows_query' ], 999 );
add_filter( 'posts_pre_query', function ( $posts, \WP_Query $query ) {
$query->request = self::remove_found_rows_query( $query->request );
return $posts;
}, 999, 2 );
add_filter( 'posts_clauses', function ( $clauses, \WP_Query $wp_query ) {
$wp_query->fw_clauses = $clauses;
return $clauses;
}, 999, 2 );
}
public static function remove_found_rows_query( $sql ) {
return str_replace( ' SQL_CALC_FOUND_ROWS ', '', $sql );
}
public static function add_found_rows_query( $sql, WP_Query $query ) {
global $wpdb;
$distinct = $query->fw_clauses['distinct'] ?? '';
$join = $query->fw_clauses['join'] ?? '';
$where = $query->fw_clauses['where'] ?? '';
$groupby = $query->fw_clauses['groupby'] ?? '';
$count = 'COUNT(*)';
if ( ! empty( $groupby ) ) {
$count = "COUNT( distinct $groupby )";
}
return "
SELECT $distinct $count
FROM {$wpdb->posts} $join
WHERE 1=1 $where
";
}
}
FIX_WP_SLOW_QUERY::init();