From 79ed1ffcfd7c00fe78cec7b5db7fc2c758213b0c Mon Sep 17 00:00:00 2001 From: Andrey Savchenko Date: Thu, 8 Mar 2018 18:28:17 +0200 Subject: [PATCH] Moved SQL data processing to a separate method. --- src/Record/Sql_Record_Collector.php | 47 +++++++++++++++++------------ 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/Record/Sql_Record_Collector.php b/src/Record/Sql_Record_Collector.php index e84a573..1f3e34c 100644 --- a/src/Record/Sql_Record_Collector.php +++ b/src/Record/Sql_Record_Collector.php @@ -16,7 +16,7 @@ class Sql_Record_Collector implements Record_Collector_Interface { public function __construct() { if ( $this->is_savequeries() ) { - add_filter( 'query', [ $this, 'query' ], 20 ); + add_filter( 'query', [ $this, 'query' ], 20 ); // TODO refactor when core provides time start data in 5.0. } } @@ -51,25 +51,7 @@ class Sql_Record_Collector implements Record_Collector_Interface { global $wpdb; - $query_data = []; - $last_query_end = 0; - - // TODO process call trace from the data. - foreach ( $wpdb->queries as $key => list( $sql, $duration ) ) { - $query_start = isset( $this->query_starts[ $key ] ) ? $this->query_starts[ $key ] : $last_query_end; - $sql = trim( $sql ); - $category = 'sql-read'; - - if ( 0 === stripos( $sql, 'INSERT' ) || 0 === stripos( $sql, 'UPDATE' ) ) { - $category = 'sql-write'; - } - - $last_query_end = $query_start + $duration; - - $query_data[] = new Record( $sql, $query_start, $duration, '', $category ); - } - - return $query_data; + return array_map( [ $this, 'transform' ], array_keys( $wpdb->queries ), $wpdb->queries ); } /** @@ -79,4 +61,29 @@ class Sql_Record_Collector implements Record_Collector_Interface { return defined( 'SAVEQUERIES' ) && SAVEQUERIES; } + + /** + * Transform query data, captured by core, into a Record. + * + * @param int $key Query key in captured data. + * @param array $query_data Array of captured query data. + * + * @return Record + */ + protected function transform( $key, $query_data ) { + + static $last_query_end = 0; + + list( $sql, $duration, $caller ) = $query_data; + + $query_start = isset( $this->query_starts[ $key ] ) ? $this->query_starts[ $key ] : $last_query_end; + $sql = trim( $sql ); + $category = 'sql-read'; + if ( 0 === stripos( $sql, 'INSERT' ) || 0 === stripos( $sql, 'UPDATE' ) ) { + $category = 'sql-write'; + } + $last_query_end = $query_start + $duration; + + return new Record( $sql, $query_start, $duration, '', $category ); + } }