Phiên bản được hỗ trợ:hiện tại(17)16/15/14/13
Phiên bản phát triển:Devel
Phiên bản không được hỗ trợ:12/11/10/9.6/9.5/9.4/9.3/9.2/9.1/9.0/8.4/8.3/8.2/8.1/8.0/7.4/7.3/7.2/7.1
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng tỷ lệ kèo bóng đá tối nay trang chohiện tạiPhiên bản hoặc một trong tỷ lệ kèo bóng đá tối nay phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

35.9. tỷ lệ kèo bóng đá tối nay ngữ c

Các chức năng do người dùng xác định có thể được viết bằng C (hoặc tỷ lệ kèo bóng đá tối nay ngữ mà"ctỷ lệ kèo bóng đá tối nay từ"Nội bộ"tỷ lệ kèo bóng đá tối nay - Mã hóa thực tế

Hai quy ước gọi khác nhau hiện đang được sử dụng cho c"Phiên bản 1"quy ước gọi được chỉ định bằng cách viết Apg_function_info_v1 ()Cuộc gọi macro cho tỷ lệ kèo bóng đá tối nay,"Phiên bản 0") Hàm. tỷ lệ kèo bóng đá tối nay ngữTạo tỷ lệ kèo bóng đá tối nayCTrong cả hai trường hợp. tỷ lệ kèo bóng đá tối nay chức năng kiểu cũ

35.9.1. Tải động

Lần đầu tiên tỷ lệ kèo bóng đá tối nay do người dùng định nghĩa trong một cụ thểTạo tỷ lệ kèo bóng đá tối naycho a

Thuật toán sau được sử dụng để định vị đối tượng chia sẻTạolệnh:

  1. Nếu tên là đường dẫn tuyệt đối, tệp đã cho là

  2. Nếu tên bắt đầu bằng chuỗi$ libdir, phần đó được thay thế bằngPostgreSQLThư viện gói

  3. Nếu tên không chứa phần thư mục, tệpDynamic_l Library_path.

  4. Nếu không (tệp không được tìm thấy trong đường dẫn hoặc nó

Nếu chuỗi này không hoạt động, chia sẻ dành riêng cho nền tảng.so) được gắn vào tên đã cho và cái này

Nên định vị tỷ lệ kèo bóng đá tối nay thư viện được chia sẻ$ libdirhoặc thông qua động lực$ libdirCó thể tìm thấy viết tắt củapg_config.

ID người dùngPostgreSQLMáy chủ chạy vì phải có thể đi qua đường dẫn đến tệpPostgresNgười dùng là tỷ lệ kèo bóng đá tối nay sai lầm phổ biến.

Trong mọi trường hợp, tên tệp được đưa ra trongTạo tỷ lệ kèo bóng đá tối nayLệnh được ghi lại theo nghĩa đen trong

Lưu ý: PostgreSQLsẽ không tự động biên dịch tỷ lệ kèo bóng đá tối nay C. Đối tượngTạo tỷ lệ kèo bóng đá tối naylệnh. Nhìn thấyPhần 35.9.6cho

Để đảm bảo rằng tỷ lệ kèo bóng đá tối nay tệp đối tượng được tải động là khôngPostgreSQLKiểm tra xem tệp có chứa"Khối ma thuật"Với sự thích hợpPostgreSQL. tỷ lệ kèo bóng đá tối nay phép thuậtPOSTGRESQL8.2. Bao gồm tỷ lệ kèo bóng đá tối nay khối ma thuật,fmgr.h:

#ifdef pg_module_magic

The#ifdefCó thể bỏ qua kiểm tra nếuPOSTGRESQLPhát hành.

Sau khi nó được sử dụng lần đầu tiên,

Tùy chọn, tỷ lệ kèo bóng đá tối nay tệp được tải động có thể chứa_pg_init, Đó là_pg_fini, tỷ lệ kèo bóng đá tối nay đó sẽ được gọi_pg_finisẽ chỉ được gọi

35.9.2. tỷ lệ kèo bóng đá tối nay loại cơ sở bằng tiếng c

