upscaledb  2.2.1
upscaledb.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2005-2017 Christoph Rupp (chris@crupp.de).
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  * See the file COPYING for License information.
17  */
18 
111 #ifndef UPS_UPSCALEDB_H
112 #define UPS_UPSCALEDB_H
113 
114 #include <ups/types.h>
115 
116 #ifdef __cplusplus
117 extern "C" {
118 #endif
119 
120 /* deprecated */
121 #define UPS_API_REVISION 4
122 
144 #define UPS_VERSION_MAJ 2
145 #define UPS_VERSION_MIN 2
146 #define UPS_VERSION_REV 1
147 #define UPS_FILE_VERSION 5
148 
155 struct ups_db_t;
156 typedef struct ups_db_t ups_db_t;
157 
164 struct ups_env_t;
165 typedef struct ups_env_t ups_env_t;
166 
176 struct ups_cursor_t;
177 typedef struct ups_cursor_t ups_cursor_t;
178 
202 typedef struct {
205 
207  void *data;
208 
211 
212 } ups_record_t;
213 
217 #define UPS_RECORD_USER_ALLOC 1
218 
225 #define ups_make_record(PTR, SIZE) { SIZE, PTR, 0 }
226 
253 typedef struct {
256 
258  void *data;
259 
262 
265 
266 } ups_key_t;
267 
274 #define ups_make_key(PTR, SIZE) { SIZE, PTR, 0, 0 }
275 
279 #define UPS_KEY_USER_ALLOC 1
280 
298 typedef struct {
301 
304 
306 
307 
314 #define UPS_TYPE_BINARY 0
315 
316 #define UPS_TYPE_CUSTOM 1
317 
318 #define UPS_TYPE_UINT8 3
319 
320 #define UPS_TYPE_UINT16 5
321 
322 #define UPS_TYPE_UINT32 7
323 
324 #define UPS_TYPE_UINT64 9
325 
326 #define UPS_TYPE_REAL32 11
327 
328 #define UPS_TYPE_REAL64 12
329 
341 #define UPS_SUCCESS ( 0)
342 
343 #define UPS_INV_RECORD_SIZE ( -2)
344 
345 #define UPS_INV_KEY_SIZE ( -3)
346 /* deprecated */
347 #define UPS_INV_KEYSIZE UPS_INV_KEY_SIZE
348 
349 #define UPS_INV_PAGE_SIZE ( -4)
350 /* deprecated */
351 #define UPS_INV_PAGESIZE UPS_INV_PAGE_SIZE
352 
353 #define UPS_OUT_OF_MEMORY ( -6)
354 
355 #define UPS_INV_PARAMETER ( -8)
356 
357 #define UPS_INV_FILE_HEADER ( -9)
358 
359 #define UPS_INV_FILE_VERSION (-10)
360 
361 #define UPS_KEY_NOT_FOUND (-11)
362 
363 #define UPS_DUPLICATE_KEY (-12)
364 
365 #define UPS_INTEGRITY_VIOLATED (-13)
366 
367 #define UPS_INTERNAL_ERROR (-14)
368 
369 #define UPS_WRITE_PROTECTED (-15)
370 
371 #define UPS_BLOB_NOT_FOUND (-16)
372 
373 #define UPS_IO_ERROR (-18)
374 
375 #define UPS_NOT_IMPLEMENTED (-20)
376 
377 #define UPS_FILE_NOT_FOUND (-21)
378 
379 #define UPS_WOULD_BLOCK (-22)
380 
381 #define UPS_NOT_READY (-23)
382 
383 #define UPS_LIMITS_REACHED (-24)
384 
385 #define UPS_ALREADY_INITIALIZED (-27)
386 
387 #define UPS_NEED_RECOVERY (-28)
388 
389 #define UPS_CURSOR_STILL_OPEN (-29)
390 
391 #define UPS_FILTER_NOT_FOUND (-30)
392 
393 #define UPS_TXN_CONFLICT (-31)
394 /* internal use: key was erased in a Txn */
395 #define UPS_KEY_ERASED_IN_TXN (-32)
396 
397 #define UPS_TXN_STILL_OPEN (-33)
398 
399 #define UPS_CURSOR_IS_NIL (-100)
400 
401 #define UPS_DATABASE_NOT_FOUND (-200)
402 
403 #define UPS_DATABASE_ALREADY_EXISTS (-201)
404 
405 #define UPS_DATABASE_ALREADY_OPEN (-202)
406 
407 #define UPS_ENVIRONMENT_ALREADY_OPEN (-203)
408 
409 #define UPS_LOG_INV_FILE_HEADER (-300)
410 
411 #define UPS_NETWORK_ERROR (-400)
412 
413 #define UPS_PLUGIN_NOT_FOUND (-500)
414 
415 #define UPS_PARSER_ERROR (-501)
416 
417 #define UPS_PLUGIN_ALREADY_EXISTS (-502)
418 
446 typedef void UPS_CALLCONV (*ups_error_handler_fun)(int level, const char *message);
447 
449 #define UPS_DEBUG_LEVEL_DEBUG 0
450 
452 #define UPS_DEBUG_LEVEL_NORMAL 1
453 
455 #define UPS_DEBUG_LEVEL_FATAL 3
456 
474 
482 UPS_EXPORT const char * UPS_CALLCONV
483 ups_strerror(ups_status_t status);
484 
493 ups_get_version(uint32_t *major, uint32_t *minor,
494  uint32_t *revision);
495 
637 ups_env_create(ups_env_t **env, const char *filename,
638  uint32_t flags, uint32_t mode, const ups_parameter_t *param);
639 
743 ups_env_open(ups_env_t **env, const char *filename,
744  uint32_t flags, const ups_parameter_t *param);
745 
780 
956  uint16_t name, uint32_t flags, const ups_parameter_t *params);
957 
1009  uint16_t name, uint32_t flags, const ups_parameter_t *params);
1010 
1036 ups_env_rename_db(ups_env_t *env, uint16_t oldname,
1037  uint16_t newname, uint32_t flags);
1038 
1058 ups_env_erase_db(ups_env_t *env, uint16_t name, uint32_t flags);
1059 
1060 /* internal flag - only flush committed transactions, not the btree pages */
1061 #define UPS_FLUSH_COMMITTED_TRANSACTIONS 1
1062 
1079 ups_env_flush(ups_env_t *env, uint32_t flags);
1080 
1081 /* internal use only - don't lock mutex */
1082 #define UPS_DONT_LOCK 0xf0000000
1083 
1108  uint32_t *length);
1109 
1148 ups_env_close(ups_env_t *env, uint32_t flags);
1149 
1166 struct ups_txn_t;
1167 typedef struct ups_txn_t ups_txn_t;
1168 
1198 ups_txn_begin(ups_txn_t **txn, ups_env_t *env, const char *name,
1199  void *reserved, uint32_t flags);
1200 
1202 #define UPS_TXN_READ_ONLY 1
1203 
1204 /* Internal flag for @ref ups_txn_begin */
1205 #define UPS_TXN_TEMPORARY 2
1206 
1212 UPS_EXPORT const char *
1214 
1234 ups_txn_commit(ups_txn_t *txn, uint32_t flags);
1235 
1255 ups_txn_abort(ups_txn_t *txn, uint32_t flags);
1256 
1269 #define UPS_ENABLE_FSYNC 0x00000001
1270 
1271 /* internal flag */
1272 #define UPS_IGNORE_MISSING_CALLBACK 0x00000002
1273 
1276 #define UPS_READ_ONLY 0x00000004
1277 
1278 /* unused 0x00000008 */
1279 
1280 /* unused 0x00000010 */
1281 
1282 /* reserved 0x00000020 */
1283 
1284 /* unused 0x00000040 */
1285 
1288 #define UPS_IN_MEMORY 0x00000080
1289 
1290 /* reserved: DB_USE_MMAP (not persistent) 0x00000100 */
1291 
1294 #define UPS_DISABLE_MMAP 0x00000200
1295 
1296 /* deprecated */
1297 #define UPS_RECORD_NUMBER UPS_RECORD_NUMBER64
1298 
1301 #define UPS_RECORD_NUMBER32 0x00001000
1302 
1305 #define UPS_RECORD_NUMBER64 0x00002000
1306 
1309 #define UPS_ENABLE_DUPLICATE_KEYS 0x00004000
1310 /* deprecated */
1311 #define UPS_ENABLE_DUPLICATES UPS_ENABLE_DUPLICATE_KEYS
1312 
1313 /* deprecated */
1314 #define UPS_ENABLE_RECOVERY UPS_ENABLE_TRANSACTIONS
1315 
1318 #define UPS_AUTO_RECOVERY 0x00010000
1319 
1322 #define UPS_ENABLE_TRANSACTIONS 0x00020000
1323 
1326 #define UPS_CACHE_UNLIMITED 0x00040000
1327 
1330 #define UPS_DISABLE_RECOVERY 0x00080000
1331 
1332 /* internal use only! (not persistent) */
1333 #define UPS_IS_REMOTE_INTERNAL 0x00200000
1334 
1335 /* internal use only! (not persistent) */
1336 #define UPS_DISABLE_RECLAIM_INTERNAL 0x00400000
1337 
1338 /* internal use only! (persistent) */
1339 #define UPS_FORCE_RECORDS_INLINE 0x00800000
1340 
1343 #define UPS_ENABLE_CRC32 0x02000000
1344 
1345 /* internal use only! (not persistent) */
1346 #define UPS_DONT_FLUSH_TRANSACTIONS 0x04000000
1347 
1350 #define UPS_FLUSH_TRANSACTIONS_IMMEDIATELY 0x08000000
1351 
1361  const uint8_t *lhs, uint32_t lhs_length,
1362  const uint8_t *rhs, uint32_t rhs_length);
1363 
1386 ups_register_compare(const char *name, ups_compare_func_t func);
1387 
1388 /* deprecated */
1391 
1485 ups_db_find(ups_db_t *db, ups_txn_t *txn, ups_key_t *key,
1486  ups_record_t *record, uint32_t flags);
1487 
1549 ups_db_insert(ups_db_t *db, ups_txn_t *txn, ups_key_t *key,
1550  ups_record_t *record, uint32_t flags);
1551 
1563 #define UPS_OVERWRITE 0x0001
1564 
1566 #define UPS_DUPLICATE 0x0002
1567 
1569 #define UPS_DUPLICATE_INSERT_BEFORE 0x0004
1570 
1572 #define UPS_DUPLICATE_INSERT_AFTER 0x0008
1573 
1575 #define UPS_DUPLICATE_INSERT_FIRST 0x0010
1576 
1578 #define UPS_DUPLICATE_INSERT_LAST 0x0020
1579 
1580 /* internal flag */
1581 #define UPS_DIRECT_ACCESS 0x0040
1582 
1583 /* internal flag */
1584 #define UPS_FORCE_DEEP_COPY 0x0100
1585 
1586 /* internal flag */
1587 #define UPS_HINT_APPEND 0x00080000
1588 
1589 /* internal flag */
1590 #define UPS_HINT_PREPEND 0x00100000
1591 
1616 ups_db_erase(ups_db_t *db, ups_txn_t *txn, ups_key_t *key, uint32_t flags);
1617 
1618 /* internal flag for ups_db_erase() - do not use */
1619 #define UPS_ERASE_ALL_DUPLICATES 1
1620 
1643 ups_db_count(ups_db_t *db, ups_txn_t *txn, uint32_t flags, uint64_t *count);
1644 
1683 
1687 #define UPS_PARAM_JOURNAL_SWITCH_THRESHOLD 0x00001
1688 
1691 #define UPS_PARAM_CACHE_SIZE 0x00000100
1692 /* deprecated */
1693 #define UPS_PARAM_CACHESIZE UPS_PARAM_CACHE_SIZE
1694 
1696 #define UPS_PARAM_PAGE_SIZE 0x00000101
1697 /* deprecated */
1698 #define UPS_PARAM_PAGESIZE UPS_PARAM_PAGE_SIZE
1699 
1701 #define UPS_PARAM_KEY_SIZE 0x00000102
1702 /* deprecated */
1703 #define UPS_PARAM_KEYSIZE UPS_PARAM_KEY_SIZE
1704 
1707 #define UPS_PARAM_MAX_DATABASES 0x00000103
1708 
1710 #define UPS_PARAM_KEY_TYPE 0x00000104
1711 
1714 #define UPS_PARAM_LOG_DIRECTORY 0x00000105
1715 
1718 #define UPS_PARAM_ENCRYPTION_KEY 0x00000106
1719 
1722 #define UPS_PARAM_NETWORK_TIMEOUT_SEC 0x00000107
1723 
1725 #define UPS_PARAM_RECORD_SIZE 0x00000108
1726 
1729 #define UPS_PARAM_FILE_SIZE_LIMIT 0x00000109
1730 
1733 #define UPS_PARAM_POSIX_FADVISE 0x00000110
1734 
1736 #define UPS_PARAM_CUSTOM_COMPARE_NAME 0x00000111
1737 
1739 #define UPS_PARAM_RECORD_TYPE 0x00000112
1740 
1742 #define UPS_POSIX_FADVICE_NORMAL 0
1743 
1745 #define UPS_POSIX_FADVICE_RANDOM 1
1746 
1748 #define UPS_RECORD_SIZE_UNLIMITED ((uint32_t)-1)
1749 
1751 #define UPS_KEY_SIZE_UNLIMITED ((uint16_t)-1)
1752 
1755 #define UPS_PARAM_FLAGS 0x00000200
1756 
1759 #define UPS_PARAM_FILEMODE 0x00000201
1760 
1768 #define UPS_PARAM_FILENAME 0x00000202
1769 
1774 #define UPS_PARAM_DATABASE_NAME 0x00000203
1775 
1781 #define UPS_PARAM_MAX_KEYS_PER_PAGE 0x00000204
1782 
1787 #define UPS_PARAM_JOURNAL_COMPRESSION 0x00001000
1788 
1794 #define UPS_PARAM_RECORD_COMPRESSION 0x00001001
1795 
1801 #define UPS_PARAM_KEY_COMPRESSION 0x00001002
1802 
1804 #define UPS_COMPRESSOR_NONE 0
1805 
1810 #define UPS_COMPRESSOR_ZLIB 1
1811 
1816 #define UPS_COMPRESSOR_SNAPPY 2
1817 
1822 #define UPS_COMPRESSOR_LZF 3
1823 
1825 #define UPS_COMPRESSOR_UINT32_VARBYTE 5
1826 #define UPS_COMPRESSOR_UINT32_MASKEDVBYTE UPS_COMPRESSOR_UINT32_VARBYTE
1827 
1829 #define UPS_COMPRESSOR_UINT32_SIMDCOMP 6
1830 
1831 /* deprecated */
1832 #define UPS_COMPRESSOR_UINT32_GROUPVARINT 7
1833 
1834 /* deprecated */
1835 #define UPS_COMPRESSOR_UINT32_STREAMVBYTE 8
1836 
1838 #define UPS_COMPRESSOR_UINT32_FOR 10
1839 
1841 #define UPS_COMPRESSOR_UINT32_SIMDFOR 11
1842 
1852 
1880 ups_db_close(ups_db_t *db, uint32_t flags);
1881 
1883 #define UPS_AUTO_CLEANUP 1
1884 
1886 #define UPS_DONT_CLEAR_LOG 2
1887 
1889 #define UPS_TXN_AUTO_ABORT 4
1890 
1892 #define UPS_TXN_AUTO_COMMIT 8
1893 
1932 ups_cursor_create(ups_cursor_t **cursor, ups_db_t *db, ups_txn_t *txn,
1933  uint32_t flags);
1934 
1955 
2041 ups_cursor_move(ups_cursor_t *cursor, ups_key_t *key,
2042  ups_record_t *record, uint32_t flags);
2043 
2045 #define UPS_CURSOR_FIRST 0x0001
2046 
2048 #define UPS_CURSOR_LAST 0x0002
2049 
2051 #define UPS_CURSOR_NEXT 0x0004
2052 
2054 #define UPS_CURSOR_PREVIOUS 0x0008
2055 
2057 #define UPS_SKIP_DUPLICATES 0x0010
2058 
2060 #define UPS_ONLY_DUPLICATES 0x0020
2061 
2079  uint32_t flags);
2080 
2178 ups_cursor_find(ups_cursor_t *cursor, ups_key_t *key,
2179  ups_record_t *record, uint32_t flags);
2180 
2181 /* internal flag */
2182 #define UPS_FIND_EQ_MATCH 0x4000
2183 
2188 #define UPS_FIND_LT_MATCH 0x1000
2189 
2194 #define UPS_FIND_GT_MATCH 0x2000
2195 
2203 #define UPS_FIND_LEQ_MATCH (UPS_FIND_LT_MATCH | UPS_FIND_EQ_MATCH)
2204 
2212 #define UPS_FIND_GEQ_MATCH (UPS_FIND_GT_MATCH | UPS_FIND_EQ_MATCH)
2213 
2227 #define UPS_FIND_NEAR_MATCH (UPS_FIND_LT_MATCH | UPS_FIND_GT_MATCH \
2228  | UPS_FIND_EQ_MATCH)
2229 
2333  ups_record_t *record, uint32_t flags);
2334 
2357 ups_cursor_erase(ups_cursor_t *cursor, uint32_t flags);
2358 
2378  uint32_t *count, uint32_t flags);
2379 
2395  uint32_t *position);
2396 
2411 
2428 
2433 #ifdef __cplusplus
2434 } // extern "C"
2435 #endif
2436 
2437 #endif /* UPS_UPSCALEDB_H */
UPS_EXPORT ups_status_t UPS_CALLCONV ups_env_get_parameters(ups_env_t *env, ups_parameter_t *param)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_cursor_get_duplicate_count(ups_cursor_t *cursor, uint32_t *count, uint32_t flags)
struct ups_txn_t ups_txn_t
Definition: upscaledb.h:1167
uint32_t flags
Definition: upscaledb.h:210
UPS_EXPORT ups_status_t UPS_CALLCONV ups_env_open(ups_env_t **env, const char *filename, uint32_t flags, const ups_parameter_t *param)
UPS_EXPORT const char *UPS_CALLCONV ups_strerror(ups_status_t status)
Portable typedefs for upscaledb.
unsigned short uint16_t
Definition: msstdint.h:84
UPS_EXPORT ups_status_t UPS_CALLCONV ups_env_close(ups_env_t *env, uint32_t flags)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_db_erase(ups_db_t *db, ups_txn_t *txn, ups_key_t *key, uint32_t flags)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_db_insert(ups_db_t *db, ups_txn_t *txn, ups_key_t *key, ups_record_t *record, uint32_t flags)
unsigned __int64 uint64_t
Definition: msstdint.h:95
unsigned char uint8_t
Definition: msstdint.h:83
UPS_EXPORT ups_status_t UPS_CALLCONV ups_cursor_clone(ups_cursor_t *src, ups_cursor_t **dest)
int UPS_CALLCONV(* ups_compare_func_t)(ups_db_t *db, const uint8_t *lhs, uint32_t lhs_length, const uint8_t *rhs, uint32_t rhs_length)
Definition: upscaledb.h:1360
UPS_EXPORT ups_status_t UPS_CALLCONV ups_db_find(ups_db_t *db, ups_txn_t *txn, ups_key_t *key, ups_record_t *record, uint32_t flags)
void UPS_CALLCONV(* ups_error_handler_fun)(int level, const char *message)
Definition: upscaledb.h:446
UPS_EXPORT ups_status_t UPS_CALLCONV ups_cursor_move(ups_cursor_t *cursor, ups_key_t *key, ups_record_t *record, uint32_t flags)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_env_erase_db(ups_env_t *env, uint16_t name, uint32_t flags)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_env_rename_db(ups_env_t *env, uint16_t oldname, uint16_t newname, uint32_t flags)
unsigned int uint32_t
Definition: msstdint.h:85
uint32_t name
Definition: upscaledb.h:300
UPS_EXPORT ups_status_t UPS_CALLCONV ups_cursor_get_duplicate_position(ups_cursor_t *cursor, uint32_t *position)
uint16_t size
Definition: upscaledb.h:255
UPS_EXPORT ups_status_t UPS_CALLCONV ups_cursor_find(ups_cursor_t *cursor, ups_key_t *key, ups_record_t *record, uint32_t flags)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_db_count(ups_db_t *db, ups_txn_t *txn, uint32_t flags, uint64_t *count)
uint32_t flags
Definition: upscaledb.h:261
UPS_EXPORT ups_status_t UPS_CALLCONV ups_db_get_parameters(ups_db_t *db, ups_parameter_t *param)
UPS_EXPORT const char * ups_txn_get_name(ups_txn_t *txn)
struct ups_db_t ups_db_t
Definition: upscaledb.h:156
struct ups_cursor_t ups_cursor_t
Definition: upscaledb.h:177
uint64_t value
Definition: upscaledb.h:303
#define UPS_CALLCONV
Definition: types.h:98
UPS_EXPORT ups_status_t UPS_CALLCONV ups_env_flush(ups_env_t *env, uint32_t flags)
uint32_t _flags
Definition: upscaledb.h:264
UPS_EXPORT ups_status_t UPS_CALLCONV ups_register_compare(const char *name, ups_compare_func_t func)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_cursor_close(ups_cursor_t *cursor)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_cursor_overwrite(ups_cursor_t *cursor, ups_record_t *record, uint32_t flags)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_env_open_db(ups_env_t *env, ups_db_t **db, uint16_t name, uint32_t flags, const ups_parameter_t *params)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_env_create(ups_env_t **env, const char *filename, uint32_t flags, uint32_t mode, const ups_parameter_t *param)
void * data
Definition: upscaledb.h:258
UPS_EXPORT ups_status_t ups_txn_begin(ups_txn_t **txn, ups_env_t *env, const char *name, void *reserved, uint32_t flags)
UPS_EXPORT ups_status_t ups_txn_commit(ups_txn_t *txn, uint32_t flags)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_cursor_insert(ups_cursor_t *cursor, ups_key_t *key, ups_record_t *record, uint32_t flags)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_cursor_erase(ups_cursor_t *cursor, uint32_t flags)
UPS_EXPORT ups_status_t ups_txn_abort(ups_txn_t *txn, uint32_t flags)
UPS_EXPORT void UPS_CALLCONV ups_set_error_handler(ups_error_handler_fun f)
void * data
Definition: upscaledb.h:207
#define UPS_EXPORT
Definition: types.h:90
uint32_t size
Definition: upscaledb.h:204
int ups_status_t
Definition: types.h:139
UPS_EXPORT ups_status_t UPS_CALLCONV ups_db_set_compare_func(ups_db_t *db, ups_compare_func_t foo)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_env_create_db(ups_env_t *env, ups_db_t **db, uint16_t name, uint32_t flags, const ups_parameter_t *params)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_cursor_create(ups_cursor_t **cursor, ups_db_t *db, ups_txn_t *txn, uint32_t flags)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_env_get_database_names(ups_env_t *env, uint16_t *names, uint32_t *length)
UPS_EXPORT ups_status_t UPS_CALLCONV ups_db_close(ups_db_t *db, uint32_t flags)
UPS_EXPORT ups_env_t *UPS_CALLCONV ups_db_get_env(ups_db_t *db)
UPS_EXPORT void UPS_CALLCONV ups_get_version(uint32_t *major, uint32_t *minor, uint32_t *revision)
struct ups_env_t ups_env_t
Definition: upscaledb.h:165
UPS_EXPORT ups_status_t UPS_CALLCONV ups_cursor_get_record_size(ups_cursor_t *cursor, uint32_t *size)