Skip to content

Commit dcf780a

Browse files
Database: Add support for SET STATEMENT in wpdb::get_table_from_query().
MariaDB supports setting various parameters for queries. This commit ensures that `wpdb` can properly retrieve the table name from such queries. Reference: [https://mariadb.com/docs/server/reference/sql-statements/administrative-sql-statements/set-commands/set-statement MariaDB Documentation: SET STATEMENT]. Follow-up to [30345]. Props dd32. Fixes #63777. git-svn-id: https://develop.svn.wordpress.org/trunk@60622 602fd350-edb4-49c9-b593-d223f7449a82
1 parent 7a680be commit dcf780a

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

src/wp-includes/class-wpdb.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3803,6 +3803,9 @@ protected function get_table_from_query( $query ) {
38033803
// Strip everything between parentheses except nested selects.
38043804
$query = preg_replace( '/\((?!\s*select)[^(]*?\)/is', '()', $query );
38053805

3806+
// Strip any leading SET STATEMENT statements.
3807+
$query = preg_replace( '/^SET STATEMENT.+?\sFOR\s+/is', '', $query );
3808+
38063809
// Quickly match most common queries.
38073810
if ( preg_match(
38083811
'/^\s*(?:'

tests/phpunit/tests/db.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -850,6 +850,9 @@ public function data_get_table_from_query() {
850850

851851
// @ticket 32763
852852
'SELECT ' . str_repeat( 'a', 10000 ) . " FROM (SELECT * FROM $table) as subquery",
853+
854+
// @ticket 63777
855+
"SET STATEMENT max_statement_time=1 FOR SELECT * FROM $table",
853856
);
854857

855858
$querycount = count( $queries );

0 commit comments

Comments
 (0)