Để biết cách viết các chức năng tỷ lệ kèo bóng đá tối nay ngữ C, bạn cần biếtPostgreSQLnội bộPOSTGRESQLcoi loại cơ sở là"Blob of Memory". Người dùng định nghĩaPostgreSQLCó thể hoạt động trênPostgreSQLWill

tỷ lệ kèo bóng đá tối nay loại cơ sở có thể có một trong ba định dạng nội bộ:

  • Pass by giá trị, độ dài cố định

  • Pass by tham chiếu, độ dài cố định

  • Truyền qua tham chiếu, độ dài biến

tỷ lệ kèo bóng đá tối nay loại giá trị chỉ có thể có chiều dài 1, 2 hoặc 4 byte (cũngsizeof (mốc dữ liệu)là 8 trênLongLoại nguy hiểmintLoại là 4 byte trên hầu hết tỷ lệ kèo bóng đá tối nay UnixINT4Loại trên máy Unix có thể là:

/ * số nguyên 4 byte, được truyền bởi giá trị */

Mặt khác, tỷ lệ kèo bóng đá tối nay loại có độ dài cố định có thểPostgreSQLloại:

/ * Cấu trúc 16 byte, được truyền qua tham chiếu */

Chỉ có thể sử dụng tỷ lệ kèo bóng đá tối nay con trỏ như vậy khi chuyển chúng vàoPostgreSQLtỷ lệ kèo bóng đá tối nay. Để trả về giá trị của một loại như vậy, hãy phân bổ quyềnPalloC, điền vàopallocVà chỉ cần trả lại con trỏ cho

Cuối cùng, tất cả tỷ lệ kèo bóng đá tối nay loại có độ dài thay đổi cũng phải được truyền quaset_varsize; Không bao giờ đặt trường này

tỷ lệ kèo bóng đá tối nay điểm quan trọng khác là tránh để lại bất kỳ

Cảnh báo

không bao giờSửa đổi nội dung của giá trị đầu vào ngang qua.Phần.

Ví dụ, chúng ta có thể xác định loạiTextnhư sau:

Typedef Struct

Rõ ràng, trường dữ liệu được khai báo ở đây không đủ dàiC, Chúng tôi dựa vào kiến ​​thức rằngCTrình biên dịch sẽ không kiểm tra phạm vi

Khi thao tác tỷ lệ kèo bóng đá tối nay loại có độ dài biến, chúng ta phải cẩn thậnTextcấu trúc, chúng ta có thể sử dụng

#include "Postgres.h"

Varhdrszgiống nhưsizeof (int32), nhưng nó được coi là phong cách tốt đểVarhdrszđể tham khảophảiBEset_varsizeMacro, không

Bảng 35-1Chỉ định loại c tương ứng với loại SQL khiPostgreSQL. The"Được xác định trong"Cột đưa ra tệp tiêu đề màPostgres.hĐầu tiên trong bất kỳ tệp nguồn nào, vì nó

Bảng 35-1. tỷ lệ kèo bóng đá tối nay loại C tương đương cho SQL tích hợp

SQL Loại C Loại được xác định trong
Abstime Tuyệt đối Utils/nabstime.h
Boolean bool Postgres.h(có thể
Box Box* UTILS/GEO_DECLS.H
bytea bytea* Postgres.h
"Char" char (trình biên dịch tích hợp)
ký tự bpchar* Postgres.h
CID CommandID Postgres.h
ngày dateadt Utils/date.h
SmallInt(INT2) int2hoặcINT16 Postgres.h
int2Vector int2Vector* Postgres.h
Số nguyên(INT4) INT4hoặcINT32 Postgres.h
Real(float4) float4* Postgres.h
Double Precision(float8) float8* Postgres.h
Khoảng Khoảng* DataType/Timestamp.h
LSEG lseg* UTILS/GEO_DECLS.H
tên tên Postgres.h
OID oid Postgres.h
oidvector oidvector* Postgres.h
đường dẫn đường dẫn* UTILS/GEO_DECLS.H
điểm điểm* UTILS/GEO_DECLS.H
RegProc RegProc Postgres.h
Relime Relativetime Utils/nabstime.h
Text Text* Postgres.h
TID itempulum lưu trữ/itemptr.h
Thời gian Timeadt Utils/date.h
Thời gian với múi giờ Timetzadt Utils/date.h
Timestamp Timestamp* DataType/Timestamp.h
Tinterval Timeinterval Utils/nabstime.h
Varchar Varchar* Postgres.h
XID Giao dịchID Postgres.h

Bây giờ chúng tôi đã vượt qua tất cả tỷ lệ kèo bóng đá tối nay cấu trúc có thể

35.9.3.

Chúng tôi trình bày"Kiểu cũ"Gọi quy ước trước - mặc dù cách tiếp cận này hiện là

Đây là tỷ lệ kèo bóng đá tối nay số ví dụ:

#include "Postgres.h"

Giả sử rằng mã trên đã được chuẩn bị trong tệpfuncs.cvà được biên dịch thành tỷ lệ kèo bóng đá tối nay chia sẻPOSTGRESQLvới tỷ lệ kèo bóng đá tối nay lệnh như thế này:

Tạo tỷ lệ kèo bóng đá tối nay add_one (số nguyên) Trả về số nguyênThư mục/funcs ',' add_one 'Thư mục/funcs ',' add_one_float8 'Thư mục/funcs ',' makepoint 'Thư mục/funcs ',' copytext 'Thư mục/funcs ',' concat_text '

ở đây,Thư mụcPhía trênPOSTGRESQLThư mục hướng dẫn,'funcs'trongASmệnh đề, sau khi đã thêmThư mụcđến đường dẫn tìm kiếm. Trong bất kỳ.sohoặc.SL.)

Lưu ý rằng chúng tôi đã chỉ định tỷ lệ kèo bóng đá tối nay chức năng là"nghiêm ngặt", nghĩa là hệ thống nên

Mặc dù quy ước gọi này rất đơn giản, nhưng nó không phảiintCách này. Ngoài ra, không có cách nào đơn giản để

35.9.4.

Quy ước gọi phiên bản-1 dựa trên tỷ lệ kèo bóng đá tối nay macro để

Datum funcname (pg_function_args)

Ngoài ra, cuộc gọi macro:

pg_function_info_v1 (funcname);

phải xuất hiện trong cùng tỷ lệ kèo bóng đá tối nay tệp nguồn. (Thông thường, nóNội bộ-LanguagePostgreSQLGiả sử rằng tất cả tỷ lệ kèo bóng đá tối nay chức năng nội bộ đều sử dụng phiên bản-1

Trong tỷ lệ kèo bóng đá tối nay phiên bản-1, mỗi đối số thực tế được tìm nạppg_getarg_xxx()Macro tương ứng vớipg_return_xxx()Macro cho loại trả về.pg_getarg_xxx()lấy đối số của nópg_return_xxx()lấy đối số của nó

Ở đây chúng tôi hiển thị tỷ lệ kèo bóng đá tối nay chức năng giống như trên, được mã hóa trong phiên bản-1

#include "Postgres.h"

TheTạo tỷ lệ kèo bóng đá tối naytỷ lệ kèo bóng đá tối nay lệnh là

Thoạt nhìn, tỷ lệ kèo bóng đá tối nay quy ước mã hóa phiên bản-1 có thểadd_one_float8, chúng ta không còn cần phải biếtfloat8là loại tham chiếu qua.GetArgMacro cho tỷ lệ kèo bóng đá tối nay loại có độ dài thay đổi cho phép hiệu quả hơn"Nướng"(nén hoặc

Một cải tiến lớn về tỷ lệ kèo bóng đá tối nay chức năng phiên bản-1 tốt hơnpg_argisnull (n)Cho phép một tỷ lệ kèo bóng đá tối nay kiểm tra"nghiêm ngặt".) Như vớipg_getarg_xxx()macro, tỷ lệ kèo bóng đá tối nay đối số đầu vàopg_getarg_xxx()Cho đến khi người ta xác minh rằngpg_return_null (); Điều này hoạt động trong

tỷ lệ kèo bóng đá tối nay tùy chọn khác được cung cấp trong giao diện kiểu mới là haipg_getarg_xxx()macro. Cái đầu tiên trong số này,pg_getarg_xxx_copy (), đảm bảo trả lại apg_getarg_xxx_copy ()macro đảm bảo apg_getarg_xxx_slice ()macro lấy"Bên ngoài". (Loại lưu trữThay đổiTableNameCột thay đổicolnameĐặt lưu trữStorAgetype.StorAgetypelà tỷ lệ kèo bóng đá tối nay trongtrơn,Bên ngoài,mở rộnghoặcchính.)

Cuối cùng, tỷ lệ kèo bóng đá tối nay quy ước gọi chức năng phiên bản-1 làm cho nóPhần 35.9.9) vàChương) và Trình xử lý cuộc gọi bằng tỷ lệ kèo bóng đá tối nay ngữ thủ tục (Chương 49). Mã phiên bản-1 cũng nhiều hơnsrc/backend/utils/fmgr/readmein

