COMPLETION() 테이블-값 함수

COMPLETION() 테이블-값 함수

COMPLETION 확장은 사용자가 부분적으로 입력한 단어에 대한 완성 후보를 제안하는 데 쓸 수 있는 "completion"이라는 테이블-값 함수를 구현해요. 이 completion 테이블을 이용하면 예를 들어 탭 완성(tab-completion)을 구현하는 데 도움을 받을 수 있어요.

출처: 문서

본문

COMPLETION 확장은 "completion"이라는 테이블-값 함수를 구현해요. 이 함수는 대화형 SQL 입력 중에 부분적으로 입력된 단어에 대한 완성 후보를 제안하는 데 사용할 수 있어요. completion 테이블은 예를 들어 탭 완성을 구현하는 데 도움을 줘요.

2. 상세 사항

설계된 쿼리 인터페이스는 다음과 같아요:

SELECT DISTINCT candidate COLLATE nocase
  FROM completion($prefix, $wholeline)
 ORDER BY 1;

위 쿼리는 $prefix로 시작하는 입력 단어 전체에 대한 제안을 반환해요. $wholeline 파라미터는 줄의 시작부터 삽입 지점까지의 모든 텍스트예요. $wholeline 파라미터는 컨텍스트로 사용돼요.

$prefix 파라미터는 NULL일 수 있는데, 이 경우 접두사는 $wholeline에서 추론돼요. 또는 컨텍스트 정보를 쓸 수 없거나 컨텍스트 인식 완성을 원하지 않는다면 $wholeline 파라미터를 NULL로 하거나 아예 생략할 수도 있어요.

completion 테이블은 같은 후보를 두 번 이상 반환할 수도 있고, 임의의 순서로 후보를 반환할 수도 있어요. 위 예제 쿼리의 DISTINCT 키워드와 ORDER BY는 답을 유일하게, 그리고 사전식 순서로 만들기 위해 추가된 거예요.

2.1. 예제 사용법

completion 테이블은 명령줄 쉘에서 unix용 readline 또는 linenoise 입력 라인 편집 패키지와 함께 탭 완성을 구현하는 데 사용돼요. 예제 코드는 https://sqlite.org/src/file/src/shell.c.in 소스 파일을 참고해요. 관련 코드 섹션을 찾으려면 "FROM completion"을 검색해보면 돼요.

completion 테이블은 탭 완성을 제공하기 위해 명령줄 쉘에 내장되어 있으므로, 명령줄 쉘에서 completion 테이블에 직접 테스트 쿼리를 실행할 수 있어요. $prefix와 $wholeline에 적절한 값을 채워 위 예제와 같은 쿼리를 입력하고 출력을 관찰하면 돼요.

3. 제한 사항

completion 테이블은 대화형 사용을 위해 설계됐어요. 사람이 타이핑하는 속도에 맞는 응답 속도를 반환해요. 사용자 인터페이스에서 응답 시간이 거의 즉각적이기만 하면 특별히 효율적이어야 할 필요는 없어요.

이 문서를 작성한 시점(2017-07-13) 기준으로, completion 가상 테이블은 SQL 키워드와 스키마, 테이블, 컬럼 이름만 찾아요. $wholeline에 담긴 컨텍스트는 완전히 무시돼요. 향후 개선에서는 함수와 pragma 이름 등 다른 소스에서 가져온 완성 후보를 반환하고 더 많은 컨텍스트를 고려할 예정이에요. completion 테이블은 진행 중인 작업(work-in-progress)으로 보는 게 적절해요.

더 알아보기 (Learn more)