// Add SourceType and SourceID columns to Tasks table // These are needed for chat persistence feature result = { "OK": true, "STEPS": [] }; try { // Check if columns already exist cols = queryExecute(" SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'payfrit' AND TABLE_NAME = 'Tasks' AND COLUMN_NAME IN ('SourceType', 'SourceID') ", [], { datasource: "payfrit" }); existingCols = valueList(cols.COLUMN_NAME); arrayAppend(result.STEPS, "Existing columns: #existingCols#"); // Add SourceType if missing if (!listFindNoCase(existingCols, "SourceType")) { queryExecute(" ALTER TABLE Tasks ADD COLUMN SourceType VARCHAR(50) NULL ", [], { datasource: "payfrit" }); arrayAppend(result.STEPS, "Added SourceType column"); } else { arrayAppend(result.STEPS, "SourceType already exists"); } // Add SourceID if missing if (!listFindNoCase(existingCols, "SourceID")) { queryExecute(" ALTER TABLE Tasks ADD COLUMN SourceID INT NULL ", [], { datasource: "payfrit" }); arrayAppend(result.STEPS, "Added SourceID column"); } else { arrayAppend(result.STEPS, "SourceID already exists"); } // Verify columns now exist verifyQuery = queryExecute(" SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'payfrit' AND TABLE_NAME = 'Tasks' AND COLUMN_NAME IN ('SourceType', 'SourceID') ", [], { datasource: "payfrit" }); result.COLUMNS = []; for (row in verifyQuery) { arrayAppend(result.COLUMNS, { "name": row.COLUMN_NAME, "type": row.DATA_TYPE }); } arrayAppend(result.STEPS, "Migration complete"); } catch (any e) { result.OK = false; result.ERROR = e.message; } writeOutput(serializeJSON(result));