diff --git a/src/main/resources/db/migration/dbidentity/V12__Elasticsearch_Columns.sql b/src/main/resources/db/migration/dbidentity/V12__Elasticsearch_Columns.sql new file mode 100644 index 0000000..a268791 --- /dev/null +++ b/src/main/resources/db/migration/dbidentity/V12__Elasticsearch_Columns.sql @@ -0,0 +1,124 @@ +USE db_identity; + +SET @dbname = 'db_identity'; +SET @tablename = 't_elasticsearch_sync_job'; + +-- Add triggered_by +SET @columnname = 'triggered_by'; +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0, + 'SELECT 1', + CONCAT('ALTER TABLE ', @dbname, '.', @tablename, + ' ADD COLUMN triggered_by VARCHAR(100) DEFAULT NULL AFTER error_message;') +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- Add created_date +SET @columnname = 'created_date'; +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0, + 'SELECT 1', + CONCAT('ALTER TABLE ', @dbname, '.', @tablename, + ' ADD COLUMN created_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER triggered_by;') +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- Add last_updated +SET @columnname = 'last_updated'; +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0, + 'SELECT 1', + CONCAT('ALTER TABLE ', @dbname, '.', @tablename, + ' ADD COLUMN last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER created_date;') +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- Modify columns (always execute) +ALTER TABLE db_identity.t_elasticsearch_sync_job +MODIFY COLUMN status VARCHAR(50) NOT NULL DEFAULT 'PENDING', +MODIFY COLUMN total_records BIGINT DEFAULT 0, +MODIFY COLUMN processed_records BIGINT DEFAULT 0, +MODIFY COLUMN success_count BIGINT DEFAULT 0, +MODIFY COLUMN failure_count BIGINT DEFAULT 0, +MODIFY COLUMN current_offset INT DEFAULT 0, +MODIFY COLUMN started_at TIMESTAMP NULL DEFAULT NULL, +MODIFY COLUMN completed_at TIMESTAMP NULL DEFAULT NULL, +MODIFY COLUMN estimated_time_remaining BIGINT NULL AFTER last_updated, +MODIFY COLUMN processing_speed DOUBLE NULL AFTER estimated_time_remaining; + +-- Drop indexes if exist +SET @indexname = 'idx_job_status'; +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND INDEX_NAME = @indexname) > 0, + CONCAT('DROP INDEX ', @indexname, ' ON ', @dbname, '.', @tablename), + 'SELECT 1' +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @indexname = 'idx_started_at'; +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND INDEX_NAME = @indexname) > 0, + CONCAT('DROP INDEX ', @indexname, ' ON ', @dbname, '.', @tablename), + 'SELECT 1' +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @indexname = 'idx_status_started_at'; +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND INDEX_NAME = @indexname) > 0, + CONCAT('DROP INDEX ', @indexname, ' ON ', @dbname, '.', @tablename), + 'SELECT 1' +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- Add new indexes (only if not exist) +SET @indexname = 'idx_status'; +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND INDEX_NAME = @indexname) > 0, + 'SELECT 1', + CONCAT('CREATE INDEX idx_status ON ', @dbname, '.', @tablename, ' (status);') +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @indexname = 'idx_created_date'; +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND INDEX_NAME = @indexname) > 0, + 'SELECT 1', + CONCAT('CREATE INDEX idx_created_date ON ', @dbname, '.', @tablename, ' (created_date);') +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @indexname = 'idx_job_type'; +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND INDEX_NAME = @indexname) > 0, + 'SELECT 1', + CONCAT('CREATE INDEX idx_job_type ON ', @dbname, '.', @tablename, ' (job_type);') +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; \ No newline at end of file