롤 토토
지정된 SQL 명령count행.
만약에read_onlyistrue, 명령은 읽기 전용이어야하며 실행해야합니다
오버 헤드가 다소 줄어 듭니다.
이 함수는 연결된 A에서만 호출 할 수 있습니다 절차.
ifcount명령은 0입니다 적용되는 모든 행에 대해 실행됩니다. 만약에count| 0보다 크면count행이 검색됩니다. a와 마찬가지로 카운트에 도달하면 실행이 중지됩니다.Limit쿼리에 대한 조항. 을 위한 예,
롤 토토 ( "선택 * From Foo", True, 5);
테이블에서 최대 5 행을 검색합니다. 그런 것입니다 한계는 명령이 실제로 행을 반환 할 때만 유효합니다. 예를 들어,
롤 토토 ( "foo에 삽입 *에서 선택 *에서 삽입", false, 5);
모든 행을 삽입합니다bar, 무시count매개 변수. 하지만, 와 함께
롤 토토 ( "foo에 삽입 * 삽입 *에서 bar returning *", false, 5);
실행이 중지되므로 최대 5 행이 삽입됩니다. 다섯 번째 이후반환결과 행입니다 검색.
하나의 문자열로 여러 명령을 전달할 수 있지만 나중에
명령은 이전의 객체 생성에 의존 할 수 없습니다.
문자열 전체가 구문 분석하고 계획되기 때문에 문자열
실행이 시작되기 전에.롤 토토
명령의 결과를 반환합니다
마지막으로 실행되었습니다. 그만큼count한계가 적용됩니다
각 명령에 별도로 (마지막 결과 만
실제로 반환됩니다). 한계는 숨겨진 곳에 적용되지 않습니다
규칙에 의해 생성 된 명령.
언제read_onlyis거짓, 롤 토토
명령 카운터를 증가시키고 새로 계산합니다스냅 샷에서 각 명령을 실행하기 전에
끈. 전류가 있으면 실제로 스냅 샷이 변경되지 않습니다
트랜잭션 격리 수준은SERIALIZABLE또는반복 가능
읽다하지만저지른 읽기모드
스냅 샷 업데이트를 통해 각 명령은 결과를 볼 수 있습니다.
다른 세션에서 새로 커밋 된 거래. 이것은
명령이 수정 될 때 일관된 동작에 필수적입니다
데이터베이스.
언제read_onlyistrue, 롤 토토
스냅 샷 또는 명령 카운터를 업데이트하지 않습니다.
평범한만 허용select명령
명령 문자열에 나타납니다. 명령은
주변 쿼리를 위해 이전에 설정된 스냅 샷. 이것
실행 모드는
명령 당 오버 헤드 제거. 또한 진정으로 허용안정적인빌드 할 기능 : 이후
연속적인 실행은 모두 동일한 스냅 샷을 사용할 것입니다.
결과에 변화가 없습니다.
일반적으로 읽기 전용과 읽기 쓰기를 혼합하는 것은 현명하지 않습니다 SPI를 사용한 단일 함수 내 명령; 그 결과가 발생할 수 있습니다 읽기 전용 쿼리는 그렇지 않기 때문에 매우 혼란스러운 동작 읽기 쓰기가 수행 한 데이터베이스 업데이트 결과를 확인하십시오. 쿼리.
(마지막) 명령이있는 실제 행 수 실행 된 Global Variable에서 실행 된SPI_PROCESSED. 함수의 반환 값 인 경우 이다spi_ok_select, spi_ok_insert_returning, spi_ok_delete_returning또는spi_ok_update_returning, 그런 다음 사용할 수 있습니다 글로벌 포인터spitupletable *spi_tuptable결과 행에 액세스하려면. 일부 유틸리티 명령 (예 :설명)도 반환합니다 행 세트 및spi_tuptable이 경우에도 결과.
구조spitupletableIS 이렇게 정의 됨 :
typedef struct MemoryContext tuptabcxt; / * 결과 테이블의 메모리 컨텍스트 */ UINT32 할당; / * 할당 된 vals 수 */ UINT32 무료; / * 무료 VAL의 수 */ tupledesc tupdesc; / * 행 설명자 */ heppuple *vals; / * 행 */ spitupletable;
vals는 다양한 포인터입니다 줄. (유효한 항목의 수는에 의해 제공됩니다.SPI_PROCESSED.)Tupdesc전달할 수있는 행 디스크립터입니다 줄을 다루는 SPI 기능.tuptabcxt, 할당및무료SPI 발신자가 사용하기위한 내부 필드입니다.
SPI_FINISH
모든 것을 해방spitupletable전류 중에 할당되었습니다
절차. 특정 결과 테이블을 일찍 자유롭게 해제 할 수 있습니다.
전화를 통해 끝났습니다SPI_FREETUPTABLE
.
명령의 실행이 성공적이면 다음 (음이 아닌) 값이 반환됩니다.
if aselect(하지만선택) 실행
if a선택실행
IF an삽입실행
if a삭제실행
IF an업데이트실행
IF an리턴 삽입실행
if a반환 삭제실행
IF an업데이트 반환실행
유틸리티 명령 인 경우 (예 :생성 테이블) 실행
명령이 다른 종류로 다시 작성된 경우 명령 (예 :업데이트삽입) byRUL.
오류에 따라 다음 음의 값 중 하나는 다음과 같습니다 반품 :
if명령isNULL또는countis 0 미만
ifstdout에 복사또는stdin에서 복사시도되었습니다
거래 조작 명령이 시도 된 경우 (시작, 커밋, 롤백, SavePoint, 거래 준비, 준비 준비, 롤백 준비또는 모든 변형
명령 유형을 알 수없는 경우 (발생하지 않아야합니다)
연결되지 않은 절차에서 호출 된 경우