Files
memgraph-poc/cypher_scripts/recreate_scenario_SCN04_final_fix.cypher
2025-11-05 11:14:46 +09:00

53 lines
2.1 KiB
Plaintext

// --- SCN04 시나리오 재생성 (최종 수정 쿼리) ---
// 0. 기존에 잘못 생성되었을 수 있는 SCN04 관련 데이터를 모두 삭제합니다.
MATCH (s:Scenario {id: 'SCN04'})
DETACH DELETE s;
// 1. 새로운 시나리오 'SCN04' 노드를 생성하고, WITH 절로 s4 변수를 바로 다음 쿼리로 전달합니다.
CREATE (s4:Scenario {id: 'SCN04', name: 'SCN01 순서 변경 시나리오', description: 'SCN01에서 Job 2와 Job 1의 순서를 변경'})
WITH s4;
// 2. SCN01에 포함된 Job들을 찾아 SCN04에 :INCLUDES 관계로 연결합니다.
MATCH (s1:Scenario {id: 'SCN01'})-[:INCLUDES]->(j:Job)
WITH s4, j // 이전 단계의 s4와 현재 찾은 j를 함께 전달합니다.
CREATE (s4)-[:INCLUDES]->(j);
// 3. SCN01의 순서를 기반으로 SCN04의 초기 순서를 복제합니다.
// - STARTS_WITH 관계 복제
MATCH (s4:Scenario {id: 'SCN04'})
MATCH (s1:Scenario {id: 'SCN01'})-[sw:STARTS_WITH]->(start_job:Job)
CREATE (s4)-[:STARTS_WITH]->(start_job);
// - NEXT 관계망 복제 (SCN04 시나리오에 종속된 NEXT 관계 생성)
MATCH (s1:Scenario {id: 'SCN01'})-[:STARTS_WITH]->(start_job:Job)
MATCH path = (start_job)-[:NEXT*]->(end_job:Job)
WHERE NOT (end_job)-[:NEXT]->()
WITH nodes(path) AS jobs
UNWIND range(0, size(jobs)-2) AS i
WITH jobs[i] AS from_job, jobs[i+1] AS to_job
MATCH (s4:Scenario {id: 'SCN04'})
MERGE (j1:Job {id: from_job.id})
MERGE (j2:Job {id: to_job.id})
CREATE (j1)-[:NEXT {scenario: 'SCN04'}]->(j2);
// 4. SCN04에서 Job 1과 Job 2의 순서를 변경합니다. (기존 1->2->3 ... 을 2->1->3 ... 으로)
// - 기존 관계 삭제
MATCH (s4:Scenario {id: 'SCN04'})-[sw:STARTS_WITH]->(j1:Job {id: '1'})
DELETE sw;
MATCH (j1:Job {id: '1'})-[n1:NEXT {scenario: 'SCN04'}]->(j2:Job {id: '2'})
DELETE n1;
MATCH (j2:Job {id: '2'})-[n2:NEXT {scenario: 'SCN04'}]->(j3:Job {id: '3'})
DELETE n2;
// - 새로운 관계 생성
MATCH (s4:Scenario {id: 'SCN04'}), (j1:Job {id: '1'}), (j2:Job {id: '2'}), (j3:Job {id: '3'})
CREATE (s4)-[:STARTS_WITH]->(j2),
(j2)-[:NEXT {scenario: 'SCN04'}]->(j1),
(j1)-[:NEXT {scenario: 'SCN04'}]->(j3);
RETURN "SCN04가 성공적으로 재생성되었습니다.";