When deleting transients, either with wp transient delete --all or by doing a database import with AI1WM, the rewriter fails on a SQL query which uses MySQL's multiple-table delete syntax. The incoming query looks like
DELETE a, b FROM wp_options a, wp_options b
WHERE a.option_name LIKE '_transient_%'
AND a.option_name NOT LIKE '_transient_timeout_%'
AND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )
AND b.option_value < 1677325977
SQLite does not support this syntax, and it doesn't support CONCAT either. So, detect this specific query (and another one very like it with _site_transient_%) and rewrite it wholesale to an equivalent query in SQLite syntax. There's also a check for option_value being less than a timestamp, which is not hardcoded, so we extract that timestamp from the incoming query and use it in the rewritten one.
When deleting transients, either with
wp transient delete --all
or by doing a database import with AI1WM, the rewriter fails on a SQL query which uses MySQL's multiple-table delete syntax. The incoming query looks likeSQLite does not support this syntax, and it doesn't support CONCAT either. So, detect this specific query (and another one very like it with
_site_transient_%
) and rewrite it wholesale to an equivalent query in SQLite syntax. There's also a check for option_value being less than a timestamp, which is not hardcoded, so we extract that timestamp from the incoming query and use it in the rewritten one.