Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

stuartlangridge
Copy link

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