[
  {
    "type": "alter_table",
    "description": "Add recurrence support columns to scheduleShifts table for recurring shifts",
    "database": "{{store}}",
    "check_query": "SHOW COLUMNS FROM `scheduleShifts` LIKE 'recurrenceRule'",
    "sql": "ALTER TABLE `scheduleShifts` ADD COLUMN `recurrenceRule` varchar(255) DEFAULT NULL COMMENT 'iCal RRULE subset for recurring shifts (NULL = one-time shift). Format: FREQ=WEEKLY;BYDAY=MO,WE,FR' AFTER `notes`, ADD COLUMN `recurrenceEndDate` date DEFAULT NULL COMMENT 'End date for recurring shift series (NULL = indefinite)' AFTER `recurrenceRule`, ADD COLUMN `parentShiftId` int(10) unsigned DEFAULT NULL COMMENT 'FK to scheduleShifts.shiftId - points to first shift in series' AFTER `recurrenceEndDate`, ADD COLUMN `isRecurrenceInstance` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'True if this shift is an instance of a recurring series' AFTER `parentShiftId`"
  },
  {
    "type": "alter_table",
    "description": "Add index for parent shift lookups in recurrence series",
    "database": "{{store}}",
    "check_query": "SHOW INDEX FROM `scheduleShifts` WHERE Key_name = 'idx_parent_shift'",
    "sql": "ALTER TABLE `scheduleShifts` ADD INDEX `idx_parent_shift` (`parentShiftId`)"
  },
  {
    "type": "alter_table",
    "description": "Add index for recurrence rule queries",
    "database": "{{store}}",
    "check_query": "SHOW INDEX FROM `scheduleShifts` WHERE Key_name = 'idx_recurrence'",
    "sql": "ALTER TABLE `scheduleShifts` ADD INDEX `idx_recurrence` (`recurrenceRule`)"
  },
  {
    "type": "alter_table",
    "description": "Add foreign key for parent shift self-reference",
    "database": "{{store}}",
    "check_query": "SELECT 1 FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = DATABASE() AND TABLE_NAME = 'scheduleShifts' AND CONSTRAINT_NAME = 'fk_schedule_shifts_parent'",
    "sql": "ALTER TABLE `scheduleShifts` ADD CONSTRAINT `fk_schedule_shifts_parent` FOREIGN KEY (`parentShiftId`) REFERENCES `scheduleShifts` (`shiftId`) ON DELETE SET NULL"
  }
]
