From 9dd8c056e771277efedcebd98c2aae2f9f9d54a2 Mon Sep 17 00:00:00 2001 From: Agniva De Sarker Date: Tue, 22 Jul 2025 20:40:55 +0530 Subject: [PATCH] MM-63368: Remove MySQL (#33458) https://mattermost.atlassian.net/browse/MM-63368 ```release-note Remove MySQL support from the codebase entirely. ``` --- .github/workflows/README.md | 4 +- .github/workflows/esrupgrade-common.yml | 161 ------- .github/workflows/esrupgrade.yml | 37 -- .github/workflows/migration.yml | 77 ---- .github/workflows/server-ci-template.yml | 14 - server/Makefile | 35 -- server/build/docker-compose-generator/main.go | 28 +- server/build/docker-compose.common.yml | 41 -- server/build/docker-compose.yml | 10 +- .../build/docker/grafana/dashboards/home.json | 11 - server/build/docker/mysql.conf.d/custom.cnf | 20 - server/build/docker/mysql.conf.d/replica.cnf | 3 - server/build/docker/mysql.conf.d/source.cnf | 4 - server/build/dotenv/migration.env | 16 - server/build/dotenv/test.env | 2 - server/build/legacy.mk | 80 ---- server/channels/api4/access_control_test.go | 40 -- server/channels/api4/channel_test.go | 16 - server/channels/api4/license.go | 6 - server/channels/api4/license_test.go | 71 +-- server/channels/api4/main_test.go | 8 - server/channels/api4/user_test.go | 43 -- server/channels/app/email/main_test.go | 9 +- server/channels/app/main_test.go | 9 +- server/channels/app/platform/license.go | 11 - server/channels/app/platform/license_test.go | 7 +- server/channels/app/platform/main_test.go | 9 +- server/channels/app/platform/service_test.go | 4 +- server/channels/app/post_test.go | 42 -- server/channels/app/product_notices.go | 2 +- server/channels/app/product_notices_test.go | 53 --- server/channels/app/teams/main_test.go | 8 - server/channels/app/users/main_test.go | 1 - server/channels/db/migrations/migrations.list | 280 ------------ .../mysql/000001_create_teams.down.sql | 76 ---- .../mysql/000001_create_teams.up.sql | 177 -------- .../mysql/000002_create_team_members.down.sql | 76 ---- .../mysql/000002_create_team_members.up.sql | 85 ---- .../000003_create_cluster_discovery.down.sql | 1 - .../000003_create_cluster_discovery.up.sql | 11 - .../000004_create_command_webhooks.down.sql | 1 - .../000004_create_command_webhooks.up.sql | 12 - .../mysql/000005_create_compliances.down.sql | 1 - .../mysql/000005_create_compliances.up.sql | 14 - .../mysql/000006_create_emojis.down.sql | 16 - .../mysql/000006_create_emojis.up.sql | 73 ---- .../mysql/000007_create_user_groups.down.sql | 1 - .../mysql/000007_create_user_groups.up.sql | 62 --- .../000008_create_group_members.down.sql | 1 - .../mysql/000008_create_group_members.up.sql | 23 - .../mysql/000009_create_group_teams.down.sql | 1 - .../mysql/000009_create_group_teams.up.sql | 55 --- .../000010_create_group_channels.down.sql | 1 - .../mysql/000010_create_group_channels.up.sql | 57 --- .../000011_create_link_metadata.down.sql | 1 - .../mysql/000011_create_link_metadata.up.sql | 9 - .../mysql/000012_create_commands.down.sql | 16 - .../mysql/000012_create_commands.up.sql | 65 --- .../000013_create_incoming_webhooks.down.sql | 1 - .../000013_create_incoming_webhooks.up.sql | 192 --------- .../000014_create_outgoing_webhooks.down.sql | 1 - .../000014_create_outgoing_webhooks.up.sql | 197 --------- .../mysql/000015_create_systems.down.sql | 1 - .../mysql/000015_create_systems.up.sql | 5 - .../mysql/000016_create_reactions.down.sql | 1 - .../mysql/000016_create_reactions.up.sql | 76 ---- .../mysql/000017_create_roles.down.sql | 1 - .../mysql/000017_create_roles.up.sql | 61 --- .../mysql/000018_create_schemes.down.sql | 1 - .../mysql/000018_create_schemes.up.sql | 121 ------ .../mysql/000019_create_licenses.down.sql | 1 - .../mysql/000019_create_licenses.up.sql | 6 - .../mysql/000020_create_posts.down.sql | 16 - .../mysql/000020_create_posts.up.sql | 257 ----------- ..._create_product_notice_view_state.down.sql | 31 -- ...21_create_product_notice_view_state.up.sql | 67 --- .../mysql/000022_create_sessions.down.sql | 1 - .../mysql/000022_create_sessions.up.sql | 116 ----- .../000023_create_terms_of_service.down.sql | 1 - .../000023_create_terms_of_service.up.sql | 7 - .../mysql/000024_create_audits.down.sql | 1 - .../mysql/000024_create_audits.up.sql | 25 -- .../000025_create_oauth_access_data.down.sql | 16 - .../000025_create_oauth_access_data.up.sql | 159 ------- .../mysql/000026_create_preferences.down.sql | 16 - .../mysql/000026_create_preferences.up.sql | 106 ----- .../mysql/000027_create_status.down.sql | 16 - .../mysql/000027_create_status.up.sql | 83 ---- .../mysql/000028_create_tokens.down.sql | 1 - .../mysql/000028_create_tokens.up.sql | 23 - .../mysql/000029_create_bots.down.sql | 16 - .../mysql/000029_create_bots.up.sql | 24 -- .../000030_create_user_access_tokens.down.sql | 16 - .../000030_create_user_access_tokens.up.sql | 53 --- .../000031_create_remote_clusters.down.sql | 1 - .../000031_create_remote_clusters.up.sql | 29 -- .../000032_create_sharedchannels.down.sql | 1 - .../mysql/000032_create_sharedchannels.up.sql | 16 - .../000033_create_sidebar_channels.down.sql | 17 - .../000033_create_sidebar_channels.up.sql | 23 - .../000034_create_oauthauthdata.down.sql | 16 - .../mysql/000034_create_oauthauthdata.up.sql | 38 -- ...5_create_sharedchannelattachments.down.sql | 1 - ...035_create_sharedchannelattachments.up.sql | 9 - .../000036_create_sharedchannelusers.down.sql | 31 -- .../000036_create_sharedchannelusers.up.sql | 68 --- ...00037_create_sharedchannelremotes.down.sql | 31 -- .../000037_create_sharedchannelremotes.up.sql | 42 -- .../mysql/000038_create_jobs.down.sql | 1 - .../mysql/000038_create_jobs.up.sql | 13 - ...039_create_channel_member_history.down.sql | 1 - ...00039_create_channel_member_history.up.sql | 37 -- .../000040_create_sidebar_categories.down.sql | 47 -- .../000040_create_sidebar_categories.up.sql | 56 --- .../000041_create_upload_sessions.down.sql | 31 -- .../000041_create_upload_sessions.up.sql | 104 ----- .../mysql/000042_create_threads.down.sql | 31 -- .../mysql/000042_create_threads.up.sql | 60 --- .../mysql/000043_thread_memberships.down.sql | 62 --- .../mysql/000043_thread_memberships.up.sql | 68 --- ...0044_create_user_terms_of_service.down.sql | 16 - ...000044_create_user_terms_of_service.up.sql | 43 -- ...045_create_plugin_key_value_store.down.sql | 31 -- ...00045_create_plugin_key_value_store.up.sql | 36 -- .../mysql/000046_create_users.down.sql | 31 -- .../mysql/000046_create_users.up.sql | 286 ------------ .../mysql/000047_create_file_info.down.sql | 91 ---- .../mysql/000047_create_file_info.up.sql | 113 ----- .../mysql/000048_create_oauth_apps.down.sql | 46 -- .../mysql/000048_create_oauth_apps.up.sql | 57 --- .../mysql/000049_create_channels.down.sql | 136 ------ .../mysql/000049_create_channels.up.sql | 175 -------- .../000050_create_channelmembers.down.sql | 76 ---- .../mysql/000050_create_channelmembers.up.sql | 86 ---- .../000051_create_msg_root_count.down.sql | 44 -- .../mysql/000051_create_msg_root_count.up.sql | 126 ------ .../000052_create_public_channels.down.sql | 77 ---- .../000052_create_public_channels.up.sql | 109 ----- .../000053_create_retention_policies.down.sql | 93 ---- .../000053_create_retention_policies.up.sql | 109 ----- ...reate_crt_channelmembership_count.down.sql | 15 - ..._create_crt_channelmembership_count.up.sql | 27 -- ...eate_crt_thread_count_and_unreads.down.sql | 15 - ...create_crt_thread_count_and_unreads.up.sql | 31 -- .../000056_upgrade_channels_v6.0.down.sql | 44 -- .../mysql/000056_upgrade_channels_v6.0.up.sql | 44 -- ...057_upgrade_command_webhooks_v6.0.down.sql | 15 - ...00057_upgrade_command_webhooks_v6.0.up.sql | 29 -- ...00058_upgrade_channelmembers_v6.0.down.sql | 62 --- .../000058_upgrade_channelmembers_v6.0.up.sql | 60 --- .../mysql/000059_upgrade_users_v6.0.down.sql | 80 ---- .../mysql/000059_upgrade_users_v6.0.up.sql | 79 ---- .../mysql/000060_upgrade_jobs_v6.0.down.sql | 15 - .../mysql/000060_upgrade_jobs_v6.0.up.sql | 16 - ...000061_upgrade_link_metadata_v6.0.down.sql | 16 - .../000061_upgrade_link_metadata_v6.0.up.sql | 16 - .../000062_upgrade_sessions_v6.0.down.sql | 15 - .../mysql/000062_upgrade_sessions_v6.0.up.sql | 16 - .../000063_upgrade_threads_v6.0.down.sql | 45 -- .../mysql/000063_upgrade_threads_v6.0.up.sql | 45 -- .../mysql/000064_upgrade_status_v6.0.down.sql | 29 -- .../mysql/000064_upgrade_status_v6.0.up.sql | 29 -- ...000065_upgrade_groupchannels_v6.0.down.sql | 15 - .../000065_upgrade_groupchannels_v6.0.up.sql | 14 - .../mysql/000066_upgrade_posts_v6.0.down.sql | 77 ---- .../mysql/000066_upgrade_posts_v6.0.up.sql | 61 --- ...00067_upgrade_channelmembers_v6.1.down.sql | 15 - .../000067_upgrade_channelmembers_v6.1.up.sql | 15 - .../000068_upgrade_teammembers_v6.1.down.sql | 15 - .../000068_upgrade_teammembers_v6.1.up.sql | 15 - .../mysql/000069_upgrade_jobs_v6.1.down.sql | 15 - .../mysql/000069_upgrade_jobs_v6.1.up.sql | 14 - .../mysql/000070_upgrade_cte_v6.1.down.sql | 15 - .../mysql/000070_upgrade_cte_v6.1.up.sql | 31 -- .../000071_upgrade_sessions_v6.1.down.sql | 15 - .../mysql/000071_upgrade_sessions_v6.1.up.sql | 15 - .../000072_upgrade_schemes_v6.3.down.sql | 59 --- .../mysql/000072_upgrade_schemes_v6.3.up.sql | 59 --- ...grade_plugin_key_value_store_v6.3.down.sql | 15 - ...upgrade_plugin_key_value_store_v6.3.up.sql | 15 - .../mysql/000074_upgrade_users_v6.3.down.sql | 1 - .../mysql/000074_upgrade_users_v6.3.up.sql | 15 - ...00075_alter_upload_sessions_index.down.sql | 20 - .../000075_alter_upload_sessions_index.up.sql | 20 - .../000076_upgrade_lastrootpostat.down.sql | 1 - .../000076_upgrade_lastrootpostat.up.sql | 47 -- .../mysql/000077_upgrade_users_v6.5.down.sql | 1 - .../mysql/000077_upgrade_users_v6.5.up.sql | 15 - ...78_create_oauth_mattermost_app_id.down.sql | 14 - ...0078_create_oauth_mattermost_app_id.up.sql | 14 - ...0079_usergroups_displayname_index.down.sql | 14 - ...000079_usergroups_displayname_index.up.sql | 14 - .../mysql/000080_posts_createat_id.down.sql | 14 - .../mysql/000080_posts_createat_id.up.sql | 14 - .../mysql/000081_threads_deleteat.down.sql | 1 - .../mysql/000081_threads_deleteat.up.sql | 1 - ...2_upgrade_oauth_mattermost_app_id.down.sql | 14 - ...082_upgrade_oauth_mattermost_app_id.up.sql | 29 -- .../000083_threads_threaddeleteat.down.sql | 14 - .../000083_threads_threaddeleteat.up.sql | 35 -- .../mysql/000084_recent_searches.down.sql | 2 - .../mysql/000084_recent_searches.up.sql | 8 - ...0085_fileinfo_add_archived_column.down.sql | 14 - ...000085_fileinfo_add_archived_column.up.sql | 15 - .../000086_add_cloud_limits_archived.down.sql | 14 - .../000086_add_cloud_limits_archived.up.sql | 14 - .../000087_sidebar_categories_index.down.sql | 14 - .../000087_sidebar_categories_index.up.sql | 14 - .../000088_remaining_migrations.down.sql | 1 - .../mysql/000088_remaining_migrations.up.sql | 36 -- .../000089_add-channelid-to-reaction.down.sql | 14 - .../000089_add-channelid-to-reaction.up.sql | 33 -- .../mysql/000090_create_enums.down.sql | 47 -- .../mysql/000090_create_enums.up.sql | 47 -- .../000091_create_post_reminder.down.sql | 16 - .../mysql/000091_create_post_reminder.up.sql | 21 - ...00092_add_createat_to_teammembers.down.sql | 14 - .../000092_add_createat_to_teammembers.up.sql | 29 -- .../mysql/000093_notify_admin.down.sql | 1 - .../mysql/000093_notify_admin.up.sql | 8 - .../mysql/000094_threads_teamid.down.sql | 1 - .../mysql/000094_threads_teamid.up.sql | 1 - .../000095_remove_posts_parentid.down.sql | 1 - .../mysql/000095_remove_posts_parentid.up.sql | 17 - .../000096_threads_threadteamid.down.sql | 14 - .../mysql/000096_threads_threadteamid.up.sql | 35 -- .../000097_create_posts_priority.down.sql | 16 - .../mysql/000097_create_posts_priority.up.sql | 23 - ...0098_create_post_acknowledgements.down.sql | 1 - ...000098_create_post_acknowledgements.up.sql | 6 - .../mysql/000099_create_drafts.down.sql | 1 - .../mysql/000099_create_drafts.up.sql | 12 - .../000100_add_draft_priority_column.down.sql | 14 - .../000100_add_draft_priority_column.up.sql | 14 - ...101_create_true_up_review_history.down.sql | 1 - ...00101_create_true_up_review_history.up.sql | 5 - .../000102_posts_originalid_index.down.sql | 14 - .../000102_posts_originalid_index.up.sql | 14 - .../000103_add_sentat_to_notifyadmin.down.sql | 14 - .../000103_add_sentat_to_notifyadmin.up.sql | 14 - .../mysql/000104_upgrade_notifyadmin.down.sql | 29 -- .../mysql/000104_upgrade_notifyadmin.up.sql | 29 -- .../mysql/000105_remove_tokens.down.sql | 1 - .../mysql/000105_remove_tokens.up.sql | 4 - .../mysql/000106_fileinfo_channelid.down.sql | 29 -- .../mysql/000106_fileinfo_channelid.up.sql | 34 -- .../000107_threadmemberships_cleanup.down.sql | 1 - .../000107_threadmemberships_cleanup.up.sql | 5 - ...remove_orphaned_oauth_preferences.down.sql | 1 - ...8_remove_orphaned_oauth_preferences.up.sql | 1 - ...9_create_persistent_notifications.down.sql | 1 - ...109_create_persistent_notifications.up.sql | 8 - .../mysql/000111_update_vacuuming.down.sql | 1 - .../mysql/000111_update_vacuuming.up.sql | 1 - .../000112_rework_desktop_tokens.down.sql | 16 - .../mysql/000112_rework_desktop_tokens.up.sql | 38 -- ...ate_retentionidsfordeletion_table.down.sql | 1 - ...reate_retentionidsfordeletion_table.up.sql | 7 - ...motes_drop_nextsyncat_description.down.sql | 1 - ...remotes_drop_nextsyncat_description.up.sql | 29 -- .../000115_user_reporting_changes.down.sql | 14 - .../000115_user_reporting_changes.up.sql | 14 - ...create_outgoing_oauth_connections.down.sql | 1 - ...6_create_outgoing_oauth_connections.up.sql | 16 - .../000117_msteams_shared_channels.down.sql | 47 -- .../000117_msteams_shared_channels.up.sql | 47 -- .../000118_create_index_poststats.down.sql | 1 - .../000118_create_index_poststats.up.sql | 1 - ...0119_msteams_shared_channels_opts.down.sql | 15 - ...000119_msteams_shared_channels_opts.up.sql | 15 - ...120_create_channelbookmarks_table.down.sql | 1 - ...00120_create_channelbookmarks_table.up.sql | 21 - ...121_remove_true_up_review_history.down.sql | 5 - ...00121_remove_true_up_review_history.up.sql | 1 - .../000122_preferences_value_length.down.sql | 1 - .../000122_preferences_value_length.up.sql | 1 - ...123_remove_upload_file_permission.down.sql | 1 - ...00123_remove_upload_file_permission.up.sql | 18 - ...124_remove_manage_team_permission.down.sql | 1 - ...00124_remove_manage_team_permission.up.sql | 21 - ...emoteclusters_add_default_team_id.down.sql | 1 - ..._remoteclusters_add_default_team_id.up.sql | 14 - ...aredchannels_remotes_add_deleteat.down.sql | 1 - ...sharedchannels_remotes_add_deleteat.up.sql | 44 -- .../000127_add_mfa_used_ts_to_users.down.sql | 1 - .../000127_add_mfa_used_ts_to_users.up.sql | 1 - .../000128_create_scheduled_posts.down.sql | 15 - .../000128_create_scheduled_posts.up.sql | 29 -- ..._add_property_system_architecture.down.sql | 3 - ...29_add_property_system_architecture.up.sql | 47 -- .../000130_system_console_stats.down.sql | 1 - .../mysql/000130_system_console_stats.up.sql | 1 - ...dex_pagination_on_property_values.down.sql | 14 - ...index_pagination_on_property_values.up.sql | 14 - ...dex_pagination_on_property_fields.down.sql | 14 - ...index_pagination_on_property_fields.up.sql | 14 - .../000133_add_channel_banner_fields.down.sql | 14 - .../000133_add_channel_banner_fields.up.sql | 14 - ...34_create_access_control_policies.down.sql | 2 - ...0134_create_access_control_policies.up.sql | 23 - ...000135_sidebarchannels_categoryid.down.sql | 14 - .../000135_sidebarchannels_categoryid.up.sql | 14 - .../000136_create_attribute_view.down.sql | 1 - .../mysql/000136_create_attribute_view.up.sql | 11 - .../000137_update_attribute_view.down.sql | 1 - .../mysql/000137_update_attribute_view.up.sql | 1 - ..._default_category_name_to_channel.down.sql | 14 - ...dd_default_category_name_to_channel.up.sql | 14 - ...ters_add_last_global_user_sync_at.down.sql | 14 - ...usters_add_last_global_user_sync_at.up.sql | 14 - ...erssyncat_to_sharedchannelremotes.down.sql | 29 -- ...mberssyncat_to_sharedchannelremotes.up.sql | 29 -- ...hannelid_to_post_acknowledgements.down.sql | 29 -- ..._channelid_to_post_acknowledgements.up.sql | 29 -- .../layer_generators/retry_layer.go.tmpl | 8 - .../store/localcachelayer/layer_test.go | 17 +- .../channels/store/retrylayer/retrylayer.go | 8 - .../store/retrylayer/retrylayer_test.go | 21 - .../channels/store/searchlayer/layer_test.go | 2 +- .../store/searchtest/channel_layer.go | 10 +- .../store/searchtest/file_info_layer.go | 20 +- .../channels/store/searchtest/post_layer.go | 22 +- server/channels/store/searchtest/testlib.go | 1 - .../channels/store/searchtest/user_layer.go | 4 +- .../store/sqlstore/attributes_store.go | 35 +- .../sqlstore/channel_member_history_store.go | 1 + .../channels/store/sqlstore/channel_store.go | 188 +++----- .../sqlstore/channel_store_categories.go | 142 ++---- .../channels/store/sqlstore/command_store.go | 8 +- server/channels/store/sqlstore/draft_store.go | 70 +-- .../store/sqlstore/file_info_store.go | 49 +-- server/channels/store/sqlstore/group_store.go | 57 +-- server/channels/store/sqlstore/job_store.go | 58 +-- .../channels/store/sqlstore/license_store.go | 6 +- .../store/sqlstore/link_metadata_store.go | 6 +- server/channels/store/sqlstore/migrate.go | 28 -- .../channels/store/sqlstore/migrate_test.go | 1 - server/channels/store/sqlstore/oauth_store.go | 7 +- .../channels/store/sqlstore/plugin_store.go | 43 +- .../sqlstore/post_acknowledgements_store.go | 6 +- .../post_persistent_notification_store.go | 36 +- server/channels/store/sqlstore/post_store.go | 273 ++---------- .../store/sqlstore/post_store_test.go | 46 -- .../store/sqlstore/preference_store.go | 22 +- .../store/sqlstore/property_group_store.go | 6 +- .../store/sqlstore/property_value_store.go | 64 +-- .../channels/store/sqlstore/reaction_store.go | 31 +- .../store/sqlstore/retention_policy_store.go | 107 ++--- .../store/sqlstore/schema_dump_test.go | 12 - .../channels/store/sqlstore/session_store.go | 13 +- .../store/sqlstore/shared_channel_store.go | 6 +- .../store/sqlstore/sqlx_wrapper_test.go | 25 +- .../channels/store/sqlstore/status_store.go | 75 +--- server/channels/store/sqlstore/store.go | 406 ++---------------- server/channels/store/sqlstore/store_test.go | 132 +----- .../channels/store/sqlstore/system_store.go | 6 +- server/channels/store/sqlstore/team_store.go | 4 +- server/channels/store/sqlstore/testpool.go | 2 +- .../store/sqlstore/user_access_token_store.go | 21 +- server/channels/store/sqlstore/utils.go | 36 +- server/channels/store/sqlstore/utils_test.go | 34 -- .../store/storetest/attributes_store.go | 45 +- .../storetest/channel_store_categories.go | 4 - server/channels/store/storetest/settings.go | 97 +---- server/channels/store/storetest/user_store.go | 5 - server/channels/store/storetest/utils.go | 12 +- server/channels/testlib/helper.go | 54 +-- server/cmd/mmctl/commands/config_e2e_test.go | 8 +- server/config.mk | 6 +- server/config/database.go | 84 +--- server/config/database_test.go | 46 -- server/config/main_test.go | 13 - server/docker-compose.makefile.yml | 16 - server/docker-compose.yaml | 17 +- server/enterprise/metrics/metrics.go | 10 - server/enterprise/metrics/metrics_test.go | 12 - server/go.mod | 2 +- server/i18n/en.json | 10 +- .../searchengine/bleveengine/bleve_test.go | 2 +- server/public/go.mod | 2 - server/public/go.sum | 4 - server/public/model/config.go | 12 +- server/public/model/config_test.go | 18 - server/public/plugin/client_rpc.go | 6 - server/public/pluginapi/store.go | 1 - server/public/utils/sql/sql_utils.go | 26 -- server/public/utils/sql/sql_utils_test.go | 65 --- .../admin_console/license_settings/index.ts | 1 - .../license_settings.test.tsx | 1 - .../license_settings/license_settings.tsx | 4 +- .../admin_console/system_users/index.ts | 6 - .../system_users/system_users.tsx | 69 +-- .../index.tsx | 25 -- .../show_start_trial_modal.tsx | 3 +- .../widgets/inputs/dropdown_input_hybrid.tsx | 4 +- 395 files changed, 390 insertions(+), 11864 deletions(-) delete mode 100644 .github/workflows/esrupgrade-common.yml delete mode 100644 .github/workflows/esrupgrade.yml delete mode 100644 .github/workflows/migration.yml delete mode 100644 server/build/docker/mysql.conf.d/custom.cnf delete mode 100644 server/build/docker/mysql.conf.d/replica.cnf delete mode 100644 server/build/docker/mysql.conf.d/source.cnf delete mode 100644 server/build/dotenv/migration.env delete mode 100644 server/build/legacy.mk delete mode 100644 server/channels/db/migrations/mysql/000001_create_teams.down.sql delete mode 100644 server/channels/db/migrations/mysql/000001_create_teams.up.sql delete mode 100644 server/channels/db/migrations/mysql/000002_create_team_members.down.sql delete mode 100644 server/channels/db/migrations/mysql/000002_create_team_members.up.sql delete mode 100644 server/channels/db/migrations/mysql/000003_create_cluster_discovery.down.sql delete mode 100644 server/channels/db/migrations/mysql/000003_create_cluster_discovery.up.sql delete mode 100644 server/channels/db/migrations/mysql/000004_create_command_webhooks.down.sql delete mode 100644 server/channels/db/migrations/mysql/000004_create_command_webhooks.up.sql delete mode 100644 server/channels/db/migrations/mysql/000005_create_compliances.down.sql delete mode 100644 server/channels/db/migrations/mysql/000005_create_compliances.up.sql delete mode 100644 server/channels/db/migrations/mysql/000006_create_emojis.down.sql delete mode 100644 server/channels/db/migrations/mysql/000006_create_emojis.up.sql delete mode 100644 server/channels/db/migrations/mysql/000007_create_user_groups.down.sql delete mode 100644 server/channels/db/migrations/mysql/000007_create_user_groups.up.sql delete mode 100644 server/channels/db/migrations/mysql/000008_create_group_members.down.sql delete mode 100644 server/channels/db/migrations/mysql/000008_create_group_members.up.sql delete mode 100644 server/channels/db/migrations/mysql/000009_create_group_teams.down.sql delete mode 100644 server/channels/db/migrations/mysql/000009_create_group_teams.up.sql delete mode 100644 server/channels/db/migrations/mysql/000010_create_group_channels.down.sql delete mode 100644 server/channels/db/migrations/mysql/000010_create_group_channels.up.sql delete mode 100644 server/channels/db/migrations/mysql/000011_create_link_metadata.down.sql delete mode 100644 server/channels/db/migrations/mysql/000011_create_link_metadata.up.sql delete mode 100644 server/channels/db/migrations/mysql/000012_create_commands.down.sql delete mode 100644 server/channels/db/migrations/mysql/000012_create_commands.up.sql delete mode 100644 server/channels/db/migrations/mysql/000013_create_incoming_webhooks.down.sql delete mode 100644 server/channels/db/migrations/mysql/000013_create_incoming_webhooks.up.sql delete mode 100644 server/channels/db/migrations/mysql/000014_create_outgoing_webhooks.down.sql delete mode 100644 server/channels/db/migrations/mysql/000014_create_outgoing_webhooks.up.sql delete mode 100644 server/channels/db/migrations/mysql/000015_create_systems.down.sql delete mode 100644 server/channels/db/migrations/mysql/000015_create_systems.up.sql delete mode 100644 server/channels/db/migrations/mysql/000016_create_reactions.down.sql delete mode 100644 server/channels/db/migrations/mysql/000016_create_reactions.up.sql delete mode 100644 server/channels/db/migrations/mysql/000017_create_roles.down.sql delete mode 100644 server/channels/db/migrations/mysql/000017_create_roles.up.sql delete mode 100644 server/channels/db/migrations/mysql/000018_create_schemes.down.sql delete mode 100644 server/channels/db/migrations/mysql/000018_create_schemes.up.sql delete mode 100644 server/channels/db/migrations/mysql/000019_create_licenses.down.sql delete mode 100644 server/channels/db/migrations/mysql/000019_create_licenses.up.sql delete mode 100644 server/channels/db/migrations/mysql/000020_create_posts.down.sql delete mode 100644 server/channels/db/migrations/mysql/000020_create_posts.up.sql delete mode 100644 server/channels/db/migrations/mysql/000021_create_product_notice_view_state.down.sql delete mode 100644 server/channels/db/migrations/mysql/000021_create_product_notice_view_state.up.sql delete mode 100644 server/channels/db/migrations/mysql/000022_create_sessions.down.sql delete mode 100644 server/channels/db/migrations/mysql/000022_create_sessions.up.sql delete mode 100644 server/channels/db/migrations/mysql/000023_create_terms_of_service.down.sql delete mode 100644 server/channels/db/migrations/mysql/000023_create_terms_of_service.up.sql delete mode 100644 server/channels/db/migrations/mysql/000024_create_audits.down.sql delete mode 100644 server/channels/db/migrations/mysql/000024_create_audits.up.sql delete mode 100644 server/channels/db/migrations/mysql/000025_create_oauth_access_data.down.sql delete mode 100644 server/channels/db/migrations/mysql/000025_create_oauth_access_data.up.sql delete mode 100644 server/channels/db/migrations/mysql/000026_create_preferences.down.sql delete mode 100644 server/channels/db/migrations/mysql/000026_create_preferences.up.sql delete mode 100644 server/channels/db/migrations/mysql/000027_create_status.down.sql delete mode 100644 server/channels/db/migrations/mysql/000027_create_status.up.sql delete mode 100644 server/channels/db/migrations/mysql/000028_create_tokens.down.sql delete mode 100644 server/channels/db/migrations/mysql/000028_create_tokens.up.sql delete mode 100644 server/channels/db/migrations/mysql/000029_create_bots.down.sql delete mode 100644 server/channels/db/migrations/mysql/000029_create_bots.up.sql delete mode 100644 server/channels/db/migrations/mysql/000030_create_user_access_tokens.down.sql delete mode 100644 server/channels/db/migrations/mysql/000030_create_user_access_tokens.up.sql delete mode 100644 server/channels/db/migrations/mysql/000031_create_remote_clusters.down.sql delete mode 100644 server/channels/db/migrations/mysql/000031_create_remote_clusters.up.sql delete mode 100644 server/channels/db/migrations/mysql/000032_create_sharedchannels.down.sql delete mode 100644 server/channels/db/migrations/mysql/000032_create_sharedchannels.up.sql delete mode 100644 server/channels/db/migrations/mysql/000033_create_sidebar_channels.down.sql delete mode 100644 server/channels/db/migrations/mysql/000033_create_sidebar_channels.up.sql delete mode 100644 server/channels/db/migrations/mysql/000034_create_oauthauthdata.down.sql delete mode 100644 server/channels/db/migrations/mysql/000034_create_oauthauthdata.up.sql delete mode 100644 server/channels/db/migrations/mysql/000035_create_sharedchannelattachments.down.sql delete mode 100644 server/channels/db/migrations/mysql/000035_create_sharedchannelattachments.up.sql delete mode 100644 server/channels/db/migrations/mysql/000036_create_sharedchannelusers.down.sql delete mode 100644 server/channels/db/migrations/mysql/000036_create_sharedchannelusers.up.sql delete mode 100644 server/channels/db/migrations/mysql/000037_create_sharedchannelremotes.down.sql delete mode 100644 server/channels/db/migrations/mysql/000037_create_sharedchannelremotes.up.sql delete mode 100644 server/channels/db/migrations/mysql/000038_create_jobs.down.sql delete mode 100644 server/channels/db/migrations/mysql/000038_create_jobs.up.sql delete mode 100644 server/channels/db/migrations/mysql/000039_create_channel_member_history.down.sql delete mode 100644 server/channels/db/migrations/mysql/000039_create_channel_member_history.up.sql delete mode 100644 server/channels/db/migrations/mysql/000040_create_sidebar_categories.down.sql delete mode 100644 server/channels/db/migrations/mysql/000040_create_sidebar_categories.up.sql delete mode 100644 server/channels/db/migrations/mysql/000041_create_upload_sessions.down.sql delete mode 100644 server/channels/db/migrations/mysql/000041_create_upload_sessions.up.sql delete mode 100644 server/channels/db/migrations/mysql/000042_create_threads.down.sql delete mode 100644 server/channels/db/migrations/mysql/000042_create_threads.up.sql delete mode 100644 server/channels/db/migrations/mysql/000043_thread_memberships.down.sql delete mode 100644 server/channels/db/migrations/mysql/000043_thread_memberships.up.sql delete mode 100644 server/channels/db/migrations/mysql/000044_create_user_terms_of_service.down.sql delete mode 100644 server/channels/db/migrations/mysql/000044_create_user_terms_of_service.up.sql delete mode 100644 server/channels/db/migrations/mysql/000045_create_plugin_key_value_store.down.sql delete mode 100644 server/channels/db/migrations/mysql/000045_create_plugin_key_value_store.up.sql delete mode 100644 server/channels/db/migrations/mysql/000046_create_users.down.sql delete mode 100644 server/channels/db/migrations/mysql/000046_create_users.up.sql delete mode 100644 server/channels/db/migrations/mysql/000047_create_file_info.down.sql delete mode 100644 server/channels/db/migrations/mysql/000047_create_file_info.up.sql delete mode 100644 server/channels/db/migrations/mysql/000048_create_oauth_apps.down.sql delete mode 100644 server/channels/db/migrations/mysql/000048_create_oauth_apps.up.sql delete mode 100644 server/channels/db/migrations/mysql/000049_create_channels.down.sql delete mode 100644 server/channels/db/migrations/mysql/000049_create_channels.up.sql delete mode 100644 server/channels/db/migrations/mysql/000050_create_channelmembers.down.sql delete mode 100644 server/channels/db/migrations/mysql/000050_create_channelmembers.up.sql delete mode 100644 server/channels/db/migrations/mysql/000051_create_msg_root_count.down.sql delete mode 100644 server/channels/db/migrations/mysql/000051_create_msg_root_count.up.sql delete mode 100644 server/channels/db/migrations/mysql/000052_create_public_channels.down.sql delete mode 100644 server/channels/db/migrations/mysql/000052_create_public_channels.up.sql delete mode 100644 server/channels/db/migrations/mysql/000053_create_retention_policies.down.sql delete mode 100644 server/channels/db/migrations/mysql/000053_create_retention_policies.up.sql delete mode 100644 server/channels/db/migrations/mysql/000054_create_crt_channelmembership_count.down.sql delete mode 100644 server/channels/db/migrations/mysql/000054_create_crt_channelmembership_count.up.sql delete mode 100644 server/channels/db/migrations/mysql/000055_create_crt_thread_count_and_unreads.down.sql delete mode 100644 server/channels/db/migrations/mysql/000055_create_crt_thread_count_and_unreads.up.sql delete mode 100644 server/channels/db/migrations/mysql/000056_upgrade_channels_v6.0.down.sql delete mode 100644 server/channels/db/migrations/mysql/000056_upgrade_channels_v6.0.up.sql delete mode 100644 server/channels/db/migrations/mysql/000057_upgrade_command_webhooks_v6.0.down.sql delete mode 100644 server/channels/db/migrations/mysql/000057_upgrade_command_webhooks_v6.0.up.sql delete mode 100644 server/channels/db/migrations/mysql/000058_upgrade_channelmembers_v6.0.down.sql delete mode 100644 server/channels/db/migrations/mysql/000058_upgrade_channelmembers_v6.0.up.sql delete mode 100644 server/channels/db/migrations/mysql/000059_upgrade_users_v6.0.down.sql delete mode 100644 server/channels/db/migrations/mysql/000059_upgrade_users_v6.0.up.sql delete mode 100644 server/channels/db/migrations/mysql/000060_upgrade_jobs_v6.0.down.sql delete mode 100644 server/channels/db/migrations/mysql/000060_upgrade_jobs_v6.0.up.sql delete mode 100644 server/channels/db/migrations/mysql/000061_upgrade_link_metadata_v6.0.down.sql delete mode 100644 server/channels/db/migrations/mysql/000061_upgrade_link_metadata_v6.0.up.sql delete mode 100644 server/channels/db/migrations/mysql/000062_upgrade_sessions_v6.0.down.sql delete mode 100644 server/channels/db/migrations/mysql/000062_upgrade_sessions_v6.0.up.sql delete mode 100644 server/channels/db/migrations/mysql/000063_upgrade_threads_v6.0.down.sql delete mode 100644 server/channels/db/migrations/mysql/000063_upgrade_threads_v6.0.up.sql delete mode 100644 server/channels/db/migrations/mysql/000064_upgrade_status_v6.0.down.sql delete mode 100644 server/channels/db/migrations/mysql/000064_upgrade_status_v6.0.up.sql delete mode 100644 server/channels/db/migrations/mysql/000065_upgrade_groupchannels_v6.0.down.sql delete mode 100644 server/channels/db/migrations/mysql/000065_upgrade_groupchannels_v6.0.up.sql delete mode 100644 server/channels/db/migrations/mysql/000066_upgrade_posts_v6.0.down.sql delete mode 100644 server/channels/db/migrations/mysql/000066_upgrade_posts_v6.0.up.sql delete mode 100644 server/channels/db/migrations/mysql/000067_upgrade_channelmembers_v6.1.down.sql delete mode 100644 server/channels/db/migrations/mysql/000067_upgrade_channelmembers_v6.1.up.sql delete mode 100644 server/channels/db/migrations/mysql/000068_upgrade_teammembers_v6.1.down.sql delete mode 100644 server/channels/db/migrations/mysql/000068_upgrade_teammembers_v6.1.up.sql delete mode 100644 server/channels/db/migrations/mysql/000069_upgrade_jobs_v6.1.down.sql delete mode 100644 server/channels/db/migrations/mysql/000069_upgrade_jobs_v6.1.up.sql delete mode 100644 server/channels/db/migrations/mysql/000070_upgrade_cte_v6.1.down.sql delete mode 100644 server/channels/db/migrations/mysql/000070_upgrade_cte_v6.1.up.sql delete mode 100644 server/channels/db/migrations/mysql/000071_upgrade_sessions_v6.1.down.sql delete mode 100644 server/channels/db/migrations/mysql/000071_upgrade_sessions_v6.1.up.sql delete mode 100644 server/channels/db/migrations/mysql/000072_upgrade_schemes_v6.3.down.sql delete mode 100644 server/channels/db/migrations/mysql/000072_upgrade_schemes_v6.3.up.sql delete mode 100644 server/channels/db/migrations/mysql/000073_upgrade_plugin_key_value_store_v6.3.down.sql delete mode 100644 server/channels/db/migrations/mysql/000073_upgrade_plugin_key_value_store_v6.3.up.sql delete mode 100644 server/channels/db/migrations/mysql/000074_upgrade_users_v6.3.down.sql delete mode 100644 server/channels/db/migrations/mysql/000074_upgrade_users_v6.3.up.sql delete mode 100644 server/channels/db/migrations/mysql/000075_alter_upload_sessions_index.down.sql delete mode 100644 server/channels/db/migrations/mysql/000075_alter_upload_sessions_index.up.sql delete mode 100644 server/channels/db/migrations/mysql/000076_upgrade_lastrootpostat.down.sql delete mode 100644 server/channels/db/migrations/mysql/000076_upgrade_lastrootpostat.up.sql delete mode 100644 server/channels/db/migrations/mysql/000077_upgrade_users_v6.5.down.sql delete mode 100644 server/channels/db/migrations/mysql/000077_upgrade_users_v6.5.up.sql delete mode 100644 server/channels/db/migrations/mysql/000078_create_oauth_mattermost_app_id.down.sql delete mode 100644 server/channels/db/migrations/mysql/000078_create_oauth_mattermost_app_id.up.sql delete mode 100644 server/channels/db/migrations/mysql/000079_usergroups_displayname_index.down.sql delete mode 100644 server/channels/db/migrations/mysql/000079_usergroups_displayname_index.up.sql delete mode 100644 server/channels/db/migrations/mysql/000080_posts_createat_id.down.sql delete mode 100644 server/channels/db/migrations/mysql/000080_posts_createat_id.up.sql delete mode 100644 server/channels/db/migrations/mysql/000081_threads_deleteat.down.sql delete mode 100644 server/channels/db/migrations/mysql/000081_threads_deleteat.up.sql delete mode 100644 server/channels/db/migrations/mysql/000082_upgrade_oauth_mattermost_app_id.down.sql delete mode 100644 server/channels/db/migrations/mysql/000082_upgrade_oauth_mattermost_app_id.up.sql delete mode 100644 server/channels/db/migrations/mysql/000083_threads_threaddeleteat.down.sql delete mode 100644 server/channels/db/migrations/mysql/000083_threads_threaddeleteat.up.sql delete mode 100644 server/channels/db/migrations/mysql/000084_recent_searches.down.sql delete mode 100644 server/channels/db/migrations/mysql/000084_recent_searches.up.sql delete mode 100644 server/channels/db/migrations/mysql/000085_fileinfo_add_archived_column.down.sql delete mode 100644 server/channels/db/migrations/mysql/000085_fileinfo_add_archived_column.up.sql delete mode 100644 server/channels/db/migrations/mysql/000086_add_cloud_limits_archived.down.sql delete mode 100644 server/channels/db/migrations/mysql/000086_add_cloud_limits_archived.up.sql delete mode 100644 server/channels/db/migrations/mysql/000087_sidebar_categories_index.down.sql delete mode 100644 server/channels/db/migrations/mysql/000087_sidebar_categories_index.up.sql delete mode 100644 server/channels/db/migrations/mysql/000088_remaining_migrations.down.sql delete mode 100644 server/channels/db/migrations/mysql/000088_remaining_migrations.up.sql delete mode 100644 server/channels/db/migrations/mysql/000089_add-channelid-to-reaction.down.sql delete mode 100644 server/channels/db/migrations/mysql/000089_add-channelid-to-reaction.up.sql delete mode 100644 server/channels/db/migrations/mysql/000090_create_enums.down.sql delete mode 100644 server/channels/db/migrations/mysql/000090_create_enums.up.sql delete mode 100644 server/channels/db/migrations/mysql/000091_create_post_reminder.down.sql delete mode 100644 server/channels/db/migrations/mysql/000091_create_post_reminder.up.sql delete mode 100644 server/channels/db/migrations/mysql/000092_add_createat_to_teammembers.down.sql delete mode 100644 server/channels/db/migrations/mysql/000092_add_createat_to_teammembers.up.sql delete mode 100644 server/channels/db/migrations/mysql/000093_notify_admin.down.sql delete mode 100644 server/channels/db/migrations/mysql/000093_notify_admin.up.sql delete mode 100644 server/channels/db/migrations/mysql/000094_threads_teamid.down.sql delete mode 100644 server/channels/db/migrations/mysql/000094_threads_teamid.up.sql delete mode 100644 server/channels/db/migrations/mysql/000095_remove_posts_parentid.down.sql delete mode 100644 server/channels/db/migrations/mysql/000095_remove_posts_parentid.up.sql delete mode 100644 server/channels/db/migrations/mysql/000096_threads_threadteamid.down.sql delete mode 100644 server/channels/db/migrations/mysql/000096_threads_threadteamid.up.sql delete mode 100644 server/channels/db/migrations/mysql/000097_create_posts_priority.down.sql delete mode 100644 server/channels/db/migrations/mysql/000097_create_posts_priority.up.sql delete mode 100644 server/channels/db/migrations/mysql/000098_create_post_acknowledgements.down.sql delete mode 100644 server/channels/db/migrations/mysql/000098_create_post_acknowledgements.up.sql delete mode 100644 server/channels/db/migrations/mysql/000099_create_drafts.down.sql delete mode 100644 server/channels/db/migrations/mysql/000099_create_drafts.up.sql delete mode 100644 server/channels/db/migrations/mysql/000100_add_draft_priority_column.down.sql delete mode 100644 server/channels/db/migrations/mysql/000100_add_draft_priority_column.up.sql delete mode 100644 server/channels/db/migrations/mysql/000101_create_true_up_review_history.down.sql delete mode 100644 server/channels/db/migrations/mysql/000101_create_true_up_review_history.up.sql delete mode 100644 server/channels/db/migrations/mysql/000102_posts_originalid_index.down.sql delete mode 100644 server/channels/db/migrations/mysql/000102_posts_originalid_index.up.sql delete mode 100644 server/channels/db/migrations/mysql/000103_add_sentat_to_notifyadmin.down.sql delete mode 100644 server/channels/db/migrations/mysql/000103_add_sentat_to_notifyadmin.up.sql delete mode 100644 server/channels/db/migrations/mysql/000104_upgrade_notifyadmin.down.sql delete mode 100644 server/channels/db/migrations/mysql/000104_upgrade_notifyadmin.up.sql delete mode 100644 server/channels/db/migrations/mysql/000105_remove_tokens.down.sql delete mode 100644 server/channels/db/migrations/mysql/000105_remove_tokens.up.sql delete mode 100644 server/channels/db/migrations/mysql/000106_fileinfo_channelid.down.sql delete mode 100644 server/channels/db/migrations/mysql/000106_fileinfo_channelid.up.sql delete mode 100644 server/channels/db/migrations/mysql/000107_threadmemberships_cleanup.down.sql delete mode 100644 server/channels/db/migrations/mysql/000107_threadmemberships_cleanup.up.sql delete mode 100644 server/channels/db/migrations/mysql/000108_remove_orphaned_oauth_preferences.down.sql delete mode 100644 server/channels/db/migrations/mysql/000108_remove_orphaned_oauth_preferences.up.sql delete mode 100644 server/channels/db/migrations/mysql/000109_create_persistent_notifications.down.sql delete mode 100644 server/channels/db/migrations/mysql/000109_create_persistent_notifications.up.sql delete mode 100644 server/channels/db/migrations/mysql/000111_update_vacuuming.down.sql delete mode 100644 server/channels/db/migrations/mysql/000111_update_vacuuming.up.sql delete mode 100644 server/channels/db/migrations/mysql/000112_rework_desktop_tokens.down.sql delete mode 100644 server/channels/db/migrations/mysql/000112_rework_desktop_tokens.up.sql delete mode 100644 server/channels/db/migrations/mysql/000113_create_retentionidsfordeletion_table.down.sql delete mode 100644 server/channels/db/migrations/mysql/000113_create_retentionidsfordeletion_table.up.sql delete mode 100644 server/channels/db/migrations/mysql/000114_sharedchannelremotes_drop_nextsyncat_description.down.sql delete mode 100644 server/channels/db/migrations/mysql/000114_sharedchannelremotes_drop_nextsyncat_description.up.sql delete mode 100644 server/channels/db/migrations/mysql/000115_user_reporting_changes.down.sql delete mode 100644 server/channels/db/migrations/mysql/000115_user_reporting_changes.up.sql delete mode 100644 server/channels/db/migrations/mysql/000116_create_outgoing_oauth_connections.down.sql delete mode 100644 server/channels/db/migrations/mysql/000116_create_outgoing_oauth_connections.up.sql delete mode 100644 server/channels/db/migrations/mysql/000117_msteams_shared_channels.down.sql delete mode 100644 server/channels/db/migrations/mysql/000117_msteams_shared_channels.up.sql delete mode 100644 server/channels/db/migrations/mysql/000118_create_index_poststats.down.sql delete mode 100644 server/channels/db/migrations/mysql/000118_create_index_poststats.up.sql delete mode 100644 server/channels/db/migrations/mysql/000119_msteams_shared_channels_opts.down.sql delete mode 100644 server/channels/db/migrations/mysql/000119_msteams_shared_channels_opts.up.sql delete mode 100644 server/channels/db/migrations/mysql/000120_create_channelbookmarks_table.down.sql delete mode 100644 server/channels/db/migrations/mysql/000120_create_channelbookmarks_table.up.sql delete mode 100644 server/channels/db/migrations/mysql/000121_remove_true_up_review_history.down.sql delete mode 100644 server/channels/db/migrations/mysql/000121_remove_true_up_review_history.up.sql delete mode 100644 server/channels/db/migrations/mysql/000122_preferences_value_length.down.sql delete mode 100644 server/channels/db/migrations/mysql/000122_preferences_value_length.up.sql delete mode 100644 server/channels/db/migrations/mysql/000123_remove_upload_file_permission.down.sql delete mode 100644 server/channels/db/migrations/mysql/000123_remove_upload_file_permission.up.sql delete mode 100644 server/channels/db/migrations/mysql/000124_remove_manage_team_permission.down.sql delete mode 100644 server/channels/db/migrations/mysql/000124_remove_manage_team_permission.up.sql delete mode 100644 server/channels/db/migrations/mysql/000125_remoteclusters_add_default_team_id.down.sql delete mode 100644 server/channels/db/migrations/mysql/000125_remoteclusters_add_default_team_id.up.sql delete mode 100644 server/channels/db/migrations/mysql/000126_sharedchannels_remotes_add_deleteat.down.sql delete mode 100644 server/channels/db/migrations/mysql/000126_sharedchannels_remotes_add_deleteat.up.sql delete mode 100644 server/channels/db/migrations/mysql/000127_add_mfa_used_ts_to_users.down.sql delete mode 100644 server/channels/db/migrations/mysql/000127_add_mfa_used_ts_to_users.up.sql delete mode 100644 server/channels/db/migrations/mysql/000128_create_scheduled_posts.down.sql delete mode 100644 server/channels/db/migrations/mysql/000128_create_scheduled_posts.up.sql delete mode 100644 server/channels/db/migrations/mysql/000129_add_property_system_architecture.down.sql delete mode 100644 server/channels/db/migrations/mysql/000129_add_property_system_architecture.up.sql delete mode 100644 server/channels/db/migrations/mysql/000130_system_console_stats.down.sql delete mode 100644 server/channels/db/migrations/mysql/000130_system_console_stats.up.sql delete mode 100644 server/channels/db/migrations/mysql/000131_create_index_pagination_on_property_values.down.sql delete mode 100644 server/channels/db/migrations/mysql/000131_create_index_pagination_on_property_values.up.sql delete mode 100644 server/channels/db/migrations/mysql/000132_create_index_pagination_on_property_fields.down.sql delete mode 100644 server/channels/db/migrations/mysql/000132_create_index_pagination_on_property_fields.up.sql delete mode 100644 server/channels/db/migrations/mysql/000133_add_channel_banner_fields.down.sql delete mode 100644 server/channels/db/migrations/mysql/000133_add_channel_banner_fields.up.sql delete mode 100644 server/channels/db/migrations/mysql/000134_create_access_control_policies.down.sql delete mode 100644 server/channels/db/migrations/mysql/000134_create_access_control_policies.up.sql delete mode 100644 server/channels/db/migrations/mysql/000135_sidebarchannels_categoryid.down.sql delete mode 100644 server/channels/db/migrations/mysql/000135_sidebarchannels_categoryid.up.sql delete mode 100644 server/channels/db/migrations/mysql/000136_create_attribute_view.down.sql delete mode 100644 server/channels/db/migrations/mysql/000136_create_attribute_view.up.sql delete mode 100644 server/channels/db/migrations/mysql/000137_update_attribute_view.down.sql delete mode 100644 server/channels/db/migrations/mysql/000137_update_attribute_view.up.sql delete mode 100644 server/channels/db/migrations/mysql/000138_add_default_category_name_to_channel.down.sql delete mode 100644 server/channels/db/migrations/mysql/000138_add_default_category_name_to_channel.up.sql delete mode 100644 server/channels/db/migrations/mysql/000139_remoteclusters_add_last_global_user_sync_at.down.sql delete mode 100644 server/channels/db/migrations/mysql/000139_remoteclusters_add_last_global_user_sync_at.up.sql delete mode 100644 server/channels/db/migrations/mysql/000140_add_lastmemberssyncat_to_sharedchannelremotes.down.sql delete mode 100644 server/channels/db/migrations/mysql/000140_add_lastmemberssyncat_to_sharedchannelremotes.up.sql delete mode 100644 server/channels/db/migrations/mysql/000141_add_remoteid_channelid_to_post_acknowledgements.down.sql delete mode 100644 server/channels/db/migrations/mysql/000141_add_remoteid_channelid_to_post_acknowledgements.up.sql delete mode 100644 server/public/utils/sql/sql_utils_test.go diff --git a/.github/workflows/README.md b/.github/workflows/README.md index bd7e5df6fa7..b867ba24e9d 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -12,13 +12,13 @@ server-ci-pr | ---server-ci-template | - ---server-test-template (common code for postgres and mysql tests) + ---server-test-template server-ci-master | ---server-ci-template | - ---server-test-template (common code for postgres and mysql tests) + ---server-test-template webapp-ci-pr | diff --git a/.github/workflows/esrupgrade-common.yml b/.github/workflows/esrupgrade-common.yml deleted file mode 100644 index 1ce7b092a35..00000000000 --- a/.github/workflows/esrupgrade-common.yml +++ /dev/null @@ -1,161 +0,0 @@ -name: ESR Upgrade -on: - workflow_call: - inputs: - db-dump-url: - required: true - type: string - initial-version: - required: true - type: string - final-version: - required: true - type: string -env: - COMPOSE_PROJECT_NAME: ghactions - BUILD_IMAGE: mattermost/mattermost-enterprise-edition:${{ inputs.final-version }} - MYSQL_CONN_ARGS: -h localhost -P 3306 --protocol=tcp -ummuser -pmostest mattermost_test - DUMP_SERVER_NAME: esr.${{ inputs.initial-version }}-${{ inputs.final-version }}.dump.server.sql - DUMP_SCRIPT_NAME: esr.${{ inputs.initial-version }}-${{ inputs.final-version }}.dump.script.sql - MIGRATION_SCRIPT: esr.${{ inputs.initial-version }}-${{ inputs.final-version }}.mysql.up.sql - CLEANUP_SCRIPT: esr.${{ inputs.initial-version }}-${{ inputs.final-version }}.mysql.cleanup.sql - PREPROCESS_SCRIPT: esr.common.mysql.preprocess.sql - DIFF_NAME: esr.${{ inputs.initial-version }}-${{ inputs.final-version }}.diff -jobs: - esr-upgrade-server: - runs-on: ubuntu-22.04 - timeout-minutes: 30 - steps: - - name: Checkout mattermost project - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Run docker compose - run: | - cd server/build - docker compose --no-ansi run --rm start_dependencies - cat ../tests/custom-schema-cpa.ldif | docker compose --ansi never exec -T openldap bash -c 'ldapadd -Y EXTERNAL -H ldapi:/// -w mostest || true'; - cat ../tests/test-data.ldif | docker compose --no-ansi exec -T openldap bash -c 'ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'; - docker compose --no-ansi exec -T minio sh -c 'mkdir -p /data/mattermost-test'; - docker compose --no-ansi ps - - name: Wait for docker compose - run: | - until docker network inspect ghactions_mm-test; do echo "Waiting for Docker Compose Network..."; sleep 1; done; - docker run --net ghactions_mm-test appropriate/curl:latest sh -c "until curl --max-time 5 --output - http://mysql:3306; do echo waiting for mysql; sleep 5; done;" - docker run --net ghactions_mm-test appropriate/curl:latest sh -c "until curl --max-time 5 --output - http://elasticsearch:9200; do echo waiting for elasticsearch; sleep 5; done;" - - name: Initialize the database with the source DB dump - run: | - curl ${{ inputs.db-dump-url }} | zcat | docker exec -i ghactions_mysql_1 mysql -AN $MYSQL_CONN_ARGS - - name: Common preprocessing of the DB dump - run: | - cd server/scripts/esrupgrades - docker exec -i ghactions_mysql_1 mysql -AN $MYSQL_CONN_ARGS < $PREPROCESS_SCRIPT - - name: Pull EE image - run: | - docker pull $BUILD_IMAGE - - name: Run migration through server - run: | - mkdir -p client/plugins - cd server/build - # Run the server in the background to trigger the migrations - docker run --name mmserver \ - --net ghactions_mm-test \ - --ulimit nofile=8096:8096 \ - --env-file=dotenv/test.env \ - --env MM_SQLSETTINGS_DRIVERNAME="mysql" \ - --env MM_SQLSETTINGS_DATASOURCE="mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4&multiStatements=true&maxAllowedPacket=4194304" \ - -v ~/work/mattermost:/mm \ - -w /mm \ - $BUILD_IMAGE & - # In parallel, wait for the migrations to finish. - # To verify this, we check that the server has finished the startup job through the log line "Server is listening on" - until docker logs mmserver | grep "Server is listening on"; do\ - echo "Waiting for migrations to finish..."; \ - sleep 1; \ - done; - # Make sure to stop the server. Also, redirect output to null; - # otherwise, the name of the container gets written to the console, which is weird - docker stop mmserver > /dev/null - - name: Cleanup DB - run: | - cd server/scripts/esrupgrades - docker exec -i ghactions_mysql_1 mysql -AN $MYSQL_CONN_ARGS < $CLEANUP_SCRIPT - - name: Dump upgraded database - run: | - # Use --skip-opt to have each INSERT into one line. - # Use --set-gtid-purged=OFF to suppress GTID-related statements. - docker exec -i ghactions_mysql_1 mysqldump \ - --skip-opt --set-gtid-purged=OFF \ - $MYSQL_CONN_ARGS > $DUMP_SERVER_NAME - - name: Cleanup dump and compress - run: | - # We skip the very last line, which simply contains the date of the dump - head -n -1 ${DUMP_SERVER_NAME} | gzip > ${DUMP_SERVER_NAME}.gz - - name: Upload dump - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: upgraded-dump-server - path: ${{ env.DUMP_SERVER_NAME }}.gz - esr-upgrade-script: - runs-on: ubuntu-22.04 - timeout-minutes: 30 - steps: - - name: Checkout mattermost project - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Run docker compose - run: | - cd server/build - docker compose --no-ansi run --rm start_dependencies - cat ../tests/custom-schema-cpa.ldif | docker compose --ansi never exec -T openldap bash -c 'ldapadd -Y EXTERNAL -H ldapi:/// -w mostest || true'; - cat ../tests/test-data.ldif | docker compose --no-ansi exec -T openldap bash -c 'ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'; - docker compose --no-ansi exec -T minio sh -c 'mkdir -p /data/mattermost-test'; - docker compose --no-ansi ps - - name: Wait for docker compose - run: | - until docker network inspect ghactions_mm-test; do echo "Waiting for Docker Compose Network..."; sleep 1; done; - docker run --net ghactions_mm-test appropriate/curl:latest sh -c "until curl --max-time 5 --output - http://mysql:3306; do echo waiting for mysql; sleep 5; done;" - docker run --net ghactions_mm-test appropriate/curl:latest sh -c "until curl --max-time 5 --output - http://elasticsearch:9200; do echo waiting for elasticsearch; sleep 5; done;" - - name: Initialize the database with the source DB dump - run: | - curl ${{ inputs.db-dump-url }} | zcat | docker exec -i ghactions_mysql_1 mysql -AN $MYSQL_CONN_ARGS - - name: Preprocess the DB dump - run: | - cd server/scripts/esrupgrades - docker exec -i ghactions_mysql_1 mysql -AN $MYSQL_CONN_ARGS < $PREPROCESS_SCRIPT - - name: Run migration through script - run: | - cd server/scripts/esrupgrades - docker exec -i ghactions_mysql_1 mysql -AN $MYSQL_CONN_ARGS < $MIGRATION_SCRIPT - - name: Cleanup DB - run: | - cd server/scripts/esrupgrades - docker exec -i ghactions_mysql_1 mysql -AN $MYSQL_CONN_ARGS < $CLEANUP_SCRIPT - - name: Dump upgraded database - run: | - docker exec -i ghactions_mysql_1 mysqldump --skip-opt --set-gtid-purged=OFF $MYSQL_CONN_ARGS > $DUMP_SCRIPT_NAME - - name: Cleanup dump and compress - run: | - # We skip the very last line, which simply contains the date of the dump - head -n -1 ${DUMP_SCRIPT_NAME} | gzip > ${DUMP_SCRIPT_NAME}.gz - - name: Upload dump - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: upgraded-dump-script - path: ${{ env.DUMP_SCRIPT_NAME }}.gz - esr-upgrade-diff: - runs-on: ubuntu-latest - needs: - - esr-upgrade-server - - esr-upgrade-script - steps: - - name: Retrieve dumps - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 - - name: Diff dumps - run: | - gzip -d upgraded-dump-server/${DUMP_SERVER_NAME}.gz - gzip -d upgraded-dump-script/${DUMP_SCRIPT_NAME}.gz - diff upgraded-dump-server/$DUMP_SERVER_NAME upgraded-dump-script/$DUMP_SCRIPT_NAME > $DIFF_NAME - - name: Upload diff - if: failure() # Upload the diff only if the previous step failed; i.e., if the diff is non-empty - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: dumps-diff - path: ${{ env.DIFF_NAME }} diff --git a/.github/workflows/esrupgrade.yml b/.github/workflows/esrupgrade.yml deleted file mode 100644 index 271801ec65e..00000000000 --- a/.github/workflows/esrupgrade.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: ESR Upgrade -on: - # Uncomment after https://mattermost.atlassian.net/browse/MM-53275 is fixed - # pull_request: - # paths: - # - 'server/scripts/esrupgrades/*' - # - '.github/workflows/esr*' - push: - branches: - # - master - - cloud - - release-* -jobs: - esr-upgrade-5_37-7_8: - name: Run ESR upgrade script from 5.37 to 7.8 - if: github.repository_owner == 'mattermost' - uses: ./.github/workflows/esrupgrade-common.yml - with: - db-dump-url: https://lt-public-data.s3.amazonaws.com/47K_537_mysql_collationfixed.sql.gz - initial-version: 5.37 - final-version: 7.8 - esr-upgrade-5_37-6_3: - name: Run ESR upgrade script from 5.37 to 6.3 - if: github.repository_owner == 'mattermost' - uses: ./.github/workflows/esrupgrade-common.yml - with: - db-dump-url: https://lt-public-data.s3.amazonaws.com/47K_537_mysql_collationfixed.sql.gz - initial-version: 5.37 - final-version: 6.3 - esr-upgrade-6_3-7_8: - name: Run ESR upgrade script from 6.3 to 7.8 - if: github.repository_owner == 'mattermost' - uses: ./.github/workflows/esrupgrade-common.yml - with: - db-dump-url: https://lt-public-data.s3.amazonaws.com/47K_63_mysql.sql.gz - initial-version: 6.3 - final-version: 7.8 diff --git a/.github/workflows/migration.yml b/.github/workflows/migration.yml deleted file mode 100644 index 16e472c38de..00000000000 --- a/.github/workflows/migration.yml +++ /dev/null @@ -1,77 +0,0 @@ -name: Database Migration Test -on: - workflow_call: -jobs: - test: - name: MySQL -> Postgres Migration - runs-on: ubuntu-22.04 - env: - COMPOSE_PROJECT_NAME: ghactions - TEST_IMAGE: migration-test-image - defaults: - run: - working-directory: server - steps: - - name: Checkout mattermost project - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Calculate Golang Version - id: go - working-directory: ./server - run: echo GO_VERSION=$(cat .go-version) >> "${GITHUB_OUTPUT}" - - name: Run docker compose - run: | - cd build - docker compose --ansi never run --rm start_dependencies - docker compose --ansi never exec -T minio sh -c 'mkdir -p /data/mattermost-test'; - docker compose --ansi never ps - - name: Fix MySQL user permissions - run: | - cd build - docker exec ${COMPOSE_PROJECT_NAME}-mysql-1 sh -c "sed -i '/# default-authentication-plugin/c\default-authentication-plugin=mysql_native_password' /etc/my.cnf" - docker exec ${COMPOSE_PROJECT_NAME}-mysql-1 sh -c "mysql -u root -pmostest -e \"ALTER USER 'mmuser'@'%' IDENTIFIED WITH mysql_native_password BY 'mostest';\"" - docker exec ${COMPOSE_PROJECT_NAME}-mysql-1 sh -c "mysql -u root -pmostest -e \"ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'mostest';\"" - docker restart ${COMPOSE_PROJECT_NAME}-mysql-1 && sleep 10 - - name: Build test image - env: - BUILD_IMAGE: golang:${{ steps.go.outputs.GO_VERSION }}-bookworm - PGLOADER_IMAGE: mattermost/mattermost-pgloader:v3.6.9 - run: | - docker build -t $TEST_IMAGE - < $(GO) install github.com/mattermost/morph/cmd/morph@1e0640c - @echo "Generating new migration for mysql" - $(GOBIN)/morph new script $(name) --driver mysql --dir channels/db/migrations --sequence - @echo "Generating new migration for postgres" $(GOBIN)/morph new script $(name) --driver postgres --dir channels/db/migrations --sequence @@ -838,34 +832,5 @@ migrations-extract: @echo "# Autogenerated file to synchronize migrations sequence in the PR workflow, please do not edit." > channels/db/migrations/migrations.list find channels/db/migrations -maxdepth 2 -mindepth 2 | sort >> channels/db/migrations/migrations.list -test-migration: - $(GO) install github.com/mattermost/morph/cmd/morph@latest - # apply postgres migrations to the new db - bin/morph apply up --driver postgres --dsn "${POSTGRES_DSN}" --path ${POSTGRES_MIGRATIONS_PATH} --number -1 - - # create temporary file for the config - @cp tests/template.load tests/temp.load - - # set required values for the pgloader config, these values are read from /build/dotenv/migration.env in the CI - # do for psql credentials - @sed -i'' -e 's|{{ .pg_user }}|${PG_USERNAME}|g' tests/temp.load - @sed -i'' -e 's|{{ .pg_password }}|${PG_PASSWORD}|g' tests/temp.load - @sed -i'' -e 's|{{ .target_schema }}|${PG_SCHEMA}|g' tests/temp.load - - # do for mysql credentials - @sed -i'' -e 's|{{ .mysql_user }}|${MYSQL_USERNAME}|g' tests/temp.load - @sed -i'' -e 's|{{ .mysql_password }}|${MYSQL_PASSWORD}|g' tests/temp.load - @sed -i'' -e 's|{{ .source_schema }}|${MYSQL_SCHEMA}|g' tests/temp.load - - # run pgloader and save the logs - pgloader --debug tests/temp.load > migration.log - - $(GO) install github.com/mattermost/dbcmp/cmd/dbcmp@9324978963 - # compare two database contents - # db_migrations differ due to a typo in the 92. migration name - # for now we exclude plugins such as playbooks and focalboard - # we also exlude systems table temporarily due to adding some keys while running the initial migration - bin/dbcmp --source "${MYSQL_DSN}" --target "${POSTGRES_DSN}" --exclude="db_migrations","ir_","focalboard","systems","attributeview" - test-local-filestore: # Run tests for local filestore $(GO) test ./platform/shared/filestore -run '^TestLocalFileBackend' -v diff --git a/server/build/docker-compose-generator/main.go b/server/build/docker-compose-generator/main.go index bb14487f6c4..63fdbf6c338 100644 --- a/server/build/docker-compose-generator/main.go +++ b/server/build/docker-compose-generator/main.go @@ -24,21 +24,19 @@ type Container struct { func main() { validServices := map[string]int{ - "mysql": 3306, - "postgres": 5432, - "minio": 9000, - "inbucket": 9001, - "openldap": 389, - "elasticsearch": 9200, - "opensearch": 9201, - "redis": 6379, - "dejavu": 1358, - "keycloak": 8080, - "prometheus": 9090, - "grafana": 3000, - "loki": 3100, - "promtail": 3180, - "mysql-read-replica": 3306, // FIXME: not recognizing the successfully running service on port 3307. + "postgres": 5432, + "minio": 9000, + "inbucket": 9001, + "openldap": 389, + "elasticsearch": 9200, + "opensearch": 9201, + "redis": 6379, + "dejavu": 1358, + "keycloak": 8080, + "prometheus": 9090, + "grafana": 3000, + "loki": 3100, + "promtail": 3180, } command := []string{} for _, arg := range os.Args[1:] { diff --git a/server/build/docker-compose.common.yml b/server/build/docker-compose.common.yml index b6a05a03a22..66adeb20481 100644 --- a/server/build/docker-compose.common.yml +++ b/server/build/docker-compose.common.yml @@ -1,45 +1,4 @@ services: - mysql: - image: "mysql/mysql-server:8.0.32" - restart: always - networks: - - mm-test - environment: - MYSQL_ROOT_HOST: "%" - MYSQL_ROOT_PASSWORD: mostest - MYSQL_PASSWORD: mostest - MYSQL_USER: mmuser - MYSQL_DATABASE: mattermost_test - healthcheck: - test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] - interval: 5s - timeout: 10s - retries: 3 - volumes: - - ./docker/mysql.conf.d/source.cnf:/etc/mysql/conf.d/mysql.cnf - mysql-read-replica: - image: "mysql/mysql-server:8.0.32" - restart: always - networks: - - mm-test - ports: - - target: 3306 - published: 3307 - protocol: tcp - mode: host - environment: - MYSQL_ROOT_HOST: "%" - MYSQL_ROOT_PASSWORD: mostest - MYSQL_PASSWORD: mostest - MYSQL_USER: mmuser - MYSQL_DATABASE: mattermost_test - healthcheck: - test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] - interval: 5s - timeout: 10s - retries: 3 - volumes: - - ./docker/mysql.conf.d/replica.cnf:/etc/mysql/conf.d/mysql.cnf postgres: image: "postgres:13" restart: always diff --git a/server/build/docker-compose.yml b/server/build/docker-compose.yml index 79a58d02a21..438f0cbe3b2 100644 --- a/server/build/docker-compose.yml +++ b/server/build/docker-compose.yml @@ -1,11 +1,4 @@ services: - mysql: - extends: - file: docker-compose.common.yml - service: mysql - tmpfs: /var/lib/mysql - volumes: - - "./docker/mysql.conf.d:/etc/mysql/conf.d" postgres: extends: file: docker-compose.common.yml @@ -65,7 +58,6 @@ services: networks: - mm-test depends_on: - - mysql - postgres - minio - inbucket @@ -73,7 +65,7 @@ services: - elasticsearch - opensearch - redis - command: postgres:5432 mysql:3306 minio:9000 inbucket:9001 openldap:389 elasticsearch:9200 opensearch:9201 redis:6379 + command: postgres:5432 minio:9000 inbucket:9001 openldap:389 elasticsearch:9200 opensearch:9201 redis:6379 networks: mm-test: diff --git a/server/build/docker/grafana/dashboards/home.json b/server/build/docker/grafana/dashboards/home.json index a84987f122f..ab25671d2c3 100644 --- a/server/build/docker/grafana/dashboards/home.json +++ b/server/build/docker/grafana/dashboards/home.json @@ -163,17 +163,6 @@ "queryType": "range", "refId": "A" }, - { - "datasource": { - "type": "loki", - "uid": "P8E80F9AEF21F6940" - }, - "editorMode": "code", - "expr": "sum(count_over_time({container=\"mattermost-mysql\"}[5m])) or vector(0)", - "legendFormat": "MySQL", - "queryType": "range", - "refId": "B" - }, { "datasource": { "type": "loki", diff --git a/server/build/docker/mysql.conf.d/custom.cnf b/server/build/docker/mysql.conf.d/custom.cnf deleted file mode 100644 index ee186841506..00000000000 --- a/server/build/docker/mysql.conf.d/custom.cnf +++ /dev/null @@ -1,20 +0,0 @@ -[mysqld] -bind-address = 0.0.0.0 - -default-authentication-plugin=mysql_native_password -log-output = NONE -slow-query-log = 0 -innodb_flush_log_at_trx_commit = 2 -innodb_flush_method = nosync -innodb_lock_wait_timeout = 50 -innodb_log_buffer_size = 3M -innodb_buffer_pool_size = 180M - -max_connect_errors = 1000000 -max_connections = 900 - -character-set-server = utf8 -sql_mode = "" -innodb = FORCE -default-storage-engine = Memory -max_allowed_packet = 256M diff --git a/server/build/docker/mysql.conf.d/replica.cnf b/server/build/docker/mysql.conf.d/replica.cnf deleted file mode 100644 index a0ee6e162a7..00000000000 --- a/server/build/docker/mysql.conf.d/replica.cnf +++ /dev/null @@ -1,3 +0,0 @@ -[mysqld] - -server-id = 2 \ No newline at end of file diff --git a/server/build/docker/mysql.conf.d/source.cnf b/server/build/docker/mysql.conf.d/source.cnf deleted file mode 100644 index bb0a1c35df2..00000000000 --- a/server/build/docker/mysql.conf.d/source.cnf +++ /dev/null @@ -1,4 +0,0 @@ -[mysqld] - -server-id = 1 -log-bin = mysql-bin \ No newline at end of file diff --git a/server/build/dotenv/migration.env b/server/build/dotenv/migration.env deleted file mode 100644 index 1a36e6871ca..00000000000 --- a/server/build/dotenv/migration.env +++ /dev/null @@ -1,16 +0,0 @@ -GOBIN=/mattermost/bin -PG_USERNAME=mmuser -PG_PASSWORD=mostest -PG_SCHEMA=mattermost_test -MYSQL_USERNAME=root -MYSQL_PASSWORD=mostest -MYSQL_SCHEMA=mattermost_test -POSTGRES_MIGRATIONS_PATH=./channels/db/migrations/postgres -MYSQL_DSN=${MYSQL_USERNAME}:${MYSQL_PASSWORD}@tcp(mysql:3306)/${MYSQL_SCHEMA}?charset=utf8mb4&readTimeout=30s&writeTimeout=30s&multiStatements=true -POSTGRES_DSN=postgres://${PG_USERNAME}:${PG_PASSWORD}@postgres:5432/${PG_SCHEMA}?sslmode=disable - -MM_SERVICESETTINGS_ENABLELOCALMODE=true -MM_SQLSETTINGS_DRIVERNAME=mysql -MM_SQLSETTINGS_DATASOURCE=mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4&readTimeout=30s&writeTimeout=30s&multiStatements=true&maxAllowedPacket=4194304 -MAX_WAIT_SECONDS=500 -IS_CI=true diff --git a/server/build/dotenv/test.env b/server/build/dotenv/test.env index 0c6f77bcb45..00d55edbd2f 100644 --- a/server/build/dotenv/test.env +++ b/server/build/dotenv/test.env @@ -1,6 +1,4 @@ -TEST_DATABASE_MYSQL_DSN=mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4&readTimeout=30s&writeTimeout=30s&multiStatements=true&maxAllowedPacket=4194304 TEST_DATABASE_POSTGRESQL_DSN=postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10 -TEST_DATABASE_MYSQL_ROOT_PASSWD=mostest GOBIN=/mattermost/server/bin CI_INBUCKET_HOST=inbucket diff --git a/server/build/legacy.mk b/server/build/legacy.mk deleted file mode 100644 index 57e2d88387c..00000000000 --- a/server/build/legacy.mk +++ /dev/null @@ -1,80 +0,0 @@ -# test-te used to just run the team edition tests, but now runs whatever is available -test-te: test-server - -# test-ee used to just run the enterprise edition tests, but now runs whatever is available -test-ee: test-server - -## Old target to run go vet. Now it just invokes golangci-lint. -govet: golangci-lint - -gofmt: ## Runs gofmt against all packages. This is now subsumed by make golangci-lint. - @echo Running GOFMT - - @for package in $(TE_PACKAGES) $(EE_PACKAGES); do \ - echo "Checking "$$package; \ - files=$$($(GO) list $(GOFLAGS) -f '{{range .GoFiles}}{{$$.Dir}}/{{.}} {{end}}' $$package); \ - if [ "$$files" ]; then \ - gofmt_output=$$(gofmt -d -s $$files 2>&1); \ - if [ "$$gofmt_output" ]; then \ - echo "$$gofmt_output"; \ - echo "gofmt failure"; \ - exit 1; \ - fi; \ - fi; \ - done - @echo "gofmt success"; \ - -# check-licenses was used to check the license of the files, but now is done through mattermost-govet -check-licenses: vet - -# clean old docker images -clean-old-docker: - @echo Removing docker containers - - @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/mattermost-mysql$$ | wc -l) -eq 1 ]; then \ - echo removing mattermost-mysql; \ - docker stop mattermost-mysql > /dev/null; \ - docker rm -v mattermost-mysql > /dev/null; \ - fi - - @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/mattermost-mysql-unittest$$ | wc -l) -eq 1 ]; then \ - echo removing mattermost-mysql-unittest; \ - docker stop mattermost-mysql-unittest > /dev/null; \ - docker rm -v mattermost-mysql-unittest > /dev/null; \ - fi - - @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/mattermost-postgres$$ | wc -l) -eq 1 ]; then \ - echo removing mattermost-postgres; \ - docker stop mattermost-postgres > /dev/null; \ - docker rm -v mattermost-postgres > /dev/null; \ - fi - - @if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/mattermost-postgres-unittest$$ | wc -l) -eq 1 ]; then \ - echo removing mattermost-postgres-unittest; \ - docker stop mattermost-postgres-unittest > /dev/null; \ - docker rm -v mattermost-postgres-unittest > /dev/null; \ - fi - - @if [ $(shell docker ps -a | grep -ci mattermost-openldap) -eq 1 ]; then \ - echo removing mattermost-openldap; \ - docker stop mattermost-openldap > /dev/null; \ - docker rm -v mattermost-openldap > /dev/null; \ - fi - - @if [ $(shell docker ps -a | grep -ci mattermost-inbucket) -eq 1 ]; then \ - echo removing mattermost-inbucket; \ - docker stop mattermost-inbucket > /dev/null; \ - docker rm -v mattermost-inbucket > /dev/null; \ - fi - - @if [ $(shell docker ps -a | grep -ci mattermost-minio) -eq 1 ]; then \ - echo removing mattermost-minio; \ - docker stop mattermost-minio > /dev/null; \ - docker rm -v mattermost-minio > /dev/null; \ - fi - - @if [ $(shell docker ps -a | grep -ci mattermost-elasticsearch) -eq 1 ]; then \ - echo removing mattermost-elasticsearch; \ - docker stop mattermost-elasticsearch > /dev/null; \ - docker rm -v mattermost-elasticsearch > /dev/null; \ - fi diff --git a/server/channels/api4/access_control_test.go b/server/channels/api4/access_control_test.go index 04fd4bfe7d3..1727ec39d3b 100644 --- a/server/channels/api4/access_control_test.go +++ b/server/channels/api4/access_control_test.go @@ -22,10 +22,6 @@ func TestCreateAccessControlPolicy(t *testing.T) { os.Unsetenv("MM_FEATUREFLAGS_ATTRIBUTEBASEDACCESSCONTROL") }) - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Access control tests are not supported on MySQL") - } - samplePolicy := &model.AccessControlPolicy{ Type: model.AccessControlPolicyTypeChannel, Version: model.AccessControlPolicyVersionV0_1, @@ -93,10 +89,6 @@ func TestGetAccessControlPolicy(t *testing.T) { os.Unsetenv("MM_FEATUREFLAGS_ATTRIBUTEBASEDACCESSCONTROL") }) - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Access control tests are not supported on MySQL") - } - samplePolicy := &model.AccessControlPolicy{ ID: model.NewId(), Type: model.AccessControlPolicyTypeChannel, @@ -160,10 +152,6 @@ func TestDeleteAccessControlPolicy(t *testing.T) { os.Unsetenv("MM_FEATUREFLAGS_ATTRIBUTEBASEDACCESSCONTROL") }) - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Access control tests are not supported on MySQL") - } - samplePolicyID := model.NewId() t.Run("DeleteAccessControlPolicy without license", func(t *testing.T) { @@ -214,10 +202,6 @@ func TestCheckExpression(t *testing.T) { os.Unsetenv("MM_FEATUREFLAGS_ATTRIBUTEBASEDACCESSCONTROL") }) - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Access control tests are not supported on MySQL") - } - t.Run("CheckExpression without license", func(t *testing.T) { _, resp, err := th.SystemAdminClient.CheckExpression(context.Background(), "true") require.Error(t, err) @@ -291,10 +275,6 @@ func TestTestExpression(t *testing.T) { os.Unsetenv("MM_FEATUREFLAGS_ATTRIBUTEBASEDACCESSCONTROL") }) - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Access control tests are not supported on MySQL") - } - t.Run("TestExpression without license", func(t *testing.T) { _, resp, err := th.SystemAdminClient.TestExpression(context.Background(), model.QueryExpressionParams{}) require.Error(t, err) @@ -347,10 +327,6 @@ func TestSearchAccessControlPolicies(t *testing.T) { os.Unsetenv("MM_FEATUREFLAGS_ATTRIBUTEBASEDACCESSCONTROL") }) - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Access control tests are not supported on MySQL") - } - t.Run("SearchAccessControlPolicies without license", func(t *testing.T) { _, resp, err := th.SystemAdminClient.SearchAccessControlPolicies(context.Background(), model.AccessControlPolicySearch{}) require.Error(t, err) @@ -405,10 +381,6 @@ func TestAssignAccessPolicy(t *testing.T) { os.Unsetenv("MM_FEATUREFLAGS_ATTRIBUTEBASEDACCESSCONTROL") }) - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Access control tests are not supported on MySQL") - } - samplePolicy := &model.AccessControlPolicy{ ID: model.NewId(), Type: model.AccessControlPolicyTypeParent, @@ -476,10 +448,6 @@ func TestUnassignAccessPolicy(t *testing.T) { os.Unsetenv("MM_FEATUREFLAGS_ATTRIBUTEBASEDACCESSCONTROL") }) - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Access control tests are not supported on MySQL") - } - samplePolicy := &model.AccessControlPolicy{ ID: model.NewId(), Type: model.AccessControlPolicyTypeParent, @@ -551,10 +519,6 @@ func TestGetChannelsForAccessControlPolicy(t *testing.T) { os.Unsetenv("MM_FEATUREFLAGS_ATTRIBUTEBASEDACCESSCONTROL") }) - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Access control tests are not supported on MySQL") - } - samplePolicy := &model.AccessControlPolicy{ ID: model.NewId(), Type: model.AccessControlPolicyTypeParent, @@ -632,10 +596,6 @@ func TestSearchChannelsForAccessControlPolicy(t *testing.T) { } t.Run("SearchChannelsForAccessControlPolicy with regular user", func(t *testing.T) { - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Access control tests are not supported on MySQL") - } - ok := th.App.Srv().SetLicense(model.NewTestLicenseSKU(model.LicenseShortSkuEnterpriseAdvanced)) require.True(t, ok, "SetLicense should return true") diff --git a/server/channels/api4/channel_test.go b/server/channels/api4/channel_test.go index 61ce244c31b..ac670bed104 100644 --- a/server/channels/api4/channel_test.go +++ b/server/channels/api4/channel_test.go @@ -847,10 +847,6 @@ func TestPatchChannel(t *testing.T) { }) t.Run("Should be able to configure channel banner on a channel", func(t *testing.T) { - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Channel banner tests are not supported on MySQL") - } - _, err := client.Logout(context.Background()) require.NoError(t, err) th.LoginBasic() @@ -910,10 +906,6 @@ func TestPatchChannel(t *testing.T) { }) t.Run("Should be able to configure channel banner as a team admin", func(t *testing.T) { - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Channel banner tests are not supported on MySQL") - } - _, err := client.Logout(context.Background()) require.NoError(t, err) th.LoginTeamAdmin() @@ -941,10 +933,6 @@ func TestPatchChannel(t *testing.T) { }) t.Run("Cannot enable channel banner without configuring it", func(t *testing.T) { - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Channel banner tests are not supported on MySQL") - } - _, err := client.Logout(context.Background()) require.NoError(t, err) th.LoginBasic() @@ -1069,10 +1057,6 @@ func TestCanEditChannelBanner(t *testing.T) { th := Setup(t).InitBasic() defer th.TearDown() - if *mainHelper.GetSQLSettings().DriverName == model.DatabaseDriverMysql { - t.Skip("Channel banner tests are not supported on MySQL") - } - t.Run("when license is nil", func(t *testing.T) { channel := &model.Channel{ Type: model.ChannelTypeOpen, diff --git a/server/channels/api4/license.go b/server/channels/api4/license.go index e345253336e..f9dc659a5ac 100644 --- a/server/channels/api4/license.go +++ b/server/channels/api4/license.go @@ -185,12 +185,6 @@ func requestTrialLicense(c *Context, w http.ResponseWriter, r *http.Request) { return } - // MySQL is not supported for trial licenses - if c.App.Config().SqlSettings.DriverName != nil && *c.App.Config().SqlSettings.DriverName == model.DatabaseDriverMysql { - c.Err = model.NewAppError("requestTrialLicense", "api.license.request-trial.mysql.app_error", nil, "mysql is not supported for trial licenses", http.StatusBadRequest) - return - } - if c.App.Srv().Platform().LicenseManager() == nil { c.Err = model.NewAppError("requestTrialLicense", "api.license.upgrade_needed.app_error", nil, "", http.StatusForbidden) return diff --git a/server/channels/api4/license_test.go b/server/channels/api4/license_test.go index e47f8f4e0cf..92c317c1fc0 100644 --- a/server/channels/api4/license_test.go +++ b/server/channels/api4/license_test.go @@ -260,27 +260,7 @@ func TestRequestTrialLicenseWithExtraFields(t *testing.T) { CheckForbiddenStatus(t, resp) }) - t.Run("mysql database not supported", func(t *testing.T) { - // Skip this test unless running with MySQL driver - if *th.App.Config().SqlSettings.DriverName != model.DatabaseDriverMysql { - t.Skip("Skipping test - only runs with MySQL driver") - } - - licenseManagerMock := &mocks.LicenseInterface{} - licenseManagerMock.On("CanStartTrial").Return(true, nil).Once() - th.App.Srv().Platform().SetLicenseManager(licenseManagerMock) - - resp, err := th.SystemAdminClient.RequestTrialLicenseWithExtraFields(context.Background(), validTrialRequest) - CheckErrorID(t, err, "api.license.request-trial.mysql.app_error") - CheckBadRequestStatus(t, resp) - }) - t.Run("trial license user count less than current users", func(t *testing.T) { - // Skip this test when MySQL is configured as it hits the MySQL check first - if *th.App.Config().SqlSettings.DriverName == model.DatabaseDriverMysql { - t.Skip("Skipping test - MySQL does not support trial licenses") - } - license := model.NewTestLicense() license.Features.Users = model.NewPointer(nUsers) licenseJSON, jsonErr := json.Marshal(license) @@ -317,11 +297,6 @@ func TestRequestTrialLicenseWithExtraFields(t *testing.T) { }) t.Run("returns status 451 when it receives status 451", func(t *testing.T) { - // Skip this test when MySQL is configured as it hits the MySQL check first - if *th.App.Config().SqlSettings.DriverName == model.DatabaseDriverMysql { - t.Skip("Skipping test - MySQL does not support trial licenses") - } - license := model.NewTestLicense() license.Features.Users = model.NewPointer(nUsers) licenseJSON, jsonErr := json.Marshal(license) @@ -352,11 +327,6 @@ func TestRequestTrialLicenseWithExtraFields(t *testing.T) { }) t.Run("returns status 400 if request is a mix of legacy and new fields", func(t *testing.T) { - // Skip this test when MySQL is configured as it hits the MySQL check first - if *th.App.Config().SqlSettings.DriverName == model.DatabaseDriverMysql { - t.Skip("Skipping test - MySQL does not support trial licenses") - } - validTrialRequest.CompanyCountry = "" validTrialRequest.Users = 100 defer func() { validTrialRequest.CompanyCountry = "US" }() @@ -396,12 +366,8 @@ func TestRequestTrialLicenseWithExtraFields(t *testing.T) { }) th.App.Srv().Platform().SetLicenseManager(nil) - t.Run("trial license should fail if LicenseManager is nil", func(t *testing.T) { - // Skip this test when MySQL is configured as it hits the MySQL check first - if *th.App.Config().SqlSettings.DriverName == model.DatabaseDriverMysql { - t.Skip("Skipping test - MySQL does not support trial licenses") - } + t.Run("trial license should fail if LicenseManager is nil", func(t *testing.T) { resp, err := th.SystemAdminClient.RequestTrialLicenseWithExtraFields(context.Background(), validTrialRequest) CheckErrorID(t, err, "api.license.upgrade_needed.app_error") CheckForbiddenStatus(t, resp) @@ -425,27 +391,7 @@ func TestRequestTrialLicense(t *testing.T) { CheckForbiddenStatus(t, resp) }) - t.Run("mysql database not supported", func(t *testing.T) { - // Skip this test unless running with MySQL driver - if *th.App.Config().SqlSettings.DriverName != model.DatabaseDriverMysql { - t.Skip("Skipping test - only runs with MySQL driver") - } - - licenseManagerMock := &mocks.LicenseInterface{} - licenseManagerMock.On("CanStartTrial").Return(true, nil).Once() - th.App.Srv().Platform().SetLicenseManager(licenseManagerMock) - - resp, err := th.SystemAdminClient.RequestTrialLicense(context.Background(), 1000) - CheckErrorID(t, err, "api.license.request-trial.mysql.app_error") - CheckBadRequestStatus(t, resp) - }) - t.Run("trial license invalid JSON", func(t *testing.T) { - // Skip this test when MySQL is configured as it hits the MySQL check first - if *th.App.Config().SqlSettings.DriverName == model.DatabaseDriverMysql { - t.Skip("Skipping test - MySQL does not support trial licenses") - } - // the JSON is invalid because it is missing a closing brace licenseManagerMock := &mocks.LicenseInterface{} @@ -458,11 +404,6 @@ func TestRequestTrialLicense(t *testing.T) { }) t.Run("trial license user count less than current users", func(t *testing.T) { - // Skip this test when MySQL is configured as it hits the MySQL check first - if *th.App.Config().SqlSettings.DriverName == model.DatabaseDriverMysql { - t.Skip("Skipping test - MySQL does not support trial licenses") - } - nUsers := 1 license := model.NewTestLicense() license.Features.Users = model.NewPointer(nUsers) @@ -498,11 +439,6 @@ func TestRequestTrialLicense(t *testing.T) { }) t.Run("returns status 451 when it receives status 451", func(t *testing.T) { - // Skip this test when MySQL is configured as it hits the MySQL check first - if *th.App.Config().SqlSettings.DriverName == model.DatabaseDriverMysql { - t.Skip("Skipping test - MySQL does not support trial licenses") - } - nUsers := 1 license := model.NewTestLicense() license.Features.Users = model.NewPointer(nUsers) @@ -535,11 +471,6 @@ func TestRequestTrialLicense(t *testing.T) { th.App.Srv().Platform().SetLicenseManager(nil) t.Run("trial license should fail if LicenseManager is nil", func(t *testing.T) { - // Skip this test when MySQL is configured as it hits the MySQL check first - if *th.App.Config().SqlSettings.DriverName == model.DatabaseDriverMysql { - t.Skip("Skipping test - MySQL does not support trial licenses") - } - resp, err := th.SystemAdminClient.RequestTrialLicense(context.Background(), 1) CheckErrorID(t, err, "api.license.upgrade_needed.app_error") CheckForbiddenStatus(t, resp) diff --git a/server/channels/api4/main_test.go b/server/channels/api4/main_test.go index f1b9aba5fef..27ef152d968 100644 --- a/server/channels/api4/main_test.go +++ b/server/channels/api4/main_test.go @@ -13,14 +13,7 @@ import ( "github.com/mattermost/mattermost/server/v8/channels/testlib" ) -var replicaFlag bool - func TestMain(m *testing.M) { - if f := flag.Lookup("mysql-replica"); f == nil { - flag.BoolVar(&replicaFlag, "mysql-replica", false, "") - flag.Parse() - } - var parallelism int if f := flag.Lookup("test.parallel"); f != nil { parallelism, _ = strconv.Atoi(f.Value.String()) @@ -33,7 +26,6 @@ func TestMain(m *testing.M) { options := testlib.HelperOptions{ EnableStore: true, EnableResources: true, - WithReadReplica: replicaFlag, RunParallel: runParallel, Parallelism: parallelism, } diff --git a/server/channels/api4/user_test.go b/server/channels/api4/user_test.go index 64087c91ff1..cec48ab5225 100644 --- a/server/channels/api4/user_test.go +++ b/server/channels/api4/user_test.go @@ -4455,49 +4455,6 @@ func TestLogin(t *testing.T) { }) } -func TestLoginWithLag(t *testing.T) { - th := Setup(t).InitBasic() - defer th.TearDown() - _, err := th.Client.Logout(context.Background()) - require.NoError(t, err) - - t.Run("with replication lag, caches cleared", func(t *testing.T) { - if !replicaFlag { - t.Skipf("requires test flag: -mysql-replica") - } - - if *th.App.Config().SqlSettings.DriverName != model.DatabaseDriverMysql { - t.Skipf("requires %q database driver", model.DatabaseDriverMysql) - } - - mainHelper.SQLStore.UpdateLicense(model.NewTestLicense("ldap")) - mainHelper.ToggleReplicasOff() - - appErr := th.App.RevokeAllSessions(th.Context, th.BasicUser.Id) - require.Nil(t, appErr) - - mainHelper.ToggleReplicasOn() - defer mainHelper.ToggleReplicasOff() - - cmdErr := mainHelper.SetReplicationLagForTesting(5) - require.NoError(t, cmdErr) - defer func() { - err = mainHelper.SetReplicationLagForTesting(0) - require.NoError(t, err) - }() - - _, _, err := th.Client.Login(context.Background(), th.BasicUser.Email, th.BasicUser.Password) - require.NoError(t, err) - - appErr = th.App.Srv().InvalidateAllCaches() - require.Nil(t, appErr) - - session, appErr := th.App.GetSession(th.Client.AuthToken) - require.Nil(t, appErr) - require.NotNil(t, session) - }) -} - func TestLoginCookies(t *testing.T) { mainHelper.Parallel(t) t.Run("should return cookies with X-Requested-With header", func(t *testing.T) { diff --git a/server/channels/app/email/main_test.go b/server/channels/app/email/main_test.go index 6bd4473ab2b..81cd7743df7 100644 --- a/server/channels/app/email/main_test.go +++ b/server/channels/app/email/main_test.go @@ -14,16 +14,10 @@ import ( ) var ( - mainHelper *testlib.MainHelper - replicaFlag bool + mainHelper *testlib.MainHelper ) func TestMain(m *testing.M) { - if f := flag.Lookup("mysql-replica"); f == nil { - flag.BoolVar(&replicaFlag, "mysql-replica", false, "") - flag.Parse() - } - var parallelism int if f := flag.Lookup("test.parallel"); f != nil { parallelism, _ = strconv.Atoi(f.Value.String()) @@ -36,7 +30,6 @@ func TestMain(m *testing.M) { options := testlib.HelperOptions{ EnableStore: true, EnableResources: true, - WithReadReplica: replicaFlag, RunParallel: runParallel, Parallelism: parallelism, } diff --git a/server/channels/app/main_test.go b/server/channels/app/main_test.go index 782d756e79b..dd8b081caa5 100644 --- a/server/channels/app/main_test.go +++ b/server/channels/app/main_test.go @@ -14,16 +14,10 @@ import ( ) var ( - mainHelper *testlib.MainHelper - replicaFlag bool + mainHelper *testlib.MainHelper ) func TestMain(m *testing.M) { - if f := flag.Lookup("mysql-replica"); f == nil { - flag.BoolVar(&replicaFlag, "mysql-replica", false, "") - flag.Parse() - } - var parallelism int if f := flag.Lookup("test.parallel"); f != nil { parallelism, _ = strconv.Atoi(f.Value.String()) @@ -36,7 +30,6 @@ func TestMain(m *testing.M) { options := testlib.HelperOptions{ EnableStore: true, EnableResources: true, - WithReadReplica: replicaFlag, RunParallel: runParallel, Parallelism: parallelism, } diff --git a/server/channels/app/platform/license.go b/server/channels/app/platform/license.go index f516eb35f6f..87bb48ad1e0 100644 --- a/server/channels/app/platform/license.go +++ b/server/channels/app/platform/license.go @@ -134,10 +134,6 @@ func (ps *PlatformService) SaveLicense(licenseBytes []byte) (*model.License, *mo return nil, model.NewAppError("addLicense", "api.license.add_license.invalid.app_error", nil, "", http.StatusBadRequest).Wrap(errors.New("license.Features.Users is nil")) } - if license.SkuShortName == model.LicenseShortSkuEnterpriseAdvanced && *ps.Config().SqlSettings.DriverName == model.DatabaseDriverMysql { - return nil, model.NewAppError("addLicense", "api.license.add_license.mysql.app_error", nil, "", http.StatusBadRequest).Wrap(errors.New("mysql is not supported for this license")) - } - uniqueUserCount, err := ps.Store.User().Count(model.UserCountOptions{}) if err != nil { return nil, model.NewAppError("addLicense", "api.license.add_license.invalid_count.app_error", nil, "", http.StatusBadRequest).Wrap(err) @@ -229,13 +225,6 @@ func (ps *PlatformService) SaveLicense(licenseBytes []byte) (*model.License, *mo } func (ps *PlatformService) SetLicense(license *model.License) bool { - if license != nil && license.SkuShortName == model.LicenseShortSkuEnterpriseAdvanced && *ps.Config().SqlSettings.DriverName == model.DatabaseDriverMysql { - if ps.logger != nil { - ps.logger.Error("MySQL is not supported for this license", mlog.String("sku_short_name", license.SkuShortName)) - } - return false - } - oldLicense := ps.licenseValue.Load() defer func() { diff --git a/server/channels/app/platform/license_test.go b/server/channels/app/platform/license_test.go index 907c513988a..231adeef40f 100644 --- a/server/channels/app/platform/license_test.go +++ b/server/channels/app/platform/license_test.go @@ -68,12 +68,7 @@ func TestSaveEnterpriseAdvancedLicense(t *testing.T) { _, appErr := th.Service.SaveLicense(licenseBytes) - if *th.Service.Config().SqlSettings.DriverName == model.DatabaseDriverMysql { - require.NotNil(t, appErr, "shouldn't have saved license") - require.Equal(t, "addLicense: api.license.add_license.mysql.app_error, mysql is not supported for this license", appErr.Error()) - } else { - require.Nil(t, appErr, "should have saved license") - } + require.Nil(t, appErr, "should have saved license") } func TestRemoveLicense(t *testing.T) { diff --git a/server/channels/app/platform/main_test.go b/server/channels/app/platform/main_test.go index 767dd25eb39..28b872d970f 100644 --- a/server/channels/app/platform/main_test.go +++ b/server/channels/app/platform/main_test.go @@ -14,16 +14,10 @@ import ( ) var ( - mainHelper *testlib.MainHelper - replicaFlag bool + mainHelper *testlib.MainHelper ) func TestMain(m *testing.M) { - if f := flag.Lookup("mysql-replica"); f == nil { - flag.BoolVar(&replicaFlag, "mysql-replica", false, "") - flag.Parse() - } - var parallelism int if f := flag.Lookup("test.parallel"); f != nil { parallelism, _ = strconv.Atoi(f.Value.String()) @@ -36,7 +30,6 @@ func TestMain(m *testing.M) { options := testlib.HelperOptions{ EnableStore: true, EnableResources: true, - WithReadReplica: replicaFlag, RunParallel: runParallel, Parallelism: parallelism, } diff --git a/server/channels/app/platform/service_test.go b/server/channels/app/platform/service_test.go index 59d2fce1a5a..76567725d0a 100644 --- a/server/channels/app/platform/service_test.go +++ b/server/channels/app/platform/service_test.go @@ -45,7 +45,7 @@ func TestSetLicenseOnStart(t *testing.T) { if driverName == "" { driverName = model.DatabaseDriverPostgres } - cfg.SqlSettings = *storetest.MakeSqlSettings(driverName, false) + cfg.SqlSettings = *storetest.MakeSqlSettings(driverName) configStore := config.NewTestMemoryStore() _, _, err = configStore.Set(&cfg) @@ -66,7 +66,7 @@ func TestReadReplicaDisabledBasedOnLicense(t *testing.T) { if driverName == "" { driverName = model.DatabaseDriverPostgres } - cfg.SqlSettings = *storetest.MakeSqlSettings(driverName, false) + cfg.SqlSettings = *storetest.MakeSqlSettings(driverName) cfg.SqlSettings.DataSourceReplicas = []string{*cfg.SqlSettings.DataSource} cfg.SqlSettings.DataSourceSearchReplicas = []string{*cfg.SqlSettings.DataSource} diff --git a/server/channels/app/post_test.go b/server/channels/app/post_test.go index 8dfc7d74d29..a3311b5e315 100644 --- a/server/channels/app/post_test.go +++ b/server/channels/app/post_test.go @@ -3237,48 +3237,6 @@ func TestCollapsedThreadFetch(t *testing.T) { }) } -func TestReplyToPostWithLag(t *testing.T) { - if !replicaFlag { - t.Skipf("requires test flag -mysql-replica") - } - - th := Setup(t).InitBasic() - defer th.TearDown() - - if *th.App.Config().SqlSettings.DriverName != model.DatabaseDriverMysql { - t.Skipf("requires %q database driver", model.DatabaseDriverMysql) - } - - mainHelper.SQLStore.UpdateLicense(model.NewTestLicense("somelicense")) - - t.Run("replication lag time great than reply time", func(t *testing.T) { - err := mainHelper.SetReplicationLagForTesting(5) - require.NoError(t, err) - defer func() { - err := mainHelper.SetReplicationLagForTesting(0) - require.NoError(t, err) - }() - mainHelper.ToggleReplicasOn() - defer mainHelper.ToggleReplicasOff() - - root, appErr := th.App.CreatePost(th.Context, &model.Post{ - UserId: th.BasicUser.Id, - ChannelId: th.BasicChannel.Id, - Message: "root post", - }, th.BasicChannel, model.CreatePostFlags{SetOnline: true}) - require.Nil(t, appErr) - - reply, appErr := th.App.CreatePost(th.Context, &model.Post{ - UserId: th.BasicUser2.Id, - ChannelId: th.BasicChannel.Id, - RootId: root.Id, - Message: fmt.Sprintf("@%s", th.BasicUser2.Username), - }, th.BasicChannel, model.CreatePostFlags{SetOnline: true}) - require.Nil(t, appErr) - require.NotNil(t, reply) - }) -} - func TestSharedChannelSyncForPostActions(t *testing.T) { mainHelper.Parallel(t) t.Run("creating a post in a shared channel performs a content sync when sync service is running on that node", func(t *testing.T) { diff --git a/server/channels/app/product_notices.go b/server/channels/app/product_notices.go index 26ef6aebc71..2c94e0d23db 100644 --- a/server/channels/app/product_notices.go +++ b/server/channels/app/product_notices.go @@ -127,7 +127,7 @@ func noticeMatchesConditions(config *model.Config, preferences store.PreferenceS } switch cnd.DeprecatingDependency.Name { - case model.DatabaseDriverMysql, model.DatabaseDriverPostgres: + case model.DatabaseDriverPostgres: if dbName != cnd.DeprecatingDependency.Name { return false, nil } diff --git a/server/channels/app/product_notices_test.go b/server/channels/app/product_notices_test.go index cb8eb7cdb9f..0340da6c609 100644 --- a/server/channels/app/product_notices_test.go +++ b/server/channels/app/product_notices_test.go @@ -472,42 +472,6 @@ func TestNoticeValidation(t *testing.T) { wantErr: false, wantOk: true, }, - { - name: "notice with deprecating an external dependency", - args: args{ - dbmsName: "mysql", - dbmsVer: "5.6", - notice: &model.ProductNotice{ - Conditions: model.Conditions{ - DeprecatingDependency: &model.ExternalDependency{ - Name: "mysql", - MinimumVersion: "5.7", - }, - }, - }, - }, - wantErr: false, - wantOk: true, - }, - { - name: "notice with deprecating an external dependency, on a future version", - args: args{ - dbmsName: "mysql", - dbmsVer: "5.6", - serverVersion: "5.32.1", - notice: &model.ProductNotice{ - Conditions: model.Conditions{ - ServerVersion: []string{">=v5.33"}, - DeprecatingDependency: &model.ExternalDependency{ - Name: "mysql", - MinimumVersion: "5.7", - }, - }, - }, - }, - wantErr: false, - wantOk: false, - }, { name: "notice on a deprecating dependency, server is all good", args: args{ @@ -525,23 +489,6 @@ func TestNoticeValidation(t *testing.T) { wantErr: false, wantOk: false, }, - { - name: "notice on a deprecating dependency, server has different dbms", - args: args{ - dbmsName: "mysql", - dbmsVer: "5.7", - notice: &model.ProductNotice{ - Conditions: model.Conditions{ - DeprecatingDependency: &model.ExternalDependency{ - Name: "postgres", - MinimumVersion: "10", - }, - }, - }, - }, - wantErr: false, - wantOk: false, - }, { name: "notice on deprecating elasticsearch, server has unsupported search engine", args: args{ diff --git a/server/channels/app/teams/main_test.go b/server/channels/app/teams/main_test.go index e0f77817165..4dd9e804510 100644 --- a/server/channels/app/teams/main_test.go +++ b/server/channels/app/teams/main_test.go @@ -4,25 +4,17 @@ package teams import ( - "flag" "testing" "github.com/mattermost/mattermost/server/v8/channels/testlib" ) var mainHelper *testlib.MainHelper -var replicaFlag bool func TestMain(m *testing.M) { - if f := flag.Lookup("mysql-replica"); f == nil { - flag.BoolVar(&replicaFlag, "mysql-replica", false, "") - flag.Parse() - } - var options = testlib.HelperOptions{ EnableStore: true, EnableResources: true, - WithReadReplica: replicaFlag, } mainHelper = testlib.NewMainHelperWithOptions(&options) diff --git a/server/channels/app/users/main_test.go b/server/channels/app/users/main_test.go index 66c7c70e035..a98408f771a 100644 --- a/server/channels/app/users/main_test.go +++ b/server/channels/app/users/main_test.go @@ -22,7 +22,6 @@ func TestMain(m *testing.M) { var options = testlib.HelperOptions{ EnableStore: true, EnableResources: true, - WithReadReplica: replicaFlag, } mainHelper = testlib.NewMainHelperWithOptions(&options) diff --git a/server/channels/db/migrations/migrations.list b/server/channels/db/migrations/migrations.list index 026d392d38f..7cceea8d257 100644 --- a/server/channels/db/migrations/migrations.list +++ b/server/channels/db/migrations/migrations.list @@ -1,284 +1,4 @@ # Autogenerated file to synchronize migrations sequence in the PR workflow, please do not edit. -channels/db/migrations/mysql/000001_create_teams.down.sql -channels/db/migrations/mysql/000001_create_teams.up.sql -channels/db/migrations/mysql/000002_create_team_members.down.sql -channels/db/migrations/mysql/000002_create_team_members.up.sql -channels/db/migrations/mysql/000003_create_cluster_discovery.down.sql -channels/db/migrations/mysql/000003_create_cluster_discovery.up.sql -channels/db/migrations/mysql/000004_create_command_webhooks.down.sql -channels/db/migrations/mysql/000004_create_command_webhooks.up.sql -channels/db/migrations/mysql/000005_create_compliances.down.sql -channels/db/migrations/mysql/000005_create_compliances.up.sql -channels/db/migrations/mysql/000006_create_emojis.down.sql -channels/db/migrations/mysql/000006_create_emojis.up.sql -channels/db/migrations/mysql/000007_create_user_groups.down.sql -channels/db/migrations/mysql/000007_create_user_groups.up.sql -channels/db/migrations/mysql/000008_create_group_members.down.sql -channels/db/migrations/mysql/000008_create_group_members.up.sql -channels/db/migrations/mysql/000009_create_group_teams.down.sql -channels/db/migrations/mysql/000009_create_group_teams.up.sql -channels/db/migrations/mysql/000010_create_group_channels.down.sql -channels/db/migrations/mysql/000010_create_group_channels.up.sql -channels/db/migrations/mysql/000011_create_link_metadata.down.sql -channels/db/migrations/mysql/000011_create_link_metadata.up.sql -channels/db/migrations/mysql/000012_create_commands.down.sql -channels/db/migrations/mysql/000012_create_commands.up.sql -channels/db/migrations/mysql/000013_create_incoming_webhooks.down.sql -channels/db/migrations/mysql/000013_create_incoming_webhooks.up.sql -channels/db/migrations/mysql/000014_create_outgoing_webhooks.down.sql -channels/db/migrations/mysql/000014_create_outgoing_webhooks.up.sql -channels/db/migrations/mysql/000015_create_systems.down.sql -channels/db/migrations/mysql/000015_create_systems.up.sql -channels/db/migrations/mysql/000016_create_reactions.down.sql -channels/db/migrations/mysql/000016_create_reactions.up.sql -channels/db/migrations/mysql/000017_create_roles.down.sql -channels/db/migrations/mysql/000017_create_roles.up.sql -channels/db/migrations/mysql/000018_create_schemes.down.sql -channels/db/migrations/mysql/000018_create_schemes.up.sql -channels/db/migrations/mysql/000019_create_licenses.down.sql -channels/db/migrations/mysql/000019_create_licenses.up.sql -channels/db/migrations/mysql/000020_create_posts.down.sql -channels/db/migrations/mysql/000020_create_posts.up.sql -channels/db/migrations/mysql/000021_create_product_notice_view_state.down.sql -channels/db/migrations/mysql/000021_create_product_notice_view_state.up.sql -channels/db/migrations/mysql/000022_create_sessions.down.sql -channels/db/migrations/mysql/000022_create_sessions.up.sql -channels/db/migrations/mysql/000023_create_terms_of_service.down.sql -channels/db/migrations/mysql/000023_create_terms_of_service.up.sql -channels/db/migrations/mysql/000024_create_audits.down.sql -channels/db/migrations/mysql/000024_create_audits.up.sql -channels/db/migrations/mysql/000025_create_oauth_access_data.down.sql -channels/db/migrations/mysql/000025_create_oauth_access_data.up.sql -channels/db/migrations/mysql/000026_create_preferences.down.sql -channels/db/migrations/mysql/000026_create_preferences.up.sql -channels/db/migrations/mysql/000027_create_status.down.sql -channels/db/migrations/mysql/000027_create_status.up.sql -channels/db/migrations/mysql/000028_create_tokens.down.sql -channels/db/migrations/mysql/000028_create_tokens.up.sql -channels/db/migrations/mysql/000029_create_bots.down.sql -channels/db/migrations/mysql/000029_create_bots.up.sql -channels/db/migrations/mysql/000030_create_user_access_tokens.down.sql -channels/db/migrations/mysql/000030_create_user_access_tokens.up.sql -channels/db/migrations/mysql/000031_create_remote_clusters.down.sql -channels/db/migrations/mysql/000031_create_remote_clusters.up.sql -channels/db/migrations/mysql/000032_create_sharedchannels.down.sql -channels/db/migrations/mysql/000032_create_sharedchannels.up.sql -channels/db/migrations/mysql/000033_create_sidebar_channels.down.sql -channels/db/migrations/mysql/000033_create_sidebar_channels.up.sql -channels/db/migrations/mysql/000034_create_oauthauthdata.down.sql -channels/db/migrations/mysql/000034_create_oauthauthdata.up.sql -channels/db/migrations/mysql/000035_create_sharedchannelattachments.down.sql -channels/db/migrations/mysql/000035_create_sharedchannelattachments.up.sql -channels/db/migrations/mysql/000036_create_sharedchannelusers.down.sql -channels/db/migrations/mysql/000036_create_sharedchannelusers.up.sql -channels/db/migrations/mysql/000037_create_sharedchannelremotes.down.sql -channels/db/migrations/mysql/000037_create_sharedchannelremotes.up.sql -channels/db/migrations/mysql/000038_create_jobs.down.sql -channels/db/migrations/mysql/000038_create_jobs.up.sql -channels/db/migrations/mysql/000039_create_channel_member_history.down.sql -channels/db/migrations/mysql/000039_create_channel_member_history.up.sql -channels/db/migrations/mysql/000040_create_sidebar_categories.down.sql -channels/db/migrations/mysql/000040_create_sidebar_categories.up.sql -channels/db/migrations/mysql/000041_create_upload_sessions.down.sql -channels/db/migrations/mysql/000041_create_upload_sessions.up.sql -channels/db/migrations/mysql/000042_create_threads.down.sql -channels/db/migrations/mysql/000042_create_threads.up.sql -channels/db/migrations/mysql/000043_thread_memberships.down.sql -channels/db/migrations/mysql/000043_thread_memberships.up.sql -channels/db/migrations/mysql/000044_create_user_terms_of_service.down.sql -channels/db/migrations/mysql/000044_create_user_terms_of_service.up.sql -channels/db/migrations/mysql/000045_create_plugin_key_value_store.down.sql -channels/db/migrations/mysql/000045_create_plugin_key_value_store.up.sql -channels/db/migrations/mysql/000046_create_users.down.sql -channels/db/migrations/mysql/000046_create_users.up.sql -channels/db/migrations/mysql/000047_create_file_info.down.sql -channels/db/migrations/mysql/000047_create_file_info.up.sql -channels/db/migrations/mysql/000048_create_oauth_apps.down.sql -channels/db/migrations/mysql/000048_create_oauth_apps.up.sql -channels/db/migrations/mysql/000049_create_channels.down.sql -channels/db/migrations/mysql/000049_create_channels.up.sql -channels/db/migrations/mysql/000050_create_channelmembers.down.sql -channels/db/migrations/mysql/000050_create_channelmembers.up.sql -channels/db/migrations/mysql/000051_create_msg_root_count.down.sql -channels/db/migrations/mysql/000051_create_msg_root_count.up.sql -channels/db/migrations/mysql/000052_create_public_channels.down.sql -channels/db/migrations/mysql/000052_create_public_channels.up.sql -channels/db/migrations/mysql/000053_create_retention_policies.down.sql -channels/db/migrations/mysql/000053_create_retention_policies.up.sql -channels/db/migrations/mysql/000054_create_crt_channelmembership_count.down.sql -channels/db/migrations/mysql/000054_create_crt_channelmembership_count.up.sql -channels/db/migrations/mysql/000055_create_crt_thread_count_and_unreads.down.sql -channels/db/migrations/mysql/000055_create_crt_thread_count_and_unreads.up.sql -channels/db/migrations/mysql/000056_upgrade_channels_v6.0.down.sql -channels/db/migrations/mysql/000056_upgrade_channels_v6.0.up.sql -channels/db/migrations/mysql/000057_upgrade_command_webhooks_v6.0.down.sql -channels/db/migrations/mysql/000057_upgrade_command_webhooks_v6.0.up.sql -channels/db/migrations/mysql/000058_upgrade_channelmembers_v6.0.down.sql -channels/db/migrations/mysql/000058_upgrade_channelmembers_v6.0.up.sql -channels/db/migrations/mysql/000059_upgrade_users_v6.0.down.sql -channels/db/migrations/mysql/000059_upgrade_users_v6.0.up.sql -channels/db/migrations/mysql/000060_upgrade_jobs_v6.0.down.sql -channels/db/migrations/mysql/000060_upgrade_jobs_v6.0.up.sql -channels/db/migrations/mysql/000061_upgrade_link_metadata_v6.0.down.sql -channels/db/migrations/mysql/000061_upgrade_link_metadata_v6.0.up.sql -channels/db/migrations/mysql/000062_upgrade_sessions_v6.0.down.sql -channels/db/migrations/mysql/000062_upgrade_sessions_v6.0.up.sql -channels/db/migrations/mysql/000063_upgrade_threads_v6.0.down.sql -channels/db/migrations/mysql/000063_upgrade_threads_v6.0.up.sql -channels/db/migrations/mysql/000064_upgrade_status_v6.0.down.sql -channels/db/migrations/mysql/000064_upgrade_status_v6.0.up.sql -channels/db/migrations/mysql/000065_upgrade_groupchannels_v6.0.down.sql -channels/db/migrations/mysql/000065_upgrade_groupchannels_v6.0.up.sql -channels/db/migrations/mysql/000066_upgrade_posts_v6.0.down.sql -channels/db/migrations/mysql/000066_upgrade_posts_v6.0.up.sql -channels/db/migrations/mysql/000067_upgrade_channelmembers_v6.1.down.sql -channels/db/migrations/mysql/000067_upgrade_channelmembers_v6.1.up.sql -channels/db/migrations/mysql/000068_upgrade_teammembers_v6.1.down.sql -channels/db/migrations/mysql/000068_upgrade_teammembers_v6.1.up.sql -channels/db/migrations/mysql/000069_upgrade_jobs_v6.1.down.sql -channels/db/migrations/mysql/000069_upgrade_jobs_v6.1.up.sql -channels/db/migrations/mysql/000070_upgrade_cte_v6.1.down.sql -channels/db/migrations/mysql/000070_upgrade_cte_v6.1.up.sql -channels/db/migrations/mysql/000071_upgrade_sessions_v6.1.down.sql -channels/db/migrations/mysql/000071_upgrade_sessions_v6.1.up.sql -channels/db/migrations/mysql/000072_upgrade_schemes_v6.3.down.sql -channels/db/migrations/mysql/000072_upgrade_schemes_v6.3.up.sql -channels/db/migrations/mysql/000073_upgrade_plugin_key_value_store_v6.3.down.sql -channels/db/migrations/mysql/000073_upgrade_plugin_key_value_store_v6.3.up.sql -channels/db/migrations/mysql/000074_upgrade_users_v6.3.down.sql -channels/db/migrations/mysql/000074_upgrade_users_v6.3.up.sql -channels/db/migrations/mysql/000075_alter_upload_sessions_index.down.sql -channels/db/migrations/mysql/000075_alter_upload_sessions_index.up.sql -channels/db/migrations/mysql/000076_upgrade_lastrootpostat.down.sql -channels/db/migrations/mysql/000076_upgrade_lastrootpostat.up.sql -channels/db/migrations/mysql/000077_upgrade_users_v6.5.down.sql -channels/db/migrations/mysql/000077_upgrade_users_v6.5.up.sql -channels/db/migrations/mysql/000078_create_oauth_mattermost_app_id.down.sql -channels/db/migrations/mysql/000078_create_oauth_mattermost_app_id.up.sql -channels/db/migrations/mysql/000079_usergroups_displayname_index.down.sql -channels/db/migrations/mysql/000079_usergroups_displayname_index.up.sql -channels/db/migrations/mysql/000080_posts_createat_id.down.sql -channels/db/migrations/mysql/000080_posts_createat_id.up.sql -channels/db/migrations/mysql/000081_threads_deleteat.down.sql -channels/db/migrations/mysql/000081_threads_deleteat.up.sql -channels/db/migrations/mysql/000082_upgrade_oauth_mattermost_app_id.down.sql -channels/db/migrations/mysql/000082_upgrade_oauth_mattermost_app_id.up.sql -channels/db/migrations/mysql/000083_threads_threaddeleteat.down.sql -channels/db/migrations/mysql/000083_threads_threaddeleteat.up.sql -channels/db/migrations/mysql/000084_recent_searches.down.sql -channels/db/migrations/mysql/000084_recent_searches.up.sql -channels/db/migrations/mysql/000085_fileinfo_add_archived_column.down.sql -channels/db/migrations/mysql/000085_fileinfo_add_archived_column.up.sql -channels/db/migrations/mysql/000086_add_cloud_limits_archived.down.sql -channels/db/migrations/mysql/000086_add_cloud_limits_archived.up.sql -channels/db/migrations/mysql/000087_sidebar_categories_index.down.sql -channels/db/migrations/mysql/000087_sidebar_categories_index.up.sql -channels/db/migrations/mysql/000088_remaining_migrations.down.sql -channels/db/migrations/mysql/000088_remaining_migrations.up.sql -channels/db/migrations/mysql/000089_add-channelid-to-reaction.down.sql -channels/db/migrations/mysql/000089_add-channelid-to-reaction.up.sql -channels/db/migrations/mysql/000090_create_enums.down.sql -channels/db/migrations/mysql/000090_create_enums.up.sql -channels/db/migrations/mysql/000091_create_post_reminder.down.sql -channels/db/migrations/mysql/000091_create_post_reminder.up.sql -channels/db/migrations/mysql/000092_add_createat_to_teammembers.down.sql -channels/db/migrations/mysql/000092_add_createat_to_teammembers.up.sql -channels/db/migrations/mysql/000093_notify_admin.down.sql -channels/db/migrations/mysql/000093_notify_admin.up.sql -channels/db/migrations/mysql/000094_threads_teamid.down.sql -channels/db/migrations/mysql/000094_threads_teamid.up.sql -channels/db/migrations/mysql/000095_remove_posts_parentid.down.sql -channels/db/migrations/mysql/000095_remove_posts_parentid.up.sql -channels/db/migrations/mysql/000096_threads_threadteamid.down.sql -channels/db/migrations/mysql/000096_threads_threadteamid.up.sql -channels/db/migrations/mysql/000097_create_posts_priority.down.sql -channels/db/migrations/mysql/000097_create_posts_priority.up.sql -channels/db/migrations/mysql/000098_create_post_acknowledgements.down.sql -channels/db/migrations/mysql/000098_create_post_acknowledgements.up.sql -channels/db/migrations/mysql/000099_create_drafts.down.sql -channels/db/migrations/mysql/000099_create_drafts.up.sql -channels/db/migrations/mysql/000100_add_draft_priority_column.down.sql -channels/db/migrations/mysql/000100_add_draft_priority_column.up.sql -channels/db/migrations/mysql/000101_create_true_up_review_history.down.sql -channels/db/migrations/mysql/000101_create_true_up_review_history.up.sql -channels/db/migrations/mysql/000102_posts_originalid_index.down.sql -channels/db/migrations/mysql/000102_posts_originalid_index.up.sql -channels/db/migrations/mysql/000103_add_sentat_to_notifyadmin.down.sql -channels/db/migrations/mysql/000103_add_sentat_to_notifyadmin.up.sql -channels/db/migrations/mysql/000104_upgrade_notifyadmin.down.sql -channels/db/migrations/mysql/000104_upgrade_notifyadmin.up.sql -channels/db/migrations/mysql/000105_remove_tokens.down.sql -channels/db/migrations/mysql/000105_remove_tokens.up.sql -channels/db/migrations/mysql/000106_fileinfo_channelid.down.sql -channels/db/migrations/mysql/000106_fileinfo_channelid.up.sql -channels/db/migrations/mysql/000107_threadmemberships_cleanup.down.sql -channels/db/migrations/mysql/000107_threadmemberships_cleanup.up.sql -channels/db/migrations/mysql/000108_remove_orphaned_oauth_preferences.down.sql -channels/db/migrations/mysql/000108_remove_orphaned_oauth_preferences.up.sql -channels/db/migrations/mysql/000109_create_persistent_notifications.down.sql -channels/db/migrations/mysql/000109_create_persistent_notifications.up.sql -channels/db/migrations/mysql/000111_update_vacuuming.down.sql -channels/db/migrations/mysql/000111_update_vacuuming.up.sql -channels/db/migrations/mysql/000112_rework_desktop_tokens.down.sql -channels/db/migrations/mysql/000112_rework_desktop_tokens.up.sql -channels/db/migrations/mysql/000113_create_retentionidsfordeletion_table.down.sql -channels/db/migrations/mysql/000113_create_retentionidsfordeletion_table.up.sql -channels/db/migrations/mysql/000114_sharedchannelremotes_drop_nextsyncat_description.down.sql -channels/db/migrations/mysql/000114_sharedchannelremotes_drop_nextsyncat_description.up.sql -channels/db/migrations/mysql/000115_user_reporting_changes.down.sql -channels/db/migrations/mysql/000115_user_reporting_changes.up.sql -channels/db/migrations/mysql/000116_create_outgoing_oauth_connections.down.sql -channels/db/migrations/mysql/000116_create_outgoing_oauth_connections.up.sql -channels/db/migrations/mysql/000117_msteams_shared_channels.down.sql -channels/db/migrations/mysql/000117_msteams_shared_channels.up.sql -channels/db/migrations/mysql/000118_create_index_poststats.down.sql -channels/db/migrations/mysql/000118_create_index_poststats.up.sql -channels/db/migrations/mysql/000119_msteams_shared_channels_opts.down.sql -channels/db/migrations/mysql/000119_msteams_shared_channels_opts.up.sql -channels/db/migrations/mysql/000120_create_channelbookmarks_table.down.sql -channels/db/migrations/mysql/000120_create_channelbookmarks_table.up.sql -channels/db/migrations/mysql/000121_remove_true_up_review_history.down.sql -channels/db/migrations/mysql/000121_remove_true_up_review_history.up.sql -channels/db/migrations/mysql/000122_preferences_value_length.down.sql -channels/db/migrations/mysql/000122_preferences_value_length.up.sql -channels/db/migrations/mysql/000123_remove_upload_file_permission.down.sql -channels/db/migrations/mysql/000123_remove_upload_file_permission.up.sql -channels/db/migrations/mysql/000124_remove_manage_team_permission.down.sql -channels/db/migrations/mysql/000124_remove_manage_team_permission.up.sql -channels/db/migrations/mysql/000125_remoteclusters_add_default_team_id.down.sql -channels/db/migrations/mysql/000125_remoteclusters_add_default_team_id.up.sql -channels/db/migrations/mysql/000126_sharedchannels_remotes_add_deleteat.down.sql -channels/db/migrations/mysql/000126_sharedchannels_remotes_add_deleteat.up.sql -channels/db/migrations/mysql/000127_add_mfa_used_ts_to_users.down.sql -channels/db/migrations/mysql/000127_add_mfa_used_ts_to_users.up.sql -channels/db/migrations/mysql/000128_create_scheduled_posts.down.sql -channels/db/migrations/mysql/000128_create_scheduled_posts.up.sql -channels/db/migrations/mysql/000129_add_property_system_architecture.down.sql -channels/db/migrations/mysql/000129_add_property_system_architecture.up.sql -channels/db/migrations/mysql/000130_system_console_stats.down.sql -channels/db/migrations/mysql/000130_system_console_stats.up.sql -channels/db/migrations/mysql/000131_create_index_pagination_on_property_values.down.sql -channels/db/migrations/mysql/000131_create_index_pagination_on_property_values.up.sql -channels/db/migrations/mysql/000132_create_index_pagination_on_property_fields.down.sql -channels/db/migrations/mysql/000132_create_index_pagination_on_property_fields.up.sql -channels/db/migrations/mysql/000133_add_channel_banner_fields.down.sql -channels/db/migrations/mysql/000133_add_channel_banner_fields.up.sql -channels/db/migrations/mysql/000134_create_access_control_policies.down.sql -channels/db/migrations/mysql/000134_create_access_control_policies.up.sql -channels/db/migrations/mysql/000135_sidebarchannels_categoryid.down.sql -channels/db/migrations/mysql/000135_sidebarchannels_categoryid.up.sql -channels/db/migrations/mysql/000136_create_attribute_view.down.sql -channels/db/migrations/mysql/000136_create_attribute_view.up.sql -channels/db/migrations/mysql/000137_update_attribute_view.down.sql -channels/db/migrations/mysql/000137_update_attribute_view.up.sql -channels/db/migrations/mysql/000138_add_default_category_name_to_channel.down.sql -channels/db/migrations/mysql/000138_add_default_category_name_to_channel.up.sql -channels/db/migrations/mysql/000139_remoteclusters_add_last_global_user_sync_at.down.sql -channels/db/migrations/mysql/000139_remoteclusters_add_last_global_user_sync_at.up.sql -channels/db/migrations/mysql/000140_add_lastmemberssyncat_to_sharedchannelremotes.down.sql -channels/db/migrations/mysql/000140_add_lastmemberssyncat_to_sharedchannelremotes.up.sql -channels/db/migrations/mysql/000141_add_remoteid_channelid_to_post_acknowledgements.down.sql -channels/db/migrations/mysql/000141_add_remoteid_channelid_to_post_acknowledgements.up.sql channels/db/migrations/postgres/000001_create_teams.down.sql channels/db/migrations/postgres/000001_create_teams.up.sql channels/db/migrations/postgres/000002_create_team_members.down.sql diff --git a/server/channels/db/migrations/mysql/000001_create_teams.down.sql b/server/channels/db/migrations/mysql/000001_create_teams.down.sql deleted file mode 100644 index ae2b773a47b..00000000000 --- a/server/channels/db/migrations/mysql/000001_create_teams.down.sql +++ /dev/null @@ -1,76 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND index_name = 'idx_teams_name' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_teams_name ON Teams(Name);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'AllowOpenInvite' - ) > 0, - 'ALTER TABLE Teams DROP COLUMN AllowOpenInvite;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'LastTeamIconUpdate' - ) > 0, - 'ALTER TABLE Teams DROP COLUMN LastTeamIconUpdate;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'Description' - ) > 0, - 'ALTER TABLE Teams DROP COLUMN Description;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'GroupConstrained' - ) > 0, - 'ALTER TABLE Teams DROP COLUMN GroupConstrained;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -DROP TABLE IF EXISTS Teams; diff --git a/server/channels/db/migrations/mysql/000001_create_teams.up.sql b/server/channels/db/migrations/mysql/000001_create_teams.up.sql deleted file mode 100644 index 26d877577f5..00000000000 --- a/server/channels/db/migrations/mysql/000001_create_teams.up.sql +++ /dev/null @@ -1,177 +0,0 @@ -CREATE TABLE IF NOT EXISTS Teams ( - Id varchar(26) NOT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - DisplayName varchar(64) DEFAULT NULL, - Name varchar(64) DEFAULT NULL, - Description varchar(255) DEFAULT NULL, - Email varchar(128) DEFAULT NULL, - Type varchar(255) DEFAULT NULL, - CompanyName varchar(64) DEFAULT NULL, - AllowedDomains text, - InviteId varchar(32) DEFAULT NULL, - SchemeId varchar(26) DEFAULT NULL, - PRIMARY KEY (Id), - UNIQUE KEY Name (Name), - KEY idx_teams_invite_id (InviteId), - KEY idx_teams_update_at (UpdateAt), - KEY idx_teams_create_at (CreateAt), - KEY idx_teams_delete_at (DeleteAt), - KEY idx_teams_scheme_id (SchemeId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'AllowOpenInvite' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Teams ADD AllowOpenInvite bool;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'LastTeamIconUpdate' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Teams ADD LastTeamIconUpdate bigint;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'Description' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Teams ADD Description varchar(255);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'GroupConstrained' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Teams ADD GroupConstrained tinyint(1);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND index_name = 'idx_teams_name' - ) > 0, - 'DROP INDEX idx_teams_name ON Teams;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'AllowedDomains' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE Teams MODIFY COLUMN AllowedDomains text;', - 'SELECT 1' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'GroupConstrained' - AND column_type != 'tinyint(1)' - ) > 0, - 'ALTER TABLE Teams MODIFY COLUMN GroupConstrained tinyint(1);', - 'SELECT 1' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND index_name = 'idx_teams_scheme_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_teams_scheme_id ON Teams(SchemeId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'Type' - AND column_type != 'varchar(255)' - ) > 0, - 'ALTER TABLE Teams MODIFY COLUMN Type varchar(255);', - 'SELECT 1' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'SchemeId' - AND column_type != 'varchar(26)' - ) > 0, - 'ALTER TABLE Teams MODIFY COLUMN SchemeId varchar(26);', - 'SELECT 1' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; diff --git a/server/channels/db/migrations/mysql/000002_create_team_members.down.sql b/server/channels/db/migrations/mysql/000002_create_team_members.down.sql deleted file mode 100644 index 9c33538f419..00000000000 --- a/server/channels/db/migrations/mysql/000002_create_team_members.down.sql +++ /dev/null @@ -1,76 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_teammembers_team_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_teammembers_team_id ON TeamMembers(TeamId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND column_name = 'SchemeUser' - ) > 0, - 'ALTER TABLE TeamMembers DROP COLUMN SchemeUser;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND column_name = 'SchemeAdmin' - ) > 0, - 'ALTER TABLE TeamMembers DROP COLUMN SchemeAdmin;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND column_name = 'SchemeGuest' - ) > 0, - 'ALTER TABLE TeamMembers DROP COLUMN SchemeGuest;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND column_name = 'DeleteAt' - ) > 0, - 'ALTER TABLE TeamMembers DROP COLUMN DeleteAt;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -DROP TABLE IF EXISTS TeamMembers; diff --git a/server/channels/db/migrations/mysql/000002_create_team_members.up.sql b/server/channels/db/migrations/mysql/000002_create_team_members.up.sql deleted file mode 100644 index bc0c70e4f18..00000000000 --- a/server/channels/db/migrations/mysql/000002_create_team_members.up.sql +++ /dev/null @@ -1,85 +0,0 @@ -CREATE TABLE IF NOT EXISTS TeamMembers ( - TeamId varchar(26) NOT NULL, - UserId varchar(26) NOT NULL, - Roles varchar(64), - DeleteAt bigint(20), - PRIMARY KEY (TeamId, UserId), - KEY idx_teammembers_user_id (UserId), - KEY idx_teammembers_delete_at (DeleteAt) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND column_name = 'SchemeUser' - ) > 0, - 'SELECT 1', - 'ALTER TABLE TeamMembers ADD SchemeUser tinyint(4);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND column_name = 'SchemeAdmin' - ) > 0, - 'SELECT 1', - 'ALTER TABLE TeamMembers ADD SchemeAdmin tinyint(4);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND column_name = 'SchemeGuest' - ) > 0, - 'SELECT 1', - 'ALTER TABLE TeamMembers ADD SchemeGuest tinyint(4);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND column_name = 'DeleteAt' - ) > 0, - 'SELECT 1', - 'ALTER TABLE TeamMembers ADD DeleteAt bigint(20);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_teammembers_team_id' - ) > 0, - 'DROP INDEX idx_teammembers_team_id ON TeamMembers;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000003_create_cluster_discovery.down.sql b/server/channels/db/migrations/mysql/000003_create_cluster_discovery.down.sql deleted file mode 100644 index 4ce3df9493c..00000000000 --- a/server/channels/db/migrations/mysql/000003_create_cluster_discovery.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS ClusterDiscovery; diff --git a/server/channels/db/migrations/mysql/000003_create_cluster_discovery.up.sql b/server/channels/db/migrations/mysql/000003_create_cluster_discovery.up.sql deleted file mode 100644 index 09d1ffc3e22..00000000000 --- a/server/channels/db/migrations/mysql/000003_create_cluster_discovery.up.sql +++ /dev/null @@ -1,11 +0,0 @@ -CREATE TABLE IF NOT EXISTS ClusterDiscovery ( - Id varchar(26) NOT NULL, - Type varchar(64) DEFAULT NULL, - ClusterName varchar(64) DEFAULT NULL, - Hostname text, - GossipPort int(11) DEFAULT NULL, - Port integer DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - LastPingAt bigint(20) DEFAULT NULL, - PRIMARY KEY (Id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000004_create_command_webhooks.down.sql b/server/channels/db/migrations/mysql/000004_create_command_webhooks.down.sql deleted file mode 100644 index 91875b79ff7..00000000000 --- a/server/channels/db/migrations/mysql/000004_create_command_webhooks.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS CommandWebhooks; diff --git a/server/channels/db/migrations/mysql/000004_create_command_webhooks.up.sql b/server/channels/db/migrations/mysql/000004_create_command_webhooks.up.sql deleted file mode 100644 index 8a759492b54..00000000000 --- a/server/channels/db/migrations/mysql/000004_create_command_webhooks.up.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE IF NOT EXISTS CommandWebhooks ( - Id varchar(26) NOT NULL, - CreateAt bigint(20) DEFAULT NULL, - CommandId varchar(26) DEFAULT NULL, - UserId varchar(26) DEFAULT NULL, - ChannelId varchar(26) DEFAULT NULL, - RootId varchar(26) DEFAULT NULL, - ParentId varchar(26) DEFAULT NULL, - UseCount integer DEFAULT NULL, - PRIMARY KEY (Id), - KEY idx_command_webhook_create_at (CreateAt) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000005_create_compliances.down.sql b/server/channels/db/migrations/mysql/000005_create_compliances.down.sql deleted file mode 100644 index a6c11620d16..00000000000 --- a/server/channels/db/migrations/mysql/000005_create_compliances.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS Compliances; diff --git a/server/channels/db/migrations/mysql/000005_create_compliances.up.sql b/server/channels/db/migrations/mysql/000005_create_compliances.up.sql deleted file mode 100644 index cbc2adda346..00000000000 --- a/server/channels/db/migrations/mysql/000005_create_compliances.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE IF NOT EXISTS Compliances ( - Id varchar(26) NOT NULL, - CreateAt bigint(20), - UserId varchar(26) DEFAULT NULL, - Status varchar(64) DEFAULT NULL, - Count integer DEFAULT NULL, - `Desc` text, - Type varchar(64) DEFAULT NULL, - StartAt bigint(20), - EndAt bigint(20), - Keywords text, - Emails text, - PRIMARY KEY (Id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000006_create_emojis.down.sql b/server/channels/db/migrations/mysql/000006_create_emojis.down.sql deleted file mode 100644 index 378c0ef31f3..00000000000 --- a/server/channels/db/migrations/mysql/000006_create_emojis.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Emoji' - AND table_schema = DATABASE() - AND index_name = 'idx_emoji_name' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_emoji_name ON Emoji(Name);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -DROP TABLE IF EXISTS Emoji; diff --git a/server/channels/db/migrations/mysql/000006_create_emojis.up.sql b/server/channels/db/migrations/mysql/000006_create_emojis.up.sql deleted file mode 100644 index 93514efd17c..00000000000 --- a/server/channels/db/migrations/mysql/000006_create_emojis.up.sql +++ /dev/null @@ -1,73 +0,0 @@ -CREATE TABLE IF NOT EXISTS Emoji ( - Id varchar(26) NOT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - CreatorId varchar(26) DEFAULT NULL, - Name varchar(64) DEFAULT NULL, - PRIMARY KEY (Id), - UNIQUE KEY (Name, DeleteAt), - KEY idx_emoji_update_at (UpdateAt), - KEY idx_emoji_create_at (CreateAt), - KEY idx_emoji_delete_at (DeleteAt) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.statistics - WHERE table_name = 'Emoji' - AND table_schema = DATABASE() - AND index_name = 'idx_emoji_create_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX ON Emoji(CreateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.statistics - WHERE table_name = 'Emoji' - AND table_schema = DATABASE() - AND index_name = 'idx_emoji_delete_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX ON Emoji(DeleteAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.statistics - WHERE table_name = 'Emoji' - AND table_schema = DATABASE() - AND index_name = 'idx_emoji_update_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX ON Emoji(UpdateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Emoji' - AND table_schema = DATABASE() - AND index_name = 'idx_emoji_name' - ) > 0, - 'DROP INDEX idx_emoji_name ON Emoji;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000007_create_user_groups.down.sql b/server/channels/db/migrations/mysql/000007_create_user_groups.down.sql deleted file mode 100644 index 2e45ec1c568..00000000000 --- a/server/channels/db/migrations/mysql/000007_create_user_groups.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS UserGroups; diff --git a/server/channels/db/migrations/mysql/000007_create_user_groups.up.sql b/server/channels/db/migrations/mysql/000007_create_user_groups.up.sql deleted file mode 100644 index e563504ba65..00000000000 --- a/server/channels/db/migrations/mysql/000007_create_user_groups.up.sql +++ /dev/null @@ -1,62 +0,0 @@ -CREATE TABLE IF NOT EXISTS UserGroups ( - Id varchar(26) NOT NULL, - Name varchar(64) DEFAULT NULL, - DisplayName varchar(128) DEFAULT NULL, - Description text, - Source varchar(64) DEFAULT NULL, - RemoteId varchar(48) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - AllowReference tinyint(1) DEFAULT NULL, - PRIMARY KEY (Id), - UNIQUE KEY Name (Name), - UNIQUE KEY Source (Source, RemoteId), - KEY idx_usergroups_remote_id (RemoteId), - KEY idx_usergroups_delete_at (DeleteAt) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'UserGroups' - AND table_schema = DATABASE() - AND column_name = 'AllowReference' - ) > 0, - 'SELECT 1', - 'ALTER TABLE UserGroups ADD AllowReference tinyint(1) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'UserGroups' - AND table_schema = DATABASE() - AND index_name = 'idx_usergroups_remote_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_usergroups_remote_id ON UserGroups(RemoteId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'UserGroups' - AND table_schema = DATABASE() - AND index_name = 'idx_usergroups_delete_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_usergroups_delete_at ON UserGroups(DeleteAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000008_create_group_members.down.sql b/server/channels/db/migrations/mysql/000008_create_group_members.down.sql deleted file mode 100644 index 0f9467e8891..00000000000 --- a/server/channels/db/migrations/mysql/000008_create_group_members.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS GroupMembers; diff --git a/server/channels/db/migrations/mysql/000008_create_group_members.up.sql b/server/channels/db/migrations/mysql/000008_create_group_members.up.sql deleted file mode 100644 index 6f0889cb8dc..00000000000 --- a/server/channels/db/migrations/mysql/000008_create_group_members.up.sql +++ /dev/null @@ -1,23 +0,0 @@ -CREATE TABLE IF NOT EXISTS GroupMembers ( - GroupId varchar(26) NOT NULL, - UserId varchar(26) NOT NULL, - CreateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - PRIMARY KEY (GroupId, UserId), - KEY idx_groupmembers_create_at (CreateAt) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'GroupMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_groupmembers_create_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_groupmembers_create_at ON GroupMembers(CreateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000009_create_group_teams.down.sql b/server/channels/db/migrations/mysql/000009_create_group_teams.down.sql deleted file mode 100644 index f3dbd67292f..00000000000 --- a/server/channels/db/migrations/mysql/000009_create_group_teams.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS GroupTeams; diff --git a/server/channels/db/migrations/mysql/000009_create_group_teams.up.sql b/server/channels/db/migrations/mysql/000009_create_group_teams.up.sql deleted file mode 100644 index 211b8e1ae67..00000000000 --- a/server/channels/db/migrations/mysql/000009_create_group_teams.up.sql +++ /dev/null @@ -1,55 +0,0 @@ -CREATE TABLE IF NOT EXISTS GroupTeams ( - GroupId varchar(26) NOT NULL, - AutoAdd tinyint(1), - SchemeAdmin tinyint(1) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - TeamId varchar(26) NOT NULL, - PRIMARY KEY (GroupId, TeamId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'GroupTeams' - AND table_schema = DATABASE() - AND column_name = 'SchemeAdmin' - ) > 0, - 'SELECT 1', - 'ALTER TABLE GroupTeams ADD COLUMN SchemeAdmin tinyint(1) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'GroupTeams' - AND table_schema = DATABASE() - AND index_name = 'idx_groupteams_schemeadmin' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_groupteams_schemeadmin ON GroupTeams(SchemeAdmin);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'GroupTeams' - AND table_schema = DATABASE() - AND index_name = 'idx_groupteams_teamid' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_groupteams_teamid ON GroupTeams(TeamId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000010_create_group_channels.down.sql b/server/channels/db/migrations/mysql/000010_create_group_channels.down.sql deleted file mode 100644 index 8f3be28313c..00000000000 --- a/server/channels/db/migrations/mysql/000010_create_group_channels.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS GroupChannels; diff --git a/server/channels/db/migrations/mysql/000010_create_group_channels.up.sql b/server/channels/db/migrations/mysql/000010_create_group_channels.up.sql deleted file mode 100644 index f75a96aa94e..00000000000 --- a/server/channels/db/migrations/mysql/000010_create_group_channels.up.sql +++ /dev/null @@ -1,57 +0,0 @@ -CREATE TABLE IF NOT EXISTS GroupChannels ( - GroupId varchar(26) NOT NULL, - AutoAdd tinyint(1), - SchemeAdmin tinyint(1) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - ChannelId varchar(26) NOT NULL, - PRIMARY KEY (GroupId, ChannelId), - KEY idx_groupchannels_schemeadmin (SchemeAdmin), - KEY idx_groupchannels_channelid (ChannelId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'GroupChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_groupchannels_channelid' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_groupchannels_channelid ON GroupChannels (ChannelId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'GroupChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_groupchannels_schemeadmin' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_groupchannels_schemeadmin ON GroupChannels(SchemeAdmin);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'GroupChannels' - AND table_schema = DATABASE() - AND column_name = 'SchemeAdmin' - ) > 0, - 'SELECT 1', - 'ALTER TABLE GroupChannels ADD COLUMN SchemeAdmin tinyint(1);' -)); - -PREPARE createColumnIfNotExists FROM @preparedStatement; -EXECUTE createColumnIfNotExists; -DEALLOCATE PREPARE createColumnIfNotExists; diff --git a/server/channels/db/migrations/mysql/000011_create_link_metadata.down.sql b/server/channels/db/migrations/mysql/000011_create_link_metadata.down.sql deleted file mode 100644 index d9051f546d9..00000000000 --- a/server/channels/db/migrations/mysql/000011_create_link_metadata.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS LinkMetadata; diff --git a/server/channels/db/migrations/mysql/000011_create_link_metadata.up.sql b/server/channels/db/migrations/mysql/000011_create_link_metadata.up.sql deleted file mode 100644 index fcb4ef83d57..00000000000 --- a/server/channels/db/migrations/mysql/000011_create_link_metadata.up.sql +++ /dev/null @@ -1,9 +0,0 @@ -CREATE TABLE IF NOT EXISTS LinkMetadata ( - Hash bigint(20) NOT NULL, - URL text, - Timestamp bigint(20) DEFAULT NULL, - Type varchar(16) DEFAULT NULL, - Data text, - PRIMARY KEY (Hash), - KEY idx_link_metadata_url_timestamp (URL(512),Timestamp) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000012_create_commands.down.sql b/server/channels/db/migrations/mysql/000012_create_commands.down.sql deleted file mode 100644 index 0b01ccfa80a..00000000000 --- a/server/channels/db/migrations/mysql/000012_create_commands.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Commands' - AND table_schema = DATABASE() - AND column_name = 'PluginId' - ) > 0, - 'ALTER TABLE Commands DROP COLUMN PluginId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -DROP TABLE IF EXISTS Commands; diff --git a/server/channels/db/migrations/mysql/000012_create_commands.up.sql b/server/channels/db/migrations/mysql/000012_create_commands.up.sql deleted file mode 100644 index 0e5928a707f..00000000000 --- a/server/channels/db/migrations/mysql/000012_create_commands.up.sql +++ /dev/null @@ -1,65 +0,0 @@ -CREATE TABLE IF NOT EXISTS Commands ( - Id varchar(26) NOT NULL, - Token varchar(26) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - CreatorId varchar(26) DEFAULT NULL, - TeamId varchar(26) DEFAULT NULL, - `Trigger` varchar(128) DEFAULT NULL, - Method varchar(1) DEFAULT NULL, - Username varchar(64) DEFAULT NULL, - IconURL text, - AutoComplete tinyint(1) DEFAULT NULL, - AutoCompleteDesc text, - AutoCompleteHint text, - DisplayName varchar(64) DEFAULT NULL, - Description varchar(128) DEFAULT NULL, - URL text, - PRIMARY KEY (Id), - KEY idx_command_team_id (TeamId), - KEY idx_command_update_at (UpdateAt), - KEY idx_command_create_at (CreateAt), - KEY idx_command_delete_at (DeleteAt) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Commands' - AND table_schema = DATABASE() - AND column_name = 'PluginId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Commands ADD PluginId varchar(190);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -CREATE PROCEDURE Migrate_If_Version_Below_5280 () -BEGIN -DECLARE - CURRENT_DB_VERSION TEXT; -DECLARE - SYSTEMS_TABLE_EXISTS INT; - SELECT COUNT(*) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE - TABLE_NAME = 'Systems' - AND table_schema = DATABASE() INTO SYSTEMS_TABLE_EXISTS; - IF (SYSTEMS_TABLE_EXISTS > 0) THEN - SELECT - Value - FROM - Systems - WHERE - Name = 'Version' INTO CURRENT_DB_VERSION; - IF(INET_ATON(CURRENT_DB_VERSION) < INET_ATON('5.28.0')) THEN - UPDATE Commands SET PluginId = '' WHERE PluginId IS NULL; - END IF; - END IF; -END; - CALL Migrate_If_Version_Below_5280 (); - DROP PROCEDURE IF EXISTS Migrate_If_Version_Below_5280; diff --git a/server/channels/db/migrations/mysql/000013_create_incoming_webhooks.down.sql b/server/channels/db/migrations/mysql/000013_create_incoming_webhooks.down.sql deleted file mode 100644 index b2dcd417aa8..00000000000 --- a/server/channels/db/migrations/mysql/000013_create_incoming_webhooks.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS IncomingWebhooks; diff --git a/server/channels/db/migrations/mysql/000013_create_incoming_webhooks.up.sql b/server/channels/db/migrations/mysql/000013_create_incoming_webhooks.up.sql deleted file mode 100644 index cac6baa78ab..00000000000 --- a/server/channels/db/migrations/mysql/000013_create_incoming_webhooks.up.sql +++ /dev/null @@ -1,192 +0,0 @@ -CREATE TABLE IF NOT EXISTS IncomingWebhooks ( - Id varchar(26) NOT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - UserId varchar(26) DEFAULT NULL, - ChannelId varchar(26) DEFAULT NULL, - TeamId varchar(26) DEFAULT NULL, - DisplayName varchar(64) DEFAULT NULL, - Description varchar(128) DEFAULT NULL, - Username varchar(64) DEFAULT NULL, - PRIMARY KEY(Id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'IncomingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'Username' - ) > 0, - 'ALTER TABLE IncomingWebhooks MODIFY Username VARCHAR(255);', - 'SELECT 1' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'IncomingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'IconURL' - ) > 0, - 'SELECT 1', - 'ALTER TABLE IncomingWebhooks ADD IconURL text;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'IncomingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'ChannelLocked' - ) > 0, - 'SELECT 1', - 'ALTER TABLE IncomingWebhooks ADD ChannelLocked tinyint(1) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'IncomingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'Description' - ) > 0, - 'ALTER TABLE IncomingWebhooks MODIFY Description TEXT;', - 'SELECT 1' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'IncomingWebhooks' - AND table_schema = DATABASE() - AND index_name = 'idx_incoming_webhook_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_incoming_webhook_user_id ON IncomingWebhooks (UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'IncomingWebhooks' - AND table_schema = DATABASE() - AND index_name = 'idx_incoming_webhook_team_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_incoming_webhook_team_id ON IncomingWebhooks (TeamId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'IncomingWebhooks' - AND table_schema = DATABASE() - AND index_name = 'idx_incoming_webhook_update_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_incoming_webhook_update_at ON IncomingWebhooks (UpdateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'IncomingWebhooks' - AND table_schema = DATABASE() - AND index_name = 'idx_incoming_webhook_create_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_incoming_webhook_create_at ON IncomingWebhooks (CreateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'IncomingWebhooks' - AND table_schema = DATABASE() - AND index_name = 'idx_incoming_webhook_delete_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_incoming_webhook_delete_at ON IncomingWebhooks (DeleteAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -CREATE PROCEDURE CheckColumnMaxLength( - in columnName varchar(45), - in threshold int ) -BEGIN - DECLARE C INT; - - SELECT COALESCE( - SUM( - CASE - WHEN CHAR_LENGTH(columnName) > threshold THEN 1 - ELSE 0 - END - ), - 0) INTO C - FROM IncomingWebhooks; - - IF(C > 0) THEN - SET @messageText = CONCAT('IncomingWebhooks column ', columnName, ' has data larger that ', threshold, ' characters'); - SIGNAL SQLSTATE '45000' - SET MESSAGE_TEXT = @messageText; - END IF; -END; - -CALL CheckColumnMaxLength('Username', 255); -CALL CheckColumnMaxLength('IconURL', 1024); - -DROP PROCEDURE IF EXISTS CheckColumnMaxLength; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'IncomingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'Description' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE IncomingWebhooks MODIFY COLUMN Description text;', - 'SELECT 1' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; diff --git a/server/channels/db/migrations/mysql/000014_create_outgoing_webhooks.down.sql b/server/channels/db/migrations/mysql/000014_create_outgoing_webhooks.down.sql deleted file mode 100644 index 9731466ce6f..00000000000 --- a/server/channels/db/migrations/mysql/000014_create_outgoing_webhooks.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS OutgoingWebhooks; diff --git a/server/channels/db/migrations/mysql/000014_create_outgoing_webhooks.up.sql b/server/channels/db/migrations/mysql/000014_create_outgoing_webhooks.up.sql deleted file mode 100644 index b31ecc34d91..00000000000 --- a/server/channels/db/migrations/mysql/000014_create_outgoing_webhooks.up.sql +++ /dev/null @@ -1,197 +0,0 @@ -CREATE TABLE IF NOT EXISTS OutgoingWebhooks ( - Id varchar(26) NOT NULL, - Token varchar(26) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - CreatorId varchar(26) DEFAULT NULL, - ChannelId varchar(26) DEFAULT NULL, - TeamId varchar(26) DEFAULT NULL, - TriggerWords text, - CallbackURLs text, - DisplayName varchar(64) DEFAULT NULL, - PRIMARY KEY(Id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OutgoingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'ContentType' - ) > 0, - 'SELECT 1', - 'ALTER TABLE OutgoingWebhooks ADD ContentType VARCHAR(128);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OutgoingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'TriggerWhen' - ) > 0, - 'SELECT 1', - 'ALTER TABLE OutgoingWebhooks ADD TriggerWhen int(11) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OutgoingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'Username' - ) > 0, - 'SELECT 1', - 'ALTER TABLE OutgoingWebhooks ADD Username VARCHAR(64) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OutgoingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'IconURL' - ) > 0, - 'SELECT 1', - 'ALTER TABLE OutgoingWebhooks ADD IconURL text;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OutgoingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'Description' - ) > 0, - 'SELECT 1', - 'ALTER TABLE OutgoingWebhooks ADD Description text;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'OutgoingWebhooks' - AND table_schema = DATABASE() - AND index_name = 'idx_outgoing_webhook_team_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_outgoing_webhook_team_id ON OutgoingWebhooks (TeamId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'OutgoingWebhooks' - AND table_schema = DATABASE() - AND index_name = 'idx_outgoing_webhook_update_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_outgoing_webhook_update_at ON OutgoingWebhooks (UpdateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'OutgoingWebhooks' - AND table_schema = DATABASE() - AND index_name = 'idx_outgoing_webhook_create_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_outgoing_webhook_create_at ON OutgoingWebhooks (CreateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'OutgoingWebhooks' - AND table_schema = DATABASE() - AND index_name = 'idx_outgoing_webhook_delete_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_outgoing_webhook_delete_at ON OutgoingWebhooks (DeleteAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OutgoingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'Description' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE OutgoingWebhooks MODIFY COLUMN Description text;', - 'SELECT 1' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OutgoingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'IconURL' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE OutgoingWebhooks MODIFY COLUMN IconURL text;', - 'SELECT 1' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - - -SET @preparedStatement = (SELECT IF( - ( - SELECT Column_Default FROM Information_Schema.Columns - WHERE table_name = 'OutgoingWebhooks' - AND table_schema = DATABASE() - AND column_name = 'Username' - ) IS NULL, - 'ALTER TABLE OutgoingWebhooks ALTER COLUMN Username SET DEFAULT NULL;', - 'SELECT 1' -)); - -PREPARE alterIfDefaultNull FROM @preparedStatement; -EXECUTE alterIfDefaultNull; -DEALLOCATE PREPARE alterIfDefaultNull; diff --git a/server/channels/db/migrations/mysql/000015_create_systems.down.sql b/server/channels/db/migrations/mysql/000015_create_systems.down.sql deleted file mode 100644 index 28f1d51975c..00000000000 --- a/server/channels/db/migrations/mysql/000015_create_systems.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS Systems; diff --git a/server/channels/db/migrations/mysql/000015_create_systems.up.sql b/server/channels/db/migrations/mysql/000015_create_systems.up.sql deleted file mode 100644 index db6f732f774..00000000000 --- a/server/channels/db/migrations/mysql/000015_create_systems.up.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE IF NOT EXISTS Systems ( - Name VARCHAR(64) NOT NULL, - Value text, - PRIMARY KEY (Name) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000016_create_reactions.down.sql b/server/channels/db/migrations/mysql/000016_create_reactions.down.sql deleted file mode 100644 index effe8f7f581..00000000000 --- a/server/channels/db/migrations/mysql/000016_create_reactions.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS Reactions; diff --git a/server/channels/db/migrations/mysql/000016_create_reactions.up.sql b/server/channels/db/migrations/mysql/000016_create_reactions.up.sql deleted file mode 100644 index 8759b9b9945..00000000000 --- a/server/channels/db/migrations/mysql/000016_create_reactions.up.sql +++ /dev/null @@ -1,76 +0,0 @@ -CREATE TABLE IF NOT EXISTS Reactions ( - UserId varchar(26) NOT NULL, - PostId varchar(26) NOT NULL, - EmojiName varchar(64) NOT NULL, - CreateAt bigint(20) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Reactions' - AND table_schema = DATABASE() - AND column_name = 'UpdateAt' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Reactions ADD COLUMN UpdateAt bigint(20);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Reactions' - AND table_schema = DATABASE() - AND column_name = 'DeleteAt' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Reactions ADD COLUMN DeleteAt bigint(20);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -CREATE PROCEDURE AlterPrimaryKey() -BEGIN - DECLARE existingPK varchar(26) default ''; - - SELECT IFNULL(GROUP_CONCAT(column_name ORDER BY seq_in_index), '') INTO existingPK - FROM information_schema.statistics - WHERE table_schema = DATABASE() - AND table_name = 'Reactions' - AND index_name = 'PRIMARY' - GROUP BY index_name; - - IF existingPK != 'PostId,UserId,EmojiName' THEN - IF existingPk != '' THEN - ALTER TABLE Reactions DROP PRIMARY KEY; - END IF; - - ALTER TABLE Reactions ADD PRIMARY KEY (PostId, UserID, EmojiName); - END IF; -END; - -CALL AlterPrimaryKey(); - -DROP PROCEDURE IF EXISTS AlterPrimaryKey; - - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Reactions' - AND table_schema = DATABASE() - AND column_name = 'RemoteId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Reactions ADD COLUMN RemoteId varchar(26);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; diff --git a/server/channels/db/migrations/mysql/000017_create_roles.down.sql b/server/channels/db/migrations/mysql/000017_create_roles.down.sql deleted file mode 100644 index 457a9ccbcab..00000000000 --- a/server/channels/db/migrations/mysql/000017_create_roles.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS Roles; diff --git a/server/channels/db/migrations/mysql/000017_create_roles.up.sql b/server/channels/db/migrations/mysql/000017_create_roles.up.sql deleted file mode 100644 index f455d23a6db..00000000000 --- a/server/channels/db/migrations/mysql/000017_create_roles.up.sql +++ /dev/null @@ -1,61 +0,0 @@ -CREATE TABLE IF NOT EXISTS Roles ( - Id varchar(26) NOT NULL, - Name varchar(64) DEFAULT NULL, - DisplayName varchar(128) DEFAULT NULL, - Description text, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - Permissions text, - SchemeManaged tinyint(1) DEFAULT NULL, - PRIMARY KEY (Id), - UNIQUE KEY Name (Name) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Roles' - AND table_schema = DATABASE() - AND column_name = 'BuiltIn' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Roles ADD BuiltIn tinyint(1) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -CREATE PROCEDURE Migrate_If_Version_Below_500 () -BEGIN -DECLARE - CURRENT_DB_VERSION TEXT; - SELECT - Value - FROM - Systems - WHERE - Name = 'Version' INTO CURRENT_DB_VERSION; - IF(INET_ATON(CURRENT_DB_VERSION) < INET_ATON('5.0.0')) THEN - UPDATE Roles SET SchemeManaged = 0 - WHERE Name NOT IN ('system_user', 'system_admin', 'team_user', 'team_admin', 'channel_user', 'channel_admin'); - END IF; -END; - CALL Migrate_If_Version_Below_500 (); - DROP PROCEDURE IF EXISTS Migrate_If_Version_Below_500; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Roles' - AND table_schema = DATABASE() - AND column_name = 'Permissions' - ) > 0, - 'ALTER TABLE Roles MODIFY Permissions longtext;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000018_create_schemes.down.sql b/server/channels/db/migrations/mysql/000018_create_schemes.down.sql deleted file mode 100644 index d215f26284e..00000000000 --- a/server/channels/db/migrations/mysql/000018_create_schemes.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS Schemes; diff --git a/server/channels/db/migrations/mysql/000018_create_schemes.up.sql b/server/channels/db/migrations/mysql/000018_create_schemes.up.sql deleted file mode 100644 index 8a254e54a5e..00000000000 --- a/server/channels/db/migrations/mysql/000018_create_schemes.up.sql +++ /dev/null @@ -1,121 +0,0 @@ -CREATE TABLE IF NOT EXISTS Schemes ( - Id varchar(26) NOT NULL, - Name varchar(64) DEFAULT NULL, - DisplayName varchar(128) DEFAULT NULL, - Description text, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - Scope varchar(32) DEFAULT NULL, - DefaultTeamAdminRole varchar(64) DEFAULT NULL, - DefaultTeamUserRole varchar(64) DEFAULT NULL, - DefaultChannelAdminRole varchar(64) DEFAULT NULL, - DefaultChannelUserRole varchar(64) DEFAULT NULL, - PRIMARY KEY (Id), - UNIQUE KEY Name (Name) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND column_name = 'DefaultTeamGuestRole' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Schemes ADD DefaultTeamGuestRole varchar(64);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND column_name = 'DefaultChannelGuestRole' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Schemes ADD DefaultChannelGuestRole varchar(64);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND column_name = 'DefaultTeamGuestRole' - ) > 0, - 'ALTER TABLE Schemes MODIFY DefaultTeamGuestRole varchar(64);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND column_name = 'DefaultChannelGuestRole' - ) > 0, - 'ALTER TABLE Schemes MODIFY DefaultChannelGuestRole varchar(64);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND index_name = 'idx_schemes_channel_guest_role' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_schemes_channel_guest_role ON Schemes(DefaultChannelGuestRole);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND index_name = 'idx_schemes_channel_user_role' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_schemes_channel_user_role ON Schemes(DefaultChannelUserRole);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND index_name = 'idx_schemes_channel_admin_role' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_schemes_channel_admin_role ON Schemes(DefaultChannelAdminRole);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000019_create_licenses.down.sql b/server/channels/db/migrations/mysql/000019_create_licenses.down.sql deleted file mode 100644 index 095c88a88a6..00000000000 --- a/server/channels/db/migrations/mysql/000019_create_licenses.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS Licenses; diff --git a/server/channels/db/migrations/mysql/000019_create_licenses.up.sql b/server/channels/db/migrations/mysql/000019_create_licenses.up.sql deleted file mode 100644 index 06bb4c95f0e..00000000000 --- a/server/channels/db/migrations/mysql/000019_create_licenses.up.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE IF NOT EXISTS Licenses ( - Id varchar(26) NOT NULL, - CreateAt bigint(20) DEFAULT NULL, - Bytes text, - PRIMARY KEY (Id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000020_create_posts.down.sql b/server/channels/db/migrations/mysql/000020_create_posts.down.sql deleted file mode 100644 index 4fe641459d3..00000000000 --- a/server/channels/db/migrations/mysql/000020_create_posts.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_channel_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_posts_channel_id ON Posts(ChannelId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -DROP TABLE IF EXISTS Posts; diff --git a/server/channels/db/migrations/mysql/000020_create_posts.up.sql b/server/channels/db/migrations/mysql/000020_create_posts.up.sql deleted file mode 100644 index cbe1b34b03d..00000000000 --- a/server/channels/db/migrations/mysql/000020_create_posts.up.sql +++ /dev/null @@ -1,257 +0,0 @@ -CREATE TABLE IF NOT EXISTS Posts ( - Id varchar(26) NOT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - UserId varchar(26) DEFAULT NULL, - ChannelId varchar(26) DEFAULT NULL, - RootId varchar(26) DEFAULT NULL, - ParentId varchar(26) DEFAULT NULL, - OriginalId varchar(26) DEFAULT NULL, - Message text, - Type varchar(26) DEFAULT NULL, - Props text, - Hashtags text, - Filenames text, - PRIMARY KEY (Id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND column_name = 'FileIds' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Posts ADD FileIds text;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND column_name = 'HasReactions' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Posts ADD HasReactions tinyint(1) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND column_name = 'EditAt' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Posts ADD EditAt bigint(20) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND column_name = 'IsPinned' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Posts ADD IsPinned tinyint(1) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_update_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_posts_update_at ON Posts (UpdateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_create_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_posts_create_at ON Posts(CreateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_delete_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_posts_delete_at ON Posts(DeleteAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_root_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_posts_root_id ON Posts(RootId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_posts_user_id ON Posts(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_is_pinned' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_posts_is_pinned ON Posts(IsPinned);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_channel_id_update_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_posts_channel_id_update_at ON Posts(ChannelId, UpdateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_channel_id_delete_at_create_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_posts_channel_id_delete_at_create_at ON Posts(ChannelId, DeleteAt, CreateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_message_txt' - ) > 0, - 'SELECT 1', - 'CREATE FULLTEXT INDEX idx_posts_message_txt ON Posts(Message);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_hashtags_txt' - ) > 0, - 'SELECT 1', - 'CREATE FULLTEXT INDEX idx_posts_hashtags_txt ON Posts(Hashtags);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND column_name = 'RemoteId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Posts ADD RemoteId varchar(26);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_channel_id' - ) > 0, - 'DROP INDEX idx_posts_channel_id ON Posts;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000021_create_product_notice_view_state.down.sql b/server/channels/db/migrations/mysql/000021_create_product_notice_view_state.down.sql deleted file mode 100644 index c46dff576a4..00000000000 --- a/server/channels/db/migrations/mysql/000021_create_product_notice_view_state.down.sql +++ /dev/null @@ -1,31 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ProductNoticeViewState' - AND table_schema = DATABASE() - AND index_name = 'idx_notice_views_user_notice' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_notice_views_user_notice ON ProductNoticeViewState(UserId, NoticeId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ProductNoticeViewState' - AND table_schema = DATABASE() - AND index_name = 'idx_notice_views_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_notice_views_user_id ON ProductNoticeViewState(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -DROP TABLE IF EXISTS ProductNoticeViewState; diff --git a/server/channels/db/migrations/mysql/000021_create_product_notice_view_state.up.sql b/server/channels/db/migrations/mysql/000021_create_product_notice_view_state.up.sql deleted file mode 100644 index 4a765767662..00000000000 --- a/server/channels/db/migrations/mysql/000021_create_product_notice_view_state.up.sql +++ /dev/null @@ -1,67 +0,0 @@ -CREATE TABLE IF NOT EXISTS ProductNoticeViewState ( - UserId VARCHAR(26) NOT NULL, - NoticeId VARCHAR(26) NOT NULL, - Viewed int(11), - Timestamp bigint(20) DEFAULT NULL, - PRIMARY KEY (UserId, NoticeId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ProductNoticeViewState' - AND table_schema = DATABASE() - AND index_name = 'idx_notice_views_timestamp' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_notice_views_timestamp ON ProductNoticeViewState (Timestamp);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ProductNoticeViewState' - AND table_schema = DATABASE() - AND index_name = 'idx_notice_views_notice_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_notice_views_notice_id ON ProductNoticeViewState (NoticeId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ProductNoticeViewState' - AND table_schema = DATABASE() - AND index_name = 'idx_notice_views_user_id' - ) > 0, - 'DROP INDEX idx_notice_views_user_id ON ProductNoticeViewState;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ProductNoticeViewState' - AND table_schema = DATABASE() - AND index_name = 'idx_notice_views_user_notice' - ) > 0, - 'DROP INDEX idx_notice_views_user_notice ON ProductNoticeViewState;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000022_create_sessions.down.sql b/server/channels/db/migrations/mysql/000022_create_sessions.down.sql deleted file mode 100644 index b651f0dcf79..00000000000 --- a/server/channels/db/migrations/mysql/000022_create_sessions.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS Sessions; diff --git a/server/channels/db/migrations/mysql/000022_create_sessions.up.sql b/server/channels/db/migrations/mysql/000022_create_sessions.up.sql deleted file mode 100644 index 476b5d123ea..00000000000 --- a/server/channels/db/migrations/mysql/000022_create_sessions.up.sql +++ /dev/null @@ -1,116 +0,0 @@ -CREATE TABLE IF NOT EXISTS Sessions ( - Id varchar(26) PRIMARY KEY, - Token varchar(26) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - ExpiresAt bigint(20) DEFAULT NULL, - LastActivityAt bigint(20) DEFAULT NULL, - UserId varchar(26) DEFAULT NULL, - DeviceId text, - Roles varchar(64) DEFAULT NULL, - IsOAuth tinyint(1), - Props text -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Sessions' - AND table_schema = DATABASE() - AND column_name = 'ExpiredNotify' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Sessions ADD ExpiredNotify tinyint(1) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Sessions' - AND table_schema = DATABASE() - AND index_name = 'idx_sessions_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_sessions_user_id ON Sessions(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Sessions' - AND table_schema = DATABASE() - AND index_name = 'idx_sessions_token' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_sessions_token ON Sessions(Token);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Sessions' - AND table_schema = DATABASE() - AND index_name = 'idx_sessions_expires_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_sessions_expires_at ON Sessions(ExpiresAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Sessions' - AND table_schema = DATABASE() - AND index_name = 'idx_sessions_create_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_sessions_create_at ON Sessions(CreateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Sessions' - AND table_schema = DATABASE() - AND index_name = 'idx_sessions_last_activity_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_sessions_last_activity_at ON Sessions(LastActivityAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -CREATE PROCEDURE Migrate_If_Version_Below_5120 () -BEGIN -DECLARE - CURRENT_DB_VERSION TEXT; - SELECT - Value - FROM - Systems - WHERE - Name = 'Version' INTO CURRENT_DB_VERSION; - IF(INET_ATON(CURRENT_DB_VERSION) < INET_ATON('5.12.0')) THEN - DELETE FROM Sessions where ExpiresAt > 3000000000000; - END IF; -END; - CALL Migrate_If_Version_Below_5120 (); - DROP PROCEDURE IF EXISTS Migrate_If_Version_Below_5120; diff --git a/server/channels/db/migrations/mysql/000023_create_terms_of_service.down.sql b/server/channels/db/migrations/mysql/000023_create_terms_of_service.down.sql deleted file mode 100644 index f0bfd556e25..00000000000 --- a/server/channels/db/migrations/mysql/000023_create_terms_of_service.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS TermsOfService; diff --git a/server/channels/db/migrations/mysql/000023_create_terms_of_service.up.sql b/server/channels/db/migrations/mysql/000023_create_terms_of_service.up.sql deleted file mode 100644 index 03fc481c116..00000000000 --- a/server/channels/db/migrations/mysql/000023_create_terms_of_service.up.sql +++ /dev/null @@ -1,7 +0,0 @@ -CREATE TABLE IF NOT EXISTS TermsOfService ( - Id varchar(26) NOT NULL, - CreateAt bigint(20) DEFAULT NULL, - UserId varchar(26) DEFAULT NULL, - Text text, - PRIMARY KEY (Id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000024_create_audits.down.sql b/server/channels/db/migrations/mysql/000024_create_audits.down.sql deleted file mode 100644 index 37ca3662a2b..00000000000 --- a/server/channels/db/migrations/mysql/000024_create_audits.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS Audits; diff --git a/server/channels/db/migrations/mysql/000024_create_audits.up.sql b/server/channels/db/migrations/mysql/000024_create_audits.up.sql deleted file mode 100644 index 72875e27288..00000000000 --- a/server/channels/db/migrations/mysql/000024_create_audits.up.sql +++ /dev/null @@ -1,25 +0,0 @@ -CREATE TABLE IF NOT EXISTS Audits ( - Id varchar(26) NOT NULL, - CreateAt bigint(20) DEFAULT NULL, - UserId varchar(26) DEFAULT NULL, - Action text, - ExtraInfo text, - IpAddress varchar(64) DEFAULT NULL, - SessionId varchar(26) DEFAULT NULL, - PRIMARY KEY (Id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Audits' - AND table_schema = DATABASE() - AND index_name = 'idx_audits_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_audits_user_id ON Audits(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000025_create_oauth_access_data.down.sql b/server/channels/db/migrations/mysql/000025_create_oauth_access_data.down.sql deleted file mode 100644 index eb919aed030..00000000000 --- a/server/channels/db/migrations/mysql/000025_create_oauth_access_data.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'OAuthAccessData' - AND table_schema = DATABASE() - AND index_name = 'idx_oauthaccessdata_client_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_oauthaccessdata_client_id ON OAuthAccessData(ClientId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -DROP TABLE IF EXISTS OAuthAccessData; diff --git a/server/channels/db/migrations/mysql/000025_create_oauth_access_data.up.sql b/server/channels/db/migrations/mysql/000025_create_oauth_access_data.up.sql deleted file mode 100644 index 1d60f529cd0..00000000000 --- a/server/channels/db/migrations/mysql/000025_create_oauth_access_data.up.sql +++ /dev/null @@ -1,159 +0,0 @@ -CREATE TABLE IF NOT EXISTS OAuthAccessData ( - Token varchar(26) NOT NULL, - RefreshToken varchar(26) DEFAULT NULL, - RedirectUri text, - ClientId varchar(26) DEFAULT NULL, - UserId varchar(26) DEFAULT NULL, - PRIMARY KEY (Token), - UNIQUE KEY (ClientId, UserId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthAccessData' - AND table_schema = DATABASE() - AND column_name = 'ClientId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE OAuthAccessData ADD ClientId varchar(26) DEFAULT "";' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthAccessData' - AND table_schema = DATABASE() - AND column_name = 'UserId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE OAuthAccessData ADD UserId varchar(26) DEFAULT "";' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.statistics - WHERE table_name = 'OAuthAccessData' - AND table_schema = DATABASE() - AND index_name = 'idx_oauthaccessdata_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_oauthaccessdata_user_id ON OAuthAccessData(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthAccessData' - AND table_schema = DATABASE() - AND column_name = 'ExpiresAt' - ) > 0, - 'SELECT 1', - 'ALTER TABLE OAuthAccessData ADD ExpiresAt bigint(20) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.statistics - WHERE table_name = 'OAuthAccessData' - AND table_schema = DATABASE() - AND index_name = 'idx_oauthaccessdata_auth_code' - ) > 0, - 'DROP INDEX idx_oauthaccessdata_auth_code ON OAuthAccessData;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthAccessData' - AND table_schema = DATABASE() - AND column_name = 'AuthCode' - ) > 0, - 'ALTER TABLE OAuthAccessData DROP COLUMN AuthCode;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthAccessData' - AND table_schema = DATABASE() - AND column_name = 'Scope' - ) > 0, - 'SELECT 1', - 'ALTER TABLE OAuthAccessData ADD Scope varchar(128) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.statistics - WHERE table_name = 'OAuthAccessData' - AND table_schema = DATABASE() - AND index_name = 'ClientId_2' - ) > 0, - 'DROP INDEX ClientId_2 ON OAuthAccessData;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.statistics - WHERE table_name = 'OAuthAccessData' - AND table_schema = DATABASE() - AND index_name = 'idx_oauthaccessdata_refresh_token' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_oauthaccessdata_refresh_token ON OAuthAccessData(RefreshToken);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'OAuthAccessData' - AND table_schema = DATABASE() - AND index_name = 'idx_oauthaccessdata_client_id' - ) > 0, - 'DROP INDEX idx_oauthaccessdata_client_id ON OAuthAccessData;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000026_create_preferences.down.sql b/server/channels/db/migrations/mysql/000026_create_preferences.down.sql deleted file mode 100644 index fde60fcdeeb..00000000000 --- a/server/channels/db/migrations/mysql/000026_create_preferences.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Preferences' - AND table_schema = DATABASE() - AND index_name = 'idx_preferences_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_preferences_user_id ON Preferences(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -DROP TABLE IF EXISTS Preferences; diff --git a/server/channels/db/migrations/mysql/000026_create_preferences.up.sql b/server/channels/db/migrations/mysql/000026_create_preferences.up.sql deleted file mode 100644 index a2cde737286..00000000000 --- a/server/channels/db/migrations/mysql/000026_create_preferences.up.sql +++ /dev/null @@ -1,106 +0,0 @@ -CREATE TABLE IF NOT EXISTS Preferences ( - UserId varchar(26) NOT NULL, - Category varchar(32) NOT NULL, - Name varchar(32) NOT NULL, - Value text, - PRIMARY KEY (UserId, Category, Name) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Preferences' - AND table_schema = DATABASE() - AND column_name = 'Value' - AND data_type != 'text' - ) > 0, - 'ALTER TABLE Preferences MODIFY Value text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Preferences' - AND table_schema = DATABASE() - AND index_name = 'idx_preferences_category' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_preferences_category ON Preferences(Category);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Preferences' - AND table_schema = DATABASE() - AND index_name = 'idx_preferences_name' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_preferences_name ON Preferences(Name);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -CREATE PROCEDURE RenameSolarizedThemeWithUnderscore() -BEGIN - DECLARE finished INTEGER DEFAULT 0; - DECLARE curUserId VARCHAR(26); - DECLARE curName VARCHAR(32); - DECLARE curValue text; - - DECLARE preference - CURSOR FOR - SELECT UserId, Name, Value - FROM Preferences - WHERE Category = 'theme' AND Value LIKE '%solarized_%'; - - -- declare NOT FOUND handler - DECLARE CONTINUE HANDLER - FOR NOT FOUND SET finished = 1; - - OPEN preference; - - getPreference: LOOP - FETCH preference INTO curUserId, curName, curValue; - IF finished = 1 THEN - LEAVE getPreference; - END IF; - - -- update affected rows - UPDATE Preferences - SET Value = replace(curValue, 'solaraized_', 'solarized-') - WHERE Category = 'theme' - AND UserId = curUserId - AND Name = curName; - END LOOP getPreference; -END; - -CALL RenameSolarizedThemeWithUnderscore(); - -DROP PROCEDURE IF EXISTS RenameSolarizedThemeWithUnderscore; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Preferences' - AND table_schema = DATABASE() - AND index_name = 'idx_preferences_user_id' - ) > 0, - 'DROP INDEX idx_preferences_user_id ON Preferences;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000027_create_status.down.sql b/server/channels/db/migrations/mysql/000027_create_status.down.sql deleted file mode 100644 index 6c7e49fc4d3..00000000000 --- a/server/channels/db/migrations/mysql/000027_create_status.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Status' - AND table_schema = DATABASE() - AND index_name = 'idx_status_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_status_user_id ON Status(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -DROP TABLE IF EXISTS Status; diff --git a/server/channels/db/migrations/mysql/000027_create_status.up.sql b/server/channels/db/migrations/mysql/000027_create_status.up.sql deleted file mode 100644 index 7133628559e..00000000000 --- a/server/channels/db/migrations/mysql/000027_create_status.up.sql +++ /dev/null @@ -1,83 +0,0 @@ -CREATE TABLE IF NOT EXISTS Status ( - UserId varchar(26) NOT NULL, - Status varchar(32) DEFAULT NULL, - `Manual` tinyint(1) DEFAULT NULL, - LastActivityAt bigint(20) DEFAULT NULL, - PRIMARY KEY (UserId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Status' - AND table_schema = DATABASE() - AND column_name = 'ActiveChannel' - ) > 0, - 'ALTER TABLE Status DROP COLUMN ActiveChannel;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Status' - AND table_schema = DATABASE() - AND index_name = 'idx_status_status' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_status_status ON Status(Status);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Status' - AND table_schema = DATABASE() - AND column_name = 'DNDEndTime' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Status ADD COLUMN DNDEndTime BIGINT;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Status' - AND table_schema = DATABASE() - AND column_name = 'PrevStatus' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Status ADD COLUMN PrevStatus VARCHAR(32);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Status' - AND table_schema = DATABASE() - AND index_name = 'idx_status_user_id' - ) > 0, - 'DROP INDEX idx_status_user_id ON Status;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000028_create_tokens.down.sql b/server/channels/db/migrations/mysql/000028_create_tokens.down.sql deleted file mode 100644 index 7ef618856eb..00000000000 --- a/server/channels/db/migrations/mysql/000028_create_tokens.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS Tokens; diff --git a/server/channels/db/migrations/mysql/000028_create_tokens.up.sql b/server/channels/db/migrations/mysql/000028_create_tokens.up.sql deleted file mode 100644 index 1e0076e1d96..00000000000 --- a/server/channels/db/migrations/mysql/000028_create_tokens.up.sql +++ /dev/null @@ -1,23 +0,0 @@ -CREATE TABLE IF NOT EXISTS Tokens ( - Token varchar(64) NOT NULL, - CreateAt bigint(20), - Type varchar(64) DEFAULT NULL, - Extra text, - PRIMARY KEY (Token) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Tokens' - AND table_schema = DATABASE() - AND column_name = 'Extra' - AND data_type != 'text' - ) > 0, - 'ALTER TABLE Tokens MODIFY Extra text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000029_create_bots.down.sql b/server/channels/db/migrations/mysql/000029_create_bots.down.sql deleted file mode 100644 index 31c420b298e..00000000000 --- a/server/channels/db/migrations/mysql/000029_create_bots.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Bots' - AND table_schema = DATABASE() - AND column_name = 'LastIconUpdate' - ) > 0, - 'ALTER TABLE Bots DROP COLUMN LastIconUpdate;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -DROP TABLE IF EXISTS bots; diff --git a/server/channels/db/migrations/mysql/000029_create_bots.up.sql b/server/channels/db/migrations/mysql/000029_create_bots.up.sql deleted file mode 100644 index 2ead8180f1e..00000000000 --- a/server/channels/db/migrations/mysql/000029_create_bots.up.sql +++ /dev/null @@ -1,24 +0,0 @@ -CREATE TABLE IF NOT EXISTS Bots ( - UserId varchar(26) NOT NULL, - Description text, - OwnerId varchar(190) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - PRIMARY KEY (UserId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Bots' - AND table_schema = DATABASE() - AND column_name = 'LastIconUpdate' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Bots ADD LastIconUpdate bigint;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; diff --git a/server/channels/db/migrations/mysql/000030_create_user_access_tokens.down.sql b/server/channels/db/migrations/mysql/000030_create_user_access_tokens.down.sql deleted file mode 100644 index 8c2fc9f8e7e..00000000000 --- a/server/channels/db/migrations/mysql/000030_create_user_access_tokens.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'UserAccessTokens' - AND table_schema = DATABASE() - AND index_name = 'idx_user_access_tokens_token' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_user_access_tokens_token ON UserAccessTokens(Token);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -DROP TABLE IF EXISTS UserAccessTokens; diff --git a/server/channels/db/migrations/mysql/000030_create_user_access_tokens.up.sql b/server/channels/db/migrations/mysql/000030_create_user_access_tokens.up.sql deleted file mode 100644 index 8266d5cd761..00000000000 --- a/server/channels/db/migrations/mysql/000030_create_user_access_tokens.up.sql +++ /dev/null @@ -1,53 +0,0 @@ -CREATE TABLE IF NOT EXISTS UserAccessTokens ( - Id varchar(26) NOT NULL, - Token varchar(26) DEFAULT NULL, - UserId varchar(26) DEFAULT NULL, - Description text, - PRIMARY KEY (Id), - UNIQUE (Token) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'UserAccessTokens' - AND table_schema = DATABASE() - AND column_name = 'IsActive' - ) > 0, - 'SELECT 1', - 'ALTER TABLE UserAccessTokens ADD COLUMN IsActive tinyint(1) DEFAULT NULL;' -)); - -PREPARE alterNotIfExists FROM @preparedStatement; -EXECUTE alterNotIfExists; -DEALLOCATE PREPARE alterNotIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'UserAccessTokens' - AND table_schema = DATABASE() - AND index_name = 'idx_user_access_tokens_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_user_access_tokens_user_id ON UserAccessTokens(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'UserAccessTokens' - AND table_schema = DATABASE() - AND index_name = 'idx_user_access_tokens_token' - ) > 0, - 'DROP INDEX idx_user_access_tokens_token ON UserAccessTokens;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000031_create_remote_clusters.down.sql b/server/channels/db/migrations/mysql/000031_create_remote_clusters.down.sql deleted file mode 100644 index f4f7207a3b1..00000000000 --- a/server/channels/db/migrations/mysql/000031_create_remote_clusters.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS RemoteClusters; diff --git a/server/channels/db/migrations/mysql/000031_create_remote_clusters.up.sql b/server/channels/db/migrations/mysql/000031_create_remote_clusters.up.sql deleted file mode 100644 index 5169e66bb0e..00000000000 --- a/server/channels/db/migrations/mysql/000031_create_remote_clusters.up.sql +++ /dev/null @@ -1,29 +0,0 @@ -CREATE TABLE IF NOT EXISTS RemoteClusters ( - RemoteId VARCHAR(26) NOT NULL, - RemoteTeamId VARCHAR(26), - Name VARCHAR(64) NOT NULL, - DisplayName VARCHAR(64), - SiteURL text, - CreateAt bigint, - LastPingAt bigint, - Token VARCHAR(26) DEFAULT NULL, - RemoteToken VARCHAR(26), - Topics text, - CreatorId VARCHAR(26) DEFAULT NULL, - PRIMARY KEY (RemoteId, Name) -); - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'RemoteClusters' - AND table_schema = DATABASE() - AND index_name = 'remote_clusters_site_url_unique' - ) > 0, - 'SELECT 1', - 'CREATE UNIQUE INDEX remote_clusters_site_url_unique ON RemoteClusters (RemoteTeamId, SiteURL (168));' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000032_create_sharedchannels.down.sql b/server/channels/db/migrations/mysql/000032_create_sharedchannels.down.sql deleted file mode 100644 index 76bf2e3bdd9..00000000000 --- a/server/channels/db/migrations/mysql/000032_create_sharedchannels.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS SharedChannels; diff --git a/server/channels/db/migrations/mysql/000032_create_sharedchannels.up.sql b/server/channels/db/migrations/mysql/000032_create_sharedchannels.up.sql deleted file mode 100644 index 02e75f106ac..00000000000 --- a/server/channels/db/migrations/mysql/000032_create_sharedchannels.up.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE TABLE IF NOT EXISTS SharedChannels ( - ChannelId varchar(26) NOT NULL, - TeamId varchar(26) DEFAULT NULL, - Home tinyint(1) DEFAULT NULL, - ReadOnly tinyint(1) DEFAULT NULL, - ShareName varchar(64) DEFAULT NULL, - ShareDisplayName varchar(64) DEFAULT NULL, - SharePurpose varchar(250) DEFAULT NULL, - ShareHeader text, - CreatorId varchar(26) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - RemoteId varchar(26) DEFAULT NULL, - PRIMARY KEY (ChannelId), - UNIQUE KEY ShareName (ShareName, TeamId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000033_create_sidebar_channels.down.sql b/server/channels/db/migrations/mysql/000033_create_sidebar_channels.down.sql deleted file mode 100644 index 41c9c708730..00000000000 --- a/server/channels/db/migrations/mysql/000033_create_sidebar_channels.down.sql +++ /dev/null @@ -1,17 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SidebarChannels' - AND table_schema = DATABASE() - AND column_name = 'CategoryId' - AND column_type != 'varchar(26)' - ) > 0, - 'ALTER TABLE SidebarChannels MODIFY CategoryId varchar(26);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -DROP TABLE IF EXISTS SidebarChannels; diff --git a/server/channels/db/migrations/mysql/000033_create_sidebar_channels.up.sql b/server/channels/db/migrations/mysql/000033_create_sidebar_channels.up.sql deleted file mode 100644 index 916d8069ab9..00000000000 --- a/server/channels/db/migrations/mysql/000033_create_sidebar_channels.up.sql +++ /dev/null @@ -1,23 +0,0 @@ -CREATE TABLE IF NOT EXISTS SidebarChannels ( - ChannelId varchar(26) NOT NULL, - UserId varchar(26) NOT NULL, - CategoryId varchar(26) NOT NULL, - SortOrder bigint(20) DEFAULT NULL, - PRIMARY KEY (ChannelId, UserId, CategoryId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SidebarChannels' - AND table_schema = DATABASE() - AND column_name = 'CategoryId' - AND column_type != 'varchar(128)' - ) > 0, - 'ALTER TABLE SidebarChannels MODIFY CategoryId varchar(128);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000034_create_oauthauthdata.down.sql b/server/channels/db/migrations/mysql/000034_create_oauthauthdata.down.sql deleted file mode 100644 index 0587da7bfaf..00000000000 --- a/server/channels/db/migrations/mysql/000034_create_oauthauthdata.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'OAuthAuthData' - AND table_schema = DATABASE() - AND index_name = 'idx_oauthauthdata_client_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_oauthauthdata_client_id ON OAuthAuthData(Code);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -DROP TABLE IF EXISTS OAuthAuthData; diff --git a/server/channels/db/migrations/mysql/000034_create_oauthauthdata.up.sql b/server/channels/db/migrations/mysql/000034_create_oauthauthdata.up.sql deleted file mode 100644 index aeb32c33e71..00000000000 --- a/server/channels/db/migrations/mysql/000034_create_oauthauthdata.up.sql +++ /dev/null @@ -1,38 +0,0 @@ -CREATE TABLE IF NOT EXISTS OAuthAuthData ( - ClientId varchar(26) DEFAULT NULL, - UserId varchar(26) DEFAULT NULL, - Code varchar(128) NOT NULL, - ExpiresIn int(11) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - RedirectUri text, - State text, - Scope varchar(128) DEFAULT NULL, - PRIMARY KEY (Code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthAuthData' - AND table_schema = DATABASE() - AND column_name = 'State' - AND (data_type != 'varchar' OR character_maximum_length != 1024) - ) > 0, - 'ALTER TABLE OAuthAuthData MODIFY State text;', - 'SELECT 1' -)); - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'OAuthAuthData' - AND table_schema = DATABASE() - AND index_name = 'idx_oauthauthdata_client_id' - ) > 0, - 'DROP INDEX idx_oauthauthdata_client_id ON OAuthAuthData;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000035_create_sharedchannelattachments.down.sql b/server/channels/db/migrations/mysql/000035_create_sharedchannelattachments.down.sql deleted file mode 100644 index 2a1014808f9..00000000000 --- a/server/channels/db/migrations/mysql/000035_create_sharedchannelattachments.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS SharedChannelAttachments; diff --git a/server/channels/db/migrations/mysql/000035_create_sharedchannelattachments.up.sql b/server/channels/db/migrations/mysql/000035_create_sharedchannelattachments.up.sql deleted file mode 100644 index a6dd01ae8b9..00000000000 --- a/server/channels/db/migrations/mysql/000035_create_sharedchannelattachments.up.sql +++ /dev/null @@ -1,9 +0,0 @@ -CREATE TABLE IF NOT EXISTS SharedChannelAttachments ( - Id varchar(26) NOT NULL, - FileId varchar(26) DEFAULT NULL, - RemoteId varchar(26) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - LastSyncAt bigint(20) DEFAULT NULL, - PRIMARY KEY (Id), - UNIQUE KEY FileId (FileId,RemoteId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000036_create_sharedchannelusers.down.sql b/server/channels/db/migrations/mysql/000036_create_sharedchannelusers.down.sql deleted file mode 100644 index 36c5c138c78..00000000000 --- a/server/channels/db/migrations/mysql/000036_create_sharedchannelusers.down.sql +++ /dev/null @@ -1,31 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'SharedChannelUsers' - AND table_schema = DATABASE() - AND index_name = 'idx_sharedchannelusers_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_sharedchannelusers_user_id ON SharedChannelUsers(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelUsers' - AND table_schema = DATABASE() - AND column_name = 'ChannelId' - ) > 0, - 'ALTER TABLE SharedChannelUsers DROP COLUMN ChannelId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -DROP TABLE IF EXISTS SharedChannelUsers; diff --git a/server/channels/db/migrations/mysql/000036_create_sharedchannelusers.up.sql b/server/channels/db/migrations/mysql/000036_create_sharedchannelusers.up.sql deleted file mode 100644 index db108e623f9..00000000000 --- a/server/channels/db/migrations/mysql/000036_create_sharedchannelusers.up.sql +++ /dev/null @@ -1,68 +0,0 @@ -CREATE TABLE IF NOT EXISTS SharedChannelUsers ( - Id varchar(26) NOT NULL, - UserId varchar(26) DEFAULT NULL, - RemoteId varchar(26) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - LastSyncAt bigint(20) DEFAULT NULL, - PRIMARY KEY (Id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelUsers' - AND table_schema = DATABASE() - AND column_name = 'ChannelId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE SharedChannelUsers ADD ChannelId varchar(26) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM information_schema.TABLE_CONSTRAINTS - WHERE table_name = 'SharedChannelUsers' - AND table_schema = DATABASE() - AND constraint_type = 'UNIQUE' - ) > 0, - 'SELECT 1', - 'ALTER TABLE SharedChannelUsers ADD CONSTRAINT UNIQUE KEY UserId(UserId, ChannelId, RemoteId)' -)); - -PREPARE alterIfUniqueNotExists FROM @preparedStatement; -EXECUTE alterIfUniqueNotExists; -DEALLOCATE PREPARE alterIfUniqueNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'SharedChannelUsers' - AND table_schema = DATABASE() - AND index_name = 'idx_sharedchannelusers_user_id' - ) > 0, - 'DROP INDEX idx_sharedchannelusers_user_id ON SharedChannelUsers;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'SharedChannelUsers' - AND table_schema = DATABASE() - AND index_name = 'idx_sharedchannelusers_remote_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_sharedchannelusers_remote_id ON SharedChannelUsers(RemoteId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000037_create_sharedchannelremotes.down.sql b/server/channels/db/migrations/mysql/000037_create_sharedchannelremotes.down.sql deleted file mode 100644 index a88a94021f6..00000000000 --- a/server/channels/db/migrations/mysql/000037_create_sharedchannelremotes.down.sql +++ /dev/null @@ -1,31 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'LastPostId' - ) > 0, - 'ALTER TABLE SharedChannelRemotes DROP COLUMN LastPostId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'LastPostUpdateAt' - ) > 0, - 'ALTER TABLE SharedChannelRemotes DROP COLUMN LastPostUpdateAt;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -DROP TABLE IF EXISTS SharedChannelRemotes; diff --git a/server/channels/db/migrations/mysql/000037_create_sharedchannelremotes.up.sql b/server/channels/db/migrations/mysql/000037_create_sharedchannelremotes.up.sql deleted file mode 100644 index ca5c5eefb8c..00000000000 --- a/server/channels/db/migrations/mysql/000037_create_sharedchannelremotes.up.sql +++ /dev/null @@ -1,42 +0,0 @@ -CREATE TABLE IF NOT EXISTS SharedChannelRemotes ( - Id varchar(26) NOT NULL, - ChannelId varchar(26) NOT NULL, - CreatorId varchar(26) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - IsInviteAccepted tinyint(1) DEFAULT NULL, - IsInviteConfirmed tinyint(1) DEFAULT NULL, - RemoteId varchar(26) DEFAULT NULL, - PRIMARY KEY (Id, ChannelId), - UNIQUE KEY ChannelId (ChannelId, RemoteId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'LastPostUpdateAt' - ) > 0, - 'SELECT 1', - 'ALTER TABLE SharedChannelRemotes ADD LastPostUpdateAt bigint;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'LastPostId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE SharedChannelRemotes ADD LastPostId VARCHAR(26);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000038_create_jobs.down.sql b/server/channels/db/migrations/mysql/000038_create_jobs.down.sql deleted file mode 100644 index a972609b10b..00000000000 --- a/server/channels/db/migrations/mysql/000038_create_jobs.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS Jobs; diff --git a/server/channels/db/migrations/mysql/000038_create_jobs.up.sql b/server/channels/db/migrations/mysql/000038_create_jobs.up.sql deleted file mode 100644 index 24fed74042d..00000000000 --- a/server/channels/db/migrations/mysql/000038_create_jobs.up.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE IF NOT EXISTS Jobs ( - Id varchar(26) NOT NULL, - Type varchar(32) DEFAULT NULL, - Priority bigint(20) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - StartAt bigint(20) DEFAULT NULL, - LastActivityAt bigint(20) DEFAULT NULL, - Status varchar(32) DEFAULT NULL, - Progress bigint(20) DEFAULT NULL, - Data text, - PRIMARY KEY (Id), - KEY idx_jobs_type (Type) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000039_create_channel_member_history.down.sql b/server/channels/db/migrations/mysql/000039_create_channel_member_history.down.sql deleted file mode 100644 index 8256abd0e69..00000000000 --- a/server/channels/db/migrations/mysql/000039_create_channel_member_history.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS ChannelMemberHistory; diff --git a/server/channels/db/migrations/mysql/000039_create_channel_member_history.up.sql b/server/channels/db/migrations/mysql/000039_create_channel_member_history.up.sql deleted file mode 100644 index 6c72e4057df..00000000000 --- a/server/channels/db/migrations/mysql/000039_create_channel_member_history.up.sql +++ /dev/null @@ -1,37 +0,0 @@ -CREATE TABLE IF NOT EXISTS ChannelMemberHistory ( - ChannelId varchar(26) NOT NULL, - UserId varchar(26) NOT NULL, - JoinTime bigint(20) NOT NULL, - LeaveTime bigint(20) DEFAULT NULL, - PRIMARY KEY (ChannelId, UserId, JoinTime) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMemberHistory' - AND table_schema = DATABASE() - AND column_name = 'Email' - ) > 0, - 'ALTER TABLE ChannelMemberHistory DROP COLUMN Email', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMemberHistory' - AND table_schema = DATABASE() - AND column_name = 'Username' - ) > 0, - 'ALTER TABLE ChannelMemberHistory DROP COLUMN Username', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000040_create_sidebar_categories.down.sql b/server/channels/db/migrations/mysql/000040_create_sidebar_categories.down.sql deleted file mode 100644 index ea3198a415b..00000000000 --- a/server/channels/db/migrations/mysql/000040_create_sidebar_categories.down.sql +++ /dev/null @@ -1,47 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SidebarCategories' - AND table_schema = DATABASE() - AND column_name = 'Collapsed' - ) > 0, - 'ALTER TABLE SidebarCategories DROP COLUMN Collapsed;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SidebarCategories' - AND table_schema = DATABASE() - AND column_name = 'Muted' - ) > 0, - 'ALTER TABLE SidebarCategories DROP COLUMN Muted;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SidebarCategories' - AND table_schema = DATABASE() - AND column_name = 'Id' - AND column_type != 'varchar(26)' - ) > 0, - 'ALTER TABLE SidebarCategories MODIFY Id varchar(26);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -DROP TABLE IF EXISTS SidebarCategories; diff --git a/server/channels/db/migrations/mysql/000040_create_sidebar_categories.up.sql b/server/channels/db/migrations/mysql/000040_create_sidebar_categories.up.sql deleted file mode 100644 index 7ad170b2ee6..00000000000 --- a/server/channels/db/migrations/mysql/000040_create_sidebar_categories.up.sql +++ /dev/null @@ -1,56 +0,0 @@ -CREATE TABLE IF NOT EXISTS SidebarCategories ( - Id varchar(26) NOT NULL, - UserId varchar(26) DEFAULT NULL, - TeamId varchar(26) DEFAULT NULL, - SortOrder bigint(20) DEFAULT NULL, - Sorting varchar(64) DEFAULT NULL, - Type varchar(64) DEFAULT NULL, - DisplayName varchar(64) DEFAULT NULL, - PRIMARY KEY (Id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SidebarCategories' - AND table_schema = DATABASE() - AND column_name = 'Id' - AND column_type != 'varchar(128)' - ) > 0, - 'ALTER TABLE SidebarCategories MODIFY Id varchar(128);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SidebarCategories' - AND table_schema = DATABASE() - AND column_name = 'Muted' - ) > 0, - 'SELECT 1', - 'ALTER TABLE SidebarCategories ADD COLUMN Muted tinyint(1);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SidebarCategories' - AND table_schema = DATABASE() - AND column_name = 'Collapsed' - ) > 0, - 'SELECT 1', - 'ALTER TABLE SidebarCategories ADD COLUMN Collapsed tinyint(1);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; diff --git a/server/channels/db/migrations/mysql/000041_create_upload_sessions.down.sql b/server/channels/db/migrations/mysql/000041_create_upload_sessions.down.sql deleted file mode 100644 index 283d121ba41..00000000000 --- a/server/channels/db/migrations/mysql/000041_create_upload_sessions.down.sql +++ /dev/null @@ -1,31 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'UploadSessions' - AND table_schema = DATABASE() - AND column_name = 'RemoteId' - ) > 0, - 'ALTER TABLE UploadSessions DROP RemoteId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'UploadSessions' - AND table_schema = DATABASE() - AND column_name = 'ReqFileId' - ) > 0, - 'ALTER TABLE UploadSessions DROP ReqFileId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -DROP TABLE IF EXISTS UploadSessions; diff --git a/server/channels/db/migrations/mysql/000041_create_upload_sessions.up.sql b/server/channels/db/migrations/mysql/000041_create_upload_sessions.up.sql deleted file mode 100644 index f5ce42ef469..00000000000 --- a/server/channels/db/migrations/mysql/000041_create_upload_sessions.up.sql +++ /dev/null @@ -1,104 +0,0 @@ -CREATE TABLE IF NOT EXISTS UploadSessions ( - Id varchar(26) NOT NULL, - Type varchar(32) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - UserId varchar(26) DEFAULT NULL, - ChannelId varchar(26) DEFAULT NULL, - Filename text, - Path text, - FileSize bigint(20) DEFAULT NULL, - FileOffset bigint(20) DEFAULT NULL, - PRIMARY KEY (Id) -); - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'UploadSessions' - AND table_schema = DATABASE() - AND index_name = 'idx_uploadsessions_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_uploadsessions_user_id ON UploadSessions(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'UploadSessions' - AND table_schema = DATABASE() - AND index_name = 'idx_uploadsessions_create_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_uploadsessions_create_at ON UploadSessions(CreateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'UploadSessions' - AND table_schema = DATABASE() - AND index_name = 'idx_uploadsessions_type' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_uploadsessions_type ON UploadSessions(Type);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'UploadSessions' - AND table_schema = DATABASE() - AND column_name = 'RemoteId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE UploadSessions ADD RemoteId varchar(26) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'UploadSessions' - AND table_schema = DATABASE() - AND column_name = 'ReqFileId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE UploadSessions ADD ReqFileId varchar(26) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -CREATE PROCEDURE Migrate_If_Version_Below_5350 () -BEGIN -DECLARE - CURRENT_DB_VERSION TEXT; - SELECT - Value - FROM - Systems - WHERE - Name = 'Version' INTO CURRENT_DB_VERSION; - IF(INET_ATON(CURRENT_DB_VERSION) < INET_ATON('5.35.0')) THEN - UPDATE UploadSessions SET RemoteId='', ReqFileId='' WHERE RemoteId IS NULL; - END IF; -END; - CALL Migrate_If_Version_Below_5350 (); - DROP PROCEDURE IF EXISTS Migrate_If_Version_Below_5350; diff --git a/server/channels/db/migrations/mysql/000042_create_threads.down.sql b/server/channels/db/migrations/mysql/000042_create_threads.down.sql deleted file mode 100644 index 3318314b6c2..00000000000 --- a/server/channels/db/migrations/mysql/000042_create_threads.down.sql +++ /dev/null @@ -1,31 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND index_name = 'idx_threads_channel_id' - ) > 0, - 'DROP INDEX idx_threads_channel_id ON Threads;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND column_name = 'ChannelId' - ) > 0, - 'ALTER TABLE Threads DROP COLUMN ChannelId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -DROP TABLE IF EXISTS Threads; diff --git a/server/channels/db/migrations/mysql/000042_create_threads.up.sql b/server/channels/db/migrations/mysql/000042_create_threads.up.sql deleted file mode 100644 index b7eafe5a013..00000000000 --- a/server/channels/db/migrations/mysql/000042_create_threads.up.sql +++ /dev/null @@ -1,60 +0,0 @@ -CREATE TABLE IF NOT EXISTS Threads ( - PostId varchar(26) NOT NULL, - ReplyCount bigint(20), - LastReplyAt bigint(20), - Participants text, - PRIMARY KEY (PostId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND column_name = 'ChannelId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Threads ADD COLUMN ChannelId VARCHAR(26) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND index_name = 'idx_threads_channel_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_threads_channel_id ON Threads(ChannelId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -CREATE PROCEDURE Migrate_Empty_Threads () -BEGIN -DECLARE - EMPTY_THREADS_EXIST INT; - SELECT - COUNT(*) - FROM - Threads - WHERE - ChannelId IS NULL INTO EMPTY_THREADS_EXIST; - IF(EMPTY_THREADS_EXIST > 0) THEN - UPDATE - Threads - INNER JOIN Posts ON Posts.Id = Threads.PostId - SET - Threads.ChannelId = Posts.ChannelId - WHERE - Threads.ChannelId IS NULL; - END IF; -END; - CALL Migrate_Empty_Threads (); - DROP PROCEDURE IF EXISTS Migrate_Empty_Threads; diff --git a/server/channels/db/migrations/mysql/000043_thread_memberships.down.sql b/server/channels/db/migrations/mysql/000043_thread_memberships.down.sql deleted file mode 100644 index c0f9c77088f..00000000000 --- a/server/channels/db/migrations/mysql/000043_thread_memberships.down.sql +++ /dev/null @@ -1,62 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ThreadMemberships' - AND table_schema = DATABASE() - AND index_name = 'idx_thread_memberships_user_id' - ) > 0, - 'DROP INDEX idx_thread_memberships_user_id ON ThreadMemberships;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ThreadMemberships' - AND table_schema = DATABASE() - AND index_name = 'idx_thread_memberships_last_view_at' - ) > 0, - 'DROP INDEX idx_thread_memberships_last_view_at ON ThreadMemberships;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ThreadMemberships' - AND table_schema = DATABASE() - AND index_name = 'idx_thread_memberships_last_update_at' - ) > 0, - 'DROP INDEX idx_thread_memberships_last_update_at ON ThreadMemberships;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ThreadMemberships' - AND table_schema = DATABASE() - AND column_name = 'UnreadMentions' - ) > 0, - 'ALTER TABLE ThreadMemberships DROP COLUMN UnreadMentions;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -DROP TABLE IF EXISTS ThreadMemberships; diff --git a/server/channels/db/migrations/mysql/000043_thread_memberships.up.sql b/server/channels/db/migrations/mysql/000043_thread_memberships.up.sql deleted file mode 100644 index ae9b668c969..00000000000 --- a/server/channels/db/migrations/mysql/000043_thread_memberships.up.sql +++ /dev/null @@ -1,68 +0,0 @@ -CREATE TABLE IF NOT EXISTS ThreadMemberships ( - PostId varchar(26) NOT NULL, - UserId varchar(26) NOT NULL, - Following tinyint(1), - LastViewed bigint(20) DEFAULT NULL, - LastUpdated bigint(20) DEFAULT NULL, - PRIMARY KEY (PostId, UserId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ThreadMemberships' - AND table_schema = DATABASE() - AND column_name = 'UnreadMentions' - ) > 0, - 'SELECT 1', - 'ALTER TABLE ThreadMemberships ADD UnreadMentions bigint(20) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ThreadMemberships' - AND table_schema = DATABASE() - AND index_name = 'idx_thread_memberships_last_update_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_thread_memberships_last_update_at ON ThreadMemberships(LastUpdated);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ThreadMemberships' - AND table_schema = DATABASE() - AND index_name = 'idx_thread_memberships_last_view_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_thread_memberships_last_view_at ON ThreadMemberships(LastViewed);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ThreadMemberships' - AND table_schema = DATABASE() - AND index_name = 'idx_thread_memberships_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_thread_memberships_user_id ON ThreadMemberships(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000044_create_user_terms_of_service.down.sql b/server/channels/db/migrations/mysql/000044_create_user_terms_of_service.down.sql deleted file mode 100644 index d36f8dc52df..00000000000 --- a/server/channels/db/migrations/mysql/000044_create_user_terms_of_service.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'UserTermsOfService' - AND table_schema = DATABASE() - AND index_name = 'idx_user_terms_of_service_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_user_terms_of_service_user_id ON UserTermsOfService(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -DROP TABLE IF EXISTS UserTermsOfService; diff --git a/server/channels/db/migrations/mysql/000044_create_user_terms_of_service.up.sql b/server/channels/db/migrations/mysql/000044_create_user_terms_of_service.up.sql deleted file mode 100644 index 90ea921489b..00000000000 --- a/server/channels/db/migrations/mysql/000044_create_user_terms_of_service.up.sql +++ /dev/null @@ -1,43 +0,0 @@ -CREATE TABLE IF NOT EXISTS UserTermsOfService ( - UserId varchar(26) NOT NULL, - TermsOfServiceId varchar(26) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - PRIMARY KEY (UserId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -CREATE PROCEDURE MigrateToUserTermsOfServiceTable() -BEGIN - DECLARE COL_EXIST INT; - - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'AcceptedTermsOfServiceId' INTO COL_EXIST; - - IF(COL_EXIST > 0) THEN - INSERT INTO UserTermsOfService - SELECT Id, AcceptedTermsOfServiceId as TermsOfServiceId, ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000) - FROM Users - WHERE AcceptedTermsOfServiceId != '' - AND AcceptedTermsOfServiceId IS NOT NULL; - END IF; -END; - -CALL MigrateToUserTermsOfServiceTable(); - -DROP PROCEDURE IF EXISTS MigrateToUserTermsOfServiceTable; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'UserTermsOfService' - AND table_schema = DATABASE() - AND index_name = 'idx_user_terms_of_service_user_id' - ) > 0, - 'DROP INDEX idx_user_terms_of_service_user_id ON UserTermsOfService;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000045_create_plugin_key_value_store.down.sql b/server/channels/db/migrations/mysql/000045_create_plugin_key_value_store.down.sql deleted file mode 100644 index 414d336ce8f..00000000000 --- a/server/channels/db/migrations/mysql/000045_create_plugin_key_value_store.down.sql +++ /dev/null @@ -1,31 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT Column_Default FROM Information_Schema.Columns - WHERE table_name = 'PluginKeyValueStore' - AND table_schema = DATABASE() - AND column_name = 'ExpireAt' - ) IS NULL, - 'ALTER TABLE PluginKeyValueStore ALTER COLUMN ExpireAt SET DEFAULT 0;', - 'SELECT 1' -)); - -PREPARE alterIfDefaultNull FROM @preparedStatement; -EXECUTE alterIfDefaultNull; -DEALLOCATE PREPARE alterIfDefaultNull; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'PluginKeyValueStore' - AND table_schema = DATABASE() - AND column_name = 'ExpireAt' - ) > 0, - 'ALTER TABLE PluginKeyValueStore DROP COLUMN ExpireAt;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -DROP TABLE IF EXISTS PluginKeyValueStore; diff --git a/server/channels/db/migrations/mysql/000045_create_plugin_key_value_store.up.sql b/server/channels/db/migrations/mysql/000045_create_plugin_key_value_store.up.sql deleted file mode 100644 index 4343f27e2e5..00000000000 --- a/server/channels/db/migrations/mysql/000045_create_plugin_key_value_store.up.sql +++ /dev/null @@ -1,36 +0,0 @@ -CREATE TABLE IF NOT EXISTS PluginKeyValueStore ( - PluginId varchar(190) NOT NULL, - PKey varchar(50) NOT NULL, - PValue mediumblob, - PRIMARY KEY (PluginId, PKey) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'PluginKeyValueStore' - AND table_schema = DATABASE() - AND column_name = 'ExpireAt' - ) > 0, - 'SELECT 1', - 'ALTER TABLE PluginKeyValueStore ADD ExpireAt bigint(20) DEFAULT 0;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT Column_Default FROM Information_Schema.Columns - WHERE table_name = 'PluginKeyValueStore' - AND table_schema = DATABASE() - AND column_name = 'ExpireAt' - ) = 0, - 'ALTER TABLE PluginKeyValueStore ALTER COLUMN ExpireAt SET DEFAULT NULL;', - 'SELECT 1' -)); - -PREPARE alterIfDefaultZero FROM @preparedStatement; -EXECUTE alterIfDefaultZero; -DEALLOCATE PREPARE alterIfDefaultZero; diff --git a/server/channels/db/migrations/mysql/000046_create_users.down.sql b/server/channels/db/migrations/mysql/000046_create_users.down.sql deleted file mode 100644 index e91d3c90a5a..00000000000 --- a/server/channels/db/migrations/mysql/000046_create_users.down.sql +++ /dev/null @@ -1,31 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND index_name = 'idx_users_email' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_users_email ON Users(Email);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'RemoteId' - ) > 0, - 'ALTER TABLE Users DROP RemoteId;', - 'SELECT 1' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -DROP TABLE IF EXISTS Users; diff --git a/server/channels/db/migrations/mysql/000046_create_users.up.sql b/server/channels/db/migrations/mysql/000046_create_users.up.sql deleted file mode 100644 index f279c44ca69..00000000000 --- a/server/channels/db/migrations/mysql/000046_create_users.up.sql +++ /dev/null @@ -1,286 +0,0 @@ -CREATE TABLE IF NOT EXISTS Users ( - Id varchar(26) NOT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - Username varchar(64) DEFAULT NULL, - Password varchar(128) DEFAULT NULL, - AuthData varchar(128) DEFAULT NULL, - AuthService varchar(32) DEFAULT NULL, - Email varchar(128) DEFAULT NULL, - EmailVerified tinyint(1), - Nickname varchar(64) DEFAULT NULL, - FirstName varchar(64) DEFAULT NULL, - LastName varchar(64) DEFAULT NULL, - Roles varchar(256) DEFAULT NULL, - AllowMarketing tinyint(1), - Props text, - NotifyProps text, - LastPasswordUpdate bigint(20) DEFAULT NULL, - LastPictureUpdate bigint(20) DEFAULT NULL, - FailedAttempts integer, - Locale varchar(5) DEFAULT NULL, - MfaActive tinyint(1), - MfaSecret varchar(128) DEFAULT NULL, - PRIMARY KEY (Id), - UNIQUE KEY Username (Username), - UNIQUE KEY AuthData (AuthData), - UNIQUE KEY Email (Email) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'LastActivityAt' - ) > 0, - 'ALTER TABLE Users DROP COLUMN LastActivityAt;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'LastPingAt' - ) > 0, - 'ALTER TABLE Users DROP COLUMN LastPingAt;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -CREATE PROCEDURE Migrate_If_Version_Below_350 () -BEGIN -DECLARE - CURRENT_DB_VERSION TEXT; - SELECT - Value - FROM - Systems - WHERE - Name = 'Version' INTO CURRENT_DB_VERSION; - IF(INET_ATON(CURRENT_DB_VERSION) < INET_ATON('3.5.0')) THEN - UPDATE Users SET Roles = 'system_user' WHERE Roles = ''; - UPDATE Users SET Roles = 'system_user system_admin' WHERE Roles = 'system_admin'; - END IF; -END; - CALL Migrate_If_Version_Below_350 (); - DROP PROCEDURE IF EXISTS Migrate_If_Version_Below_350; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'Position' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Users ADD Position varchar(128) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'Timezone' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Users ADD Timezone varchar(256) DEFAULT \'{"automaticTimezone":"","manualTimezone":"","useAutomaticTimezone":"true"}\';' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'Position' - ) > 0, - 'ALTER TABLE Users MODIFY Position varchar(128);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -CREATE PROCEDURE Migrate_If_Version_Below_4100 () -BEGIN -DECLARE - CURRENT_DB_VERSION TEXT; - SELECT - Value - FROM - Systems - WHERE - Name = 'Version' INTO CURRENT_DB_VERSION; - IF(INET_ATON(CURRENT_DB_VERSION) < INET_ATON('4.10.0')) THEN - UPDATE Users SET AuthData=LOWER(AuthData) WHERE AuthService = 'saml'; - END IF; -END; - CALL Migrate_If_Version_Below_4100 (); - DROP PROCEDURE IF EXISTS Migrate_If_Version_Below_4100; - -SET @preparedStatement = (SELECT IF( - ( - SELECT MIN(CHAR_LENGTH(Roles)) - MAX(CHAR_LENGTH(Roles)) - FROM Users - ) != 0, - 'ALTER TABLE Users MODIFY Roles varchar(256);', - 'SELECT 1' -)); - -PREPARE updateIfMismatch FROM @preparedStatement; -EXECUTE updateIfMismatch; -DEALLOCATE PREPARE updateIfMismatch; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND index_name = 'idx_users_update_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_users_update_at ON Users(UpdateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND index_name = 'idx_users_create_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_users_create_at ON Users(CreateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND index_name = 'idx_users_delete_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_users_delete_at ON Users(DeleteAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND index_name = 'idx_users_all_txt' - ) > 0, - 'SELECT 1', - 'CREATE FULLTEXT INDEX idx_users_all_txt ON Users(Username, FirstName, LastName, Nickname, Email);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND index_name = 'idx_users_all_no_full_name_txt' - ) > 0, - 'SELECT 1', - 'CREATE FULLTEXT INDEX idx_users_all_no_full_name_txt ON Users(Username, Nickname, Email);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND index_name = 'idx_users_names_txt' - ) > 0, - 'SELECT 1', - 'CREATE FULLTEXT INDEX idx_users_names_txt ON Users(Username, FirstName, LastName, Nickname);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND index_name = 'idx_users_names_no_full_name_txt' - ) > 0, - 'SELECT 1', - 'CREATE FULLTEXT INDEX idx_users_names_no_full_name_txt ON Users(Username, Nickname);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'RemoteId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Users ADD RemoteId VARCHAR(26);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND index_name = 'idx_users_email' - ) > 0, - 'DROP INDEX idx_users_email ON Users;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000047_create_file_info.down.sql b/server/channels/db/migrations/mysql/000047_create_file_info.down.sql deleted file mode 100644 index 38b185da6cb..00000000000 --- a/server/channels/db/migrations/mysql/000047_create_file_info.down.sql +++ /dev/null @@ -1,91 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND column_name = 'RemoteId' - ) > 0, - 'ALTER TABLE FileInfo DROP COLUMN RemoteId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND index_name = 'idx_fileinfo_content_txt' - ) > 0, - 'DROP INDEX idx_fileinfo_content_txt ON FileInfo;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND column_name = 'Content' - ) > 0, - 'ALTER TABLE FileInfo DROP COLUMN Content;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND column_name = 'MiniPreview' - ) > 0, - 'ALTER TABLE FileInfo DROP COLUMN MiniPreview;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND index_name = 'idx_fileinfo_name_txt' - ) > 0, - 'DROP INDEX idx_fileinfo_name_txt ON FileInfo;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND index_name = 'idx_fileinfo_extension_at' - ) > 0, - 'DROP INDEX idx_fileinfo_extension_at ON FileInfo;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -DROP TABLE IF EXISTS FileInfo; diff --git a/server/channels/db/migrations/mysql/000047_create_file_info.up.sql b/server/channels/db/migrations/mysql/000047_create_file_info.up.sql deleted file mode 100644 index da37d20e5e4..00000000000 --- a/server/channels/db/migrations/mysql/000047_create_file_info.up.sql +++ /dev/null @@ -1,113 +0,0 @@ -CREATE TABLE IF NOT EXISTS FileInfo ( - Id varchar(26) NOT NULL, - CreatorId varchar(26) DEFAULT NULL, - PostId varchar(26) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - Path text, - ThumbnailPath text, - PreviewPath text, - Name text, - Extension varchar(64) DEFAULT NULL, - Size bigint(20) DEFAULT NULL, - MimeType text, - Width int(11) DEFAULT NULL, - Height int(11) DEFAULT NULL, - HasPreviewImage tinyint(1) DEFAULT NULL, - PRIMARY KEY (Id), - KEY idx_fileinfo_update_at (UpdateAt), - KEY idx_fileinfo_create_at (CreateAt), - KEY idx_fileinfo_delete_at (DeleteAt), - KEY idx_fileinfo_postid_at (PostId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND index_name = 'idx_fileinfo_extension_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_fileinfo_extension_at ON FileInfo (Extension);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND index_name = 'idx_fileinfo_name_txt' - ) > 0, - 'SELECT 1', - 'CREATE FULLTEXT INDEX idx_fileinfo_name_txt ON FileInfo (Name);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND column_name = 'MiniPreview' - ) > 0, - 'SELECT 1', - 'ALTER TABLE FileInfo ADD MiniPreview mediumblob;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND column_name = 'Content' - ) > 0, - 'SELECT 1', - 'ALTER TABLE FileInfo ADD Content longtext;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND index_name = 'idx_fileinfo_content_txt' - ) > 0, - 'SELECT 1', - 'CREATE FULLTEXT INDEX idx_fileinfo_content_txt ON FileInfo (Content);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND column_name = 'RemoteId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE FileInfo ADD COLUMN RemoteId varchar(26);' -)); - -PREPARE alterNotIfExists FROM @preparedStatement; -EXECUTE alterNotIfExists; -DEALLOCATE PREPARE alterNotIfExists; diff --git a/server/channels/db/migrations/mysql/000048_create_oauth_apps.down.sql b/server/channels/db/migrations/mysql/000048_create_oauth_apps.down.sql deleted file mode 100644 index 5aeb019a400..00000000000 --- a/server/channels/db/migrations/mysql/000048_create_oauth_apps.down.sql +++ /dev/null @@ -1,46 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthApps' - AND table_schema = DATABASE() - AND column_name = 'IconURL' - ) > 0, - 'ALTER TABLE OAuthApps DROP COLUMN IconURL;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthApps' - AND table_schema = DATABASE() - AND column_name = 'IsTrusted' - ) > 0, - 'ALTER TABLE OAuthApps DROP COLUMN IsTrusted;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'OAuthApps' - AND table_schema = DATABASE() - AND index_name = 'idx_oauthapps_creator_id' - ) > 0, - 'DROP INDEX idx_oauthapps_creator_id ON OAuthApps;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -DROP TABLE IF EXISTS OAuthApps; diff --git a/server/channels/db/migrations/mysql/000048_create_oauth_apps.up.sql b/server/channels/db/migrations/mysql/000048_create_oauth_apps.up.sql deleted file mode 100644 index 0757d6f0a3a..00000000000 --- a/server/channels/db/migrations/mysql/000048_create_oauth_apps.up.sql +++ /dev/null @@ -1,57 +0,0 @@ -CREATE TABLE IF NOT EXISTS OAuthApps ( - Id varchar(26) NOT NULL, - CreatorId varchar(26) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - ClientSecret varchar(128) DEFAULT NULL, - Name varchar(64) DEFAULT NULL, - Description text, - CallbackUrls text, - Homepage text, - PRIMARY KEY (Id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'OAuthApps' - AND table_schema = DATABASE() - AND index_name = 'idx_oauthapps_creator_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_oauthapps_creator_id ON OAuthApps(CreatorId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthApps' - AND table_schema = DATABASE() - AND column_name = 'IsTrusted' - ) > 0, - 'SELECT 1', - 'ALTER TABLE OAuthApps ADD IsTrusted tinyint(1) DEFAULT NULL;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthApps' - AND table_schema = DATABASE() - AND column_name = 'IconURL' - ) > 0, - 'SELECT 1', - 'ALTER TABLE OAuthApps ADD IconURL text;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; diff --git a/server/channels/db/migrations/mysql/000049_create_channels.down.sql b/server/channels/db/migrations/mysql/000049_create_channels.down.sql deleted file mode 100644 index 017bd069e83..00000000000 --- a/server/channels/db/migrations/mysql/000049_create_channels.down.sql +++ /dev/null @@ -1,136 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_name' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_channels_name ON Channels(Name);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'Shared' - ) > 0, - 'ALTER TABLE Channels DROP COLUMN Shared;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_scheme_id' - ) > 0, - 'DROP INDEX idx_channels_scheme_id ON Channels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT column_type FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'GroupConstrained' - ) != 'tinyint(4)', - 'ALTER TABLE Channels MODIFY GroupConstrained tinyint(4);', - 'SELECT 1' -)); - -PREPARE alterIfTypeDifferent FROM @preparedStatement; -EXECUTE alterIfTypeDifferent; -DEALLOCATE PREPARE alterIfTypeDifferent; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'GroupConstrained' - ) > 0, - 'ALTER TABLE Channels DROP COLUMN GroupConstrained;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_txt' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_channels_txt ON Channels(Name,DisplayName);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'SchemeId' - ) > 0, - 'ALTER TABLE Channels DROP COLUMN SchemeId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_displayname' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_channels_displayname ON Channels(DisplayName);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT column_type FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'Purpose' - ) != 'varchar(64)', - 'ALTER TABLE Channels MODIFY Purpose varchar(64);', - 'SELECT 1' -)); - -PREPARE alterIfTypeDifferent FROM @preparedStatement; -EXECUTE alterIfTypeDifferent; -DEALLOCATE PREPARE alterIfTypeDifferent; - -DROP TABLE IF EXISTS Channels; diff --git a/server/channels/db/migrations/mysql/000049_create_channels.up.sql b/server/channels/db/migrations/mysql/000049_create_channels.up.sql deleted file mode 100644 index 8581acf5196..00000000000 --- a/server/channels/db/migrations/mysql/000049_create_channels.up.sql +++ /dev/null @@ -1,175 +0,0 @@ -CREATE TABLE IF NOT EXISTS Channels ( - Id varchar(26) NOT NULL, - CreateAt bigint(20), - UpdateAt bigint(20), - DeleteAt bigint(20), - TeamId varchar(26), - Type varchar(1), - DisplayName varchar(64), - Name varchar(64), - Header text, - Purpose varchar(128), - LastPostAt bigint(20), - TotalMsgCount bigint(20), - ExtraUpdateAt bigint(20), - CreatorId varchar(26), - PRIMARY KEY (Id), - UNIQUE KEY Name (Name, TeamId), - KEY idx_channels_team_id (TeamId), - KEY idx_channels_name (Name), - KEY idx_channels_update_at (UpdateAt), - KEY idx_channels_create_at (CreateAt), - KEY idx_channels_delete_at (DeleteAt), - KEY idx_channels_displayname (DisplayName), - FULLTEXT KEY idx_channels_txt (Name,DisplayName) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT column_type FROM Information_Schema.Columns - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'Purpose' - ) != 'varchar(250)', - 'ALTER TABLE Channels MODIFY Purpose varchar(250)', - 'SELECT 1' -)); - -PREPARE alterIfTypeDifferent FROM @preparedStatement; -EXECUTE alterIfTypeDifferent; -DEALLOCATE PREPARE alterIfTypeDifferent; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_displayname' - ) > 0, - 'DROP INDEX idx_channels_displayname ON Channels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'SchemeId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Channels ADD COLUMN SchemeId varchar(26);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_txt' - ) > 0, - 'DROP INDEX idx_channels_txt ON Channels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'GroupConstrained' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Channels ADD COLUMN GroupConstrained tinyint(4);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT column_type FROM Information_Schema.Columns - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'GroupConstrained' - ) != 'tinyint(1)', - 'ALTER TABLE Channels MODIFY GroupConstrained tinyint(1)', - 'SELECT 1' -)); - -PREPARE alterIfTypeDifferent FROM @preparedStatement; -EXECUTE alterIfTypeDifferent; -DEALLOCATE PREPARE alterIfTypeDifferent; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_scheme_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_channels_scheme_id ON Channels(SchemeId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channel_search_txt' - ) > 0, - 'SELECT 1', - 'CREATE FULLTEXT INDEX idx_channel_search_txt ON Channels(Name,DisplayName,Purpose);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'Shared' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Channels ADD COLUMN Shared tinyint(1);' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_name' - ) > 0, - 'DROP INDEX idx_channels_name ON Channels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000050_create_channelmembers.down.sql b/server/channels/db/migrations/mysql/000050_create_channelmembers.down.sql deleted file mode 100644 index de05b626d35..00000000000 --- a/server/channels/db/migrations/mysql/000050_create_channelmembers.down.sql +++ /dev/null @@ -1,76 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_channelmembers_channel_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_channelmembers_channel_id ON ChannelMembers(ChannelId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'SchemeGuest' - ) > 0, - 'ALTER TABLE ChannelMembers DROP COLUMN SchemeGuest;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'SchemeAdmin' - ) > 0, - 'ALTER TABLE ChannelMembers DROP COLUMN SchemeAdmin;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'SchemeUser' - ) > 0, - 'ALTER TABLE ChannelMembers DROP COLUMN SchemeUser;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_channelmembers_user_id' - ) > 0, - 'DROP INDEX idx_channelmembers_user_id ON ChannelMembers;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -DROP TABLE IF EXISTS ChannelMembers; diff --git a/server/channels/db/migrations/mysql/000050_create_channelmembers.up.sql b/server/channels/db/migrations/mysql/000050_create_channelmembers.up.sql deleted file mode 100644 index c82fb48fad0..00000000000 --- a/server/channels/db/migrations/mysql/000050_create_channelmembers.up.sql +++ /dev/null @@ -1,86 +0,0 @@ -CREATE TABLE IF NOT EXISTS ChannelMembers ( - ChannelId varchar(26) NOT NULL, - UserId varchar(26) NOT NULL, - Roles varchar(64), - LastViewedAt bigint(20), - MsgCount bigint(20), - MentionCount bigint(20), - NotifyProps text, - LastUpdateAt bigint(20), - PRIMARY KEY (ChannelId, UserId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_channelmembers_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_channelmembers_user_id ON ChannelMembers(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'SchemeUser' - ) > 0, - 'SELECT 1', - 'ALTER TABLE ChannelMembers ADD COLUMN SchemeUser tinyint(4);' -- this was tinyint(4) on my instance -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'SchemeAdmin' - ) > 0, - 'SELECT 1', - 'ALTER TABLE ChannelMembers ADD COLUMN SchemeAdmin tinyint(4);' -- this was tinyint(4) on my instance -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'SchemeGuest' - ) > 0, - 'SELECT 1', - 'ALTER TABLE ChannelMembers ADD COLUMN SchemeGuest tinyint(4);' -- this was tinyint(4) on my instance -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_channelmembers_channel_id' - ) > 0, - 'DROP INDEX idx_channelmembers_channel_id ON ChannelMembers;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000051_create_msg_root_count.down.sql b/server/channels/db/migrations/mysql/000051_create_msg_root_count.down.sql deleted file mode 100644 index 0bca846ab50..00000000000 --- a/server/channels/db/migrations/mysql/000051_create_msg_root_count.down.sql +++ /dev/null @@ -1,44 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'MsgCountRoot' - ) > 0, - 'ALTER TABLE ChannelMembers DROP COLUMN MsgCountRoot;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'MentionCountRoot' - ) > 0, - 'ALTER TABLE ChannelMembers DROP COLUMN MentionCountRoot;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'TotalMsgCountRoot' - ) > 0, - 'ALTER TABLE Channels DROP COLUMN TotalMsgCountRoot;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000051_create_msg_root_count.up.sql b/server/channels/db/migrations/mysql/000051_create_msg_root_count.up.sql deleted file mode 100644 index 6654b9b83c4..00000000000 --- a/server/channels/db/migrations/mysql/000051_create_msg_root_count.up.sql +++ /dev/null @@ -1,126 +0,0 @@ -CREATE PROCEDURE MigrateRootMentionCount () BEGIN DECLARE MentionCountRoot_EXIST INT; DECLARE MsgCountRoot_EXIST INT; -SELECT COUNT(*) -FROM INFORMATION_SCHEMA.COLUMNS -WHERE TABLE_NAME = 'Channels' - AND table_schema = DATABASE() - AND COLUMN_NAME = 'TotalMsgCountRoot' INTO MsgCountRoot_EXIST; -SELECT COUNT(*) -FROM INFORMATION_SCHEMA.COLUMNS -WHERE TABLE_NAME = 'ChannelMembers' - AND table_schema = DATABASE() - AND COLUMN_NAME = 'MsgCountRoot' INTO MentionCountRoot_EXIST; - -SET @tmp_count_root := 0; - IF(MentionCountRoot_EXIST = 1) THEN - SELECT @tmp_count_root := COUNT(*) - FROM ChannelMembers - WHERE MsgCountRoot IS NULL - OR MentionCountRoot IS NULL; -END IF; - -SET @preparedStatement = - (SELECT IF( - (SELECT COUNT(*) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_NAME = 'ChannelMembers' - AND table_schema = DATABASE() - AND COLUMN_NAME = 'MentionCountRoot') > 0, 'SELECT 1', 'ALTER TABLE ChannelMembers ADD COLUMN MentionCountRoot bigint(20);')); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -IF(@tmp_count_root > 0) THEN -UPDATE ChannelMembers -INNER JOIN - (SELECT ChannelId, - COALESCE(SUM(UnreadMentions), 0) AS UnreadMentions, - UserId - FROM ThreadMemberships - LEFT JOIN Threads ON ThreadMemberships.PostId = Threads.PostId - GROUP BY Threads.ChannelId, - ThreadMemberships.UserId) AS q ON q.ChannelId = ChannelMembers.ChannelId -AND q.UserId = ChannelMembers.UserId -AND ChannelMembers.MentionCount > 0 -SET MentionCountRoot = ChannelMembers.MentionCount - q.UnreadMentions; -END IF; - -SET @preparedStatement = - (SELECT IF( - (SELECT COUNT(*) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_NAME = 'Channels' - AND table_schema = DATABASE() - AND COLUMN_NAME = 'TotalMsgCountRoot') > 0, 'SELECT 1', 'ALTER TABLE Channels ADD COLUMN TotalMsgCountRoot bigint(20);')); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = - (SELECT IF( - (SELECT COUNT(*) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_NAME = 'Channels' - AND table_schema = DATABASE() - AND COLUMN_NAME = 'LastRootAt') > 0, 'SELECT 1', 'ALTER TABLE Channels ADD COLUMN LastRootAt bigint(20);')); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = - (SELECT IF( - (SELECT COUNT(*) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_NAME = 'ChannelMembers' - AND table_schema = DATABASE() - AND COLUMN_NAME = 'MsgCountRoot') > 0, 'SELECT 1', 'ALTER TABLE ChannelMembers ADD COLUMN MsgCountRoot bigint(20);')); -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -IF(MsgCountRoot_EXIST = 0) THEN -UPDATE Channels -INNER JOIN - (SELECT Channels.Id channelid, - COALESCE(COUNT(*), 0) newcount, - COALESCE(MAX(Posts.CreateAt), 0) AS lastpost - FROM Channels - LEFT JOIN Posts - FORCE INDEX (idx_posts_channel_id_update_at) ON Channels.Id = Posts.ChannelId - WHERE Posts.RootId = '' - GROUP BY Channels.Id) AS q ON q.channelid = Channels.Id -SET TotalMsgCountRoot = q.newcount, - LastRootAt = q.lastpost; -END IF; - -IF(MentionCountRoot_EXIST = 0) THEN -UPDATE ChannelMembers CM -INNER JOIN - (SELECT TotalMsgCountRoot, - Id, - LastRootAt - FROM Channels) AS q ON q.id = CM.ChannelId -AND LastViewedAt >= q.lastrootat -SET MsgCountRoot = TotalMsgCountRoot; -END IF; - -SET @preparedStatement = - (SELECT IF( - (SELECT COUNT(*) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_NAME = 'Channels' - AND table_schema = DATABASE() - AND COLUMN_NAME = 'LastRootAt' ) > 0, 'ALTER TABLE Channels DROP COLUMN LastRootAt;', 'SELECT 1')); - -PREPARE alterIfExists -FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -END; - -CALL MigrateRootMentionCount (); - -DROP PROCEDURE IF EXISTS MigrateRootMentionCount; diff --git a/server/channels/db/migrations/mysql/000052_create_public_channels.down.sql b/server/channels/db/migrations/mysql/000052_create_public_channels.down.sql deleted file mode 100644 index 15433e21314..00000000000 --- a/server/channels/db/migrations/mysql/000052_create_public_channels.down.sql +++ /dev/null @@ -1,77 +0,0 @@ - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PublicChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_publicchannels_name' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_publicchannels_name ON PublicChannels(name);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PublicChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_publicchannels_search_txt' - ) > 0, - 'DROP INDEX idx_publicchannels_search_txt ON PublicChannels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PublicChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_publicchannels_delete_at' - ) > 0, - 'DROP INDEX idx_publicchannels_delete_at ON PublicChannels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PublicChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_publicchannels_name' - ) > 0, - 'DROP INDEX idx_publicchannels_name ON PublicChannels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PublicChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_publicchannels_team_id' - ) > 0, - 'DROP INDEX idx_publicchannels_team_id ON PublicChannels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -DROP TABLE IF EXISTS PublicChannels; diff --git a/server/channels/db/migrations/mysql/000052_create_public_channels.up.sql b/server/channels/db/migrations/mysql/000052_create_public_channels.up.sql deleted file mode 100644 index fafed65b2da..00000000000 --- a/server/channels/db/migrations/mysql/000052_create_public_channels.up.sql +++ /dev/null @@ -1,109 +0,0 @@ -CREATE TABLE IF NOT EXISTS PublicChannels ( - Id varchar(26) NOT NULL, - DeleteAt bigint(20) DEFAULT NULL, - TeamId varchar(26) DEFAULT NULL, - DisplayName varchar(64) DEFAULT NULL, - Name varchar(64) DEFAULT NULL, - Header text, - Purpose varchar(250) DEFAULT NULL, - PRIMARY KEY (Id), - UNIQUE KEY Name (Name, TeamId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PublicChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_publicchannels_team_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_publicchannels_team_id ON PublicChannels(TeamId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PublicChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_publicchannels_name' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_publicchannels_name ON PublicChannels(Name);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PublicChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_publicchannels_delete_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_publicchannels_delete_at ON PublicChannels(DeleteAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PublicChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_publicchannels_search_txt' - ) > 0, - 'SELECT 1', - 'CREATE FULLTEXT INDEX idx_publicchannels_search_txt ON PublicChannels(Name, DisplayName, Purpose);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -CREATE PROCEDURE MigratePC () -BEGIN DECLARE - PublicChannels_Count INT; - SELECT - COUNT(*) - FROM - PublicChannels INTO PublicChannels_Count; - IF(PublicChannels_Count = 0) THEN - INSERT INTO PublicChannels (Id, DeleteAt, TeamId, DisplayName, Name, Header, Purpose) - SELECT - c.Id, c.DeleteAt, c.TeamId, c.DisplayName, c.Name, c.Header, c.Purpose - FROM - Channels c - LEFT JOIN PublicChannels pc ON (pc.Id = c.Id) - WHERE - c.Type = 'O' AND pc.Id IS NULL; - END IF; -END; - -CALL MigratePC(); - -DROP PROCEDURE IF EXISTS MigratePC; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PublicChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_publicchannels_name' - ) > 0, - 'DROP INDEX idx_publicchannels_name ON PublicChannels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000053_create_retention_policies.down.sql b/server/channels/db/migrations/mysql/000053_create_retention_policies.down.sql deleted file mode 100644 index 0961167a70c..00000000000 --- a/server/channels/db/migrations/mysql/000053_create_retention_policies.down.sql +++ /dev/null @@ -1,93 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'RetentionPolicies' - AND table_schema = DATABASE() - AND index_name = 'IDX_RetentionPolicies_DisplayName' - ) > 0, - 'DROP INDEX IDX_RetentionPolicies_DisplayName ON RetentionPolicies;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'RetentionPolicies' - AND table_schema = DATABASE() - AND index_name = 'IDX_RetentionPolicies_DisplayName_Id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX IDX_RetentionPolicies_DisplayName_Id ON RetentionPolicies(DisplayName, Id);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS - WHERE constraint_schema = DATABASE() - AND constraint_name = 'FK_RetentionPoliciesChannels_RetentionPolicies' - AND constraint_type = 'FOREIGN KEY' - ) > 0, - 'ALTER TABLE RetentionPoliciesChannels DROP FOREIGN KEY FK_RetentionPoliciesChannels_RetentionPolicies', - 'SELECT 1;' -)); - -PREPARE dropForeignKeyIfNotExists FROM @preparedStatement; -EXECUTE dropForeignKeyIfNotExists; -DEALLOCATE PREPARE dropForeignKeyIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS - WHERE constraint_schema = DATABASE() - AND constraint_name = 'FK_RetentionPoliciesTeams_RetentionPolicies' - AND constraint_type = 'FOREIGN KEY' - ) > 0, - 'ALTER TABLE RetentionPoliciesTeams DROP FOREIGN KEY FK_RetentionPoliciesTeams_RetentionPolicies', - 'SELECT 1;' -)); - -PREPARE dropForeignKeyIfNotExists FROM @preparedStatement; -EXECUTE dropForeignKeyIfNotExists; -DEALLOCATE PREPARE dropForeignKeyIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'RetentionPoliciesChannels' - AND table_schema = DATABASE() - AND index_name = 'IDX_RetentionPoliciesChannels_PolicyId' - ) > 0, - 'DROP INDEX IDX_RetentionPoliciesChannels_PolicyId ON RetentionPoliciesChannels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'RetentionPoliciesTeams' - AND table_schema = DATABASE() - AND index_name = 'IDX_RetentionPoliciesTeams_PolicyId' - ) > 0, - 'DROP INDEX IDX_RetentionPoliciesTeams_PolicyId ON RetentionPoliciesTeams;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -DROP TABLE IF EXISTS RetentionPoliciesChannels; -DROP TABLE IF EXISTS RetentionPoliciesTeams; -DROP TABLE IF EXISTS RetentionPolicies; diff --git a/server/channels/db/migrations/mysql/000053_create_retention_policies.up.sql b/server/channels/db/migrations/mysql/000053_create_retention_policies.up.sql deleted file mode 100644 index 4e63aa012ac..00000000000 --- a/server/channels/db/migrations/mysql/000053_create_retention_policies.up.sql +++ /dev/null @@ -1,109 +0,0 @@ -CREATE TABLE IF NOT EXISTS RetentionPolicies ( - Id varchar(26) NOT NULL, - DisplayName varchar(64) DEFAULT NULL, - PostDuration bigint(20) DEFAULT NULL, - PRIMARY KEY (Id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -CREATE TABLE IF NOT EXISTS RetentionPoliciesTeams ( - PolicyId varchar(26) DEFAULT NULL, - TeamId varchar(26) NOT NULL, - PRIMARY KEY (TeamId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -CREATE TABLE IF NOT EXISTS RetentionPoliciesChannels ( - PolicyId varchar(26) DEFAULT NULL, - ChannelId varchar(26) NOT NULL, - PRIMARY KEY (ChannelId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS - WHERE constraint_schema = DATABASE() - AND constraint_name = 'FK_RetentionPoliciesTeams_RetentionPolicies' - AND constraint_type = 'FOREIGN KEY' - ) > 0, - 'SELECT 1', - 'ALTER TABLE RetentionPoliciesTeams ADD CONSTRAINT FK_RetentionPoliciesTeams_RetentionPolicies FOREIGN KEY (PolicyId) REFERENCES RetentionPolicies (Id) ON DELETE CASCADE;' -)); - -PREPARE createForeignKeyIfNotExists FROM @preparedStatement; -EXECUTE createForeignKeyIfNotExists; -DEALLOCATE PREPARE createForeignKeyIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS - WHERE constraint_schema = DATABASE() - AND constraint_name = 'FK_RetentionPoliciesChannels_RetentionPolicies' - AND constraint_type = 'FOREIGN KEY' - ) > 0, - 'SELECT 1', - 'ALTER TABLE RetentionPoliciesChannels ADD CONSTRAINT FK_RetentionPoliciesChannels_RetentionPolicies FOREIGN KEY (PolicyId) REFERENCES RetentionPolicies (Id) ON DELETE CASCADE;' -)); - -PREPARE createForeignKeyIfNotExists FROM @preparedStatement; -EXECUTE createForeignKeyIfNotExists; -DEALLOCATE PREPARE createForeignKeyIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'RetentionPoliciesTeams' - AND table_schema = DATABASE() - AND index_name = 'IDX_RetentionPoliciesTeams_PolicyId' - ) > 0, - 'SELECT 1', - 'CREATE INDEX IDX_RetentionPoliciesTeams_PolicyId ON RetentionPoliciesTeams(PolicyId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'RetentionPoliciesChannels' - AND table_schema = DATABASE() - AND index_name = 'IDX_RetentionPoliciesChannels_PolicyId' - ) > 0, - 'SELECT 1', - 'CREATE INDEX IDX_RetentionPoliciesChannels_PolicyId ON RetentionPoliciesChannels(PolicyId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'RetentionPolicies' - AND table_schema = DATABASE() - AND index_name = 'IDX_RetentionPolicies_DisplayName_Id' - ) > 0, - 'DROP INDEX IDX_RetentionPolicies_DisplayName_Id ON RetentionPolicies;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'RetentionPolicies' - AND table_schema = DATABASE() - AND index_name = 'IDX_RetentionPolicies_DisplayName' - ) > 0, - 'SELECT 1', - 'CREATE INDEX IDX_RetentionPolicies_DisplayName ON RetentionPolicies(DisplayName);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000054_create_crt_channelmembership_count.down.sql b/server/channels/db/migrations/mysql/000054_create_crt_channelmembership_count.down.sql deleted file mode 100644 index eb3e8d4e9ad..00000000000 --- a/server/channels/db/migrations/mysql/000054_create_crt_channelmembership_count.down.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE PROCEDURE ClearCRTChannelMembershipCounts () -BEGIN - IF(( - SELECT - COUNT(*) FROM Systems - WHERE - Name = 'CRTChannelMembershipCountsMigrationComplete') > 0) THEN - DELETE FROM Systems - WHERE Name = 'CRTChannelMembershipCountsMigrationComplete'; - END IF; -END; - -CALL ClearCRTChannelMembershipCounts (); - -DROP PROCEDURE IF EXISTS ClearCRTChannelMembershipCounts; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000054_create_crt_channelmembership_count.up.sql b/server/channels/db/migrations/mysql/000054_create_crt_channelmembership_count.up.sql deleted file mode 100644 index a67373298c3..00000000000 --- a/server/channels/db/migrations/mysql/000054_create_crt_channelmembership_count.up.sql +++ /dev/null @@ -1,27 +0,0 @@ -/* fixCRTChannelMembershipCounts fixes the channel counts, i.e. the total message count, -total root message count, mention count, and mention count in root messages for users -who have viewed the channel after the last post in the channel */ - -CREATE PROCEDURE MigrateCRTChannelMembershipCounts () -BEGIN - IF( - SELECT - EXISTS ( - SELECT - * FROM Systems - WHERE - Name = 'CRTChannelMembershipCountsMigrationComplete') = 0) THEN - UPDATE - ChannelMembers - INNER JOIN Channels ON Channels.Id = ChannelMembers.ChannelId SET - MentionCount = 0, MentionCountRoot = 0, MsgCount = Channels.TotalMsgCount, MsgCountRoot = Channels.TotalMsgCountRoot, LastUpdateAt = ( - SELECT - (SELECT ROUND(UNIX_TIMESTAMP(NOW(3))*1000))) - WHERE - ChannelMembers.LastViewedAt >= Channels.LastPostAt; - INSERT INTO Systems - VALUES('CRTChannelMembershipCountsMigrationComplete', 'true'); - END IF; -END; - CALL MigrateCRTChannelMembershipCounts (); - DROP PROCEDURE IF EXISTS MigrateCRTChannelMembershipCounts; diff --git a/server/channels/db/migrations/mysql/000055_create_crt_thread_count_and_unreads.down.sql b/server/channels/db/migrations/mysql/000055_create_crt_thread_count_and_unreads.down.sql deleted file mode 100644 index 3b0a42951f6..00000000000 --- a/server/channels/db/migrations/mysql/000055_create_crt_thread_count_and_unreads.down.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE PROCEDURE ClearCRTThreadCountsAndUnreads () -BEGIN - IF(( - SELECT - COUNT(*) FROM Systems - WHERE - Name = 'CRTThreadCountsAndUnreadsMigrationComplete') > 0) THEN - DELETE FROM Systems - WHERE Name = 'CRTThreadCountsAndUnreadsMigrationComplete'; - END IF; -END; - -CALL ClearCRTThreadCountsAndUnreads (); - -DROP PROCEDURE IF EXISTS ClearCRTThreadCountsAndUnreads; diff --git a/server/channels/db/migrations/mysql/000055_create_crt_thread_count_and_unreads.up.sql b/server/channels/db/migrations/mysql/000055_create_crt_thread_count_and_unreads.up.sql deleted file mode 100644 index 3377b207231..00000000000 --- a/server/channels/db/migrations/mysql/000055_create_crt_thread_count_and_unreads.up.sql +++ /dev/null @@ -1,31 +0,0 @@ -/* fixCRTThreadCountsAndUnreads Marks threads as read for users where the last -reply time of the thread is earlier than the time the user viewed the channel. -Marking a thread means setting the mention count to zero and setting the -last viewed at time of the the thread as the last viewed at time -of the channel */ - -CREATE PROCEDURE MigrateCRTThreadCountsAndUnreads () -BEGIN - IF(SELECT EXISTS(SELECT * FROM Systems WHERE Name = 'CRTThreadCountsAndUnreadsMigrationComplete') = 0) THEN - UPDATE - ThreadMemberships - INNER JOIN ( - SELECT - PostId, - UserId, - ChannelMembers.LastViewedAt AS CM_LastViewedAt, - Threads.LastReplyAt - FROM - Threads - INNER JOIN ChannelMembers ON ChannelMembers.ChannelId = Threads.ChannelId - WHERE - Threads.LastReplyAt <= ChannelMembers.LastViewedAt) AS q ON ThreadMemberships.Postid = q.PostId - AND ThreadMemberships.UserId = q.UserId SET LastViewed = q.CM_LastViewedAt + 1, UnreadMentions = 0, LastUpdated = ( - SELECT - (SELECT ROUND(UNIX_TIMESTAMP(NOW(3))*1000))); - INSERT INTO Systems - VALUES('CRTThreadCountsAndUnreadsMigrationComplete', 'true'); - END IF; -END; - CALL MigrateCRTThreadCountsAndUnreads (); - DROP PROCEDURE IF EXISTS MigrateCRTThreadCountsAndUnreads; diff --git a/server/channels/db/migrations/mysql/000056_upgrade_channels_v6.0.down.sql b/server/channels/db/migrations/mysql/000056_upgrade_channels_v6.0.down.sql deleted file mode 100644 index 0aa0404195f..00000000000 --- a/server/channels/db/migrations/mysql/000056_upgrade_channels_v6.0.down.sql +++ /dev/null @@ -1,44 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_team_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_channels_team_id ON Channels(TeamId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_team_id_type' - ) > 0, - 'DROP INDEX idx_channels_team_id_type ON Channels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_team_id_display_name' - ) > 0, - 'DROP INDEX idx_channels_team_id_display_name ON Channels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000056_upgrade_channels_v6.0.up.sql b/server/channels/db/migrations/mysql/000056_upgrade_channels_v6.0.up.sql deleted file mode 100644 index 9f4c39286fb..00000000000 --- a/server/channels/db/migrations/mysql/000056_upgrade_channels_v6.0.up.sql +++ /dev/null @@ -1,44 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_team_id_display_name' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_channels_team_id_display_name ON Channels(TeamId, DisplayName);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_team_id_type' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_channels_team_id_type ON Channels(TeamId, Type);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND index_name = 'idx_channels_team_id' - ) > 0, - 'DROP INDEX idx_channels_team_id ON Channels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000057_upgrade_command_webhooks_v6.0.down.sql b/server/channels/db/migrations/mysql/000057_upgrade_command_webhooks_v6.0.down.sql deleted file mode 100644 index 1025c1440a8..00000000000 --- a/server/channels/db/migrations/mysql/000057_upgrade_command_webhooks_v6.0.down.sql +++ /dev/null @@ -1,15 +0,0 @@ - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'CommandWebhooks' - AND table_schema = DATABASE() - AND column_name = 'ParentId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE CommandWebhooks ADD COLUMN ParentId varchar(26) DEFAULT NULL;' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000057_upgrade_command_webhooks_v6.0.up.sql b/server/channels/db/migrations/mysql/000057_upgrade_command_webhooks_v6.0.up.sql deleted file mode 100644 index 1f6e9ba3afc..00000000000 --- a/server/channels/db/migrations/mysql/000057_upgrade_command_webhooks_v6.0.up.sql +++ /dev/null @@ -1,29 +0,0 @@ - -CREATE PROCEDURE MigrateRootId_CommandWebhooks () BEGIN DECLARE ParentId_EXIST INT; -SELECT COUNT(*) -FROM INFORMATION_SCHEMA.COLUMNS -WHERE TABLE_NAME = 'CommandWebhooks' - AND table_schema = DATABASE() - AND COLUMN_NAME = 'ParentId' INTO ParentId_EXIST; -IF(ParentId_EXIST > 0) THEN - UPDATE CommandWebhooks SET RootId = ParentId WHERE RootId = '' AND RootId != ParentId; -END IF; -END; - -CALL MigrateRootId_CommandWebhooks (); -DROP PROCEDURE IF EXISTS MigrateRootId_CommandWebhooks; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'CommandWebhooks' - AND table_schema = DATABASE() - AND column_name = 'ParentId' - ) > 0, - 'ALTER TABLE CommandWebhooks DROP COLUMN ParentId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000058_upgrade_channelmembers_v6.0.down.sql b/server/channels/db/migrations/mysql/000058_upgrade_channelmembers_v6.0.down.sql deleted file mode 100644 index fb6e68e3c62..00000000000 --- a/server/channels/db/migrations/mysql/000058_upgrade_channelmembers_v6.0.down.sql +++ /dev/null @@ -1,62 +0,0 @@ - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_channelmembers_channel_id_scheme_guest_user_id' - ) > 0, - 'DROP INDEX idx_channelmembers_channel_id_scheme_guest_user_id ON ChannelMembers;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_channelmembers_user_id_channel_id_last_viewed_at' - ) > 0, - 'DROP INDEX idx_channelmembers_user_id_channel_id_last_viewed_at ON ChannelMembers;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_channelmembers_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_channelmembers_user_id ON ChannelMembers(UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'NotifyProps' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE ChannelMembers MODIFY COLUMN NotifyProps text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000058_upgrade_channelmembers_v6.0.up.sql b/server/channels/db/migrations/mysql/000058_upgrade_channelmembers_v6.0.up.sql deleted file mode 100644 index 12ca6a4c9ad..00000000000 --- a/server/channels/db/migrations/mysql/000058_upgrade_channelmembers_v6.0.up.sql +++ /dev/null @@ -1,60 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'NotifyProps' - AND column_type != 'JSON' - ) > 0, - 'ALTER TABLE ChannelMembers MODIFY COLUMN NotifyProps JSON;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_channelmembers_user_id' - ) > 0, - 'DROP INDEX idx_channelmembers_user_id ON ChannelMembers;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_channelmembers_user_id_channel_id_last_viewed_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_channelmembers_user_id_channel_id_last_viewed_at ON ChannelMembers(UserId, ChannelId, LastViewedAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_channelmembers_channel_id_scheme_guest_user_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_channelmembers_channel_id_scheme_guest_user_id ON ChannelMembers(ChannelId, SchemeGuest, UserId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000059_upgrade_users_v6.0.down.sql b/server/channels/db/migrations/mysql/000059_upgrade_users_v6.0.down.sql deleted file mode 100644 index e1cd41a4545..00000000000 --- a/server/channels/db/migrations/mysql/000059_upgrade_users_v6.0.down.sql +++ /dev/null @@ -1,80 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'Roles' - AND column_type != 'varchar(256)' - ) > 0, - 'ALTER TABLE Users MODIFY COLUMN Roles varchar(256);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'Timezone' - AND column_type != 'varchar(256)' - ) > 0, - 'ALTER TABLE Users MODIFY COLUMN Timezone varchar(256);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'Timezone' - AND column_type = 'varchar(256)' - AND column_default IS NULL - ) > 0, - 'ALTER TABLE Users ALTER Timezone SET DEFAULT \'{"automaticTimezone":"","manualTimezone":"","useAutomaticTimezone":"true"}\';', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'NotifyProps' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE Users MODIFY COLUMN NotifyProps text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'Props' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE Users MODIFY COLUMN Props text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000059_upgrade_users_v6.0.up.sql b/server/channels/db/migrations/mysql/000059_upgrade_users_v6.0.up.sql deleted file mode 100644 index a4aafac898c..00000000000 --- a/server/channels/db/migrations/mysql/000059_upgrade_users_v6.0.up.sql +++ /dev/null @@ -1,79 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'Props' - AND column_type != 'JSON' - ) > 0, - 'ALTER TABLE Users MODIFY COLUMN Props JSON;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'NotifyProps' - AND column_type != 'JSON' - ) > 0, - 'ALTER TABLE Users MODIFY COLUMN NotifyProps JSON;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'Timezone' - AND column_default IS NOT NULL - ) > 0, - 'ALTER TABLE Users ALTER Timezone DROP DEFAULT;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'Timezone' - AND column_type != 'JSON' - ) > 0, - 'ALTER TABLE Users MODIFY COLUMN Timezone JSON;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'Roles' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE Users MODIFY COLUMN Roles text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000060_upgrade_jobs_v6.0.down.sql b/server/channels/db/migrations/mysql/000060_upgrade_jobs_v6.0.down.sql deleted file mode 100644 index 34bcf8011da..00000000000 --- a/server/channels/db/migrations/mysql/000060_upgrade_jobs_v6.0.down.sql +++ /dev/null @@ -1,15 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Jobs' - AND table_schema = DATABASE() - AND column_name = 'Data' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE Jobs MODIFY COLUMN Data text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000060_upgrade_jobs_v6.0.up.sql b/server/channels/db/migrations/mysql/000060_upgrade_jobs_v6.0.up.sql deleted file mode 100644 index f7b7042915c..00000000000 --- a/server/channels/db/migrations/mysql/000060_upgrade_jobs_v6.0.up.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Jobs' - AND table_schema = DATABASE() - AND column_name = 'Data' - AND column_type != 'JSON' - ) > 0, - 'ALTER TABLE Jobs MODIFY COLUMN Data JSON;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - diff --git a/server/channels/db/migrations/mysql/000061_upgrade_link_metadata_v6.0.down.sql b/server/channels/db/migrations/mysql/000061_upgrade_link_metadata_v6.0.down.sql deleted file mode 100644 index 4f3db5e1f51..00000000000 --- a/server/channels/db/migrations/mysql/000061_upgrade_link_metadata_v6.0.down.sql +++ /dev/null @@ -1,16 +0,0 @@ - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'LinkMetadata' - AND table_schema = DATABASE() - AND column_name = 'Data' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE LinkMetadata MODIFY COLUMN Data text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000061_upgrade_link_metadata_v6.0.up.sql b/server/channels/db/migrations/mysql/000061_upgrade_link_metadata_v6.0.up.sql deleted file mode 100644 index 926867e0d43..00000000000 --- a/server/channels/db/migrations/mysql/000061_upgrade_link_metadata_v6.0.up.sql +++ /dev/null @@ -1,16 +0,0 @@ - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'LinkMetadata' - AND table_schema = DATABASE() - AND column_name = 'Data' - AND column_type != 'JSON' - ) > 0, - 'ALTER TABLE LinkMetadata MODIFY COLUMN Data JSON;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000062_upgrade_sessions_v6.0.down.sql b/server/channels/db/migrations/mysql/000062_upgrade_sessions_v6.0.down.sql deleted file mode 100644 index 489dba0caa2..00000000000 --- a/server/channels/db/migrations/mysql/000062_upgrade_sessions_v6.0.down.sql +++ /dev/null @@ -1,15 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Sessions' - AND table_schema = DATABASE() - AND column_name = 'Props' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE Sessions MODIFY COLUMN Props text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000062_upgrade_sessions_v6.0.up.sql b/server/channels/db/migrations/mysql/000062_upgrade_sessions_v6.0.up.sql deleted file mode 100644 index 0c7dce81451..00000000000 --- a/server/channels/db/migrations/mysql/000062_upgrade_sessions_v6.0.up.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Sessions' - AND table_schema = DATABASE() - AND column_name = 'Props' - AND column_type != 'JSON' - ) > 0, - 'ALTER TABLE Sessions MODIFY COLUMN Props JSON;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - diff --git a/server/channels/db/migrations/mysql/000063_upgrade_threads_v6.0.down.sql b/server/channels/db/migrations/mysql/000063_upgrade_threads_v6.0.down.sql deleted file mode 100644 index ea3f67dbff7..00000000000 --- a/server/channels/db/migrations/mysql/000063_upgrade_threads_v6.0.down.sql +++ /dev/null @@ -1,45 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND index_name = 'idx_threads_channel_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_threads_channel_id ON Threads(ChannelId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND index_name = 'idx_threads_channel_id_last_reply_at' - ) > 0, - 'DROP INDEX idx_threads_channel_id_last_reply_at ON Threads;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND column_name = 'Participants' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE Threads MODIFY COLUMN Participants text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000063_upgrade_threads_v6.0.up.sql b/server/channels/db/migrations/mysql/000063_upgrade_threads_v6.0.up.sql deleted file mode 100644 index 1d35787e397..00000000000 --- a/server/channels/db/migrations/mysql/000063_upgrade_threads_v6.0.up.sql +++ /dev/null @@ -1,45 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND column_name = 'Participants' - AND column_type != 'JSON' - ) > 0, - 'ALTER TABLE Threads MODIFY COLUMN Participants JSON;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND index_name = 'idx_threads_channel_id_last_reply_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_threads_channel_id_last_reply_at ON Threads(ChannelId, LastReplyAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND index_name = 'idx_threads_channel_id' - ) > 0, - 'DROP INDEX idx_threads_channel_id ON Threads;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000064_upgrade_status_v6.0.down.sql b/server/channels/db/migrations/mysql/000064_upgrade_status_v6.0.down.sql deleted file mode 100644 index 3d24755b1de..00000000000 --- a/server/channels/db/migrations/mysql/000064_upgrade_status_v6.0.down.sql +++ /dev/null @@ -1,29 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Status' - AND table_schema = DATABASE() - AND index_name = 'idx_status_status' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_status_status ON Status(Status);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Status' - AND table_schema = DATABASE() - AND index_name = 'idx_status_status_dndendtime' - ) > 0, - 'DROP INDEX idx_status_status_dndendtime ON Status;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000064_upgrade_status_v6.0.up.sql b/server/channels/db/migrations/mysql/000064_upgrade_status_v6.0.up.sql deleted file mode 100644 index 2b6d34e7a29..00000000000 --- a/server/channels/db/migrations/mysql/000064_upgrade_status_v6.0.up.sql +++ /dev/null @@ -1,29 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Status' - AND table_schema = DATABASE() - AND index_name = 'idx_status_status_dndendtime' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_status_status_dndendtime ON Status(Status, DNDEndTime);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Status' - AND table_schema = DATABASE() - AND index_name = 'idx_status_status' - ) > 0, - 'DROP INDEX idx_status_status ON Status;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000065_upgrade_groupchannels_v6.0.down.sql b/server/channels/db/migrations/mysql/000065_upgrade_groupchannels_v6.0.down.sql deleted file mode 100644 index 4717e8e07e9..00000000000 --- a/server/channels/db/migrations/mysql/000065_upgrade_groupchannels_v6.0.down.sql +++ /dev/null @@ -1,15 +0,0 @@ - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'GroupChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_groupchannels_schemeadmin' - ) > 0, - 'DROP INDEX idx_groupchannels_schemeadmin ON GroupChannels;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000065_upgrade_groupchannels_v6.0.up.sql b/server/channels/db/migrations/mysql/000065_upgrade_groupchannels_v6.0.up.sql deleted file mode 100644 index 3230eedc2a9..00000000000 --- a/server/channels/db/migrations/mysql/000065_upgrade_groupchannels_v6.0.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'GroupChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_groupchannels_schemeadmin' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_groupchannels_schemeadmin ON GroupChannels(SchemeAdmin);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000066_upgrade_posts_v6.0.down.sql b/server/channels/db/migrations/mysql/000066_upgrade_posts_v6.0.down.sql deleted file mode 100644 index 56e7f947f6a..00000000000 --- a/server/channels/db/migrations/mysql/000066_upgrade_posts_v6.0.down.sql +++ /dev/null @@ -1,77 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_root_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_posts_root_id ON Posts(RootId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_root_id_delete_at' - ) > 0, - 'DROP INDEX idx_posts_root_id_delete_at ON Posts;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND column_name = 'Props' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE Posts MODIFY COLUMN Props text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND column_name = 'FileIds' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE Posts MODIFY COLUMN FileIds text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND column_name = 'ParentId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Posts ADD COLUMN ParentId varchar(26) DEFAULT NULL;' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000066_upgrade_posts_v6.0.up.sql b/server/channels/db/migrations/mysql/000066_upgrade_posts_v6.0.up.sql deleted file mode 100644 index c9ec6bc0f7e..00000000000 --- a/server/channels/db/migrations/mysql/000066_upgrade_posts_v6.0.up.sql +++ /dev/null @@ -1,61 +0,0 @@ -CREATE PROCEDURE MigrateRootId_Posts () -BEGIN -DECLARE ParentId_EXIST INT; -DECLARE Alter_FileIds INT; -DECLARE Alter_Props INT; -SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS -WHERE TABLE_NAME = 'Posts' - AND table_schema = DATABASE() - AND COLUMN_NAME = 'ParentId' INTO ParentId_EXIST; -SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND column_name = 'FileIds' - AND column_type != 'text' INTO Alter_FileIds; -SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND column_name = 'Props' - AND column_type != 'JSON' INTO Alter_Props; -IF (Alter_Props OR Alter_FileIds) THEN - IF(ParentId_EXIST > 0) THEN - UPDATE Posts SET RootId = ParentId WHERE RootId = '' AND RootId != ParentId; - ALTER TABLE Posts MODIFY COLUMN FileIds text, MODIFY COLUMN Props JSON, DROP COLUMN ParentId; - ELSE - ALTER TABLE Posts MODIFY COLUMN FileIds text, MODIFY COLUMN Props JSON; - END IF; -END IF; -END; - -CALL MigrateRootId_Posts (); -DROP PROCEDURE IF EXISTS MigrateRootId_Posts; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_root_id_delete_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_posts_root_id_delete_at ON Posts(RootId, DeleteAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_root_id' - ) > 0, - 'DROP INDEX idx_posts_root_id ON Posts;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000067_upgrade_channelmembers_v6.1.down.sql b/server/channels/db/migrations/mysql/000067_upgrade_channelmembers_v6.1.down.sql deleted file mode 100644 index c6abda2a749..00000000000 --- a/server/channels/db/migrations/mysql/000067_upgrade_channelmembers_v6.1.down.sql +++ /dev/null @@ -1,15 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'Roles' - AND column_type != 'varchar(64)' - ) > 0, - 'ALTER TABLE ChannelMembers MODIFY COLUMN Roles varchar(64);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000067_upgrade_channelmembers_v6.1.up.sql b/server/channels/db/migrations/mysql/000067_upgrade_channelmembers_v6.1.up.sql deleted file mode 100644 index 2e254fb002a..00000000000 --- a/server/channels/db/migrations/mysql/000067_upgrade_channelmembers_v6.1.up.sql +++ /dev/null @@ -1,15 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'Roles' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE ChannelMembers MODIFY COLUMN Roles text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000068_upgrade_teammembers_v6.1.down.sql b/server/channels/db/migrations/mysql/000068_upgrade_teammembers_v6.1.down.sql deleted file mode 100644 index 424e19c6b78..00000000000 --- a/server/channels/db/migrations/mysql/000068_upgrade_teammembers_v6.1.down.sql +++ /dev/null @@ -1,15 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND column_name = 'Roles' - AND column_type != 'varchar(64)' - ) > 0, - 'ALTER TABLE TeamMembers MODIFY COLUMN Roles varchar(64);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000068_upgrade_teammembers_v6.1.up.sql b/server/channels/db/migrations/mysql/000068_upgrade_teammembers_v6.1.up.sql deleted file mode 100644 index 54451b0bdfd..00000000000 --- a/server/channels/db/migrations/mysql/000068_upgrade_teammembers_v6.1.up.sql +++ /dev/null @@ -1,15 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND column_name = 'Roles' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE TeamMembers MODIFY COLUMN Roles text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000069_upgrade_jobs_v6.1.down.sql b/server/channels/db/migrations/mysql/000069_upgrade_jobs_v6.1.down.sql deleted file mode 100644 index 5a261eef284..00000000000 --- a/server/channels/db/migrations/mysql/000069_upgrade_jobs_v6.1.down.sql +++ /dev/null @@ -1,15 +0,0 @@ - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Jobs' - AND table_schema = DATABASE() - AND index_name = 'idx_jobs_status_type' - ) > 0, - 'DROP INDEX idx_jobs_status_type ON Jobs;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000069_upgrade_jobs_v6.1.up.sql b/server/channels/db/migrations/mysql/000069_upgrade_jobs_v6.1.up.sql deleted file mode 100644 index 2442590f3cf..00000000000 --- a/server/channels/db/migrations/mysql/000069_upgrade_jobs_v6.1.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Jobs' - AND table_schema = DATABASE() - AND index_name = 'idx_jobs_status_type' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_jobs_status_type ON Jobs(Status, Type);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000070_upgrade_cte_v6.1.down.sql b/server/channels/db/migrations/mysql/000070_upgrade_cte_v6.1.down.sql deleted file mode 100644 index 5b5ad428db2..00000000000 --- a/server/channels/db/migrations/mysql/000070_upgrade_cte_v6.1.down.sql +++ /dev/null @@ -1,15 +0,0 @@ - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'LastRootPostAt' - ) > 0, - 'ALTER TABLE Channels DROP COLUMN LastRootPostAt;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000070_upgrade_cte_v6.1.up.sql b/server/channels/db/migrations/mysql/000070_upgrade_cte_v6.1.up.sql deleted file mode 100644 index 85661cd44a5..00000000000 --- a/server/channels/db/migrations/mysql/000070_upgrade_cte_v6.1.up.sql +++ /dev/null @@ -1,31 +0,0 @@ -CREATE PROCEDURE Migrate_LastRootPostAt () -BEGIN -DECLARE - LastRootPostAt_EXIST INT; - SELECT - COUNT(*) - FROM - INFORMATION_SCHEMA.COLUMNS - WHERE - TABLE_NAME = 'Channels' - AND table_schema = DATABASE() - AND COLUMN_NAME = 'LastRootPostAt' INTO LastRootPostAt_EXIST; - IF(LastRootPostAt_EXIST = 0) THEN - ALTER TABLE Channels ADD COLUMN LastRootPostAt bigint DEFAULT 0; - UPDATE - Channels - INNER JOIN ( - SELECT - Channels.Id channelid, - COALESCE(MAX(Posts.CreateAt), 0) AS lastrootpost - FROM - Channels - LEFT JOIN Posts FORCE INDEX (idx_posts_channel_id_update_at) ON Channels.Id = Posts.ChannelId - WHERE - Posts.RootId = '' - GROUP BY - Channels.Id) AS q ON q.channelid = Channels.Id SET LastRootPostAt = lastrootpost; - END IF; -END; - CALL Migrate_LastRootPostAt (); - DROP PROCEDURE IF EXISTS Migrate_LastRootPostAt; diff --git a/server/channels/db/migrations/mysql/000071_upgrade_sessions_v6.1.down.sql b/server/channels/db/migrations/mysql/000071_upgrade_sessions_v6.1.down.sql deleted file mode 100644 index a8386eefc56..00000000000 --- a/server/channels/db/migrations/mysql/000071_upgrade_sessions_v6.1.down.sql +++ /dev/null @@ -1,15 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Sessions' - AND table_schema = DATABASE() - AND column_name = 'Roles' - AND column_type != 'varchar(64)' - ) > 0, - 'ALTER TABLE Sessions MODIFY COLUMN Roles varchar(64);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000071_upgrade_sessions_v6.1.up.sql b/server/channels/db/migrations/mysql/000071_upgrade_sessions_v6.1.up.sql deleted file mode 100644 index edae5116d6f..00000000000 --- a/server/channels/db/migrations/mysql/000071_upgrade_sessions_v6.1.up.sql +++ /dev/null @@ -1,15 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Sessions' - AND table_schema = DATABASE() - AND column_name = 'Roles' - AND column_type != 'text' - ) > 0, - 'ALTER TABLE Sessions MODIFY COLUMN Roles text;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000072_upgrade_schemes_v6.3.down.sql b/server/channels/db/migrations/mysql/000072_upgrade_schemes_v6.3.down.sql deleted file mode 100644 index 82340428b33..00000000000 --- a/server/channels/db/migrations/mysql/000072_upgrade_schemes_v6.3.down.sql +++ /dev/null @@ -1,59 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND column_name = 'DefaultRunMemberRole' - ) > 0, - 'ALTER TABLE Schemes DROP COLUMN DefaultRunMemberRole;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND column_name = 'DefaultRunAdminRole' - ) > 0, - 'ALTER TABLE Schemes DROP COLUMN DefaultRunAdminRole;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND column_name = 'DefaultPlaybookMemberRole' - ) > 0, - 'ALTER TABLE Schemes DROP COLUMN DefaultPlaybookMemberRole;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND column_name = 'DefaultPlaybookAdminRole' - ) > 0, - 'ALTER TABLE Schemes DROP COLUMN DefaultPlaybookAdminRole;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000072_upgrade_schemes_v6.3.up.sql b/server/channels/db/migrations/mysql/000072_upgrade_schemes_v6.3.up.sql deleted file mode 100644 index 6bc727a332d..00000000000 --- a/server/channels/db/migrations/mysql/000072_upgrade_schemes_v6.3.up.sql +++ /dev/null @@ -1,59 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND column_name = 'DefaultPlaybookAdminRole' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Schemes ADD COLUMN DefaultPlaybookAdminRole VARCHAR(64) DEFAULT "";' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND column_name = 'DefaultPlaybookMemberRole' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Schemes ADD COLUMN DefaultPlaybookMemberRole VARCHAR(64) DEFAULT "";' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND column_name = 'DefaultRunAdminRole' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Schemes ADD COLUMN DefaultRunAdminRole VARCHAR(64) DEFAULT "";' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Schemes' - AND table_schema = DATABASE() - AND column_name = 'DefaultRunMemberRole' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Schemes ADD COLUMN DefaultRunMemberRole VARCHAR(64) DEFAULT "";' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; diff --git a/server/channels/db/migrations/mysql/000073_upgrade_plugin_key_value_store_v6.3.down.sql b/server/channels/db/migrations/mysql/000073_upgrade_plugin_key_value_store_v6.3.down.sql deleted file mode 100644 index 880e5d202a0..00000000000 --- a/server/channels/db/migrations/mysql/000073_upgrade_plugin_key_value_store_v6.3.down.sql +++ /dev/null @@ -1,15 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT Count(*) FROM Information_Schema.Columns - WHERE table_name = 'PluginKeyValueStore' - AND table_schema = DATABASE() - AND column_name = 'PKey' - AND column_type != 'varchar(50)' - ) > 0, - 'ALTER TABLE PluginKeyValueStore MODIFY COLUMN PKey varchar(50);', - 'SELECT 1' -)); - -PREPARE alterTypeIfExists FROM @preparedStatement; -EXECUTE alterTypeIfExists; -DEALLOCATE PREPARE alterTypeIfExists; diff --git a/server/channels/db/migrations/mysql/000073_upgrade_plugin_key_value_store_v6.3.up.sql b/server/channels/db/migrations/mysql/000073_upgrade_plugin_key_value_store_v6.3.up.sql deleted file mode 100644 index 0a1b70d7292..00000000000 --- a/server/channels/db/migrations/mysql/000073_upgrade_plugin_key_value_store_v6.3.up.sql +++ /dev/null @@ -1,15 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT Count(*) FROM Information_Schema.Columns - WHERE table_name = 'PluginKeyValueStore' - AND table_schema = DATABASE() - AND column_name = 'PKey' - AND column_type != 'varchar(150)' - ) > 0, - 'ALTER TABLE PluginKeyValueStore MODIFY COLUMN PKey varchar(150);', - 'SELECT 1' -)); - -PREPARE alterTypeIfExists FROM @preparedStatement; -EXECUTE alterTypeIfExists; -DEALLOCATE PREPARE alterTypeIfExists; diff --git a/server/channels/db/migrations/mysql/000074_upgrade_users_v6.3.down.sql b/server/channels/db/migrations/mysql/000074_upgrade_users_v6.3.down.sql deleted file mode 100644 index 849dc1d1c1f..00000000000 --- a/server/channels/db/migrations/mysql/000074_upgrade_users_v6.3.down.sql +++ /dev/null @@ -1 +0,0 @@ --- It is intentionally to not have rollback for removing AcceptedTermsOfServiceId column. diff --git a/server/channels/db/migrations/mysql/000074_upgrade_users_v6.3.up.sql b/server/channels/db/migrations/mysql/000074_upgrade_users_v6.3.up.sql deleted file mode 100644 index 7cd02d95950..00000000000 --- a/server/channels/db/migrations/mysql/000074_upgrade_users_v6.3.up.sql +++ /dev/null @@ -1,15 +0,0 @@ - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'AcceptedTermsOfServiceId' - ) > 0, - 'ALTER TABLE Users DROP COLUMN AcceptedTermsOfServiceId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000075_alter_upload_sessions_index.down.sql b/server/channels/db/migrations/mysql/000075_alter_upload_sessions_index.down.sql deleted file mode 100644 index da4987c5ec5..00000000000 --- a/server/channels/db/migrations/mysql/000075_alter_upload_sessions_index.down.sql +++ /dev/null @@ -1,20 +0,0 @@ -CREATE PROCEDURE AlterIndex() -BEGIN - DECLARE columnName varchar(26) default ''; - - SELECT IFNULL(GROUP_CONCAT(column_name ORDER BY seq_in_index), '') INTO columnName - FROM information_schema.statistics - WHERE table_schema = DATABASE() - AND table_name = 'UploadSessions' - AND index_name = 'idx_uploadsessions_user_id' - GROUP BY index_name; - - IF columnName = 'UserId' THEN - DROP INDEX idx_uploadsessions_user_id ON UploadSessions; - CREATE INDEX idx_uploadsessions_user_id ON UploadSessions(Type); - END IF; -END; - -CALL AlterIndex(); - -DROP PROCEDURE IF EXISTS AlterIndex; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000075_alter_upload_sessions_index.up.sql b/server/channels/db/migrations/mysql/000075_alter_upload_sessions_index.up.sql deleted file mode 100644 index c5729912b98..00000000000 --- a/server/channels/db/migrations/mysql/000075_alter_upload_sessions_index.up.sql +++ /dev/null @@ -1,20 +0,0 @@ -CREATE PROCEDURE AlterIndex() -BEGIN - DECLARE columnName varchar(26) default ''; - - SELECT IFNULL(GROUP_CONCAT(column_name ORDER BY seq_in_index), '') INTO columnName - FROM information_schema.statistics - WHERE table_schema = DATABASE() - AND table_name = 'UploadSessions' - AND index_name = 'idx_uploadsessions_user_id' - GROUP BY index_name; - - IF columnName = 'Type' THEN - DROP INDEX idx_uploadsessions_user_id ON UploadSessions; - CREATE INDEX idx_uploadsessions_user_id ON UploadSessions(UserId); - END IF; -END; - -CALL AlterIndex(); - -DROP PROCEDURE IF EXISTS AlterIndex; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000076_upgrade_lastrootpostat.down.sql b/server/channels/db/migrations/mysql/000076_upgrade_lastrootpostat.down.sql deleted file mode 100644 index 5d99db8cecf..00000000000 --- a/server/channels/db/migrations/mysql/000076_upgrade_lastrootpostat.down.sql +++ /dev/null @@ -1 +0,0 @@ --- no need to change anything since it's covered in 000070_upgrade_cte_v6.1.down.sql diff --git a/server/channels/db/migrations/mysql/000076_upgrade_lastrootpostat.up.sql b/server/channels/db/migrations/mysql/000076_upgrade_lastrootpostat.up.sql deleted file mode 100644 index f52c950a732..00000000000 --- a/server/channels/db/migrations/mysql/000076_upgrade_lastrootpostat.up.sql +++ /dev/null @@ -1,47 +0,0 @@ -CREATE PROCEDURE Migrate_LastRootPostAt_Default () -BEGIN - IF ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_NAME = 'Channels' - AND TABLE_SCHEMA = DATABASE() - AND COLUMN_NAME = 'LastRootPostAt' - AND (COLUMN_DEFAULT IS NULL OR COLUMN_DEFAULT != 0) - ) = 1 THEN - ALTER TABLE Channels ALTER COLUMN LastRootPostAt SET DEFAULT 0; - END IF; -END; - CALL Migrate_LastRootPostAt_Default (); - DROP PROCEDURE IF EXISTS Migrate_LastRootPostAt_Default; - -CREATE PROCEDURE Migrate_LastRootPostAt_Fix () -BEGIN - IF ( - SELECT COUNT(*) - FROM Channels - WHERE LastRootPostAt IS NULL - ) > 0 THEN - -- fixes migrate cte and sets the LastRootPostAt for channels that don't have it set - UPDATE - Channels - INNER JOIN ( - SELECT - Channels.Id channelid, - COALESCE(MAX(Posts.CreateAt), 0) AS lastrootpost - FROM - Channels - LEFT JOIN Posts FORCE INDEX (idx_posts_channel_id_update_at) ON Channels.Id = Posts.ChannelId - WHERE - Posts.RootId = '' - GROUP BY - Channels.Id) AS q ON q.channelid = Channels.Id - SET - LastRootPostAt = lastrootpost - WHERE - LastRootPostAt IS NULL; - - -- sets LastRootPostAt to 0, for channels with no posts - UPDATE Channels SET LastRootPostAt=0 WHERE LastRootPostAt IS NULL; - END IF; -END; - CALL Migrate_LastRootPostAt_Fix (); - DROP PROCEDURE IF EXISTS Migrate_LastRootPostAt_Fix; diff --git a/server/channels/db/migrations/mysql/000077_upgrade_users_v6.5.down.sql b/server/channels/db/migrations/mysql/000077_upgrade_users_v6.5.down.sql deleted file mode 100644 index d831a37618d..00000000000 --- a/server/channels/db/migrations/mysql/000077_upgrade_users_v6.5.down.sql +++ /dev/null @@ -1 +0,0 @@ --- It is intentionally to not have rollback for removing AcceptedServiceTermsId column. diff --git a/server/channels/db/migrations/mysql/000077_upgrade_users_v6.5.up.sql b/server/channels/db/migrations/mysql/000077_upgrade_users_v6.5.up.sql deleted file mode 100644 index 104c9a30b06..00000000000 --- a/server/channels/db/migrations/mysql/000077_upgrade_users_v6.5.up.sql +++ /dev/null @@ -1,15 +0,0 @@ - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'AcceptedServiceTermsId' - ) > 0, - 'ALTER TABLE Users DROP COLUMN AcceptedServiceTermsId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000078_create_oauth_mattermost_app_id.down.sql b/server/channels/db/migrations/mysql/000078_create_oauth_mattermost_app_id.down.sql deleted file mode 100644 index 0aaaaa3a496..00000000000 --- a/server/channels/db/migrations/mysql/000078_create_oauth_mattermost_app_id.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthApps' - AND table_schema = DATABASE() - AND column_name = 'MattermostAppID' - ) > 0, - 'ALTER TABLE OAuthApps DROP COLUMN MattermostAppID;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000078_create_oauth_mattermost_app_id.up.sql b/server/channels/db/migrations/mysql/000078_create_oauth_mattermost_app_id.up.sql deleted file mode 100644 index 5e68967e856..00000000000 --- a/server/channels/db/migrations/mysql/000078_create_oauth_mattermost_app_id.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthApps' - AND table_schema = DATABASE() - AND column_name = 'MattermostAppID' - ) > 0, - 'SELECT 1', - 'ALTER TABLE OAuthApps ADD COLUMN MattermostAppID varchar(32);' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000079_usergroups_displayname_index.down.sql b/server/channels/db/migrations/mysql/000079_usergroups_displayname_index.down.sql deleted file mode 100644 index 7a008b06318..00000000000 --- a/server/channels/db/migrations/mysql/000079_usergroups_displayname_index.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'UserGroups' - AND table_schema = DATABASE() - AND index_name = 'idx_usergroups_displayname' - ) > 0, - 'DROP INDEX idx_usergroups_displayname ON UserGroups;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000079_usergroups_displayname_index.up.sql b/server/channels/db/migrations/mysql/000079_usergroups_displayname_index.up.sql deleted file mode 100644 index 55680f8d059..00000000000 --- a/server/channels/db/migrations/mysql/000079_usergroups_displayname_index.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'UserGroups' - AND table_schema = DATABASE() - AND index_name = 'idx_usergroups_displayname' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_usergroups_displayname ON UserGroups(DisplayName);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000080_posts_createat_id.down.sql b/server/channels/db/migrations/mysql/000080_posts_createat_id.down.sql deleted file mode 100644 index 214e53c5d3f..00000000000 --- a/server/channels/db/migrations/mysql/000080_posts_createat_id.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_create_at_id' - ) > 0, - 'DROP INDEX idx_posts_create_at_id on Posts;', - 'SELECT 1;' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000080_posts_createat_id.up.sql b/server/channels/db/migrations/mysql/000080_posts_createat_id.up.sql deleted file mode 100644 index 3548dd1b7b7..00000000000 --- a/server/channels/db/migrations/mysql/000080_posts_createat_id.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_create_at_id' - ) > 0, - 'SELECT 1;', - 'CREATE INDEX idx_posts_create_at_id on Posts(CreateAt, Id) LOCK=NONE;' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000081_threads_deleteat.down.sql b/server/channels/db/migrations/mysql/000081_threads_deleteat.down.sql deleted file mode 100644 index cacb45cb5aa..00000000000 --- a/server/channels/db/migrations/mysql/000081_threads_deleteat.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Replaced by 000083_threads_threaddeleteat.down.sql diff --git a/server/channels/db/migrations/mysql/000081_threads_deleteat.up.sql b/server/channels/db/migrations/mysql/000081_threads_deleteat.up.sql deleted file mode 100644 index ceeffcc0785..00000000000 --- a/server/channels/db/migrations/mysql/000081_threads_deleteat.up.sql +++ /dev/null @@ -1 +0,0 @@ --- Replaced by 000083_threads_threaddeleteat.up.sql diff --git a/server/channels/db/migrations/mysql/000082_upgrade_oauth_mattermost_app_id.down.sql b/server/channels/db/migrations/mysql/000082_upgrade_oauth_mattermost_app_id.down.sql deleted file mode 100644 index 981177557c6..00000000000 --- a/server/channels/db/migrations/mysql/000082_upgrade_oauth_mattermost_app_id.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthApps' - AND table_schema = DATABASE() - AND column_name = 'MattermostAppID' - ) > 0, - 'ALTER TABLE OAuthApps MODIFY MattermostAppID varchar(32);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000082_upgrade_oauth_mattermost_app_id.up.sql b/server/channels/db/migrations/mysql/000082_upgrade_oauth_mattermost_app_id.up.sql deleted file mode 100644 index aa65f0de26a..00000000000 --- a/server/channels/db/migrations/mysql/000082_upgrade_oauth_mattermost_app_id.up.sql +++ /dev/null @@ -1,29 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthApps' - AND table_schema = DATABASE() - AND column_name = 'MattermostAppID' - ) > 0, - 'UPDATE OAuthApps SET MattermostAppID = "" WHERE MattermostAppID IS NULL;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'OAuthApps' - AND table_schema = DATABASE() - AND column_name = 'MattermostAppID' - ) > 0, - 'ALTER TABLE OAuthApps MODIFY MattermostAppID varchar(32) NOT NULL DEFAULT "";', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000083_threads_threaddeleteat.down.sql b/server/channels/db/migrations/mysql/000083_threads_threaddeleteat.down.sql deleted file mode 100644 index 0068929f065..00000000000 --- a/server/channels/db/migrations/mysql/000083_threads_threaddeleteat.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND column_name = 'ThreadDeleteAt' - ) > 0, - 'ALTER TABLE Threads DROP COLUMN ThreadDeleteAt;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; diff --git a/server/channels/db/migrations/mysql/000083_threads_threaddeleteat.up.sql b/server/channels/db/migrations/mysql/000083_threads_threaddeleteat.up.sql deleted file mode 100644 index 5c2bc73f0b7..00000000000 --- a/server/channels/db/migrations/mysql/000083_threads_threaddeleteat.up.sql +++ /dev/null @@ -1,35 +0,0 @@ --- Drop any existing DeleteAt column from 000081_threads_deleteat.up.sql -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND column_name = 'DeleteAt' - ) > 0, - 'ALTER TABLE Threads DROP COLUMN DeleteAt;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; - -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND column_name = 'ThreadDeleteAt' - ), - 'ALTER TABLE Threads ADD COLUMN ThreadDeleteAt bigint(20);', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; - -UPDATE Threads, Posts -SET Threads.ThreadDeleteAt = Posts.DeleteAt -WHERE Posts.Id = Threads.PostId -AND Threads.ThreadDeleteAt IS NULL; diff --git a/server/channels/db/migrations/mysql/000084_recent_searches.down.sql b/server/channels/db/migrations/mysql/000084_recent_searches.down.sql deleted file mode 100644 index 270536b5dd5..00000000000 --- a/server/channels/db/migrations/mysql/000084_recent_searches.down.sql +++ /dev/null @@ -1,2 +0,0 @@ --- This table is unused, and will be dropped in a future ESR. -DROP TABLE IF EXISTS RecentSearches; diff --git a/server/channels/db/migrations/mysql/000084_recent_searches.up.sql b/server/channels/db/migrations/mysql/000084_recent_searches.up.sql deleted file mode 100644 index 34c70d4f0ab..00000000000 --- a/server/channels/db/migrations/mysql/000084_recent_searches.up.sql +++ /dev/null @@ -1,8 +0,0 @@ --- This table is unused, and will be dropped in a future ESR. -CREATE TABLE IF NOT EXISTS RecentSearches ( - UserId CHAR(26), - SearchPointer int, - Query json, - CreateAt bigint NOT NULL, - PRIMARY KEY (UserId, SearchPointer) -); diff --git a/server/channels/db/migrations/mysql/000085_fileinfo_add_archived_column.down.sql b/server/channels/db/migrations/mysql/000085_fileinfo_add_archived_column.down.sql deleted file mode 100644 index 9ac9b2a9a2a..00000000000 --- a/server/channels/db/migrations/mysql/000085_fileinfo_add_archived_column.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND column_name = 'Archived' - ) > 0, - 'ALTER TABLE FileInfo DROP COLUMN Archived;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000085_fileinfo_add_archived_column.up.sql b/server/channels/db/migrations/mysql/000085_fileinfo_add_archived_column.up.sql deleted file mode 100644 index 0b86090af36..00000000000 --- a/server/channels/db/migrations/mysql/000085_fileinfo_add_archived_column.up.sql +++ /dev/null @@ -1,15 +0,0 @@ - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND column_name = 'Archived' - ) > 0, - 'SELECT 1', - 'ALTER TABLE FileInfo ADD COLUMN Archived boolean NOT NULL DEFAULT false;' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000086_add_cloud_limits_archived.down.sql b/server/channels/db/migrations/mysql/000086_add_cloud_limits_archived.down.sql deleted file mode 100644 index f3f646a1b13..00000000000 --- a/server/channels/db/migrations/mysql/000086_add_cloud_limits_archived.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - EXISTS ( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'CloudLimitsArchived' - ), - 'ALTER TABLE Teams DROP COLUMN CloudLimitsArchived;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000086_add_cloud_limits_archived.up.sql b/server/channels/db/migrations/mysql/000086_add_cloud_limits_archived.up.sql deleted file mode 100644 index eb5d01dc231..00000000000 --- a/server/channels/db/migrations/mysql/000086_add_cloud_limits_archived.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'CloudLimitsArchived' - ), - 'ALTER TABLE Teams ADD COLUMN CloudLimitsArchived BOOLEAN NOT NULL DEFAULT FALSE;', - 'SELECT 1' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; diff --git a/server/channels/db/migrations/mysql/000087_sidebar_categories_index.down.sql b/server/channels/db/migrations/mysql/000087_sidebar_categories_index.down.sql deleted file mode 100644 index 45904991376..00000000000 --- a/server/channels/db/migrations/mysql/000087_sidebar_categories_index.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'SidebarCategories' - AND table_schema = DATABASE() - AND index_name = 'idx_sidebarcategories_userid_teamid' - ) > 0, - 'DROP INDEX idx_sidebarcategories_userid_teamid on SidebarCategories;', - 'SELECT 1;' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000087_sidebar_categories_index.up.sql b/server/channels/db/migrations/mysql/000087_sidebar_categories_index.up.sql deleted file mode 100644 index 9f772566831..00000000000 --- a/server/channels/db/migrations/mysql/000087_sidebar_categories_index.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'SidebarCategories' - AND table_schema = DATABASE() - AND index_name = 'idx_sidebarcategories_userid_teamid' - ) > 0, - 'SELECT 1;', - 'CREATE INDEX idx_sidebarcategories_userid_teamid on SidebarCategories(UserId, TeamId) LOCK=NONE;' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000088_remaining_migrations.down.sql b/server/channels/db/migrations/mysql/000088_remaining_migrations.down.sql deleted file mode 100644 index 2faab562cae..00000000000 --- a/server/channels/db/migrations/mysql/000088_remaining_migrations.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Skipping it because the forward migrations are destructive. \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000088_remaining_migrations.up.sql b/server/channels/db/migrations/mysql/000088_remaining_migrations.up.sql deleted file mode 100644 index 3588b8abf75..00000000000 --- a/server/channels/db/migrations/mysql/000088_remaining_migrations.up.sql +++ /dev/null @@ -1,36 +0,0 @@ -DROP TABLE IF EXISTS JobStatuses; - -DROP TABLE IF EXISTS PasswordRecovery; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'ThemeProps' - ) > 0, - 'INSERT INTO Preferences(UserId, Category, Name, Value) SELECT Id, \'\', \'\', ThemeProps FROM Users WHERE Users.ThemeProps != \'null\'', - 'SELECT 1' -)); - -PREPARE migrateTheme FROM @preparedStatement; -EXECUTE migrateTheme; -DEALLOCATE PREPARE migrateTheme; - --- We have to do this twice because the prepared statement doesn't support multiple SQL queries --- in a single string. - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'ThemeProps' - ) > 0, - 'ALTER TABLE Users DROP COLUMN ThemeProps', - 'SELECT 1' -)); - -PREPARE migrateTheme FROM @preparedStatement; -EXECUTE migrateTheme; -DEALLOCATE PREPARE migrateTheme; diff --git a/server/channels/db/migrations/mysql/000089_add-channelid-to-reaction.down.sql b/server/channels/db/migrations/mysql/000089_add-channelid-to-reaction.down.sql deleted file mode 100644 index 0380b0de947..00000000000 --- a/server/channels/db/migrations/mysql/000089_add-channelid-to-reaction.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Reactions' - AND table_schema = DATABASE() - AND column_name = 'ChannelId' - ) > 0, - 'ALTER TABLE Reactions DROP COLUMN ChannelId;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; diff --git a/server/channels/db/migrations/mysql/000089_add-channelid-to-reaction.up.sql b/server/channels/db/migrations/mysql/000089_add-channelid-to-reaction.up.sql deleted file mode 100644 index 11e24a8b995..00000000000 --- a/server/channels/db/migrations/mysql/000089_add-channelid-to-reaction.up.sql +++ /dev/null @@ -1,33 +0,0 @@ -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Reactions' - AND table_schema = DATABASE() - AND column_name = 'ChannelId' - ), - 'ALTER TABLE Reactions ADD COLUMN ChannelId varchar(26) NOT NULL DEFAULT "";', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; - - -UPDATE Reactions SET ChannelId = COALESCE((select ChannelId from Posts where Posts.Id = Reactions.PostId), '') WHERE ChannelId=""; - - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Reactions' - AND table_schema = DATABASE() - AND index_name = 'idx_reactions_channel_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_reactions_channel_id ON Reactions(ChannelId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000090_create_enums.down.sql b/server/channels/db/migrations/mysql/000090_create_enums.down.sql deleted file mode 100644 index 2fa58b3e6e0..00000000000 --- a/server/channels/db/migrations/mysql/000090_create_enums.down.sql +++ /dev/null @@ -1,47 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'Type' - AND column_type != 'varchar(1)' - ) > 0, - 'ALTER TABLE Channels MODIFY COLUMN Type varchar(1);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'Type' - AND column_type != 'varchar(255)' - ) > 0, - 'ALTER TABLE Teams MODIFY COLUMN Type varchar(255);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'UploadSessions' - AND table_schema = DATABASE() - AND column_name = 'Type' - AND column_type != 'varchar(32)' - ) > 0, - 'ALTER TABLE UploadSessions MODIFY COLUMN Type varchar(32);', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000090_create_enums.up.sql b/server/channels/db/migrations/mysql/000090_create_enums.up.sql deleted file mode 100644 index 3181aa953c9..00000000000 --- a/server/channels/db/migrations/mysql/000090_create_enums.up.sql +++ /dev/null @@ -1,47 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'Type' - AND column_type != 'ENUM("D", "O", "G", "P")' - ) > 0, - 'ALTER TABLE Channels MODIFY COLUMN Type ENUM("D", "O", "G", "P");', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Teams' - AND table_schema = DATABASE() - AND column_name = 'Type' - AND column_type != 'ENUM("I", "O")' - ) > 0, - 'ALTER TABLE Teams MODIFY COLUMN Type ENUM("I", "O");', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'UploadSessions' - AND table_schema = DATABASE() - AND column_name = 'Type' - AND column_type != 'ENUM("attachment", "import")' - ) > 0, - 'ALTER TABLE UploadSessions MODIFY COLUMN Type ENUM("attachment", "import");', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000091_create_post_reminder.down.sql b/server/channels/db/migrations/mysql/000091_create_post_reminder.down.sql deleted file mode 100644 index 40aeec0bf94..00000000000 --- a/server/channels/db/migrations/mysql/000091_create_post_reminder.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PostReminders' - AND table_schema = DATABASE() - AND index_name = 'idx_postreminders_targettime' - ) > 0, - 'DROP INDEX idx_postreminders_targettime ON PostReminders;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -DROP TABLE IF EXISTS PostReminders; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000091_create_post_reminder.up.sql b/server/channels/db/migrations/mysql/000091_create_post_reminder.up.sql deleted file mode 100644 index 7cea8025b0a..00000000000 --- a/server/channels/db/migrations/mysql/000091_create_post_reminder.up.sql +++ /dev/null @@ -1,21 +0,0 @@ -CREATE TABLE IF NOT EXISTS PostReminders ( - PostId varchar(26) NOT NULL, - UserId varchar(26) NOT NULL, - TargetTime bigint, - PRIMARY KEY (PostId, UserId) -); - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PostReminders' - AND table_schema = DATABASE() - AND index_name = 'idx_postreminders_targettime' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_postreminders_targettime ON PostReminders(TargetTime);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000092_add_createat_to_teammembers.down.sql b/server/channels/db/migrations/mysql/000092_add_createat_to_teammembers.down.sql deleted file mode 100644 index 6bec06a01f1..00000000000 --- a/server/channels/db/migrations/mysql/000092_add_createat_to_teammembers.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND column_name = 'CreateAt' - ) > 0, - 'ALTER TABLE Reactions DROP COLUMN CreateAt;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; diff --git a/server/channels/db/migrations/mysql/000092_add_createat_to_teammembers.up.sql b/server/channels/db/migrations/mysql/000092_add_createat_to_teammembers.up.sql deleted file mode 100644 index ebed832fcb6..00000000000 --- a/server/channels/db/migrations/mysql/000092_add_createat_to_teammembers.up.sql +++ /dev/null @@ -1,29 +0,0 @@ -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND column_name = 'CreateAt' - ), - 'ALTER TABLE TeamMembers ADD COLUMN CreateAt bigint DEFAULT 0;', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'TeamMembers' - AND table_schema = DATABASE() - AND index_name = 'idx_teammembers_createat' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_teammembers_createat ON TeamMembers(CreateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000093_notify_admin.down.sql b/server/channels/db/migrations/mysql/000093_notify_admin.down.sql deleted file mode 100644 index f15593c4b4f..00000000000 --- a/server/channels/db/migrations/mysql/000093_notify_admin.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS NotifyAdmin; diff --git a/server/channels/db/migrations/mysql/000093_notify_admin.up.sql b/server/channels/db/migrations/mysql/000093_notify_admin.up.sql deleted file mode 100644 index f9696f29b76..00000000000 --- a/server/channels/db/migrations/mysql/000093_notify_admin.up.sql +++ /dev/null @@ -1,8 +0,0 @@ -CREATE TABLE IF NOT EXISTS NotifyAdmin ( - UserId varchar(26) NOT NULL, - CreateAt bigint(20) DEFAULT NULL, - RequiredPlan varchar(26) NOT NULL, - RequiredFeature varchar(100) NOT NULL, - Trial BOOLEAN NOT NULL, - PRIMARY KEY (UserId, RequiredFeature, RequiredPlan) -); diff --git a/server/channels/db/migrations/mysql/000094_threads_teamid.down.sql b/server/channels/db/migrations/mysql/000094_threads_teamid.down.sql deleted file mode 100644 index 3b8e4a306ed..00000000000 --- a/server/channels/db/migrations/mysql/000094_threads_teamid.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Replaced by 000096_threads_threadteamid.down.sql diff --git a/server/channels/db/migrations/mysql/000094_threads_teamid.up.sql b/server/channels/db/migrations/mysql/000094_threads_teamid.up.sql deleted file mode 100644 index eb5e0807da9..00000000000 --- a/server/channels/db/migrations/mysql/000094_threads_teamid.up.sql +++ /dev/null @@ -1 +0,0 @@ --- Replaced by 000096_threads_threadteamid.up.sql diff --git a/server/channels/db/migrations/mysql/000095_remove_posts_parentid.down.sql b/server/channels/db/migrations/mysql/000095_remove_posts_parentid.down.sql deleted file mode 100644 index abdf4283613..00000000000 --- a/server/channels/db/migrations/mysql/000095_remove_posts_parentid.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Intentionally left blank as forward migration is not reversible. diff --git a/server/channels/db/migrations/mysql/000095_remove_posts_parentid.up.sql b/server/channels/db/migrations/mysql/000095_remove_posts_parentid.up.sql deleted file mode 100644 index 269febfac0a..00000000000 --- a/server/channels/db/migrations/mysql/000095_remove_posts_parentid.up.sql +++ /dev/null @@ -1,17 +0,0 @@ --- While upgrading from 5.x to 6.x with manual queries, there is a chance that this --- migration is skipped. In that case, we need to make sure that the column is dropped. - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND column_name = 'ParentId' - ) > 0, - 'ALTER TABLE Posts DROP COLUMN ParentId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000096_threads_threadteamid.down.sql b/server/channels/db/migrations/mysql/000096_threads_threadteamid.down.sql deleted file mode 100644 index bcbd8a57058..00000000000 --- a/server/channels/db/migrations/mysql/000096_threads_threadteamid.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND column_name = 'ThreadTeamId' - ), - 'ALTER TABLE Threads DROP COLUMN ThreadTeamId;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; diff --git a/server/channels/db/migrations/mysql/000096_threads_threadteamid.up.sql b/server/channels/db/migrations/mysql/000096_threads_threadteamid.up.sql deleted file mode 100644 index 420c2cd2f38..00000000000 --- a/server/channels/db/migrations/mysql/000096_threads_threadteamid.up.sql +++ /dev/null @@ -1,35 +0,0 @@ --- Drop any existing TeamId column from 000094_threads_teamid.up.sql -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND column_name = 'TeamId' - ) > 0, - 'ALTER TABLE Threads DROP COLUMN TeamId;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; - -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Threads' - AND table_schema = DATABASE() - AND column_name = 'ThreadTeamId' - ), - 'ALTER TABLE Threads ADD COLUMN ThreadTeamId varchar(26) DEFAULT NULL;', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; - -UPDATE Threads, Channels -SET Threads.ThreadTeamId = Channels.TeamId -WHERE Channels.Id = Threads.ChannelId -AND Threads.ThreadTeamId IS NULL; diff --git a/server/channels/db/migrations/mysql/000097_create_posts_priority.down.sql b/server/channels/db/migrations/mysql/000097_create_posts_priority.down.sql deleted file mode 100644 index a0294c918a7..00000000000 --- a/server/channels/db/migrations/mysql/000097_create_posts_priority.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -DROP TABLE IF EXISTS PostsPriority; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'UrgentMentionCount' - ) > 0, - 'ALTER TABLE ChannelMembers DROP COLUMN UrgentMentionCount;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000097_create_posts_priority.up.sql b/server/channels/db/migrations/mysql/000097_create_posts_priority.up.sql deleted file mode 100644 index b8b44d05449..00000000000 --- a/server/channels/db/migrations/mysql/000097_create_posts_priority.up.sql +++ /dev/null @@ -1,23 +0,0 @@ -CREATE TABLE IF NOT EXISTS PostsPriority ( - PostId varchar(26) NOT NULL, - ChannelId varchar(26) NOT NULL, - Priority varchar(32) NOT NULL, - RequestedAck tinyint(1), - PersistentNotifications tinyint(1), - PRIMARY KEY (PostId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ChannelMembers' - AND table_schema = DATABASE() - AND column_name = 'UrgentMentionCount' - ), - 'ALTER TABLE ChannelMembers ADD COLUMN UrgentMentionCount bigint(20);', - 'SELECT 1;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; diff --git a/server/channels/db/migrations/mysql/000098_create_post_acknowledgements.down.sql b/server/channels/db/migrations/mysql/000098_create_post_acknowledgements.down.sql deleted file mode 100644 index 2360ca5a6ea..00000000000 --- a/server/channels/db/migrations/mysql/000098_create_post_acknowledgements.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS PostAcknowledgements; diff --git a/server/channels/db/migrations/mysql/000098_create_post_acknowledgements.up.sql b/server/channels/db/migrations/mysql/000098_create_post_acknowledgements.up.sql deleted file mode 100644 index 9eb7567a85a..00000000000 --- a/server/channels/db/migrations/mysql/000098_create_post_acknowledgements.up.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE IF NOT EXISTS PostAcknowledgements ( - PostId varchar(26) NOT NULL, - UserId varchar(26) NOT NULL, - AcknowledgedAt bigint(20) DEFAULT NULL, - PRIMARY KEY (PostId, UserId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000099_create_drafts.down.sql b/server/channels/db/migrations/mysql/000099_create_drafts.down.sql deleted file mode 100644 index 02a72a656fc..00000000000 --- a/server/channels/db/migrations/mysql/000099_create_drafts.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS Drafts; diff --git a/server/channels/db/migrations/mysql/000099_create_drafts.up.sql b/server/channels/db/migrations/mysql/000099_create_drafts.up.sql deleted file mode 100644 index d580fcb70e5..00000000000 --- a/server/channels/db/migrations/mysql/000099_create_drafts.up.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE IF NOT EXISTS Drafts ( - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - UserId varchar(26) NOT NULL, - ChannelId varchar(26) NOT NULL, - RootId varchar(26) DEFAULT '', - Message text, - Props text, - FileIds text, - PRIMARY KEY (UserId, ChannelId, RootId) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000100_add_draft_priority_column.down.sql b/server/channels/db/migrations/mysql/000100_add_draft_priority_column.down.sql deleted file mode 100644 index a4f15cde402..00000000000 --- a/server/channels/db/migrations/mysql/000100_add_draft_priority_column.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Drafts' - AND table_schema = DATABASE() - AND column_name = 'Priority' - ) > 0, - 'ALTER TABLE Drafts DROP COLUMN Priority;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000100_add_draft_priority_column.up.sql b/server/channels/db/migrations/mysql/000100_add_draft_priority_column.up.sql deleted file mode 100644 index 134cc86f39c..00000000000 --- a/server/channels/db/migrations/mysql/000100_add_draft_priority_column.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Drafts' - AND table_schema = DATABASE() - AND column_name = 'Priority' - ) > 0, - 'SELECT 1', - 'ALTER TABLE Drafts ADD COLUMN Priority text;' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000101_create_true_up_review_history.down.sql b/server/channels/db/migrations/mysql/000101_create_true_up_review_history.down.sql deleted file mode 100644 index e1e16a7f708..00000000000 --- a/server/channels/db/migrations/mysql/000101_create_true_up_review_history.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS TrueUpReviewHistory; diff --git a/server/channels/db/migrations/mysql/000101_create_true_up_review_history.up.sql b/server/channels/db/migrations/mysql/000101_create_true_up_review_history.up.sql deleted file mode 100644 index 5b25ffdb807..00000000000 --- a/server/channels/db/migrations/mysql/000101_create_true_up_review_history.up.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE IF NOT EXISTS TrueUpReviewHistory ( - DueDate bigint(20), - Completed boolean, - PRIMARY KEY (DueDate) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000102_posts_originalid_index.down.sql b/server/channels/db/migrations/mysql/000102_posts_originalid_index.down.sql deleted file mode 100644 index 5fb6b76ca88..00000000000 --- a/server/channels/db/migrations/mysql/000102_posts_originalid_index.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_original_id' - ) > 0, - 'DROP INDEX idx_posts_original_id on Posts;', - 'SELECT 1;' - )); - - PREPARE removeIndexIfExists FROM @preparedStatement; - EXECUTE removeIndexIfExists; - DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000102_posts_originalid_index.up.sql b/server/channels/db/migrations/mysql/000102_posts_originalid_index.up.sql deleted file mode 100644 index 355a5016785..00000000000 --- a/server/channels/db/migrations/mysql/000102_posts_originalid_index.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Posts' - AND table_schema = DATABASE() - AND index_name = 'idx_posts_original_id' - ) > 0, - 'SELECT 1;', - 'CREATE INDEX idx_posts_original_id on Posts(OriginalId);' - )); - - PREPARE createIndexIfNotExists FROM @preparedStatement; - EXECUTE createIndexIfNotExists; - DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000103_add_sentat_to_notifyadmin.down.sql b/server/channels/db/migrations/mysql/000103_add_sentat_to_notifyadmin.down.sql deleted file mode 100644 index 371c98478c3..00000000000 --- a/server/channels/db/migrations/mysql/000103_add_sentat_to_notifyadmin.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'NotifyAdmin' - AND table_schema = DATABASE() - AND column_name = 'SentAt' - ) > 0, - 'ALTER TABLE NotifyAdmin DROP COLUMN SentAt;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; diff --git a/server/channels/db/migrations/mysql/000103_add_sentat_to_notifyadmin.up.sql b/server/channels/db/migrations/mysql/000103_add_sentat_to_notifyadmin.up.sql deleted file mode 100644 index b6bfdb2b4ca..00000000000 --- a/server/channels/db/migrations/mysql/000103_add_sentat_to_notifyadmin.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'NotifyAdmin' - AND table_schema = DATABASE() - AND column_name = 'SentAt' - ), - 'ALTER TABLE NotifyAdmin ADD COLUMN SentAt bigint DEFAULT NULL;', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; diff --git a/server/channels/db/migrations/mysql/000104_upgrade_notifyadmin.down.sql b/server/channels/db/migrations/mysql/000104_upgrade_notifyadmin.down.sql deleted file mode 100644 index e9583db7b88..00000000000 --- a/server/channels/db/migrations/mysql/000104_upgrade_notifyadmin.down.sql +++ /dev/null @@ -1,29 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'NotifyAdmin' - AND table_schema = DATABASE() - AND column_name = 'RequiredFeature' - AND column_type != 'varchar(100)' - ) > 0, - 'ALTER TABLE NotifyAdmin MODIFY COLUMN RequiredFeature varchar(100);', - 'SELECT 1' -)); -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'NotifyAdmin' - AND table_schema = DATABASE() - AND column_name = 'RequiredPlan' - AND column_type != 'varchar(26)' - ) > 0, - 'ALTER TABLE NotifyAdmin MODIFY COLUMN RequiredPlan varchar(26);', - 'SELECT 1' -)); -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000104_upgrade_notifyadmin.up.sql b/server/channels/db/migrations/mysql/000104_upgrade_notifyadmin.up.sql deleted file mode 100644 index 25cc1d598e6..00000000000 --- a/server/channels/db/migrations/mysql/000104_upgrade_notifyadmin.up.sql +++ /dev/null @@ -1,29 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'NotifyAdmin' - AND table_schema = DATABASE() - AND column_name = 'RequiredFeature' - AND column_type != 'varchar(255)' - ) > 0, - 'ALTER TABLE NotifyAdmin MODIFY COLUMN RequiredFeature varchar(255);', - 'SELECT 1' -)); -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'NotifyAdmin' - AND table_schema = DATABASE() - AND column_name = 'RequiredPlan' - AND column_type != 'varchar(100)' - ) > 0, - 'ALTER TABLE NotifyAdmin MODIFY COLUMN RequiredPlan varchar(100);', - 'SELECT 1' -)); -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000105_remove_tokens.down.sql b/server/channels/db/migrations/mysql/000105_remove_tokens.down.sql deleted file mode 100644 index 4743bd64621..00000000000 --- a/server/channels/db/migrations/mysql/000105_remove_tokens.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Skipping it because the forward migrations are destructive diff --git a/server/channels/db/migrations/mysql/000105_remove_tokens.up.sql b/server/channels/db/migrations/mysql/000105_remove_tokens.up.sql deleted file mode 100644 index 49d41d7d7fe..00000000000 --- a/server/channels/db/migrations/mysql/000105_remove_tokens.up.sql +++ /dev/null @@ -1,4 +0,0 @@ -DELETE o, s from OAuthAccessData o -LEFT JOIN Preferences p ON o.clientid = p.name AND o.userid = p.userid AND p.category = 'oauth_app' -INNER JOIN Sessions s ON o.token = s.token -WHERE p.name IS NULL; diff --git a/server/channels/db/migrations/mysql/000106_fileinfo_channelid.down.sql b/server/channels/db/migrations/mysql/000106_fileinfo_channelid.down.sql deleted file mode 100644 index 8892ce5a589..00000000000 --- a/server/channels/db/migrations/mysql/000106_fileinfo_channelid.down.sql +++ /dev/null @@ -1,29 +0,0 @@ -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND index_name = 'idx_fileinfo_channel_id_create_at' - ) > 0, - 'DROP INDEX idx_fileinfo_channel_id_create_at ON FileInfo;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND column_name = 'ChannelId' - ) > 0, - 'ALTER TABLE FileInfo DROP COLUMN ChannelId;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; diff --git a/server/channels/db/migrations/mysql/000106_fileinfo_channelid.up.sql b/server/channels/db/migrations/mysql/000106_fileinfo_channelid.up.sql deleted file mode 100644 index 04ad46de04a..00000000000 --- a/server/channels/db/migrations/mysql/000106_fileinfo_channelid.up.sql +++ /dev/null @@ -1,34 +0,0 @@ -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND column_name = 'ChannelId' - ), - 'ALTER TABLE FileInfo ADD COLUMN ChannelId varchar(26);', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; - -UPDATE FileInfo, Posts -SET FileInfo.ChannelId = Posts.ChannelId -WHERE FileInfo.PostId = Posts.Id -AND FileInfo.ChannelId IS NULL; - -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'FileInfo' - AND table_schema = DATABASE() - AND index_name = 'idx_fileinfo_channel_id_create_at' - ), - 'CREATE INDEX idx_fileinfo_channel_id_create_at ON FileInfo(ChannelId, CreateAt);', - 'SELECT 1' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000107_threadmemberships_cleanup.down.sql b/server/channels/db/migrations/mysql/000107_threadmemberships_cleanup.down.sql deleted file mode 100644 index 4743bd64621..00000000000 --- a/server/channels/db/migrations/mysql/000107_threadmemberships_cleanup.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Skipping it because the forward migrations are destructive diff --git a/server/channels/db/migrations/mysql/000107_threadmemberships_cleanup.up.sql b/server/channels/db/migrations/mysql/000107_threadmemberships_cleanup.up.sql deleted file mode 100644 index 90644be3f3c..00000000000 --- a/server/channels/db/migrations/mysql/000107_threadmemberships_cleanup.up.sql +++ /dev/null @@ -1,5 +0,0 @@ -DELETE FROM - tm USING ThreadMemberships AS tm - JOIN Threads ON Threads.PostId = tm.PostId -WHERE - (tm.UserId, Threads.ChannelId) NOT IN (SELECT UserId, ChannelId FROM ChannelMembers); diff --git a/server/channels/db/migrations/mysql/000108_remove_orphaned_oauth_preferences.down.sql b/server/channels/db/migrations/mysql/000108_remove_orphaned_oauth_preferences.down.sql deleted file mode 100644 index 9a11a0a1e83..00000000000 --- a/server/channels/db/migrations/mysql/000108_remove_orphaned_oauth_preferences.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Migration only applied to postgres diff --git a/server/channels/db/migrations/mysql/000108_remove_orphaned_oauth_preferences.up.sql b/server/channels/db/migrations/mysql/000108_remove_orphaned_oauth_preferences.up.sql deleted file mode 100644 index 9a11a0a1e83..00000000000 --- a/server/channels/db/migrations/mysql/000108_remove_orphaned_oauth_preferences.up.sql +++ /dev/null @@ -1 +0,0 @@ --- Migration only applied to postgres diff --git a/server/channels/db/migrations/mysql/000109_create_persistent_notifications.down.sql b/server/channels/db/migrations/mysql/000109_create_persistent_notifications.down.sql deleted file mode 100644 index a798c9a3cf7..00000000000 --- a/server/channels/db/migrations/mysql/000109_create_persistent_notifications.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS PersistentNotifications; diff --git a/server/channels/db/migrations/mysql/000109_create_persistent_notifications.up.sql b/server/channels/db/migrations/mysql/000109_create_persistent_notifications.up.sql deleted file mode 100644 index 257bf13ad47..00000000000 --- a/server/channels/db/migrations/mysql/000109_create_persistent_notifications.up.sql +++ /dev/null @@ -1,8 +0,0 @@ -CREATE TABLE IF NOT EXISTS PersistentNotifications ( - PostId varchar(26) NOT NULL, - CreateAt bigint(20) DEFAULT NULL, - LastSentAt bigint(20) DEFAULT NULL, - DeleteAt bigint(20) DEFAULT NULL, - SentCount smallint DEFAULT NULL, - PRIMARY KEY (PostId) -); diff --git a/server/channels/db/migrations/mysql/000111_update_vacuuming.down.sql b/server/channels/db/migrations/mysql/000111_update_vacuuming.down.sql deleted file mode 100644 index 69a6cd447a9..00000000000 --- a/server/channels/db/migrations/mysql/000111_update_vacuuming.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Only applicable to Postgres diff --git a/server/channels/db/migrations/mysql/000111_update_vacuuming.up.sql b/server/channels/db/migrations/mysql/000111_update_vacuuming.up.sql deleted file mode 100644 index 69a6cd447a9..00000000000 --- a/server/channels/db/migrations/mysql/000111_update_vacuuming.up.sql +++ /dev/null @@ -1 +0,0 @@ --- Only applicable to Postgres diff --git a/server/channels/db/migrations/mysql/000112_rework_desktop_tokens.down.sql b/server/channels/db/migrations/mysql/000112_rework_desktop_tokens.down.sql deleted file mode 100644 index a0067811600..00000000000 --- a/server/channels/db/migrations/mysql/000112_rework_desktop_tokens.down.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'DesktopTokens' - AND table_schema = DATABASE() - AND index_name = 'idx_desktoptokens_createat' - ) > 0, - 'DROP INDEX idx_desktoptokens_createat ON DesktopTokens;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -DROP TABLE IF EXISTS DesktopTokens; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000112_rework_desktop_tokens.up.sql b/server/channels/db/migrations/mysql/000112_rework_desktop_tokens.up.sql deleted file mode 100644 index 64c1ec7ef84..00000000000 --- a/server/channels/db/migrations/mysql/000112_rework_desktop_tokens.up.sql +++ /dev/null @@ -1,38 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'DesktopTokens' - AND table_schema = DATABASE() - AND index_name = 'idx_desktoptokens_createat' - ) > 0, - 'DROP INDEX idx_desktoptokens_createat ON DesktopTokens;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -DROP TABLE IF EXISTS DesktopTokens; - -CREATE TABLE IF NOT EXISTS DesktopTokens ( - Token varchar(64) NOT NULL, - CreateAt bigint NOT NULL, - UserId varchar(26) NOT NULL, - PRIMARY KEY (Token) -); - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'DesktopTokens' - AND table_schema = DATABASE() - AND index_name = 'idx_desktoptokens_token_createat' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_desktoptokens_token_createat ON DesktopTokens(Token, CreateAt);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000113_create_retentionidsfordeletion_table.down.sql b/server/channels/db/migrations/mysql/000113_create_retentionidsfordeletion_table.down.sql deleted file mode 100644 index d3a3dccf27f..00000000000 --- a/server/channels/db/migrations/mysql/000113_create_retentionidsfordeletion_table.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS RetentionIdsForDeletion; diff --git a/server/channels/db/migrations/mysql/000113_create_retentionidsfordeletion_table.up.sql b/server/channels/db/migrations/mysql/000113_create_retentionidsfordeletion_table.up.sql deleted file mode 100644 index cba69c2ff42..00000000000 --- a/server/channels/db/migrations/mysql/000113_create_retentionidsfordeletion_table.up.sql +++ /dev/null @@ -1,7 +0,0 @@ -CREATE TABLE IF NOT EXISTS RetentionIdsForDeletion ( - Id varchar(26) NOT NULL, - TableName varchar(64), - Ids json, - PRIMARY KEY (Id), - KEY idx_retentionidsfordeletion_tablename (TableName) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000114_sharedchannelremotes_drop_nextsyncat_description.down.sql b/server/channels/db/migrations/mysql/000114_sharedchannelremotes_drop_nextsyncat_description.down.sql deleted file mode 100644 index b7ce52c9390..00000000000 --- a/server/channels/db/migrations/mysql/000114_sharedchannelremotes_drop_nextsyncat_description.down.sql +++ /dev/null @@ -1 +0,0 @@ --- It is intentionally to not have rollback for sharedchannelremotes_drop_nextsyncat_description diff --git a/server/channels/db/migrations/mysql/000114_sharedchannelremotes_drop_nextsyncat_description.up.sql b/server/channels/db/migrations/mysql/000114_sharedchannelremotes_drop_nextsyncat_description.up.sql deleted file mode 100644 index 90c3e833225..00000000000 --- a/server/channels/db/migrations/mysql/000114_sharedchannelremotes_drop_nextsyncat_description.up.sql +++ /dev/null @@ -1,29 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'NextSyncAt' - ) > 0, - 'ALTER TABLE SharedChannelRemotes DROP COLUMN NextSyncAt;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'Description' - ) > 0, - 'ALTER TABLE SharedChannelRemotes DROP COLUMN Description;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; diff --git a/server/channels/db/migrations/mysql/000115_user_reporting_changes.down.sql b/server/channels/db/migrations/mysql/000115_user_reporting_changes.down.sql deleted file mode 100644 index 42e358a00da..00000000000 --- a/server/channels/db/migrations/mysql/000115_user_reporting_changes.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'LastLogin' - ) > 0, - 'ALTER TABLE Users DROP COLUMN LastLogin;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; diff --git a/server/channels/db/migrations/mysql/000115_user_reporting_changes.up.sql b/server/channels/db/migrations/mysql/000115_user_reporting_changes.up.sql deleted file mode 100644 index 71901a8c1ef..00000000000 --- a/server/channels/db/migrations/mysql/000115_user_reporting_changes.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Users' - AND table_schema = DATABASE() - AND column_name = 'LastLogin' - ), - 'ALTER TABLE Users ADD COLUMN LastLogin bigint NOT NULL DEFAULT 0;', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000116_create_outgoing_oauth_connections.down.sql b/server/channels/db/migrations/mysql/000116_create_outgoing_oauth_connections.down.sql deleted file mode 100644 index 0741ebe35ce..00000000000 --- a/server/channels/db/migrations/mysql/000116_create_outgoing_oauth_connections.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS OutgoingOAuthConnections; diff --git a/server/channels/db/migrations/mysql/000116_create_outgoing_oauth_connections.up.sql b/server/channels/db/migrations/mysql/000116_create_outgoing_oauth_connections.up.sql deleted file mode 100644 index 113d79bda09..00000000000 --- a/server/channels/db/migrations/mysql/000116_create_outgoing_oauth_connections.up.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE TABLE IF NOT EXISTS OutgoingOAuthConnections ( - Id varchar(26), - Name varchar(64), - CreatorId varchar(26) DEFAULT NULL, - CreateAt bigint(20) DEFAULT NULL, - UpdateAt bigint(20) DEFAULT NULL, - ClientId varchar(255), - ClientSecret varchar(255), - CredentialsUsername varchar(255), - CredentialsPassword varchar(255), - OAuthTokenURL text, - GrantType varchar(32) DEFAULT 'client_credentials', - Audiences TEXT, - PRIMARY KEY (Id), - KEY idx_OutgoingOAuthConnections_name (Name) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000117_msteams_shared_channels.down.sql b/server/channels/db/migrations/mysql/000117_msteams_shared_channels.down.sql deleted file mode 100644 index 42055c1139c..00000000000 --- a/server/channels/db/migrations/mysql/000117_msteams_shared_channels.down.sql +++ /dev/null @@ -1,47 +0,0 @@ -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'RemoteClusters' - AND table_schema = DATABASE() - AND column_name = 'PluginID' - ), - 'ALTER TABLE RemoteClusters DROP COLUMN PluginID;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; - - -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'LastPostCreateAt' - ), - 'ALTER TABLE SharedChannelRemotes DROP COLUMN LastPostCreateAt;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; - - -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'LastPostCreateID' - ), - 'ALTER TABLE SharedChannelRemotes DROP COLUMN LastPostCreateID;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; - diff --git a/server/channels/db/migrations/mysql/000117_msteams_shared_channels.up.sql b/server/channels/db/migrations/mysql/000117_msteams_shared_channels.up.sql deleted file mode 100644 index 4a7891cdb4c..00000000000 --- a/server/channels/db/migrations/mysql/000117_msteams_shared_channels.up.sql +++ /dev/null @@ -1,47 +0,0 @@ -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'RemoteClusters' - AND table_schema = DATABASE() - AND column_name = 'PluginID' - ), - 'ALTER TABLE RemoteClusters ADD COLUMN PluginID varchar(190) NOT NULL DEFAULT \'\';', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; - - -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'LastPostCreateAt' - ), - 'ALTER TABLE SharedChannelRemotes ADD COLUMN LastPostCreateAt bigint NOT NULL DEFAULT 0;', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; - - -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'LastPostCreateID' - ), - 'ALTER TABLE SharedChannelRemotes ADD COLUMN LastPostCreateID varchar(26);', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; - diff --git a/server/channels/db/migrations/mysql/000118_create_index_poststats.down.sql b/server/channels/db/migrations/mysql/000118_create_index_poststats.down.sql deleted file mode 100644 index 9b2cb2bffef..00000000000 --- a/server/channels/db/migrations/mysql/000118_create_index_poststats.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Nothing to do for MySQL \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000118_create_index_poststats.up.sql b/server/channels/db/migrations/mysql/000118_create_index_poststats.up.sql deleted file mode 100644 index 9b2cb2bffef..00000000000 --- a/server/channels/db/migrations/mysql/000118_create_index_poststats.up.sql +++ /dev/null @@ -1 +0,0 @@ --- Nothing to do for MySQL \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000119_msteams_shared_channels_opts.down.sql b/server/channels/db/migrations/mysql/000119_msteams_shared_channels_opts.down.sql deleted file mode 100644 index 2fbae03871f..00000000000 --- a/server/channels/db/migrations/mysql/000119_msteams_shared_channels_opts.down.sql +++ /dev/null @@ -1,15 +0,0 @@ -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'RemoteClusters' - AND table_schema = DATABASE() - AND column_name = 'Options' - ), - 'ALTER TABLE RemoteClusters DROP COLUMN Options;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; - diff --git a/server/channels/db/migrations/mysql/000119_msteams_shared_channels_opts.up.sql b/server/channels/db/migrations/mysql/000119_msteams_shared_channels_opts.up.sql deleted file mode 100644 index 91ee9458bca..00000000000 --- a/server/channels/db/migrations/mysql/000119_msteams_shared_channels_opts.up.sql +++ /dev/null @@ -1,15 +0,0 @@ -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'RemoteClusters' - AND table_schema = DATABASE() - AND column_name = 'Options' - ), - 'ALTER TABLE RemoteClusters ADD COLUMN Options smallint NOT NULL DEFAULT 0;', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; - diff --git a/server/channels/db/migrations/mysql/000120_create_channelbookmarks_table.down.sql b/server/channels/db/migrations/mysql/000120_create_channelbookmarks_table.down.sql deleted file mode 100644 index 8e686e4bd02..00000000000 --- a/server/channels/db/migrations/mysql/000120_create_channelbookmarks_table.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS ChannelBookmarks; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000120_create_channelbookmarks_table.up.sql b/server/channels/db/migrations/mysql/000120_create_channelbookmarks_table.up.sql deleted file mode 100644 index 56b821522d1..00000000000 --- a/server/channels/db/migrations/mysql/000120_create_channelbookmarks_table.up.sql +++ /dev/null @@ -1,21 +0,0 @@ -CREATE TABLE IF NOT EXISTS ChannelBookmarks ( - Id varchar(26) NOT NULL, - OwnerId varchar(26) NOT NULL, - ChannelId varchar(26) NOT NULL, - FileInfoId varchar(26) DEFAULT NULL, - CreateAt bigint(20) DEFAULT 0, - UpdateAt bigint(20) DEFAULT 0, - DeleteAt bigint(20) DEFAULT 0, - DisplayName text, - SortOrder bigint(20) DEFAULT 0, - LinkUrl text DEFAULT NULL, - ImageUrl text DEFAULT NULL, - Emoji varchar(64) DEFAULT NULL, - Type ENUM('link', 'file'), - OriginalId varchar(26) DEFAULT NULL, - ParentId varchar(26) DEFAULT NULL, - PRIMARY KEY (Id), - KEY idx_channelbookmarks_channelid (ChannelId), - KEY idx_channelbookmarks_update_at (UpdateAt), - KEY idx_channelbookmarks_delete_at (DeleteAt) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000121_remove_true_up_review_history.down.sql b/server/channels/db/migrations/mysql/000121_remove_true_up_review_history.down.sql deleted file mode 100644 index 5b25ffdb807..00000000000 --- a/server/channels/db/migrations/mysql/000121_remove_true_up_review_history.down.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE IF NOT EXISTS TrueUpReviewHistory ( - DueDate bigint(20), - Completed boolean, - PRIMARY KEY (DueDate) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/server/channels/db/migrations/mysql/000121_remove_true_up_review_history.up.sql b/server/channels/db/migrations/mysql/000121_remove_true_up_review_history.up.sql deleted file mode 100644 index e3fc2d30119..00000000000 --- a/server/channels/db/migrations/mysql/000121_remove_true_up_review_history.up.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS TrueUpReviewHistory; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000122_preferences_value_length.down.sql b/server/channels/db/migrations/mysql/000122_preferences_value_length.down.sql deleted file mode 100644 index 69a6cd447a9..00000000000 --- a/server/channels/db/migrations/mysql/000122_preferences_value_length.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Only applicable to Postgres diff --git a/server/channels/db/migrations/mysql/000122_preferences_value_length.up.sql b/server/channels/db/migrations/mysql/000122_preferences_value_length.up.sql deleted file mode 100644 index 69a6cd447a9..00000000000 --- a/server/channels/db/migrations/mysql/000122_preferences_value_length.up.sql +++ /dev/null @@ -1 +0,0 @@ --- Only applicable to Postgres diff --git a/server/channels/db/migrations/mysql/000123_remove_upload_file_permission.down.sql b/server/channels/db/migrations/mysql/000123_remove_upload_file_permission.down.sql deleted file mode 100644 index 4743bd64621..00000000000 --- a/server/channels/db/migrations/mysql/000123_remove_upload_file_permission.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Skipping it because the forward migrations are destructive diff --git a/server/channels/db/migrations/mysql/000123_remove_upload_file_permission.up.sql b/server/channels/db/migrations/mysql/000123_remove_upload_file_permission.up.sql deleted file mode 100644 index 5f3a79a06e1..00000000000 --- a/server/channels/db/migrations/mysql/000123_remove_upload_file_permission.up.sql +++ /dev/null @@ -1,18 +0,0 @@ -CREATE PROCEDURE RemoveUuploadFilePermission() -BEGIN - updateRoles: LOOP - -- update affected rows - UPDATE Roles - SET Permissions = REGEXP_REPLACE(Permissions, 'upload_file([[:space:]]|$)', '') - WHERE Permissions like '%upload_file%' and Permissions not REGEXP 'create_post([[:space:]]|$)' - LIMIT 100; - - -- check if the loop has completed - IF ROW_COUNT() < 100 THEN - LEAVE updateRoles; - END IF; - END LOOP updateRoles; -END; - -CALL RemoveUuploadFilePermission(); -DROP PROCEDURE IF EXISTS RemoveUuploadFilePermission; diff --git a/server/channels/db/migrations/mysql/000124_remove_manage_team_permission.down.sql b/server/channels/db/migrations/mysql/000124_remove_manage_team_permission.down.sql deleted file mode 100644 index 7e9ccde63d7..00000000000 --- a/server/channels/db/migrations/mysql/000124_remove_manage_team_permission.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Skipping it because the forward migrations are destructive \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000124_remove_manage_team_permission.up.sql b/server/channels/db/migrations/mysql/000124_remove_manage_team_permission.up.sql deleted file mode 100644 index 7a66afe4831..00000000000 --- a/server/channels/db/migrations/mysql/000124_remove_manage_team_permission.up.sql +++ /dev/null @@ -1,21 +0,0 @@ -CREATE PROCEDURE RemoveUploadFilePermission() -BEGIN - updateRoles: LOOP - -- update affected rows - UPDATE Roles - SET Permissions = REGEXP_REPLACE(Permissions, 'manage_team[[:space:]|?]', '') - WHERE Permissions REGEXP 'manage_team[[:space:]|?]' - AND Permissions not like '%sysconsole_write_user_management_teams%' - AND (Permissions like '%sysconsole_write_user_management_channels%' - OR Permissions like '%sysconsole_write_user_management_groups%') - LIMIT 100; - - -- check if the loop has completed - IF ROW_COUNT() < 100 THEN - LEAVE updateRoles; - END IF; - END LOOP updateRoles; -END; - -CALL RemoveUploadFilePermission(); -DROP PROCEDURE IF EXISTS RemoveUploadFilePermission; diff --git a/server/channels/db/migrations/mysql/000125_remoteclusters_add_default_team_id.down.sql b/server/channels/db/migrations/mysql/000125_remoteclusters_add_default_team_id.down.sql deleted file mode 100644 index 7e9ccde63d7..00000000000 --- a/server/channels/db/migrations/mysql/000125_remoteclusters_add_default_team_id.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Skipping it because the forward migrations are destructive \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000125_remoteclusters_add_default_team_id.up.sql b/server/channels/db/migrations/mysql/000125_remoteclusters_add_default_team_id.up.sql deleted file mode 100644 index 0219ab7aaca..00000000000 --- a/server/channels/db/migrations/mysql/000125_remoteclusters_add_default_team_id.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'RemoteClusters' - AND table_schema = DATABASE() - AND column_name = 'DefaultTeamId' - ) > 0, - 'SELECT 1', - 'ALTER TABLE RemoteClusters ADD DefaultTeamId VARCHAR(26) DEFAULT "";' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; diff --git a/server/channels/db/migrations/mysql/000126_sharedchannels_remotes_add_deleteat.down.sql b/server/channels/db/migrations/mysql/000126_sharedchannels_remotes_add_deleteat.down.sql deleted file mode 100644 index 4743bd64621..00000000000 --- a/server/channels/db/migrations/mysql/000126_sharedchannels_remotes_add_deleteat.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Skipping it because the forward migrations are destructive diff --git a/server/channels/db/migrations/mysql/000126_sharedchannels_remotes_add_deleteat.up.sql b/server/channels/db/migrations/mysql/000126_sharedchannels_remotes_add_deleteat.up.sql deleted file mode 100644 index e0343a248c4..00000000000 --- a/server/channels/db/migrations/mysql/000126_sharedchannels_remotes_add_deleteat.up.sql +++ /dev/null @@ -1,44 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'RemoteClusters' - AND table_schema = DATABASE() - AND index_name = 'remote_clusters_site_url_unique' - ) > 0, - 'DROP INDEX remote_clusters_site_url_unique ON RemoteClusters;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'RemoteClusters' - AND table_schema = DATABASE() - AND column_name = 'DeleteAt' - ) > 0, - 'SELECT 1', - 'ALTER TABLE RemoteClusters ADD DeleteAt bigint(20) DEFAULT 0;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'DeleteAt' - ) > 0, - 'SELECT 1', - 'ALTER TABLE SharedChannelRemotes ADD DeleteAt bigint(20) DEFAULT 0;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; diff --git a/server/channels/db/migrations/mysql/000127_add_mfa_used_ts_to_users.down.sql b/server/channels/db/migrations/mysql/000127_add_mfa_used_ts_to_users.down.sql deleted file mode 100644 index 2a339e78523..00000000000 --- a/server/channels/db/migrations/mysql/000127_add_mfa_used_ts_to_users.down.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE Users DROP COLUMN MfaUsedTimestamps; diff --git a/server/channels/db/migrations/mysql/000127_add_mfa_used_ts_to_users.up.sql b/server/channels/db/migrations/mysql/000127_add_mfa_used_ts_to_users.up.sql deleted file mode 100644 index 8c02b4fdf47..00000000000 --- a/server/channels/db/migrations/mysql/000127_add_mfa_used_ts_to_users.up.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE Users ADD COLUMN MfaUsedTimestamps json NULL; diff --git a/server/channels/db/migrations/mysql/000128_create_scheduled_posts.down.sql b/server/channels/db/migrations/mysql/000128_create_scheduled_posts.down.sql deleted file mode 100644 index a09fd376aed..00000000000 --- a/server/channels/db/migrations/mysql/000128_create_scheduled_posts.down.sql +++ /dev/null @@ -1,15 +0,0 @@ -DROP TABLE IF EXISTS scheduledposts; - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ScheduledPosts' - AND table_schema = DATABASE() - AND index_name = 'idx_scheduledposts_userid_channel_id_scheduled_at' - ) > 0, - 'DROP INDEX idx_scheduledposts_userid_channel_id_scheduled_at on ScheduledPosts;', - 'SELECT 1;' - )); -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000128_create_scheduled_posts.up.sql b/server/channels/db/migrations/mysql/000128_create_scheduled_posts.up.sql deleted file mode 100644 index 021edd5d061..00000000000 --- a/server/channels/db/migrations/mysql/000128_create_scheduled_posts.up.sql +++ /dev/null @@ -1,29 +0,0 @@ -CREATE TABLE IF NOT EXISTS ScheduledPosts ( - id VARCHAR(26) PRIMARY KEY, - createat bigint(20), - updateat bigint(20), - userid VARCHAR(26) NOT NULL, - channelid VARCHAR(26) NOT NULL, - rootid VARCHAR(26), - message text, - props text, - fileids text, - priority text, - scheduledat bigint(20) NOT NULL, - processedat bigint(20), - errorcode VARCHAR(200) -); - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'ScheduledPosts' - AND table_schema = DATABASE() - AND index_name = 'idx_scheduledposts_userid_channel_id_scheduled_at' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_scheduledposts_userid_channel_id_scheduled_at ON ScheduledPosts (UserId, ChannelId, ScheduledAt);' - )); -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000129_add_property_system_architecture.down.sql b/server/channels/db/migrations/mysql/000129_add_property_system_architecture.down.sql deleted file mode 100644 index 2a84e5a456c..00000000000 --- a/server/channels/db/migrations/mysql/000129_add_property_system_architecture.down.sql +++ /dev/null @@ -1,3 +0,0 @@ -DROP TABLE IF EXISTS PropertyGroups; -DROP TABLE IF EXISTS PropertyFields; -DROP TABLE IF EXISTS PropertyValues; diff --git a/server/channels/db/migrations/mysql/000129_add_property_system_architecture.up.sql b/server/channels/db/migrations/mysql/000129_add_property_system_architecture.up.sql deleted file mode 100644 index 531aae9bd3e..00000000000 --- a/server/channels/db/migrations/mysql/000129_add_property_system_architecture.up.sql +++ /dev/null @@ -1,47 +0,0 @@ -CREATE TABLE IF NOT EXISTS PropertyGroups ( - ID varchar(26) PRIMARY KEY, - Name varchar(64) NOT NULL, - UNIQUE(Name) -); - -CREATE TABLE IF NOT EXISTS PropertyFields ( - ID varchar(26) PRIMARY KEY, - GroupID varchar(26) NOT NULL, - Name varchar(255) NOT NULL, - Type enum('text', 'select', 'multiselect', 'date', 'user', 'multiuser'), - Attrs json, - TargetID varchar(255), - TargetType varchar(255), - CreateAt bigint(20), - UpdateAt bigint(20), - DeleteAt bigint(20), - UNIQUE(GroupID, TargetID, Name, DeleteAt) -); - -CREATE TABLE IF NOT EXISTS PropertyValues ( - ID varchar(26) PRIMARY KEY, - TargetID varchar(255) NOT NULL, - TargetType varchar(255) NOT NULL, - GroupID varchar(26) NOT NULL, - FieldID varchar(26) NOT NULL, - Value json, - CreateAt bigint(20), - UpdateAt bigint(20), - DeleteAt bigint(20), - UNIQUE(GroupID, TargetID, FieldID, DeleteAt) -); - -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PropertyValues' - AND table_schema = DATABASE() - AND index_name = 'idx_propertyvalues_targetid_groupid' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_propertyvalues_targetid_groupid ON PropertyValues (TargetID, GroupID);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000130_system_console_stats.down.sql b/server/channels/db/migrations/mysql/000130_system_console_stats.down.sql deleted file mode 100644 index 20933ebd794..00000000000 --- a/server/channels/db/migrations/mysql/000130_system_console_stats.down.sql +++ /dev/null @@ -1 +0,0 @@ --- Nothing to do for MySQL diff --git a/server/channels/db/migrations/mysql/000130_system_console_stats.up.sql b/server/channels/db/migrations/mysql/000130_system_console_stats.up.sql deleted file mode 100644 index 20933ebd794..00000000000 --- a/server/channels/db/migrations/mysql/000130_system_console_stats.up.sql +++ /dev/null @@ -1 +0,0 @@ --- Nothing to do for MySQL diff --git a/server/channels/db/migrations/mysql/000131_create_index_pagination_on_property_values.down.sql b/server/channels/db/migrations/mysql/000131_create_index_pagination_on_property_values.down.sql deleted file mode 100644 index 339619c9817..00000000000 --- a/server/channels/db/migrations/mysql/000131_create_index_pagination_on_property_values.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PropertyValues' - AND table_schema = DATABASE() - AND index_name = 'idx_propertyvalues_create_at_id' - ) > 0, - 'DROP INDEX idx_propertyvalues_create_at_id ON PropertyValues;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000131_create_index_pagination_on_property_values.up.sql b/server/channels/db/migrations/mysql/000131_create_index_pagination_on_property_values.up.sql deleted file mode 100644 index ec2c8558bb6..00000000000 --- a/server/channels/db/migrations/mysql/000131_create_index_pagination_on_property_values.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PropertyValues' - AND table_schema = DATABASE() - AND index_name = 'idx_propertyvalues_create_at_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_propertyvalues_create_at_id ON PropertyValues(CreateAt, ID);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000132_create_index_pagination_on_property_fields.down.sql b/server/channels/db/migrations/mysql/000132_create_index_pagination_on_property_fields.down.sql deleted file mode 100644 index 2197078e7c5..00000000000 --- a/server/channels/db/migrations/mysql/000132_create_index_pagination_on_property_fields.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PropertyFields' - AND table_schema = DATABASE() - AND index_name = 'idx_propertyfields_create_at_id' - ) > 0, - 'DROP INDEX idx_propertyfields_create_at_id ON PropertyFields;', - 'SELECT 1' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000132_create_index_pagination_on_property_fields.up.sql b/server/channels/db/migrations/mysql/000132_create_index_pagination_on_property_fields.up.sql deleted file mode 100644 index 35295733468..00000000000 --- a/server/channels/db/migrations/mysql/000132_create_index_pagination_on_property_fields.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'PropertyFields' - AND table_schema = DATABASE() - AND index_name = 'idx_propertyfields_create_at_id' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_propertyfields_create_at_id ON PropertyFields(CreateAt, ID);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000133_add_channel_banner_fields.down.sql b/server/channels/db/migrations/mysql/000133_add_channel_banner_fields.down.sql deleted file mode 100644 index af29e755144..00000000000 --- a/server/channels/db/migrations/mysql/000133_add_channel_banner_fields.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'BannerInfo' - ), - 'ALTER TABLE Channels DROP COLUMN BannerInfo;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; diff --git a/server/channels/db/migrations/mysql/000133_add_channel_banner_fields.up.sql b/server/channels/db/migrations/mysql/000133_add_channel_banner_fields.up.sql deleted file mode 100644 index 1dee9c496ad..00000000000 --- a/server/channels/db/migrations/mysql/000133_add_channel_banner_fields.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'BannerInfo' - ), - 'ALTER TABLE Channels ADD COLUMN BannerInfo json;', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; diff --git a/server/channels/db/migrations/mysql/000134_create_access_control_policies.down.sql b/server/channels/db/migrations/mysql/000134_create_access_control_policies.down.sql deleted file mode 100644 index 58f450d6809..00000000000 --- a/server/channels/db/migrations/mysql/000134_create_access_control_policies.down.sql +++ /dev/null @@ -1,2 +0,0 @@ -DROP TABLE IF EXISTS AccessControlPolicyHistory; -DROP TABLE IF EXISTS AccessControlPolicies; diff --git a/server/channels/db/migrations/mysql/000134_create_access_control_policies.up.sql b/server/channels/db/migrations/mysql/000134_create_access_control_policies.up.sql deleted file mode 100644 index 87d7e328094..00000000000 --- a/server/channels/db/migrations/mysql/000134_create_access_control_policies.up.sql +++ /dev/null @@ -1,23 +0,0 @@ -CREATE TABLE IF NOT EXISTS AccessControlPolicies ( - ID varchar(26) PRIMARY KEY, - Name varchar(128) NOT NULL, - Type varchar(128) NOT NULL, - Active bool NOT NULL, - CreateAt bigint(20) NOT NULL, - Revision int NOT NULL, - Version varchar(8) NOT NULL, - Data json, - Props json -); - -CREATE TABLE IF NOT EXISTS AccessControlPolicyHistory ( - ID varchar(26) NOT NULL, - Name varchar(128) NOT NULL, - Type varchar(128) NOT NULL, - CreateAt bigint(20) NOT NULL, - Revision int NOT NULL, - Version varchar(8) NOT NULL, - Data json, - Props json, - PRIMARY KEY (ID, Revision) -); diff --git a/server/channels/db/migrations/mysql/000135_sidebarchannels_categoryid.down.sql b/server/channels/db/migrations/mysql/000135_sidebarchannels_categoryid.down.sql deleted file mode 100644 index 6e65c84cf42..00000000000 --- a/server/channels/db/migrations/mysql/000135_sidebarchannels_categoryid.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'SidebarChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_sidebarchannels_categoryid' - ) > 0, - 'SELECT 1', - 'DROP INDEX idx_sidebarchannels_categoryid ON SidebarChannels;' -)); - -PREPARE removeIndexIfExists FROM @preparedStatement; -EXECUTE removeIndexIfExists; -DEALLOCATE PREPARE removeIndexIfExists; diff --git a/server/channels/db/migrations/mysql/000135_sidebarchannels_categoryid.up.sql b/server/channels/db/migrations/mysql/000135_sidebarchannels_categoryid.up.sql deleted file mode 100644 index 4e4584ac639..00000000000 --- a/server/channels/db/migrations/mysql/000135_sidebarchannels_categoryid.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'SidebarChannels' - AND table_schema = DATABASE() - AND index_name = 'idx_sidebarchannels_categoryid' - ) > 0, - 'SELECT 1', - 'CREATE INDEX idx_sidebarchannels_categoryid ON SidebarChannels(CategoryId);' -)); - -PREPARE createIndexIfNotExists FROM @preparedStatement; -EXECUTE createIndexIfNotExists; -DEALLOCATE PREPARE createIndexIfNotExists; diff --git a/server/channels/db/migrations/mysql/000136_create_attribute_view.down.sql b/server/channels/db/migrations/mysql/000136_create_attribute_view.down.sql deleted file mode 100644 index 65bde78cc2e..00000000000 --- a/server/channels/db/migrations/mysql/000136_create_attribute_view.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP VIEW IF EXISTS AttributeView; diff --git a/server/channels/db/migrations/mysql/000136_create_attribute_view.up.sql b/server/channels/db/migrations/mysql/000136_create_attribute_view.up.sql deleted file mode 100644 index 17d1fd774d1..00000000000 --- a/server/channels/db/migrations/mysql/000136_create_attribute_view.up.sql +++ /dev/null @@ -1,11 +0,0 @@ -CREATE OR REPLACE VIEW AttributeView AS - SELECT - pv.GroupID, - pv.TargetID, - pv.TargetType, - JSON_OBJECTAGG(pf.Name, pv.Value) - AS Attributes - FROM PropertyValues pv - LEFT JOIN PropertyFields pf ON pf.ID = pv.FieldID - GROUP BY GroupID, TargetID, TargetType; - \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000137_update_attribute_view.down.sql b/server/channels/db/migrations/mysql/000137_update_attribute_view.down.sql deleted file mode 100644 index edb1f7ee2a1..00000000000 --- a/server/channels/db/migrations/mysql/000137_update_attribute_view.down.sql +++ /dev/null @@ -1 +0,0 @@ --- This is no-op migration for MySQL. diff --git a/server/channels/db/migrations/mysql/000137_update_attribute_view.up.sql b/server/channels/db/migrations/mysql/000137_update_attribute_view.up.sql deleted file mode 100644 index edb1f7ee2a1..00000000000 --- a/server/channels/db/migrations/mysql/000137_update_attribute_view.up.sql +++ /dev/null @@ -1 +0,0 @@ --- This is no-op migration for MySQL. diff --git a/server/channels/db/migrations/mysql/000138_add_default_category_name_to_channel.down.sql b/server/channels/db/migrations/mysql/000138_add_default_category_name_to_channel.down.sql deleted file mode 100644 index d45eb09e1e3..00000000000 --- a/server/channels/db/migrations/mysql/000138_add_default_category_name_to_channel.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'DefaultCategoryName' - ), - 'ALTER TABLE Channels DROP COLUMN DefaultCategoryName;', - 'SELECT 1;' -)); - -PREPARE removeColumnIfExists FROM @preparedStatement; -EXECUTE removeColumnIfExists; -DEALLOCATE PREPARE removeColumnIfExists; diff --git a/server/channels/db/migrations/mysql/000138_add_default_category_name_to_channel.up.sql b/server/channels/db/migrations/mysql/000138_add_default_category_name_to_channel.up.sql deleted file mode 100644 index 384439d30c8..00000000000 --- a/server/channels/db/migrations/mysql/000138_add_default_category_name_to_channel.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - NOT EXISTS( - SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Channels' - AND table_schema = DATABASE() - AND column_name = 'DefaultCategoryName' - ), - 'ALTER TABLE Channels ADD COLUMN DefaultCategoryName varchar(64) NOT NULL DEFAULT "";', - 'SELECT 1;' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; diff --git a/server/channels/db/migrations/mysql/000139_remoteclusters_add_last_global_user_sync_at.down.sql b/server/channels/db/migrations/mysql/000139_remoteclusters_add_last_global_user_sync_at.down.sql deleted file mode 100644 index 1db26728db3..00000000000 --- a/server/channels/db/migrations/mysql/000139_remoteclusters_add_last_global_user_sync_at.down.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'RemoteClusters' - AND COLUMN_NAME = 'LastGlobalUserSyncAt' - ) > 0, - 'ALTER TABLE RemoteClusters DROP COLUMN LastGlobalUserSyncAt', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000139_remoteclusters_add_last_global_user_sync_at.up.sql b/server/channels/db/migrations/mysql/000139_remoteclusters_add_last_global_user_sync_at.up.sql deleted file mode 100644 index 2eae2a93e53..00000000000 --- a/server/channels/db/migrations/mysql/000139_remoteclusters_add_last_global_user_sync_at.up.sql +++ /dev/null @@ -1,14 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'RemoteClusters' - AND COLUMN_NAME = 'LastGlobalUserSyncAt' - ) > 0, - 'SELECT 1', - 'ALTER TABLE RemoteClusters ADD COLUMN LastGlobalUserSyncAt bigint DEFAULT 0' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000140_add_lastmemberssyncat_to_sharedchannelremotes.down.sql b/server/channels/db/migrations/mysql/000140_add_lastmemberssyncat_to_sharedchannelremotes.down.sql deleted file mode 100644 index ca804f16db5..00000000000 --- a/server/channels/db/migrations/mysql/000140_add_lastmemberssyncat_to_sharedchannelremotes.down.sql +++ /dev/null @@ -1,29 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'LastMembersSyncAt' - ) > 0, - 'ALTER TABLE SharedChannelRemotes DROP COLUMN LastMembersSyncAt;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement2 = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelUsers' - AND table_schema = DATABASE() - AND column_name = 'LastMembershipSyncAt' - ) > 0, - 'ALTER TABLE SharedChannelUsers DROP COLUMN LastMembershipSyncAt;', - 'SELECT 1' -)); - -PREPARE alterIfExists2 FROM @preparedStatement2; -EXECUTE alterIfExists2; -DEALLOCATE PREPARE alterIfExists2; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000140_add_lastmemberssyncat_to_sharedchannelremotes.up.sql b/server/channels/db/migrations/mysql/000140_add_lastmemberssyncat_to_sharedchannelremotes.up.sql deleted file mode 100644 index 66433b228da..00000000000 --- a/server/channels/db/migrations/mysql/000140_add_lastmemberssyncat_to_sharedchannelremotes.up.sql +++ /dev/null @@ -1,29 +0,0 @@ -SET @preparedStatement = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelRemotes' - AND table_schema = DATABASE() - AND column_name = 'LastMembersSyncAt' - ) > 0, - 'SELECT 1', - 'ALTER TABLE SharedChannelRemotes ADD LastMembersSyncAt bigint DEFAULT 0;' -)); - -PREPARE alterIfNotExists FROM @preparedStatement; -EXECUTE alterIfNotExists; -DEALLOCATE PREPARE alterIfNotExists; - -SET @preparedStatement2 = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'SharedChannelUsers' - AND table_schema = DATABASE() - AND column_name = 'LastMembershipSyncAt' - ) > 0, - 'SELECT 1', - 'ALTER TABLE SharedChannelUsers ADD LastMembershipSyncAt bigint DEFAULT 0;' -)); - -PREPARE alterIfNotExists2 FROM @preparedStatement2; -EXECUTE alterIfNotExists2; -DEALLOCATE PREPARE alterIfNotExists2; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000141_add_remoteid_channelid_to_post_acknowledgements.down.sql b/server/channels/db/migrations/mysql/000141_add_remoteid_channelid_to_post_acknowledgements.down.sql deleted file mode 100644 index 2e5577f6e52..00000000000 --- a/server/channels/db/migrations/mysql/000141_add_remoteid_channelid_to_post_acknowledgements.down.sql +++ /dev/null @@ -1,29 +0,0 @@ -SET @preparedStatement1 = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'PostAcknowledgements' - AND table_schema = DATABASE() - AND column_name = 'RemoteId' - ) > 0, - 'ALTER TABLE PostAcknowledgements DROP COLUMN RemoteId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement1; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; - -SET @preparedStatement2 = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'PostAcknowledgements' - AND table_schema = DATABASE() - AND column_name = 'ChannelId' - ) > 0, - 'ALTER TABLE PostAcknowledgements DROP COLUMN ChannelId;', - 'SELECT 1' -)); - -PREPARE alterIfExists FROM @preparedStatement2; -EXECUTE alterIfExists; -DEALLOCATE PREPARE alterIfExists; \ No newline at end of file diff --git a/server/channels/db/migrations/mysql/000141_add_remoteid_channelid_to_post_acknowledgements.up.sql b/server/channels/db/migrations/mysql/000141_add_remoteid_channelid_to_post_acknowledgements.up.sql deleted file mode 100644 index 83508956464..00000000000 --- a/server/channels/db/migrations/mysql/000141_add_remoteid_channelid_to_post_acknowledgements.up.sql +++ /dev/null @@ -1,29 +0,0 @@ -SET @preparedStatement1 = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'PostAcknowledgements' - AND table_schema = DATABASE() - AND column_name = 'RemoteId' - ) > 0, - 'SELECT 1;', - 'ALTER TABLE PostAcknowledgements ADD COLUMN RemoteId varchar(26) DEFAULT \'\';' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement1; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; - -SET @preparedStatement2 = (SELECT IF( - ( - SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'PostAcknowledgements' - AND table_schema = DATABASE() - AND column_name = 'ChannelId' - ) > 0, - 'SELECT 1;', - 'ALTER TABLE PostAcknowledgements ADD COLUMN ChannelId varchar(26) DEFAULT \'\';' -)); - -PREPARE addColumnIfNotExists FROM @preparedStatement2; -EXECUTE addColumnIfNotExists; -DEALLOCATE PREPARE addColumnIfNotExists; \ No newline at end of file diff --git a/server/channels/store/layer_generators/retry_layer.go.tmpl b/server/channels/store/layer_generators/retry_layer.go.tmpl index bb6d69e4d82..acdfe11df7d 100644 --- a/server/channels/store/layer_generators/retry_layer.go.tmpl +++ b/server/channels/store/layer_generators/retry_layer.go.tmpl @@ -10,7 +10,6 @@ import ( "context" timepkg "time" - "github.com/go-sql-driver/mysql" "github.com/lib/pq" "github.com/pkg/errors" @@ -19,8 +18,6 @@ import ( "github.com/mattermost/mattermost/server/v8/channels/store" ) -const mySQLDeadlockCode = uint16(1213) - type {{.Name}} struct { store.Store {{range $index, $element := .SubStores}} {{$index}}Store store.{{$index}}Store @@ -42,16 +39,11 @@ type {{.Name}} struct { func isRepeatableError(err error) bool { var pqErr *pq.Error - var mysqlErr *mysql.MySQLError switch { case errors.As(errors.Cause(err), &pqErr): if pqErr.Code == "40001" || pqErr.Code == "40P01" { return true } - case errors.As(errors.Cause(err), &mysqlErr): - if mysqlErr.Number == mySQLDeadlockCode { - return true - } } return false } diff --git a/server/channels/store/localcachelayer/layer_test.go b/server/channels/store/localcachelayer/layer_test.go index 7819ce8fba1..4541a651f32 100644 --- a/server/channels/store/localcachelayer/layer_test.go +++ b/server/channels/store/localcachelayer/layer_test.go @@ -4,7 +4,6 @@ package localcachelayer import ( - "os" "sync" "testing" @@ -33,7 +32,7 @@ var storeTypes []*storeType func newStoreType(name, driver string) *storeType { return &storeType{ Name: name, - SqlSettings: storetest.MakeSqlSettings(driver, false), + SqlSettings: storetest.MakeSqlSettings(driver), } } @@ -80,19 +79,7 @@ func initStores(logger mlog.LoggerIFace) { return } - // In CI, we already run the entire test suite for both mysql and postgres in parallel. - // So we just run the tests for the current database set. - if os.Getenv("IS_CI") == "true" { - switch os.Getenv("MM_SQLSETTINGS_DRIVERNAME") { - case "mysql": - storeTypes = append(storeTypes, newStoreType("LocalCache+MySQL", model.DatabaseDriverMysql)) - case "postgres": - storeTypes = append(storeTypes, newStoreType("LocalCache+PostgreSQL", model.DatabaseDriverPostgres)) - } - } else { - storeTypes = append(storeTypes, newStoreType("LocalCache+MySQL", model.DatabaseDriverMysql), - newStoreType("LocalCache+PostgreSQL", model.DatabaseDriverPostgres)) - } + storeTypes = append(storeTypes, newStoreType("LocalCache+PostgreSQL", model.DatabaseDriverPostgres)) defer func() { if err := recover(); err != nil { diff --git a/server/channels/store/retrylayer/retrylayer.go b/server/channels/store/retrylayer/retrylayer.go index ef5ebaeac81..a9db88f8f70 100644 --- a/server/channels/store/retrylayer/retrylayer.go +++ b/server/channels/store/retrylayer/retrylayer.go @@ -10,7 +10,6 @@ import ( "context" timepkg "time" - "github.com/go-sql-driver/mysql" "github.com/lib/pq" "github.com/pkg/errors" @@ -19,8 +18,6 @@ import ( "github.com/mattermost/mattermost/server/v8/channels/store" ) -const mySQLDeadlockCode = uint16(1213) - type RetryLayer struct { store.Store AccessControlPolicyStore store.AccessControlPolicyStore @@ -537,16 +534,11 @@ type RetryLayerWebhookStore struct { func isRepeatableError(err error) bool { var pqErr *pq.Error - var mysqlErr *mysql.MySQLError switch { case errors.As(errors.Cause(err), &pqErr): if pqErr.Code == "40001" || pqErr.Code == "40P01" { return true } - case errors.As(errors.Cause(err), &mysqlErr): - if mysqlErr.Number == mySQLDeadlockCode { - return true - } } return false } diff --git a/server/channels/store/retrylayer/retrylayer_test.go b/server/channels/store/retrylayer/retrylayer_test.go index 84cb02c7219..6c648bb219b 100644 --- a/server/channels/store/retrylayer/retrylayer_test.go +++ b/server/channels/store/retrylayer/retrylayer_test.go @@ -6,7 +6,6 @@ package retrylayer import ( "testing" - "github.com/go-sql-driver/mysql" "github.com/lib/pq" "github.com/pkg/errors" @@ -90,26 +89,6 @@ func TestRetry(t *testing.T) { layer.Bot().Get("test", false) mockBotStore.AssertExpectations(t) }) - t.Run("on mysql repeatable error should retry", func(t *testing.T) { - mock := genStore() - mockBotStore := mock.Bot().(*mocks.BotStore) - mysqlErr := mysql.MySQLError{Number: uint16(1213), Message: "Deadlock"} - mockBotStore.On("Get", "test", false).Return(nil, errors.Wrap(&mysqlErr, "test-error")).Times(3) - mock.On("Bot").Return(&mockBotStore) - layer := New(mock) - layer.Bot().Get("test", false) - mockBotStore.AssertExpectations(t) - }) - t.Run("on mysql not repeatable error should not retry", func(t *testing.T) { - mock := genStore() - mockBotStore := mock.Bot().(*mocks.BotStore) - mysqlErr := mysql.MySQLError{Number: uint16(1000), Message: "Not repeatable error"} - mockBotStore.On("Get", "test", false).Return(nil, errors.Wrap(&mysqlErr, "test-error")).Times(1) - mock.On("Bot").Return(&mockBotStore) - layer := New(mock) - layer.Bot().Get("test", false) - mockBotStore.AssertExpectations(t) - }) t.Run("on postgres repeatable error should retry", func(t *testing.T) { for _, errCode := range []string{"40001", "40P01"} { diff --git a/server/channels/store/searchlayer/layer_test.go b/server/channels/store/searchlayer/layer_test.go index 2b961793109..49d827e2393 100644 --- a/server/channels/store/searchlayer/layer_test.go +++ b/server/channels/store/searchlayer/layer_test.go @@ -27,7 +27,7 @@ func TestUpdateConfigRace(t *testing.T) { if driverName == "" { driverName = model.DatabaseDriverPostgres } - settings := storetest.MakeSqlSettings(driverName, false) + settings := storetest.MakeSqlSettings(driverName) store, err := sqlstore.New(*settings, logger, nil, sqlstore.DisableMorphLogging()) require.NoError(t, err) diff --git a/server/channels/store/searchtest/channel_layer.go b/server/channels/store/searchtest/channel_layer.go index c76d217a757..76e8eed0ef6 100644 --- a/server/channels/store/searchtest/channel_layer.go +++ b/server/channels/store/searchtest/channel_layer.go @@ -17,7 +17,7 @@ var searchChannelStoreTests = []searchTest{ { Name: "Should be able to autocomplete a channel by name", Fn: testAutocompleteChannelByName, - Tags: []string{EngineMySQL, EngineElasticSearch, EngineBleve}, + Tags: []string{EngineElasticSearch, EngineBleve}, }, { Name: "Should be able to autocomplete a channel by name (Postgres)", @@ -32,7 +32,7 @@ var searchChannelStoreTests = []searchTest{ { Name: "Should be able to autocomplete a channel by a part of its name when has parts splitted by - character", Fn: testAutocompleteChannelByNameSplittedWithDashChar, - Tags: []string{EngineMySQL, EngineElasticSearch, EngineBleve}, + Tags: []string{EngineElasticSearch, EngineBleve}, }, { Name: "Should be able to autocomplete a channel by a part of its name when has parts splitted by - character (Postgres)", @@ -42,12 +42,12 @@ var searchChannelStoreTests = []searchTest{ { Name: "Should be able to autocomplete a channel by a part of its name when has parts splitted by _ character", Fn: testAutocompleteChannelByNameSplittedWithUnderscoreChar, - Tags: []string{EngineMySQL, EngineElasticSearch, EngineBleve}, + Tags: []string{EngineElasticSearch, EngineBleve}, }, { Name: "Should be able to autocomplete a channel by a part of its display name when has parts splitted by whitespace character", Fn: testAutocompleteChannelByDisplayNameSplittedByWhitespaces, - Tags: []string{EngineMySQL, EngineElasticSearch, EngineBleve}, + Tags: []string{EngineElasticSearch, EngineBleve}, }, { Name: "Should be able to autocomplete retrieving all channels if the term is empty", @@ -57,7 +57,7 @@ var searchChannelStoreTests = []searchTest{ { Name: "Should be able to autocomplete channels in a case insensitive manner", Fn: testSearchChannelsInCaseInsensitiveManner, - Tags: []string{EngineMySQL, EngineElasticSearch, EngineBleve}, + Tags: []string{EngineElasticSearch, EngineBleve}, }, { Name: "Should be able to autocomplete channels in a case insensitive manner (Postgres)", diff --git a/server/channels/store/searchtest/file_info_layer.go b/server/channels/store/searchtest/file_info_layer.go index a83974e20b9..6705cfe6f09 100644 --- a/server/channels/store/searchtest/file_info_layer.go +++ b/server/channels/store/searchtest/file_info_layer.go @@ -28,7 +28,7 @@ var searchFileInfoStoreTests = []searchTest{ { Name: "Should be able to search for exact phrases in quotes", Fn: testFileInfoSearchExactPhraseInQuotes, - Tags: []string{EnginePostgres, EngineMySQL, EngineElasticSearch}, + Tags: []string{EnginePostgres, EngineElasticSearch}, }, { Name: "Should be able to search for email addresses with or without quotes", @@ -93,12 +93,12 @@ var searchFileInfoStoreTests = []searchTest{ { Name: "Should be able to exclude messages that contain a search term", Fn: testFileInfoFilterFilesWithATerm, - Tags: []string{EngineMySQL, EnginePostgres}, + Tags: []string{EnginePostgres}, }, { Name: "Should be able to search using boolean operators", Fn: testFileInfoSearchUsingBooleanOperators, - Tags: []string{EngineMySQL, EnginePostgres, EngineElasticSearch}, + Tags: []string{EnginePostgres, EngineElasticSearch}, }, { Name: "Should be able to search with combined filters", @@ -108,7 +108,7 @@ var searchFileInfoStoreTests = []searchTest{ { Name: "Should be able to ignore stop words", Fn: testFileInfoSearchIgnoringStopWords, - Tags: []string{EngineMySQL, EngineElasticSearch}, + Tags: []string{EngineElasticSearch}, }, { Name: "Should support search stemming", @@ -139,12 +139,12 @@ var searchFileInfoStoreTests = []searchTest{ { Name: "Should support terms with underscore", Fn: testFileInfoSupportTermsWithUnderscore, - Tags: []string{EngineMySQL, EngineElasticSearch}, + Tags: []string{EngineElasticSearch}, }, { Name: "Should be able to search in deleted/archived channels", Fn: testFileInfoSearchInDeletedOrArchivedChannels, - Tags: []string{EngineMySQL, EnginePostgres}, + Tags: []string{EnginePostgres}, }, { Name: "Should be able to search terms with dashes", @@ -161,7 +161,7 @@ var searchFileInfoStoreTests = []searchTest{ { Name: "Should be able to search terms with underscores", Fn: testFileInfoSearchTermsWithUnderscores, - Tags: []string{EngineMySQL, EngineElasticSearch}, + Tags: []string{EngineElasticSearch}, }, { Name: "Should be able to combine stemming and wildcards", @@ -176,7 +176,7 @@ var searchFileInfoStoreTests = []searchTest{ { Name: "Should not support slash as character separator", Fn: testFileInfoSlashShouldNotBeCharSeparator, - Tags: []string{EngineMySQL, EngineElasticSearch}, + Tags: []string{EngineElasticSearch}, }, { Name: "Should be able to search emails without quoting them", @@ -191,12 +191,12 @@ var searchFileInfoStoreTests = []searchTest{ { Name: "Should not search files not attached to a post", Fn: testFileInfoSearchNoResultForPostlessFileInfos, - Tags: []string{EnginePostgres, EngineMySQL}, + Tags: []string{EnginePostgres}, }, { Name: "Should search files part of channel bookmarks", Fn: testFileInfoSearchShowChannelBookmarkFiles, - Tags: []string{EnginePostgres, EngineMySQL, EngineElasticSearch}, + Tags: []string{EnginePostgres, EngineElasticSearch}, }, { Name: "Should search files across teams", diff --git a/server/channels/store/searchtest/post_layer.go b/server/channels/store/searchtest/post_layer.go index f28196ad106..481112aad5e 100644 --- a/server/channels/store/searchtest/post_layer.go +++ b/server/channels/store/searchtest/post_layer.go @@ -33,12 +33,12 @@ var searchPostStoreTests = []searchTest{ { Name: "Should be able to search for quoted patterns with AND OR combinations", Fn: testSearchANDORQuotesCombinations, - Tags: []string{EnginePostgres, EngineMySQL, EngineElasticSearch}, + Tags: []string{EnginePostgres, EngineElasticSearch}, }, { Name: "Should be able to search without stemming", Fn: testStemming, - Tags: []string{EnginePostgres, EngineMySQL}, + Tags: []string{EnginePostgres}, }, { // Postgres supports search with and without quotes @@ -50,7 +50,7 @@ var searchPostStoreTests = []searchTest{ // MySql supports search with quotes only Name: "Should be able to search for email addresses with quotes", Fn: testSearchEmailAddressesWithQuotes, - Tags: []string{EngineMySQL}, + Tags: []string{EngineElasticSearch}, }, { Name: "Should be able to search when markdown underscores are applied", @@ -105,12 +105,12 @@ var searchPostStoreTests = []searchTest{ { Name: "Should be able to exclude messages that contain a search term", Fn: testFilterMessagesWithATerm, - Tags: []string{EngineMySQL, EnginePostgres}, + Tags: []string{EnginePostgres}, }, { Name: "Should be able to search using boolean operators", Fn: testSearchUsingBooleanOperators, - Tags: []string{EngineMySQL, EnginePostgres, EngineElasticSearch}, + Tags: []string{EnginePostgres, EngineElasticSearch}, }, { Name: "Should be able to search with combined filters", @@ -120,7 +120,7 @@ var searchPostStoreTests = []searchTest{ { Name: "Should be able to ignore stop words", Fn: testSearchIgnoringStopWords, - Tags: []string{EngineMySQL, EngineElasticSearch}, + Tags: []string{EngineElasticSearch}, }, { Name: "Should support search stemming", @@ -151,7 +151,7 @@ var searchPostStoreTests = []searchTest{ { Name: "Should support terms with underscore", Fn: testSupportTermsWithUnderscore, - Tags: []string{EngineMySQL, EngineElasticSearch}, + Tags: []string{EngineElasticSearch}, }, { Name: "Should search or exclude post using hashtags", @@ -216,7 +216,7 @@ var searchPostStoreTests = []searchTest{ { Name: "Should be able to search in deleted/archived channels", Fn: testSearchInDeletedOrArchivedChannels, - Tags: []string{EngineMySQL, EnginePostgres}, + Tags: []string{EnginePostgres}, }, { Name: "Should be able to search terms with dashes", @@ -233,7 +233,7 @@ var searchPostStoreTests = []searchTest{ { Name: "Should be able to search terms with underscores", Fn: testSearchTermsWithUnderscores, - Tags: []string{EngineMySQL, EngineElasticSearch}, + Tags: []string{EngineElasticSearch}, }, { Name: "Should be able to search posts made by bot accounts", @@ -258,7 +258,7 @@ var searchPostStoreTests = []searchTest{ { Name: "Should not support slash as character separator", Fn: testSlashShouldNotBeCharSeparator, - Tags: []string{EngineMySQL, EngineElasticSearch}, + Tags: []string{EngineElasticSearch}, }, { Name: "Should be able to search in comments", @@ -268,7 +268,7 @@ var searchPostStoreTests = []searchTest{ { Name: "Should be able to search terms within links", Fn: testSupportSearchTermsWithinLinks, - Tags: []string{EngineMySQL, EngineElasticSearch}, + Tags: []string{EngineElasticSearch}, }, { Name: "Should not return links that are embedded in markdown", diff --git a/server/channels/store/searchtest/testlib.go b/server/channels/store/searchtest/testlib.go index bab2dfbf375..720d5008ebb 100644 --- a/server/channels/store/searchtest/testlib.go +++ b/server/channels/store/searchtest/testlib.go @@ -12,7 +12,6 @@ import ( const ( EngineAll = "all" - EngineMySQL = "mysql" EnginePostgres = "postgres" EngineElasticSearch = "elasticsearch" EngineBleve = "bleve" diff --git a/server/channels/store/searchtest/user_layer.go b/server/channels/store/searchtest/user_layer.go index d91ad800829..d2fce935292 100644 --- a/server/channels/store/searchtest/user_layer.go +++ b/server/channels/store/searchtest/user_layer.go @@ -96,12 +96,12 @@ var searchUserStoreTests = []searchTest{ { Name: "Should be able to search inactive users", Fn: testShouldBeAbleToSearchInactiveUsers, - Tags: []string{EngineMySQL, EnginePostgres, EngineElasticSearch}, + Tags: []string{EnginePostgres, EngineElasticSearch}, }, { Name: "Should be able to search filtering by role", Fn: testShouldBeAbleToSearchFilteringByRole, - Tags: []string{EngineMySQL, EnginePostgres, EngineElasticSearch}, + Tags: []string{EnginePostgres, EngineElasticSearch}, }, { Name: "Should ignore leading @ when searching users", diff --git a/server/channels/store/sqlstore/attributes_store.go b/server/channels/store/sqlstore/attributes_store.go index def3a95f187..fbdc0598641 100644 --- a/server/channels/store/sqlstore/attributes_store.go +++ b/server/channels/store/sqlstore/attributes_store.go @@ -117,31 +117,18 @@ func (s *SqlAttributesStore) SearchUsers(rctx request.CTX, opts model.SubjectSea if opts.TeamID != "" { argCount++ - if s.DriverName() == model.DatabaseDriverMysql { - query = query.Where("Users.Id IN (SELECT UserId FROM TeamMembers WHERE TeamId = ? AND DeleteAt = 0)", opts.TeamID) - count = count.Where("Users.Id IN (SELECT UserId FROM TeamMembers WHERE TeamId = ? AND DeleteAt = 0)", opts.TeamID) - } else { - query = query.Where(sq.Expr(fmt.Sprintf("Users.Id IN (SELECT UserId FROM TeamMembers WHERE TeamId = $%d AND DeleteAt = 0)", argCount), opts.TeamID)) - count = count.Where(sq.Expr(fmt.Sprintf("Users.Id IN (SELECT UserId FROM TeamMembers WHERE TeamId = $%d AND DeleteAt = 0)", argCount), opts.TeamID)) - } + query = query.Where(sq.Expr(fmt.Sprintf("Users.Id IN (SELECT UserId FROM TeamMembers WHERE TeamId = $%d AND DeleteAt = 0)", argCount), opts.TeamID)) + count = count.Where(sq.Expr(fmt.Sprintf("Users.Id IN (SELECT UserId FROM TeamMembers WHERE TeamId = $%d AND DeleteAt = 0)", argCount), opts.TeamID)) } if opts.ExcludeChannelMembers != "" { argCount++ - if s.DriverName() == model.DatabaseDriverMysql { - query = query.Where(sq.Expr("NOT EXISTS (SELECT 1 FROM ChannelMembers WHERE ChannelMembers.UserId = Users.Id AND ChannelMembers.ChannelId = ?)", opts.ExcludeChannelMembers)) - } else { - query = query.Where(sq.Expr(fmt.Sprintf("NOT EXISTS (SELECT 1 FROM ChannelMembers WHERE ChannelMembers.UserId = Users.Id AND ChannelMembers.ChannelId = $%d)", argCount), opts.ExcludeChannelMembers)) - } + query = query.Where(sq.Expr(fmt.Sprintf("NOT EXISTS (SELECT 1 FROM ChannelMembers WHERE ChannelMembers.UserId = Users.Id AND ChannelMembers.ChannelId = $%d)", argCount), opts.ExcludeChannelMembers)) } if opts.Cursor.TargetID != "" { argCount++ - if s.DriverName() == model.DatabaseDriverMysql { - query = query.Where(sq.Expr("TargetID > ?", opts.Cursor.TargetID)) - } else { - query = query.Where(sq.Expr(fmt.Sprintf("TargetID > $%d", argCount), opts.Cursor.TargetID)) - } + query = query.Where(sq.Expr(fmt.Sprintf("TargetID > $%d", argCount), opts.Cursor.TargetID)) } searchFields := make([]string, 0, len(UserSearchTypeNames)) @@ -191,12 +178,8 @@ func (s *SqlAttributesStore) GetChannelMembersToRemove(rctx request.CTX, channel argCount := len(opts.Args) - if s.DriverName() == model.DatabaseDriverMysql { - query = query.Where(sq.Eq{"ChannelMembers.ChannelId": channelID}) - } else { - argCount++ - query = query.Where(sq.Expr(fmt.Sprintf("ChannelMembers.ChannelId = $%d", argCount), channelID)) - } + argCount++ + query = query.Where(sq.Expr(fmt.Sprintf("ChannelMembers.ChannelId = $%d", argCount), channelID)) if opts.Limit > 0 { query = query.Limit(uint64(opts.Limit)) @@ -206,11 +189,7 @@ func (s *SqlAttributesStore) GetChannelMembersToRemove(rctx request.CTX, channel if opts.Cursor.TargetID != "" { argCount++ - if s.DriverName() == model.DatabaseDriverMysql { - query = query.Where(sq.Expr("ChannelMembers.UserId > ?", opts.Cursor.TargetID)) - } else { - query = query.Where(sq.Expr(fmt.Sprintf("ChannelMembers.UserId > $%d", argCount), opts.Cursor.TargetID)) - } + query = query.Where(sq.Expr(fmt.Sprintf("ChannelMembers.UserId > $%d", argCount), opts.Cursor.TargetID)) } q, args, err := query.ToSql() diff --git a/server/channels/store/sqlstore/channel_member_history_store.go b/server/channels/store/sqlstore/channel_member_history_store.go index 5d1d09fc2c6..89a7e5cff16 100644 --- a/server/channels/store/sqlstore/channel_member_history_store.go +++ b/server/channels/store/sqlstore/channel_member_history_store.go @@ -248,6 +248,7 @@ func (s SqlChannelMemberHistoryStore) PermanentDeleteBatchForRetentionPolicies(r // DeleteOrphanedRows removes entries from ChannelMemberHistory when a corresponding channel no longer exists. func (s SqlChannelMemberHistoryStore) DeleteOrphanedRows(limit int) (deleted int64, err error) { + // TODO: https://mattermost.atlassian.net/browse/MM-63368 // We need the extra level of nesting to deal with MySQL's locking const query = ` DELETE FROM ChannelMemberHistory WHERE (ChannelId, UserId, JoinTime) IN ( diff --git a/server/channels/store/sqlstore/channel_store.go b/server/channels/store/sqlstore/channel_store.go index d027d4d9f9a..bf029e277ad 100644 --- a/server/channels/store/sqlstore/channel_store.go +++ b/server/channels/store/sqlstore/channel_store.go @@ -565,38 +565,19 @@ func (s SqlChannelStore) upsertPublicChannelT(transaction *sqlxTxWrapper, channe "purpose": publicChannel.Purpose, } var err error - if s.DriverName() == model.DatabaseDriverMysql { - _, err = transaction.NamedExec(` - INSERT INTO - PublicChannels(Id, DeleteAt, TeamId, DisplayName, Name, Header, Purpose) - VALUES - (:id, :deleteat, :teamid, :displayname, :name, :header, :purpose) - `, vals) - if err != nil && IsUniqueConstraintError(err, []string{"PRIMARY"}) { - _, err = transaction.NamedExec(`UPDATE PublicChannels - SET deleteAt = :deleteat, - TeamId = :teamid, - DisplayName = :displayname, - Name = :name, - Header = :header, - Purpose = :purpose - WHERE Id=:id`, vals) - } - } else { - _, err = transaction.NamedExec(` - INSERT INTO - PublicChannels(Id, DeleteAt, TeamId, DisplayName, Name, Header, Purpose) - VALUES - (:id, :deleteat, :teamid, :displayname, :name, :header, :purpose) - ON CONFLICT (id) DO UPDATE - SET DeleteAt = :deleteat, - TeamId = :teamid, - DisplayName = :displayname, - Name = :name, - Header = :header, - Purpose = :purpose; - `, vals) - } + _, err = transaction.NamedExec(` + INSERT INTO + PublicChannels(Id, DeleteAt, TeamId, DisplayName, Name, Header, Purpose) + VALUES + (:id, :deleteat, :teamid, :displayname, :name, :header, :purpose) + ON CONFLICT (id) DO UPDATE + SET DeleteAt = :deleteat, + TeamId = :teamid, + DisplayName = :displayname, + Name = :name, + Header = :header, + Purpose = :purpose; + `, vals) if err != nil { return errors.Wrap(err, "failed to insert public channel") } @@ -737,12 +718,8 @@ func (s SqlChannelStore) saveChannelT(transaction *sqlxTxWrapper, channel *model insert := s.getQueryBuilder(). Insert("Channels"). Columns(channelSliceColumns(false)...). - Values(channelToSlice(channel)...) - if s.DriverName() == model.DatabaseDriverMysql { - insert = insert.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE Id=Id")) - } else { - insert = insert.SuffixExpr(sq.Expr("ON CONFLICT (TeamId, Name) DO NOTHING")) - } + Values(channelToSlice(channel)...). + SuffixExpr(sq.Expr("ON CONFLICT (TeamId, Name) DO NOTHING")) query, params, err := insert.ToSql() if err != nil { @@ -1921,45 +1898,19 @@ func (s SqlChannelStore) UpdateMemberNotifyProps(channelID, userID string, props return nil, store.NewErrInvalidInput("ChannelMember", "NotifyProps", props) } - if s.DriverName() == model.DatabaseDriverPostgres { - sql, args, err2 := s.getQueryBuilder(). - Update("channelmembers"). - Set("notifyprops", sq.Expr("notifyprops || ?::jsonb", jsonNotifyProps)). - Set("LastUpdateAt", model.GetMillis()). - Where(sq.Eq{ - "userid": userID, - "channelid": channelID, - }).ToSql() - if err2 != nil { - return nil, errors.Wrapf(err2, "UpdateMemberNotifyProps_Update_Postgres_ToSql channelID=%s and userID=%s", channelID, userID) - } - - _, err = tx.Exec(sql, args...) - } else if len(props) > 0 { - // It's difficult to construct a SQL query for MySQL - // to handle a case of empty map. So we just ignore it. - - // unpack the keys and values to pass to MySQL. - jsonArgs, jsonSQL := constructMySQLJSONArgs(props) - jsonExpr := sq.Expr(fmt.Sprintf("JSON_SET(NotifyProps, %s)", jsonSQL), jsonArgs...) - - // Example: UPDATE ChannelMembers - // SET NotifyProps = JSON_SET(NotifyProps, '$.mark_unread', '"yes"' [, ...]) - // WHERE ... - sql, args, err2 := s.getQueryBuilder(). - Update("ChannelMembers"). - Set("NotifyProps", jsonExpr). - Set("LastUpdateAt", model.GetMillis()). - Where(sq.Eq{ - "UserId": userID, - "ChannelId": channelID, - }).ToSql() - if err2 != nil { - return nil, errors.Wrapf(err2, "UpdateMemberNotifyProps_Update_MySQL_ToSql channelID=%s and userID=%s", channelID, userID) - } - - _, err = tx.Exec(sql, args...) + sqlStr, args, err2 := s.getQueryBuilder(). + Update("channelmembers"). + Set("notifyprops", sq.Expr("notifyprops || ?::jsonb", jsonNotifyProps)). + Set("LastUpdateAt", model.GetMillis()). + Where(sq.Eq{ + "userid": userID, + "channelid": channelID, + }).ToSql() + if err2 != nil { + return nil, errors.Wrapf(err2, "UpdateMemberNotifyProps_Update_Postgres_ToSql channelID=%s and userID=%s", channelID, userID) } + + _, err = tx.Exec(sqlStr, args...) if err != nil { return nil, errors.Wrapf(err, "failed to update ChannelMember with channelID=%s and userID=%s", channelID, userID) } @@ -2013,23 +1964,11 @@ func (s SqlChannelStore) PatchMultipleMembersNotifyProps(members []*model.Channe // Update the channel members builder := s.getQueryBuilder().Update("ChannelMembers") - if s.DriverName() == model.DatabaseDriverPostgres { - jsonNotifyProps := string(model.ToJSON(notifyProps)) - builder = builder.Set("notifyprops", sq.Expr("notifyprops || ?::jsonb", jsonNotifyProps)) - } else { - // Unpack the keys and values to pass to MySQL - jsonArgs, jsonSQL := constructMySQLJSONArgs(notifyProps) - jsonExpr := sq.Expr(fmt.Sprintf("JSON_SET(NotifyProps, %s)", jsonSQL), jsonArgs...) - - // Example: UPDATE ChannelMembers - // SET NotifyProps = JSON_SET(NotifyProps, '$.mark_unread', '"yes"' [, ...]) - // WHERE ... - builder = builder.Set("NotifyProps", jsonExpr) - } - - builder = builder.Set("LastUpdateAt", model.GetMillis()) - - builder = builder.Where(whereClause) + jsonNotifyProps := string(model.ToJSON(notifyProps)) + builder = builder. + Set("notifyprops", sq.Expr("notifyprops || ?::jsonb", jsonNotifyProps)). + Set("LastUpdateAt", model.GetMillis()). + Where(whereClause) transaction, err := s.GetMaster().Beginx() if err != nil { @@ -2444,27 +2383,15 @@ func (s SqlChannelStore) GetMemberCountsByGroup(ctx context.Context, channelID s selectStr := "GroupMembers.GroupId, COUNT(ChannelMembers.UserId) AS ChannelMemberCount" if includeTimezones { - if s.DriverName() == model.DatabaseDriverMysql { - selectStr += `, - COUNT(DISTINCT - ( - CASE WHEN JSON_EXTRACT(Timezone, '$.useAutomaticTimezone') = 'true' AND LENGTH(JSON_UNQUOTE(JSON_EXTRACT(Timezone, '$.automaticTimezone'))) > 0 - THEN JSON_EXTRACT(Timezone, '$.automaticTimezone') - WHEN JSON_EXTRACT(Timezone, '$.useAutomaticTimezone') = 'false' AND LENGTH(JSON_UNQUOTE(JSON_EXTRACT(Timezone, '$.manualTimezone'))) > 0 - THEN JSON_EXTRACT(Timezone, '$.manualTimezone') - END - )) AS ChannelMemberTimezonesCount` - } else if s.DriverName() == model.DatabaseDriverPostgres { - selectStr += `, - COUNT(DISTINCT - ( - CASE WHEN Timezone->>'useAutomaticTimezone' = 'true' AND length(Timezone->>'automaticTimezone') > 0 - THEN Timezone->>'automaticTimezone' - WHEN Timezone->>'useAutomaticTimezone' = 'false' AND length(Timezone->>'manualTimezone') > 0 - THEN Timezone->>'manualTimezone' - END - )) AS ChannelMemberTimezonesCount` - } + selectStr += `, + COUNT(DISTINCT + ( + CASE WHEN Timezone->>'useAutomaticTimezone' = 'true' AND length(Timezone->>'automaticTimezone') > 0 + THEN Timezone->>'automaticTimezone' + WHEN Timezone->>'useAutomaticTimezone' = 'false' AND length(Timezone->>'manualTimezone') > 0 + THEN Timezone->>'manualTimezone' + END + )) AS ChannelMemberTimezonesCount` } query := s.getQueryBuilder(). @@ -2518,16 +2445,12 @@ func (s SqlChannelStore) InvalidateGuestCount(channelId string) { //nolint:unparam func (s SqlChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, error) { - var indexHint string - if s.DriverName() == model.DatabaseDriverMysql { - indexHint = `USE INDEX(idx_channelmembers_channel_id_scheme_guest_user_id)` - } var count int64 err := s.GetReplica().Get(&count, ` SELECT count(*) FROM - ChannelMembers `+indexHint+`, + ChannelMembers, Users WHERE ChannelMembers.UserId = Users.Id @@ -3730,28 +3653,17 @@ func (s SqlChannelStore) buildFulltextClause(term string, searchColumns string) }, fulltextTerm) // Prepare the FULLTEXT portion of the query. - if s.DriverName() == model.DatabaseDriverPostgres { - fulltextTerm = strings.ReplaceAll(fulltextTerm, "|", "") + fulltextTerm = strings.ReplaceAll(fulltextTerm, "|", "") - splitTerm := strings.Fields(fulltextTerm) - for i, t := range strings.Fields(fulltextTerm) { - splitTerm[i] = t + ":*" - } - - fulltextTerm = strings.Join(splitTerm, " & ") - - fulltextClause = fmt.Sprintf("((to_tsvector('%[1]s', %[2]s)) @@ to_tsquery('%[1]s', :FulltextTerm))", s.pgDefaultTextSearchConfig, convertMySQLFullTextColumnsToPostgres(searchColumns)) - } else if s.DriverName() == model.DatabaseDriverMysql { - splitTerm := strings.Fields(fulltextTerm) - for i, t := range strings.Fields(fulltextTerm) { - splitTerm[i] = "+" + t + "*" - } - - fulltextTerm = strings.Join(splitTerm, " ") - - fulltextClause = fmt.Sprintf("MATCH(%s) AGAINST (:FulltextTerm IN BOOLEAN MODE)", searchColumns) + splitTerm := strings.Fields(fulltextTerm) + for i, t := range strings.Fields(fulltextTerm) { + splitTerm[i] = t + ":*" } + fulltextTerm = strings.Join(splitTerm, " & ") + + fulltextClause = fmt.Sprintf("((to_tsvector('%[1]s', %[2]s)) @@ to_tsquery('%[1]s', :FulltextTerm))", s.pgDefaultTextSearchConfig, convertMySQLFullTextColumnsToPostgres(searchColumns)) + return } diff --git a/server/channels/store/sqlstore/channel_store_categories.go b/server/channels/store/sqlstore/channel_store_categories.go index 36378767c7b..4b63e7db723 100644 --- a/server/channels/store/sqlstore/channel_store_categories.go +++ b/server/channels/store/sqlstore/channel_store_categories.go @@ -278,31 +278,16 @@ func (s SqlChannelStore) CreateSidebarCategory(userId, teamId string, newCategor if len(newCategory.Channels) > 0 { placeHolder, channelIdArgs := constructArrayArgs(newCategory.Channels) // Remove any channels from their previous categories and add them to the new one - var deleteQuery string - if s.DriverName() == model.DatabaseDriverMysql { - deleteQuery = ` - DELETE - SidebarChannels - FROM - SidebarChannels - JOIN - SidebarCategories ON SidebarChannels.CategoryId = SidebarCategories.Id - WHERE - SidebarChannels.UserId = ? - AND SidebarChannels.ChannelId IN ` + placeHolder + ` - AND SidebarCategories.TeamId = ?` - } else { - deleteQuery = ` - DELETE FROM - SidebarChannels - USING - SidebarCategories - WHERE - SidebarChannels.CategoryId = SidebarCategories.Id - AND SidebarChannels.UserId = ? - AND SidebarChannels.ChannelId IN ` + placeHolder + ` - AND SidebarCategories.TeamId = ?` - } + deleteQuery := ` + DELETE FROM + SidebarChannels + USING + SidebarCategories + WHERE + SidebarChannels.CategoryId = SidebarCategories.Id + AND SidebarChannels.UserId = ? + AND SidebarChannels.ChannelId IN ` + placeHolder + ` + AND SidebarCategories.TeamId = ?` args := []any{userId} args = append(args, channelIdArgs...) @@ -416,8 +401,6 @@ func (s SqlChannelStore) getOrphanedSidebarChannels(db sqlxExecutor, userId stri return nil, nil } - isMySQL := s.DriverName() == model.DatabaseDriverMysql - channelTypeFilter := sq.Or{} if selectDMs { // any DM/GM channels that aren't in any category should be returned as part of the Direct Messages category @@ -432,21 +415,11 @@ func (s SqlChannelStore) getOrphanedSidebarChannels(db sqlxExecutor, userId stri } // A subquery that is true if the channel does not have a SidebarChannel entry for the current user on the current team - var doesNotHaveSidebarChannel sq.SelectBuilder - if isMySQL { - doesNotHaveSidebarChannel = sq.Select("/*+ QB_NAME(subq1) */ 1"). - Prefix("NOT EXISTS ("). - From("SidebarChannels"). - // we have to use an index hint for MySQL. - Join("SidebarCategories USE INDEX(idx_sidebarcategories_userid_teamid) on SidebarChannels.CategoryId=SidebarCategories.Id"). - Suffix(")") - } else { - doesNotHaveSidebarChannel = sq.Select("1"). - Prefix("NOT EXISTS ("). - From("SidebarChannels"). - Join("SidebarCategories on SidebarChannels.CategoryId=SidebarCategories.Id"). - Suffix(")") - } + doesNotHaveSidebarChannel := sq.Select("1"). + Prefix("NOT EXISTS ("). + From("SidebarChannels"). + Join("SidebarCategories on SidebarChannels.CategoryId=SidebarCategories.Id"). + Suffix(")") doesNotHaveSidebarChannel = doesNotHaveSidebarChannel.Where(sq.And{ sq.Expr("SidebarChannels.ChannelId = ChannelMembers.ChannelId"), @@ -455,17 +428,8 @@ func (s SqlChannelStore) getOrphanedSidebarChannels(db sqlxExecutor, userId stri }) channels := []*OrphanedSidebarChannel{} - var col string - if isMySQL { - // This is a materialization hint for MySQL to materialize - // the doesNotHaveSidebarChannel sub-query - // Without this hint, MySQL is unable to come up with this plan by itself. - col = "/*+ SEMIJOIN(@subq1 MATERIALIZATION) */ Id, Channels.Type" - } else { - col = "Id, Channels.Type" - } sql, args, err := s.getQueryBuilder(). - Select(col). + Select("Id, Channels.Type"). From("ChannelMembers"). LeftJoin("Channels ON Channels.Id=ChannelMembers.ChannelId"). Where(sq.And{ @@ -768,11 +732,7 @@ func (s SqlChannelStore) UpdateSidebarCategories(userId, teamId string, categori Insert("SidebarChannels"). Columns("ChannelId", "UserId", "CategoryId", "SortOrder") - if s.DriverName() == model.DatabaseDriverMysql { - insertQuery = insertQuery.Suffix("ON DUPLICATE KEY UPDATE SortOrder = VALUES(SortOrder)") - } else { - insertQuery = insertQuery.Suffix("ON CONFLICT (ChannelId, UserId, CategoryId) DO UPDATE SET SortOrder = excluded.SortOrder") - } + insertQuery = insertQuery.Suffix("ON CONFLICT (ChannelId, UserId, CategoryId) DO UPDATE SET SortOrder = excluded.SortOrder") for _, channelID := range category.Channels { insertQuery = insertQuery.Values(channelID, userId, category.Id, int64(runningOrder)) @@ -896,31 +856,16 @@ func (s SqlChannelStore) removeSidebarEntriesForPreferenceT(transaction *sqlxTxW } // Delete any corresponding SidebarChannels entries in a Favorites category corresponding to this preference. - var query string - if s.DriverName() == model.DatabaseDriverMysql { - query = ` - DELETE - SidebarChannels - FROM - SidebarChannels - JOIN - SidebarCategories ON SidebarChannels.CategoryId = SidebarCategories.Id - WHERE - SidebarChannels.UserId = ? - AND SidebarChannels.ChannelId = ? - AND SidebarCategories.Type = ?` - } else { - query = ` - DELETE FROM - SidebarChannels - USING - SidebarCategories - WHERE - SidebarChannels.CategoryId = SidebarCategories.Id - AND SidebarChannels.UserId = ? - AND SidebarChannels.ChannelId = ? - AND SidebarCategories.Type = ?` - } + query := ` + DELETE FROM + SidebarChannels + USING + SidebarCategories + WHERE + SidebarChannels.CategoryId = SidebarCategories.Id + AND SidebarChannels.UserId = ? + AND SidebarChannels.ChannelId = ? + AND SidebarCategories.Type = ?` if _, err := transaction.Exec(query, preference.UserId, preference.Name, model.SidebarCategoryFavorites); err != nil { return errors.Wrap(err, "Failed to remove sidebar entries for preference") @@ -1040,25 +985,20 @@ func (s SqlChannelStore) UpdateSidebarChannelCategoryOnMove(channel *model.Chann func (s SqlChannelStore) ClearSidebarOnTeamLeave(userId, teamId string) error { // if user leaves the team, clean their team related entries in sidebar channels and categories - var deleteQuery string - if s.DriverName() == model.DatabaseDriverMysql { - deleteQuery = "DELETE SidebarChannels FROM SidebarChannels LEFT JOIN SidebarCategories ON SidebarCategories.Id = SidebarChannels.CategoryId WHERE SidebarCategories.TeamId=? AND SidebarCategories.UserId=?" - } else { - deleteQuery = ` - DELETE FROM - SidebarChannels - WHERE - CategoryId IN ( - SELECT - CategoryId - FROM - SidebarChannels, - SidebarCategories - WHERE - SidebarChannels.CategoryId = SidebarCategories.Id - AND SidebarCategories.TeamId = ? - AND SidebarChannels.UserId = ?)` - } + deleteQuery := ` + DELETE FROM + SidebarChannels + WHERE + CategoryId IN ( + SELECT + CategoryId + FROM + SidebarChannels, + SidebarCategories + WHERE + SidebarChannels.CategoryId = SidebarCategories.Id + AND SidebarCategories.TeamId = ? + AND SidebarChannels.UserId = ?)` if _, err := s.GetMaster().Exec(deleteQuery, teamId, userId); err != nil { return errors.Wrap(err, "failed to delete from SidebarChannels") } diff --git a/server/channels/store/sqlstore/command_store.go b/server/channels/store/sqlstore/command_store.go index a1dfb41d56f..a79df5a242f 100644 --- a/server/channels/store/sqlstore/command_store.go +++ b/server/channels/store/sqlstore/command_store.go @@ -126,15 +126,9 @@ func (s SqlCommandStore) GetByTeam(teamId string) ([]*model.Command, error) { func (s SqlCommandStore) GetByTrigger(teamId string, trigger string) (*model.Command, error) { var command model.Command - var triggerStr string - if s.DriverName() == "mysql" { - triggerStr = "`Trigger`" - } else { - triggerStr = "\"trigger\"" - } query, args, err := s.commandsQuery. - Where(sq.Eq{"TeamId": teamId, "DeleteAt": 0, triggerStr: trigger}).ToSql() + Where(sq.Eq{"TeamId": teamId, "DeleteAt": 0, "\"trigger\"": trigger}).ToSql() if err != nil { return nil, errors.Wrapf(err, "commands_tosql") } diff --git a/server/channels/store/sqlstore/draft_store.go b/server/channels/store/sqlstore/draft_store.go index 37488e75a5b..4a7a8328c0a 100644 --- a/server/channels/store/sqlstore/draft_store.go +++ b/server/channels/store/sqlstore/draft_store.go @@ -95,13 +95,10 @@ func (s *SqlDraftStore) Upsert(draft *model.Draft) (*model.Draft, error) { return nil, err } - builder := s.getQueryBuilder().Insert("Drafts").Columns(draftSliceColumns()...).Values(draftToSlice(draft)...) - - if s.DriverName() == model.DatabaseDriverMysql { - builder = builder.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE UpdateAt = ?, Message = ?, Props = ?, FileIds = ?, Priority = ?, DeleteAt = ?", draft.UpdateAt, draft.Message, draft.Props, draft.FileIds, draft.Priority, 0)) - } else { - builder = builder.SuffixExpr(sq.Expr("ON CONFLICT (UserId, ChannelId, RootId) DO UPDATE SET UpdateAt = ?, Message = ?, Props = ?, FileIds = ?, Priority = ?, DeleteAt = ?", draft.UpdateAt, draft.Message, draft.Props, draft.FileIds, draft.Priority, 0)) - } + builder := s.getQueryBuilder().Insert("Drafts"). + Columns(draftSliceColumns()...). + Values(draftToSlice(draft)...). + SuffixExpr(sq.Expr("ON CONFLICT (UserId, ChannelId, RootId) DO UPDATE SET UpdateAt = ?, Message = ?, Props = ?, FileIds = ?, Priority = ?, DeleteAt = ?", draft.UpdateAt, draft.Message, draft.Props, draft.FileIds, draft.Priority, 0)) query, args, err := builder.ToSql() @@ -243,22 +240,6 @@ func (s *SqlDraftStore) determineMaxDraftSize() int { `); err != nil { mlog.Warn("Unable to determine the maximum supported draft size", mlog.Err(err)) } - } else if s.DriverName() == model.DatabaseDriverMysql { - // The Draft.Message column in MySQL has historically been TEXT, with a maximum - // limit of 65535. - if err := s.GetReplica().Get(&maxDraftSizeBytes, ` - SELECT - COALESCE(CHARACTER_MAXIMUM_LENGTH, 0) - FROM - INFORMATION_SCHEMA.COLUMNS - WHERE - table_schema = DATABASE() - AND table_name = 'Drafts' - AND column_name = 'Message' - LIMIT 0, 1 - `); err != nil { - mlog.Warn("Unable to determine the maximum supported draft size", mlog.Err(err)) - } } else { mlog.Warn("No implementation found to determine the maximum supported draft size") } @@ -328,27 +309,6 @@ func (s *SqlDraftStore) DeleteEmptyDraftsByCreateAtAndUserId(createAt int64, use Where("d.ChannelId = dd.ChannelId"). Where("d.RootId = dd.RootId"). Where("d.Message = ''") - } else if s.DriverName() == model.DatabaseDriverMysql { - builder = s.getQueryBuilder(). - Delete("Drafts d"). - What("d.*"). - JoinClause(s.getQueryBuilder().Select(). - Prefix("INNER JOIN ("). - Columns("UserId, ChannelId, RootId"). - From("Drafts"). - Where(sq.And{ - sq.Or{ - sq.Gt{"CreateAt": createAt}, - sq.And{ - sq.Eq{"CreateAt": createAt}, - sq.Gt{"UserId": userId}, - }, - }, - }). - OrderBy("CreateAt", "UserId"). - Limit(100). - Suffix(") dj ON (d.UserId = dj.UserId AND d.ChannelId = dj.ChannelId AND d.RootId = dj.RootId)"), - ).Where(sq.Eq{"Message": ""}) } if _, err := s.GetMaster().ExecBuilder(builder); err != nil { @@ -383,28 +343,6 @@ func (s *SqlDraftStore) DeleteOrphanDraftsByCreateAtAndUserId(createAt int64, us Where("d.ChannelId = dd.ChannelId"). Where("d.RootId = dd.RootId"). Suffix("AND (d.RootId IN (SELECT Id FROM Posts WHERE DeleteAt <> 0) OR NOT EXISTS (SELECT 1 FROM Posts WHERE Posts.Id = d.RootId))") - } else if s.DriverName() == model.DatabaseDriverMysql { - builder = s.getQueryBuilder(). - Delete("Drafts d"). - What("d.*"). - JoinClause(s.getQueryBuilder().Select(). - Prefix("INNER JOIN ("). - Columns("UserId, ChannelId, RootId"). - From("Drafts"). - Where(sq.And{ - sq.Or{ - sq.Gt{"CreateAt": createAt}, - sq.And{ - sq.Eq{"CreateAt": createAt}, - sq.Gt{"UserId": userId}, - }, - }, - }). - OrderBy("CreateAt", "UserId"). - Limit(100). - Suffix(") dj ON (d.UserId = dj.UserId AND d.ChannelId = dj.ChannelId AND d.RootId = dj.RootId)"), - ). - Suffix("AND (d.RootId IN (SELECT Id FROM Posts WHERE DeleteAt <> 0) OR NOT EXISTS (SELECT 1 FROM Posts WHERE Posts.Id = d.RootId))") } if _, err := s.GetMaster().ExecBuilder(builder); err != nil { diff --git a/server/channels/store/sqlstore/file_info_store.go b/server/channels/store/sqlstore/file_info_store.go index d06b747f761..78c8de580f0 100644 --- a/server/channels/store/sqlstore/file_info_store.go +++ b/server/channels/store/sqlstore/file_info_store.go @@ -655,36 +655,6 @@ func (fs SqlFileInfoStore) Search(rctx request.CTX, paramsList []*model.SearchPa sq.Expr(fmt.Sprintf("to_tsvector('%[1]s', Translate(FileInfo.Name, '.,-', ' ')) @@ to_tsquery('%[1]s', ?)", fs.pgDefaultTextSearchConfig), queryTerms), sq.Expr(fmt.Sprintf("to_tsvector('%[1]s', FileInfo.Content) @@ to_tsquery('%[1]s', ?)", fs.pgDefaultTextSearchConfig), queryTerms), }) - } else if fs.DriverName() == model.DatabaseDriverMysql { - var err error - terms, err = removeMysqlStopWordsFromTerms(terms) - if err != nil { - return nil, errors.Wrap(err, "failed to remove Mysql stop-words from terms") - } - - if terms == "" { - return model.NewFileInfoList(), nil - } - - excludeClause := "" - if excludedTerms != "" { - excludeClause = " -(" + excludedTerms + ")" - } - - queryTerms := "" - if params.OrTerms { - queryTerms = terms + excludeClause - } else { - splitTerms := []string{} - for t := range strings.FieldsSeq(terms) { - splitTerms = append(splitTerms, "+"+t) - } - queryTerms = strings.Join(splitTerms, " ") + excludeClause - } - query = query.Where(sq.Or{ - sq.Expr("MATCH (FileInfo.Name) AGAINST (? IN BOOLEAN MODE)", queryTerms), - sq.Expr("MATCH (FileInfo.Content) AGAINST (? IN BOOLEAN MODE)", queryTerms), - }) } } @@ -790,21 +760,10 @@ func (fs *SqlFileInfoStore) GetUptoNSizeFileTime(n int64) (int64, error) { return 0, errors.New("n can't be less than 1") } - var sizeSubQuery sq.SelectBuilder - // Separate query for MySql, as current min-version 5.x doesn't support window-functions - if fs.DriverName() == model.DatabaseDriverMysql { - sizeSubQuery = sq. - Select("(@runningSum := @runningSum + fi.Size) RunningTotal", "fi.CreateAt"). - From("FileInfo fi"). - Join("(SELECT @runningSum := 0) as tmp"). - Where(sq.Eq{"fi.DeleteAt": 0}). - OrderBy("fi.CreateAt DESC, fi.Id") - } else { - sizeSubQuery = sq. - Select("SUM(fi.Size) OVER(ORDER BY CreateAt DESC, fi.Id) RunningTotal", "fi.CreateAt"). - From("FileInfo fi"). - Where(sq.Eq{"fi.DeleteAt": 0}) - } + sizeSubQuery := sq. + Select("SUM(fi.Size) OVER(ORDER BY CreateAt DESC, fi.Id) RunningTotal", "fi.CreateAt"). + From("FileInfo fi"). + Where(sq.Eq{"fi.DeleteAt": 0}) builder := fs.getQueryBuilder(). Select("fi2.CreateAt"). diff --git a/server/channels/store/sqlstore/group_store.go b/server/channels/store/sqlstore/group_store.go index a993c240fd8..c7191b0a62a 100644 --- a/server/channels/store/sqlstore/group_store.go +++ b/server/channels/store/sqlstore/group_store.go @@ -1328,9 +1328,6 @@ func (s *SqlGroupStore) groupsBySyncableBaseQuery(st model.GroupSyncableType, t if opts.Q != "" { pattern := fmt.Sprintf("%%%s%%", sanitizeSearchTerm(opts.Q, "\\")) operatorKeyword := "ILIKE" - if s.DriverName() == model.DatabaseDriverMysql { - operatorKeyword = "LIKE" - } query = query.Where(fmt.Sprintf("(UserGroups.Name %[1]s ? OR UserGroups.DisplayName %[1]s ?)", operatorKeyword), pattern, pattern) } @@ -1391,9 +1388,6 @@ func (s *SqlGroupStore) getGroupsAssociatedToChannelsByTeam(teamID string, opts if opts.Q != "" { pattern := fmt.Sprintf("%%%s%%", sanitizeSearchTerm(opts.Q, "\\")) operatorKeyword := "ILIKE" - if s.DriverName() == model.DatabaseDriverMysql { - operatorKeyword = "LIKE" - } query = query.Where(fmt.Sprintf("(UserGroups.Name %[1]s ? OR UserGroups.DisplayName %[1]s ?)", operatorKeyword), pattern, pattern) } @@ -1490,27 +1484,15 @@ func (s *SqlGroupStore) GetGroups(page, perPage int, opts model.GroupSearchOpts, joinStr := "" if opts.IncludeTimezones { - if s.DriverName() == model.DatabaseDriverMysql { - selectStr += `, - COUNT(DISTINCT - ( - CASE WHEN JSON_EXTRACT(Timezone, '$.useAutomaticTimezone') = 'true' AND LENGTH(JSON_UNQUOTE(JSON_EXTRACT(Timezone, '$.automaticTimezone'))) > 0 - THEN JSON_EXTRACT(Timezone, '$.automaticTimezone') - WHEN JSON_EXTRACT(Timezone, '$.useAutomaticTimezone') = 'false' AND LENGTH(JSON_UNQUOTE(JSON_EXTRACT(Timezone, '$.manualTimezone'))) > 0 - THEN JSON_EXTRACT(Timezone, '$.manualTimezone') - END - )) AS ChannelMemberTimezonesCount` - } else if s.DriverName() == model.DatabaseDriverPostgres { - selectStr += `, - COUNT(DISTINCT - ( - CASE WHEN Timezone->>'useAutomaticTimezone' = 'true' AND length(Timezone->>'automaticTimezone') > 0 - THEN Timezone->>'automaticTimezone' - WHEN Timezone->>'useAutomaticTimezone' = 'false' AND length(Timezone->>'manualTimezone') > 0 - THEN Timezone->>'manualTimezone' - END - )) AS ChannelMemberTimezonesCount` - } + selectStr += `, + COUNT(DISTINCT + ( + CASE WHEN Timezone->>'useAutomaticTimezone' = 'true' AND length(Timezone->>'automaticTimezone') > 0 + THEN Timezone->>'automaticTimezone' + WHEN Timezone->>'useAutomaticTimezone' = 'false' AND length(Timezone->>'manualTimezone') > 0 + THEN Timezone->>'manualTimezone' + END + )) AS ChannelMemberTimezonesCount` joinStr = "LEFT JOIN Users ON Users.Id = GroupMembers.UserId" } @@ -1557,9 +1539,6 @@ func (s *SqlGroupStore) GetGroups(page, perPage int, opts model.GroupSearchOpts, if opts.Q != "" { pattern := fmt.Sprintf("%%%s%%", sanitizeSearchTerm(opts.Q, "\\")) operatorKeyword := "ILIKE" - if s.DriverName() == model.DatabaseDriverMysql { - operatorKeyword = "LIKE" - } groupsQuery = groupsQuery.Where(fmt.Sprintf("(UserGroups.Name %[1]s ? OR UserGroups.DisplayName %[1]s ?)", operatorKeyword), pattern, pattern) } @@ -1662,11 +1641,7 @@ func (s *SqlGroupStore) teamMembersMinusGroupMembersQuery(teamID string, groupID Column("TeamMembers.SchemeAdmin"). Column("TeamMembers.SchemeUser") - if s.DriverName() == model.DatabaseDriverMysql { - builder = builder.Column("group_concat(UserGroups.Id) AS GroupIDs") - } else { - builder = builder.Column("string_agg(UserGroups.Id, ',') AS GroupIDs") - } + builder = builder.Column("string_agg(UserGroups.Id, ',') AS GroupIDs") } subQuery := s.getQueryBuilder().Select("GroupMembers.UserId"). @@ -1741,11 +1716,7 @@ func (s *SqlGroupStore) channelMembersMinusGroupMembersQuery(channelID string, g "ChannelMembers.SchemeUser", ) - if s.DriverName() == model.DatabaseDriverMysql { - builder = builder.Column("group_concat(UserGroups.Id) AS GroupIDs") - } else { - builder = builder.Column("string_agg(UserGroups.Id, ',') AS GroupIDs") - } + builder = builder.Column("string_agg(UserGroups.Id, ',') AS GroupIDs") } subQuery := s.getQueryBuilder().Select("GroupMembers.UserId"). @@ -1955,11 +1926,7 @@ func (s *SqlGroupStore) buildUpsertMembersQuery(groupID string, userIDs []string members = append(members, member) } - if s.DriverName() == model.DatabaseDriverMysql { - builder = builder.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE CreateAt = ?, DeleteAt = ?", createAt, 0)) - } else if s.DriverName() == model.DatabaseDriverPostgres { - builder = builder.SuffixExpr(sq.Expr("ON CONFLICT (groupid, userid) DO UPDATE SET CreateAt = ?, DeleteAt = ?", createAt, 0)) - } + builder = builder.SuffixExpr(sq.Expr("ON CONFLICT (groupid, userid) DO UPDATE SET CreateAt = ?, DeleteAt = ?", createAt, 0)) return } diff --git a/server/channels/store/sqlstore/job_store.go b/server/channels/store/sqlstore/job_store.go index 187950f60c6..561dbd5e1ad 100644 --- a/server/channels/store/sqlstore/job_store.go +++ b/server/channels/store/sqlstore/job_store.go @@ -10,7 +10,6 @@ import ( "strings" "time" - "github.com/go-sql-driver/mysql" "github.com/lib/pq" sq "github.com/mattermost/squirrel" "github.com/pkg/errors" @@ -197,55 +196,7 @@ func (jss SqlJobStore) UpdateStatus(id string, status string) (*model.Job, error func (jss SqlJobStore) UpdateStatusOptimistically(id string, currentStatus string, newStatus string) (*model.Job, error) { lastActivityAndStartTime := model.GetMillis() - if jss.DriverName() == model.DatabaseDriverMysql { - tx, err := jss.GetMaster().Beginx() - if err != nil { - return nil, errors.Wrap(err, "begin_transaction") - } - defer finalizeTransactionX(tx, &err) - - builder := jss.getQueryBuilder(). - Update("Jobs"). - Set("LastActivityAt", lastActivityAndStartTime). - Set("Status", newStatus). - Where(sq.Eq{"Id": id, "Status": currentStatus}) - - if newStatus == model.JobStatusInProgress { - builder = builder.Set("StartAt", lastActivityAndStartTime) - } - - sqlResult, err := tx.ExecBuilder(builder) - if err != nil { - return nil, errors.Wrapf(err, "failed to update Job with id=%s", id) - } - rows, err := sqlResult.RowsAffected() - if err != nil { - return nil, errors.Wrap(err, "unable to get rows affected") - } - if rows != 1 { - return nil, nil - } - - getBuilder := jss.jobQuery. - Where(sq.Eq{"Id": id, "Status": newStatus}) - - var job model.Job - if err = tx.GetBuilder(&job, getBuilder); err != nil { - if errors.Is(err, sql.ErrNoRows) { - return nil, store.NewErrNotFound("Job", id) - } - return nil, errors.Wrapf(err, "failed to get Job with id=%s", id) - } - - err = tx.Commit() - if err != nil { - return nil, errors.Wrap(err, "commit_transaction") - } - - return &job, nil - } - - // For PostgreSQL, use RETURNING to get the updated job in a single query + // Use RETURNING to get the updated job in a single query builder := jss.getQueryBuilder(). Update("Jobs"). Set("LastActivityAt", lastActivityAndStartTime). @@ -478,23 +429,16 @@ func (jss SqlJobStore) Cleanup(expiryTime int64, batchSize int) error { return nil } -const mySQLDeadlockCode = uint16(1213) - // isRepeatableError is a bit of copied code from retrylayer.go. // A little copying is fine because we don't want to import another package // in the store layer func isRepeatableError(err error) bool { var pqErr *pq.Error - var mysqlErr *mysql.MySQLError switch { case errors.As(err, &pqErr): if pqErr.Code == "40001" || pqErr.Code == "40P01" { return true } - case errors.As(err, &mysqlErr): - if mysqlErr.Number == mySQLDeadlockCode { - return true - } } return false } diff --git a/server/channels/store/sqlstore/license_store.go b/server/channels/store/sqlstore/license_store.go index 4069336e0c0..3147695d433 100644 --- a/server/channels/store/sqlstore/license_store.go +++ b/server/channels/store/sqlstore/license_store.go @@ -36,11 +36,7 @@ func (ls SqlLicenseStore) Save(license *model.LicenseRecord) error { Columns("Id", "CreateAt", "Bytes"). Values(license.Id, license.CreateAt, license.Bytes) - if ls.DriverName() == model.DatabaseDriverMysql { - query = query.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE Id=Id")) - } else { - query = query.SuffixExpr(sq.Expr("ON CONFLICT (Id) DO NOTHING")) - } + query = query.SuffixExpr(sq.Expr("ON CONFLICT (Id) DO NOTHING")) queryString, args, err := query.ToSql() if err != nil { diff --git a/server/channels/store/sqlstore/link_metadata_store.go b/server/channels/store/sqlstore/link_metadata_store.go index 01abd2f499b..a13b4797bc8 100644 --- a/server/channels/store/sqlstore/link_metadata_store.go +++ b/server/channels/store/sqlstore/link_metadata_store.go @@ -59,11 +59,7 @@ func (s SqlLinkMetadataStore) Save(metadata *model.LinkMetadata) (*model.LinkMet Columns(s.linkMetadataColumns...). Values(metadata.Hash, metadata.URL, metadata.Timestamp, metadata.Type, metadataBytes) - if s.DriverName() == model.DatabaseDriverMysql { - query = query.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE URL = ?, Timestamp = ?, Type = ?, Data = ?", metadata.URL, metadata.Timestamp, metadata.Type, metadataBytes)) - } else { - query = query.SuffixExpr(sq.Expr("ON CONFLICT (hash) DO UPDATE SET URL = ?, Timestamp = ?, Type = ?, Data = ?", metadata.URL, metadata.Timestamp, metadata.Type, metadataBytes)) - } + query = query.SuffixExpr(sq.Expr("ON CONFLICT (hash) DO UPDATE SET URL = ?, Timestamp = ?, Type = ?, Data = ?", metadata.URL, metadata.Timestamp, metadata.Type, metadataBytes)) q, args, err := query.ToSql() if err != nil { diff --git a/server/channels/store/sqlstore/migrate.go b/server/channels/store/sqlstore/migrate.go index 05ecb9b999d..aabd969ef7b 100644 --- a/server/channels/store/sqlstore/migrate.go +++ b/server/channels/store/sqlstore/migrate.go @@ -13,14 +13,11 @@ import ( "strconv" "sync" - sqlUtils "github.com/mattermost/mattermost/server/public/utils/sql" - "github.com/mattermost/mattermost/server/public/model" "github.com/mattermost/mattermost/server/public/shared/mlog" "github.com/mattermost/mattermost/server/v8/channels/db" "github.com/mattermost/morph" "github.com/mattermost/morph/drivers" - ms "github.com/mattermost/morph/drivers/mysql" ps "github.com/mattermost/morph/drivers/postgres" "github.com/mattermost/morph/models" mbindata "github.com/mattermost/morph/sources/embedded" @@ -56,11 +53,6 @@ func NewMigrator(settings model.SqlSettings, logger mlog.LoggerIFace, dryRun boo return nil, fmt.Errorf("error while checking DB version: %w", err) } - err = ss.ensureDatabaseCollation() - if err != nil { - return nil, fmt.Errorf("error while checking DB collation: %w", err) - } - engine, err := ss.initMorph(dryRun, true) if err != nil { return nil, fmt.Errorf("failed to initialize morph: %w", err) @@ -121,26 +113,6 @@ func (ss *SqlStore) initMorph(dryRun, enableLogging bool) (*morph.Morph, error) var driver drivers.Driver switch ss.DriverName() { - case model.DatabaseDriverMysql: - dataSource, rErr := sqlUtils.ResetReadTimeout(*ss.settings.DataSource) - if rErr != nil { - mlog.Fatal("Failed to reset read timeout from datasource.", mlog.Err(rErr), mlog.String("src", *ss.settings.DataSource)) - return nil, rErr - } - dataSource, err = sqlUtils.AppendMultipleStatementsFlag(dataSource) - if err != nil { - return nil, err - } - db, err2 := sqlUtils.SetupConnection(ss.Logger(), "master", dataSource, ss.settings, DBPingAttempts) - if err2 != nil { - return nil, err2 - } - - driver, err = ms.WithInstance(db) - if err != nil { - return nil, err - } - defer db.Close() case model.DatabaseDriverPostgres: driver, err = ps.WithInstance(ss.GetMaster().DB.DB) default: diff --git a/server/channels/store/sqlstore/migrate_test.go b/server/channels/store/sqlstore/migrate_test.go index 44810d896e6..8d5a02df473 100644 --- a/server/channels/store/sqlstore/migrate_test.go +++ b/server/channels/store/sqlstore/migrate_test.go @@ -17,7 +17,6 @@ func TestUpAndDownMigrations(t *testing.T) { testDrivers := []string{ model.DatabaseDriverPostgres, - model.DatabaseDriverMysql, } for _, driver := range testDrivers { diff --git a/server/channels/store/sqlstore/oauth_store.go b/server/channels/store/sqlstore/oauth_store.go index 871845adc3d..b5b14f53de5 100644 --- a/server/channels/store/sqlstore/oauth_store.go +++ b/server/channels/store/sqlstore/oauth_store.go @@ -336,12 +336,7 @@ func (as SqlOAuthStore) deleteApp(transaction *sqlxTxWrapper, clientId string) e } func (as SqlOAuthStore) deleteOAuthAppSessions(transaction *sqlxTxWrapper, clientId string) error { - query := "" - if as.DriverName() == model.DatabaseDriverPostgres { - query = "DELETE FROM Sessions s USING OAuthAccessData o WHERE o.Token = s.Token AND o.ClientId = ?" - } else if as.DriverName() == model.DatabaseDriverMysql { - query = "DELETE s.* FROM Sessions s INNER JOIN OAuthAccessData o ON o.Token = s.Token WHERE o.ClientId = ?" - } + query := "DELETE FROM Sessions s USING OAuthAccessData o WHERE o.Token = s.Token AND o.ClientId = ?" if _, err := transaction.Exec(query, clientId); err != nil { return errors.Wrapf(err, "failed to delete Session with OAuthAccessData.Id=%s", clientId) diff --git a/server/channels/store/sqlstore/plugin_store.go b/server/channels/store/sqlstore/plugin_store.go index 051156da128..4fe47217efe 100644 --- a/server/channels/store/sqlstore/plugin_store.go +++ b/server/channels/store/sqlstore/plugin_store.go @@ -4,7 +4,6 @@ package sqlstore import ( - "bytes" "database/sql" "fmt" @@ -46,11 +45,7 @@ func (ps SqlPluginStore) SaveOrUpdate(kv *model.PluginKeyValue) (*model.PluginKe Insert("PluginKeyValueStore"). Columns("PluginId", "PKey", "PValue", "ExpireAt"). Values(kv.PluginId, kv.Key, kv.Value, kv.ExpireAt) - if ps.DriverName() == model.DatabaseDriverPostgres { - query = query.SuffixExpr(sq.Expr("ON CONFLICT (pluginid, pkey) DO UPDATE SET PValue = ?, ExpireAt = ?", kv.Value, kv.ExpireAt)) - } else if ps.DriverName() == model.DatabaseDriverMysql { - query = query.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE PValue = ?, ExpireAt = ?", kv.Value, kv.ExpireAt)) - } + query = query.SuffixExpr(sq.Expr("ON CONFLICT (pluginid, pkey) DO UPDATE SET PValue = ?, ExpireAt = ?", kv.Value, kv.ExpireAt)) queryString, args, err := query.ToSql() if err != nil { @@ -140,42 +135,6 @@ func (ps SqlPluginStore) CompareAndSet(kv *model.PluginKeyValue, oldValue []byte // Failed to update return false, errors.Wrap(err, "unable to get rows affected") } else if rowsAffected == 0 { - if ps.DriverName() == model.DatabaseDriverMysql && bytes.Equal(oldValue, kv.Value) { - // ROW_COUNT on MySQL is zero even if the row existed but no changes to the row were required. - // Check if the row exists with the required value to distinguish this case. Strictly speaking, - // this isn't a good use of CompareAndSet anyway, since there's no corresponding guarantee of - // atomicity. Nevertheless, let's return results consistent with Postgres and with what might - // be expected in this case. - query := ps.getQueryBuilder(). - Select("COUNT(*)"). - From("PluginKeyValueStore"). - Where(sq.Eq{"PluginId": kv.PluginId}). - Where(sq.Eq{"PKey": kv.Key}). - Where(sq.Eq{"PValue": kv.Value}). - Where(sq.Or{ - sq.Eq{"ExpireAt": int(0)}, - sq.Gt{"ExpireAt": currentTime}, - }) - - queryString, args, err := query.ToSql() - if err != nil { - return false, errors.Wrap(err, "plugin_tosql") - } - - var count int64 - err = ps.GetReplica().Get(&count, queryString, args...) - if err != nil { - return false, errors.Wrapf(err, "failed to count PluginKeyValue with pluginId=%s and key=%s", kv.PluginId, kv.Key) - } - - if count == 0 { - return false, nil - } else if count == 1 { - return true, nil - } - return false, errors.Wrapf(err, "got too many rows when counting PluginKeyValue with pluginId=%s, key=%s, rows=%d", kv.PluginId, kv.Key, count) - } - // No rows were affected by the update, where condition was not satisfied, // return false, but no error. return false, nil diff --git a/server/channels/store/sqlstore/post_acknowledgements_store.go b/server/channels/store/sqlstore/post_acknowledgements_store.go index d4461df2c67..fb6f78775c1 100644 --- a/server/channels/store/sqlstore/post_acknowledgements_store.go +++ b/server/channels/store/sqlstore/post_acknowledgements_store.go @@ -229,11 +229,7 @@ func (s *SqlPostAcknowledgementStore) buildUpsertQuery(acknowledgement *model.Po Columns(columnsToInsert...). Values(valuesToInsert...) - if s.DriverName() == model.DatabaseDriverMysql { - query = query.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE AcknowledgedAt = ?", acknowledgement.AcknowledgedAt)) - } else { - query = query.SuffixExpr(sq.Expr("ON CONFLICT (postid, userid) DO UPDATE SET AcknowledgedAt = ?", acknowledgement.AcknowledgedAt)) - } + query = query.SuffixExpr(sq.Expr("ON CONFLICT (postid, userid) DO UPDATE SET AcknowledgedAt = ?", acknowledgement.AcknowledgedAt)) return query } diff --git a/server/channels/store/sqlstore/post_persistent_notification_store.go b/server/channels/store/sqlstore/post_persistent_notification_store.go index a3960781b62..3512c95c9fb 100644 --- a/server/channels/store/sqlstore/post_persistent_notification_store.go +++ b/server/channels/store/sqlstore/post_persistent_notification_store.go @@ -128,20 +128,10 @@ func (s *SqlPostPersistentNotificationStore) DeleteByChannel(channelIds []string } deleteAt := model.GetMillis() - var builder sq.UpdateBuilder - builderType := s.getQueryBuilder() - if s.DriverName() == model.DatabaseDriverMysql { - builder = builderType. - Update("PersistentNotifications, Posts"). - Set("PersistentNotifications.DeleteAt", deleteAt) - } - - if s.DriverName() == model.DatabaseDriverPostgres { - builder = builderType. - Update("PersistentNotifications"). - Set("DeleteAt", deleteAt). - From("Posts") - } + builder := s.getQueryBuilder(). + Update("PersistentNotifications"). + Set("DeleteAt", deleteAt). + From("Posts") builder = builder.Where(sq.And{ sq.Expr("Posts.Id = PersistentNotifications.PostId"), @@ -163,20 +153,10 @@ func (s *SqlPostPersistentNotificationStore) DeleteByTeam(teamIds []string) erro } deleteAt := model.GetMillis() - var builder sq.UpdateBuilder - builderType := s.getQueryBuilder() - if s.DriverName() == model.DatabaseDriverMysql { - builder = builderType. - Update("PersistentNotifications, Posts, Channels"). - Set("PersistentNotifications.DeleteAt", deleteAt) - } - - if s.DriverName() == model.DatabaseDriverPostgres { - builder = builderType. - Update("PersistentNotifications"). - Set("DeleteAt", deleteAt). - From("Posts, Channels") - } + builder := s.getQueryBuilder(). + Update("PersistentNotifications"). + Set("DeleteAt", deleteAt). + From("Posts, Channels") builder = builder.Where(sq.And{ sq.Expr("Posts.Id = PersistentNotifications.PostId"), diff --git a/server/channels/store/sqlstore/post_store.go b/server/channels/store/sqlstore/post_store.go index 41c0a8db18e..c997bc12889 100644 --- a/server/channels/store/sqlstore/post_store.go +++ b/server/channels/store/sqlstore/post_store.go @@ -21,7 +21,6 @@ import ( "github.com/mattermost/mattermost/server/public/shared/mlog" "github.com/mattermost/mattermost/server/public/shared/request" "github.com/mattermost/mattermost/server/v8/channels/store" - "github.com/mattermost/mattermost/server/v8/channels/store/searchlayer" "github.com/mattermost/mattermost/server/v8/channels/utils" "github.com/mattermost/mattermost/server/v8/einterfaces" ) @@ -744,39 +743,26 @@ func (s *SqlPostStore) Get(ctx context.Context, id string, opts model.GetPostsOp } var query sq.SelectBuilder - if s.DriverName() == model.DatabaseDriverMysql { - query = s.getQueryBuilder(). - Select("p.*, (SELECT count(*) FROM Posts WHERE Posts.RootId = (CASE WHEN p.RootId = '' THEN p.Id ELSE p.RootId END) AND Posts.DeleteAt = 0) as ReplyCount"). - From("Posts p"). + query = s.getQueryBuilder(). + Select("p.*, replycount.num as ReplyCount"). + PrefixExpr(s.getQueryBuilder(). + Select(). + Prefix("WITH replycount as ("). + Columns("count(*) as num"). + From("posts"). Where(sq.And{ - sq.Or{ - sq.Eq{"p.Id": rootId}, - sq.Eq{"p.RootId": rootId}, - }, - sq.Eq{"p.DeleteAt": 0}, - }) - } else { - query = s.getQueryBuilder(). - Select("p.*, replycount.num as ReplyCount"). - PrefixExpr(s.getQueryBuilder(). - Select(). - Prefix("WITH replycount as ("). - Columns("count(*) as num"). - From("posts"). - Where(sq.And{ - sq.Eq{"RootId": rootId}, - sq.Eq{"DeleteAt": 0}, - }).Suffix(")"), - ). - From("Posts p, replycount"). - Where(sq.And{ - sq.Or{ - sq.Eq{"p.Id": rootId}, - sq.Eq{"p.RootId": rootId}, - }, - sq.Eq{"p.DeleteAt": 0}, - }) - } + sq.Eq{"RootId": rootId}, + sq.Eq{"DeleteAt": 0}, + }).Suffix(")"), + ). + From("Posts p, replycount"). + Where(sq.And{ + sq.Or{ + sq.Eq{"p.Id": rootId}, + sq.Eq{"p.RootId": rootId}, + }, + sq.Eq{"p.DeleteAt": 0}, + }) var sort string if opts.Direction != "" { @@ -978,24 +964,11 @@ func (s *SqlPostStore) Delete(rctx request.CTX, postID string, time int64, delet return errors.Wrapf(err, "failed to delete Post with id=%s", postID) } - if s.DriverName() == model.DatabaseDriverPostgres { - _, err = transaction.Exec(`UPDATE Posts + _, err = transaction.Exec(`UPDATE Posts SET DeleteAt = $1, UpdateAt = $1, Props = jsonb_set(Props, $2, $3) WHERE Id = $4 OR RootId = $4`, time, jsonKeyPath(model.PostPropsDeleteBy), jsonStringVal(deleteByID), postID) - } else { - // We use ORDER BY clause for MySQL - // to trigger filesort optimization in the index_merge. - // Without it, MySQL does a temporary sort. - // See: https://dev.mysql.com/doc/refman/8.0/en/order-by-optimization.html#order-by-filesort. - _, err = transaction.Exec(`UPDATE Posts - SET DeleteAt = ?, - UpdateAt = ?, - Props = JSON_SET(Props, ?, ?) - Where Id = ? OR RootId = ? - ORDER BY Id`, time, time, "$."+model.PostPropsDeleteBy, deleteByID, postID, postID) - } if err != nil { return errors.Wrap(err, "failed to update Posts") @@ -1405,52 +1378,19 @@ func (s *SqlPostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFr var query string var params []any - // union of IDs and then join to get full posts is faster in mysql - if s.DriverName() == model.DatabaseDriverMysql { - query = `SELECT *` + replyCountQuery1 + ` FROM Posts p1 JOIN ( - (SELECT - Id - FROM - Posts p2 - WHERE - (UpdateAt > ? - AND ChannelId = ?) - LIMIT 1000) - UNION - (SELECT - Id - FROM - Posts p3 - WHERE - Id - IN - (SELECT * FROM (SELECT - RootId - FROM - Posts - WHERE - UpdateAt > ? - AND ChannelId = ? - LIMIT 1000) temp_tab)) - ) j ON p1.Id = j.Id - ORDER BY CreateAt ` + order + query = `WITH cte AS (SELECT + * + FROM + Posts + WHERE + UpdateAt > ? AND ChannelId = ? + LIMIT 1000) + (SELECT *` + replyCountQuery2 + ` FROM cte) + UNION + (SELECT *` + replyCountQuery1 + ` FROM Posts p1 WHERE id in (SELECT rootid FROM cte)) + ORDER BY CreateAt ` + order - params = []any{options.Time, options.ChannelId, options.Time, options.ChannelId} - } else if s.DriverName() == model.DatabaseDriverPostgres { - query = `WITH cte AS (SELECT - * - FROM - Posts - WHERE - UpdateAt > ? AND ChannelId = ? - LIMIT 1000) - (SELECT *` + replyCountQuery2 + ` FROM cte) - UNION - (SELECT *` + replyCountQuery1 + ` FROM Posts p1 WHERE id in (SELECT rootid FROM cte)) - ORDER BY CreateAt ` + order - - params = []any{options.Time, options.ChannelId} - } + params = []any{options.Time, options.ChannelId} err := s.GetReplica().Select(&posts, query, params...) if err != nil { return nil, errors.Wrapf(err, "failed to find Posts with channelId=%s", options.ChannelId) @@ -1603,13 +1543,6 @@ func (s *SqlPostStore) getPostsAround(before bool, options model.GetPostsOptions direction = ">" sort = "ASC" } - table := "Posts p" - // We force MySQL to use the right index to prevent it from accidentally - // using the index_merge_intersection optimization. - // See MM-27575. - if s.DriverName() == model.DatabaseDriverMysql { - table += " USE INDEX(idx_posts_channel_id_delete_at_create_at)" - } columns := []string{"p.*"} if options.CollapsedThreads { columns = append(columns, @@ -1638,7 +1571,7 @@ func (s *SqlPostStore) getPostsAround(before bool, options model.GetPostsOptions } else { query = query.Column(sq.Alias(replyCountSubQuery, "ReplyCount")) } - query = query.From(table). + query = query.From("Posts p"). Where(conditions). // Adding ChannelId and DeleteAt order columns // to let mysql choose the "idx_posts_channel_id_delete_at_create_at" index always. @@ -1726,14 +1659,6 @@ func (s *SqlPostStore) getPostIdAroundTime(channelId string, time int64, before sort = "ASC" } - table := "Posts" - // We force MySQL to use the right index to prevent it from accidentally - // using the index_merge_intersection optimization. - // See MM-27575. - if s.DriverName() == model.DatabaseDriverMysql { - table += " USE INDEX(idx_posts_channel_id_delete_at_create_at)" - } - conditions := sq.And{ direction, sq.Eq{"Posts.ChannelId": channelId}, @@ -1744,7 +1669,7 @@ func (s *SqlPostStore) getPostIdAroundTime(channelId string, time int64, before } query := s.getQueryBuilder(). Select("Id"). - From(table). + From("Posts"). Where(conditions). // Adding ChannelId and DeleteAt order columns // to let mysql choose the "idx_posts_channel_id_delete_at_create_at" index always. @@ -1768,13 +1693,6 @@ func (s *SqlPostStore) getPostIdAroundTime(channelId string, time int64, before } func (s *SqlPostStore) GetPostAfterTime(channelId string, time int64, collapsedThreads bool) (*model.Post, error) { - table := "Posts" - // We force MySQL to use the right index to prevent it from accidentally - // using the index_merge_intersection optimization. - // See MM-27575. - if s.DriverName() == model.DatabaseDriverMysql { - table += " USE INDEX(idx_posts_channel_id_delete_at_create_at)" - } conditions := sq.And{ sq.Gt{"Posts.CreateAt": time}, sq.Eq{"Posts.ChannelId": channelId}, @@ -1785,7 +1703,7 @@ func (s *SqlPostStore) GetPostAfterTime(channelId string, time int64, collapsedT } query := s.getQueryBuilder(). Select("*"). - From(table). + From("Posts"). Where(conditions). // Adding ChannelId and DeleteAt order columns // to let mysql choose the "idx_posts_channel_id_delete_at_create_at" index always. @@ -2155,7 +2073,7 @@ func (s *SqlPostStore) search(teamId string, userId string, params *model.Search if terms == "" && excludedTerms == "" { // we've already confirmed that we have a channel or user to search for - } else if s.DriverName() == model.DatabaseDriverPostgres { + } else { // Parse text for wildcards terms = wildCardRegex.ReplaceAllLiteralString(terms, ":* ") excludedTerms = wildCardRegex.ReplaceAllLiteralString(excludedTerms, ":* ") @@ -2203,41 +2121,6 @@ func (s *SqlPostStore) search(teamId string, userId string, params *model.Search searchClause := fmt.Sprintf("to_tsvector('%[1]s', %[2]s) @@ to_tsquery('%[1]s', ?)", textSearchCfg, searchType) baseQuery = baseQuery.Where(searchClause, tsQueryClause) - } else if s.DriverName() == model.DatabaseDriverMysql { - if searchType == "Message" { - terms, err = removeMysqlStopWordsFromTerms(terms) - if err != nil { - return nil, errors.Wrap(err, "failed to remove Mysql stop-words from terms") - } - - if terms == "" { - return list, nil - } - } - - excludeClause := "" - if excludedTerms != "" { - excludeClause = " -(" + excludedTerms + ")" - } - - var termsClause string - if params.OrTerms { - termsClause = terms + excludeClause - } else { - splitTerms := []string{} - for t := range strings.FieldsSeq(terms) { - splitTerms = append(splitTerms, "+"+t) - } - termsClause = strings.Join(splitTerms, " ") + excludeClause - } - - searchClause := fmt.Sprintf("MATCH (%s) AGAINST (? IN BOOLEAN MODE)", searchType) - - if params.IsHashtag { - termsClause = "\"" + termsClause + "\"" - } - - baseQuery = baseQuery.Where(searchClause, termsClause) } inQuery := s.getSubQueryBuilder().Select("Id"). @@ -2295,25 +2178,6 @@ func (s *SqlPostStore) search(teamId string, userId string, params *model.Search return list, nil } -func removeMysqlStopWordsFromTerms(terms string) (string, error) { - stopWords := make([]string, len(searchlayer.MySQLStopWords)) - copy(stopWords, searchlayer.MySQLStopWords) - re, err := regexp.Compile(fmt.Sprintf(`^(%s)$`, strings.Join(stopWords, "|"))) - if err != nil { - return "", err - } - - newTerms := make([]string, 0) - separatedTerms := strings.FieldsSeq(terms) - for term := range separatedTerms { - term = strings.TrimSpace(term) - if term = re.ReplaceAllString(term, ""); term != "" { - newTerms = append(newTerms, term) - } - } - return strings.Join(newTerms, " "), nil -} - // TODO: convert to squirrel HW func (s *SqlPostStore) AnalyticsUserCountsWithPostsByDay(teamId string) (model.AnalyticsRows, error) { var args []any @@ -2629,35 +2493,14 @@ func (s *SqlPostStore) GetPostsBatchForIndexing(startTime int64, startPostID str posts := []*model.PostForIndexing{} var err error - // In order to use an index scan for both MySQL and Postgres, we need to - // diverge the implementation of the query, specifically in the WHERE - // condition: for MySQL, we need to do - // (CreateAt > ?) OR (CreateAt = ? AND Id > ?) - // while for Postgres we need + // In order to use an index scan, we need to do // (CreateAt, Id) > (?, ?) // The wrong choice for any of the two databases makes the query go from // milliseconds to dozens of seconds. // More information in: https://github.com/mattermost/mattermost/pull/26517 // and https://community.mattermost.com/core/pl/ui5dz96shinetb8nq83myggbma - if s.DriverName() == model.DatabaseDriverMysql { - query := `SELECT - Posts.*, Channels.TeamId - FROM Posts USE INDEX(idx_posts_create_at_id) - LEFT JOIN - Channels - ON - Posts.ChannelId = Channels.Id - WHERE - Posts.CreateAt > ? - OR - (Posts.CreateAt = ? AND Posts.Id > ?) - ORDER BY - Posts.CreateAt ASC, Posts.Id ASC - LIMIT - ?` - err = s.GetSearchReplicaX().Select(&posts, query, startTime, startTime, startPostID, limit) - } else { - query := `SELECT + + query := `SELECT Posts.*, Channels.TeamId FROM Posts LEFT JOIN @@ -2670,8 +2513,7 @@ func (s *SqlPostStore) GetPostsBatchForIndexing(startTime int64, startPostID str Posts.CreateAt ASC, Posts.Id ASC LIMIT ?` - err = s.GetSearchReplicaX().Select(&posts, query, startTime, startPostID, limit) - } + err = s.GetSearchReplicaX().Select(&posts, query, startTime, startPostID, limit) if err != nil { return nil, errors.Wrap(err, "failed to find Posts") } @@ -2760,22 +2602,6 @@ func (s *SqlPostStore) determineMaxPostSize() int { `); err != nil { mlog.Warn("Unable to determine the maximum supported post size", mlog.Err(err)) } - } else if s.DriverName() == model.DatabaseDriverMysql { - // The Post.Message column in MySQL has historically been TEXT, with a maximum - // limit of 65535. - if err := s.GetReplica().Get(&maxPostSizeBytes, ` - SELECT - COALESCE(CHARACTER_MAXIMUM_LENGTH, 0) - FROM - INFORMATION_SCHEMA.COLUMNS - WHERE - table_schema = DATABASE() - AND table_name = 'Posts' - AND column_name = 'Message' - LIMIT 0, 1 - `); err != nil { - mlog.Warn("Unable to determine the maximum supported post size", mlog.Err(err)) - } } else { mlog.Error("No implementation found to determine the maximum supported post size") } @@ -2829,9 +2655,6 @@ func (s *SqlPostStore) GetParentsForExportAfter(limit int, afterId string, inclu } aggFn := "COALESCE(json_agg(u1.username) FILTER (WHERE u1.username IS NOT NULL), '[]')" - if s.DriverName() == model.DatabaseDriverMysql { - aggFn = "IF (COUNT(u1.Username) = 0, JSON_ARRAY(), JSON_ARRAYAGG(u1.Username))" - } result := []*model.PostForExport{} builder := s.getQueryBuilder(). @@ -2869,9 +2692,6 @@ func (s *SqlPostStore) GetParentsForExportAfter(limit int, afterId string, inclu func (s *SqlPostStore) GetRepliesForExport(rootId string) ([]*model.ReplyForExport, error) { aggFn := "COALESCE(json_agg(u1.username) FILTER (WHERE u1.username IS NOT NULL), '[]')" - if s.DriverName() == model.DatabaseDriverMysql { - aggFn = "IF (COUNT(u1.Username) = 0, JSON_ARRAY(), JSON_ARRAYAGG(u1.Username))" - } result := []*model.ReplyForExport{} qb := s.getQueryBuilder().Select(fmt.Sprintf("Posts.*, u2.Username as Username, %s as FlaggedBy", aggFn)). @@ -2898,9 +2718,6 @@ func (s *SqlPostStore) GetRepliesForExport(rootId string) ([]*model.ReplyForExpo func (s *SqlPostStore) GetDirectPostParentsForExportAfter(limit int, afterId string, includeArchivedChannels bool) ([]*model.DirectPostForExport, error) { aggFn := "COALESCE(json_agg(u1.username) FILTER (WHERE u1.username IS NOT NULL), '[]')" - if s.DriverName() == model.DatabaseDriverMysql { - aggFn = "IF (COUNT(u1.Username) = 0, JSON_ARRAY(), JSON_ARRAYAGG(u1.Username))" - } result := []*model.DirectPostForExport{} query := s.getQueryBuilder(). @@ -3376,13 +3193,8 @@ func (s *SqlPostStore) SetPostReminder(reminder *model.PostReminder) error { query := s.getQueryBuilder(). Insert("PostReminders"). Columns("PostId", "UserId", "TargetTime"). - Values(reminder.PostId, reminder.UserId, reminder.TargetTime) - - if s.DriverName() == model.DatabaseDriverMysql { - query = query.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE TargetTime = ?", reminder.TargetTime)) - } else { - query = query.SuffixExpr(sq.Expr("ON CONFLICT (postid, userid) DO UPDATE SET TargetTime = ?", reminder.TargetTime)) - } + Values(reminder.PostId, reminder.UserId, reminder.TargetTime). + SuffixExpr(sq.Expr("ON CONFLICT (postid, userid) DO UPDATE SET TargetTime = ?", reminder.TargetTime)) sql, args, err := query.ToSql() if err != nil { @@ -3418,6 +3230,7 @@ func (s *SqlPostStore) GetPostReminders(now int64) (_ []*model.PostReminder, err return reminders, nil } + // TODO: https://mattermost.atlassian.net/browse/MM-63368 // Postgres supports RETURNING * in a DELETE statement, but MySQL doesn't. // So we are stuck with 2 queries. Not taking separate paths for Postgres // and MySQL for simplicity. diff --git a/server/channels/store/sqlstore/post_store_test.go b/server/channels/store/sqlstore/post_store_test.go index c3334b5ec08..10456b97b39 100644 --- a/server/channels/store/sqlstore/post_store_test.go +++ b/server/channels/store/sqlstore/post_store_test.go @@ -6,8 +6,6 @@ package sqlstore import ( "testing" - "github.com/stretchr/testify/require" - "github.com/mattermost/mattermost/server/v8/channels/store/searchtest" "github.com/mattermost/mattermost/server/v8/channels/store/storetest" ) @@ -19,47 +17,3 @@ func TestPostStore(t *testing.T) { func TestSearchPostStore(t *testing.T) { StoreTestWithSearchTestEngine(t, searchtest.TestSearchPostStore) } - -func TestMysqlStopWords(t *testing.T) { - mysqlStopWordsTests := []struct { - Name string - Args []string - Expected []string - Empty bool - }{ - { - Name: "Should remove only the stop words", - Args: []string{"where is my car", "so this is real", "test this-and-that is awesome"}, - Expected: []string{"my car", "so real", "test this-and-that awesome"}, - }, - { - Name: "Should not remove part of a word containing stop words", - Args: []string{"whereabouts", "wherein", "tothis", "thisorthat", "waswhen", "whowas", "inthe", "whowill", "thewww"}, - Expected: []string{"whereabouts", "wherein", "tothis", "thisorthat", "waswhen", "whowas", "inthe", "whowill", "thewww"}, - }, - { - Name: "Should remove all words from terms", - Args: []string{"where about", "where in", "to this", "this or that", "was when", "who was", "in the", "who will", "the www"}, - Empty: true, - }, - { - Name: "Should not remove part of a word containing stop words separated by hyphens", - Args: []string{"where-about", "where-in", "to-this", "this-or-that", "was-when", "who-was", "in-the", "who-will", "the-www"}, - Expected: []string{"where-about", "where-in", "to-this", "this-or-that", "was-when", "who-was", "in-the", "who-will", "the-www"}, - }, - } - - for _, tc := range mysqlStopWordsTests { - t.Run(tc.Name, func(t *testing.T) { - for i, term := range tc.Args { - got, err := removeMysqlStopWordsFromTerms(term) - require.NoError(t, err) - if tc.Empty { - require.Empty(t, got) - } else { - require.Equal(t, tc.Expected[i], got) - } - } - }) - } -} diff --git a/server/channels/store/sqlstore/preference_store.go b/server/channels/store/sqlstore/preference_store.go index 986cbe53fc0..68c5620013e 100644 --- a/server/channels/store/sqlstore/preference_store.go +++ b/server/channels/store/sqlstore/preference_store.go @@ -72,15 +72,8 @@ func (s SqlPreferenceStore) save(transaction *sqlxTxWrapper, preference *model.P query := s.getQueryBuilder(). Insert("Preferences"). Columns("UserId", "Category", "Name", "Value"). - Values(preference.UserId, preference.Category, preference.Name, preference.Value) - - if s.DriverName() == model.DatabaseDriverMysql { - query = query.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE Value = ?", preference.Value)) - } else if s.DriverName() == model.DatabaseDriverPostgres { - query = query.SuffixExpr(sq.Expr("ON CONFLICT (userid, category, name) DO UPDATE SET Value = ?", preference.Value)) - } else { - return store.NewErrNotImplemented("failed to update preference because of missing driver") - } + Values(preference.UserId, preference.Category, preference.Name, preference.Value). + SuffixExpr(sq.Expr("ON CONFLICT (userid, category, name) DO UPDATE SET Value = ?", preference.Value)) queryString, args, err := query.ToSql() if err != nil { @@ -103,15 +96,8 @@ func (s SqlPreferenceStore) saveTx(transaction *sqlxTxWrapper, preference *model query := s.getQueryBuilder(). Insert("Preferences"). Columns("UserId", "Category", "Name", "Value"). - Values(preference.UserId, preference.Category, preference.Name, preference.Value) - - if s.DriverName() == model.DatabaseDriverMysql { - query = query.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE Value = ?", preference.Value)) - } else if s.DriverName() == model.DatabaseDriverPostgres { - query = query.SuffixExpr(sq.Expr("ON CONFLICT (userid, category, name) DO UPDATE SET Value = ?", preference.Value)) - } else { - return store.NewErrNotImplemented("failed to update preference because of missing driver") - } + Values(preference.UserId, preference.Category, preference.Name, preference.Value). + SuffixExpr(sq.Expr("ON CONFLICT (userid, category, name) DO UPDATE SET Value = ?", preference.Value)) queryString, args, err := query.ToSql() if err != nil { diff --git a/server/channels/store/sqlstore/property_group_store.go b/server/channels/store/sqlstore/property_group_store.go index 44153b192cb..dcf24bbc0e0 100644 --- a/server/channels/store/sqlstore/property_group_store.go +++ b/server/channels/store/sqlstore/property_group_store.go @@ -34,11 +34,7 @@ func (s *SqlPropertyGroupStore) Register(name string) (*model.PropertyGroup, err Columns("ID", "Name"). Values(group.ID, group.Name) - if s.DriverName() == model.DatabaseDriverMysql { - builder = builder.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE Name=Name")) - } else { - builder = builder.SuffixExpr(sq.Expr("ON CONFLICT (Name) DO NOTHING")) - } + builder = builder.SuffixExpr(sq.Expr("ON CONFLICT (Name) DO NOTHING")) r, err := s.GetMaster().ExecBuilder(builder) if err != nil { diff --git a/server/channels/store/sqlstore/property_value_store.go b/server/channels/store/sqlstore/property_value_store.go index 2551ab50a63..63072b354c8 100644 --- a/server/channels/store/sqlstore/property_value_store.go +++ b/server/channels/store/sqlstore/property_value_store.go @@ -241,57 +241,23 @@ func (s *SqlPropertyValueStore) Upsert(values []*model.PropertyValue) (_ []*mode Columns("ID", "TargetID", "TargetType", "GroupID", "FieldID", "Value", "CreateAt", "UpdateAt", "DeleteAt"). Values(value.ID, value.TargetID, value.TargetType, value.GroupID, value.FieldID, valueJSON, value.CreateAt, value.UpdateAt, value.DeleteAt) - if s.DriverName() == model.DatabaseDriverMysql { - builder = builder.SuffixExpr(sq.Expr( - "ON DUPLICATE KEY UPDATE Value = ?, UpdateAt = ?, DeleteAt = ?", - valueJSON, - value.UpdateAt, - 0, - )) + builder = builder.SuffixExpr(sq.Expr( + "ON CONFLICT (GroupID, TargetID, FieldID) WHERE DeleteAt = 0 DO UPDATE SET Value = ?, UpdateAt = ?, DeleteAt = ? RETURNING *", + valueJSON, + value.UpdateAt, + 0, + )) - if _, err := transaction.ExecBuilder(builder); err != nil { - return nil, errors.Wrap(err, "property_value_upsert_exec") - } - - // MySQL doesn't support RETURNING, so we need to fetch - // the new field to get its ID in case we hit a DUPLICATED - // KEY and the value.ID we have is not the right one - gBuilder := s.tableSelectQuery.Where(sq.Eq{ - "GroupID": value.GroupID, - "TargetID": value.TargetID, - "FieldID": value.FieldID, - "DeleteAt": 0, - }) - - var values []*model.PropertyValue - if gErr := transaction.SelectBuilder(&values, gBuilder); gErr != nil { - return nil, errors.Wrap(gErr, "property_value_upsert_select") - } - - if len(values) != 1 { - return nil, errors.New("property_value_upsert_select_length") - } - - updatedValues[i] = values[0] - } else { - builder = builder.SuffixExpr(sq.Expr( - "ON CONFLICT (GroupID, TargetID, FieldID) WHERE DeleteAt = 0 DO UPDATE SET Value = ?, UpdateAt = ?, DeleteAt = ? RETURNING *", - valueJSON, - value.UpdateAt, - 0, - )) - - var values []*model.PropertyValue - if err := transaction.SelectBuilder(&values, builder); err != nil { - return nil, errors.Wrapf(err, "failed to upsert property value with id: %s", value.ID) - } - - if len(values) != 1 { - return nil, errors.New("property_value_upsert_select_length") - } - - updatedValues[i] = values[0] + var values []*model.PropertyValue + if err := transaction.SelectBuilder(&values, builder); err != nil { + return nil, errors.Wrapf(err, "failed to upsert property value with id: %s", value.ID) } + + if len(values) != 1 { + return nil, errors.New("property_value_upsert_select_length") + } + + updatedValues[i] = values[0] } if err := transaction.Commit(); err != nil { diff --git a/server/channels/store/sqlstore/reaction_store.go b/server/channels/store/sqlstore/reaction_store.go index 2928038a8ab..df06f265c72 100644 --- a/server/channels/store/sqlstore/reaction_store.go +++ b/server/channels/store/sqlstore/reaction_store.go @@ -367,28 +367,15 @@ func (s *SqlReactionStore) PermanentDeleteBatch(endTime int64, limit int64) (int func (s *SqlReactionStore) saveReactionAndUpdatePost(transaction *sqlxTxWrapper, reaction *model.Reaction) error { reaction.DeleteAt = 0 - if s.DriverName() == model.DatabaseDriverMysql { - if _, err := transaction.NamedExec( - `INSERT INTO - Reactions - (UserId, PostId, EmojiName, CreateAt, UpdateAt, DeleteAt, RemoteId, ChannelId) - VALUES - (:UserId, :PostId, :EmojiName, :CreateAt, :UpdateAt, :DeleteAt, :RemoteId, :ChannelId) - ON DUPLICATE KEY UPDATE - UpdateAt = :UpdateAt, DeleteAt = :DeleteAt, RemoteId = :RemoteId, ChannelId = :ChannelId`, reaction); err != nil { - return err - } - } else if s.DriverName() == model.DatabaseDriverPostgres { - if _, err := transaction.NamedExec( - `INSERT INTO - Reactions - (UserId, PostId, EmojiName, CreateAt, UpdateAt, DeleteAt, RemoteId, ChannelId) - VALUES - (:UserId, :PostId, :EmojiName, :CreateAt, :UpdateAt, :DeleteAt, :RemoteId, :ChannelId) - ON CONFLICT (UserId, PostId, EmojiName) - DO UPDATE SET UpdateAt = :UpdateAt, DeleteAt = :DeleteAt, RemoteId = :RemoteId, ChannelId = :ChannelId`, reaction); err != nil { - return err - } + if _, err := transaction.NamedExec( + `INSERT INTO + Reactions + (UserId, PostId, EmojiName, CreateAt, UpdateAt, DeleteAt, RemoteId, ChannelId) + VALUES + (:UserId, :PostId, :EmojiName, :CreateAt, :UpdateAt, :DeleteAt, :RemoteId, :ChannelId) + ON CONFLICT (UserId, PostId, EmojiName) + DO UPDATE SET UpdateAt = :UpdateAt, DeleteAt = :DeleteAt, RemoteId = :RemoteId, ChannelId = :ChannelId`, reaction); err != nil { + return err } return updatePostForReactionsOnInsert(transaction, reaction.PostId) } diff --git a/server/channels/store/sqlstore/retention_policy_store.go b/server/channels/store/sqlstore/retention_policy_store.go index f0881fe6dd7..fbd41c1494d 100644 --- a/server/channels/store/sqlstore/retention_policy_store.go +++ b/server/channels/store/sqlstore/retention_policy_store.go @@ -10,7 +10,6 @@ import ( "strconv" "strings" - "github.com/go-sql-driver/mysql" "github.com/lib/pq" sq "github.com/mattermost/squirrel" "github.com/pkg/errors" @@ -374,11 +373,6 @@ func (s *SqlRetentionPolicyStore) buildGetPoliciesQuery(id string, offset, limit return "", nil, errors.Wrap(err, "retention_policies_tosql") } - // MySQL does not support positional params, so we add one param for each WHERE clause. - if s.DriverName() == model.DatabaseDriverMysql { - args = append(args, args...) - } - return queryString, args, nil } @@ -516,10 +510,6 @@ func (s *SqlRetentionPolicyStore) AddChannels(policyId string, channelIds []stri if dbErr.Code == PGForeignKeyViolationErrorCode { return store.NewErrNotFound("RetentionPolicy", policyId) } - case *mysql.MySQLError: - if dbErr.Number == MySQLForeignKeyViolationErrorCode { - return store.NewErrNotFound("RetentionPolicy", policyId) - } } } @@ -1063,82 +1053,45 @@ func genericRetentionPoliciesDeletion( } defer finalizeTransactionX(txn, &err) - if s.DriverName() == model.DatabaseDriverPostgres { - primaryKeysStr := "(" + strings.Join(r.PrimaryKeys, ",") + ")" + primaryKeysStr := "(" + strings.Join(r.PrimaryKeys, ",") + ")" - query = fmt.Sprintf("DELETE FROM %s WHERE %s IN (%s) RETURNING %s.%s", r.Table, primaryKeysStr, query, r.Table, r.PrimaryKeys[0]) - var rows *sql.Rows - rows, err = txn.Query(query, args...) - if err != nil { - return 0, errors.Wrap(err, "failed to delete "+r.Table) - } + query = fmt.Sprintf("DELETE FROM %s WHERE %s IN (%s) RETURNING %s.%s", r.Table, primaryKeysStr, query, r.Table, r.PrimaryKeys[0]) + var rows *sql.Rows + rows, err = txn.Query(query, args...) + if err != nil { + return 0, errors.Wrap(err, "failed to delete "+r.Table) + } - defer rows.Close() - ids := []string{} - for rows.Next() { - var id string - if err = rows.Scan(&id); err != nil { - return 0, errors.Wrap(err, "unable to scan from rows") - } - ids = append(ids, id) + defer rows.Close() + ids := []string{} + for rows.Next() { + var id string + if err = rows.Scan(&id); err != nil { + return 0, errors.Wrap(err, "unable to scan from rows") } - if err = rows.Err(); err != nil { - return 0, errors.Wrap(err, "failed while iterating over rows") - } - rowsAffected = int64(len(ids)) + ids = append(ids, id) + } + if err = rows.Err(); err != nil { + return 0, errors.Wrap(err, "failed while iterating over rows") + } + rowsAffected = int64(len(ids)) - if len(ids) > 0 { - retentionIdsRow := model.RetentionIdsForDeletion{ - TableName: r.Table, - Ids: ids, - } - err = insertRetentionIdsForDeletion(txn, &retentionIdsRow, s) - if err != nil { - return 0, err - } - } - } else { + if len(ids) > 0 { retentionIdsRow := model.RetentionIdsForDeletion{ TableName: r.Table, - Ids: []string{}, + Ids: ids, } - // 1. Select rows that will be deleted - if err = txn.Select(&retentionIdsRow.Ids, query, args...); err != nil { + err = insertRetentionIdsForDeletion(txn, &retentionIdsRow, s) + if err != nil { return 0, err } - - if len(retentionIdsRow.Ids) > 0 { - // 2. Insert selected ids into RetentionIdsForDeletion table - err = insertRetentionIdsForDeletion(txn, &retentionIdsRow, s) - if err != nil { - return 0, err - } - - query = getDeleteQueriesForMySQL(r, query) - - // 3. Delete from Parent table - var result sql.Result - result, err = txn.Exec(query, args...) - if err != nil { - return 0, errors.Wrap(err, "failed to delete "+r.Table) - } - - rowsAffected, err = result.RowsAffected() - if err != nil { - return 0, errors.Wrap(err, "failed to get rows affected for "+r.Table) - } - } } if err = txn.Commit(); err != nil { return 0, err } } else { - if s.DriverName() == model.DatabaseDriverPostgres { - primaryKeysStr := "(" + strings.Join(r.PrimaryKeys, ",") + ")" - query = fmt.Sprintf("DELETE FROM %s WHERE %s IN (%s)", r.Table, primaryKeysStr, query) - } else { - query = getDeleteQueriesForMySQL(r, query) - } + primaryKeysStr := "(" + strings.Join(r.PrimaryKeys, ",") + ")" + query = fmt.Sprintf("DELETE FROM %s WHERE %s IN (%s)", r.Table, primaryKeysStr, query) result, err := s.GetMaster().Exec(query, args...) if err != nil { return 0, errors.Wrap(err, "failed to delete "+r.Table) @@ -1151,16 +1104,6 @@ func genericRetentionPoliciesDeletion( return } -func getDeleteQueriesForMySQL(r RetentionPolicyBatchDeletionInfo, query string) string { - // MySQL does not support the LIMIT clause in a subquery with IN - clauses := make([]string, len(r.PrimaryKeys)) - for i, key := range r.PrimaryKeys { - clauses[i] = r.Table + "." + key + " = A." + key - } - joinClause := strings.Join(clauses, " AND ") - return fmt.Sprintf("DELETE %s FROM %s INNER JOIN (%s) AS A ON %s", r.Table, r.Table, query, joinClause) -} - func deleteFromRetentionIdsTx(txn *sqlxTxWrapper, id string) error { _, err := txn.Exec("DELETE FROM RetentionIdsForDeletion WHERE Id = ?", id) if err != nil { diff --git a/server/channels/store/sqlstore/schema_dump_test.go b/server/channels/store/sqlstore/schema_dump_test.go index a35300f4a1d..9a3071d1198 100644 --- a/server/channels/store/sqlstore/schema_dump_test.go +++ b/server/channels/store/sqlstore/schema_dump_test.go @@ -16,18 +16,6 @@ import ( func TestGetSchemaDefinition(t *testing.T) { StoreTest(t, func(t *testing.T, rctx request.CTX, ss store.Store) { - t.Run("MySQL", func(t *testing.T) { - if ss.(*SqlStore).DriverName() != model.DatabaseDriverMysql { - t.Skip("Skipping test as database is not MySQL") - } - - // Schema dump is only supported for Postgres - schemaInfo, err := ss.GetSchemaDefinition() - require.Error(t, err) - require.Nil(t, schemaInfo) - assert.Contains(t, err.Error(), "only supported for Postgres") - }) - t.Run("PostgreSQL", func(t *testing.T) { if ss.(*SqlStore).DriverName() != model.DatabaseDriverPostgres { t.Skip("Skipping test as database is not PostgreSQL") diff --git a/server/channels/store/sqlstore/session_store.go b/server/channels/store/sqlstore/session_store.go index 18295d51f11..57bd12b6d96 100644 --- a/server/channels/store/sqlstore/session_store.go +++ b/server/channels/store/sqlstore/session_store.go @@ -186,12 +186,8 @@ func (me SqlSessionStore) GetSessionsWithActiveDeviceIds(userId string) ([]*mode Where(sq.GtOrEq{"ExpiresAt": now}). Where(sq.NotEq{"DeviceId": ""}) - // Add the last_removed_device_id condition based on the driver - if me.DriverName() == model.DatabaseDriverMysql { - builder = builder.Where("DeviceId != COALESCE(Props->>'$.last_removed_device_id', '')") - } else { - builder = builder.Where("DeviceId != COALESCE(Props->>'last_removed_device_id', '')") - } + // Add the last_removed_device_id condition + builder = builder.Where("DeviceId != COALESCE(Props->>'last_removed_device_id', '')") sessions := []*model.Session{} @@ -205,11 +201,6 @@ func (me SqlSessionStore) GetMobileSessionMetadata() ([]*model.MobileSessionMeta versionProp := model.SessionPropMobileVersion notificationDisabledProp := model.SessionPropDeviceNotificationDisabled platformQuery := "NULLIF(SPLIT_PART(deviceid, ':', 1), '')" - if me.DriverName() == model.DatabaseDriverMysql { - versionProp = "$." + versionProp - notificationDisabledProp = "$." + notificationDisabledProp - platformQuery = "NULLIF(SUBSTRING_INDEX(deviceid, ':', 1), deviceid)" - } query, args, err := me.getQueryBuilder(). Select(fmt.Sprintf( diff --git a/server/channels/store/sqlstore/shared_channel_store.go b/server/channels/store/sqlstore/shared_channel_store.go index a3afb4e567e..2a4f722fb1d 100644 --- a/server/channels/store/sqlstore/shared_channel_store.go +++ b/server/channels/store/sqlstore/shared_channel_store.go @@ -920,11 +920,7 @@ func (s SqlSharedChannelStore) UpsertAttachment(attachment *model.SharedChannelA Columns(sharedChannelAttachementFields("")...). Values(attachment.Id, attachment.FileId, attachment.RemoteId, attachment.CreateAt, attachment.LastSyncAt) - if s.DriverName() == model.DatabaseDriverMysql { - query = query.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE LastSyncAt = ?", attachment.LastSyncAt)) - } else if s.DriverName() == model.DatabaseDriverPostgres { - query = query.SuffixExpr(sq.Expr("ON CONFLICT (id) DO UPDATE SET LastSyncAt = ?", attachment.LastSyncAt)) - } + query = query.SuffixExpr(sq.Expr("ON CONFLICT (id) DO UPDATE SET LastSyncAt = ?", attachment.LastSyncAt)) queryString, args, err := query.ToSql() if err != nil { diff --git a/server/channels/store/sqlstore/sqlx_wrapper_test.go b/server/channels/store/sqlstore/sqlx_wrapper_test.go index 35dab5bbedc..01449d833c1 100644 --- a/server/channels/store/sqlstore/sqlx_wrapper_test.go +++ b/server/channels/store/sqlstore/sqlx_wrapper_test.go @@ -20,7 +20,6 @@ func TestSqlX(t *testing.T) { t.Run("NamedQuery", func(t *testing.T) { testDrivers := []string{ model.DatabaseDriverPostgres, - model.DatabaseDriverMysql, } for _, driver := range testDrivers { @@ -45,12 +44,7 @@ func TestSqlX(t *testing.T) { tx, err := store.GetMaster().Beginx() require.NoError(t, err) - var query string - if store.DriverName() == model.DatabaseDriverMysql { - query = `SELECT SLEEP(:Timeout);` - } else if store.DriverName() == model.DatabaseDriverPostgres { - query = `SELECT pg_sleep(:timeout);` - } + query := `SELECT pg_sleep(:timeout);` arg := struct{ Timeout int }{Timeout: 2} _, err = tx.NamedQuery(query, arg) require.Equal(t, context.DeadlineExceeded, err) @@ -94,7 +88,6 @@ func TestSqlX(t *testing.T) { func TestSqlxSelect(t *testing.T) { testDrivers := []string{ model.DatabaseDriverPostgres, - model.DatabaseDriverMysql, } for _, driver := range testDrivers { t.Run(driver, func(t *testing.T) { @@ -124,12 +117,7 @@ func TestSqlxSelect(t *testing.T) { // Test timeout ctx, cancel := context.WithTimeout(context.Background(), 1) defer cancel() - var query string - if driver == model.DatabaseDriverMysql { - query = "SELECT SLEEP(2)" - } else { - query = "SELECT pg_sleep(2)" - } + query := "SELECT pg_sleep(2)" err = store.GetMaster().SelectCtx(ctx, &result, query) require.Error(t, err) require.Equal(t, context.DeadlineExceeded, err) @@ -146,13 +134,8 @@ func TestSqlxSelect(t *testing.T) { // Test timeout ctx, cancel := context.WithTimeout(context.Background(), 1) defer cancel() - if driver == model.DatabaseDriverMysql { - builder = store.getQueryBuilder(). - Select("SLEEP(2)") - } else { - builder = store.getQueryBuilder(). - Select("pg_sleep(2)") - } + builder = store.getQueryBuilder(). + Select("pg_sleep(2)") err = store.GetMaster().SelectBuilderCtx(ctx, &result, builder) require.Error(t, err) require.Equal(t, context.DeadlineExceeded, err) diff --git a/server/channels/store/sqlstore/status_store.go b/server/channels/store/sqlstore/status_store.go index c225a5cf594..da4f0fb5812 100644 --- a/server/channels/store/sqlstore/status_store.go +++ b/server/channels/store/sqlstore/status_store.go @@ -47,11 +47,7 @@ func (s SqlStatusStore) SaveOrUpdate(st *model.Status) error { Columns("UserId", "Status", quoteColumnName(s.DriverName(), "Manual"), "LastActivityAt", "DNDEndTime", "PrevStatus"). Values(st.UserId, st.Status, st.Manual, st.LastActivityAt, st.DNDEndTime, st.PrevStatus) - if s.DriverName() == model.DatabaseDriverMysql { - query = query.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE Status = VALUES(Status), `Manual` = VALUES(`Manual`), LastActivityAt = VALUES(LastActivityAt), DNDEndTime = VALUES(DNDEndTime), PrevStatus = VALUES(PrevStatus)")) - } else { - query = query.SuffixExpr(sq.Expr("ON CONFLICT (userid) DO UPDATE SET Status = EXCLUDED.Status, Manual = EXCLUDED.Manual, LastActivityAt = EXCLUDED.LastActivityAt, DNDEndTime = EXCLUDED.DNDEndTime, PrevStatus = EXCLUDED.PrevStatus")) - } + query = query.SuffixExpr(sq.Expr("ON CONFLICT (userid) DO UPDATE SET Status = EXCLUDED.Status, Manual = EXCLUDED.Manual, LastActivityAt = EXCLUDED.LastActivityAt, DNDEndTime = EXCLUDED.DNDEndTime, PrevStatus = EXCLUDED.PrevStatus")) if _, err := s.GetMaster().ExecBuilder(query); err != nil { return errors.Wrap(err, "failed to upsert Status") @@ -81,12 +77,8 @@ func (s SqlStatusStore) SaveOrUpdateMany(statuses map[string]*model.Status) erro query = query.Values(st.UserId, st.Status, st.Manual, st.LastActivityAt, st.DNDEndTime, st.PrevStatus) } - // Handle different databases - if s.DriverName() == model.DatabaseDriverMysql { - query = query.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE Status = VALUES(Status), `Manual` = VALUES(`Manual`), LastActivityAt = VALUES(LastActivityAt), DNDEndTime = VALUES(DNDEndTime), PrevStatus = VALUES(PrevStatus)")) - } else { - query = query.SuffixExpr(sq.Expr("ON CONFLICT (userid) DO UPDATE SET Status = EXCLUDED.Status, Manual = EXCLUDED.Manual, LastActivityAt = EXCLUDED.LastActivityAt, DNDEndTime = EXCLUDED.DNDEndTime, PrevStatus = EXCLUDED.PrevStatus")) - } + // Handle upsert for PostgreSQL + query = query.SuffixExpr(sq.Expr("ON CONFLICT (userid) DO UPDATE SET Status = EXCLUDED.Status, Manual = EXCLUDED.Manual, LastActivityAt = EXCLUDED.LastActivityAt, DNDEndTime = EXCLUDED.DNDEndTime, PrevStatus = EXCLUDED.PrevStatus")) if _, err := s.GetMaster().ExecBuilder(query); err != nil { return errors.Wrap(err, "failed to upsert multiple Status records") @@ -120,68 +112,7 @@ func (s SqlStatusStore) GetByIds(userIds []string) ([]*model.Status, error) { return statuses, nil } -// MySQL doesn't have support for RETURNING clause, so we use a transaction to get the updated rows. -func (s SqlStatusStore) updateExpiredStatuses(t *sqlxTxWrapper) ([]*model.Status, error) { - statuses := []*model.Status{} - currUnixTime := time.Now().UTC().Unix() - selectQuery := s.statusSelectQuery.Where( - sq.And{ - sq.Eq{"Status": model.StatusDnd}, - sq.Gt{"DNDEndTime": 0}, - sq.LtOrEq{"DNDEndTime": currUnixTime}, - }, - ) - - err := t.SelectBuilder(&statuses, selectQuery) - if err != nil { - return nil, errors.Wrap(err, "updateExpiredStatusesT: failed to get expired dnd statuses") - } - updateQuery := s.getQueryBuilder(). - Update("Status"). - Where( - sq.And{ - sq.Eq{"Status": model.StatusDnd}, - sq.Gt{"DNDEndTime": 0}, - sq.LtOrEq{"DNDEndTime": currUnixTime}, - }, - ). - Set("Status", sq.Expr("PrevStatus")). - Set("PrevStatus", model.StatusDnd). - Set("DNDEndTime", 0). - Set(quoteColumnName(s.DriverName(), "Manual"), false) - - if _, err := t.ExecBuilder(updateQuery); err != nil { - return nil, errors.Wrapf(err, "updateExpiredStatusesT: failed to update statuses") - } - - return statuses, nil -} - func (s SqlStatusStore) UpdateExpiredDNDStatuses() (_ []*model.Status, err error) { - if s.DriverName() == model.DatabaseDriverMysql { - transaction, terr := s.GetMaster().Beginx() - if terr != nil { - return nil, errors.Wrap(terr, "UpdateExpiredDNDStatuses: begin_transaction") - } - defer finalizeTransactionX(transaction, &terr) - statuses, terr := s.updateExpiredStatuses(transaction) - if terr != nil { - return nil, errors.Wrap(terr, "UpdateExpiredDNDStatuses: updateExpiredDNDStatusesT") - } - if terr = transaction.Commit(); terr != nil { - return nil, errors.Wrap(terr, "UpdateExpiredDNDStatuses: commit_transaction") - } - - for _, status := range statuses { - status.Status = status.PrevStatus - status.PrevStatus = model.StatusDnd - status.DNDEndTime = 0 - status.Manual = false - } - - return statuses, nil - } - queryString := s.getQueryBuilder(). Update("Status"). Where( diff --git a/server/channels/store/sqlstore/store.go b/server/channels/store/sqlstore/store.go index 0be8017802c..b93991b2517 100644 --- a/server/channels/store/sqlstore/store.go +++ b/server/channels/store/sqlstore/store.go @@ -18,7 +18,6 @@ import ( sq "github.com/mattermost/squirrel" - "github.com/go-sql-driver/mysql" _ "github.com/golang-migrate/migrate/v4/source/file" "github.com/jmoiron/sqlx" "github.com/lib/pq" @@ -37,25 +36,20 @@ type migrationDirection string type Option func(s *SqlStore) error const ( - IndexTypeFullText = "full_text" - IndexTypeFullTextFunc = "full_text_func" - IndexTypeDefault = "default" - PGDupTableErrorCode = "42P07" // see https://github.com/lib/pq/blob/master/error.go#L268 - MySQLDupTableErrorCode = uint16(1050) // see https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.html#error_er_table_exists_error - PGForeignKeyViolationErrorCode = "23503" - MySQLForeignKeyViolationErrorCode = 1452 - PGDuplicateObjectErrorCode = "42710" - MySQLDuplicateObjectErrorCode = 1022 - DBPingAttempts = 5 - DBReplicaPingAttempts = 2 + IndexTypeFullText = "full_text" + IndexTypeFullTextFunc = "full_text_func" + IndexTypeDefault = "default" + PGDupTableErrorCode = "42P07" // see https://github.com/lib/pq/blob/master/error.go#L268 + PGForeignKeyViolationErrorCode = "23503" + PGDuplicateObjectErrorCode = "42710" + DBPingAttempts = 5 + DBReplicaPingAttempts = 2 // This is a numerical version string by postgres. The format is // 2 characters for major, minor, and patch version prior to 10. // After 10, it's major and minor only. // 10.1 would be 100001. // 9.6.3 would be 90603. minimumRequiredPostgresVersion = 130000 - // major*1000 + minor*100 + patch - minimumRequiredMySQLVersion = 8000 migrationsDirectionUp migrationDirection = "up" migrationsDirectionDown migrationDirection = "down" @@ -65,8 +59,6 @@ const ( RemoteClusterSiteURLUniqueIndex = "remote_clusters_site_url_unique" ) -var tablesToCheckForCollation = []string{"incomingwebhooks", "preferences", "users", "uploadsessions", "channels", "publicchannels"} - type SqlStoreStores struct { team store.TeamStore channel store.ChannelStore @@ -201,11 +193,6 @@ func New(settings model.SqlSettings, logger mlog.LoggerIFace, metrics einterface return nil, errors.Wrap(err, "error while checking DB version") } - err = store.ensureDatabaseCollation() - if err != nil { - return nil, errors.Wrap(err, "error while checking DB collation") - } - if !store.skipMigrations { err = store.migrate(migrationsDirectionUp, false, !store.disableMorphLogging) if err != nil { @@ -292,20 +279,8 @@ func (ss *SqlStore) Logger() mlog.LoggerIFace { return ss.logger } -func noOpMapper(s string) string { return s } - func (ss *SqlStore) initConnection() error { dataSource := *ss.settings.DataSource - if ss.DriverName() == model.DatabaseDriverMysql { - // TODO: We ignore the readTimeout datasource parameter for MySQL since QueryTimeout - // covers that already. Ideally we'd like to do this only for the upgrade - // step. To be reviewed in MM-35789. - var err error - dataSource, err = sqlUtils.ResetReadTimeout(dataSource) - if err != nil { - return errors.Wrap(err, "failed to reset read timeout from datasource") - } - } handle, err := sqlUtils.SetupConnection(ss.Logger(), "master", dataSource, ss.settings, DBPingAttempts) if err != nil { @@ -314,9 +289,6 @@ func (ss *SqlStore) initConnection() error { ss.masterX = newSqlxDBWrapper(sqlx.NewDb(handle, ss.DriverName()), time.Duration(*ss.settings.QueryTimeout)*time.Second, *ss.settings.Trace) - if ss.DriverName() == model.DatabaseDriverMysql { - ss.masterX.MapperFunc(noOpMapper) - } if ss.metrics != nil { ss.metrics.RegisterDBCollector(ss.masterX.DB.DB, "master") } @@ -429,8 +401,6 @@ func (ss *SqlStore) GetDbVersion(numerical bool) (string, error) { } else { sqlVersion = `SHOW server_version` } - } else if ss.DriverName() == model.DatabaseDriverMysql { - sqlVersion = `SELECT version()` } else { return "", errors.New("Not supported driver") } @@ -452,9 +422,6 @@ func (ss *SqlStore) SetMasterX(db *sql.DB) { ss.masterX = newSqlxDBWrapper(sqlx.NewDb(db, ss.DriverName()), time.Duration(*ss.settings.QueryTimeout)*time.Second, *ss.settings.Trace) - if ss.DriverName() == model.DatabaseDriverMysql { - ss.masterX.MapperFunc(noOpMapper) - } } func (ss *SqlStore) GetInternalMasterDB() *sql.DB { @@ -538,9 +505,6 @@ func (ss *SqlStore) setDB(replica *atomic.Pointer[sqlxDBWrapper], handle *sql.DB replica.Store(newSqlxDBWrapper(sqlx.NewDb(handle, ss.DriverName()), time.Duration(*ss.settings.QueryTimeout)*time.Second, *ss.settings.Trace)) - if ss.DriverName() == model.DatabaseDriverMysql { - replica.Load().MapperFunc(noOpMapper) - } if ss.metrics != nil { ss.metrics.RegisterDBCollector(replica.Load().DB.DB, name) } @@ -642,184 +606,12 @@ func (ss *SqlStore) MarkSystemRanUnitTests() { } } -func (ss *SqlStore) DoesTableExist(tableName string) bool { - if ss.DriverName() == model.DatabaseDriverPostgres { - var count int64 - err := ss.GetMaster().Get(&count, - `SELECT count(relname) FROM pg_class WHERE relname=$1`, - strings.ToLower(tableName), - ) - if err != nil { - mlog.Fatal("Failed to check if table exists", mlog.Err(err)) - } - - return count > 0 - } else if ss.DriverName() == model.DatabaseDriverMysql { - var count int64 - err := ss.GetMaster().Get(&count, - `SELECT - COUNT(0) AS table_exists - FROM - information_schema.TABLES - WHERE - TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = ? - `, - tableName, - ) - if err != nil { - mlog.Fatal("Failed to check if table exists", mlog.Err(err)) - } - - return count > 0 - } - mlog.Fatal("Failed to check if column exists because of missing driver") - return false -} - -func (ss *SqlStore) DoesColumnExist(tableName string, columnName string) bool { - if ss.DriverName() == model.DatabaseDriverPostgres { - var count int64 - err := ss.GetMaster().Get(&count, - `SELECT COUNT(0) - FROM pg_attribute - WHERE attrelid = $1::regclass - AND attname = $2 - AND NOT attisdropped`, - strings.ToLower(tableName), - strings.ToLower(columnName), - ) - if err != nil { - if err.Error() == "pq: relation \""+strings.ToLower(tableName)+"\" does not exist" { - return false - } - - mlog.Fatal("Failed to check if column exists", mlog.Err(err)) - } - - return count > 0 - } else if ss.DriverName() == model.DatabaseDriverMysql { - var count int64 - err := ss.GetMaster().Get(&count, - `SELECT - COUNT(0) AS column_exists - FROM - information_schema.COLUMNS - WHERE - TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = ? - AND COLUMN_NAME = ?`, - tableName, - columnName, - ) - if err != nil { - mlog.Fatal("Failed to check if column exists", mlog.Err(err)) - } - - return count > 0 - } - mlog.Fatal("Failed to check if column exists because of missing driver") - return false -} - -func (ss *SqlStore) DoesTriggerExist(triggerName string) bool { - if ss.DriverName() == model.DatabaseDriverPostgres { - var count int64 - err := ss.GetMaster().Get(&count, ` - SELECT - COUNT(0) - FROM - pg_trigger - WHERE - tgname = $1 - `, triggerName) - if err != nil { - mlog.Fatal("Failed to check if trigger exists", mlog.Err(err)) - } - - return count > 0 - } else if ss.DriverName() == model.DatabaseDriverMysql { - var count int64 - err := ss.GetMaster().Get(&count, ` - SELECT - COUNT(0) - FROM - information_schema.triggers - WHERE - trigger_schema = DATABASE() - AND trigger_name = ? - `, triggerName) - if err != nil { - mlog.Fatal("Failed to check if trigger exists", mlog.Err(err)) - } - - return count > 0 - } - mlog.Fatal("Failed to check if column exists because of missing driver") - return false -} - -func (ss *SqlStore) CreateColumnIfNotExists(tableName string, columnName string, mySqlColType string, postgresColType string, defaultValue string) bool { - if ss.DoesColumnExist(tableName, columnName) { - return false - } - - if ss.DriverName() == model.DatabaseDriverPostgres { - _, err := ss.GetMaster().ExecNoTimeout("ALTER TABLE " + tableName + " ADD " + columnName + " " + postgresColType + " DEFAULT '" + defaultValue + "'") - if err != nil { - mlog.Fatal("Failed to create column", mlog.Err(err)) - } - - return true - } else if ss.DriverName() == model.DatabaseDriverMysql { - _, err := ss.GetMaster().ExecNoTimeout("ALTER TABLE " + tableName + " ADD " + columnName + " " + mySqlColType + " DEFAULT '" + defaultValue + "'") - if err != nil { - mlog.Fatal("Failed to create column", mlog.Err(err)) - } - - return true - } - mlog.Fatal("Failed to create column because of missing driver") - return false -} - -func (ss *SqlStore) RemoveTableIfExists(tableName string) bool { - if !ss.DoesTableExist(tableName) { - return false - } - - _, err := ss.GetMaster().ExecNoTimeout("DROP TABLE " + tableName) - if err != nil { - mlog.Fatal("Failed to drop table", mlog.Err(err)) - } - - return true -} - -func IsConstraintAlreadyExistsError(err error) bool { - switch dbErr := err.(type) { - case *pq.Error: - if dbErr.Code == PGDuplicateObjectErrorCode { - return true - } - case *mysql.MySQLError: - if dbErr.Number == MySQLDuplicateObjectErrorCode { - return true - } - } - return false -} - func IsUniqueConstraintError(err error, indexName []string) bool { unique := false if pqErr, ok := err.(*pq.Error); ok && pqErr.Code == "23505" { unique = true } - if mysqlErr, ok := err.(*mysql.MySQLError); ok && mysqlErr.Number == 1062 { - unique = true - } - field := false for _, contain := range indexName { if strings.Contains(err.Error(), contain) { @@ -1093,28 +885,18 @@ func (ss *SqlStore) Attributes() store.AttributesStore { } func (ss *SqlStore) DropAllTables() { - if ss.DriverName() == model.DatabaseDriverPostgres { - ss.masterX.Exec(`DO - $func$ - BEGIN - EXECUTE - (SELECT 'TRUNCATE TABLE ' || string_agg(oid::regclass::text, ', ') || ' CASCADE' - FROM pg_class - WHERE relkind = 'r' -- only tables - AND relnamespace = 'public'::regnamespace - AND NOT relname = 'db_migrations' - ); - END - $func$;`) - } else { - tables := []string{} - ss.masterX.Select(&tables, `show tables`) - for _, t := range tables { - if t != "db_migrations" { - ss.masterX.Exec(`TRUNCATE TABLE ` + t) - } - } - } + ss.masterX.Exec(`DO + $func$ + BEGIN + EXECUTE + (SELECT 'TRUNCATE TABLE ' || string_agg(oid::regclass::text, ', ') || ' CASCADE' + FROM pg_class + WHERE relkind = 'r' -- only tables + AND relnamespace = 'public'::regnamespace + AND NOT relname = 'db_migrations' + ); + END + $func$;`) } func (ss *SqlStore) getQueryBuilder() sq.StatementBuilderType { @@ -1122,10 +904,7 @@ func (ss *SqlStore) getQueryBuilder() sq.StatementBuilderType { } func (ss *SqlStore) getQueryPlaceholder() sq.PlaceholderFormat { - if ss.DriverName() == model.DatabaseDriverPostgres { - return sq.Dollar - } - return sq.Question + return sq.Dollar } // getSubQueryBuilder is necessary to generate the SQL query and args to pass to sub-queries because squirrel does not support WHERE clause in sub-queries. @@ -1174,16 +953,10 @@ func convertMySQLFullTextColumnsToPostgres(columnNames string) string { // tables in the database. func IsDuplicate(err error) bool { var pqErr *pq.Error - var mysqlErr *mysql.MySQLError - switch { - case errors.As(errors.Cause(err), &pqErr): + if errors.As(errors.Cause(err), &pqErr) { if pqErr.Code == PGDupTableErrorCode { return true } - case errors.As(errors.Cause(err), &mysqlErr): - if mysqlErr.Number == MySQLDupTableErrorCode { - return true - } } return false @@ -1201,106 +974,22 @@ func (ss *SqlStore) ensureMinimumDBVersion(ver string) (bool, error) { if intVer < minimumRequiredPostgresVersion { return false, fmt.Errorf("minimum Postgres version requirements not met. Found: %s, Wanted: %s", versionString(intVer, *ss.settings.DriverName), versionString(minimumRequiredPostgresVersion, *ss.settings.DriverName)) } - case model.DatabaseDriverMysql: - // Usually a version string is of the form 5.6.49-log, 10.4.5-MariaDB etc. - if strings.Contains(strings.ToLower(ver), "maria") { - mlog.Warn("MariaDB detected. You are using an unsupported database. Please consider using MySQL or Postgres.") - return true, nil - } - parts := strings.Split(ver, "-") - if len(parts) < 1 { - return false, fmt.Errorf("cannot parse MySQL DB version: %s", ver) - } - // Get the major and minor versions. - versions := strings.Split(parts[0], ".") - if len(versions) < 3 { - return false, fmt.Errorf("cannot parse MySQL DB version: %s", ver) - } - majorVer, err2 := strconv.Atoi(versions[0]) - if err2 != nil { - return false, fmt.Errorf("cannot parse MySQL DB version: %w", err2) - } - minorVer, err2 := strconv.Atoi(versions[1]) - if err2 != nil { - return false, fmt.Errorf("cannot parse MySQL DB version: %w", err2) - } - patchVer, err2 := strconv.Atoi(versions[2]) - if err2 != nil { - return false, fmt.Errorf("cannot parse MySQL DB version: %w", err2) - } - intVer := majorVer*1000 + minorVer*100 + patchVer - if intVer < minimumRequiredMySQLVersion { - return false, fmt.Errorf("Minimum MySQL version requirements not met. Found: %s, Wanted: %s", versionString(intVer, *ss.settings.DriverName), versionString(minimumRequiredMySQLVersion, *ss.settings.DriverName)) - } } return true, nil } -func (ss *SqlStore) ensureDatabaseCollation() error { - if *ss.settings.DriverName != model.DatabaseDriverMysql { - return nil - } - - var connCollation struct { - Variable_name string - Value string - } - if err := ss.GetMaster().Get(&connCollation, "SHOW VARIABLES LIKE 'collation_connection'"); err != nil { - return errors.Wrap(err, "unable to select variables") - } - - // we compare table collation with the connection collation value so that we can - // catch collation mismatches for tables we have a migration for. - for _, tableName := range tablesToCheckForCollation { - // we check if table exists because this code runs before the migrations applied - // which means if there is a fresh db, we may fail on selecting the table_collation - var exists int - if err := ss.GetMaster().Get(&exists, "SELECT count(*) FROM information_schema.tables WHERE table_schema = DATABASE() AND LOWER(table_name) = ?", tableName); err != nil { - return errors.Wrap(err, fmt.Sprintf("unable to check if table exists for collation check: %q", tableName)) - } else if exists == 0 { - continue - } - - var tableCollation string - if err := ss.GetMaster().Get(&tableCollation, "SELECT table_collation FROM information_schema.tables WHERE table_schema = DATABASE() AND LOWER(table_name) = ?", tableName); err != nil { - return errors.Wrap(err, fmt.Sprintf("unable to get table collation: %q", tableName)) - } - - if tableCollation != connCollation.Value { - mlog.Warn("Table collation mismatch", mlog.String("table_name", tableName), mlog.String("connection_collation", connCollation.Value), mlog.String("table_collation", tableCollation)) - } - } - - return nil -} - -// versionString converts an integer representation of a DB version +// versionString converts an integer representation of a Postgres DB version // to a pretty-printed string. // Postgres doesn't follow three-part version numbers from 10.0 onwards: // https://www.postgresql.org/docs/13/libpq-status.html#LIBPQ-PQSERVERVERSION. -// For MySQL, we consider a major*1000 + minor*100 + patch format. func versionString(v int, driver string) string { - switch driver { - case model.DatabaseDriverPostgres: - minor := v % 10000 - major := v / 10000 - return strconv.Itoa(major) + "." + strconv.Itoa(minor) - case model.DatabaseDriverMysql: - minor := v % 1000 - major := v / 1000 - patch := minor % 100 - minor = minor / 100 - return strconv.Itoa(major) + "." + strconv.Itoa(minor) + "." + strconv.Itoa(patch) - } - return "" + minor := v % 10000 + major := v / 10000 + return strconv.Itoa(major) + "." + strconv.Itoa(minor) } func (ss *SqlStore) toReserveCase(str string) string { - if ss.DriverName() == model.DatabaseDriverPostgres { - return fmt.Sprintf("%q", str) - } - - return fmt.Sprintf("`%s`", strings.Title(str)) + return fmt.Sprintf("%q", str) } func (ss *SqlStore) GetLocalSchemaVersion() (int, error) { @@ -1352,36 +1041,17 @@ func (ss *SqlStore) determineMaxColumnSize(tableName, columnName string) (int, e var columnSizeBytes int32 ss.getQueryPlaceholder() - if ss.DriverName() == model.DatabaseDriverPostgres { - if err := ss.GetReplica().Get(&columnSizeBytes, ` - SELECT - COALESCE(character_maximum_length, 0) - FROM - information_schema.columns - WHERE - lower(table_name) = lower($1) - AND lower(column_name) = lower($2) - `, tableName, columnName); err != nil { - mlog.Warn("Unable to determine the maximum supported column size for Postgres", mlog.Err(err)) - return 0, err - } - } else if ss.DriverName() == model.DatabaseDriverMysql { - if err := ss.GetReplica().Get(&columnSizeBytes, ` - SELECT - COALESCE(CHARACTER_MAXIMUM_LENGTH, 0) - FROM - INFORMATION_SCHEMA.COLUMNS - WHERE - table_schema = DATABASE() - AND lower(table_name) = lower(?) - AND lower(column_name) = lower(?) - LIMIT 0, 1 - `, tableName, columnName); err != nil { - mlog.Warn("Unable to determine the maximum supported column size for MySQL", mlog.Err(err)) - return 0, err - } - } else { - mlog.Warn("No implementation found to determine the maximum supported column size") + if err := ss.GetReplica().Get(&columnSizeBytes, ` + SELECT + COALESCE(character_maximum_length, 0) + FROM + information_schema.columns + WHERE + lower(table_name) = lower($1) + AND lower(column_name) = lower($2) + `, tableName, columnName); err != nil { + mlog.Warn("Unable to determine the maximum supported column size for Postgres", mlog.Err(err)) + return 0, err } // Assume a worst-case representation of four bytes per rune. diff --git a/server/channels/store/sqlstore/store_test.go b/server/channels/store/sqlstore/store_test.go index a0dc7da0476..aab9dd75ae0 100644 --- a/server/channels/store/sqlstore/store_test.go +++ b/server/channels/store/sqlstore/store_test.go @@ -14,9 +14,7 @@ import ( "strings" "sync" "testing" - "time" - "github.com/go-sql-driver/mysql" "github.com/lib/pq" "github.com/pkg/errors" "github.com/stretchr/testify/assert" @@ -71,7 +69,7 @@ func getStoresFromPools(t *testing.T) []*storeType { func newStoreType(name, driver string) *storeType { return &storeType{ Name: name, - SqlSettings: storetest.MakeSqlSettings(driver, false), + SqlSettings: storetest.MakeSqlSettings(driver), } } @@ -162,12 +160,9 @@ func initStores(logger mlog.LoggerIFace, parallelism int) { // for subtests or paused tests that might also run in parallel and initialize a new store. parallelTestsPoolSize := parallelism * 2 - // In CI, we already run the entire test suite for both mysql and postgres in parallel. - // So we just run the tests for the current database set. + // In CI, we run the test suite for the current database set. if os.Getenv("IS_CI") == "true" { switch os.Getenv("MM_SQLSETTINGS_DRIVERNAME") { - case "mysql": - storeTypes = append(storeTypes, newStoreType("MySQL", model.DatabaseDriverMysql)) case "postgres": storeTypes = append(storeTypes, newStoreType("PostgreSQL", model.DatabaseDriverPostgres)) if enableFullyParallelTests { @@ -180,7 +175,6 @@ func initStores(logger mlog.LoggerIFace, parallelism int) { } } else { storeTypes = append(storeTypes, - newStoreType("MySQL", model.DatabaseDriverMysql), newStoreType("PostgreSQL", model.DatabaseDriverPostgres), ) @@ -189,11 +183,7 @@ func initStores(logger mlog.LoggerIFace, parallelism int) { if err != nil { panic(err) } - msStorePool, err := NewTestPool(logger, model.DatabaseDriverMysql, parallelTestsPoolSize) - if err != nil { - panic(err) - } - storePools = append(storePools, pgStorePool, msStorePool) + storePools = append(storePools, pgStorePool) } } @@ -512,7 +502,6 @@ func TestGetDbVersion(t *testing.T) { testDrivers := []string{ model.DatabaseDriverPostgres, - model.DatabaseDriverMysql, } for _, d := range testDrivers { @@ -569,48 +558,15 @@ func TestEnsureMinimumDBVersion(t *testing.T) { ok: false, err: "cannot parse DB version", }, - { - driver: model.DatabaseDriverMysql, - ver: "10.4.5-MariaDB", - ok: true, - err: "", - }, - { - driver: model.DatabaseDriverMysql, - ver: "5.6.99-test", - ok: false, - err: "Minimum MySQL version requirements not met", - }, - { - driver: model.DatabaseDriverMysql, - ver: "34-55.12", - ok: false, - err: "cannot parse MySQL DB version", - }, - { - driver: model.DatabaseDriverMysql, - ver: "8.0.0-log", - ok: true, - err: "", - }, } pg := model.DatabaseDriverPostgres pgSettings := &model.SqlSettings{ DriverName: &pg, } - my := model.DatabaseDriverMysql - mySettings := &model.SqlSettings{ - DriverName: &my, - } for _, tc := range tests { store := &SqlStore{} - switch tc.driver { - case pg: - store.settings = pgSettings - case my: - store.settings = mySettings - } + store.settings = pgSettings ok, err := store.ensureMinimumDBVersion(tc.ver) assert.Equal(t, tc.ok, ok, "driver: %s, version: %s", tc.driver, tc.ver) if tc.err != "" { @@ -637,15 +593,6 @@ func TestIsBinaryParamEnabled(t *testing.T) { }, expected: true, }, - { - store: SqlStore{ - settings: &model.SqlSettings{ - DriverName: model.NewPointer(model.DatabaseDriverMysql), - DataSource: model.NewPointer("postgres://mmuser:mostest@localhost/loadtest?sslmode=disable\u0026binary_parameters=yes"), - }, - }, - expected: false, - }, { store: SqlStore{ settings: &model.SqlSettings{ @@ -776,11 +723,9 @@ func TestIsDuplicate(t *testing.T) { } testErrors := map[error]bool{ - &pq.Error{Code: "42P06"}: false, - &pq.Error{Code: PGDupTableErrorCode}: true, - &mysql.MySQLError{Number: uint16(1000)}: false, - &mysql.MySQLError{Number: MySQLDupTableErrorCode}: true, - errors.New("Random error"): false, + &pq.Error{Code: "42P06"}: false, + &pq.Error{Code: PGDupTableErrorCode}: true, + errors.New("Random error"): false, } for e, b := range testErrors { @@ -818,16 +763,6 @@ func TestVersionString(t *testing.T) { driver: model.DatabaseDriverPostgres, output: "12.5", }, - { - input: 5708, - driver: model.DatabaseDriverMysql, - output: "5.7.8", - }, - { - input: 8000, - driver: model.DatabaseDriverMysql, - output: "8.0.0", - }, } for _, v := range versions { @@ -843,7 +778,6 @@ func TestReplicaLagQuery(t *testing.T) { testDrivers := []string{ model.DatabaseDriverPostgres, - model.DatabaseDriverMysql, } for _, driver := range testDrivers { @@ -859,9 +793,6 @@ func TestReplicaLagQuery(t *testing.T) { case model.DatabaseDriverPostgres: query = `SELECT relname, count(relname) FROM pg_class WHERE relname='posts' GROUP BY relname` tableName = "posts" - case model.DatabaseDriverMysql: - query = `SELECT table_name, count(table_name) FROM information_schema.tables WHERE table_name='Posts' and table_schema=Database() GROUP BY table_name` - tableName = "Posts" } settings.ReplicaLagSettings = []*model.ReplicaLagSettings{{ @@ -910,7 +841,6 @@ func TestInvalidReplicaLagDataSource(t *testing.T) { testDrivers := []string{ model.DatabaseDriverPostgres, - model.DatabaseDriverMysql, } for _, driver := range testDrivers { @@ -966,9 +896,7 @@ func makeSqlSettings(driver string) (*model.SqlSettings, error) { switch driver { case model.DatabaseDriverPostgres: - return storetest.MakeSqlSettings(driver, false), nil - case model.DatabaseDriverMysql: - return storetest.MakeSqlSettings(driver, false), nil + return storetest.MakeSqlSettings(driver), nil } return nil, errDriverUnsupported @@ -977,48 +905,17 @@ func makeSqlSettings(driver string) (*model.SqlSettings, error) { func TestExecNoTimeout(t *testing.T) { StoreTest(t, func(t *testing.T, rctx request.CTX, ss store.Store) { sqlStore := ss.(*SqlStore) - var query string timeout := sqlStore.masterX.queryTimeout sqlStore.masterX.queryTimeout = 1 defer func() { sqlStore.masterX.queryTimeout = timeout }() - if sqlStore.DriverName() == model.DatabaseDriverMysql { - query = `SELECT SLEEP(2);` - } else if sqlStore.DriverName() == model.DatabaseDriverPostgres { - query = `SELECT pg_sleep(2);` - } + query := `SELECT pg_sleep(2);` _, err := sqlStore.GetMaster().ExecNoTimeout(query) require.NoError(t, err) }) } -func TestMySQLReadTimeout(t *testing.T) { - settings, err := makeSqlSettings(model.DatabaseDriverMysql) - if err != nil { - t.Skip(err) - } - dataSource := *settings.DataSource - config, err := mysql.ParseDSN(dataSource) - require.NoError(t, err) - - config.ReadTimeout = 1 * time.Second - dataSource = config.FormatDSN() - settings.DataSource = &dataSource - - store := &SqlStore{ - settings: settings, - logger: mlog.CreateConsoleTestLogger(t), - quitMonitor: make(chan struct{}), - wgMonitor: &sync.WaitGroup{}, - } - require.NoError(t, store.initConnection()) - defer store.Close() - - _, err = store.GetMaster().ExecNoTimeout(`SELECT SLEEP(3)`) - require.NoError(t, err) -} - func TestGetDBSchemaVersion(t *testing.T) { if enableFullyParallelTests { t.Parallel() @@ -1026,7 +923,6 @@ func TestGetDBSchemaVersion(t *testing.T) { testDrivers := []string{ model.DatabaseDriverPostgres, - model.DatabaseDriverMysql, } logger := mlog.CreateConsoleTestLogger(t) @@ -1070,7 +966,6 @@ func TestGetLocalSchemaVersion(t *testing.T) { testDrivers := []string{ model.DatabaseDriverPostgres, - model.DatabaseDriverMysql, } logger := mlog.CreateConsoleTestLogger(t) @@ -1102,7 +997,6 @@ func TestGetAppliedMigrations(t *testing.T) { testDrivers := []string{ model.DatabaseDriverPostgres, - model.DatabaseDriverMysql, } logger := mlog.CreateConsoleTestLogger(t) @@ -1154,7 +1048,6 @@ func TestSkipMigrationsOption(t *testing.T) { testDrivers := []string{ model.DatabaseDriverPostgres, - model.DatabaseDriverMysql, } logger := mlog.CreateConsoleTestLogger(t) @@ -1178,12 +1071,7 @@ func TestSkipMigrationsOption(t *testing.T) { assert.True(t, !errors.Is(err, sql.ErrNoRows)) // And we know what each db will return: - if driver == model.DatabaseDriverPostgres { - assert.Contains(t, err.Error(), "pq: relation \"db_migrations\" does not exist") - } else { - // Mysql includes the random db name, so test the end: - assert.Contains(t, err.Error(), ".db_migrations' doesn't exist") - } + assert.Contains(t, err.Error(), "pq: relation \"db_migrations\" does not exist") }) } } diff --git a/server/channels/store/sqlstore/system_store.go b/server/channels/store/sqlstore/system_store.go index 0d9e9448b9d..fa691185a81 100644 --- a/server/channels/store/sqlstore/system_store.go +++ b/server/channels/store/sqlstore/system_store.go @@ -41,11 +41,7 @@ func (s SqlSystemStore) SaveOrUpdate(system *model.System) error { Columns("Name", "Value"). Values(system.Name, system.Value) - if s.DriverName() == model.DatabaseDriverMysql { - query = query.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE Value = ?", system.Value)) - } else { - query = query.SuffixExpr(sq.Expr("ON CONFLICT (name) DO UPDATE SET Value = ?", system.Value)) - } + query = query.SuffixExpr(sq.Expr("ON CONFLICT (name) DO UPDATE SET Value = ?", system.Value)) queryString, args, err := query.ToSql() if err != nil { diff --git a/server/channels/store/sqlstore/team_store.go b/server/channels/store/sqlstore/team_store.go index f17b1f3133f..5c48e651806 100644 --- a/server/channels/store/sqlstore/team_store.go +++ b/server/channels/store/sqlstore/team_store.go @@ -468,9 +468,6 @@ func (s SqlTeamStore) teamSearchQuery(opts *model.TeamSearch, countQuery bool) s term = wildcardSearchTerm(term) operatorKeyword := "ILIKE" - if s.DriverName() == model.DatabaseDriverMysql { - operatorKeyword = "LIKE" - } query = query.Where(fmt.Sprintf("(Name %[1]s ? OR DisplayName %[1]s ?)", operatorKeyword), term, term) } @@ -1625,6 +1622,7 @@ func (s SqlTeamStore) UpdateMembersRole(teamID string, adminIDs []string) (_ []* } defer finalizeTransactionX(transaction, &err) + // TODO: https://mattermost.atlassian.net/browse/MM-63368 // On MySQL it's not possible to update a table and select from it in the same query. // A SELECT and a UPDATE query are needed. // Once we only support PostgreSQL, this can be done in a single query using RETURNING. diff --git a/server/channels/store/sqlstore/testpool.go b/server/channels/store/sqlstore/testpool.go index 0b2a9ab1cf3..320d9b5037f 100644 --- a/server/channels/store/sqlstore/testpool.go +++ b/server/channels/store/sqlstore/testpool.go @@ -35,7 +35,7 @@ func NewTestPool(logger mlog.LoggerIFace, driverName string, poolSize int) (*Tes var eg errgroup.Group for range poolSize { eg.Go(func() error { - settings := storetest.MakeSqlSettings(driverName, false) + settings := storetest.MakeSqlSettings(driverName) sqlStore, err := New(*settings, logger, nil) if err != nil { return err diff --git a/server/channels/store/sqlstore/user_access_token_store.go b/server/channels/store/sqlstore/user_access_token_store.go index 1a3ca78b8b9..c4abb67e6e7 100644 --- a/server/channels/store/sqlstore/user_access_token_store.go +++ b/server/channels/store/sqlstore/user_access_token_store.go @@ -77,12 +77,7 @@ func (s SqlUserAccessTokenStore) Delete(tokenId string) (err error) { } func (s SqlUserAccessTokenStore) deleteSessionsAndTokensById(transaction *sqlxTxWrapper, tokenId string) error { - query := "" - if s.DriverName() == model.DatabaseDriverPostgres { - query = "DELETE FROM Sessions s USING UserAccessTokens o WHERE o.Token = s.Token AND o.Id = ?" - } else if s.DriverName() == model.DatabaseDriverMysql { - query = "DELETE s.* FROM Sessions s INNER JOIN UserAccessTokens o ON o.Token = s.Token WHERE o.Id = ?" - } + query := "DELETE FROM Sessions s USING UserAccessTokens o WHERE o.Token = s.Token AND o.Id = ?" if _, err := transaction.Exec(query, tokenId); err != nil { return errors.Wrapf(err, "failed to delete Sessions with UserAccessToken id=%s", tokenId) @@ -117,12 +112,7 @@ func (s SqlUserAccessTokenStore) DeleteAllForUser(userId string) (err error) { } func (s SqlUserAccessTokenStore) deleteSessionsandTokensByUser(transaction *sqlxTxWrapper, userId string) error { - query := "" - if s.DriverName() == model.DatabaseDriverPostgres { - query = "DELETE FROM Sessions s USING UserAccessTokens o WHERE o.Token = s.Token AND o.UserId = ?" - } else if s.DriverName() == model.DatabaseDriverMysql { - query = "DELETE s.* FROM Sessions s INNER JOIN UserAccessTokens o ON o.Token = s.Token WHERE o.UserId = ?" - } + query := "DELETE FROM Sessions s USING UserAccessTokens o WHERE o.Token = s.Token AND o.UserId = ?" if _, err := transaction.Exec(query, userId); err != nil { return errors.Wrapf(err, "failed to delete Sessions with UserAccessToken userId=%s", userId) @@ -242,12 +232,7 @@ func (s SqlUserAccessTokenStore) UpdateTokenDisable(tokenId string) (err error) } func (s SqlUserAccessTokenStore) deleteSessionsAndDisableToken(transaction *sqlxTxWrapper, tokenId string) error { - query := "" - if s.DriverName() == model.DatabaseDriverPostgres { - query = "DELETE FROM Sessions s USING UserAccessTokens o WHERE o.Token = s.Token AND o.Id = ?" - } else if s.DriverName() == model.DatabaseDriverMysql { - query = "DELETE s.* FROM Sessions s INNER JOIN UserAccessTokens o ON o.Token = s.Token WHERE o.Id = ?" - } + query := "DELETE FROM Sessions s USING UserAccessTokens o WHERE o.Token = s.Token AND o.Id = ?" if _, err := transaction.Exec(query, tokenId); err != nil { return errors.Wrapf(err, "failed to delete Sessions with UserAccessToken id=%s", tokenId) diff --git a/server/channels/store/sqlstore/utils.go b/server/channels/store/sqlstore/utils.go index 26395e56614..72a6ce5452d 100644 --- a/server/channels/store/sqlstore/utils.go +++ b/server/channels/store/sqlstore/utils.go @@ -102,32 +102,6 @@ func isQuotedWord(s string) bool { return s[0] == '"' && s[len(s)-1] == '"' } -// constructMySQLJSONArgs returns the arg list to pass to a query along with -// the string of placeholders which is needed to be to the JSON_SET function. -// Use this function in this way: -// UPDATE Table -// SET Col = JSON_SET(Col, `+argString+`) -// WHERE Id=?`, args...) -// after appending the Id param to the args slice. -func constructMySQLJSONArgs(props map[string]string) ([]any, string) { - if len(props) == 0 { - return nil, "" - } - - // Unpack the keys and values to pass to MySQL. - args := make([]any, 0, len(props)) - for k, v := range props { - args = append(args, "$."+k, v) - } - - // We calculate the number of ? to set in the query string. - argString := strings.Repeat("?, ", len(props)*2) - // Strip off the trailing comma. - argString = strings.TrimSuffix(argString, ", ") - - return args, argString -} - func constructArrayArgs(ids []string) (string, []any) { var placeholder strings.Builder values := make([]any, 0, len(ids)) @@ -185,16 +159,8 @@ func trimInput(input string) string { return input } -// Adds backtiks to the column name for MySQL, this is required if -// the column name is a reserved keyword. -// -// `ColumnName` - MySQL -// ColumnName - Postgres +// Returns the column name for PostgreSQL. func quoteColumnName(driver string, columnName string) string { - if driver == model.DatabaseDriverMysql { - return fmt.Sprintf("`%s`", columnName) - } - return columnName } diff --git a/server/channels/store/sqlstore/utils_test.go b/server/channels/store/sqlstore/utils_test.go index 74b449c9526..33e6d7edead 100644 --- a/server/channels/store/sqlstore/utils_test.go +++ b/server/channels/store/sqlstore/utils_test.go @@ -9,7 +9,6 @@ import ( "github.com/mattermost/mattermost/server/public/shared/request" "github.com/mattermost/mattermost/server/v8/channels/store" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -122,39 +121,6 @@ func TestRemoveNonAlphaNumericUnquotedTerms(t *testing.T) { } } -func TestMySQLJSONArgs(t *testing.T) { - if enableFullyParallelTests { - t.Parallel() - } - - tests := []struct { - props map[string]string - args []any - argString string - }{ - { - props: map[string]string{ - "desktop": "linux", - "mobile": "android", - "notify": "always", - }, - args: []any{"$.desktop", "linux", "$.mobile", "android", "$.notify", "always"}, - argString: "?, ?, ?, ?, ?, ?", - }, - { - props: map[string]string{}, - args: nil, - argString: "", - }, - } - - for _, test := range tests { - args, argString := constructMySQLJSONArgs(test.props) - assert.ElementsMatch(t, test.args, args) - assert.Equal(t, test.argString, argString) - } -} - func TestScanRowsIntoMap(t *testing.T) { StoreTest(t, func(t *testing.T, rctx request.CTX, ss store.Store) { sqlStore := ss.(*SqlStore) diff --git a/server/channels/store/storetest/attributes_store.go b/server/channels/store/storetest/attributes_store.go index 1459a5259dc..877c4014a5a 100644 --- a/server/channels/store/storetest/attributes_store.go +++ b/server/channels/store/storetest/attributes_store.go @@ -254,12 +254,7 @@ func testAttributesStoreSearchUsers(t *testing.T, rctx request.CTX, ss store.Sto }) t.Run("Search users with a valid value query", func(t *testing.T) { - var query string - if s.DriverName() == model.DatabaseDriverMysql { - query = "Attributes ->> '$." + testPropertyB + "' = ?" - } else { - query = "Attributes ->> '" + testPropertyB + "' = $1::text" - } + query := "Attributes ->> '" + testPropertyB + "' = $1::text" subjects, count, err := ss.Attributes().SearchUsers(rctx, model.SubjectSearchOptions{ Query: query, Args: []any{testPropertyValueB1}, @@ -271,12 +266,7 @@ func testAttributesStoreSearchUsers(t *testing.T, rctx request.CTX, ss store.Sto }) t.Run("Search users with a valid value query and limit", func(t *testing.T) { - var query string - if s.DriverName() == model.DatabaseDriverMysql { - query = "Attributes ->> '$." + testPropertyA + "' = ?" - } else { - query = "Attributes ->> '" + testPropertyA + "' = $1::text" - } + query := "Attributes ->> '" + testPropertyA + "' = $1::text" subjects, count, err := ss.Attributes().SearchUsers(rctx, model.SubjectSearchOptions{ Query: query, Args: []any{testPropertyValueA1}, @@ -293,12 +283,7 @@ func testAttributesStoreSearchUsers(t *testing.T, rctx request.CTX, ss store.Sto }) t.Run("Search users with pagination", func(t *testing.T) { - var query string - if s.DriverName() == model.DatabaseDriverMysql { - query = "Attributes ->> '$." + testPropertyA + "' = ?" - } else { - query = "Attributes ->> '" + testPropertyA + "' = $1::text" - } + query := "Attributes ->> '" + testPropertyA + "' = $1::text" cursor := strings.Repeat("0", 26) for range 5 { @@ -370,13 +355,7 @@ func testAttributesStoreGetChannelMembersToRemove(t *testing.T, rctx request.CTX }) t.Run("Get channel members to remove single attribute", func(t *testing.T) { - var query string - switch s.DriverName() { - case model.DatabaseDriverMysql: - query = "Attributes ->> '$." + testPropertyA + "' = ?" // Attributes ->> '$.Clearance' >= ? - case model.DatabaseDriverPostgres: - query = "Attributes ->> '" + testPropertyA + "' = $1::text" // Attributes ->> '$.Clearance' >= $1::text - } + query := "Attributes ->> '" + testPropertyA + "' = $1::text" // Attributes ->> '$.Clearance' >= $1::text members, err := ss.Attributes().GetChannelMembersToRemove(rctx, ch.Id, model.SubjectSearchOptions{ Query: query, Args: []any{testPropertyValueA1}, @@ -386,13 +365,7 @@ func testAttributesStoreGetChannelMembersToRemove(t *testing.T, rctx request.CTX }) t.Run("Get channel members to remove multiple attribute", func(t *testing.T) { - var query string - switch s.DriverName() { - case model.DatabaseDriverMysql: - query = "Attributes ->> '$." + testPropertyA + "' = ? AND Attributes ->> '$." + testPropertyB + "' = ?" - case model.DatabaseDriverPostgres: - query = "Attributes ->> '" + testPropertyA + "' = $1::text AND Attributes ->> '" + testPropertyB + "' = $2::text" - } + query := "Attributes ->> '" + testPropertyA + "' = $1::text AND Attributes ->> '" + testPropertyB + "' = $2::text" members, err := ss.Attributes().GetChannelMembersToRemove(rctx, ch.Id, model.SubjectSearchOptions{ Query: query, Args: []any{testPropertyValueA1, testPropertyValueB1}, @@ -410,13 +383,7 @@ func testAttributesStoreGetChannelMembersToRemove(t *testing.T, rctx request.CTX }) t.Run("Get channel members for select type attribute", func(t *testing.T) { - var query string - switch s.DriverName() { - case model.DatabaseDriverMysql: - t.Skip("select type attributes are not supported in MySQL") - case model.DatabaseDriverPostgres: - query = "Attributes ->> '" + testPropertyC + "' = $1::text" - } + query := "Attributes ->> '" + testPropertyC + "' = $1::text" members, err := ss.Attributes().GetChannelMembersToRemove(rctx, ch.Id, model.SubjectSearchOptions{ Query: query, Args: []any{testPropertyValueC1}, diff --git a/server/channels/store/storetest/channel_store_categories.go b/server/channels/store/storetest/channel_store_categories.go index 8d1f72dd2d4..3d651b558e2 100644 --- a/server/channels/store/storetest/channel_store_categories.go +++ b/server/channels/store/storetest/channel_store_categories.go @@ -2212,10 +2212,6 @@ func testSidebarCategoryDeadlock(t *testing.T, rctx request.CTX, ss store.Store) } func testSidebarCategoryConcurrentAccess(t *testing.T, rctx request.CTX, ss store.Store, s SqlStore) { - if s.DriverName() == model.DatabaseDriverMysql { - t.Skip("This is known to fail on MySQL") - } - for i := range 2 { t.Run(fmt.Sprint(i), func(t *testing.T) { t.Parallel() diff --git a/server/channels/store/storetest/settings.go b/server/channels/store/storetest/settings.go index fc5cc80c51f..b2dcc844218 100644 --- a/server/channels/store/storetest/settings.go +++ b/server/channels/store/storetest/settings.go @@ -11,8 +11,6 @@ import ( "path" "strings" - "github.com/go-sql-driver/mysql" - _ "github.com/go-sql-driver/mysql" _ "github.com/lib/pq" "github.com/pkg/errors" @@ -21,26 +19,9 @@ import ( ) const ( - defaultMysqlDSN = "mmuser:mostest@tcp(localhost:3306)/mattermost_test?charset=utf8mb4&readTimeout=30s&writeTimeout=30s&multiStatements=true&maxAllowedPacket=4194304" - defaultPostgresqlDSN = "postgres://mmuser:mostest@localhost:5432/mattermost_test?sslmode=disable&connect_timeout=10" - defaultMysqlRootPWD = "mostest" - defaultMysqlReplicaDSN = "root:mostest@tcp(localhost:3307)/mattermost_test?charset=utf8mb4\u0026readTimeout=30s" + defaultPostgresqlDSN = "postgres://mmuser:mostest@localhost:5432/mattermost_test?sslmode=disable&connect_timeout=10" ) -func getEnv(name, defaultValue string) string { - if value := os.Getenv(name); value != "" { - return value - } - return defaultValue -} - -func getDefaultMysqlDSN() string { - if os.Getenv("IS_CI") == "true" { - return strings.ReplaceAll(defaultMysqlDSN, "localhost", "mysql") - } - return defaultMysqlDSN -} - func getDefaultPostgresqlDSN() string { if os.Getenv("IS_CI") == "true" { return strings.ReplaceAll(defaultPostgresqlDSN, "localhost", "postgres") @@ -48,32 +29,6 @@ func getDefaultPostgresqlDSN() string { return defaultPostgresqlDSN } -// MySQLSettings returns the database settings to connect to the MySQL unittesting database. -// The database name is generated randomly and must be created before use. -func MySQLSettings(withReplica bool) *model.SqlSettings { - dsn := os.Getenv("TEST_DATABASE_MYSQL_DSN") - if dsn == "" { - dsn = getDefaultMysqlDSN() - } else { - mlog.Info("Using TEST_DATABASE_MYSQL_DSN override", mlog.String("dsn", dsn)) - } - - cfg, err := mysql.ParseDSN(dsn) - if err != nil { - panic("failed to parse dsn " + dsn + ": " + err.Error()) - } - - cfg.DBName = "db" + model.NewId() - - mySQLSettings := databaseSettings("mysql", cfg.FormatDSN()) - - if withReplica { - mySQLSettings.DataSourceReplicas = []string{getEnv("TEST_DATABASE_MYSQL_REPLICA_DSN", defaultMysqlReplicaDSN)} - } - - return mySQLSettings -} - // PostgresSQLSettings returns the database settings to connect to the PostgreSQL unittesting database. // The database name is generated randomly and must be created before use. func PostgreSQLSettings() *model.SqlSettings { @@ -95,20 +50,6 @@ func PostgreSQLSettings() *model.SqlSettings { return databaseSettings("postgres", dsnURL.String()) } -func mySQLRootDSN(dsn string) string { - rootPwd := getEnv("TEST_DATABASE_MYSQL_ROOT_PASSWD", defaultMysqlRootPWD) - cfg, err := mysql.ParseDSN(dsn) - if err != nil { - panic("failed to parse dsn " + dsn + ": " + err.Error()) - } - - cfg.User = "root" - cfg.Passwd = rootPwd - cfg.DBName = "mysql" - - return cfg.FormatDSN() -} - func postgreSQLRootDSN(dsn string) string { dsnURL, err := url.Parse(dsn) if err != nil { @@ -127,15 +68,6 @@ func postgreSQLRootDSN(dsn string) string { return dsnURL.String() } -func mySQLDSNDatabase(dsn string) string { - cfg, err := mysql.ParseDSN(dsn) - if err != nil { - panic("failed to parse dsn " + dsn + ": " + err.Error()) - } - - return cfg.DBName -} - func postgreSQLDSNDatabase(dsn string) string { dsnURL, err := url.Parse(dsn) if err != nil { @@ -176,8 +108,6 @@ func execAsRoot(settings *model.SqlSettings, sqlCommand string) error { driver := *settings.DriverName switch driver { - case model.DatabaseDriverMysql: - dsn = mySQLRootDSN(*settings.DataSource) case model.DatabaseDriverPostgres: dsn = postgreSQLRootDSN(*settings.DataSource) default: @@ -196,29 +126,12 @@ func execAsRoot(settings *model.SqlSettings, sqlCommand string) error { return nil } -func replaceMySQLDatabaseName(dsn, newDBName string) string { - cfg, err := mysql.ParseDSN(dsn) - if err != nil { - panic("failed to parse dsn " + dsn + ": " + err.Error()) - } - cfg.DBName = newDBName - return cfg.FormatDSN() -} - // MakeSqlSettings creates a randomly named database and returns the corresponding sql settings -func MakeSqlSettings(driver string, withReplica bool) *model.SqlSettings { +func MakeSqlSettings(driver string) *model.SqlSettings { var settings *model.SqlSettings var dbName string switch driver { - case model.DatabaseDriverMysql: - settings = MySQLSettings(withReplica) - dbName = mySQLDSNDatabase(*settings.DataSource) - newDSRs := []string{} - for _, dataSource := range settings.DataSourceReplicas { - newDSRs = append(newDSRs, replaceMySQLDatabaseName(dataSource, dbName)) - } - settings.DataSourceReplicas = newDSRs case model.DatabaseDriverPostgres: settings = PostgreSQLSettings() dbName = postgreSQLDSNDatabase(*settings.DataSource) @@ -231,10 +144,6 @@ func MakeSqlSettings(driver string, withReplica bool) *model.SqlSettings { } switch driver { - case model.DatabaseDriverMysql: - if err := execAsRoot(settings, "GRANT ALL PRIVILEGES ON "+dbName+".* TO 'mmuser'"); err != nil { - panic("failed to grant mmuser permission to " + dbName + ":" + err.Error()) - } case model.DatabaseDriverPostgres: if err := execAsRoot(settings, "GRANT ALL PRIVILEGES ON DATABASE \""+dbName+"\" TO mmuser"); err != nil { panic("failed to grant mmuser permission to " + dbName + ":" + err.Error()) @@ -253,8 +162,6 @@ func CleanupSqlSettings(settings *model.SqlSettings) { var dbName string switch driver { - case model.DatabaseDriverMysql: - dbName = mySQLDSNDatabase(*settings.DataSource) case model.DatabaseDriverPostgres: dbName = postgreSQLDSNDatabase(*settings.DataSource) default: diff --git a/server/channels/store/storetest/user_store.go b/server/channels/store/storetest/user_store.go index d941f5339a7..a893ae869a8 100644 --- a/server/channels/store/storetest/user_store.go +++ b/server/channels/store/storetest/user_store.go @@ -6451,11 +6451,6 @@ func testGetUserReport(t *testing.T, rctx request.CTX, ss store.Store, s SqlStor }) t.Run("should return accurate post stats for various date ranges", func(t *testing.T) { - // These stats are disabled for MySQL - if s.DriverName() == model.DatabaseDriverMysql { - return - } - userReport, err := ss.User().GetUserReport(&model.UserReportOptions{ ReportingBaseOptions: model.ReportingBaseOptions{ SortColumn: "Username", diff --git a/server/channels/store/storetest/utils.go b/server/channels/store/storetest/utils.go index 5f437415b78..e276c0ee09b 100644 --- a/server/channels/store/storetest/utils.go +++ b/server/channels/store/storetest/utils.go @@ -4,8 +4,6 @@ package storetest import ( - "fmt" - "github.com/mattermost/mattermost/server/public/model" ) @@ -22,15 +20,7 @@ func NewTestID() string { return string(newID) } -// Adds backtiks to the column name for MySQL, this is required if -// the column name is a reserved keyword. -// -// `ColumnName` - MySQL -// ColumnName - Postgres +// Returns the column name for PostgreSQL. func quoteColumnName(driver string, columnName string) string { - if driver == model.DatabaseDriverMysql { - return fmt.Sprintf("`%s`", columnName) - } - return columnName } diff --git a/server/channels/testlib/helper.go b/server/channels/testlib/helper.go index 1ef584c7e35..98a20dfebf9 100644 --- a/server/channels/testlib/helper.go +++ b/server/channels/testlib/helper.go @@ -42,14 +42,13 @@ type MainHelper struct { type HelperOptions struct { EnableStore bool EnableResources bool - WithReadReplica bool RunParallel bool Parallelism int } func NewMainHelper() *MainHelper { // Ignore any globally defined datasource if a test dsn defined - if os.Getenv("TEST_DATABASE_MYSQL_DSN") != "" || os.Getenv("TEST_DATABASE_POSTGRESQL_DSN") != "" { + if os.Getenv("TEST_DATABASE_POSTGRESQL_DSN") != "" { os.Unsetenv("MM_SQLSETTINGS_DATASOURCE") } @@ -61,7 +60,7 @@ func NewMainHelper() *MainHelper { func NewMainHelperWithOptions(options *HelperOptions) *MainHelper { // Ignore any globally defined datasource if a test dsn defined - if os.Getenv("TEST_DATABASE_MYSQL_DSN") != "" || os.Getenv("TEST_DATABASE_POSTGRESQL_DSN") != "" { + if os.Getenv("TEST_DATABASE_POSTGRESQL_DSN") != "" { os.Unsetenv("MM_SQLSETTINGS_DATASOURCE") } @@ -92,7 +91,7 @@ func NewMainHelperWithOptions(options *HelperOptions) *MainHelper { mainHelper.Options = *options if options.EnableStore && !testing.Short() { - mainHelper.setupStore(options.WithReadReplica) + mainHelper.setupStore() } if options.EnableResources { @@ -177,13 +176,13 @@ func (h *MainHelper) GetNewStores(tb testing.TB) (store.Store, *sqlstore.SqlStor return store, sqlStore, settings, searchEngine } -func (h *MainHelper) setupStore(withReadReplica bool) { +func (h *MainHelper) setupStore() { driverName := os.Getenv("MM_SQLSETTINGS_DRIVERNAME") if driverName == "" { driverName = model.DatabaseDriverPostgres } - h.Settings = storetest.MakeSqlSettings(driverName, withReadReplica) + h.Settings = storetest.MakeSqlSettings(driverName) h.replicas = h.Settings.DataSourceReplicas config := &model.Config{} @@ -265,17 +264,13 @@ func preloadMigrations(driverName string, sqlStore *sqlstore.SqlStore) { if err != nil { panic(fmt.Errorf("cannot read file: %v", err)) } - case model.DatabaseDriverMysql: - finalPath := filepath.Join(server.GetPackagePath(), "channels", "testlib", "testdata", "mysql_migration_warmup.sql") - buf, err = os.ReadFile(finalPath) - if err != nil { - panic(fmt.Errorf("cannot read file: %v", err)) - } + default: + panic(fmt.Errorf("unsupported database driver: %s", driverName)) } handle := sqlStore.GetMaster() _, err = handle.Exec(string(buf)) if err != nil { - panic(errors.Wrap(err, "Error preloading migrations. Check if you have &multiStatements=true in your DSN if you are using MySQL. Or perhaps the schema changed? If yes, then update the warmup files accordingly")) + panic(errors.Wrap(err, "Error preloading migrations. Perhaps the schema changed? If yes, then update the warmup files accordingly")) } } @@ -347,39 +342,6 @@ func (h *MainHelper) GetSearchEngine() *searchengine.Broker { return h.SearchEngine } -func (h *MainHelper) SetReplicationLagForTesting(seconds int) error { - if dn := h.SQLStore.DriverName(); dn != model.DatabaseDriverMysql { - return fmt.Errorf("method not implemented for %q database driver, only %q is supported", dn, model.DatabaseDriverMysql) - } - - err := h.execOnEachReplica("STOP SLAVE SQL_THREAD FOR CHANNEL ''") - if err != nil { - return err - } - - err = h.execOnEachReplica(fmt.Sprintf("CHANGE MASTER TO MASTER_DELAY = %d", seconds)) - if err != nil { - return err - } - - err = h.execOnEachReplica("START SLAVE SQL_THREAD FOR CHANNEL ''") - if err != nil { - return err - } - - return nil -} - -func (h *MainHelper) execOnEachReplica(query string, args ...any) error { - for _, replica := range h.SQLStore.ReplicaXs { - _, err := replica.Load().Exec(query, args...) - if err != nil { - return err - } - } - return nil -} - func (h *MainHelper) Parallel(t *testing.T) { if h.Options.RunParallel { t.Parallel() diff --git a/server/cmd/mmctl/commands/config_e2e_test.go b/server/cmd/mmctl/commands/config_e2e_test.go index 044528ef001..565b336e0af 100644 --- a/server/cmd/mmctl/commands/config_e2e_test.go +++ b/server/cmd/mmctl/commands/config_e2e_test.go @@ -134,20 +134,20 @@ func (s *MmctlE2ETestSuite) TestConfigSetCmd() { s.RunForSystemAdminAndLocal("Set config value for a given key", func(c client.Client) { printer.Clean() - args := []string{"SqlSettings.DriverName", "mysql"} + args := []string{"SqlSettings.DriverName", "postgres"} err := configSetCmdF(c, &cobra.Command{}, args) s.Require().Nil(err) s.Require().Len(printer.GetErrorLines(), 0) s.Require().Len(printer.GetLines(), 1) config, ok := printer.GetLines()[0].(*model.Config) s.Require().True(ok) - s.Require().Equal("mysql", *(config.SqlSettings.DriverName)) + s.Require().Equal("postgres", *(config.SqlSettings.DriverName)) }) s.RunForSystemAdminAndLocal("Get error if the key doesn't exist", func(c client.Client) { printer.Clean() - args := []string{"SqlSettings.WrongKey", "mysql"} + args := []string{"SqlSettings.WrongKey", "postgres"} err := configSetCmdF(c, &cobra.Command{}, args) s.Require().NotNil(err) s.Require().Len(printer.GetLines(), 0) @@ -157,7 +157,7 @@ func (s *MmctlE2ETestSuite) TestConfigSetCmd() { s.Run("Set config value for a given key without permissions", func() { printer.Clean() - args := []string{"SqlSettings.DriverName", "mysql"} + args := []string{"SqlSettings.DriverName", "postgres"} err := configSetCmdF(s.th.Client, &cobra.Command{}, args) s.Require().NotNil(err) s.Require().Len(printer.GetLines(), 0) diff --git a/server/config.mk b/server/config.mk index 30d8f21fab4..6472ff8bd18 100644 --- a/server/config.mk +++ b/server/config.mk @@ -4,14 +4,14 @@ # Enable services to be run in docker. # -# Possible options: mysql, postgres, minio, inbucket, openldap, dejavu, +# Possible options: postgres, minio, inbucket, openldap, dejavu, # keycloak, elasticsearch, opensearch, redis, prometheus, # grafana, loki and promtail. # # Must be space separated names. # -# Example: mysql postgres elasticsearch -ENABLED_DOCKER_SERVICES ?= mysql postgres inbucket redis +# Example: postgres elasticsearch +ENABLED_DOCKER_SERVICES ?= postgres inbucket redis # Disable entirely the use of docker MM_NO_DOCKER ?= false diff --git a/server/config/database.go b/server/config/database.go index 187cbe8bcec..b331ae725a2 100644 --- a/server/config/database.go +++ b/server/config/database.go @@ -15,13 +15,9 @@ import ( "path/filepath" "strings" - sqlUtils "github.com/mattermost/mattermost/server/public/utils/sql" - "github.com/jmoiron/sqlx" "github.com/pkg/errors" - // Load the MySQL driver - _ "github.com/go-sql-driver/mysql" // Load the Postgres driver _ "github.com/lib/pq" @@ -30,7 +26,6 @@ import ( "github.com/mattermost/mattermost/server/public/model" "github.com/mattermost/mattermost/server/public/shared/mlog" "github.com/mattermost/morph/drivers" - ms "github.com/mattermost/morph/drivers/mysql" ps "github.com/mattermost/morph/drivers/postgres" mbindata "github.com/mattermost/morph/sources/embedded" ) @@ -38,12 +33,6 @@ import ( //go:embed migrations var assets embed.FS -// MaxWriteLength defines the maximum length accepted for write to the Configurations or -// ConfigurationFiles table. -// -// It is imposed by MySQL's default max_allowed_packet value of 4Mb. -const MaxWriteLength = 4 * 1024 * 1024 - // We use the something different from the default migration table name of morph const migrationsTableName = "db_config_migrations" @@ -120,26 +109,6 @@ func (ds *DatabaseStore) initializeConfigurationsTable() error { var driver drivers.Driver switch ds.driverName { - case model.DatabaseDriverMysql: - dataSource, rErr := sqlUtils.ResetReadTimeout(ds.dataSourceName) - if rErr != nil { - return fmt.Errorf("failed to reset read timeout from datasource: %w", rErr) - } - - dataSource, err = sqlUtils.AppendMultipleStatementsFlag(dataSource) - if err != nil { - return err - } - - var db *sqlx.DB - db, err = sqlx.Open(ds.driverName, dataSource) - if err != nil { - return errors.Wrapf(err, "failed to connect to %s database", ds.driverName) - } - - driver, err = ms.WithInstance(db.DB) - - defer db.Close() case model.DatabaseDriverPostgres: driver, err = ps.WithInstance(ds.db.DB) default: @@ -184,10 +153,6 @@ func parseDSN(dsn string) (string, string, error) { scheme := s[0] switch scheme { - case "mysql": - // Strip off the mysql:// for the dsn with which to connect. - dsn = s[1] - case "postgres", "postgresql": // No changes required @@ -203,15 +168,6 @@ func (ds *DatabaseStore) Set(newCfg *model.Config) error { return ds.persist(newCfg) } -// maxLength identifies the maximum length of a configuration or configuration file -func (ds *DatabaseStore) checkLength(length int) error { - if ds.db.DriverName() == "mysql" && length > MaxWriteLength { - return errors.Errorf("value is too long: %d > %d bytes", length, MaxWriteLength) - } - - return nil -} - // persist writes the configuration to the configured database. func (ds *DatabaseStore) persist(cfg *model.Config) error { b, err := marshalConfig(cfg) @@ -220,25 +176,11 @@ func (ds *DatabaseStore) persist(cfg *model.Config) error { } value := string(b) - err = ds.checkLength(len(value)) - if err != nil { - return errors.Wrap(err, "marshalled configuration failed length check") - } - sum := sha256.Sum256(b) // Skip the persist altogether if we're effectively writing the same configuration. var oldValue string - var row *sql.Row - if ds.driverName == model.DatabaseDriverMysql { - // We use a sub-query to get the Id first because selecting the Id column using - // active uses the index, but selecting SHA column using active does not use the index. - // The sub-query uses the active index, and then the top-level query uses the primary key. - // This takes 2 queries, but it is actually faster than one slow query for MySQL - row = ds.db.QueryRow("SELECT SHA FROM Configurations WHERE Id = (select Id from Configurations Where Active)") - } else { - row = ds.db.QueryRow("SELECT SHA FROM Configurations WHERE Active") - } + row := ds.db.QueryRow("SELECT SHA FROM Configurations WHERE Active") if err = row.Scan(&oldValue); err != nil && err != sql.ErrNoRows { return errors.Wrap(err, "failed to query active configuration") } @@ -265,24 +207,8 @@ func (ds *DatabaseStore) persist(cfg *model.Config) error { } }() - var oldId string - if ds.driverName == model.DatabaseDriverMysql { - // the query doesn't use active index if we query for value (mysql, no surprise) - // we select Id column which triggers using index hence we do quicker reads - // that's the reason we select id first then query against id to get the value. - row = tx.QueryRow("SELECT Id FROM Configurations WHERE Active") - if err = row.Scan(&oldId); err != nil && err != sql.ErrNoRows { - return errors.Wrap(err, "failed to query active configuration") - } - if oldId != "" { - if _, err := tx.NamedExec("UPDATE Configurations SET Active = NULL WHERE Id = :id", map[string]any{"id": oldId}); err != nil { - return errors.Wrap(err, "failed to deactivate current configuration") - } - } - } else { - if _, err := tx.Exec("UPDATE Configurations SET Active = NULL WHERE Active"); err != nil { - return errors.Wrap(err, "failed to deactivate current configuration") - } + if _, err := tx.Exec("UPDATE Configurations SET Active = NULL WHERE Active"); err != nil { + return errors.Wrap(err, "failed to deactivate current configuration") } params := map[string]any{ @@ -344,10 +270,6 @@ func (ds *DatabaseStore) GetFile(name string) ([]byte, error) { // SetFile sets or replaces the contents of a configuration file. func (ds *DatabaseStore) SetFile(name string, data []byte) error { - err := ds.checkLength(len(data)) - if err != nil { - return errors.Wrap(err, "file data failed length check") - } params := map[string]any{ "name": name, "data": data, diff --git a/server/config/database_test.go b/server/config/database_test.go index 3ce60861600..f891882bf95 100644 --- a/server/config/database_test.go +++ b/server/config/database_test.go @@ -4,7 +4,6 @@ package config import ( - "bytes" "encoding/json" "errors" "fmt" @@ -20,9 +19,6 @@ import ( ) func getDsn(driver string, source string) string { - if driver == model.DatabaseDriverMysql { - return driver + "://" + source - } return source } @@ -560,26 +556,6 @@ func TestDatabaseStoreSet(t *testing.T) { assert.Equal(t, "", *ds.Get().ServiceSettings.SiteURL) }) - t.Run("persist failed: too long", func(t *testing.T) { - if *mainHelper.Settings.DriverName == "postgres" { - t.Skip("No limit for postgres") - } - _, tearDown := setupConfigDatabase(t, emptyConfig, nil) - defer tearDown() - - ds, err := newTestDatabaseStore(nil) - require.NoError(t, err) - defer ds.Close() - - longSiteURL := fmt.Sprintf("http://%s", strings.Repeat("a", MaxWriteLength)) - newCfg := emptyConfig.Clone() - newCfg.ServiceSettings.SiteURL = model.NewPointer(longSiteURL) - - _, _, err = ds.Set(newCfg) - require.Error(t, err) - assert.True(t, strings.HasPrefix(err.Error(), "failed to persist: marshalled configuration failed length check: value is too long"), "unexpected error: "+err.Error()) - }) - t.Run("listeners notified", func(t *testing.T) { activeID, tearDown := setupConfigDatabase(t, emptyConfig, nil) defer tearDown() @@ -948,28 +924,6 @@ func TestDatabaseSetFile(t *testing.T) { require.NoError(t, err) require.Equal(t, []byte("overwritten file"), data) }) - - t.Run("max length", func(t *testing.T) { - if *mainHelper.Settings.DriverName == "postgres" { - t.Skip("No limit for postgres") - } - longFile := bytes.Repeat([]byte("a"), MaxWriteLength) - - err := ds.SetFile("toolong", longFile) - require.NoError(t, err) - }) - - t.Run("too long", func(t *testing.T) { - if *mainHelper.Settings.DriverName == "postgres" { - t.Skip("No limit for postgres") - } - longFile := bytes.Repeat([]byte("a"), MaxWriteLength+1) - - err := ds.SetFile("toolong", longFile) - if assert.Error(t, err) { - assert.True(t, strings.HasPrefix(err.Error(), "file data failed length check: value is too long")) - } - }) } func TestDatabaseHasFile(t *testing.T) { diff --git a/server/config/main_test.go b/server/config/main_test.go index d8d1d536e02..0b2490feff5 100644 --- a/server/config/main_test.go +++ b/server/config/main_test.go @@ -7,7 +7,6 @@ import ( "fmt" "testing" - "github.com/go-sql-driver/mysql" "github.com/lib/pq" "github.com/stretchr/testify/require" @@ -35,18 +34,6 @@ func truncateTable(t *testing.T, table string) { sqlStore := mainHelper.GetSQLStore() switch *sqlSetting.DriverName { - case model.DatabaseDriverMysql: - _, err := sqlStore.GetMaster().Exec(fmt.Sprintf("TRUNCATE TABLE %s", table)) - if err != nil { - if driverErr, ok := err.(*mysql.MySQLError); ok { - // Ignore if the Configurations table does not exist. - if driverErr.Number == 1146 { - return - } - } - } - require.NoError(t, err) - case model.DatabaseDriverPostgres: _, err := sqlStore.GetMaster().Exec(fmt.Sprintf("TRUNCATE TABLE %s", table)) if err != nil { diff --git a/server/docker-compose.makefile.yml b/server/docker-compose.makefile.yml index 5084117beae..b0f9acd2729 100644 --- a/server/docker-compose.makefile.yml +++ b/server/docker-compose.makefile.yml @@ -1,20 +1,4 @@ services: - mysql: - restart: 'no' - container_name: mattermost-mysql - ports: - - "3306:3306" - extends: - file: build/docker-compose.common.yml - service: mysql - mysql-read-replica: - restart: 'no' - container_name: mattermost-mysql-read-replica - ports: - - "3307:3306" - extends: - file: build/docker-compose.common.yml - service: mysql-read-replica postgres: restart: 'no' container_name: mattermost-postgres diff --git a/server/docker-compose.yaml b/server/docker-compose.yaml index 9845ec12327..4a53774d3df 100644 --- a/server/docker-compose.yaml +++ b/server/docker-compose.yaml @@ -1,18 +1,4 @@ services: - mysql: - container_name: mattermost-mysql - ports: - - "3306:3306" - extends: - file: build/docker-compose.common.yml - service: mysql - mysql-read-replica: - container_name: mattermost-mysql-read-replica - ports: - - "3307:3306" - extends: - file: build/docker-compose.common.yml - service: mysql-read-replica postgres: container_name: mattermost-postgres ports: @@ -114,7 +100,6 @@ services: networks: - mm-test depends_on: - - mysql - postgres - minio - inbucket @@ -125,7 +110,7 @@ services: - grafana - loki - promtail - command: postgres:5432 mysql:3306 minio:9000 inbucket:9001 openldap:389 elasticsearch:9200 opensearch:9201 prometheus:9090 grafana:3000 loki:3100 promtail:3180 + command: postgres:5432 minio:9000 inbucket:9001 openldap:389 elasticsearch:9200 opensearch:9201 prometheus:9090 grafana:3000 loki:3100 promtail:3180 leader: build: diff --git a/server/enterprise/metrics/metrics.go b/server/enterprise/metrics/metrics.go index 8e97ba04216..445fa604282 100644 --- a/server/enterprise/metrics/metrics.go +++ b/server/enterprise/metrics/metrics.go @@ -11,8 +11,6 @@ import ( "strconv" "strings" - "github.com/go-sql-driver/mysql" - "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/collectors" @@ -2222,14 +2220,6 @@ func extractHost(driver, connectionString string) (string, error) { return "", errors.Wrap(err, "failed to parse postgres connection string") } return parsedURL.Host, nil - case model.DatabaseDriverMysql: - config, err := mysql.ParseDSN(connectionString) - if err != nil { - return "", errors.Wrap(err, "failed to parse mysql connection string") - } - host := strings.Split(config.Addr, ":")[0] - - return host, nil } return "", errors.Errorf("unsupported database driver: %q", driver) } diff --git a/server/enterprise/metrics/metrics_test.go b/server/enterprise/metrics/metrics_test.go index 4e2f79d344d..2811ddffb33 100644 --- a/server/enterprise/metrics/metrics_test.go +++ b/server/enterprise/metrics/metrics_test.go @@ -250,18 +250,6 @@ func TestExtractDBCluster(t *testing.T) { connectionStr: "postgres://rds-cluster-multitenant-1234-postgres.cluster-abcd.us-east-1.rds.amazonaws.com:5432/cloud?connect_timeout=10", expectedClusterName: "rds-cluster-multitenant-1234-postgres", }, - { - description: "mysql full", - driver: "mysql", - connectionStr: "mysql://user1234:password1234@tcp(rds-cluster-multitenant-1234-mysql.cluster-abcd.us-east-1.rds.amazonaws.com:3306)/cloud?charset=utf8mb4%2Cutf8&readTimeout=30s&writeTimeout=30s&tls=skip-verify", - expectedClusterName: "rds-cluster-multitenant-1234-mysql", - }, - { - description: "mysql no credentials", - driver: "mysql", - connectionStr: "mysql://tcp(rds-cluster-multitenant-1234-mysql.cluster-abcd.us-east-1.rds.amazonaws.com:3306)/cloud?charset=utf8mb4%2Cutf8&readTimeout=30s&writeTimeout=30s&tls=skip-verify", - expectedClusterName: "rds-cluster-multitenant-1234-mysql", - }, } for _, tc := range testCases { diff --git a/server/go.mod b/server/go.mod index bfe25e9731e..5270cbd38cc 100644 --- a/server/go.mod +++ b/server/go.mod @@ -18,7 +18,6 @@ require ( github.com/fatih/color v1.18.0 github.com/fsnotify/fsnotify v1.9.0 github.com/getsentry/sentry-go v0.32.0 - github.com/go-sql-driver/mysql v1.9.2 github.com/golang-jwt/jwt/v5 v5.2.2 github.com/golang-migrate/migrate/v4 v4.18.3 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 @@ -131,6 +130,7 @@ require ( github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-resty/resty/v2 v2.16.5 // indirect + github.com/go-sql-driver/mysql v1.9.2 // indirect github.com/go-viper/mapstructure/v2 v2.2.1 // indirect github.com/goccy/go-json v0.10.5 // indirect github.com/golang/protobuf v1.5.4 // indirect diff --git a/server/i18n/en.json b/server/i18n/en.json index 12167a96280..f5b499c87af 100644 --- a/server/i18n/en.json +++ b/server/i18n/en.json @@ -2336,10 +2336,6 @@ "id": "api.license.add_license.invalid_count.app_error", "translation": "Unable to count total unique users." }, - { - "id": "api.license.add_license.mysql.app_error", - "translation": "This license does not support MySQL." - }, { "id": "api.license.add_license.no_file.app_error", "translation": "No file under 'license' in request." @@ -2392,10 +2388,6 @@ "id": "api.license.request-trial.can-start-trial.not-allowed", "translation": "Failed to apply new trial license as your workspace has already applied a trial license. If you would like to extend your trial period please [contact our sales team](https://mattermost.com/contact-us/)." }, - { - "id": "api.license.request-trial.mysql.app_error", - "translation": "Trial licenses are not supported for MySQL databases. Please use PostgreSQL to access trial features." - }, { "id": "api.license.request_trial_license.app_error", "translation": "Unable to get a trial license, please try again or contact with support@mattermost.com." @@ -9718,7 +9710,7 @@ }, { "id": "model.config.is_valid.sql_driver.app_error", - "translation": "Invalid driver name for SQL settings. Must be 'mysql' or 'postgres'." + "translation": "Invalid driver name for SQL settings. Must be 'postgres'." }, { "id": "model.config.is_valid.sql_idle.app_error", diff --git a/server/platform/services/searchengine/bleveengine/bleve_test.go b/server/platform/services/searchengine/bleveengine/bleve_test.go index 03dce6e6919..c66f549d732 100644 --- a/server/platform/services/searchengine/bleveengine/bleve_test.go +++ b/server/platform/services/searchengine/bleveengine/bleve_test.go @@ -52,7 +52,7 @@ func (s *BleveEngineTestSuite) setupStore() { if driverName == "" { driverName = model.DatabaseDriverPostgres } - s.SQLSettings = storetest.MakeSqlSettings(driverName, false) + s.SQLSettings = storetest.MakeSqlSettings(driverName) var err error s.SQLStore, err = sqlstore.New(*s.SQLSettings, s.Context.Logger(), nil, sqlstore.DisableMorphLogging()) diff --git a/server/public/go.mod b/server/public/go.mod index 6129633aa4a..394d55456e2 100644 --- a/server/public/go.mod +++ b/server/public/go.mod @@ -6,7 +6,6 @@ require ( github.com/blang/semver/v4 v4.0.0 github.com/dyatlov/go-opengraph/opengraph v0.0.0-20220524092352-606d7b1e5f8a github.com/francoispqt/gojay v1.2.13 - github.com/go-sql-driver/mysql v1.9.2 github.com/golang/mock v1.6.0 github.com/gorilla/mux v1.8.1 github.com/gorilla/websocket v1.5.3 @@ -36,7 +35,6 @@ require ( ) require ( - filippo.io/edwards25519 v1.1.0 // indirect github.com/beevik/etree v1.5.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/fatih/color v1.18.0 // indirect diff --git a/server/public/go.sum b/server/public/go.sum index 3964042eaf6..5304cc8430c 100644 --- a/server/public/go.sum +++ b/server/public/go.sum @@ -6,8 +6,6 @@ dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= -filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= @@ -49,8 +47,6 @@ github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRjiHuU= -github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= diff --git a/server/public/model/config.go b/server/public/model/config.go index 3c7876cfbbe..9757c3869a4 100644 --- a/server/public/model/config.go +++ b/server/public/model/config.go @@ -20,7 +20,6 @@ import ( "strings" "time" - "github.com/go-sql-driver/mysql" "github.com/mattermost/ldap" "github.com/pkg/errors" @@ -37,7 +36,6 @@ const ( ImageDriverLocal = "local" ImageDriverS3 = "amazons3" - DatabaseDriverMysql = "mysql" DatabaseDriverPostgres = "postgres" SearchengineElasticsearch = "elasticsearch" @@ -4199,7 +4197,7 @@ func (s *SqlSettings) isValid() *AppError { return NewAppError("Config.IsValid", "model.config.is_valid.encrypt_sql.app_error", nil, "", http.StatusBadRequest) } - if !(*s.DriverName == DatabaseDriverMysql || *s.DriverName == DatabaseDriverPostgres) { + if *s.DriverName != DatabaseDriverPostgres { return NewAppError("Config.IsValid", "model.config.is_valid.sql_driver.app_error", nil, "", http.StatusBadRequest) } @@ -4957,14 +4955,6 @@ func SanitizeDataSource(driverName, dataSource string) (string, error) { return "", err } return out, nil - case DatabaseDriverMysql: - cfg, err := mysql.ParseDSN(dataSource) - if err != nil { - return "", err - } - cfg.User = SanitizedPassword - cfg.Passwd = SanitizedPassword - return cfg.FormatDSN(), nil default: return "", errors.New("invalid drivername. Not postgres or mysql.") } diff --git a/server/public/model/config_test.go b/server/public/model/config_test.go index d703b4b63a1..1498aed285c 100644 --- a/server/public/model/config_test.go +++ b/server/public/model/config_test.go @@ -1732,24 +1732,6 @@ func TestSanitizeDataSource(t *testing.T) { assert.Equal(t, tc.Sanitized, out) } }) - - t.Run(DatabaseDriverMysql, func(t *testing.T) { - testCases := []struct { - Original string - Sanitized string - }{ - { - "mmuser:mostest@tcp(localhost:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s", - SanitizedPassword + ":" + SanitizedPassword + "@tcp(localhost:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s", - }, - } - driver := DatabaseDriverMysql - for _, tc := range testCases { - out, err := SanitizeDataSource(driver, tc.Original) - require.NoError(t, err) - assert.Equal(t, tc.Sanitized, out) - } - }) } func TestConfigFilteredByTag(t *testing.T) { diff --git a/server/public/plugin/client_rpc.go b/server/public/plugin/client_rpc.go index bba1e3265a0..2e288d89ddf 100644 --- a/server/public/plugin/client_rpc.go +++ b/server/public/plugin/client_rpc.go @@ -21,7 +21,6 @@ import ( "reflect" "sync" - "github.com/go-sql-driver/mysql" "github.com/hashicorp/go-plugin" "github.com/lib/pq" @@ -105,10 +104,6 @@ func encodableError(err error) error { return err } - if _, ok := err.(*mysql.MySQLError); ok { - return err - } - ret := &ErrorString{ Err: err.Error(), } @@ -162,7 +157,6 @@ func init() { gob.Register(map[string]any{}) gob.Register(&model.AppError{}) gob.Register(&pq.Error{}) - gob.Register(&mysql.MySQLError{}) gob.Register(&ErrorString{}) gob.Register(&model.AutocompleteDynamicListArg{}) gob.Register(&model.AutocompleteStaticListArg{}) diff --git a/server/public/pluginapi/store.go b/server/public/pluginapi/store.go index 362bb04e851..59e5403e03a 100644 --- a/server/public/pluginapi/store.go +++ b/server/public/pluginapi/store.go @@ -5,7 +5,6 @@ import ( "sync" // import sql drivers - _ "github.com/go-sql-driver/mysql" _ "github.com/lib/pq" "github.com/mattermost/mattermost/server/public/plugin" diff --git a/server/public/utils/sql/sql_utils.go b/server/public/utils/sql/sql_utils.go index c1a24dd6853..bb847517f81 100644 --- a/server/public/utils/sql/sql_utils.go +++ b/server/public/utils/sql/sql_utils.go @@ -9,7 +9,6 @@ import ( "strings" "time" - "github.com/go-sql-driver/mysql" "github.com/mattermost/mattermost/server/public/model" "github.com/mattermost/mattermost/server/public/shared/mlog" "github.com/pkg/errors" @@ -22,31 +21,6 @@ const ( replicaLagPrefix = "replica-lag" ) -// ResetReadTimeout removes the timeout constraint from the MySQL dsn. -func ResetReadTimeout(dataSource string) (string, error) { - config, err := mysql.ParseDSN(dataSource) - if err != nil { - return "", err - } - config.ReadTimeout = 0 - return config.FormatDSN(), nil -} - -// AppendMultipleStatementsFlag attached dsn parameters to MySQL dsn in order to make migrations work. -func AppendMultipleStatementsFlag(dataSource string) (string, error) { - config, err := mysql.ParseDSN(dataSource) - if err != nil { - return "", err - } - - if config.Params == nil { - config.Params = map[string]string{} - } - - config.Params["multiStatements"] = "true" - return config.FormatDSN(), nil -} - // SetupConnection sets up the connection to the database and pings it to make sure it's alive. // It also applies any database configuration settings that are required. func SetupConnection(logger mlog.LoggerIFace, connType string, dataSource string, settings *model.SqlSettings, attempts int) (*dbsql.DB, error) { diff --git a/server/public/utils/sql/sql_utils_test.go b/server/public/utils/sql/sql_utils_test.go deleted file mode 100644 index e5f28722234..00000000000 --- a/server/public/utils/sql/sql_utils_test.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. -// See LICENSE.txt for license information. - -package sql - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestAppendMultipleStatementsFlag(t *testing.T) { - testCases := []struct { - Scenario string - DSN string - ExpectedDSN string - }{ - { - "Should append multiStatements param to the DSN path with existing params", - "user:rand?&ompasswith@character@unix(/var/run/mysqld/mysqld.sock)/mattermost?writeTimeout=30s", - "user:rand?&ompasswith@character@unix(/var/run/mysqld/mysqld.sock)/mattermost?writeTimeout=30s&multiStatements=true", - }, - { - "Should append multiStatements param to the DSN path with no existing params", - "user:rand?&ompasswith@character@unix(/var/run/mysqld/mysqld.sock)/mattermost", - "user:rand?&ompasswith@character@unix(/var/run/mysqld/mysqld.sock)/mattermost?multiStatements=true", - }, - } - - for _, tc := range testCases { - t.Run(tc.Scenario, func(t *testing.T) { - res, err := AppendMultipleStatementsFlag(tc.DSN) - require.NoError(t, err) - assert.Equal(t, tc.ExpectedDSN, res) - }) - } -} - -func TestResetReadTimeout(t *testing.T) { - testCases := []struct { - Scenario string - DSN string - ExpectedDSN string - }{ - { - "Should re move read timeout param from the DSN", - "user:rand?&ompasswith@character@unix(/var/run/mysqld/mysqld.sock)/mattermost?readTimeout=30s", - "user:rand?&ompasswith@character@unix(/var/run/mysqld/mysqld.sock)/mattermost", - }, - { - "Should change nothing as there is no read timeout param specified", - "user:rand?&ompasswith@character@unix(/var/run/mysqld/mysqld.sock)/mattermost", - "user:rand?&ompasswith@character@unix(/var/run/mysqld/mysqld.sock)/mattermost", - }, - } - - for _, tc := range testCases { - t.Run(tc.Scenario, func(t *testing.T) { - res, err := ResetReadTimeout(tc.DSN) - require.NoError(t, err) - assert.Equal(t, tc.ExpectedDSN, res) - }) - } -} diff --git a/webapp/channels/src/components/admin_console/license_settings/index.ts b/webapp/channels/src/components/admin_console/license_settings/index.ts index f80dbda7134..8a080fde603 100644 --- a/webapp/channels/src/components/admin_console/license_settings/index.ts +++ b/webapp/channels/src/components/admin_console/license_settings/index.ts @@ -26,7 +26,6 @@ function mapStateToProps(state: GlobalState) { totalUsers: selectFilteredUserStats(state)?.total_users_count || 0, upgradedFromTE: config.UpgradedFromTE === 'true', prevTrialLicense: state.entities.admin.prevTrialLicense, - isMySql: config.SQLDriverName === 'mysql', }; } diff --git a/webapp/channels/src/components/admin_console/license_settings/license_settings.test.tsx b/webapp/channels/src/components/admin_console/license_settings/license_settings.test.tsx index 1998df9d412..e7717ebe6c2 100644 --- a/webapp/channels/src/components/admin_console/license_settings/license_settings.test.tsx +++ b/webapp/channels/src/components/admin_console/license_settings/license_settings.test.tsx @@ -43,7 +43,6 @@ describe('components/admin_console/license_settings/LicenseSettings', () => { enterpriseReady: true, totalUsers: 10, environmentConfig: {}, - isMySql: false, actions: { getLicenseConfig: jest.fn(), uploadLicense: jest.fn(), diff --git a/webapp/channels/src/components/admin_console/license_settings/license_settings.tsx b/webapp/channels/src/components/admin_console/license_settings/license_settings.tsx index 2b6236a0846..f4662f073a6 100644 --- a/webapp/channels/src/components/admin_console/license_settings/license_settings.tsx +++ b/webapp/channels/src/components/admin_console/license_settings/license_settings.tsx @@ -46,7 +46,6 @@ type Props = { isDisabled: boolean; prevTrialLicense: ClientLicense; environmentConfig: Partial; - isMySql: boolean; actions: { getLicenseConfig: () => void; uploadLicense: (file: File) => Promise; @@ -282,7 +281,7 @@ export default class LicenseSettings extends React.PureComponent { ); render() { - const {license, upgradedFromTE, isDisabled, isMySql} = this.props; + const {license, upgradedFromTE, isDisabled} = this.props; let leftPanel = null; let rightPanel = null; @@ -365,7 +364,6 @@ export default class LicenseSettings extends React.PureComponent { /> {!this.state.clickNormalUpgradeBtn && license.IsLicensed !== 'true' && this.props.prevTrialLicense?.IsLicensed !== 'true' && - !isMySql && ([]); const [userCount, setUserCount] = useState(); const [loadingState, setLoadingState] = useState(LoadingStates.Loading); - const [showMySqlBanner, setShowMySqlBanner] = useState(props.isMySql && !props.hideMySqlNotification); // Effect to get the total user count useEffect(() => { @@ -151,16 +147,6 @@ function SystemUsers(props: Props) { props.tablePropertyDateRange, ]); - function handleDismissMySqlNotice() { - setShowMySqlBanner(false); - props.savePreferences(props.currentUser.id, [{ - category: Preferences.CATEGORY_REPORTING, - name: Preferences.HIDE_MYSQL_STATS_NOTIFICATION, - user_id: props.currentUser.id, - value: 'true', - }]); - } - // Handlers for table actions function handleRowClick(userId: UserReport['id']) { @@ -363,7 +349,7 @@ function SystemUsers(props: Props) { defaultMessage: 'Last post', }), cell: (info: CellContext) => , - enableHiding: !props.isMySql, + enableHiding: true, enablePinning: false, enableSorting: false, }, @@ -378,7 +364,7 @@ function SystemUsers(props: Props) { meta: { isNumeric: true, }, - enableHiding: !props.isMySql, + enableHiding: true, enablePinning: false, enableSorting: false, }, @@ -393,7 +379,7 @@ function SystemUsers(props: Props) { meta: { isNumeric: true, }, - enableHiding: !props.isMySql, + enableHiding: true, enablePinning: false, enableSorting: false, }, @@ -441,11 +427,6 @@ function SystemUsers(props: Props) { const columnVisibility = { ...props.tablePropertyColumnVisibility, - ...(props.isMySql ? { - [ColumnNames.lastPostDate]: false, - [ColumnNames.daysActive]: false, - [ColumnNames.totalPosts]: false, - } : {}), }; const table = useReactTable({ @@ -498,49 +479,6 @@ function SystemUsers(props: Props) {
- {showMySqlBanner && - - } - message={ - <> - -
- - -
- - } - onDismiss={handleDismissMySqlNotice} - /> - }
diff --git a/webapp/channels/src/components/admin_console/system_users/system_users_column_toggler_menu/index.tsx b/webapp/channels/src/components/admin_console/system_users/system_users_column_toggler_menu/index.tsx index ba541bc9c78..89248e4cbc1 100644 --- a/webapp/channels/src/components/admin_console/system_users/system_users_column_toggler_menu/index.tsx +++ b/webapp/channels/src/components/admin_console/system_users/system_users_column_toggler_menu/index.tsx @@ -9,15 +9,12 @@ import type {UserReport} from '@mattermost/types/reports'; import * as Menu from 'components/menu'; import Input from 'components/widgets/inputs/input/input'; -import Tag from 'components/widgets/tag/tag'; -import WithTooltip from 'components/with_tooltip'; import {ColumnNames} from '../constants'; import './system_users_column_toggler.scss'; interface Props { - isMySql: boolean; allColumns: Array>; visibleColumnsLength: number; } @@ -150,28 +147,6 @@ export function SystemUsersColumnTogglerMenu(props: Props) { ); } - const postStatsColumns: string[] = [ColumnNames.lastPostDate, ColumnNames.daysActive, ColumnNames.totalPosts]; - if (props.isMySql && postStatsColumns.includes(column.id)) { - return ( - - } - onClick={column.getToggleVisibilityHandler()} - /> - - ); - } - return ( { const config = useSelector((state: GlobalState) => getConfig(state)); const installationDate = config.InstallationDate; - const isMySql = config.SQLDriverName === 'mysql'; const currentUser = useSelector((state: GlobalState) => getCurrentUser(state)); const hadAdminDismissedModal = useSelector((state: GlobalState) => getBool(state, Preferences.START_TRIAL_MODAL, Constants.TRIAL_MODAL_AUTO_SHOWN)); @@ -76,7 +75,7 @@ const ShowStartTrialModal = () => { const now = new Date().getTime(); const hasEnvMoreThan6Hours = now > installationDatePlus6Hours; const hasEnvMoreThan10Users = Number(totalUsers) > userThreshold; - if (isUserAdmin && !isMySql && !isBenefitsModalOpened && hasEnvMoreThan10Users && hasEnvMoreThan6Hours && !hadAdminDismissedModal && !isLicensedOrPreviousLicensed) { + if (isUserAdmin && !isBenefitsModalOpened && hasEnvMoreThan10Users && hasEnvMoreThan6Hours && !hadAdminDismissedModal && !isLicensedOrPreviousLicensed) { openStartTrialFormModal({trackingLocation: 'show_start_trial_modal'}, handleOnClose); trackEvent( TELEMETRY_CATEGORIES.SELF_HOSTED_START_TRIAL_AUTO_MODAL, diff --git a/webapp/channels/src/components/widgets/inputs/dropdown_input_hybrid.tsx b/webapp/channels/src/components/widgets/inputs/dropdown_input_hybrid.tsx index 13f8d2e7975..b255503ffdc 100644 --- a/webapp/channels/src/components/widgets/inputs/dropdown_input_hybrid.tsx +++ b/webapp/channels/src/components/widgets/inputs/dropdown_input_hybrid.tsx @@ -6,7 +6,7 @@ import React, {useState, useEffect, useRef} from 'react'; import type {MessageDescriptor} from 'react-intl'; import {useIntl} from 'react-intl'; import ReactSelect, {components} from 'react-select'; -import type {Props as SelectProps, IndicatorsContainerProps, ControlProps, OptionProps, StylesConfig, SingleValue} from 'react-select'; +import type {Props as SelectProps, IndicatorsContainerProps, ControlProps, OptionProps, StylesConfig, SingleValue, GroupBase} from 'react-select'; import 'components/widgets/inputs/input/input.scss'; import './dropdown_input_hybrid.scss'; @@ -73,7 +73,7 @@ const Control = (props: ControlProps) => (
); -const Option = (props: OptionProps) => ( +const Option = (props: OptionProps>) => (