diff --git a/files/classes/base.py b/files/classes/base.py index 3eac5ba90..edf4a7375 100644 --- a/files/classes/base.py +++ b/files/classes/base.py @@ -4,6 +4,7 @@ from datetime import datetime, timedelta, timezone from sqlalchemy import text from sqlalchemy.orm import declarative_base, declared_attr from sqlalchemy.schema import Column +from sqlalchemy.sql.functions import now from sqlalchemy.sql.sqltypes import Integer, DateTime from files.helpers.time import format_age, format_datetime @@ -72,7 +73,7 @@ class CreatedDateTimeBase(Base): Retrieving `created_datetimez` will return a `datetime` object with `tzinfo` for UTC. """ - return Column(DateTime(timezone=True), nullable=False, server_default=text("now()")) + return Column(DateTime(timezone=True), nullable=False, server_default=now()) @property def created_utc(self): @@ -124,4 +125,4 @@ class CreatedDateTimeBase(Base): """ a string representing time since created. Example: "1h ago", "2d ago". """ - return format_age(self.created_datetimez) \ No newline at end of file + return format_age(self.created_datetimez) diff --git a/files/classes/flags.py b/files/classes/flags.py index 7b735109d..3f74c720a 100644 --- a/files/classes/flags.py +++ b/files/classes/flags.py @@ -33,7 +33,7 @@ class CommentFlag(CreatedDateTimeBase): comment_id = Column(Integer, ForeignKey("comments.id"), nullable=False) user_id = Column(Integer, ForeignKey("users.id"), nullable=False) reason = Column(String) - + Index('cflag_user_idx', user_id) user = relationship("User", primaryjoin = "CommentFlag.user_id == User.id", uselist = False, viewonly=True) diff --git a/migrations/versions/2023_07_09_21_52_50_7ae4658467d7_change_created_utc_to_datetimez_for_.py b/migrations/versions/2023_07_09_21_52_50_7ae4658467d7_change_created_utc_to_datetimez_for_.py index e606ee7be..4f9f2d027 100644 --- a/migrations/versions/2023_07_09_21_52_50_7ae4658467d7_change_created_utc_to_datetimez_for_.py +++ b/migrations/versions/2023_07_09_21_52_50_7ae4658467d7_change_created_utc_to_datetimez_for_.py @@ -15,34 +15,38 @@ down_revision = 'ea282d7c711c' branch_labels = None depends_on = None +table_name = 'commentflags' +from_column = 'created_utc' +to_column = 'created_datetimez' + def upgrade(): - op.add_column('commentflags', sa.Column('created_datetimez', sa.DateTime(timezone=True), nullable=True, server_default=sa.text('NOW()'))) - op.execute(""" - UPDATE commentflags - SET created_datetimez = + op.add_column(table_name, sa.Column(to_column, sa.DateTime(timezone=True), nullable=True, server_default=sa.text('NOW()'))) + op.execute(f""" + UPDATE {table_name} + SET {to_column} = CASE - WHEN created_utc > 0 THEN - (timestamp 'epoch' + created_utc * interval '1 second') at time zone 'utc' + WHEN {from_column} > 0 THEN + (timestamp 'epoch' + {from_column} * interval '1 second') at time zone 'utc' ELSE NULL END """) - op.alter_column('commentflags', 'created_datetimez', nullable=False) - op.drop_column('commentflags', 'created_utc') + op.alter_column(table_name, to_column, nullable=False) + op.drop_column(table_name, from_column) def downgrade(): """ Downgrade will truncate the milliseconds. """ - op.add_column('commentflags', sa.Column('created_utc', sa.INTEGER(), server_default=sa.text('0'), nullable=True)) - op.execute(""" - UPDATE commentflags + op.add_column(table_name, sa.Column('created_utc', sa.INTEGER(), server_default=sa.text('0'), nullable=True)) + op.execute(f""" + UPDATE {table_name} SET created_utc = COALESCE( - EXTRACT(EPOCH FROM created_datetimez)::integer, + EXTRACT(EPOCH FROM {to_column})::integer, 0 ) """) - op.alter_column('commentflags', 'created_utc', nullable=False) - op.drop_column('commentflags', 'created_datetimez') + op.alter_column(table_name, from_column, nullable=False) + op.drop_column(table_name, to_column)