void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*)); void sqlite3_result_blob64(sqlite3_context*,const void*, sqlite3_uint64,void(*)(void*)); void sqlite3_result_double(sqlite3_context*, double); void sqlite3_result_error(sqlite3_context*, const char*, int); void sqlite3_result_error16(sqlite3_context*, const void*, int); void sqlite3_result_error_toobig(sqlite3_context*); void sqlite3_result_error_nomem(sqlite3_context*); void sqlite3_result_error_code(sqlite3_context*, int); void sqlite3_result_int(sqlite3_context*, int); void sqlite3_result_int64(sqlite3_context*, sqlite3_int64); void sqlite3_result_null(sqlite3_context*); void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*)); void sqlite3_result_text64(sqlite3_context*, const char*,sqlite3_uint64, void(*)(void*), unsigned char encoding); void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*)); void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*)); void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*)); void sqlite3_result_value(sqlite3_context*, sqlite3_value*); void sqlite3_result_pointer(sqlite3_context*, void*,const char*,void(*)(void*)); void sqlite3_result_zeroblob(sqlite3_context*, int n); int sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n);
這些常式由實作 SQL 函數和聚合的 xFunc 或 xFinal 回呼使用。有關更多資訊,請參閱 sqlite3_create_function() 和 sqlite3_create_function16()。
這些函數的運作方式與用於將值繫結至預備陳述式中主機參數的參數繫結函數家族非常相似。有關更多資訊,請參閱SQL 參數文件。
sqlite3_result_blob() 介面將應用程式定義函數的結果設定為 BLOB,其內容由第二個參數指向,長度為 N 個位元組,其中 N 是第三個參數。
sqlite3_result_zeroblob(C,N) 和 sqlite3_result_zeroblob64(C,N) 介面將應用程式定義函數的結果設定為包含全零位元組且大小為 N 個位元組的 BLOB。
sqlite3_result_double() 介面將應用程式定義函數的結果設定為由其第二個參數指定的浮點值。
sqlite3_result_error() 和 sqlite3_result_error16() 函數會導致實作的 SQL 函數擲出例外狀況。SQLite 使用 sqlite3_result_error() 或 sqlite3_result_error16() 的第二個參數指向的字串作為錯誤訊息的文字。SQLite 將來自 sqlite3_result_error() 的錯誤訊息字串解譯為 UTF-8。SQLite 使用與 sqlite3_bind_text16() 相同的位元組順序判斷規則將來自 sqlite3_result_error16() 的字串解譯為 UTF-16。如果 sqlite3_result_error() 或 sqlite3_result_error16() 的第三個參數為負數,則 SQLite 將所有文字直到第一個零字元作為錯誤訊息。如果 sqlite3_result_error() 或 sqlite3_result_error16() 的第三個參數是非負數,則 SQLite 將從第二個參數中取得這麼多個位元組(而不是字元)作為錯誤訊息。sqlite3_result_error() 和 sqlite3_result_error16() 常式在返回之前會建立錯誤訊息文字的私人副本。因此,呼叫函數可以在返回後重新分配或修改文字而不會造成損害。sqlite3_result_error_code() 函數會更改 SQLite 因函數錯誤而返回的錯誤程式碼。預設情況下,錯誤程式碼為 SQLITE_ERROR。後續呼叫 sqlite3_result_error() 或 sqlite3_result_error16() 會將錯誤程式碼重設為 SQLITE_ERROR。
sqlite3_result_error_toobig() 介面會導致 SQLite 擲出錯誤,指出字串或 BLOB 太長而無法表示。
sqlite3_result_error_nomem() 介面會導致 SQLite 擲出錯誤,指出記憶體配置失敗。
sqlite3_result_int() 介面將應用程式定義函數的返回值設定為第二個參數中給定的 32 位元帶正負號整數值。sqlite3_result_int64() 介面將應用程式定義函數的返回值設定為第二個參數中給定的 64 位元帶正負號整數值。
sqlite3_result_null() 介面將應用程式定義函數的返回值設定為 NULL。
sqlite3_result_text()、sqlite3_result_text16()、sqlite3_result_text16le() 和 sqlite3_result_text16be() 介面會將應用程式定義函式的返回值設定為文字字串,分別以 UTF-8、UTF-16 原生位元組順序、UTF-16 小端序或 UTF-16 大端序表示。sqlite3_result_text64() 介面會將應用程式定義函式的返回值設定為第五個(也是最後一個)參數指定的編碼的文字字串,該參數必須是 SQLITE_UTF8、SQLITE_UTF16、SQLITE_UTF16BE 或 SQLITE_UTF16LE 其中之一。SQLite 從 sqlite3_result_text* 介面的第二個參數取得應用程式的文字結果。如果任何 sqlite3_result_text* 介面(sqlite3_result_text64() 除外)的第三個參數為負數,則 SQLite 會自行計算字串長度,方法是在第二個參數中搜尋第一個零字元。如果 sqlite3_result_text* 介面的第三個參數為非負數,則第二個參數指向的文字中的這麼多位元組(而非字元)會被視為應用程式定義的函式結果。如果第三個參數為非負數,則它必須是字串中 NUL 終止符號出現的位元組偏移量(如果字串以 NUL 終止)。如果在小於第三個參數值的位元組偏移量處出現任何 NUL 字元,則產生的字串將包含嵌入的 NUL,並且對包含嵌入的 NUL 的字串進行運算的表達式結果未定義。如果 sqlite3_result_text* 介面或 sqlite3_result_blob 的第四個參數是非 NULL 指標,則當 SQLite 完成使用該文字或 BLOB 結果時,它會呼叫該函式作為解構函式。如果 sqlite3_result_text* 介面或 sqlite3_result_blob 的第四個參數是特殊常數 SQLITE_STATIC,則 SQLite 假設文字或 BLOB 結果位於常數空間中,並且在完成使用該結果時不會複製參數的內容,也不會對內容呼叫解構函式。如果 sqlite3_result_text* 介面或 sqlite3_result_blob 的第四個參數是特殊常數 SQLITE_TRANSIENT,則 SQLite 會在返回之前將結果複製到從 sqlite3_malloc() 獲取的空間中。
對於 sqlite3_result_text16()、sqlite3_result_text16le() 和 sqlite3_result_text16be() 常式,以及當編碼不是 UTF8 時的 sqlite3_result_text64(),如果輸入的 UTF16 以位元組順序標記 (BOM, U+FEFF) 開頭,則會從字串中移除 BOM,並根據 BOM 指定的位元組順序解釋字串的其餘部分。文字開頭的 BOM 指定的位元組順序會覆寫介面程序指定的位元組順序。因此,例如,如果以以位元組 0xfe、0xff(大端序位元組順序標記)開頭的文字呼叫 sqlite3_result_text16le(),則會跳過前兩個輸入位元組,並將剩餘的輸入解釋為 UTF16BE 文字。
對於 sqlite3_result_text16()、sqlite3_result_text16be()、sqlite3_result_text16le() 和 sqlite3_result_text64() 常式的 UTF16 輸入文字,如果文字包含無效的 UTF16 字元,則無效字元可能會轉換為 unicode 取代字元 U+FFFD。
sqlite3_result_value() 介面會將應用程式定義函式的結果設定為第二個參數指定的 未受保護的 sqlite3_value 物件的副本。sqlite3_result_value() 介面會建立 sqlite3_value 的副本,以便在 sqlite3_result_value() 返回後,參數中指定的 sqlite3_value 可以更改或被釋放,而不會造成損害。受保護的 sqlite3_value 物件始終可以在需要 未受保護的 sqlite3_value 物件的地方使用,因此這兩種 sqlite3_value 物件都可以與此介面一起使用。
sqlite3_result_pointer(C,P,T,D) 介面會將結果設為 SQL NULL 值,就像 sqlite3_result_null(C) 一樣,不同之處在於它還會將主語言指標 P 或類型 T 與該 NULL 值關聯,以便可以使用 sqlite3_value_pointer() 在 應用程式定義的 SQL 函式 中擷取該指標。如果 D 參數不是 NULL,則它是 P 參數的解構函式指標。當 SQLite 使用完 P 後,SQLite 會以 P 作為其唯一參數呼叫 D。T 參數應為靜態字串,最好是字串常值。sqlite3_result_pointer() 常式是 SQLite 3.20.0 新增的 指標傳遞介面 的一部分。
如果這些常式是從與包含接收 sqlite3_context 指標的應用程式定義函式的執行緒不同的執行緒中呼叫的,則結果未定義。