User tests: Successful: Unsuccessful:
Pull Request for Issue #24535 (part).
This Pull Request (PR) fixes all datetime columns of the #__user_notes
database table so there will not be any Invalid value '0000-00-00 00:00:00' for datetime
error anymore on MySQL 5.7 or later when strict mode is enabled.
The user notes are handled like other tables in my other PR's: Columns publish_up
, publish_down
and checked_out_time
will be nullable and will have default value NULL, and the same is done with column review_time
. Columns created_time
and modified_time
will not allow null values like before, but the default value will be removed. This will enforce to insert new records with values for these columns being provided and throw an SQL error if some of these values is not specified, i.e. such errors will not be hidden anymore.
Testers please report back the database kind (MySQL or PostgreSQL) on which you have tested.
If you have both MySQL and PostgreSQL, please test on both if possible.
Test 1: New installation
configuration.php
and delete all Joomla database tables in PhpMyAdmin or PhpPgAdmin (depending on your database type).datetime
/timestamp without timezone
columns.Result: See section "Expected result" below.
Test 2: Update sql script
installation/sql/mysql/joomla.sql
into the SQL command window but don't execute the commands yet:SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
This switches off strict mode to the SQL will run on MySQL 5.7 or later.
administrator/components/com_admin/sql/updates/mysql/4.0.0-2019-09-28.sql
or administrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-09-28.sql
(depending on your database type) into the SQL command window, in case of MySQL below the previously pasted commands, but don't execute the commands yet.#__
by your database prefix in the SQL statements pasted before in the SQL input window.datetime
/timestamp without timezone
columns.Result: See section "Expected result" below.
New Installation
User notes work as well as without this PR. In a MySQL database there are no columns of data type datetime
having value '0000-00-00 00:00:00' in table #__user_notes
, and there is no invalid default value anymore in MySQL >= 5.7 with strict mode on. On PostgreSQL there are no columns of data type timestamp without time zone
having value '0000-00-00 00:00:00' in this table.
There is one exception: When checking in a user note using com_checkin, the checked_out_time
in table #__user_notes
is set to '0000-00-00 00:00:00' on MySQL and '1970-01-01 00:00:00' on PosgreSQL. This will be changed with a separate, future PR for com_checkin. Checking in an item with the lock icon in list display works, i.e. there checked_out_time
is set to NULL.
Update sql script
The statements are processed without error. The expected result is the same as for a new installation.
New Installation
On MySQL same as expected, but the default value '0000-00-00 00:00:00' of database columns of data type datetime
is invalid in MySQL >= 5.7 with strict mode on, and there might be values '0000-00-00 00:00:00'. On postgreSQL same as expected, but there might be values '1970-01-01 00:00:00' in this table.
Maybe core developer docs and extension developer docs should be updated to encourage them not to use '0000-00-00 00:00:00' on MySQL anymore but use real NULL and not abuse '1970-01-01 00:00:00' on PostgreSQL as a speudo null date anymore and use real NULL values also there.
Status | New | ⇒ | Pending |
Category | ⇒ | SQL Administration com_admin Postgresql com_users Installation |
Status | Pending | ⇒ | Fixed in Code Base |
Closed_Date | 0000-00-00 00:00:00 | ⇒ | 2019-10-16 22:10:26 |
Closed_By | ⇒ | wilsonge | |
Labels |
Added:
?
|
Thanks!