이전 블로그 자바스크립트 사용자 정의 함수의 새로운 기능을 소개합니다.

이제 좀 더 자세히 살펴보겠습니다.

JavaScript 코드 내에서 N1QL 문을 실행하는 기본 메커니즘부터 시작하겠습니다.

자바스크립트의 N1QL

JavaScript 함수 내에서 N1QL 문을 실행하는 방법에는 두 가지가 있습니다. 적절한 이름의 함수를 직접 호출하거나 JavaScript 컴파일러가 내장된 N1QL 문을 감지하여 해당 N1QL() 호출을 생성하도록 하는 것입니다.

각 방법을 아래에서 살펴봅니다.

사전 요구 사항 예시

다음 섹션에는 여러 가지 예가 포함되어 있습니다.

이러한 기능은 완벽하게 작동하지만 이를 실행하려면 다음이 필요합니다:

    • 버전 7.1 이상의 Couchbase 클러스터
    • 라는 버킷을 b1
    • 의 기본 인덱스 b1
    • 라는 라이브러리에 각 함수를 만들려면 udfblog
    • 를 사용하여 해당 N1QL UDF를 생성합니다.

웹 콘솔의 UDF 탭을 사용하여 함수 및 UDF를 만들 수 있습니다.

N1QL() 함수

그리고 N1QL() 함수는 문자열 형식의 문과 자리 표시자 값을 포함하는 두 번째 선택적 매개변수를 받습니다.

매개 변수를 받지 않고 값을 반환하지 않는 N1QL 문을 실행하는 데 필요한 것은 다음과 같습니다: 

및 해당 UDF:

(함수 자체가 값을 반환하지 않는다는 점은 잠시 잊으세요. 또한 이미지로 표시된 코드 스니펫은 워드프레스에서 텍스트로 렌더링하는 것을 좋아하지 않아서 죄송합니다.)

언제 N1QL() 함수가 호출되면 첫 번째 매개변수로 전달된 문이 구문 분석, 계획 및 실행됩니다.

문이 값을 반환하지 않으면 N1QL 함수가 반환될 때까지 문이 실행을 완료한 것입니다(이 특별한 경우에는 버킷 b1 가 존재하고 키 k1 가 아직 존재하지 않으면 새 문서가 삽입됩니다.

ESQL/C 또는 PL/SQL에 익숙한 경우 즉시 실행 문, 즉 N1QL() 함수는 자바스크립트 UDF에 해당하는 함수입니다. 

값이 반환되면 반환 값은 N1QL() 는 자바스크립트 이터레이터로, 나중에 살펴보겠지만 한 번에 하나씩 값을 수집하는 데 사용할 수 있습니다. 

동적 N1QL

물론, 다른 용도로는 N1QL() 함수는 예를 들어 문자열을 연결하여 동적으로 문을 작성하는 것입니다:

이는 완벽하게 합법적이지만, N1QL(또는 더 일반적으로 SQL) 인젝션의 위험을 고려할 때 이러한 기법을 사용하지 않는 것이 가장 좋습니다.

대신 자리 표시자를 사용합니다.

자바스크립트 트랜스파일러

N1QL을 실행하는 두 번째 방법은 함수 본문에 N1QL 문을 삽입하는 대신 트랜스파일러(JavaScript 컴파일러의 구성 요소)가 이를 감지하여 백그라운드에서 올바른 N1QL 호출을 빌드하도록 하는 것입니다:

이렇게 하면 정적 문을 즉시 실행하는 데 매우 편리하며 함수가 갑자기 훨씬 더 가독성이 높아집니다.

N1QL 문 자리 표시자 및 자리 표시자 값

동적 N1QL 생성과 관련된 위험을 피하는 가장 좋은 방법은 명명된 자리 표시자 또는 위치 표시자를 사용하고 실행 시 자리 표시자 값을 전달하는 정적 문을 사용하는 것입니다.

N1QL() 함수

사용 시 N1QL() 함수에서 다음과 같이 두 번째 선택적 인수에 값을 전달하면 이 작업을 수행할 수 있습니다.

위치 매개변수

이 경우는 값 배열을 전달하여 처리합니다:

명명된 매개변수

이 경우 필드 이름이 매개변수 이름과 일치하는 객체를 전달하면 됩니다:

위치 매개변수와 명명된 매개변수를 혼합할 수 없습니다. N1QL() 함수는 배열 또는 객체 중 하나만 허용합니다.

에 전달된 값은 N1QL() 는 리터럴일 필요가 없으며, 변수로 배열과 객체를 구성하거나 배열 또는 객체 변수를 전달할 수 있습니다:

또는

트랜스파일러

트랜스파일러를 사용하면 명명된 매개변수만 사용할 수 있지만, 이미 선언된 변수를 사용하는 것만큼이나 간단합니다:

물론 함수 매개변수를 직접 사용할 수도 있습니다:

그리고 해당 N1QL UDF:

결론

자바스크립트 함수 내에서 N1QL을 사용하는 방법에 대한 기본 예제를 다루었습니다. N1QL() 함수 호출과 N1QL 문을 자바스크립트에 직접 삽입하는 방법, 이름 및 위치 매개변수를 사용하는 방법을 보여줍니다.

다음 블로그 게시물에서는 반복문과 데이터 조작문에 대해 다룰 예정입니다.

 

작성자

게시자 마르코 그레코, 소프트웨어 아키텍트, 카우치베이스

전생에 마르코는 이탈리아 최대 방사선 치료 기관에서 CTO, 방사선 물리학자, 소프트웨어 설계자, 시스템 관리자, DBA, 트레이너, 일반 관리자로 일했습니다. 직업과 국가를 바꾼 그는 처음에는 Informix에서, 나중에는 IBM에서 20년 이상 다양한 지원 및 개발 직책을 맡다가 마침내 과감히 Couchbase에 합류하여 N1QL에서 금을 만드는 데 도움을 주었습니다. 그는 여러 개의 특허를 보유하고 있으며 직접 오픈 소스 프로젝트를 저술하기도 했습니다.

댓글 남기기