Phần này mô tả các chi tiết cấp thấp của giao diện với hàm kích kèo bóng đá c1. Thông tin này chỉ cần thiết khi viết các chức năng kích kèo bóng đá c1 trong C. Nếu bạn đang sử dụng ngôn ngữ cấp cao hơn thì những chi tiết này sẽ được xử lý cho bạn. Trong hầu hết các trường hợp, bạn nên xem xét sử dụng một ngôn ngữ thủ tục trước khi viết trình kích kèo bóng đá c1 của mình trong C. Tài liệu của từng ngôn ngữ thủ tục giải thích cách viết trình kích kèo bóng đá c1 bằng ngôn ngữ đó.
11509_11542Phiên bản 1KhănGiao diện Trình quản lý kèo bóng đá c1 năng.
Khi một hàm được gọi bởi Trình quản lý kích kèo bóng đá c1, nó không được thông qua bất kỳ đối số bình thường nào, nhưng nó được thông quabối cảnhHồiCon trỏ trỏ đến ATriggerData
Cấu trúc. Các chức năng C có thể kiểm tra xem chúng có được gọi từ Trình quản lý kích kèo bóng đá c1 hay không bằng cách thực thi macro:
được gọi là_as_trigger (fcinfo)
Mở rộng thành:
((fcinfo)- bối cảnh!
Nếu điều này trả về đúng, thì việc đúc là an toànfcinfo- bối cảnh
đến loạiTriggerData *
và sử dụng kèo bóng đá c1 điểm đếnTriggerData
Cấu trúc. Hàm phảikhôngthay đổiTriggerData
Cấu trúc hoặc bất kỳ dữ liệu nào mà nó trỏ đến.
struct TriggerData
được xác định kèo bóng đá c1Lệnh/Trigger.h
:
12761_13145
trong đó kèo bóng đá c1 thành viên được xác định như sau:
loại
luôn luônT_TriggerData
.
TG_Event
Mô tả sự kiện mà hàm được gọi là. Bạn có thể sử dụng kèo bóng đá c1 macro sau để kiểm traTG_Event
:
Trigger_fired_before (tg_event)
Trả về đúng nếu kích kèo bóng đá c1 được kích kèo bóng đá c1 trước khi kèo bóng đá c1 động.
Trigger_fired_after (TG_Event)
Trả về đúng nếu kích kèo bóng đá c1 được kích kèo bóng đá c1 sau khi kèo bóng đá c1 động.
Trigger_fired_instead (TG_Event)
Trả về đúng nếu kích kèo bóng đá c1 được kích kèo bóng đá c1 thay vì kèo bóng đá c1 động.
Trigger_fired_for_row (tg_event)
Trả về đúng nếu kích kèo bóng đá c1 được kích kèo bóng đá c1 cho một sự kiện cấp hàng.
Trigger_fired_for_statement (TG_EVENT)
Trả về đúng nếu kích kèo bóng đá c1 được kích kèo bóng đá c1 cho một sự kiện cấp câu lệnh.
Trigger_fired_by_insert (tg_event)
Trả về đúng nếu kích kèo bóng đá c1 được bắn bởi mộtChèn
lệnh.
Trigger_fired_by_update (tg_event)
Trả về đúng nếu kích kèo bóng đá c1 được bắn bởi mộtCập nhật
lệnh.
Trigger_fired_by_delete (TG_EVENT)
Trả về đúng nếu kích kèo bóng đá c1 được bắn bởiXóa
lệnh.
Trigger_fired_by_truncate (TG_EVENT)
Trả về đúng nếu kích kèo bóng đá c1 được bắn bởi Acắt ngắn
lệnh.
TG_RELATION
Một con trỏ tới một cấu trúc mô tả mối quan hệ mà kích kèo bóng đá c1 đã bắn cho. Nhìn vàoUtils/rel.h
Để biết chi tiết về cấu trúc này. Những điều thú vị nhất làtg_relation- rd_att
(mô tả của kèo bóng đá c1 bộ dữ liệu quan hệ) vàtg_relation- rd_rel- relname
(tên quan hệ; loại không phảichar*
nhưngĐược đặt tên
; sử dụngSPI_GetRelName (TG_Relation)
để nhậnchar*
Nếu bạn cần một bản sao của tên).
tg_trigtuple
Một con trỏ đến hàng mà kích kèo bóng đá c1 đã được bắn. Đây là hàng được chèn, cập nhật hoặc xóa. Nếu kích kèo bóng đá c1 này được bắn cho mộtChèn
hoặcXóa
Vậy thì đây là những gì bạn nên trả lại từ chức năng nếu bạn không muốn thay thế hàng bằng một hàng khác (kèo bóng đá c1 trường hợpChèn
) hoặc bỏ qua kèo bóng đá c1 động. Đối với các trình kích kèo bóng đá c1 trên các bảng nước ngoài, các giá trị của các cột hệ thống ở đây không được xác định.
tg_newtuple
Một con trỏ tới phiên bản mới của hàng, nếu kích kèo bóng đá c1 được kích kèo bóng đá c1 cho mộtCập nhật
vànull
Nếu nó dành choChèn
hoặc AXóa
. Đây là những gì bạn phải trả lại từ kèo bóng đá c1 năng nếu sự kiện làCập nhật
Và bạn không muốn thay thế hàng này bằng một hoặc bỏ qua thao tác. Đối với các trình kích kèo bóng đá c1 trên các bảng nước ngoài, các giá trị của các cột hệ thống ở đây không được xác định.
tg_trigger
Một con trỏ tới một cấu trúc loạiTrigger
, được xác định kèo bóng đá c1Utils/Reltrigger.h
:
Typedef Struct Trigger Oid tgoid; char *tgname; Oid tgfoid; int16 tgtype; char tgenables; Bool TgisInalal; Oid tgconstrrelid; Oid tgconstrindid; Oid tgconstraint; bool tgdeferable; bool tginitdeferred; int16 tgnargs; int16 tgnattr; int16 *tgattr; char ** tgargs; char *tgqual; char *tgoldtable; char *tgnewtable; Cò súng;
WHEREtgname
là tên của bộ kích kèo bóng đá c1,TGNARGS
là số lượng đối số kèo bóng đá c1TGARGS
vàTGARGS
là một mảng kèo bóng đá c1 con trỏ cho kèo bóng đá c1 đối số được chỉ định trongTạo Trigger
Tuyên bố. kèo bóng đá c1 thành viên khác chỉ sử dụng nội bộ.
tg_trigtupleBuf
bộ đệm chứatg_trigtuple
hoặckhông hợp lệ
Nếu không có tuple như vậy hoặc nó không được lưu trữ kèo bóng đá c1 bộ đệm đĩa.
TG_NewtupleBuf
bộ đệm chứatg_newtuple
hoặckhông hợp lệ
Nếu không có tuple như vậy hoặc nó không được lưu trữ kèo bóng đá c1 bộ đệm đĩa.
tg_oldtable
Một con trỏ tới cấu trúc loạituplestorestate
19895_19954tg_relation
hoặc Anull
Con trỏ nếu không cóBảng cũ
Mối quan hệ chuyển tiếp.
TG_Newtable
Một con trỏ tới cấu trúc loạituplestorestate
chứa số không hoặc nhiều hàng ở định dạng được chỉ định bởiTG_RELATION
hoặc Anull
Con trỏ nếu không cóBảng mới
Mối quan hệ chuyển tiếp.
Để cho phép kèo bóng đá c1 truy vấn được cấp qua SPI để tham chiếu kèo bóng đá c1 bảng chuyển tiếp, xemPostgreSQL: Tài tỷ lệ kèo.
Hàm kích kèo bóng đá c1 phải trả về ACon trỏ hoặc A
null
Con trỏ (không21005_21047isnull
Đúng). Hãy cẩn thận để trả lạitg_trigtuple
hoặctg_newtuple
, khi thích hợp, nếu bạn không muốn sửa đổi hàng đang được vận hành.