이전 블로그 자바스크립트 사용자 정의 함수의 새로운 기능을 소개합니다.
이제 좀 더 자세히 살펴보겠습니다.
JavaScript 코드 내에서 N1QL 문을 실행하는 기본 메커니즘부터 시작하겠습니다.
자바스크립트의 N1QL
JavaScript 함수 내에서 N1QL 문을 실행하는 방법에는 두 가지가 있습니다. 적절한 이름의 함수를 직접 호출하거나 JavaScript 컴파일러가 내장된 N1QL 문을 감지하여 해당 N1QL() 호출을 생성하도록 하는 것입니다.
각 방법을 아래에서 살펴봅니다.
사전 요구 사항 예시
다음 섹션에는 여러 가지 예가 포함되어 있습니다.
이러한 기능은 완벽하게 작동하지만 이를 실행하려면 다음이 필요합니다:
-
- 버전 7.1 이상의 Couchbase 클러스터
- 라는 버킷을 b1
- 의 기본 인덱스 b1
- 라는 라이브러리에 각 함수를 만들려면 udfblog및
- 를 사용하여 해당 N1QL UDF를 생성합니다.
웹 콘솔의 UDF 탭을 사용하여 함수 및 UDF를 만들 수 있습니다.
N1QL() 함수
그리고 N1QL() 함수는 문자열 형식의 문과 자리 표시자 값을 포함하는 두 번째 선택적 매개변수를 받습니다.
매개 변수를 받지 않고 값을 반환하지 않는 N1QL 문을 실행하는 데 필요한 것은 다음과 같습니다:
및 해당 UDF:
1 |
만들기 기능 doInsert() 언어 자바스크립트 AS "doInsert" AT "udfblog" |
(함수 자체가 값을 반환하지 않는다는 점은 잠시 잊으세요. 또한 이미지로 표시된 코드 스니펫은 워드프레스에서 텍스트로 렌더링하는 것을 좋아하지 않아서 죄송합니다.)
언제 N1QL() 함수가 호출되면 첫 번째 매개변수로 전달된 문이 구문 분석, 계획 및 실행됩니다.
문이 값을 반환하지 않으면 N1QL 함수가 반환될 때까지 문이 실행을 완료한 것입니다(이 특별한 경우에는 버킷 b1 가 존재하고 키 k1 가 아직 존재하지 않으면 새 문서가 삽입됩니다.
ESQL/C 또는 PL/SQL에 익숙한 경우 즉시 실행 문, 즉 N1QL() 함수는 자바스크립트 UDF에 해당하는 함수입니다.
값이 반환되면 반환 값은 N1QL() 는 자바스크립트 이터레이터로, 나중에 살펴보겠지만 한 번에 하나씩 값을 수집하는 데 사용할 수 있습니다.
동적 N1QL
물론, 다른 용도로는 N1QL() 함수는 예를 들어 문자열을 연결하여 동적으로 문을 작성하는 것입니다:
이는 완벽하게 합법적이지만, N1QL(또는 더 일반적으로 SQL) 인젝션의 위험을 고려할 때 이러한 기법을 사용하지 않는 것이 가장 좋습니다.
대신 자리 표시자를 사용합니다.
자바스크립트 트랜스파일러
N1QL을 실행하는 두 번째 방법은 함수 본문에 N1QL 문을 삽입하는 대신 트랜스파일러(JavaScript 컴파일러의 구성 요소)가 이를 감지하여 백그라운드에서 올바른 N1QL 호출을 빌드하도록 하는 것입니다:
이렇게 하면 정적 문을 즉시 실행하는 데 매우 편리하며 함수가 갑자기 훨씬 더 가독성이 높아집니다.
N1QL 문 자리 표시자 및 자리 표시자 값
동적 N1QL 생성과 관련된 위험을 피하는 가장 좋은 방법은 명명된 자리 표시자 또는 위치 표시자를 사용하고 실행 시 자리 표시자 값을 전달하는 정적 문을 사용하는 것입니다.
N1QL() 함수
사용 시 N1QL() 함수에서 다음과 같이 두 번째 선택적 인수에 값을 전달하면 이 작업을 수행할 수 있습니다.
위치 매개변수
이 경우는 값 배열을 전달하여 처리합니다:
1 2 3 |
함수 doInsert() { var q = N1QL("삽입 B1 값에 삽입(\"k4\", {\"f1\": $1})", [4]); } |
명명된 매개변수
이 경우 필드 이름이 매개변수 이름과 일치하는 객체를 전달하면 됩니다:
1 2 3 |
함수 doInsert() { var q = N1QL("삽입 B1 값에 삽입(\"k5\", {\"f1\": $p1})", { p1: 5}); } |
위치 매개변수와 명명된 매개변수를 혼합할 수 없습니다. N1QL() 함수는 배열 또는 객체 중 하나만 허용합니다.
에 전달된 값은 N1QL() 는 리터럴일 필요가 없으며, 변수로 배열과 객체를 구성하거나 배열 또는 객체 변수를 전달할 수 있습니다:
1 2 3 4 |
함수 doInsert() { let p1 = 6; var q = N1QL("삽입 B1 값에 삽입(\"k6\", {\"f1\": $1})", [p1]); } |
또는
1 2 3 4 |
함수 doInsert() { let p1 = [7]; var q = N1QL("삽입 B1 값에 삽입(\"k7\", {\"f1\": $1})", p1); } |
트랜스파일러
트랜스파일러를 사용하면 명명된 매개변수만 사용할 수 있지만, 이미 선언된 변수를 사용하는 것만큼이나 간단합니다:
1 2 3 4 |
함수 doInsert() { let p1 = 8; var q = 삽입 에 b1 값("k8", {"f1": $p1}); } |
물론 함수 매개변수를 직접 사용할 수도 있습니다:
1 2 3 |
함수 doInsert(p1) { var q = 삽입 에 b1 값("k9", {"k1": $p1}); } |
그리고 해당 N1QL UDF:
1 |
만들기 기능 doInsert(p1) 언어 자바스크립트 AS "doInsert" AT "udfblog" |
결론
자바스크립트 함수 내에서 N1QL을 사용하는 방법에 대한 기본 예제를 다루었습니다. N1QL() 함수 호출과 N1QL 문을 자바스크립트에 직접 삽입하는 방법, 이름 및 위치 매개변수를 사용하는 방법을 보여줍니다.
다음 블로그 게시물에서는 반복문과 데이터 조작문에 대해 다룰 예정입니다.