20241223062111_indexes.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. const env = require("../env");
  2. const isMySQL = env.DB_CLIENT === "mysql" || env.DB_CLIENT === "mysql2";
  3. /**
  4. * @param { import("knex").Knex } knex
  5. * @returns { Promise<void> }
  6. */
  7. async function up(knex) {
  8. // make apikey unique
  9. await knex.schema.alterTable("users", function(table) {
  10. table.unique("apikey");
  11. });
  12. // IF NOT EXISTS is not available on MySQL So if you're
  13. // using MySQL you should make sure you don't have these indexes already
  14. const ifNotExists = isMySQL ? "" : "IF NOT EXISTS";
  15. // create them separately because one string with break lines didn't work on MySQL
  16. await Promise.all([
  17. knex.raw(`CREATE INDEX ${ifNotExists} links_domain_id_index ON links (domain_id);`),
  18. knex.raw(`CREATE INDEX ${ifNotExists} links_user_id_index ON links (user_id);`),
  19. knex.raw(`CREATE INDEX ${ifNotExists} links_address_index ON links (address);`),
  20. knex.raw(`CREATE INDEX ${ifNotExists} links_expire_in_index ON links (expire_in);`),
  21. knex.raw(`CREATE INDEX ${ifNotExists} domains_address_index ON domains (address);`),
  22. knex.raw(`CREATE INDEX ${ifNotExists} domains_user_id_index ON domains (user_id);`),
  23. knex.raw(`CREATE INDEX ${ifNotExists} hosts_address_index ON hosts (address);`),
  24. knex.raw(`CREATE INDEX ${ifNotExists} visits_link_id_index ON visits (link_id);`),
  25. ]);
  26. };
  27. /**
  28. * @param { import("knex").Knex } knex
  29. * @returns { Promise<void> }
  30. */
  31. async function down(knex) {
  32. await knex.schema.alterTable("users", function(table) {
  33. table.dropUnique(["apikey"]);
  34. });
  35. await Promise.all([
  36. knex.raw(`DROP INDEX links_domain_id_index;`),
  37. knex.raw(`DROP INDEX links_user_id_index;`),
  38. knex.raw(`DROP INDEX links_address_index;`),
  39. knex.raw(`DROP INDEX links_expire_in_index;`),
  40. knex.raw(`DROP INDEX domains_address_index;`),
  41. knex.raw(`DROP INDEX domains_user_id_index;`),
  42. knex.raw(`DROP INDEX hosts_address_index;`),
  43. knex.raw(`DROP INDEX visits_link_id_index;`),
  44. ]);
  45. };
  46. module.exports = {
  47. up,
  48. down,
  49. }