Skip to main content

squire_sqlite3_sys/bindings/default/
function.rs

1use core::ffi::{c_char, c_int, c_uchar, c_uint, c_void};
2
3use super::{
4    connection::sqlite3,
5    sqlite3_destructor_type,
6    types::{sqlite3_int64, sqlite3_uint64},
7    value::sqlite3_value,
8};
9
10/// The [evaluation context][] for a user-defined SQL function.
11///
12/// [evaluation context]: https://sqlite.org/c3ref/context.html
13#[repr(C)]
14pub struct sqlite3_context {
15    _unused: [u8; 0],
16}
17
18unsafe extern "C" {
19    pub fn sqlite3_create_function_v2(
20        db: *mut sqlite3,
21        zFunctionName: *const c_char,
22        nArg: c_int,
23        eTextRep: c_int,
24        pApp: *mut c_void,
25        xFunc: Option<
26            unsafe extern "C" fn(
27                context: *mut sqlite3_context,
28                nArg: c_int,
29                args: *mut *mut sqlite3_value,
30            ),
31        >,
32        xStep: Option<
33            unsafe extern "C" fn(
34                context: *mut sqlite3_context,
35                nArg: c_int,
36                args: *mut *mut sqlite3_value,
37            ),
38        >,
39        xFinal: Option<unsafe extern "C" fn(context: *mut sqlite3_context)>,
40        xDestroy: Option<unsafe extern "C" fn(pApp: *mut c_void)>,
41    ) -> c_int;
42
43    pub fn sqlite3_create_window_function(
44        db: *mut sqlite3,
45        zFunctionName: *const c_char,
46        nArg: c_int,
47        eTextRep: c_int,
48        pApp: *mut c_void,
49        xStep: Option<
50            unsafe extern "C" fn(
51                context: *mut sqlite3_context,
52                nArg: c_int,
53                args: *mut *mut sqlite3_value,
54            ),
55        >,
56        xFinal: Option<unsafe extern "C" fn(context: *mut sqlite3_context)>,
57        xValue: Option<unsafe extern "C" fn(context: *mut sqlite3_context)>,
58        xInverse: Option<
59            unsafe extern "C" fn(
60                conte: *mut sqlite3_context,
61                arg2: c_int,
62                arg3: *mut *mut sqlite3_value,
63            ),
64        >,
65        xDestroy: Option<unsafe extern "C" fn(pApp: *mut c_void)>,
66    ) -> c_int;
67
68    pub fn sqlite3_context_db_handle(pCtx: *mut sqlite3_context) -> *mut sqlite3;
69
70    pub fn sqlite3_result_blob(
71        context: *mut sqlite3_context,
72        value: *const c_void,
73        len: c_int,
74        destructor: sqlite3_destructor_type,
75    );
76    pub fn sqlite3_result_blob64(
77        context: *mut sqlite3_context,
78        value: *const c_void,
79        len: sqlite3_uint64,
80        destructor: sqlite3_destructor_type,
81    );
82    pub fn sqlite3_result_double(context: *mut sqlite3_context, value: f64);
83    pub fn sqlite3_result_error(context: *mut sqlite3_context, message: *const c_char, len: c_int);
84    pub fn sqlite3_result_error_toobig(context: *mut sqlite3_context);
85    pub fn sqlite3_result_error_nomem(context: *mut sqlite3_context);
86    pub fn sqlite3_result_error_code(context: *mut sqlite3_context, value: c_int);
87    pub fn sqlite3_result_int(context: *mut sqlite3_context, value: c_int);
88    pub fn sqlite3_result_int64(context: *mut sqlite3_context, value: sqlite3_int64);
89    pub fn sqlite3_result_null(context: *mut sqlite3_context);
90    pub fn sqlite3_result_text(
91        context: *mut sqlite3_context,
92        value: *const c_char,
93        len: c_int,
94        destructor: sqlite3_destructor_type,
95    );
96    pub fn sqlite3_result_text64(
97        context: *mut sqlite3_context,
98        value: *const c_char,
99        len: sqlite3_uint64,
100        destructor: sqlite3_destructor_type,
101        encoding: c_uchar,
102    );
103    pub fn sqlite3_result_value(context: *mut sqlite3_context, value: *mut sqlite3_value);
104    pub fn sqlite3_result_pointer(
105        context: *mut sqlite3_context,
106        value: *mut c_void,
107        type_name: *const c_char,
108        destructor: sqlite3_destructor_type,
109    );
110    pub fn sqlite3_result_zeroblob(context: *mut sqlite3_context, bytes: c_int);
111    pub fn sqlite3_result_zeroblob64(context: *mut sqlite3_context, bytes: sqlite3_uint64)
112    -> c_int;
113    pub fn sqlite3_result_subtype(context: *mut sqlite3_context, value: c_uint);
114
115    pub fn sqlite3_get_auxdata(context: *mut sqlite3_context, iArg: c_int) -> *mut c_void;
116    pub fn sqlite3_set_auxdata(
117        context: *mut sqlite3_context,
118        iArg: c_int,
119        pData: *mut c_void,
120        destructor: Option<unsafe extern "C" fn(arg1: *mut c_void)>,
121    );
122
123    pub fn sqlite3_aggregate_context(context: *mut sqlite3_context, nBytes: c_int) -> *mut c_void;
124
125    pub fn sqlite3_user_data(context: *mut sqlite3_context) -> *mut c_void;
126}
127
128pub const SQLITE_DETERMINISTIC: i32 = 1 << 11;
129pub const SQLITE_DIRECTONLY: i32 = 1 << 19;
130pub const SQLITE_SUBTYPE: i32 = 1 << 20;
131pub const SQLITE_INNOCUOUS: i32 = 1 << 21;
132pub const SQLITE_RESULT_SUBTYPE: i32 = 1 << 24;
133pub const SQLITE_SELFORDER1: i32 = 1 << 25;