Repository navigation
Support composite TRADITIONAL SQL mode - #509
Conversation
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (2)
Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 1 remain after this review. 📝 WalkthroughWalkthrough
ChangesTRADITIONAL SQL mode
Priority: ➖ Normal Estimated code review effort: 2 (Simple) | ~15 minutes Change: Bug fix Suggested reviewers: Merge Risk: ⚪ Minimal · up to Assigning TRADITIONAL now enables its component SQL modes, with NO_AUTO_CREATE_USER included only for MySQL versions before 8.0.11. The change is small and comes with coverage for version boundaries and enforcement. No merge-blocking risk is evident. Security Architecture ReviewSecurity architecture risk: ⚪ Minimal · up to The change activates existing validation within the same database connection without expanding SQL access or privileges. No material security risk introduced or worsened by this change was identified; existing emulation limitations remain. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Retain TRADITIONAL while enabling its strict, zero-date, division-by-zero, and engine-substitution flags for named and numeric assignments. Include NO_AUTO_CREATE_USER only for MySQL versions before its removal in 8.0.11. Cover version differences, canonical serialization, mixed composite modes, round trips, clearing modes, and existing strict and date validation. https://dev.mysql.com/doc/refman/8.4/en/sql-mode.html#sql-mode-Budug https://github.com/mysql/mysql-server/blob/5.7/sql/sys_vars.cc https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html
b15ab9d to
0af7e9d
Compare
TRADITIONAL SQL mode
zaerl
left a comment
There was a problem hiding this comment.
It seems perfectly fine to me. Great work.
## Release `3.1.0` Prepares the version numbers and release notes for `3.1.0`. **Changelog draft:** --- **SQLite Database Integration 3.1 is here! 🎉** This release improves **database storage and configuration** and fixes several MySQL compatibility issues. ## What's new Version 3.1 improves how WordPress sites store, locate, and protect their SQLite databases. It also fixes SQL behavior and export compatibility: - **Randomized database paths:** The default database location is now a randomized directory under `wp-content/database/`, recorded in `wp-content/database/db-path.php`. ([#502](#502)) - **`DB_PATH`:** Configure the database with one full-path constant, also available at runtime for integrations. ([#512](#512)) - **SQL compatibility:** Fix `IF()` condition evaluation and make `TRADITIONAL` enable its component SQL modes. ([#518](#518), [#509](#509)) - **WordPress table collations:** Default to `utf8mb4_unicode_520_ci` for new tables created with WordPress's charset settings, improving exports to MariaDB. Existing tables keep their recorded collation. ([#514](#514)) - **Documentation:** A new plugin README and expanded FAQ explain database storage and secure configuration. ([#520](#520)) For more information about database paths and secure configuration, read the [database storage guide](https://github.com/WordPress/sqlite-database-integration/blob/trunk/packages/plugin-sqlite-database-integration/README.md#database-storage). ## Upgrading to 3.1 Upgrading an existing SQLite site is straightforward: 1. **Back up** your SQLite database. 2. **Update the plugin** to version 3.1. Existing `.ht.sqlite` and `.ht.sqlite.php` databases move to the randomized layout automatically unless a database file path is explicitly configured. To properly **secure the database**, set `DB_PATH` in `wp-config.php` to an absolute file path outside the web root that your web server does not expose. Its directory must be writable by PHP. Changing `DB_PATH` does not move an existing database. ## Breaking changes Review these changes if you use custom database settings or integrations: - **Database paths:** Default database files now move to randomized paths under `wp-content/database/`. Explicitly configured file paths stay unchanged. Integrations, including backup and migration tools, must read `DB_PATH` after WordPress loads instead of assuming a fixed filename. - **Legacy constants:** `DB_DIR` and `DB_FILE` are now deprecated. They and the previously deprecated `FQDB` and `FQDBDIR` remain supported, but `DB_PATH` takes precedence. Conflicting values trigger warnings. - **Absolute paths:** Relative database file and directory paths are now rejected. `:memory:` remains available for in-memory databases. ## Thank you Thank you to everyone who contributed, tested, and helped update integrations. **Changes since 3.0.2:** [`v3.0.2...v3.1.0`](v3.0.2...v3.1.0) --- **PR comparison:** [`v3.0.2...release/v3.1.0`](v3.0.2...release/v3.1.0) ## Next steps 1. **Review** the release changes and changelog draft. 2. **Merge** this pull request to complete the release. Merging will automatically build the plugin ZIP, create a [GitHub release](https://github.com/WordPress/sqlite-database-integration/releases), and deploy to [WordPress.org](https://wordpress.org/plugins/sqlite-database-integration/).
Summary
Make
TRADITIONALenable its component SQL modes. Previously,SET sql_mode = 'TRADITIONAL'stored only the composite flag, leaving the driver's existing strict and zero-date checks disabled. It now expands the mode for both named and numeric assignments and retainsTRADITIONALin@@sql_mode.The expansion follows the emulated MySQL version, including
NO_AUTO_CREATE_USERbefore its removal in MySQL 8.0.11. Regression coverage checks version differences, canonical mode ordering, combination withANSI, reassignment, clearing modes, and rejection of invalid dates and missing required values.This PR does not implement the deprecated MySQL 5.7 composite modes, such as
ORACLE,MSSQL, andPOSTGRESQL.Why
Applications should get the same existing checks whether they select
TRADITIONALor list its component modes individually. This change uses the driver's current implementations of those modes; their existing emulation limits still apply.MySQL documents
TRADITIONALas a combination mode.Summary by CodeRabbit
TRADITIONALSQL mode now applies its expected strict validation rules, including rejecting invalid or zero dates and missing orNULLvalues inNOT NULLcolumns.TRADITIONALmode assignments now expand consistently across supported assignment formats, including combined mode lists and numeric bitmaps.NO_AUTO_CREATE_USERis available.