diff --git a/data/storage/mysql/mysql_cdr_migration.sql b/data/storage/mysql/mysql_cdr_migration.sql index 8dd5987fd..833bad2f1 100644 --- a/data/storage/mysql/mysql_cdr_migration.sql +++ b/data/storage/mysql/mysql_cdr_migration.sql @@ -9,18 +9,20 @@ You can increase or lower the value of step in the line after BEGIN below. You have to use 'CALL cgrates.migration();' to execute the script. If named other then default use that database name. */ +DELIMITER // + CREATE PROCEDURE `migration`() BEGIN - /* Optimize table for performance */ - ALTER TABLE cdrs DISABLE KEYS; - SET autocommit=0; - SET unique_checks=0; - SET foreign_key_checks=0; /* DECLARE variables */ DECLARE max_cdrs bigint; DECLARE start_id bigint; DECLARE end_id bigint; DECLARE step bigint; + /* Optimize table for performance */ + ALTER TABLE cdrs DISABLE KEYS; + SET autocommit=0; + SET unique_checks=0; + SET foreign_key_checks=0; /* You must change the step var to commit every step rows inserted */ SET step := 10000; SET start_id := 0; @@ -28,17 +30,39 @@ BEGIN SET max_cdrs = (select max(id) from rated_cdrs); WHILE (start_id <= max_cdrs) DO INSERT INTO - cdrs(cgrid,run_id,origin_host,source,origin_id,tor,request_type,direction,tenant,category,account,subject,destination,setup_time,pdd,answer_time,`usage`,supplier,disconnect_cause,extra_fields,cost_source,cost,cost_details,extra_info, created_at, updated_at, deleted_at) - SELECT cdrs_primary.cgrid,rated_cdrs.runid as run_id,cdrs_primary.cdrhost as origin_host,cdrs_primary.cdrsource as source,cdrs_primary.accid as origin_id, cdrs_primary.tor,rated_cdrs.reqtype as request_type,rated_cdrs.direction, rated_cdrs.tenant,rated_cdrs.category, rated_cdrs.account, rated_cdrs.subject, rated_cdrs.destination,rated_cdrs.setup_time,rated_cdrs.pdd,rated_cdrs.answer_time,rated_cdrs.`usage`,rated_cdrs.supplier,rated_cdrs.disconnect_cause,cdrs_extra.extra_fields,cost_details.cost_source,rated_cdrs.cost,cost_details.timespans as cost_details,rated_cdrs.extra_info,rated_cdrs.created_at,rated_cdrs.updated_at, rated_cdrs.deleted_at + cdrs(cgrid,run_id,origin_host,source,origin_id,tor,request_type,direction,tenant,category,account,subject,destination,setup_time,answer_time,`usage`,supplier,extra_fields,cost,extra_info, created_at, updated_at, deleted_at) + SELECT + cdrs_primary.cgrid, + rated_cdrs.runid as run_id, + cdrs_primary.cdrhost as origin_host, + cdrs_primary.cdrsource as source, + cdrs_primary.accid as origin_id, + cdrs_primary.tor, + rated_cdrs.reqtype as request_type, + rated_cdrs.direction, + rated_cdrs.tenant,rated_cdrs.category, + rated_cdrs.account, + rated_cdrs.subject, + rated_cdrs.destination, + rated_cdrs.setup_time, + rated_cdrs.answer_time, + rated_cdrs.`usage`, + rated_cdrs.supplier, + cdrs_extra.extra_fields, + rated_cdrs.cost, + rated_cdrs.extra_info, + rated_cdrs.created_at, + rated_cdrs.updated_at, + rated_cdrs.deleted_at FROM rated_cdrs - INNER JOIN cdrs_primary ON rated_cdrs.cgrid = cdrs_primary.cgrid - LEFT JOIN cdrs_extra ON rated_cdrs.cgrid = cdrs_extra.cgrid - INNER JOIN cost_details ON rated_cdrs.cgrid = cost_details.cgrid + INNER JOIN cdrs_primary ON rated_cdrs.cgrid = cdrs_primary.cgrid + LEFT JOIN cdrs_extra ON rated_cdrs.cgrid = cdrs_extra.cgrid + INNER JOIN cost_details ON rated_cdrs.cgrid = cost_details.cgrid WHERE cdrs_primary.`usage` > '0' - AND not exists (select 1 from cdrs c where c.cgrid = cdrs_primary.cgrid) - AND rated_cdrs.id >= start_id - AND rated_cdrs.id < end_id - GROUP BY cgrid, run_id, origin_id; + AND not exists (select 1 from cdrs c where c.cgrid = cdrs_primary.cgrid) + AND rated_cdrs.id >= start_id + AND rated_cdrs.id < end_id + GROUP BY cgrid, run_id, origin_id; SET start_id = start_id + step; SET end_id = end_id + step; END WHILE; @@ -48,4 +72,6 @@ BEGIN SET foreign_key_checks=1; ALTER TABLE cdrs ENABLE KEYS; OPTIMIZE TABLE cdrs; -END +END // + +DELIMITER ;