<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 37.3\. 用C編寫事件觸發器函數 本節描述事件觸發器函數接口的底層細節。只有在用C編寫事件觸發器函數的時候才會需要這些信息。 如果你使用一種高級語言,那么這些細節已經為你處理了。在大多數情況下, 應該在用C編寫事件觸發器之前考慮用過程語言。每一個過程語言的文檔解釋了如何用那種語言編寫一個事件觸發器。 事件觸發器函數必須使用"version 1"函數管理接口。 當通過事件觸發器管理調用一個函數的時候,并不傳遞任何正規參數,而是傳遞一個 "context"指針指向`EventTriggerData`結構。 C函數可以檢查它們是從事件觸發器管理調用還是通過執行宏: ``` CALLED_AS_EVENT_TRIGGER(fcinfo) ``` 擴展到: ``` ((fcinfo)->context != NULL && IsA((fcinfo)->context, EventTriggerData)) ``` 如果返回真,那么傳遞`fcinfo-&gt;context`到類型`EventTriggerData *` 是安全的,并且利用指向的`EventTriggerData`結構。 函數必須_不_改變`EventTriggerData`結構或它指向的任何數據。 `struct EventTriggerData`是在 `commands/event_trigger.h`里定義的: ``` typedef struct EventTriggerData { NodeTag type; const char *event; /* event name */ Node *parsetree; /* parse tree */ const char *tag; /* command tag */ } EventTriggerData; ``` 成員定義如下: `type` 總是`T_EventTriggerData`。 `event` 描述了函數調用的事件,是`"ddl_command_start"`, `"ddl_command_end"`, `"sql_drop"`之一。參閱[Section 37.1](#calibre_link-845)獲得這些事件的含義。 `parsetree` 命令的分析樹的一個指針。檢查PostgreSQL源代碼詳情。分析樹結構改變時不會有通知。 `tag` 命令標簽和事件觸發器正在運行的事件有關,例如`"CREATE FUNCTION"`。 一個事件觸發器函數必須返回一個`NULL`指針(_不是_ SQL null值,也就是,不要設置`isNull`為真)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看