35.9.5.

Trước khi chúng ta chuyển sang tỷ lệ kèo bóng đá tối nay chủ đề nâng cao hơn, chúng ta nênPOSTGRESQLCác hàm tỷ lệ kèo bóng đá tối nay ngữ c. Trong khi nóPostgreSQL, Điều này

tỷ lệ kèo bóng đá tối nay quy tắc cơ bản để viết và xây dựng tỷ lệ kèo bóng đá tối nay chức năng C là

  • Sử dụngpg_configĐể tìm ra nơiPostgreSQLtỷ lệ kèo bóng đá tối nay tệp tiêu đề máy chủ là

  • biên dịch và liên kết mã của bạn để có thểPOSTGRESQLLuôn yêu cầu đặc biệtPhần 35.9.6Để có lời giải thích chi tiết về cách thực hiện

  • Hãy nhớ xác định A"Phép thuậtĐối với thư viện chia sẻ của bạn, như được mô tả trongPhần.

  • Khi phân bổ bộ nhớ, hãy sử dụngPostgreSQLtỷ lệ kèo bóng đá tối nayPalloCPFREEThay vì C tương ứngmallocmiễn phí. Bộ nhớ được phân bổ bởiPalloCsẽ được giải phóng

  • Luôn bằng không tỷ lệ kèo bóng đá tối nay byte của cấu trúc của bạn bằng cách sử dụngmemset(hoặc phân bổ chúng bằngPalloC0Ở nơi đầu tiên).

  • Hầu hết tỷ lệ kèo bóng đá tối nay bên trongPostgreSQLtỷ lệ kèo bóng đá tối nay loại được khai báo trongPostgres.h, trong khi tỷ lệ kèo bóng đá tối nayPG_FUNCTION_ARGS, v.v.)fmgr.h, vì vậy bạn sẽ cần phải bao gồm tạiPostgres.h Đầu tiên, trước bất kỳPostgres.hcũng sẽ bao gồmelog.hpalloc.hcho bạn.

  • tên biểu tượng được xác định trong tỷ lệ kèo bóng đá tối nay tệp đối tượng không đượcPOSTGRESQLMáy chủ

35.9.6. Biên soạn

Trước khi bạn có thể sử dụngPOSTGRESQLtỷ lệ kèo bóng đá tối nay chức năng mở rộng được viết trongThư viện chia sẻCần phải có

Để biết thông tin vượt ra ngoài những gì có trong phần này bạnCCvà Trình chỉnh sửa liên kết,LD. Ngoài ra,PostgreSQLMã nguồn chứa tỷ lệ kèo bóng đá tối nay sốĐóng gópThư mục. Nếu bạn dựa vào những ví dụ này, bạn sẽ làmPostgreSQLTuy nhiên, mã nguồn.

Tạo thư viện chia sẻ thường tương tự như liên kếtMã độc lập vị trí(pic), có nghĩa là về mặt khái niệm là chúng

Trong tỷ lệ kèo bóng đá tối nay ví dụ sau, chúng tôi cho rằng mã nguồn của bạn làfoo.cvà chúng tôi sẽ tạo tỷ lệ kèo bóng đá tối nayfoo.so. tỷ lệ kèo bóng đá tối nayfoo.otrừ khi có ghi chú khác. tỷ lệ kèo bóng đá tối nay thư viện được chia sẻ

FreeBSD

Cờ trình biên dịch để tạopic-FPIC.-shared.

GCC -FPIC -C FOO.C

