[HyperDB] is_write_query too strict

Gabriel Koen gkoen at corp.mail.com
Fri Jul 30 17:14:28 UTC 2010


Came across an issue where only the first query (autoload options) was being
sent to the read slave(s). Turns out a couple plugins had the syntax 'SHOW
TABLES LIKE...' which HyperDB thought was a read query, since it didn't
match 'SELECT' as the first word. Made a quick fix for what I think are some
common read statements to db.php:

function is_write_query( $q ) {
		$pattern = '/^\s*(SELECT|SHOW|DESCRIBE|EXPLAIN)\s+/i';
		return (preg_match($pattern, $q)) ? false : true;
	}

As you can see my regex-fu is weak, I spent a good 40 minutes trying to
negatively match those words. Gave up, instead positively match them and
then return true if there's *not* a match.


Gabriel


More information about the HyperDB mailing list