Expand description
This api module provides API mirroring the C API of q/kdb+. The expected usage is to build a shared library for q/kdb+ in Rust.
In order to avoid writing too large unsafe block leading to poor optimization, most of native C API functions were provided
with a wrapper funtion with a bit of ergonomic safety and with intuitive implementation as a trait method. The only exceptions
are:
knkkThese functions are using elipsis (...) as its argument and cannot be provided with a stable distribution. When you need to use either of them you can find them undernativenamespace together with the other naked C API functions.
Notes:
- This library is for kdb+ version >= 3.0.
- Meangless C macros are excluded but accessors of an underlying array like
kC,kJ,kKetc. are provided in Rust way.
§Examples
In order to encourage to use Rust style API, examples of the C API style is not provided here (you can see them in README of the repository).
The examples below are written without unsafe code. You can see how comfortably breathing are the wrapped functions in the code.
#[macro_use]
extern crate kdbplus;
use kdbplus::api::*;
use kdbplus::qtype;
#[no_mangle]
pub extern "C" fn create_symbol_list2(_: K) -> K{
let mut list=new_list(qtype::SYMBOL_LIST, 0);
list.push_symbol("Abraham").unwrap();
list.push_symbol("Isaac").unwrap();
list.push_symbol("Jacob").unwrap();
list.push_symbol_n("Josephine", 6).unwrap();
list
}
#[no_mangle]
fn no_panick(func: K, args: K) -> K{
let result=error_to_string(apply(func, args));
if let Ok(error) = result.get_error_string(){
println!("FYI: {}", error);
// Decrement reference count of the error object which is no longer used.
decrement_reference_count(result);
KNULL
}
else{
println!("success!");
result
}
}
#[no_mangle]
pub extern "C" fn create_table2(_: K) -> K{
// Build keys
let keys=new_list(qtype::SYMBOL_LIST, 2);
let keys_slice=keys.as_mut_slice::<S>();
keys_slice[0]=enumerate(str_to_S!("time"));
keys_slice[1]=enumerate_n(str_to_S!("temperature_and_humidity"), 11);
// Build values
let values=new_list(qtype::COMPOUND_LIST, 2);
let time=new_list(qtype::TIMESTAMP_LIST, 3);
// 2003.10.10D02:24:19.167018272 2006.05.24D06:16:49.419710368 2008.08.12D23:12:24.018691392
time.as_mut_slice::<J>().copy_from_slice(&[119067859167018272_i64, 201766609419710368, 271897944018691392]);
let temperature=new_list(qtype::FLOAT_LIST, 3);
temperature.as_mut_slice::<F>().copy_from_slice(&[22.1_f64, 24.7, 30.5]);
values.as_mut_slice::<K>().copy_from_slice(&[time, temperature]);
flip(new_dictionary(keys, values))
}And q code is here:
q)summon:`libapi_examples 2: (`create_symbol_list2; 1)
q)summon[]
`Abraham`Isaac`Jacob`Joseph
q)chill: `libapi_examples 2: (`no_panick; 2);
q)chill[$; ("J"; "42")]
success!
42
q)chill[+; (1; `a)]
FYI: type
q)climate_change: libc_api_examples 2: (`create_table2; 1);
q)climate_change[]
time temperature
-----------------------------------------
2003.10.10D02:24:19.167018272 22.1
2006.05.24D06:16:49.419710368 24.7
2008.08.12D23:12:24.018691392 30.5 Modules§
- native
- This module exposes bare C API functions. As most of them are provided with a “safe” wrapper function with an intuitive name and intuitive implementation for Rust, there is no gain to darely use these functions.
Structs§
- U
- Struct representing 16-bytes GUID.
- k0
- Underlying struct of
Kobject. - k0_list
- Underlying list value of q object.
Constants§
- KNULL
Knullptr. This value can be used as void value of a function which is called directly by q process and returnsK. This null pointer is interpreted as a general null value (::) whose type is101h.
Traits§
- KUtility
- Trait which defines utility methods to manipulate q object.
Functions§
- S_
to_ str - Convert
Sto&str. This function is intended to convert symbol type (null-terminated char-array) tostr. - apply
- Apply a function to q list object
.[func; args]. - days_
to_ ymd - Convert the number of days from
2000.01.01to a number expressed asyyyymmdd. - decrement_
reference_ count - Decrement reference count of the q object. The decrement must be done when
kfunction gets an error object whose type isqtype::ERRORand when you created an object but do not intend to return it to q side. See details on the reference page. - destroy_
socket - Remove callback from the associated kdb+ socket and call
kclose. Return null if the socket is invalid or not the one which had been registered bysd1. - destroy_
socket_ if - Remove callback from the associated kdb+ socket and call
kcloseif the given condition is satisfied. Return null if the socket is invalid or not the one which had been registered bysd1. - drop_
q_ object - Drop Rust object inside q. Passed as the first element of a foreign object.
- enkey
- Constructor of q keyed table object.
- enumerate
- Enumerate a null-terminated character array internally. This function must be used to add a character array as a symbol value to a symbol list. The returned value is the same character array as the input.
- enumerate_
n - Extract the first
nchars from a character array and enumerate it internally. This function must be used to add a character array as a symbol value to a symbol list. The returned value is the same character array as the input. - error_
to_ string - Convert an error object into usual
Kobject which has the error string in the fieldsymbol. - flip
- Constructor of q table object from a q dictionary object.
- increment_
reference_ count - Increment reference count of the q object. Increment must be done when you passed arguments
to Rust function and intends to return it to q side or when you pass some
Kobjects tokfunction and intend to use the argument after the call. See details on the reference page. - is_
error - Judge if a catched object by
error_to_stringis a genuine error object of typeqtype::ERROR(This means false positive of theKNULLcase can be eliminated). - load_
as_ q_ function - Load C function as a q function (
Kobject). - new_
bool - Constructor of q bool object. Relabeling of
kb. - new_
byte - Constructor of q byte object. Relabeling of
kg. - new_
char - Constructor of q char object. Relabeling of
kc. - new_
date - Constructor of q date object. Relabeling of
kd. - new_
datetime - Constructor of q datetime object from the number of days since kdb+ epoch (
2000.01.01). Relabeling ofkz. - new_
dictionary - Constructor of q dictionary object.
- new_
enum - Constructor of q enum object. This is a complememtal constructor of missing second type.
- new_
error - Constructor of q error. The input must be null-terminated.
- new_
error_ os - Similar to
new_errorbut this function appends a system-error message to stringSbefore passing it to internalkrr. The input must be null-terminated. - new_
float - Constructor of q float object. Relabeling of
kf. - new_
guid - Constructor of q GUID object. Relabeling of
ku. - new_int
- Constructor of q int object. Relabeling of
ki. - new_
list - Constructor of q simple list.
- new_
long - Constructor of q long object. Relabeling of
kj. - new_
minute - Create a month object. This is a complememtal constructor of missing minute type.
- new_
month - Create a month object from the number of months since kdb+ epoch (
2000.01.01). This is a complememtal constructor of missing month type. - new_
null - Constructor of q general null.
- new_
real - Constructor of q real object. Relabeling of
ke. - new_
second - Create a month object. This is a complememtal constructor of missing second type.
- new_
short - Constructor of q short object. Relabeling of
kh. - new_
string - Constructor of q string object.
- new_
string_ n - Constructor if q string object with a fixed length.
- new_
symbol - Constructor of q symbol object. Relabeling of
ks. - new_
time - Constructor of q time object. Relabeling of
kt. - new_
timespan - Constructor of q timespan object from nanoseconds. Relabeling of
ktj. - new_
timestamp - Constructor of q timestamp from elapsed time in nanoseconds since kdb+ epoch (
2000.01.01). Relabeling ofktj. - null_
terminated_ str_ to_ S - Convert null-terminated
&strtoS. - null_
terminated_ str_ to_ const_ S - Convert null terminated
&strintoconst_S. Expected usage is to build a q error object withkrr. - pin_
symbol - Enable the remote threads to refer to the sym list in the main thread so that enumeration of remotely created symbol values reain valid in the main thread after joining the remote threads. This function must be used before starting any other threads if the threads create symbol values. The previously set value is returned.
- register_
callback - Register callback to the associated kdb+ socket.
- simple_
to_ compound - Convert a simple list to a compound list. Expected usage is to concatinate a simple list with a different type of list.
- unkey
- Constructor of simple q table object from a q keyed table object.
- unpin_
symbol - Unlock the symbol list in the main thread. This function should be called after joining threads.
- ymd_
to_ days - Convert ymd to the number of days from
2000.01.01.
Type Aliases§
- C
charin C. Also used to access char of q.- E
f32in C. Also used to access real of q.- F
f64in C. Also used to access float and datetime of q.- G
unsigned charin C. Also used to access byte of q.- H
i16in C. Also used to access short of q.- I
i32in C. Also used to access int and compatible types (month, date, minute, second and time) of q.- J
i64in C. Also used to access long and compatible types (timestamp and timespan) of q.- K
- Struct representing q object.
- S
char*in C. Also used to access symbol of q.- V
voidin C.- const_S
const char*in C.
Unions§
- k0_
inner - Underlying atom value of q object.