Skip to content

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

Open
stuartlangridge wants to merge 1 commit intoaaemnnosttv:masterfrom
stuartlangridge:transient_multiple_delete
Open

Hardcode query to remove transients as per issue #26#58
stuartlangridge wants to merge 1 commit intoaaemnnosttv:masterfrom
stuartlangridge:transient_multiple_delete

Conversation

@stuartlangridge
Copy link
Copy Markdown

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 like
```sql
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant