Бинарное добавление действительно требует построения столько структур BAT, сколько у вас есть столбцов для добавления. Некоторые дополнительные заголовки MonetDBLite должны быть включены (monetdb_config.h
и gdk.h
). Важные части:
- Создайте BAT, используя
COLnew
с правильным типом и счетом
- Добавьте к ним некоторые значения, например, с помощью указателя доступа (правильной длины типа) до
bat->theap.base[i]
- Установить свойства BAT (
BATsetcount
, BATsettrivprop
и BBPkeepref
) для приложения
- Выделите и заполните структуру данных
append_data
.
- Звоните
monetdb_append
.
Ниже приведен краткий пример того, как добавить 42 значения в таблицу из одного столбца, содержащую целые числа (CREATE TABLE test (my_column INTEGER);
)
// startup, connect etc. before
size_t n = 42;
BAT* b = COLnew(0, TYPE_int, n, TRANSIENT);
for (size_t i = 0; i < n; i++) {
((int*)b->theap.base)[i] = i; // or whatever
}
BATsetcount(b, n);
BATsettrivprop(b);
BBPkeepref(b->batCacheid);
append_data *ad = NULL;
ad = malloc(1 * sizeof(append_data));
ad[0].colname = "my_column";
ad[0].batid = b->batCacheid;
if (monetdb_append(conn, "sys", "test", ad, 1) != NULL) { /* handle error */}