-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
OF-2500: Stop using text to represent dates or timestamps #3034
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
Draft
guusdk
wants to merge
7
commits into
igniterealtime:main
Choose a base branch
from
guusdk:OF-2500_Database-timestamp
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
1716073
OF-2500: Change database timestamp representation in code
guusdk 5c40336
OF-2500: Reflect datatype change in documentation
guusdk 6c905cb
OF-2500: Postgresql database upgrade
guusdk 32f657e
OF-2500: Explicitly define UTC-calendar
guusdk f8eef03
OF-2500: Postgres to use TIMESTAMP WITH TIME ZONE
guusdk 7e39621
OF-2500: Switch from java.sql.Timestamp to java.time.Instant
guusdk bcded77
WIP OF-2500: MySQL database upgrade
guusdk File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,8 +11,8 @@ CREATE TABLE ofUser ( | |
encryptedPassword VARCHAR(255), | ||
name VARCHAR(100), | ||
email VARCHAR(100), | ||
creationDate CHAR(15) NOT NULL, | ||
modificationDate CHAR(15) NOT NULL, | ||
creationDate TIMESTAMP WITH TIME ZONE NOT NULL, | ||
modificationDate TIMESTAMP WITH TIME ZONE NOT NULL, | ||
CONSTRAINT ofUser_pk PRIMARY KEY (username) | ||
); | ||
CREATE INDEX ofUser_cDate_idx ON ofUser (creationDate); | ||
|
@@ -29,8 +29,8 @@ CREATE TABLE ofUserProp ( | |
CREATE TABLE ofUserFlag ( | ||
username VARCHAR(64) NOT NULL, | ||
name VARCHAR(100) NOT NULL, | ||
startTime CHAR(15), | ||
endTime CHAR(15), | ||
startTime TIMESTAMP WITH TIME ZONE, | ||
endTime TIMESTAMP WITH TIME ZONE, | ||
CONSTRAINT ofUserFlag_pk PRIMARY KEY (username, name) | ||
); | ||
CREATE INDEX ofUserFlag_sTime_idx ON ofUserFlag (startTime); | ||
|
@@ -40,7 +40,7 @@ CREATE INDEX ofUserFlag_eTime_idx ON ofUserFlag (endTime); | |
CREATE TABLE ofOffline ( | ||
username VARCHAR(64) NOT NULL, | ||
messageID INTEGER NOT NULL, | ||
creationDate CHAR(15) NOT NULL, | ||
creationDate TIMESTAMP WITH TIME ZONE NOT NULL, | ||
messageSize INTEGER NOT NULL, | ||
stanza TEXT NOT NULL, | ||
CONSTRAINT ofOffline_pk PRIMARY KEY (username, messageID) | ||
|
@@ -50,7 +50,7 @@ CREATE TABLE ofOffline ( | |
CREATE TABLE ofPresence ( | ||
username VARCHAR(64) NOT NULL, | ||
offlinePresence TEXT, | ||
offlineDate VARCHAR(15) NOT NULL, | ||
offlineDate TIMESTAMP WITH TIME ZONE NOT NULL, | ||
CONSTRAINT ofPresence_pk PRIMARY KEY (username) | ||
); | ||
|
||
|
@@ -108,7 +108,7 @@ CREATE TABLE ofGroupUser ( | |
administrator INTEGER NOT NULL, | ||
CONSTRAINT ofGroupUser_pk PRIMARY KEY (groupName, username, administrator) | ||
); | ||
|
||
|
||
CREATE TABLE ofID ( | ||
idType INTEGER NOT NULL, | ||
|
@@ -189,13 +189,13 @@ CREATE TABLE ofMucServiceProp ( | |
CREATE TABLE ofMucRoom ( | ||
serviceID INTEGER NOT NULL, | ||
roomID INTEGER NOT NULL, | ||
creationDate CHAR(15) NOT NULL, | ||
modificationDate CHAR(15) NOT NULL, | ||
creationDate TIMESTAMP WITH TIME ZONE NOT NULL, | ||
modificationDate TIMESTAMP WITH TIME ZONE NOT NULL, | ||
name VARCHAR(50) NOT NULL, | ||
naturalName VARCHAR(255) NOT NULL, | ||
description VARCHAR(255), | ||
lockedDate CHAR(15) NOT NULL, | ||
emptyDate CHAR(15) NULL, | ||
lockedDate TIMESTAMP WITH TIME ZONE NOT NULL, | ||
emptyDate TIMESTAMP WITH TIME ZONE NULL, | ||
canChangeSubject INTEGER NOT NULL, | ||
maxUsers INTEGER NOT NULL, | ||
publicRoom INTEGER NOT NULL, | ||
|
@@ -234,7 +234,7 @@ CREATE TABLE ofMucRoomRetiree ( | |
name VARCHAR(50) NOT NULL, | ||
alternateJID VARCHAR(2000), | ||
reason VARCHAR(1024), | ||
retiredAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | ||
retiredAt TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP WITH TIME ZONE, | ||
CONSTRAINT ofMucRoomRetiree_pk PRIMARY KEY (serviceID, name) | ||
); | ||
|
||
|
@@ -259,13 +259,13 @@ CREATE TABLE ofMucMember ( | |
|
||
CREATE TABLE ofMucConversationLog ( | ||
roomID INTEGER NOT NULL, | ||
messageID INTEGER NOT NULL, | ||
messageID INTEGER NOT NULL, | ||
sender VARCHAR(1024) NOT NULL, | ||
nickname VARCHAR(255) NULL, | ||
logTime CHAR(15) NOT NULL, | ||
logTime TIMESTAMP WITH TIME ZONE NOT NULL, | ||
subject VARCHAR(255) NULL, | ||
body TEXT NULL, | ||
stanza TEXT NULL | ||
stanza TEXT NULL | ||
); | ||
CREATE INDEX ofMucConversationLog_roomtime_idx ON ofMucConversationLog (roomID, logTime); | ||
CREATE INDEX ofMucConversationLog_time_idx ON ofMucConversationLog (logTime); | ||
|
@@ -278,8 +278,8 @@ CREATE TABLE ofPubsubNode ( | |
serviceID VARCHAR(100) NOT NULL, | ||
nodeID VARCHAR(100) NOT NULL, | ||
leaf INTEGER NOT NULL, | ||
creationDate CHAR(15) NOT NULL, | ||
modificationDate CHAR(15) NOT NULL, | ||
creationDate TIMESTAMP WITH TIME ZONE NOT NULL, | ||
modificationDate TIMESTAMP WITH TIME ZONE NOT NULL, | ||
parent VARCHAR(100) NULL, | ||
deliverPayloads INTEGER NOT NULL, | ||
maxPayloadSize INTEGER NULL, | ||
|
@@ -335,7 +335,7 @@ CREATE TABLE ofPubsubItem ( | |
nodeID VARCHAR(100) NOT NULL, | ||
id VARCHAR(100) NOT NULL, | ||
jid VARCHAR(1024) NOT NULL, | ||
creationDate CHAR(15) NOT NULL, | ||
creationDate TIMESTAMP WITH TIME ZONE NOT NULL, | ||
payload TEXT NULL, | ||
CONSTRAINT ofPubsubItem_pk PRIMARY KEY (serviceID, nodeID, id) | ||
); | ||
|
@@ -350,7 +350,7 @@ CREATE TABLE ofPubsubSubscription ( | |
deliver INTEGER NOT NULL, | ||
digest INTEGER NOT NULL, | ||
digest_frequency INTEGER NOT NULL, | ||
expire CHAR(15) NULL, | ||
expire TIMESTAMP WITH TIME ZONE NULL, | ||
includeBody INTEGER NOT NULL, | ||
showValues VARCHAR(30) NOT NULL, | ||
subscriptionType VARCHAR(10) NOT NULL, | ||
|
@@ -391,10 +391,10 @@ INSERT INTO ofID (idType, id) VALUES (27, 1); | |
|
||
-- Entry for admin user | ||
INSERT INTO ofUser (username, plainPassword, name, email, creationDate, modificationDate) | ||
VALUES ('admin', 'admin', 'Administrator', '[email protected]', '0', '0'); | ||
VALUES ('admin', 'admin', 'Administrator', '[email protected]', 'epoch', 'epoch'); | ||
|
||
-- Entry for default conference service | ||
INSERT INTO ofMucService (serviceID, subdomain, isHidden) VALUES (1, 'conference', 0); | ||
|
||
-- Do this last, as it is used by a continuous integration check to verify that the entire script was executed successfully. | ||
INSERT INTO ofVersion (name, version) VALUES ('openfire', 37); | ||
INSERT INTO ofVersion (name, version) VALUES ('openfire', 38); |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
-- OF-2500: Switch from string-based to timestamp-based representations of date/time values. | ||
ALTER TABLE ofUser | ||
ADD COLUMN creationDateNew TIMESTAMP WITH TIME ZONE, | ||
ADD COLUMN modificationDateNew TIMESTAMP; | ||
|
||
UPDATE ofUser SET | ||
creationDateNew = FROM_UNIXTIME(CAST(creationDate AS UNSIGNED) / 1000.0), | ||
modificationDateNew = FROM_UNIXTIME(CAST(modificationDate AS UNSIGNED) / 1000.0); | ||
|
||
ALTER TABLE ofUser | ||
DROP COLUMN creationDate, | ||
DROP COLUMN modificationDate; | ||
|
||
ALTER TABLE ofUser | ||
RENAME COLUMN creationDateNew TO creationDate, | ||
RENAME COLUMN modificationDateNew TO modificationDate; | ||
|
||
|
||
|
||
ALTER TABLE ofUserFlag | ||
ADD COLUMN startTimeNew TIMESTAMP, | ||
ADD COLUMN endTimeNew TIMESTAMP; | ||
|
||
UPDATE ofUserFlag SET | ||
startTimeNew = FROM_UNIXTIME(CAST(startTime AS UNSIGNED) / 1000.0), | ||
endTimeNew = FROM_UNIXTIME(CAST(endTime AS UNSIGNED) / 1000.0); | ||
|
||
ALTER TABLE ofUserFlag | ||
DROP COLUMN startTime, | ||
DROP COLUMN endTime; | ||
|
||
ALTER TABLE ofUserFlag | ||
RENAME COLUMN startTimeNew TO startTime, | ||
RENAME COLUMN endTimeNew TO endTime; | ||
|
||
|
||
|
||
ALTER TABLE ofOffline | ||
ADD COLUMN creationDateNew TIMESTAMP | ||
|
||
UPDATE ofOffline SET | ||
creationDateNew = FROM_UNIXTIME(CAST(creationDate AS UNSIGNED) / 1000.0); | ||
|
||
ALTER TABLE ofOffline | ||
DROP COLUMN creationDate; | ||
|
||
ALTER TABLE ofOffline | ||
RENAME COLUMN creationDateNew TO creationDate; | ||
|
||
|
||
|
||
ALTER TABLE ofOffline | ||
ALTER COLUMN creationDate SET DATA TYPE TIMESTAMP | ||
USING to_timestamp(CAST(creationDate AS BIGINT) / 1e3); | ||
|
||
|
||
ALTER TABLE ofPresence | ||
ALTER COLUMN offlineDate SET DATA TYPE TIMESTAMP | ||
USING to_timestamp(CAST(offlineDate AS BIGINT) / 1e3); | ||
|
||
ALTER TABLE ofMucRoom | ||
ALTER COLUMN creationDate SET DATA TYPE TIMESTAMP | ||
USING to_timestamp(CAST(creationDate AS BIGINT) / 1e3), | ||
ALTER COLUMN modificationDate SET DATA TYPE TIMESTAMP | ||
USING to_timestamp(CAST(modificationDate AS BIGINT) / 1e3), | ||
ALTER COLUMN lockedDate SET DATA TYPE TIMESTAMP | ||
USING to_timestamp(CAST(lockedDate AS BIGINT) / 1e3), | ||
ALTER COLUMN emptyDate SET DATA TYPE TIMESTAMP | ||
USING to_timestamp(CAST(emptyDate AS BIGINT) / 1e3); | ||
|
||
ALTER TABLE ofMucConversationLog | ||
ALTER COLUMN logTime SET DATA TYPE TIMESTAMP | ||
USING to_timestamp(CAST(logTime AS BIGINT) / 1e3); | ||
|
||
ALTER TABLE ofPubsubNode | ||
ALTER COLUMN creationDate SET DATA TYPE TIMESTAMP | ||
USING to_timestamp(CAST(creationDate AS BIGINT) / 1e3), | ||
ALTER COLUMN modificationDate SET DATA TYPE TIMESTAMP | ||
USING to_timestamp(CAST(modificationDate AS BIGINT) / 1e3); | ||
|
||
ALTER TABLE ofPubsubItem | ||
ALTER COLUMN creationDate SET DATA TYPE TIMESTAMP | ||
USING to_timestamp(CAST(creationDate AS BIGINT) / 1e3); | ||
|
||
ALTER TABLE ofPubsubSubscription | ||
ALTER COLUMN expire SET DATA TYPE TIMESTAMP | ||
USING to_timestamp(CAST(expire AS BIGINT) / 1e3); | ||
|
||
UPDATE ofVersion SET version = 38 WHERE name = 'openfire'; |
51 changes: 51 additions & 0 deletions
51
distribution/src/database/upgrade/38/openfire_postgresql.sql
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
-- OF-2500: Switch from string-based to timestamp-based representations of date/time values. | ||
|
||
ALTER TABLE ofUser | ||
ALTER COLUMN creationDate SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(creationDate AS BIGINT) / 1000.0) AT TIME ZONE 'UTC', | ||
ALTER COLUMN modificationDate SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(modificationDate AS BIGINT) / 1000.0) AT TIME ZONE 'UTC'; | ||
|
||
ALTER TABLE ofUserFlag | ||
ALTER COLUMN startTime SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(startTime AS BIGINT) / 1000.0) AT TIME ZONE 'UTC', | ||
ALTER COLUMN endTime SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(endTime AS BIGINT) / 1000.0) AT TIME ZONE 'UTC'; | ||
|
||
ALTER TABLE ofOffline | ||
ALTER COLUMN creationDate SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(creationDate AS BIGINT) / 1000.0) AT TIME ZONE 'UTC'; | ||
|
||
ALTER TABLE ofPresence | ||
ALTER COLUMN offlineDate SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(offlineDate AS BIGINT) / 1000.0) AT TIME ZONE 'UTC'; | ||
|
||
ALTER TABLE ofMucRoom | ||
ALTER COLUMN creationDate SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(creationDate AS BIGINT) / 1000.0) AT TIME ZONE 'UTC', | ||
ALTER COLUMN modificationDate SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(modificationDate AS BIGINT) / 1000.0) AT TIME ZONE 'UTC', | ||
ALTER COLUMN lockedDate SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(lockedDate AS BIGINT) / 1000.0) AT TIME ZONE 'UTC', | ||
ALTER COLUMN emptyDate SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(emptyDate AS BIGINT) / 1000.0) AT TIME ZONE 'UTC'; | ||
|
||
ALTER TABLE ofMucConversationLog | ||
ALTER COLUMN logTime SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(logTime AS BIGINT) / 1000.0) AT TIME ZONE 'UTC'; | ||
|
||
ALTER TABLE ofPubsubNode | ||
ALTER COLUMN creationDate SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(creationDate AS BIGINT) / 1000.0) AT TIME ZONE 'UTC', | ||
ALTER COLUMN modificationDate SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(modificationDate AS BIGINT) / 1000.0) AT TIME ZONE 'UTC'; | ||
|
||
ALTER TABLE ofPubsubItem | ||
ALTER COLUMN creationDate SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(creationDate AS BIGINT) / 1000.0) AT TIME ZONE 'UTC'; | ||
|
||
ALTER TABLE ofPubsubSubscription | ||
ALTER COLUMN expire SET DATA TYPE TIMESTAMP WITH TIME ZONE | ||
USING to_timestamp(CAST(expire AS BIGINT) / 1000.0) AT TIME ZONE 'UTC'; | ||
|
||
UPDATE ofVersion SET version = 38 WHERE name = 'openfire'; |
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This didn't work for me as the resulting timestamp is naive.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This appears to work from my local testing