Điều này được áp dụng kể từ phiên bản 3.0 củaFreeBSD.

HP-UX

Cờ trình biên dịch của trình biên dịch hệ thống để tạopic+Z. Khi sử dụngGCCĐó là-FPIC. Cờ liên kết cho tỷ lệ kèo bóng đá tối nay thư viện được chia sẻ-B. Vì thế:

cc +z -c foo.c

hoặc:

GCC -FPIC -C FOO.C

và sau đó:

ld -b -o foo.sl foo.o

HP-UXSử dụng.SLđể chia sẻ

IRIX

piclà mặc định,-shared.

CC -C FOO.C
Linux

Cờ trình biên dịch để tạopic-FPIC.-shared. tỷ lệ kèo bóng đá tối nay ví dụ hoàn chỉnh trông

cc -fpic -c foo.c
Mac OS X

Đây là một ví dụ. Nó giả định tỷ lệ kèo bóng đá tối nay công cụ nhà phát triển là

CC -C FOO.C
NetBSD

Cờ trình biên dịch để tạopic-FPIC.elfHệ thống, The-sharedISld -bsharableIS

GCC -FPIC -C FOO.C
OpenBSD

Cờ trình biên dịch để tạopic-FPIC.ld -bsharableđược sử dụng để liên kết

GCC -FPIC -C FOO.C
Solaris

Cờ trình biên dịch để tạopic-KPICVới trình biên dịch mặt trời và-FPICvớiGCC. Để liên kết chia sẻ-gvới trình biên dịch hoặc thay thế-sharedvớiGCC.

cc -kpic -c foo.c

hoặc

GCC -FPIC -C FOO.C
TRU64 UNIX

piclà mặc định,LDvới tỷ lệ kèo bóng đá tối nay tùy chọn đặc biệt được sử dụng để thực hiện

CC -C FOO.C

Quy trình tương tự được sử dụng với GCC thay vì

Unixware

Cờ trình biên dịch để tạopic-K picvới trình biên dịch SCO và-FPICvớiGCC. Để liên kết chia sẻ-gVới trình biên dịch SCO và-sharedvớiGCC.

cc -k pic -c foo.c

hoặc

GCC -FPIC -C FOO.C

Tip:Nếu điều này quá phức tạp đối với bạn, bạngnu libtool,,

Tệp thư viện chia sẻ kết quả sau đó có thể được tải vàoPOSTGRESQL. Khi chỉ địnhTạo tỷ lệ kèo bóng đá tối nayLệnh, người ta phải đặt tên cho tệp thư viện được chia sẻ,.sohoặc.SL) có thểTạo tỷ lệ kèo bóng đá tối naylệnh và thông thường nên được bỏ qua

Tham khảo lạiPhầnVề nơi máy chủ mong đợi tìm được chia sẻ

35.9.7.

tỷ lệ kèo bóng đá tối nay loại tổng hợp không có bố cục cố định như CPostgreSQLcung cấp một tỷ lệ kèo bóng đá tối nay

Giả sử chúng ta muốn viết một tỷ lệ kèo bóng đá tối nay để trả lời truy vấn:

Chọn Tên, C_OverPaid (EMP, 1500)

Sử dụng quy ước gọi phiên bản 0, chúng ta có thể xác địnhc_overpaidAs:

#include "Postgres.h"

Trong mã hóa phiên bản-1, ở trên sẽ trông như thế này:

#include "Postgres.h"

GetAttributionByNamePostgreSQLtỷ lệ kèo bóng đá tối nay hệ thốngHeaptupleHeaderđược chuyển vào tỷ lệ kèo bóng đá tối nay, tênGetAttributionByNameTrả về ADatumGiá trị mà bạn có thể chuyển đổi sang dữ liệu phù hợpDatumgetxxx()Macro. Lưu ý rằng giá trị trả về là vô nghĩa nếu null

Ngoài ra còn cóGetAttributionByNum, chọn mục tiêu

