aaemnnosttv / wp-sqlite-db

A single file drop-in for using a SQLite database with WordPress. Based on the original SQLite Integration plugin.
551 stars 93 forks source link

Hardcode query to remove transients as per issue #26 #58

Open stuartlangridge opened 1 year ago

stuartlangridge commented 1 year ago

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.