-- Add zone + dest_postcode to prc_quote / zone to prc_order_bill -- Idempotent -- charset: utf8mb4 SET NAMES utf8mb4; SET @db := DATABASE(); -- ========== prc_quote ========== SET @has := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_quote' AND COLUMN_NAME = 'dest_postcode' ); SET @sql := IF(@has = 0, 'ALTER TABLE prc_quote ADD COLUMN dest_postcode VARCHAR(20) DEFAULT NULL COMMENT ''dest postcode'' AFTER country_name', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @has := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_quote' AND COLUMN_NAME = 'zone_id' ); SET @sql := IF(@has = 0, 'ALTER TABLE prc_quote ADD COLUMN zone_id BIGINT(20) DEFAULT NULL COMMENT ''prc_zone.zone_id'' AFTER dest_postcode', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @has := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_quote' AND COLUMN_NAME = 'zone_code' ); SET @sql := IF(@has = 0, 'ALTER TABLE prc_quote ADD COLUMN zone_code VARCHAR(50) DEFAULT NULL COMMENT ''zone code'' AFTER zone_id', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @has := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_quote' AND COLUMN_NAME = 'zone_name' ); SET @sql := IF(@has = 0, 'ALTER TABLE prc_quote ADD COLUMN zone_name VARCHAR(100) DEFAULT NULL COMMENT ''zone display name'' AFTER zone_code', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @has := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_quote' AND INDEX_NAME = 'idx_quote_zone' ); SET @sql := IF(@has = 0, 'ALTER TABLE prc_quote ADD INDEX idx_quote_zone (zone_id)', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- ========== prc_order_bill ========== SET @has := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_order_bill' AND COLUMN_NAME = 'zone_id' ); SET @sql := IF(@has = 0, 'ALTER TABLE prc_order_bill ADD COLUMN zone_id BIGINT(20) DEFAULT NULL COMMENT ''prc_zone.zone_id'' AFTER country_name', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @has := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_order_bill' AND COLUMN_NAME = 'zone_code' ); SET @sql := IF(@has = 0, 'ALTER TABLE prc_order_bill ADD COLUMN zone_code VARCHAR(50) DEFAULT NULL COMMENT ''zone code'' AFTER zone_id', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @has := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_order_bill' AND COLUMN_NAME = 'zone_name' ); SET @sql := IF(@has = 0, 'ALTER TABLE prc_order_bill ADD COLUMN zone_name VARCHAR(100) DEFAULT NULL COMMENT ''zone display name'' AFTER zone_code', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @has := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_order_bill' AND INDEX_NAME = 'idx_bill_zone' ); SET @sql := IF(@has = 0, 'ALTER TABLE prc_order_bill ADD INDEX idx_bill_zone (zone_id)', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;