Lệnh sau tuyên bố tỷ lệ kèo bóng đá tối nayc_overpaidTrong SQL:

Tạo tỷ lệ kèo bóng đá tối nay c_overpaid (EMP, Integer) Trả về BooleanThư mục/funcs ',' c_overpaid '

Thông báo chúng tôi đã sử dụngnghiêm ngặtsao cho

35.9.8.

Để trả lại giá trị loại hoặc loại tổng hợp từ tỷ lệ kèo bóng đá tối nay ngữ c

#include "funcapi.h"

Có hai cách bạn có thể xây dựng giá trị dữ liệu tổng hợp"tuple"): Bạn có thểtupledescMô tả cho cấu trúc tuple. Khi làm việc với tỷ lệ kèo bóng đá tối nay mốc dữ liệu,tupledescđếnBlesstupledesc, rồi gọiheap_form_tuplecho mỗi hàng.tupledescđếntupledescgetattinmetadata, rồi gọibuildTupleFromCstringscho mỗi

Một số tỷ lệ kèo bóng đá tối nay trợ giúp có sẵn để thiết lậptupledesc. Được đề xuất

61731_61911

Vượt qua cùng tỷ lệ kèo bóng đá tối nayfcinfoCấu trúcresultTypeIDcó thể được chỉ định lànullhoặc là địa chỉ của biến cục bộ đểresulttupledescnên là địa chỉ của tỷ lệ kèo bóng đá tối nay địa phươngtupledescBiến. Kiểm tra xemTypeFunc_Composite; Nếu vậy,resulttupledescđã được lấp đầy bằngtupledesc. (Nếu nó là"Hồ sơ trả về tỷ lệ kèo bóng đá tối nay được gọi trong ngữ cảnh rằng.)

Tip: get_call_result_typeCó thể giải quyếtresultTypeIDđầu ra chủ yếu hữu ích cho

Lưu ý: GET_CALL_RESULT_TYPECó anh chị emGET_EXPR_RESULT_TYPE, màget_func_result_type, có thể được sử dụngRecordget_func_result_typeKhông thể giải quyếtGET_CALL_RESULT_TYPE.

tỷ lệ kèo bóng đá tối nay chức năng cũ hơn, hiện đang được xác định để có đượctupledescS là:

64393_64452

để nhậntupledescĐối với hàng

64595_64656

để nhậntupledescdựa trên atupledescĐối với loại cơ sở hoặc loại tổng hợp. NóRecordTuy nhiên, và nó không thể giải quyết

tỷ lệ kèo bóng đá tối nay khi bạn cótupledesc,,

65097_65144

Nếu bạn có kế hoạch làm việc với tỷ lệ kèo bóng đá tối nay mốc dữ liệu, hoặc:

AttinMetadata *tupledescgetatto

Nếu bạn có kế hoạch làm việc với chuỗi C. Nếu bạn đang viết tỷ lệ kèo bóng đá tối nayfunccallcontextCấu trúc - Sử dụngTuple_deschoặcAttinMetatrường tương ứng.

Khi làm việc với Datums, sử dụng:

65699_65776

Để xây dựng AHeaptupleNgười dùng đã cho

Khi làm việc với tỷ lệ kèo bóng đá tối nay chuỗi C, sử dụng:

65955_66032

Để xây dựng ANgười dùng đã chogiá trịlà tỷ lệ kèo bóng đá tối naygiá trịMảng phải được đặt thànhnull. tỷ lệ kèo bóng đá tối nay này sẽ cần phải

Một khi bạn đã xây dựng một tuple để trở về từ tỷ lệ kèo bóng đá tối nay của mình, nóDatum. Sử dụng:

66774_66812

Để chuyển đổi AHeaptuplethành aDatumcó thể được trả về

tỷ lệ kèo bóng đá tối nay ví dụ xuất hiện trong phần tiếp theo.

35.9.9. Trả về tỷ lệ kèo bóng đá tối nay bộ

Ngoài ra còn có API đặc biệt cung cấp hỗ trợ chofuncapi.h, như trên.

tỷ lệ kèo bóng đá tối nay hoàn trả SET (SRF) được gọi tỷ lệ kèo bóng đá tối nay lần cho mỗi mục nóSRFPhảifunccallcontextđược cung cấp để giúp kiểm soátfcinfo- flinfo- fn_extrađược sử dụng để giữ tỷ lệ kèo bóng đá tối nayfunccallcontextBên kia

Cấu trúc typedef

ANSRFSử dụng tỷ lệ kèo bóng đá tối nay sốfunccallcontextCấu trúc (vàfn_extra).

srf_is_firstcall ()

Để xác định xem tỷ lệ kèo bóng đá tối nay của bạn có được gọi cho lần đầu tiên

srf_firstcall_init ()

Để khởi tạofunccallcontext. Trên mọi cuộc gọi tỷ lệ kèo bóng đá tối nay,

srf_percall_setup ()

Để thiết lập đúng để sử dụngfunccallcontextvà xóa bất kỳ trước đó

Nếu tỷ lệ kèo bóng đá tối nay của bạn có dữ liệu để trả về, hãy sử dụng:

srf_return_next (funcctx, result)

Để trả lại cho người gọi. (result​​phải loạiDatum, hoặc là tỷ lệ kèo bóng đá tối nay

srf_return_done (funcctx)

Để dọn dẹp và kết thúcSRF.

bối cảnh bộ nhớ hiện tại khiSRFđược gọi là bối cảnh thoáng qua màPFREETrên mọi thứ bạnPalloC; nó sẽMulti_call_memory_ctxlà tỷ lệ kèo bóng đá tối nay vị trí phù hợpSRFđược hoàn thành chạy. Trong hầu hết tỷ lệ kèo bóng đá tối nay trường hợp,Multi_call_memory_ctxTrong khi làm

tỷ lệ kèo bóng đá tối nay ví dụ Pseudo-Code hoàn chỉnh trông giống như sau:

Datumkhai báo thêm khi cầnif (srf_is_firstcall ()))Mã người dùng
        Nếu trả về composite
            Build tupledesc và có lẽ là attinmetadata
        endif trả về composite
        Mã người dùngMemoryContextSwitchto (OldContext);Mã người dùngfuncctx = srf_percall_setup ();Mã người dùng/ * Đây chỉ là tỷ lệ kèo bóng đá tối nay cách chúng ta có thể kiểm tra xem chúng ta đã hoàn thành: */Mã người dùng
        có được dữ liệu kết quảsrf_return_next (funcctx, result);Mã người dùngsrf_return_done (funcctx);

tỷ lệ kèo bóng đá tối nay ví dụ hoàn chỉnh về đơn giảnSRFTrả lại tỷ lệ kèo bóng đá tối nay loại tổng hợp trông

pg_function_info_v1 (retcposite);

Một cách để khai báo tỷ lệ kèo bóng đá tối nay này trong SQL là:

Tạo loại __retComposite AS (Số nguyên F1, Số nguyên F2, Số nguyên F3);FileName',' retcposite '

Một cách khác là sử dụng tỷ lệ kèo bóng đá tối nay tham số:

Tạo hoặc thay thế tỷ lệ kèo bóng đá tối nay retcposite (tính bằng số nguyên, trong số nguyên,FileName',' retcposite '

Lưu ý rằng trong phương pháp này, loại đầu ra của tỷ lệ kèo bóng đá tối nayRecordLoại.

Thư mục78167_78186Mô -đun trong phân phối nguồn chứa nhiều ví dụ hơn về

35.9.10.

Các hàm tỷ lệ kèo bóng đá tối nay ngữ C có thể được tuyên bố để chấp nhận và trả lạiAnyEuity,AnyArray,Anynonarray,AnyenumAnyrange. Nhìn thấyPhầnĐể giải thích chi tiết hơn về đa hìnhfmgr.hĐể cho phép tỷ lệ kèo bóng đá tối nay phiên bản-1 Cget_fn_expr_rettype (fmgrinfo *flinfo)get_fn_expr_argtype (fmgrinfo *flinfo, int. Họ trả về kết quả hoặc loại đối số oid hoặckhông hợp lệNếu thông tin khôngflinfoISfcinfo- flinfo. Tham sốArgnumbằng không.GET_CALL_RESULT_TYPEcũng có thể được sử dụng như tỷ lệ kèo bóng đá tối nayget_fn_expr_rettype.

Ví dụ: giả sử chúng ta muốn viết một tỷ lệ kèo bóng đá tối nay để chấp nhận a

pg_function_info_v1 (make_array);

lệnh sau đây khai báo tỷ lệ kèo bóng đá tối naymake_arrayTrong SQL:

Tạo tỷ lệ kèo bóng đá tối nay Make_array (AnyEuity) trả về AnyArrayThư mục/funcs ',' make_array '

Có tỷ lệ kèo bóng đá tối nay biến thể đa hình chỉ có sẵn để"Any". (Lưu ý rằng loại nàyAnyEuityngoại trừ"bất kỳ"Đối số là cùng loại, cũng khôngVariadic "Any". Điều này sẽ phù hợp với tỷ lệ kèo bóng đá tối nay hoặc nhiềukhôngđược thu thập thành tỷ lệ kèo bóng đá tối nay mảng làpg_nargs ()Macro và tỷ lệ kèo bóng đá tối nay phương pháp được mô tả

35.9.11. Biến đổi

Một số cuộc gọi tỷ lệ kèo bóng đá tối nay có thể được đơn giản hóa trong quá trình lập kế hoạch dựa trên kế hoạchint4mul (n, 1)có thể được đơn giản hóa thành chỉn. Để xác định tỷ lệ kèo bóng đá tối nay cụ thể như vậyBiến đổivà đặt oid của nó vàoProtransformTrường của tỷ lệ kèo bóng đá tối nay chínhPG_PROCmục nhập. Biến đổiProtransform (Nội bộ) Trả về nội bộ. tỷ lệ kèo bóng đá tối nayfuncexpr *, là tỷ lệ kèo bóng đá tối nay hình nộmnullCon trỏ (khôngA SQL NULL).

Chúng tôi không đảm bảo rằngPostgreSQLSẽ không bao giờ gọi chính

Hiện tại, cơ sở này không được tiếp xúc với người dùng tại SQL

35.9.12.

add-ins có thể bảo lưu lwlocks và phân bổ chia sẻshared_preload_l Libries.

void requestAddInshmemSpace (int size)

từ của bạn_pg_inittỷ lệ kèo bóng đá tối nay.

LWlocks được bảo lưu bằng cách gọi:

void requestAddInlWlocks (int n)

từ_pg_init.

Để tránh tỷ lệ kèo bóng đá tối nay điều kiện chủng tộc có thể, mỗi phụ trợ nên sử dụngAddInshmeminitLockKhi kết nối và khởi tạo phân bổ chia sẻ của nó

MyStruct static *ptr = null;

35.9.13.

mặc dùPostgreSQLphụ trợ được viết bằng C, có thể ghi tỷ lệ kèo bóng đá tối nay phần mở rộng vào

  • Tất cả tỷ lệ kèo bóng đá tối nay chức năng được truy cập bởi phần phụ trợ phải trình bày C CExternLiên kết là cần thiết cho tỷ lệ kèo bóng đá tối nay chức năng được truy cập phụ trợ.

  • Bộ nhớ miễn phí bằng phương pháp phân giải thích hợp.palloc (), vì vậy hãy sử dụngpfree ()Để giải phóng nó. Sử dụng C ++XóaTrong những trường hợp như vậy sẽ

  • Ngăn chặn ngoại lệ truyền vào mã C (sử dụngExtern Ctỷ lệ kèo bóng đá tối nay). Điều này là cần thiết thậm chí-FNO-EXCEPTIONđếnnew ().

  • Nếu gọi tỷ lệ kèo bóng đá tối nay chức năng phụ trợ từ mã C ++, hãy chắc chắn rằngPod). Điều này là cần thiếtlongjmp ()Điều đó không được thanh toán đúng cách

Tóm lại, tốt nhất là đặt mã C ++ phía sau tỷ lệ kèo bóng đá tối nay bức tường củaExtern Ctỷ lệ kèo bóng đá tối nay chức năng giao diện với