[4.0] [com_banners] Finish nullable and fix default values for not nullable datetime columns#26372
Merged
wilsonge merged 21 commits intojoomla:4.0-devfrom Oct 7, 2019
Merged
Conversation
Member
Author
|
@HLeithner Could you request a review by @wilsonge for me? I don't have the privilege to request reviews with GitHub methods in this repo, or I am too silly. |
Member
Author
|
@alikon Could you test? |
Contributor
|
i've played a bit with it on PostgreSQL 11.5 - linux |
Contributor
|
I have tested this item ✅ successfully on 3274488 This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/26372. |
This was referenced Sep 22, 2019
Member
Author
|
Please wait with further testing until PR #26295 is merged. |
…ners-ucm Handle UCM content, no defaults for not nullable columns, minimize impact on old data
This was referenced Sep 28, 2019
wilsonge
approved these changes
Sep 28, 2019
This was referenced Sep 29, 2019
Quy
reviewed
Sep 30, 2019
This was referenced Oct 3, 2019
[4.0] [com_fields] Fix default value for not nullable datetime columns and make some nullable
#26460
Merged
…-default-com-banners
Member
Author
|
Ready for test now as PR #26295 has been merged. |
Member
Author
|
@alikon Could you repeat your test? There have been made a few changes since then. |
Contributor
|
I have tested this item ✅ successfully on 12a3a2d This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/26372. |
Contributor
|
Thanks! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request for Issue #24535 (part).
Summary of Changes
Continuation of Pull Request (PR) #25360 .
This PR fixes all datetime columns of com_banners tables so there will not be any
Invalid value '0000-00-00 00:00:00' for datetimeerror anymore on MySQL 5.7 or later when strict mode is enabled, and thedatetime(MySQL) ortimestamp without time zone(PostgreSQL) columns will allowNULLvalues wherever useful/possible.Change no. 1
This PR continues the work of PR #25360 by making following database columns nullable, too:
#__bannerscolumnreset#__banner_clientscolumnchecked_out_timeChange no. 2
In addition this PR removes the default values from columns
createdandmodifiedof table#__banners. 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.Old data will be updated as little as possible. The created column will be not touched at all. We can assume that for core components there is no data with values '0000-00-00 00:00:00' on MySQL or '1970-01-01 00:00:00' on PostgreSQL, and data created by 3rd party components should not be modified. The modified column will be set to the value of the created column only has value '0000-00-00 00:00:00' on MySQL or '1970-01-01 00:00:00' on '1970-01-01 00:00:00'. Our PHP already sets the modified time to the created time when saving new records, i.e. modified = created means never modified.
Change no. 3
This PR fixes corresponding PHP so for the nullable columns there is no check anymore for pseudo null dates or abused oldest date null dates but only for real NULL values, which is safe when we have made sure with the sql update script that on an updated core there is none of these pseudo null dates or abused oldest date null dates.
Change no. 4
Finally, this PR updates the component-specific install script
install.mysql.utf8.sql, which might be used for a discovery installation of com_banners` in case if that's needed for some reason. Not use if that has to be done, it has not been done with PR #25360 before.Note on updating old 4.0 sql update scripts
Since we are not in Beta phase yet and so don't have to support updates from 4.0-Alpha-x to 4.0-Alpha-y or between nightly builds, we can change the existing 4.0 update scripts (but of course not pre-4.0 scripts). Later when in beta this will not be allowed anymore because we have to support updating from Beta-x to Beta-y (with y > x of course), so now is a good time to fix them.
Furthermore it makes sense to keep the schema updates for the datetime columns of each table together in one script, because on MySQL it might be necessary to combine all changes for a particular table into 1 single
ALTER TABLEstatement in order to run properly in strict mode (i.e. strict tables enabled). Currently the db checker/fixer can't understand such statements, but it might be necessary to teach that tool soon to do that.That's why this PR updates the existing sql update script and doesn't create a new one.
Testing Instructions
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.phpand delete all Joomla database tables in PhpMyAdmin or PhpPgAdmin (depending on your database type).datetime/timestamp without timezonecolumns.Result: See section "Expected result" below.
Test 2: Update sql script
installation/sql/mysql/joomla.sqlinto the SQL command window but don't execute the commands yet: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-06-28.sqloradministrator/components/com_admin/sql/updates/postgresql/4.0.0-2019-06-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 timezonecolumns.Result: See section "Expected result" below.
Expected result
Banners work as well as before. In a MySQL database there are no columns of type
datetimehaving value '0000-00-00 00:00:00'. Nullable columns haveNULLwhen they should have in any kind of database. Following columns are nullable, too, beside those which were already before this PR:#__bannerscolumnreset#__banner_clientscolumnchecked_out_timeThere is one exception: When checking in a banner using com_checkin, the
checked_out_timeis 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. therechecked_out_timeis set to NULL.Actual result
Banners work. In a MySQL database there might be are columns of type
datetimehaving value '0000-00-00 00:00:00'. In any kind of database nullable columns don't always haveNULLwhen they should have.Documentation Changes Required
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.