pg_migration.rs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. use tokio_postgres::{Client, NoTls};
  2. use flowy_server_config::supabase_config::PostgresConfiguration;
  3. /// Drop all tables and dependencies defined in the v1_initial_up.sql.
  4. /// Be careful when using this function. It will drop all tables and dependencies.
  5. /// Mostly used for testing.
  6. #[allow(dead_code)]
  7. #[cfg(debug_assertions)]
  8. pub(crate) async fn run_initial_drop(client: &Client) {
  9. // let sql = include_str!("migrations/initial/initial_down.sql");
  10. let sql = r#"DROP TABLE IF EXISTS af_user;
  11. DROP TABLE IF EXISTS af_workspace;
  12. DROP TABLE IF EXISTS af_user_profile;
  13. DROP TABLE IF EXISTS af_collab;
  14. DROP VIEW IF EXISTS af_collab_state;
  15. DROP TABLE IF EXISTS af_collab_snapshot;
  16. DROP TABLE IF EXISTS af_collab_statistics;
  17. DROP TRIGGER IF EXISTS create_af_user_profile_trigger ON af_user_profile CASCADE;
  18. DROP FUNCTION IF EXISTS create_af_user_profile_trigger_func;
  19. DROP TRIGGER IF EXISTS create_af_workspace_trigger ON af_workspace CASCADE;
  20. DROP FUNCTION IF EXISTS create_af_workspace_trigger_func;
  21. DROP TRIGGER IF EXISTS af_collab_insert_trigger ON af_collab CASCADE;
  22. DROP FUNCTION IF EXISTS increment_af_collab_update_count;
  23. DROP TRIGGER IF EXISTS af_collab_snapshot_update_edit_count_trigger ON af_collab_snapshot;
  24. DROP FUNCTION IF EXISTS af_collab_snapshot_update_edit_count;
  25. DROP TRIGGER IF EXISTS check_and_delete_snapshots_trigger ON af_collab_snapshot CASCADE;
  26. DROP FUNCTION IF EXISTS check_and_delete_snapshots;
  27. DROP TRIGGER IF EXISTS new_af_collab_row_trigger ON af_collab CASCADE;
  28. DROP FUNCTION IF EXISTS notify_on_insert_af_collab;
  29. "#;
  30. client.batch_execute(sql).await.unwrap();
  31. client
  32. .batch_execute("DROP TABLE IF EXISTS af_migration_history")
  33. .await
  34. .unwrap();
  35. }
  36. // ‼️‼️‼️ Warning: this test will create a table in the database
  37. #[tokio::test]
  38. async fn run_initial_drop_test() -> Result<(), anyhow::Error> {
  39. // rename the `.evn.test.danger` to the actual env file name.
  40. if dotenv::from_filename(".env.test.danger").is_err() {
  41. return Ok(());
  42. }
  43. let configuration = PostgresConfiguration::from_env().unwrap();
  44. let mut config = tokio_postgres::Config::new();
  45. config
  46. .host(&configuration.url)
  47. .user(&configuration.user_name)
  48. .password(&configuration.password)
  49. .port(configuration.port);
  50. // Using the https://docs.rs/postgres-openssl/latest/postgres_openssl/ to enable tls connection.
  51. let (client, connection) = config.connect(NoTls).await?;
  52. tokio::spawn(async move {
  53. if let Err(e) = connection.await {
  54. tracing::error!("postgres db connection error: {}", e);
  55. }
  56. });
  57. #[cfg(debug_assertions)]
  58. {
  59. run_initial_drop(&client).await;
  60. }
  61. Ok(())
  62. }