FINISH#

GQL 절 2.18에 추가

아무것도 투영하지 않고 쿼리를 끝냅니다. 작업은 실행되고, 쿼리는 빈 결과를 반환합니다.

개요#

FINISH

굵게 키워드 · 기울임 직접 채우는 자리 · [ ] 생략 가능 · ... 반복 가능. 구문 표기 규약을 참고하십시오.

설명#

모든 쿼리는 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는 무언가를 대체하는 것이 아니라 읽기 경우를 더해 줍니다.

관련 항목#