FINISH#
GQL 절 2.18에 추가
아무것도 투영하지 않고 쿼리를 끝냅니다. 작업은 실행되고, 쿼리는 빈 결과를 반환합니다.
개요#
굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.
설명#
모든 쿼리는 RETURN, FINISH, 또는 쓰기 절로 끝나야 합니다. FINISH는 “결과를 내놓지 않는다”고
말하는 끝맺음입니다. 인자를 받지 않고, 컬럼을 투영하지 않으며, 문장을 닫습니다.
FINISH는 마지막 절이어야 합니다. 그 뒤에 무엇이 오면FINISH must be at the end of the query가 나옵니다.읽기 뒤의
FINISH는 행을 버립니다. 플래너가 그것을LIMIT 0으로 적용하므로, 스캔은 열리지만 행은 하나도 가져오지 않습니다.쓰기 뒤에서도 쓰기는 그대로 일어납니다.
FINISH는 투영만 억제합니다.FINISH로 끝나는 쿼리는 빈 결과를 반환합니다. 컬럼도 행도 없습니다.psql은 그것을--머리와 그 뒤의(0 rows)로 출력하고,\gdesc는The command has no result, or the result has no columns.라고 보고합니다.FINISH로 끝나는 쓰기는 결과 대신 자기 명령 태그를 보고합니다. 정점 하나를 만들었다면UPDATE 1같은 것입니다.
예제#
모든 예제는 예제 데이터셋에서 실행됩니다.
실행 계획만 보려고 읽기를 실행하는 경우입니다. 이것을 표기하는 Cypher 방식은 없습니다. RETURN도
쓰기 절도 없는 Cypher 쿼리는 거부됩니다:
MATCH (m:movie) FINISH;
--
(0 rows)
결과를 다시 읽지 않고 쓰기#
만들어진 요소를 클라이언트로 보내고 싶지 않을 때 꺼내 쓸 형태가 CREATE … FINISH입니다:
CREATE (:movie {title: 'Tenet', year: 2020, genre: 'Action'}) FINISH;
UPDATE 1
그 정점은 만들어져 있습니다:
MATCH (m:movie {title: 'Tenet'}) RETURN m.title AS film, m.year AS year;
film | year
---------+------
"Tenet" | 2020
(1 row)
FINISH 뒤의 읽기가 비용을 들이지 않음을 확인하기#
실행 계획에 이 절이 컴파일된 LIMIT 0이 보이고, 그 아래에는 한 번도 값을 가져가지 않는 스캔이
있습니다:
EXPLAIN (COSTS OFF) MATCH (m:movie) FINISH;
QUERY PLAN
---------------------------
Limit
-> Seq Scan on movie m
(2 rows)
쓰기 계획은 쓰기 노드를 유지합니다. 그 쓰기는 선택이 아니기 때문입니다:
EXPLAIN (COSTS OFF) CREATE (:movie {title: 'Tenet'}) FINISH;
QUERY PLAN
--------------
Graph Create
-> Result
(2 rows)
아무것도 투영하지 않는, 정렬된 쿼리 끝맺기#
ORDER BY, SKIP, OFFSET, LIMIT은 그 자체로 절이지만 어느 것도 쿼리를 끝낼 수 없습니다.
FINISH가 그런 절로 끝나는 파이프라인을 닫아 줍니다:
MATCH (m:movie) ORDER BY m.year LIMIT 3 FINISH;
--
(0 rows)
FINISH가 없으면 같은 쿼리가
Cypher query must end with RETURN, FINISH or update clause를 냅니다.
참고#
결과가 필요한 자리에서는 FINISH가 받아들여지지 않습니다. CALL { } 본문은 무언가를 투영해야
하므로, FINISH로 끝나는 본문은 CALL subquery must RETURN at least one variable을 냅니다.
FINISH로 끝나는 쿼리는 NEXT의 왼쪽 피연산자가 될 수도 없습니다. 그 경우
FINISH cannot be followed by NEXT가 나옵니다.
참고
finish는 2.18에서 예약 키워드가 됐습니다. 패턴 안의 레이블 이름으로는 따옴표 없이도 여전히
받아들여지며(MATCH (n:finish)), 업그레이드한 데이터베이스에 필요한 것이 그것입니다. 변수 이름,
CREATE VLABEL 이름, SQL 식별자로는 받아들여지지 않습니다. 그 자리에는 "finish"로 쓰거나 이름을
바꾸십시오. 속성 키와 RETURN 별칭은 영향을 받지 않습니다.
호환성#
GQL 적합성
GQL 기본 결과 문장(ISO/IEC 39075:2024 §14.10)의 FINISH를 구현합니다. 표준은 FINISH가 “빈
타입”을 가지며 실행 결과를 “결과가 생략된 성공”으로 설정한다고 규정하는데, 위의 컬럼 없는 빈 결과가
그것을 나타냅니다.
지원 — 읽기 쿼리와 데이터를 바꾸는 쿼리의 마지막 문장으로 쓰는
FINISH. 후자의 경우 표준은 그것을 어차피 암시적인 것으로 봅니다(§13.1).미지원 — 집합 연산의 한 갈래로 쓰는
FINISH. 표준도 그것을 금지합니다(§14.2, 구문 규칙 5). AgensGraph는 컬럼 수 불일치로 거부합니다:each UNION query must have the same number of columns.
진행 상황은 GQL 적합성 표에서 확인하십시오.
openCypher#
openCypher에는 FINISH가 없습니다. 거기서는 읽기 쿼리가 RETURN으로 끝나야 하고, 쓰기 쿼리는
자기 쓰기 절로 끝날 수 있습니다. AgensGraph는 두 번째 형태도 받으므로, FINISH는 무언가를 대체하는
것이 아니라 읽기 경우를 더해 줍니다.