Browse Source

Migration for renaming tables

Vova Tkach 5 years ago
parent
commit
1883c25a90
4 changed files with 334 additions and 5 deletions
  1. 1 1
      support/migrate/000000000.go
  2. 1 0
      support/migrate/000000001.go
  3. 318 0
      support/migrate/000000021.go
  4. 14 4
      support/support.go

+ 1 - 1
support/migrate/000000000.go

@@ -23,7 +23,7 @@ func Run(ctx context.Context, db *sqlw.DB, version int, host string) error {
 	}
 
 	if last != "" {
-		if _, err := db.Exec(ctx, `UPDATE settings SET value = ? WHERE name = 'database_version';`, last); err != nil {
+		if _, err := db.Exec(ctx, `UPDATE fave_settings SET value = ? WHERE name = 'database_version';`, last); err != nil {
 			return err
 		}
 	}

+ 1 - 0
support/migrate/000000001.go

@@ -28,4 +28,5 @@ var Migrations = map[string]func(context.Context, *sqlw.DB, string) error{
 	"000000018": Migrate_000000018,
 	"000000019": Migrate_000000019,
 	"000000020": Migrate_000000020,
+	"000000021": Migrate_000000021,
 }

+ 318 - 0
support/migrate/000000021.go

@@ -0,0 +1,318 @@
+package migrate
+
+import (
+	"context"
+
+	"golang-fave/engine/sqlw"
+)
+
+func Migrate_000000021(ctx context.Context, db *sqlw.DB, host string) error {
+	// Drop foreign keys
+	if _, err := db.Exec(ctx, `ALTER TABLE blog_cat_post_rel DROP FOREIGN KEY FK_blog_cat_post_rel_post_id;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE blog_cat_post_rel DROP FOREIGN KEY FK_blog_cat_post_rel_category_id;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE blog_cats DROP FOREIGN KEY FK_blog_cats_user;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE blog_posts DROP FOREIGN KEY FK_blog_posts_user;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE blog_posts DROP FOREIGN KEY FK_blog_posts_category;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE pages DROP FOREIGN KEY FK_pages_user;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_cat_product_rel DROP FOREIGN KEY FK_shop_cat_product_rel_product_id;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_cat_product_rel DROP FOREIGN KEY FK_shop_cat_product_rel_category_id;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_cats DROP FOREIGN KEY FK_shop_cats_user;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_filter_product_values DROP FOREIGN KEY FK_shop_filter_product_values_product_id;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_filter_product_values DROP FOREIGN KEY FK_shop_filter_product_values_filter_value_id;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_filters_values DROP FOREIGN KEY FK_shop_filters_values_filter_id;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_orders DROP FOREIGN KEY FK_shop_orders_currency_id;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_order_products DROP FOREIGN KEY FK_shop_order_products_order_id;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_order_products DROP FOREIGN KEY FK_shop_order_products_product_id;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_product_images DROP FOREIGN KEY FK_shop_product_images_product_id;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_products DROP FOREIGN KEY FK_shop_products_user;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_products DROP FOREIGN KEY FK_shop_products_currency;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_products DROP FOREIGN KEY FK_shop_products_category;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `ALTER TABLE shop_products DROP FOREIGN KEY FK_shop_products_parent_id;`); err != nil {
+		return err
+	}
+
+	// Rename tables
+	if _, err := db.Exec(ctx, `RENAME TABLE blog_cat_post_rel TO fave_blog_cat_post_rel;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE blog_cats TO fave_blog_cats;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE blog_posts TO fave_blog_posts;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE notify_mail TO fave_notify_mail;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE pages TO fave_pages;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE shop_cat_product_rel TO fave_shop_cat_product_rel;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE shop_cats TO fave_shop_cats;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE shop_currencies TO fave_shop_currencies;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE shop_filter_product_values TO fave_shop_filter_product_values;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE shop_filters_values TO fave_shop_filters_values;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE shop_filters TO fave_shop_filters;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE shop_order_products TO fave_shop_order_products;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE shop_orders TO fave_shop_orders;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE shop_product_images TO fave_shop_product_images;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE shop_products TO fave_shop_products;`); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(ctx, `RENAME TABLE users TO fave_users;`); err != nil {
+		return err
+	}
+
+	// Add constraints
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_blog_cat_post_rel ADD CONSTRAINT FK_blog_cat_post_rel_post_id
+		FOREIGN KEY (post_id) REFERENCES fave_blog_posts (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_blog_cat_post_rel ADD CONSTRAINT FK_blog_cat_post_rel_category_id
+		FOREIGN KEY (category_id) REFERENCES fave_blog_cats (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_blog_cats ADD CONSTRAINT FK_blog_cats_user
+		FOREIGN KEY (user) REFERENCES fave_users (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_blog_posts ADD CONSTRAINT FK_blog_posts_user
+		FOREIGN KEY (user) REFERENCES fave_users (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_blog_posts ADD CONSTRAINT FK_blog_posts_category
+		FOREIGN KEY (category) REFERENCES fave_blog_cats (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_pages ADD CONSTRAINT FK_pages_user
+		FOREIGN KEY (user) REFERENCES fave_users (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_cat_product_rel ADD CONSTRAINT FK_shop_cat_product_rel_product_id
+		FOREIGN KEY (product_id) REFERENCES fave_shop_products (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_cat_product_rel ADD CONSTRAINT FK_shop_cat_product_rel_category_id
+		FOREIGN KEY (category_id) REFERENCES fave_shop_cats (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_cats ADD CONSTRAINT FK_shop_cats_user
+		FOREIGN KEY (user) REFERENCES fave_users (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_filter_product_values ADD CONSTRAINT FK_shop_filter_product_values_product_id
+		FOREIGN KEY (product_id) REFERENCES fave_shop_products (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_filter_product_values ADD CONSTRAINT FK_shop_filter_product_values_filter_value_id
+		FOREIGN KEY (filter_value_id) REFERENCES fave_shop_filters_values (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_filters_values ADD CONSTRAINT FK_shop_filters_values_filter_id
+		FOREIGN KEY (filter_id) REFERENCES fave_shop_filters (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_orders ADD CONSTRAINT FK_shop_orders_currency_id
+		FOREIGN KEY (currency_id) REFERENCES fave_shop_currencies (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_order_products ADD CONSTRAINT FK_shop_order_products_order_id
+		FOREIGN KEY (order_id) REFERENCES fave_shop_orders (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_order_products ADD CONSTRAINT FK_shop_order_products_product_id
+		FOREIGN KEY (product_id) REFERENCES fave_shop_products (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_product_images ADD CONSTRAINT FK_shop_product_images_product_id
+		FOREIGN KEY (product_id) REFERENCES fave_shop_products (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_products ADD CONSTRAINT FK_shop_products_user
+		FOREIGN KEY (user) REFERENCES fave_users (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_products ADD CONSTRAINT FK_shop_products_currency
+		FOREIGN KEY (currency) REFERENCES fave_shop_currencies (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_products ADD CONSTRAINT FK_shop_products_category
+		FOREIGN KEY (category) REFERENCES fave_shop_cats (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	if _, err := db.Exec(
+		ctx,
+		`ALTER TABLE fave_shop_products ADD CONSTRAINT FK_shop_products_parent_id
+		FOREIGN KEY (parent_id) REFERENCES fave_shop_products (id) ON DELETE RESTRICT;`,
+	); err != nil {
+		return err
+	}
+
+	return nil
+}

+ 14 - 4
support/support.go

@@ -23,7 +23,7 @@ func New() *Support {
 func (this *Support) isSettingsTableDoesntExist(err error) bool {
 	error_msg := strings.ToLower(err.Error())
 	if match, _ := regexp.MatchString(`^error 1146`, error_msg); match {
-		if match, _ := regexp.MatchString(`'[^\.]+\.settings'`, error_msg); match {
+		if match, _ := regexp.MatchString(`'[^\.]+\.fave_settings'`, error_msg); match {
 			if match, _ := regexp.MatchString(`doesn't exist$`, error_msg); match {
 				return true
 			}
@@ -62,12 +62,22 @@ func (this *Support) Migrate(ctx context.Context, host string) error {
 			return err
 		}
 		defer db.Close()
+
+		var table string
+		if err := db.QueryRow(ctx, `SHOW TABLES LIKE 'settings';`).Scan(&table); err == nil {
+			if table == "settings" {
+				if _, err := db.Exec(ctx, `RENAME TABLE settings TO fave_settings;`); err != nil {
+					return err
+				}
+			}
+		}
+
 		var version string
-		if err := db.QueryRow(ctx, `SELECT value FROM settings WHERE name = 'database_version' LIMIT 1;`).Scan(&version); err != nil {
+		if err := db.QueryRow(ctx, `SELECT value FROM fave_settings WHERE name = 'database_version' LIMIT 1;`).Scan(&version); err != nil {
 			if this.isSettingsTableDoesntExist(err) {
 				if _, err := db.Exec(
 					ctx,
-					`CREATE TABLE settings (
+					`CREATE TABLE fave_settings (
 						name varchar(255) NOT NULL COMMENT 'Setting name',
 						value text NOT NULL COMMENT 'Setting value'
 					) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
@@ -76,7 +86,7 @@ func (this *Support) Migrate(ctx context.Context, host string) error {
 				}
 				if _, err := db.Exec(
 					ctx,
-					`INSERT INTO settings (name, value) VALUES ('database_version', '000000002');`,
+					`INSERT INTO fave_settings (name, value) VALUES ('database_version', '000000002');`,
 				); err != nil {
 					return err
 				}