1 #include "db_config.h"
2 /* ----------------------------------------------------------------------------
3 * This file was automatically generated by SWIG (http://www.swig.org).
4 * Version 2.0.4
5 *
6 * This file is not intended to be easily readable and contains a number of
7 * coding conventions designed to improve portability and efficiency. Do not make
8 * changes to this file unless you know what you are doing--modify the SWIG
9 * interface file instead.
10 * ----------------------------------------------------------------------------- */
11
12 #define SWIGJAVA
13
14 /* -----------------------------------------------------------------------------
15 * This section contains generic SWIG labels for method/variable
16 * declarations/attributes, and other compiler dependent labels.
17 * ----------------------------------------------------------------------------- */
18
19 /* template workaround for compilers that cannot correctly implement the C++ standard */
20 #ifndef SWIGTEMPLATEDISAMBIGUATOR
21 # if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
22 # define SWIGTEMPLATEDISAMBIGUATOR template
23 # elif defined(__HP_aCC)
24 /* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
25 /* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
26 # define SWIGTEMPLATEDISAMBIGUATOR template
27 # else
28 # define SWIGTEMPLATEDISAMBIGUATOR
29 # endif
30 #endif
31
32 /* inline attribute */
33 #ifndef SWIGINLINE
34 # if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
35 # define SWIGINLINE inline
36 # else
37 # define SWIGINLINE
38 # endif
39 #endif
40
41 /* attribute recognised by some compilers to avoid 'unused' warnings */
42 #ifndef SWIGUNUSED
43 # if defined(__GNUC__)
44 # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
45 # define SWIGUNUSED __attribute__ ((__unused__))
46 # else
47 # define SWIGUNUSED
48 # endif
49 # elif defined(__ICC)
50 # define SWIGUNUSED __attribute__ ((__unused__))
51 # else
52 # define SWIGUNUSED
53 # endif
54 #endif
55
56 #ifndef SWIG_MSC_UNSUPPRESS_4505
57 # if defined(_MSC_VER)
58 # pragma warning(disable : 4505) /* unreferenced local function has been removed */
59 # endif
60 #endif
61
62 #ifndef SWIGUNUSEDPARM
63 # ifdef __cplusplus
64 # define SWIGUNUSEDPARM(p)
65 # else
66 # define SWIGUNUSEDPARM(p) p SWIGUNUSED
67 # endif
68 #endif
69
70 /* internal SWIG method */
71 #ifndef SWIGINTERN
72 # define SWIGINTERN static SWIGUNUSED
73 #endif
74
75 /* internal inline SWIG method */
76 #ifndef SWIGINTERNINLINE
77 # define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
78 #endif
79
80 /* exporting methods */
81 #if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
82 # ifndef GCC_HASCLASSVISIBILITY
83 # define GCC_HASCLASSVISIBILITY
84 # endif
85 #endif
86
87 #ifndef SWIGEXPORT
88 # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
89 # if defined(STATIC_LINKED)
90 # define SWIGEXPORT
91 # else
92 # define SWIGEXPORT __declspec(dllexport)
93 # endif
94 # else
95 # if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
96 # define SWIGEXPORT __attribute__ ((visibility("default")))
97 # else
98 # define SWIGEXPORT
99 # endif
100 # endif
101 #endif
102
103 /* calling conventions for Windows */
104 #ifndef SWIGSTDCALL
105 # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
106 # define SWIGSTDCALL __stdcall
107 # else
108 # define SWIGSTDCALL
109 # endif
110 #endif
111
112 /* Deal with Microsoft's attempt at deprecating C standard runtime functions */
113 #if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
114 # undef _CRT_SECURE_NO_DEPRECATE
115 # define _CRT_SECURE_NO_DEPRECATE
116 #endif
117
118 /* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
119 #if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
120 # define _SCL_SECURE_NO_DEPRECATE
121 #endif
122
123
124
125 /* Fix for jlong on some versions of gcc on Windows */
126 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
127 typedef long long __int64;
128 #endif
129
130 /* Fix for jlong on 64-bit x86 Solaris */
131 #if defined(__x86_64)
132 # ifdef _LP64
133 # undef _LP64
134 # endif
135 #endif
136
137 #include <jni.h>
138 #include <stdlib.h>
139 #include <string.h>
140
141
142 /* Support for throwing Java exceptions */
143 typedef enum {
144 SWIG_JavaOutOfMemoryError = 1,
145 SWIG_JavaIOException,
146 SWIG_JavaRuntimeException,
147 SWIG_JavaIndexOutOfBoundsException,
148 SWIG_JavaArithmeticException,
149 SWIG_JavaIllegalArgumentException,
150 SWIG_JavaNullPointerException,
151 SWIG_JavaDirectorPureVirtual,
152 SWIG_JavaUnknownError
153 } SWIG_JavaExceptionCodes;
154
155 typedef struct {
156 SWIG_JavaExceptionCodes code;
157 const char *java_exception;
158 } SWIG_JavaExceptions_t;
159
160
SWIG_JavaThrowException(JNIEnv * jenv,SWIG_JavaExceptionCodes code,const char * msg)161 static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg) {
162 jclass excep;
163 static const SWIG_JavaExceptions_t java_exceptions[] = {
164 { SWIG_JavaOutOfMemoryError, "java/lang/OutOfMemoryError" },
165 { SWIG_JavaIOException, "java/io/IOException" },
166 { SWIG_JavaRuntimeException, "java/lang/RuntimeException" },
167 { SWIG_JavaIndexOutOfBoundsException, "java/lang/IndexOutOfBoundsException" },
168 { SWIG_JavaArithmeticException, "java/lang/ArithmeticException" },
169 { SWIG_JavaIllegalArgumentException, "java/lang/IllegalArgumentException" },
170 { SWIG_JavaNullPointerException, "java/lang/NullPointerException" },
171 { SWIG_JavaDirectorPureVirtual, "java/lang/RuntimeException" },
172 { SWIG_JavaUnknownError, "java/lang/UnknownError" },
173 { (SWIG_JavaExceptionCodes)0, "java/lang/UnknownError" }
174 };
175 const SWIG_JavaExceptions_t *except_ptr = java_exceptions;
176
177 while (except_ptr->code != code && except_ptr->code)
178 except_ptr++;
179
180 (*jenv)->ExceptionClear(jenv);
181 excep = (*jenv)->FindClass(jenv, except_ptr->java_exception);
182 if (excep)
183 (*jenv)->ThrowNew(jenv, excep, msg);
184 }
185
186
187 /* Contract support */
188
189 #define SWIG_contract_assert(nullreturn, expr, msg) if (!(expr)) {SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, msg); return nullreturn; } else
190
191
192 #include "db_int.h"
193 #include "dbinc/txn.h"
194
195 #ifdef HAVE_CRYPTO
196 #define CRYPTO_ONLY(x) (x);
197 #else
198 #define CRYPTO_ONLY(x)
199 #endif
200
201
202 /* don't use SWIG's array handling - save code space */
203 #define SWIG_NOINCLUDE 1
204
205 #define DB_ENV_INTERNAL(dbenv) ((dbenv)->api2_internal)
206 #define DB_INTERNAL(db) ((db)->api_internal)
207
208 #define DB_PKG "com/sleepycat/db/"
209
210 /* Forward declarations */
211 static int __dbj_throw(JNIEnv *jenv,
212 int ret, const char *msg, jobject obj, jobject jdbenv);
213
214 /* Global data - JVM handle, classes, fields and methods */
215 static JavaVM *javavm;
216
217 static jclass db_class, dbc_class, dbenv_class, dbt_class, dblsn_class;
218 static jclass dbpreplist_class, dbtxn_class;
219 static jclass keyrange_class;
220 static jclass bt_stat_class, compact_class, h_stat_class, heap_stat_class;
221 static jclass lock_stat_class, log_stat_class, mpool_stat_class, mpool_fstat_class;
222 static jclass mutex_stat_class, qam_stat_class, rep_stat_class;
223 static jclass repmgr_stat_class, repmgr_siteinfo_class, rephost_class;
224 static jclass seq_stat_class, txn_stat_class;
225 static jclass txn_active_class;
226 static jclass lock_class, lockreq_class;
227 static jclass dbex_class, deadex_class, heapfullex_class, lockex_class, memex_class;
228 static jclass repdupmasterex_class, rephandledeadex_class;
229 static jclass repholdelectionex_class, repjoinfailex_class;
230 static jclass repleaseexpiredex_class;
231 static jclass replockoutex_class, repunavailex_class;
232 static jclass runrecex_class, versionex_class;
233 static jclass filenotfoundex_class, illegalargex_class, outofmemerr_class;
234 static jclass bytearray_class, string_class, outputstream_class;
235
236 static jfieldID dbc_cptr_fid;
237 static jfieldID dblsn_file_fid, dblsn_offset_fid;
238 static jfieldID dbt_data_fid, dbt_data_nio_fid, dbt_size_fid, dbt_ulen_fid;
239 static jfieldID dbt_dlen_fid, dbt_doff_fid, dbt_flags_fid, dbt_offset_fid;
240 static jfieldID kr_less_fid, kr_equal_fid, kr_greater_fid;
241 static jfieldID lock_cptr_fid;
242 static jfieldID lockreq_op_fid, lockreq_modeflag_fid, lockreq_timeout_fid;
243 static jfieldID lockreq_obj_fid, lockreq_lock_fid;
244 static jfieldID repmgr_siteinfo_flags_fid, repmgr_siteinfo_status_fid;
245 static jfieldID txn_commit_token;
246
247 /* BEGIN-STAT-FIELD-DECLS */
248 static jfieldID bt_stat_bt_magic_fid;
249 static jfieldID bt_stat_bt_version_fid;
250 static jfieldID bt_stat_bt_metaflags_fid;
251 static jfieldID bt_stat_bt_nkeys_fid;
252 static jfieldID bt_stat_bt_ndata_fid;
253 static jfieldID bt_stat_bt_pagecnt_fid;
254 static jfieldID bt_stat_bt_pagesize_fid;
255 static jfieldID bt_stat_bt_minkey_fid;
256 static jfieldID bt_stat_bt_re_len_fid;
257 static jfieldID bt_stat_bt_re_pad_fid;
258 static jfieldID bt_stat_bt_levels_fid;
259 static jfieldID bt_stat_bt_int_pg_fid;
260 static jfieldID bt_stat_bt_leaf_pg_fid;
261 static jfieldID bt_stat_bt_dup_pg_fid;
262 static jfieldID bt_stat_bt_over_pg_fid;
263 static jfieldID bt_stat_bt_empty_pg_fid;
264 static jfieldID bt_stat_bt_free_fid;
265 static jfieldID bt_stat_bt_int_pgfree_fid;
266 static jfieldID bt_stat_bt_leaf_pgfree_fid;
267 static jfieldID bt_stat_bt_dup_pgfree_fid;
268 static jfieldID bt_stat_bt_over_pgfree_fid;
269 static jfieldID compact_compact_fillpercent_fid;
270 static jfieldID compact_compact_timeout_fid;
271 static jfieldID compact_compact_pages_fid;
272 static jfieldID compact_compact_empty_buckets_fid;
273 static jfieldID compact_compact_pages_free_fid;
274 static jfieldID compact_compact_pages_examine_fid;
275 static jfieldID compact_compact_levels_fid;
276 static jfieldID compact_compact_deadlock_fid;
277 static jfieldID compact_compact_pages_truncated_fid;
278 static jfieldID compact_compact_truncate_fid;
279 static jfieldID h_stat_hash_magic_fid;
280 static jfieldID h_stat_hash_version_fid;
281 static jfieldID h_stat_hash_metaflags_fid;
282 static jfieldID h_stat_hash_nkeys_fid;
283 static jfieldID h_stat_hash_ndata_fid;
284 static jfieldID h_stat_hash_pagecnt_fid;
285 static jfieldID h_stat_hash_pagesize_fid;
286 static jfieldID h_stat_hash_ffactor_fid;
287 static jfieldID h_stat_hash_buckets_fid;
288 static jfieldID h_stat_hash_free_fid;
289 static jfieldID h_stat_hash_bfree_fid;
290 static jfieldID h_stat_hash_bigpages_fid;
291 static jfieldID h_stat_hash_big_bfree_fid;
292 static jfieldID h_stat_hash_overflows_fid;
293 static jfieldID h_stat_hash_ovfl_free_fid;
294 static jfieldID h_stat_hash_dup_fid;
295 static jfieldID h_stat_hash_dup_free_fid;
296 static jfieldID heap_stat_heap_magic_fid;
297 static jfieldID heap_stat_heap_version_fid;
298 static jfieldID heap_stat_heap_metaflags_fid;
299 static jfieldID heap_stat_heap_nrecs_fid;
300 static jfieldID heap_stat_heap_pagecnt_fid;
301 static jfieldID heap_stat_heap_pagesize_fid;
302 static jfieldID heap_stat_heap_nregions_fid;
303 static jfieldID heap_stat_heap_regionsize_fid;
304 static jfieldID lock_stat_st_id_fid;
305 static jfieldID lock_stat_st_cur_maxid_fid;
306 static jfieldID lock_stat_st_initlocks_fid;
307 static jfieldID lock_stat_st_initlockers_fid;
308 static jfieldID lock_stat_st_initobjects_fid;
309 static jfieldID lock_stat_st_locks_fid;
310 static jfieldID lock_stat_st_lockers_fid;
311 static jfieldID lock_stat_st_objects_fid;
312 static jfieldID lock_stat_st_maxlocks_fid;
313 static jfieldID lock_stat_st_maxlockers_fid;
314 static jfieldID lock_stat_st_maxobjects_fid;
315 static jfieldID lock_stat_st_partitions_fid;
316 static jfieldID lock_stat_st_tablesize_fid;
317 static jfieldID lock_stat_st_nmodes_fid;
318 static jfieldID lock_stat_st_nlockers_fid;
319 static jfieldID lock_stat_st_nlocks_fid;
320 static jfieldID lock_stat_st_maxnlocks_fid;
321 static jfieldID lock_stat_st_maxhlocks_fid;
322 static jfieldID lock_stat_st_locksteals_fid;
323 static jfieldID lock_stat_st_maxlsteals_fid;
324 static jfieldID lock_stat_st_maxnlockers_fid;
325 static jfieldID lock_stat_st_nobjects_fid;
326 static jfieldID lock_stat_st_maxnobjects_fid;
327 static jfieldID lock_stat_st_maxhobjects_fid;
328 static jfieldID lock_stat_st_objectsteals_fid;
329 static jfieldID lock_stat_st_maxosteals_fid;
330 static jfieldID lock_stat_st_nrequests_fid;
331 static jfieldID lock_stat_st_nreleases_fid;
332 static jfieldID lock_stat_st_nupgrade_fid;
333 static jfieldID lock_stat_st_ndowngrade_fid;
334 static jfieldID lock_stat_st_lock_wait_fid;
335 static jfieldID lock_stat_st_lock_nowait_fid;
336 static jfieldID lock_stat_st_ndeadlocks_fid;
337 static jfieldID lock_stat_st_locktimeout_fid;
338 static jfieldID lock_stat_st_nlocktimeouts_fid;
339 static jfieldID lock_stat_st_txntimeout_fid;
340 static jfieldID lock_stat_st_ntxntimeouts_fid;
341 static jfieldID lock_stat_st_part_wait_fid;
342 static jfieldID lock_stat_st_part_nowait_fid;
343 static jfieldID lock_stat_st_part_max_wait_fid;
344 static jfieldID lock_stat_st_part_max_nowait_fid;
345 static jfieldID lock_stat_st_objs_wait_fid;
346 static jfieldID lock_stat_st_objs_nowait_fid;
347 static jfieldID lock_stat_st_lockers_wait_fid;
348 static jfieldID lock_stat_st_lockers_nowait_fid;
349 static jfieldID lock_stat_st_region_wait_fid;
350 static jfieldID lock_stat_st_region_nowait_fid;
351 static jfieldID lock_stat_st_hash_len_fid;
352 static jfieldID lock_stat_st_regsize_fid;
353 static jfieldID log_stat_st_magic_fid;
354 static jfieldID log_stat_st_version_fid;
355 static jfieldID log_stat_st_mode_fid;
356 static jfieldID log_stat_st_lg_bsize_fid;
357 static jfieldID log_stat_st_lg_size_fid;
358 static jfieldID log_stat_st_wc_bytes_fid;
359 static jfieldID log_stat_st_wc_mbytes_fid;
360 static jfieldID log_stat_st_fileid_init_fid;
361 static jfieldID log_stat_st_nfileid_fid;
362 static jfieldID log_stat_st_maxnfileid_fid;
363 static jfieldID log_stat_st_record_fid;
364 static jfieldID log_stat_st_w_bytes_fid;
365 static jfieldID log_stat_st_w_mbytes_fid;
366 static jfieldID log_stat_st_wcount_fid;
367 static jfieldID log_stat_st_wcount_fill_fid;
368 static jfieldID log_stat_st_rcount_fid;
369 static jfieldID log_stat_st_scount_fid;
370 static jfieldID log_stat_st_region_wait_fid;
371 static jfieldID log_stat_st_region_nowait_fid;
372 static jfieldID log_stat_st_cur_file_fid;
373 static jfieldID log_stat_st_cur_offset_fid;
374 static jfieldID log_stat_st_disk_file_fid;
375 static jfieldID log_stat_st_disk_offset_fid;
376 static jfieldID log_stat_st_maxcommitperflush_fid;
377 static jfieldID log_stat_st_mincommitperflush_fid;
378 static jfieldID log_stat_st_regsize_fid;
379 static jfieldID mpool_fstat_st_pagesize_fid;
380 static jfieldID mpool_fstat_st_map_fid;
381 static jfieldID mpool_fstat_st_cache_hit_fid;
382 static jfieldID mpool_fstat_st_cache_miss_fid;
383 static jfieldID mpool_fstat_st_page_create_fid;
384 static jfieldID mpool_fstat_st_page_in_fid;
385 static jfieldID mpool_fstat_st_page_out_fid;
386 static jfieldID mpool_fstat_st_backup_spins_fid;
387 static jfieldID mpool_fstat_file_name_fid;
388 static jfieldID mpool_stat_st_gbytes_fid;
389 static jfieldID mpool_stat_st_bytes_fid;
390 static jfieldID mpool_stat_st_ncache_fid;
391 static jfieldID mpool_stat_st_max_ncache_fid;
392 static jfieldID mpool_stat_st_mmapsize_fid;
393 static jfieldID mpool_stat_st_maxopenfd_fid;
394 static jfieldID mpool_stat_st_maxwrite_fid;
395 static jfieldID mpool_stat_st_maxwrite_sleep_fid;
396 static jfieldID mpool_stat_st_pages_fid;
397 static jfieldID mpool_stat_st_map_fid;
398 static jfieldID mpool_stat_st_cache_hit_fid;
399 static jfieldID mpool_stat_st_cache_miss_fid;
400 static jfieldID mpool_stat_st_page_create_fid;
401 static jfieldID mpool_stat_st_page_in_fid;
402 static jfieldID mpool_stat_st_page_out_fid;
403 static jfieldID mpool_stat_st_ro_evict_fid;
404 static jfieldID mpool_stat_st_rw_evict_fid;
405 static jfieldID mpool_stat_st_page_trickle_fid;
406 static jfieldID mpool_stat_st_page_clean_fid;
407 static jfieldID mpool_stat_st_page_dirty_fid;
408 static jfieldID mpool_stat_st_hash_buckets_fid;
409 static jfieldID mpool_stat_st_hash_mutexes_fid;
410 static jfieldID mpool_stat_st_pagesize_fid;
411 static jfieldID mpool_stat_st_hash_searches_fid;
412 static jfieldID mpool_stat_st_hash_longest_fid;
413 static jfieldID mpool_stat_st_hash_examined_fid;
414 static jfieldID mpool_stat_st_hash_nowait_fid;
415 static jfieldID mpool_stat_st_hash_wait_fid;
416 static jfieldID mpool_stat_st_hash_max_nowait_fid;
417 static jfieldID mpool_stat_st_hash_max_wait_fid;
418 static jfieldID mpool_stat_st_region_nowait_fid;
419 static jfieldID mpool_stat_st_region_wait_fid;
420 static jfieldID mpool_stat_st_mvcc_frozen_fid;
421 static jfieldID mpool_stat_st_mvcc_thawed_fid;
422 static jfieldID mpool_stat_st_mvcc_freed_fid;
423 static jfieldID mpool_stat_st_alloc_fid;
424 static jfieldID mpool_stat_st_alloc_buckets_fid;
425 static jfieldID mpool_stat_st_alloc_max_buckets_fid;
426 static jfieldID mpool_stat_st_alloc_pages_fid;
427 static jfieldID mpool_stat_st_alloc_max_pages_fid;
428 static jfieldID mpool_stat_st_io_wait_fid;
429 static jfieldID mpool_stat_st_sync_interrupted_fid;
430 static jfieldID mpool_stat_st_regsize_fid;
431 static jfieldID mpool_stat_st_regmax_fid;
432 static jfieldID mutex_stat_st_mutex_align_fid;
433 static jfieldID mutex_stat_st_mutex_tas_spins_fid;
434 static jfieldID mutex_stat_st_mutex_init_fid;
435 static jfieldID mutex_stat_st_mutex_cnt_fid;
436 static jfieldID mutex_stat_st_mutex_max_fid;
437 static jfieldID mutex_stat_st_mutex_free_fid;
438 static jfieldID mutex_stat_st_mutex_inuse_fid;
439 static jfieldID mutex_stat_st_mutex_inuse_max_fid;
440 static jfieldID mutex_stat_st_region_wait_fid;
441 static jfieldID mutex_stat_st_region_nowait_fid;
442 static jfieldID mutex_stat_st_regsize_fid;
443 static jfieldID mutex_stat_st_regmax_fid;
444 static jfieldID qam_stat_qs_magic_fid;
445 static jfieldID qam_stat_qs_version_fid;
446 static jfieldID qam_stat_qs_metaflags_fid;
447 static jfieldID qam_stat_qs_nkeys_fid;
448 static jfieldID qam_stat_qs_ndata_fid;
449 static jfieldID qam_stat_qs_pagesize_fid;
450 static jfieldID qam_stat_qs_extentsize_fid;
451 static jfieldID qam_stat_qs_pages_fid;
452 static jfieldID qam_stat_qs_re_len_fid;
453 static jfieldID qam_stat_qs_re_pad_fid;
454 static jfieldID qam_stat_qs_pgfree_fid;
455 static jfieldID qam_stat_qs_first_recno_fid;
456 static jfieldID qam_stat_qs_cur_recno_fid;
457 static jfieldID rep_stat_st_startup_complete_fid;
458 static jfieldID rep_stat_st_log_queued_fid;
459 static jfieldID rep_stat_st_status_fid;
460 static jfieldID rep_stat_st_next_lsn_fid;
461 static jfieldID rep_stat_st_waiting_lsn_fid;
462 static jfieldID rep_stat_st_max_perm_lsn_fid;
463 static jfieldID rep_stat_st_next_pg_fid;
464 static jfieldID rep_stat_st_waiting_pg_fid;
465 static jfieldID rep_stat_st_dupmasters_fid;
466 static jfieldID rep_stat_st_env_id_fid;
467 static jfieldID rep_stat_st_env_priority_fid;
468 static jfieldID rep_stat_st_bulk_fills_fid;
469 static jfieldID rep_stat_st_bulk_overflows_fid;
470 static jfieldID rep_stat_st_bulk_records_fid;
471 static jfieldID rep_stat_st_bulk_transfers_fid;
472 static jfieldID rep_stat_st_client_rerequests_fid;
473 static jfieldID rep_stat_st_client_svc_req_fid;
474 static jfieldID rep_stat_st_client_svc_miss_fid;
475 static jfieldID rep_stat_st_gen_fid;
476 static jfieldID rep_stat_st_egen_fid;
477 static jfieldID rep_stat_st_lease_chk_fid;
478 static jfieldID rep_stat_st_lease_chk_misses_fid;
479 static jfieldID rep_stat_st_lease_chk_refresh_fid;
480 static jfieldID rep_stat_st_lease_sends_fid;
481 static jfieldID rep_stat_st_log_duplicated_fid;
482 static jfieldID rep_stat_st_log_queued_max_fid;
483 static jfieldID rep_stat_st_log_queued_total_fid;
484 static jfieldID rep_stat_st_log_records_fid;
485 static jfieldID rep_stat_st_log_requested_fid;
486 static jfieldID rep_stat_st_master_fid;
487 static jfieldID rep_stat_st_master_changes_fid;
488 static jfieldID rep_stat_st_msgs_badgen_fid;
489 static jfieldID rep_stat_st_msgs_processed_fid;
490 static jfieldID rep_stat_st_msgs_recover_fid;
491 static jfieldID rep_stat_st_msgs_send_failures_fid;
492 static jfieldID rep_stat_st_msgs_sent_fid;
493 static jfieldID rep_stat_st_newsites_fid;
494 static jfieldID rep_stat_st_nsites_fid;
495 static jfieldID rep_stat_st_nthrottles_fid;
496 static jfieldID rep_stat_st_outdated_fid;
497 static jfieldID rep_stat_st_pg_duplicated_fid;
498 static jfieldID rep_stat_st_pg_records_fid;
499 static jfieldID rep_stat_st_pg_requested_fid;
500 static jfieldID rep_stat_st_txns_applied_fid;
501 static jfieldID rep_stat_st_startsync_delayed_fid;
502 static jfieldID rep_stat_st_elections_fid;
503 static jfieldID rep_stat_st_elections_won_fid;
504 static jfieldID rep_stat_st_election_cur_winner_fid;
505 static jfieldID rep_stat_st_election_gen_fid;
506 static jfieldID rep_stat_st_election_datagen_fid;
507 static jfieldID rep_stat_st_election_lsn_fid;
508 static jfieldID rep_stat_st_election_nsites_fid;
509 static jfieldID rep_stat_st_election_nvotes_fid;
510 static jfieldID rep_stat_st_election_priority_fid;
511 static jfieldID rep_stat_st_election_status_fid;
512 static jfieldID rep_stat_st_election_tiebreaker_fid;
513 static jfieldID rep_stat_st_election_votes_fid;
514 static jfieldID rep_stat_st_election_sec_fid;
515 static jfieldID rep_stat_st_election_usec_fid;
516 static jfieldID rep_stat_st_max_lease_sec_fid;
517 static jfieldID rep_stat_st_max_lease_usec_fid;
518 static jfieldID repmgr_stat_st_perm_failed_fid;
519 static jfieldID repmgr_stat_st_msgs_queued_fid;
520 static jfieldID repmgr_stat_st_msgs_dropped_fid;
521 static jfieldID repmgr_stat_st_connection_drop_fid;
522 static jfieldID repmgr_stat_st_connect_fail_fid;
523 static jfieldID repmgr_stat_st_elect_threads_fid;
524 static jfieldID repmgr_stat_st_max_elect_threads_fid;
525 static jfieldID seq_stat_st_wait_fid;
526 static jfieldID seq_stat_st_nowait_fid;
527 static jfieldID seq_stat_st_current_fid;
528 static jfieldID seq_stat_st_value_fid;
529 static jfieldID seq_stat_st_last_value_fid;
530 static jfieldID seq_stat_st_min_fid;
531 static jfieldID seq_stat_st_max_fid;
532 static jfieldID seq_stat_st_cache_size_fid;
533 static jfieldID seq_stat_st_flags_fid;
534 static jfieldID txn_stat_st_nrestores_fid;
535 static jfieldID txn_stat_st_last_ckp_fid;
536 static jfieldID txn_stat_st_time_ckp_fid;
537 static jfieldID txn_stat_st_last_txnid_fid;
538 static jfieldID txn_stat_st_inittxns_fid;
539 static jfieldID txn_stat_st_maxtxns_fid;
540 static jfieldID txn_stat_st_naborts_fid;
541 static jfieldID txn_stat_st_nbegins_fid;
542 static jfieldID txn_stat_st_ncommits_fid;
543 static jfieldID txn_stat_st_nactive_fid;
544 static jfieldID txn_stat_st_nsnapshot_fid;
545 static jfieldID txn_stat_st_maxnactive_fid;
546 static jfieldID txn_stat_st_maxnsnapshot_fid;
547 static jfieldID txn_stat_st_region_wait_fid;
548 static jfieldID txn_stat_st_region_nowait_fid;
549 static jfieldID txn_stat_st_regsize_fid;
550 static jfieldID txn_stat_st_txnarray_fid;
551 static jfieldID txn_active_txnid_fid;
552 static jfieldID txn_active_parentid_fid;
553 static jfieldID txn_active_pid_fid;
554 static jfieldID txn_active_lsn_fid;
555 static jfieldID txn_active_read_lsn_fid;
556 static jfieldID txn_active_mvcc_ref_fid;
557 static jfieldID txn_active_priority_fid;
558 static jfieldID txn_active_gid_fid;
559 static jfieldID txn_active_name_fid;
560 /* END-STAT-FIELD-DECLS */
561
562 static jmethodID dbenv_construct, dbt_construct, dblsn_construct;
563 static jmethodID dbpreplist_construct, dbtxn_construct;
564 static jmethodID bt_stat_construct, get_err_msg_method, h_stat_construct;
565 static jmethodID heap_stat_construct, lock_stat_construct, log_stat_construct;
566 static jmethodID mpool_stat_construct, mpool_fstat_construct;
567 static jmethodID mutex_stat_construct, qam_stat_construct;
568 static jmethodID rep_stat_construct, repmgr_stat_construct, seq_stat_construct;
569 static jmethodID txn_stat_construct, txn_active_construct;
570 static jmethodID dbex_construct, deadex_construct, lockex_construct;
571 static jmethodID heapfullex_construct, memex_construct, memex_update_method;
572 static jmethodID repdupmasterex_construct, rephandledeadex_construct;
573 static jmethodID repholdelectionex_construct, repjoinfailex_construct;
574 static jmethodID repmgr_siteinfo_construct, rephost_construct, repleaseexpiredex_construct;
575 static jmethodID replockoutex_construct;
576 static jmethodID repunavailex_construct;
577 static jmethodID runrecex_construct, versionex_construct;
578 static jmethodID filenotfoundex_construct, illegalargex_construct;
579 static jmethodID outofmemerr_construct;
580 static jmethodID lock_construct;
581
582 static jmethodID app_dispatch_method, errcall_method, env_feedback_method;
583 static jmethodID msgcall_method, paniccall_method, rep_transport_method;
584 static jmethodID panic_event_notify_method, rep_client_event_notify_method;
585 static jmethodID rep_connect_broken_event_notify_method;
586 static jmethodID rep_connect_established_event_notify_method;
587 static jmethodID rep_connect_try_failed_event_notify_method;
588 static jmethodID rep_dupmaster_event_notify_method;
589 static jmethodID rep_elected_event_notify_method;
590 static jmethodID rep_election_failed_event_notify_method;
591 static jmethodID rep_init_done_event_notify_method;
592 static jmethodID rep_join_failure_event_notify_method;
593 static jmethodID rep_local_site_removed_notify_method;
594 static jmethodID rep_master_event_notify_method;
595 static jmethodID rep_master_failure_event_notify_method;
596 static jmethodID rep_new_master_event_notify_method;
597 static jmethodID rep_perm_failed_event_notify_method;
598 static jmethodID rep_site_added_event_notify_method;
599 static jmethodID rep_site_removed_event_notify_method;
600 static jmethodID rep_startup_done_event_notify_method;
601 static jmethodID repmgr_msg_dispatch_method;
602 static jmethodID write_failed_event_notify_method;
603
604 static jmethodID append_recno_method, backup_close_method, backup_open_method;
605 static jmethodID backup_write_method, bt_compare_method, bt_compress_method;
606 static jmethodID bt_decompress_method, bt_prefix_method;
607 static jmethodID db_feedback_method, dup_compare_method;
608 static jmethodID foreignkey_nullify_method, h_compare_method, h_hash_method;
609 static jmethodID partition_method, seckey_create_method;
610
611 static jmethodID outputstream_write_method;
612
613 const struct {
614 jclass *cl;
615 const char *name;
616 } all_classes[] = {
617 { &dbenv_class, DB_PKG "internal/DbEnv" },
618 { &db_class, DB_PKG "internal/Db" },
619 { &dbc_class, DB_PKG "internal/Dbc" },
620 { &dbt_class, DB_PKG "DatabaseEntry" },
621 { &dblsn_class, DB_PKG "LogSequenceNumber" },
622 { &dbpreplist_class, DB_PKG "PreparedTransaction" },
623 { &dbtxn_class, DB_PKG "internal/DbTxn" },
624
625 { &bt_stat_class, DB_PKG "BtreeStats" },
626 { &compact_class, DB_PKG "CompactStats" },
627 { &h_stat_class, DB_PKG "HashStats" },
628 { &heap_stat_class, DB_PKG "HeapStats" },
629 { &lock_stat_class, DB_PKG "LockStats" },
630 { &log_stat_class, DB_PKG "LogStats" },
631 { &mpool_fstat_class, DB_PKG "CacheFileStats" },
632 { &mpool_stat_class, DB_PKG "CacheStats" },
633 { &mutex_stat_class, DB_PKG "MutexStats" },
634 { &qam_stat_class, DB_PKG "QueueStats" },
635 { &rep_stat_class, DB_PKG "ReplicationStats" },
636 { &repmgr_stat_class, DB_PKG "ReplicationManagerStats" },
637 { &seq_stat_class, DB_PKG "SequenceStats" },
638 { &txn_stat_class, DB_PKG "TransactionStats" },
639 { &txn_active_class, DB_PKG "TransactionStats$Active" },
640
641 { &keyrange_class, DB_PKG "KeyRange" },
642 { &lock_class, DB_PKG "internal/DbLock" },
643 { &lockreq_class, DB_PKG "LockRequest" },
644
645 { &dbex_class, DB_PKG "DatabaseException" },
646 { &deadex_class, DB_PKG "DeadlockException" },
647 { &heapfullex_class, DB_PKG "HeapFullException" },
648 { &lockex_class, DB_PKG "LockNotGrantedException" },
649 { &memex_class, DB_PKG "MemoryException" },
650 { &repdupmasterex_class, DB_PKG "ReplicationDuplicateMasterException" },
651 { &rephandledeadex_class, DB_PKG "ReplicationHandleDeadException" },
652 { &repholdelectionex_class, DB_PKG "ReplicationHoldElectionException" },
653 { &rephost_class, DB_PKG "ReplicationHostAddress" },
654 { &repmgr_siteinfo_class, DB_PKG "ReplicationManagerSiteInfo" },
655 { &repjoinfailex_class, DB_PKG "ReplicationJoinFailureException" },
656 { &repleaseexpiredex_class, DB_PKG "ReplicationLeaseExpiredException" },
657 { &replockoutex_class, DB_PKG "ReplicationLockoutException" },
658 { &repunavailex_class, DB_PKG "ReplicationSiteUnavailableException" },
659 { &runrecex_class, DB_PKG "RunRecoveryException" },
660 { &versionex_class, DB_PKG "VersionMismatchException" },
661 { &filenotfoundex_class, "java/io/FileNotFoundException" },
662 { &illegalargex_class, "java/lang/IllegalArgumentException" },
663 { &outofmemerr_class, "java/lang/OutOfMemoryError" },
664
665 { &bytearray_class, "[B" },
666 { &string_class, "java/lang/String" },
667 { &outputstream_class, "java/io/OutputStream" }
668 };
669
670 const struct {
671 jfieldID *fid;
672 jclass *cl;
673 const char *name;
674 const char *sig;
675 } all_fields[] = {
676 { &dbc_cptr_fid, &dbc_class, "swigCPtr", "J" },
677
678 { &dblsn_file_fid, &dblsn_class, "file", "I" },
679 { &dblsn_offset_fid, &dblsn_class, "offset", "I" },
680
681 { &dbt_data_fid, &dbt_class, "data", "[B" },
682 { &dbt_data_nio_fid, &dbt_class, "data_nio", "Ljava/nio/ByteBuffer;" },
683 { &dbt_size_fid, &dbt_class, "size", "I" },
684 { &dbt_ulen_fid, &dbt_class, "ulen", "I" },
685 { &dbt_dlen_fid, &dbt_class, "dlen", "I" },
686 { &dbt_doff_fid, &dbt_class, "doff", "I" },
687 { &dbt_flags_fid, &dbt_class, "flags", "I" },
688 { &dbt_offset_fid, &dbt_class, "offset", "I" },
689
690 { &kr_less_fid, &keyrange_class, "less", "D" },
691 { &kr_equal_fid, &keyrange_class, "equal", "D" },
692 { &kr_greater_fid, &keyrange_class, "greater", "D" },
693
694 { &lock_cptr_fid, &lock_class, "swigCPtr", "J" },
695
696 { &lockreq_op_fid, &lockreq_class, "op", "I" },
697 { &lockreq_modeflag_fid, &lockreq_class, "modeFlag", "I" },
698 { &lockreq_timeout_fid, &lockreq_class, "timeout", "I" },
699 { &lockreq_obj_fid, &lockreq_class, "obj",
700 "L" DB_PKG "DatabaseEntry;" },
701 { &lockreq_lock_fid, &lockreq_class, "lock",
702 "L" DB_PKG "internal/DbLock;" },
703 { &txn_commit_token, &dbtxn_class, "commitToken", "[B" },
704
705 /* BEGIN-STAT-FIELDS */
706 { &bt_stat_bt_magic_fid, &bt_stat_class, "bt_magic", "I" },
707 { &bt_stat_bt_version_fid, &bt_stat_class, "bt_version", "I" },
708 { &bt_stat_bt_metaflags_fid, &bt_stat_class, "bt_metaflags", "I" },
709 { &bt_stat_bt_nkeys_fid, &bt_stat_class, "bt_nkeys", "I" },
710 { &bt_stat_bt_ndata_fid, &bt_stat_class, "bt_ndata", "I" },
711 { &bt_stat_bt_pagecnt_fid, &bt_stat_class, "bt_pagecnt", "I" },
712 { &bt_stat_bt_pagesize_fid, &bt_stat_class, "bt_pagesize", "I" },
713 { &bt_stat_bt_minkey_fid, &bt_stat_class, "bt_minkey", "I" },
714 { &bt_stat_bt_re_len_fid, &bt_stat_class, "bt_re_len", "I" },
715 { &bt_stat_bt_re_pad_fid, &bt_stat_class, "bt_re_pad", "I" },
716 { &bt_stat_bt_levels_fid, &bt_stat_class, "bt_levels", "I" },
717 { &bt_stat_bt_int_pg_fid, &bt_stat_class, "bt_int_pg", "I" },
718 { &bt_stat_bt_leaf_pg_fid, &bt_stat_class, "bt_leaf_pg", "I" },
719 { &bt_stat_bt_dup_pg_fid, &bt_stat_class, "bt_dup_pg", "I" },
720 { &bt_stat_bt_over_pg_fid, &bt_stat_class, "bt_over_pg", "I" },
721 { &bt_stat_bt_empty_pg_fid, &bt_stat_class, "bt_empty_pg", "I" },
722 { &bt_stat_bt_free_fid, &bt_stat_class, "bt_free", "I" },
723 { &bt_stat_bt_int_pgfree_fid, &bt_stat_class, "bt_int_pgfree", "J" },
724 { &bt_stat_bt_leaf_pgfree_fid, &bt_stat_class, "bt_leaf_pgfree", "J" },
725 { &bt_stat_bt_dup_pgfree_fid, &bt_stat_class, "bt_dup_pgfree", "J" },
726 { &bt_stat_bt_over_pgfree_fid, &bt_stat_class, "bt_over_pgfree", "J" },
727 { &compact_compact_fillpercent_fid, &compact_class, "compact_fillpercent", "I" },
728 { &compact_compact_timeout_fid, &compact_class, "compact_timeout", "I" },
729 { &compact_compact_pages_fid, &compact_class, "compact_pages", "I" },
730 { &compact_compact_empty_buckets_fid, &compact_class, "compact_empty_buckets", "I" },
731 { &compact_compact_pages_free_fid, &compact_class, "compact_pages_free", "I" },
732 { &compact_compact_pages_examine_fid, &compact_class, "compact_pages_examine", "I" },
733 { &compact_compact_levels_fid, &compact_class, "compact_levels", "I" },
734 { &compact_compact_deadlock_fid, &compact_class, "compact_deadlock", "I" },
735 { &compact_compact_pages_truncated_fid, &compact_class, "compact_pages_truncated", "I" },
736 { &compact_compact_truncate_fid, &compact_class, "compact_truncate", "I" },
737 { &h_stat_hash_magic_fid, &h_stat_class, "hash_magic", "I" },
738 { &h_stat_hash_version_fid, &h_stat_class, "hash_version", "I" },
739 { &h_stat_hash_metaflags_fid, &h_stat_class, "hash_metaflags", "I" },
740 { &h_stat_hash_nkeys_fid, &h_stat_class, "hash_nkeys", "I" },
741 { &h_stat_hash_ndata_fid, &h_stat_class, "hash_ndata", "I" },
742 { &h_stat_hash_pagecnt_fid, &h_stat_class, "hash_pagecnt", "I" },
743 { &h_stat_hash_pagesize_fid, &h_stat_class, "hash_pagesize", "I" },
744 { &h_stat_hash_ffactor_fid, &h_stat_class, "hash_ffactor", "I" },
745 { &h_stat_hash_buckets_fid, &h_stat_class, "hash_buckets", "I" },
746 { &h_stat_hash_free_fid, &h_stat_class, "hash_free", "I" },
747 { &h_stat_hash_bfree_fid, &h_stat_class, "hash_bfree", "J" },
748 { &h_stat_hash_bigpages_fid, &h_stat_class, "hash_bigpages", "I" },
749 { &h_stat_hash_big_bfree_fid, &h_stat_class, "hash_big_bfree", "J" },
750 { &h_stat_hash_overflows_fid, &h_stat_class, "hash_overflows", "I" },
751 { &h_stat_hash_ovfl_free_fid, &h_stat_class, "hash_ovfl_free", "J" },
752 { &h_stat_hash_dup_fid, &h_stat_class, "hash_dup", "I" },
753 { &h_stat_hash_dup_free_fid, &h_stat_class, "hash_dup_free", "J" },
754 { &heap_stat_heap_magic_fid, &heap_stat_class, "heap_magic", "I" },
755 { &heap_stat_heap_version_fid, &heap_stat_class, "heap_version", "I" },
756 { &heap_stat_heap_metaflags_fid, &heap_stat_class, "heap_metaflags", "I" },
757 { &heap_stat_heap_nrecs_fid, &heap_stat_class, "heap_nrecs", "I" },
758 { &heap_stat_heap_pagecnt_fid, &heap_stat_class, "heap_pagecnt", "I" },
759 { &heap_stat_heap_pagesize_fid, &heap_stat_class, "heap_pagesize", "I" },
760 { &heap_stat_heap_nregions_fid, &heap_stat_class, "heap_nregions", "I" },
761 { &heap_stat_heap_regionsize_fid, &heap_stat_class, "heap_regionsize", "I" },
762 { &lock_stat_st_id_fid, &lock_stat_class, "st_id", "I" },
763 { &lock_stat_st_cur_maxid_fid, &lock_stat_class, "st_cur_maxid", "I" },
764 { &lock_stat_st_initlocks_fid, &lock_stat_class, "st_initlocks", "I" },
765 { &lock_stat_st_initlockers_fid, &lock_stat_class, "st_initlockers", "I" },
766 { &lock_stat_st_initobjects_fid, &lock_stat_class, "st_initobjects", "I" },
767 { &lock_stat_st_locks_fid, &lock_stat_class, "st_locks", "I" },
768 { &lock_stat_st_lockers_fid, &lock_stat_class, "st_lockers", "I" },
769 { &lock_stat_st_objects_fid, &lock_stat_class, "st_objects", "I" },
770 { &lock_stat_st_maxlocks_fid, &lock_stat_class, "st_maxlocks", "I" },
771 { &lock_stat_st_maxlockers_fid, &lock_stat_class, "st_maxlockers", "I" },
772 { &lock_stat_st_maxobjects_fid, &lock_stat_class, "st_maxobjects", "I" },
773 { &lock_stat_st_partitions_fid, &lock_stat_class, "st_partitions", "I" },
774 { &lock_stat_st_tablesize_fid, &lock_stat_class, "st_tablesize", "I" },
775 { &lock_stat_st_nmodes_fid, &lock_stat_class, "st_nmodes", "I" },
776 { &lock_stat_st_nlockers_fid, &lock_stat_class, "st_nlockers", "I" },
777 { &lock_stat_st_nlocks_fid, &lock_stat_class, "st_nlocks", "I" },
778 { &lock_stat_st_maxnlocks_fid, &lock_stat_class, "st_maxnlocks", "I" },
779 { &lock_stat_st_maxhlocks_fid, &lock_stat_class, "st_maxhlocks", "I" },
780 { &lock_stat_st_locksteals_fid, &lock_stat_class, "st_locksteals", "J" },
781 { &lock_stat_st_maxlsteals_fid, &lock_stat_class, "st_maxlsteals", "J" },
782 { &lock_stat_st_maxnlockers_fid, &lock_stat_class, "st_maxnlockers", "I" },
783 { &lock_stat_st_nobjects_fid, &lock_stat_class, "st_nobjects", "I" },
784 { &lock_stat_st_maxnobjects_fid, &lock_stat_class, "st_maxnobjects", "I" },
785 { &lock_stat_st_maxhobjects_fid, &lock_stat_class, "st_maxhobjects", "I" },
786 { &lock_stat_st_objectsteals_fid, &lock_stat_class, "st_objectsteals", "J" },
787 { &lock_stat_st_maxosteals_fid, &lock_stat_class, "st_maxosteals", "J" },
788 { &lock_stat_st_nrequests_fid, &lock_stat_class, "st_nrequests", "J" },
789 { &lock_stat_st_nreleases_fid, &lock_stat_class, "st_nreleases", "J" },
790 { &lock_stat_st_nupgrade_fid, &lock_stat_class, "st_nupgrade", "J" },
791 { &lock_stat_st_ndowngrade_fid, &lock_stat_class, "st_ndowngrade", "J" },
792 { &lock_stat_st_lock_wait_fid, &lock_stat_class, "st_lock_wait", "J" },
793 { &lock_stat_st_lock_nowait_fid, &lock_stat_class, "st_lock_nowait", "J" },
794 { &lock_stat_st_ndeadlocks_fid, &lock_stat_class, "st_ndeadlocks", "J" },
795 { &lock_stat_st_locktimeout_fid, &lock_stat_class, "st_locktimeout", "I" },
796 { &lock_stat_st_nlocktimeouts_fid, &lock_stat_class, "st_nlocktimeouts", "J" },
797 { &lock_stat_st_txntimeout_fid, &lock_stat_class, "st_txntimeout", "I" },
798 { &lock_stat_st_ntxntimeouts_fid, &lock_stat_class, "st_ntxntimeouts", "J" },
799 { &lock_stat_st_part_wait_fid, &lock_stat_class, "st_part_wait", "J" },
800 { &lock_stat_st_part_nowait_fid, &lock_stat_class, "st_part_nowait", "J" },
801 { &lock_stat_st_part_max_wait_fid, &lock_stat_class, "st_part_max_wait", "J" },
802 { &lock_stat_st_part_max_nowait_fid, &lock_stat_class, "st_part_max_nowait", "J" },
803 { &lock_stat_st_objs_wait_fid, &lock_stat_class, "st_objs_wait", "J" },
804 { &lock_stat_st_objs_nowait_fid, &lock_stat_class, "st_objs_nowait", "J" },
805 { &lock_stat_st_lockers_wait_fid, &lock_stat_class, "st_lockers_wait", "J" },
806 { &lock_stat_st_lockers_nowait_fid, &lock_stat_class, "st_lockers_nowait", "J" },
807 { &lock_stat_st_region_wait_fid, &lock_stat_class, "st_region_wait", "J" },
808 { &lock_stat_st_region_nowait_fid, &lock_stat_class, "st_region_nowait", "J" },
809 { &lock_stat_st_hash_len_fid, &lock_stat_class, "st_hash_len", "I" },
810 { &lock_stat_st_regsize_fid, &lock_stat_class, "st_regsize", "J" },
811 { &log_stat_st_magic_fid, &log_stat_class, "st_magic", "I" },
812 { &log_stat_st_version_fid, &log_stat_class, "st_version", "I" },
813 { &log_stat_st_mode_fid, &log_stat_class, "st_mode", "I" },
814 { &log_stat_st_lg_bsize_fid, &log_stat_class, "st_lg_bsize", "I" },
815 { &log_stat_st_lg_size_fid, &log_stat_class, "st_lg_size", "I" },
816 { &log_stat_st_wc_bytes_fid, &log_stat_class, "st_wc_bytes", "I" },
817 { &log_stat_st_wc_mbytes_fid, &log_stat_class, "st_wc_mbytes", "I" },
818 { &log_stat_st_fileid_init_fid, &log_stat_class, "st_fileid_init", "I" },
819 { &log_stat_st_nfileid_fid, &log_stat_class, "st_nfileid", "I" },
820 { &log_stat_st_maxnfileid_fid, &log_stat_class, "st_maxnfileid", "I" },
821 { &log_stat_st_record_fid, &log_stat_class, "st_record", "J" },
822 { &log_stat_st_w_bytes_fid, &log_stat_class, "st_w_bytes", "I" },
823 { &log_stat_st_w_mbytes_fid, &log_stat_class, "st_w_mbytes", "I" },
824 { &log_stat_st_wcount_fid, &log_stat_class, "st_wcount", "J" },
825 { &log_stat_st_wcount_fill_fid, &log_stat_class, "st_wcount_fill", "J" },
826 { &log_stat_st_rcount_fid, &log_stat_class, "st_rcount", "J" },
827 { &log_stat_st_scount_fid, &log_stat_class, "st_scount", "J" },
828 { &log_stat_st_region_wait_fid, &log_stat_class, "st_region_wait", "J" },
829 { &log_stat_st_region_nowait_fid, &log_stat_class, "st_region_nowait", "J" },
830 { &log_stat_st_cur_file_fid, &log_stat_class, "st_cur_file", "I" },
831 { &log_stat_st_cur_offset_fid, &log_stat_class, "st_cur_offset", "I" },
832 { &log_stat_st_disk_file_fid, &log_stat_class, "st_disk_file", "I" },
833 { &log_stat_st_disk_offset_fid, &log_stat_class, "st_disk_offset", "I" },
834 { &log_stat_st_maxcommitperflush_fid, &log_stat_class, "st_maxcommitperflush", "I" },
835 { &log_stat_st_mincommitperflush_fid, &log_stat_class, "st_mincommitperflush", "I" },
836 { &log_stat_st_regsize_fid, &log_stat_class, "st_regsize", "J" },
837 { &mpool_fstat_st_pagesize_fid, &mpool_fstat_class, "st_pagesize", "I" },
838 { &mpool_fstat_st_map_fid, &mpool_fstat_class, "st_map", "I" },
839 { &mpool_fstat_st_cache_hit_fid, &mpool_fstat_class, "st_cache_hit", "J" },
840 { &mpool_fstat_st_cache_miss_fid, &mpool_fstat_class, "st_cache_miss", "J" },
841 { &mpool_fstat_st_page_create_fid, &mpool_fstat_class, "st_page_create", "J" },
842 { &mpool_fstat_st_page_in_fid, &mpool_fstat_class, "st_page_in", "J" },
843 { &mpool_fstat_st_page_out_fid, &mpool_fstat_class, "st_page_out", "J" },
844 { &mpool_fstat_st_backup_spins_fid, &mpool_fstat_class, "st_backup_spins", "J" },
845 { &mpool_fstat_file_name_fid, &mpool_fstat_class, "file_name", "Ljava/lang/String;" },
846 { &mpool_stat_st_gbytes_fid, &mpool_stat_class, "st_gbytes", "I" },
847 { &mpool_stat_st_bytes_fid, &mpool_stat_class, "st_bytes", "I" },
848 { &mpool_stat_st_ncache_fid, &mpool_stat_class, "st_ncache", "I" },
849 { &mpool_stat_st_max_ncache_fid, &mpool_stat_class, "st_max_ncache", "I" },
850 { &mpool_stat_st_mmapsize_fid, &mpool_stat_class, "st_mmapsize", "J" },
851 { &mpool_stat_st_maxopenfd_fid, &mpool_stat_class, "st_maxopenfd", "I" },
852 { &mpool_stat_st_maxwrite_fid, &mpool_stat_class, "st_maxwrite", "I" },
853 { &mpool_stat_st_maxwrite_sleep_fid, &mpool_stat_class, "st_maxwrite_sleep", "I" },
854 { &mpool_stat_st_pages_fid, &mpool_stat_class, "st_pages", "I" },
855 { &mpool_stat_st_map_fid, &mpool_stat_class, "st_map", "I" },
856 { &mpool_stat_st_cache_hit_fid, &mpool_stat_class, "st_cache_hit", "J" },
857 { &mpool_stat_st_cache_miss_fid, &mpool_stat_class, "st_cache_miss", "J" },
858 { &mpool_stat_st_page_create_fid, &mpool_stat_class, "st_page_create", "J" },
859 { &mpool_stat_st_page_in_fid, &mpool_stat_class, "st_page_in", "J" },
860 { &mpool_stat_st_page_out_fid, &mpool_stat_class, "st_page_out", "J" },
861 { &mpool_stat_st_ro_evict_fid, &mpool_stat_class, "st_ro_evict", "J" },
862 { &mpool_stat_st_rw_evict_fid, &mpool_stat_class, "st_rw_evict", "J" },
863 { &mpool_stat_st_page_trickle_fid, &mpool_stat_class, "st_page_trickle", "J" },
864 { &mpool_stat_st_page_clean_fid, &mpool_stat_class, "st_page_clean", "I" },
865 { &mpool_stat_st_page_dirty_fid, &mpool_stat_class, "st_page_dirty", "I" },
866 { &mpool_stat_st_hash_buckets_fid, &mpool_stat_class, "st_hash_buckets", "I" },
867 { &mpool_stat_st_hash_mutexes_fid, &mpool_stat_class, "st_hash_mutexes", "I" },
868 { &mpool_stat_st_pagesize_fid, &mpool_stat_class, "st_pagesize", "I" },
869 { &mpool_stat_st_hash_searches_fid, &mpool_stat_class, "st_hash_searches", "I" },
870 { &mpool_stat_st_hash_longest_fid, &mpool_stat_class, "st_hash_longest", "I" },
871 { &mpool_stat_st_hash_examined_fid, &mpool_stat_class, "st_hash_examined", "J" },
872 { &mpool_stat_st_hash_nowait_fid, &mpool_stat_class, "st_hash_nowait", "J" },
873 { &mpool_stat_st_hash_wait_fid, &mpool_stat_class, "st_hash_wait", "J" },
874 { &mpool_stat_st_hash_max_nowait_fid, &mpool_stat_class, "st_hash_max_nowait", "J" },
875 { &mpool_stat_st_hash_max_wait_fid, &mpool_stat_class, "st_hash_max_wait", "J" },
876 { &mpool_stat_st_region_nowait_fid, &mpool_stat_class, "st_region_nowait", "J" },
877 { &mpool_stat_st_region_wait_fid, &mpool_stat_class, "st_region_wait", "J" },
878 { &mpool_stat_st_mvcc_frozen_fid, &mpool_stat_class, "st_mvcc_frozen", "J" },
879 { &mpool_stat_st_mvcc_thawed_fid, &mpool_stat_class, "st_mvcc_thawed", "J" },
880 { &mpool_stat_st_mvcc_freed_fid, &mpool_stat_class, "st_mvcc_freed", "J" },
881 { &mpool_stat_st_alloc_fid, &mpool_stat_class, "st_alloc", "J" },
882 { &mpool_stat_st_alloc_buckets_fid, &mpool_stat_class, "st_alloc_buckets", "J" },
883 { &mpool_stat_st_alloc_max_buckets_fid, &mpool_stat_class, "st_alloc_max_buckets", "J" },
884 { &mpool_stat_st_alloc_pages_fid, &mpool_stat_class, "st_alloc_pages", "J" },
885 { &mpool_stat_st_alloc_max_pages_fid, &mpool_stat_class, "st_alloc_max_pages", "J" },
886 { &mpool_stat_st_io_wait_fid, &mpool_stat_class, "st_io_wait", "J" },
887 { &mpool_stat_st_sync_interrupted_fid, &mpool_stat_class, "st_sync_interrupted", "J" },
888 { &mpool_stat_st_regsize_fid, &mpool_stat_class, "st_regsize", "J" },
889 { &mpool_stat_st_regmax_fid, &mpool_stat_class, "st_regmax", "J" },
890 { &mutex_stat_st_mutex_align_fid, &mutex_stat_class, "st_mutex_align", "I" },
891 { &mutex_stat_st_mutex_tas_spins_fid, &mutex_stat_class, "st_mutex_tas_spins", "I" },
892 { &mutex_stat_st_mutex_init_fid, &mutex_stat_class, "st_mutex_init", "I" },
893 { &mutex_stat_st_mutex_cnt_fid, &mutex_stat_class, "st_mutex_cnt", "I" },
894 { &mutex_stat_st_mutex_max_fid, &mutex_stat_class, "st_mutex_max", "I" },
895 { &mutex_stat_st_mutex_free_fid, &mutex_stat_class, "st_mutex_free", "I" },
896 { &mutex_stat_st_mutex_inuse_fid, &mutex_stat_class, "st_mutex_inuse", "I" },
897 { &mutex_stat_st_mutex_inuse_max_fid, &mutex_stat_class, "st_mutex_inuse_max", "I" },
898 { &mutex_stat_st_region_wait_fid, &mutex_stat_class, "st_region_wait", "J" },
899 { &mutex_stat_st_region_nowait_fid, &mutex_stat_class, "st_region_nowait", "J" },
900 { &mutex_stat_st_regsize_fid, &mutex_stat_class, "st_regsize", "J" },
901 { &mutex_stat_st_regmax_fid, &mutex_stat_class, "st_regmax", "J" },
902 { &qam_stat_qs_magic_fid, &qam_stat_class, "qs_magic", "I" },
903 { &qam_stat_qs_version_fid, &qam_stat_class, "qs_version", "I" },
904 { &qam_stat_qs_metaflags_fid, &qam_stat_class, "qs_metaflags", "I" },
905 { &qam_stat_qs_nkeys_fid, &qam_stat_class, "qs_nkeys", "I" },
906 { &qam_stat_qs_ndata_fid, &qam_stat_class, "qs_ndata", "I" },
907 { &qam_stat_qs_pagesize_fid, &qam_stat_class, "qs_pagesize", "I" },
908 { &qam_stat_qs_extentsize_fid, &qam_stat_class, "qs_extentsize", "I" },
909 { &qam_stat_qs_pages_fid, &qam_stat_class, "qs_pages", "I" },
910 { &qam_stat_qs_re_len_fid, &qam_stat_class, "qs_re_len", "I" },
911 { &qam_stat_qs_re_pad_fid, &qam_stat_class, "qs_re_pad", "I" },
912 { &qam_stat_qs_pgfree_fid, &qam_stat_class, "qs_pgfree", "I" },
913 { &qam_stat_qs_first_recno_fid, &qam_stat_class, "qs_first_recno", "I" },
914 { &qam_stat_qs_cur_recno_fid, &qam_stat_class, "qs_cur_recno", "I" },
915 { &rep_stat_st_startup_complete_fid, &rep_stat_class, "st_startup_complete", "I" },
916 { &rep_stat_st_log_queued_fid, &rep_stat_class, "st_log_queued", "J" },
917 { &rep_stat_st_status_fid, &rep_stat_class, "st_status", "I" },
918 { &rep_stat_st_next_lsn_fid, &rep_stat_class, "st_next_lsn", "L" DB_PKG "LogSequenceNumber;" },
919 { &rep_stat_st_waiting_lsn_fid, &rep_stat_class, "st_waiting_lsn", "L" DB_PKG "LogSequenceNumber;" },
920 { &rep_stat_st_max_perm_lsn_fid, &rep_stat_class, "st_max_perm_lsn", "L" DB_PKG "LogSequenceNumber;" },
921 { &rep_stat_st_next_pg_fid, &rep_stat_class, "st_next_pg", "I" },
922 { &rep_stat_st_waiting_pg_fid, &rep_stat_class, "st_waiting_pg", "I" },
923 { &rep_stat_st_dupmasters_fid, &rep_stat_class, "st_dupmasters", "I" },
924 { &rep_stat_st_env_id_fid, &rep_stat_class, "st_env_id", "J" },
925 { &rep_stat_st_env_priority_fid, &rep_stat_class, "st_env_priority", "I" },
926 { &rep_stat_st_bulk_fills_fid, &rep_stat_class, "st_bulk_fills", "J" },
927 { &rep_stat_st_bulk_overflows_fid, &rep_stat_class, "st_bulk_overflows", "J" },
928 { &rep_stat_st_bulk_records_fid, &rep_stat_class, "st_bulk_records", "J" },
929 { &rep_stat_st_bulk_transfers_fid, &rep_stat_class, "st_bulk_transfers", "J" },
930 { &rep_stat_st_client_rerequests_fid, &rep_stat_class, "st_client_rerequests", "J" },
931 { &rep_stat_st_client_svc_req_fid, &rep_stat_class, "st_client_svc_req", "J" },
932 { &rep_stat_st_client_svc_miss_fid, &rep_stat_class, "st_client_svc_miss", "J" },
933 { &rep_stat_st_gen_fid, &rep_stat_class, "st_gen", "I" },
934 { &rep_stat_st_egen_fid, &rep_stat_class, "st_egen", "I" },
935 { &rep_stat_st_lease_chk_fid, &rep_stat_class, "st_lease_chk", "J" },
936 { &rep_stat_st_lease_chk_misses_fid, &rep_stat_class, "st_lease_chk_misses", "J" },
937 { &rep_stat_st_lease_chk_refresh_fid, &rep_stat_class, "st_lease_chk_refresh", "J" },
938 { &rep_stat_st_lease_sends_fid, &rep_stat_class, "st_lease_sends", "J" },
939 { &rep_stat_st_log_duplicated_fid, &rep_stat_class, "st_log_duplicated", "J" },
940 { &rep_stat_st_log_queued_max_fid, &rep_stat_class, "st_log_queued_max", "J" },
941 { &rep_stat_st_log_queued_total_fid, &rep_stat_class, "st_log_queued_total", "J" },
942 { &rep_stat_st_log_records_fid, &rep_stat_class, "st_log_records", "J" },
943 { &rep_stat_st_log_requested_fid, &rep_stat_class, "st_log_requested", "J" },
944 { &rep_stat_st_master_fid, &rep_stat_class, "st_master", "J" },
945 { &rep_stat_st_master_changes_fid, &rep_stat_class, "st_master_changes", "J" },
946 { &rep_stat_st_msgs_badgen_fid, &rep_stat_class, "st_msgs_badgen", "J" },
947 { &rep_stat_st_msgs_processed_fid, &rep_stat_class, "st_msgs_processed", "J" },
948 { &rep_stat_st_msgs_recover_fid, &rep_stat_class, "st_msgs_recover", "J" },
949 { &rep_stat_st_msgs_send_failures_fid, &rep_stat_class, "st_msgs_send_failures", "J" },
950 { &rep_stat_st_msgs_sent_fid, &rep_stat_class, "st_msgs_sent", "J" },
951 { &rep_stat_st_newsites_fid, &rep_stat_class, "st_newsites", "J" },
952 { &rep_stat_st_nsites_fid, &rep_stat_class, "st_nsites", "I" },
953 { &rep_stat_st_nthrottles_fid, &rep_stat_class, "st_nthrottles", "J" },
954 { &rep_stat_st_outdated_fid, &rep_stat_class, "st_outdated", "J" },
955 { &rep_stat_st_pg_duplicated_fid, &rep_stat_class, "st_pg_duplicated", "J" },
956 { &rep_stat_st_pg_records_fid, &rep_stat_class, "st_pg_records", "J" },
957 { &rep_stat_st_pg_requested_fid, &rep_stat_class, "st_pg_requested", "J" },
958 { &rep_stat_st_txns_applied_fid, &rep_stat_class, "st_txns_applied", "J" },
959 { &rep_stat_st_startsync_delayed_fid, &rep_stat_class, "st_startsync_delayed", "J" },
960 { &rep_stat_st_elections_fid, &rep_stat_class, "st_elections", "J" },
961 { &rep_stat_st_elections_won_fid, &rep_stat_class, "st_elections_won", "J" },
962 { &rep_stat_st_election_cur_winner_fid, &rep_stat_class, "st_election_cur_winner", "J" },
963 { &rep_stat_st_election_gen_fid, &rep_stat_class, "st_election_gen", "I" },
964 { &rep_stat_st_election_datagen_fid, &rep_stat_class, "st_election_datagen", "I" },
965 { &rep_stat_st_election_lsn_fid, &rep_stat_class, "st_election_lsn", "L" DB_PKG "LogSequenceNumber;" },
966 { &rep_stat_st_election_nsites_fid, &rep_stat_class, "st_election_nsites", "I" },
967 { &rep_stat_st_election_nvotes_fid, &rep_stat_class, "st_election_nvotes", "I" },
968 { &rep_stat_st_election_priority_fid, &rep_stat_class, "st_election_priority", "I" },
969 { &rep_stat_st_election_status_fid, &rep_stat_class, "st_election_status", "I" },
970 { &rep_stat_st_election_tiebreaker_fid, &rep_stat_class, "st_election_tiebreaker", "I" },
971 { &rep_stat_st_election_votes_fid, &rep_stat_class, "st_election_votes", "I" },
972 { &rep_stat_st_election_sec_fid, &rep_stat_class, "st_election_sec", "I" },
973 { &rep_stat_st_election_usec_fid, &rep_stat_class, "st_election_usec", "I" },
974 { &rep_stat_st_max_lease_sec_fid, &rep_stat_class, "st_max_lease_sec", "I" },
975 { &rep_stat_st_max_lease_usec_fid, &rep_stat_class, "st_max_lease_usec", "I" },
976 { &repmgr_stat_st_perm_failed_fid, &repmgr_stat_class, "st_perm_failed", "J" },
977 { &repmgr_stat_st_msgs_queued_fid, &repmgr_stat_class, "st_msgs_queued", "J" },
978 { &repmgr_stat_st_msgs_dropped_fid, &repmgr_stat_class, "st_msgs_dropped", "J" },
979 { &repmgr_stat_st_connection_drop_fid, &repmgr_stat_class, "st_connection_drop", "J" },
980 { &repmgr_stat_st_connect_fail_fid, &repmgr_stat_class, "st_connect_fail", "J" },
981 { &repmgr_stat_st_elect_threads_fid, &repmgr_stat_class, "st_elect_threads", "J" },
982 { &repmgr_stat_st_max_elect_threads_fid, &repmgr_stat_class, "st_max_elect_threads", "J" },
983 { &seq_stat_st_wait_fid, &seq_stat_class, "st_wait", "J" },
984 { &seq_stat_st_nowait_fid, &seq_stat_class, "st_nowait", "J" },
985 { &seq_stat_st_current_fid, &seq_stat_class, "st_current", "J" },
986 { &seq_stat_st_value_fid, &seq_stat_class, "st_value", "J" },
987 { &seq_stat_st_last_value_fid, &seq_stat_class, "st_last_value", "J" },
988 { &seq_stat_st_min_fid, &seq_stat_class, "st_min", "J" },
989 { &seq_stat_st_max_fid, &seq_stat_class, "st_max", "J" },
990 { &seq_stat_st_cache_size_fid, &seq_stat_class, "st_cache_size", "I" },
991 { &seq_stat_st_flags_fid, &seq_stat_class, "st_flags", "I" },
992 { &txn_stat_st_nrestores_fid, &txn_stat_class, "st_nrestores", "I" },
993 { &txn_stat_st_last_ckp_fid, &txn_stat_class, "st_last_ckp", "L" DB_PKG "LogSequenceNumber;" },
994 { &txn_stat_st_time_ckp_fid, &txn_stat_class, "st_time_ckp", "J" },
995 { &txn_stat_st_last_txnid_fid, &txn_stat_class, "st_last_txnid", "I" },
996 { &txn_stat_st_inittxns_fid, &txn_stat_class, "st_inittxns", "I" },
997 { &txn_stat_st_maxtxns_fid, &txn_stat_class, "st_maxtxns", "I" },
998 { &txn_stat_st_naborts_fid, &txn_stat_class, "st_naborts", "J" },
999 { &txn_stat_st_nbegins_fid, &txn_stat_class, "st_nbegins", "J" },
1000 { &txn_stat_st_ncommits_fid, &txn_stat_class, "st_ncommits", "J" },
1001 { &txn_stat_st_nactive_fid, &txn_stat_class, "st_nactive", "I" },
1002 { &txn_stat_st_nsnapshot_fid, &txn_stat_class, "st_nsnapshot", "I" },
1003 { &txn_stat_st_maxnactive_fid, &txn_stat_class, "st_maxnactive", "I" },
1004 { &txn_stat_st_maxnsnapshot_fid, &txn_stat_class, "st_maxnsnapshot", "I" },
1005 { &txn_stat_st_region_wait_fid, &txn_stat_class, "st_region_wait", "J" },
1006 { &txn_stat_st_region_nowait_fid, &txn_stat_class, "st_region_nowait", "J" },
1007 { &txn_stat_st_regsize_fid, &txn_stat_class, "st_regsize", "J" },
1008 { &txn_stat_st_txnarray_fid, &txn_stat_class, "st_txnarray", "[L" DB_PKG "TransactionStats$Active;" },
1009 { &txn_active_txnid_fid, &txn_active_class, "txnid", "I" },
1010 { &txn_active_parentid_fid, &txn_active_class, "parentid", "I" },
1011 { &txn_active_pid_fid, &txn_active_class, "pid", "I" },
1012 { &txn_active_lsn_fid, &txn_active_class, "lsn", "L" DB_PKG "LogSequenceNumber;" },
1013 { &txn_active_read_lsn_fid, &txn_active_class, "read_lsn", "L" DB_PKG "LogSequenceNumber;" },
1014 { &txn_active_mvcc_ref_fid, &txn_active_class, "mvcc_ref", "I" },
1015 { &txn_active_priority_fid, &txn_active_class, "priority", "I" },
1016 { &txn_active_gid_fid, &txn_active_class, "gid", "[B" },
1017 { &txn_active_name_fid, &txn_active_class, "name", "Ljava/lang/String;" },
1018 /* END-STAT-FIELDS */
1019
1020 { &repmgr_siteinfo_flags_fid, &repmgr_siteinfo_class, "flags", "I" },
1021 { &repmgr_siteinfo_status_fid, &repmgr_siteinfo_class, "status", "I" }
1022 };
1023
1024 const struct {
1025 jmethodID *mid;
1026 jclass *cl;
1027 const char *name;
1028 const char *sig;
1029 } all_methods[] = {
1030 { &dbenv_construct, &dbenv_class, "<init>", "(JZ)V" },
1031 { &dbt_construct, &dbt_class, "<init>", "()V" },
1032 { &dblsn_construct, &dblsn_class, "<init>", "(II)V" },
1033 { &dbpreplist_construct, &dbpreplist_class, "<init>",
1034 "(L" DB_PKG "internal/DbTxn;[B)V" },
1035 { &dbtxn_construct, &dbtxn_class, "<init>", "(JZ)V" },
1036
1037 { &bt_stat_construct, &bt_stat_class, "<init>", "()V" },
1038 { &get_err_msg_method, &dbenv_class, "get_err_msg",
1039 "(Ljava/lang/String;)Ljava/lang/String;" },
1040 { &h_stat_construct, &h_stat_class, "<init>", "()V" },
1041 { &heap_stat_construct, &heap_stat_class, "<init>", "()V" },
1042 { &lock_stat_construct, &lock_stat_class, "<init>", "()V" },
1043 { &log_stat_construct, &log_stat_class, "<init>", "()V" },
1044 { &mpool_stat_construct, &mpool_stat_class, "<init>", "()V" },
1045 { &mpool_fstat_construct, &mpool_fstat_class, "<init>", "()V" },
1046 { &mutex_stat_construct, &mutex_stat_class, "<init>", "()V" },
1047 { &qam_stat_construct, &qam_stat_class, "<init>", "()V" },
1048 { &rep_stat_construct, &rep_stat_class, "<init>", "()V" },
1049 { &repmgr_stat_construct, &repmgr_stat_class, "<init>", "()V" },
1050 { &seq_stat_construct, &seq_stat_class, "<init>", "()V" },
1051 { &txn_stat_construct, &txn_stat_class, "<init>", "()V" },
1052 { &txn_active_construct, &txn_active_class, "<init>", "()V" },
1053 { &rephost_construct, &rephost_class, "<init>", "(Ljava/lang/String;I)V" },
1054 { &repmgr_siteinfo_construct, &repmgr_siteinfo_class, "<init>",
1055 "(L" DB_PKG "ReplicationHostAddress;I)V" },
1056
1057 { &dbex_construct, &dbex_class, "<init>",
1058 "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
1059 { &deadex_construct, &deadex_class, "<init>",
1060 "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
1061 { &heapfullex_construct, &heapfullex_class, "<init>",
1062 "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
1063 { &lockex_construct, &lockex_class, "<init>",
1064 "(Ljava/lang/String;IIL" DB_PKG "DatabaseEntry;L"
1065 DB_PKG "internal/DbLock;IL" DB_PKG "internal/DbEnv;)V" },
1066 { &memex_construct, &memex_class, "<init>",
1067 "(Ljava/lang/String;L" DB_PKG "DatabaseEntry;IL"
1068 DB_PKG "internal/DbEnv;)V" },
1069 { &memex_update_method, &memex_class, "updateDatabaseEntry",
1070 "(L" DB_PKG "DatabaseEntry;)V" },
1071 { &repdupmasterex_construct, &repdupmasterex_class, "<init>",
1072 "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
1073 { &rephandledeadex_construct, &rephandledeadex_class, "<init>",
1074 "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
1075 { &repholdelectionex_construct, &repholdelectionex_class, "<init>",
1076 "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
1077 { &repjoinfailex_construct, &repjoinfailex_class, "<init>",
1078 "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
1079 { &repleaseexpiredex_construct, &repleaseexpiredex_class, "<init>",
1080 "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
1081 { &replockoutex_construct, &replockoutex_class, "<init>",
1082 "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
1083 { &repunavailex_construct, &repunavailex_class, "<init>",
1084 "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
1085 { &runrecex_construct, &runrecex_class, "<init>",
1086 "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
1087 { &versionex_construct, &versionex_class, "<init>",
1088 "(Ljava/lang/String;IL" DB_PKG "internal/DbEnv;)V" },
1089 { &filenotfoundex_construct, &filenotfoundex_class, "<init>",
1090 "(Ljava/lang/String;)V" },
1091 { &illegalargex_construct, &illegalargex_class, "<init>",
1092 "(Ljava/lang/String;)V" },
1093 { &outofmemerr_construct, &outofmemerr_class, "<init>",
1094 "(Ljava/lang/String;)V" },
1095
1096 { &lock_construct, &lock_class, "<init>", "(JZ)V" },
1097
1098 { &app_dispatch_method, &dbenv_class, "handle_app_dispatch",
1099 "(L" DB_PKG "DatabaseEntry;L" DB_PKG "LogSequenceNumber;I)I" },
1100 { &backup_close_method, &dbenv_class, "handle_backup_close",
1101 "(Ljava/lang/String;)I" },
1102 { &backup_open_method, &dbenv_class, "handle_backup_open",
1103 "(Ljava/lang/String;Ljava/lang/String;)I" },
1104 { &backup_write_method, &dbenv_class, "handle_backup_write",
1105 "(III[B)I" },
1106 { &panic_event_notify_method, &dbenv_class, "handle_panic_event_notify",
1107 "()V" },
1108 { &rep_connect_broken_event_notify_method, &dbenv_class,
1109 "handle_rep_connect_broken_event_notify", "()V" },
1110 { &rep_connect_established_event_notify_method, &dbenv_class,
1111 "handle_rep_connect_established_event_notify", "()V" },
1112 { &rep_connect_try_failed_event_notify_method, &dbenv_class,
1113 "handle_rep_connect_try_failed_event_notify", "()V" },
1114 { &rep_client_event_notify_method, &dbenv_class,
1115 "handle_rep_client_event_notify", "()V" },
1116 { &rep_dupmaster_event_notify_method, &dbenv_class,
1117 "handle_rep_dupmaster_event_notify" ,"()V" },
1118 { &rep_elected_event_notify_method, &dbenv_class,
1119 "handle_rep_elected_event_notify" ,"()V" },
1120 { &rep_election_failed_event_notify_method, &dbenv_class,
1121 "handle_rep_election_failed_event_notify" ,"()V" },
1122 { &rep_init_done_event_notify_method, &dbenv_class,
1123 "handle_rep_init_done_event_notify" , "()V" },
1124 { &rep_join_failure_event_notify_method, &dbenv_class,
1125 "handle_rep_join_failure_event_notify" ,"()V" },
1126 { &rep_master_event_notify_method, &dbenv_class,
1127 "handle_rep_master_event_notify", "()V" },
1128 { &rep_master_failure_event_notify_method, &dbenv_class,
1129 "handle_rep_master_failure_event_notify", "()V" },
1130 { &rep_local_site_removed_notify_method, &dbenv_class,
1131 "handle_rep_local_site_removed_event_notify", "()V" },
1132 { &rep_new_master_event_notify_method, &dbenv_class,
1133 "handle_rep_new_master_event_notify", "(I)V" },
1134 { &rep_perm_failed_event_notify_method, &dbenv_class,
1135 "handle_rep_perm_failed_event_notify", "()V" },
1136 { &rep_site_added_event_notify_method, &dbenv_class,
1137 "handle_rep_site_added_event_notify", "()V" },
1138 { &rep_site_removed_event_notify_method, &dbenv_class,
1139 "handle_rep_site_removed_event_notify", "()V" },
1140 { &rep_startup_done_event_notify_method, &dbenv_class,
1141 "handle_rep_startup_done_event_notify", "()V" },
1142 { &write_failed_event_notify_method, &dbenv_class,
1143 "handle_write_failed_event_notify", "(I)V" },
1144 { &env_feedback_method, &dbenv_class, "handle_env_feedback", "(II)V" },
1145 { &errcall_method, &dbenv_class, "handle_error",
1146 "(Ljava/lang/String;)V" },
1147 { &msgcall_method, &dbenv_class, "handle_message",
1148 "(Ljava/lang/String;)V" },
1149 { &paniccall_method, &dbenv_class, "handle_panic",
1150 "(L" DB_PKG "DatabaseException;)V" },
1151 { &rep_transport_method, &dbenv_class, "handle_rep_transport",
1152 "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;L"
1153 DB_PKG "LogSequenceNumber;II)I" },
1154 { &repmgr_msg_dispatch_method, &dbenv_class,
1155 "handle_repmgr_message_dispatch",
1156 "(L" DB_PKG "ReplicationChannel;[L" DB_PKG "DatabaseEntry;I)V" },
1157
1158 { &append_recno_method, &db_class, "handle_append_recno",
1159 "(L" DB_PKG "DatabaseEntry;I)V" },
1160 { &bt_compare_method, &db_class, "handle_bt_compare",
1161 "([B[B)I" },
1162 { &bt_compress_method, &db_class, "handle_bt_compress",
1163 "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;L" DB_PKG
1164 "DatabaseEntry;L" DB_PKG "DatabaseEntry;L" DB_PKG
1165 "DatabaseEntry;)I" },
1166 { &bt_decompress_method, &db_class, "handle_bt_decompress",
1167 "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;L" DB_PKG
1168 "DatabaseEntry;L" DB_PKG "DatabaseEntry;L" DB_PKG
1169 "DatabaseEntry;)I" },
1170 { &bt_prefix_method, &db_class, "handle_bt_prefix",
1171 "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;)I" },
1172 { &db_feedback_method, &db_class, "handle_db_feedback", "(II)V" },
1173 { &dup_compare_method, &db_class, "handle_dup_compare",
1174 "([B[B)I" },
1175 { &foreignkey_nullify_method, &db_class, "handle_foreignkey_nullify",
1176 "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;L" DB_PKG
1177 "DatabaseEntry;)Z" },
1178 { &h_compare_method, &db_class, "handle_h_compare",
1179 "([B[B)I" },
1180 { &h_hash_method, &db_class, "handle_h_hash", "([BI)I" },
1181 { &partition_method, &db_class, "handle_partition",
1182 "(L" DB_PKG "DatabaseEntry;)I" },
1183 { &seckey_create_method, &db_class, "handle_seckey_create",
1184 "(L" DB_PKG "DatabaseEntry;L" DB_PKG "DatabaseEntry;)[L"
1185 DB_PKG "DatabaseEntry;" },
1186
1187 { &outputstream_write_method, &outputstream_class, "write", "([BII)V" }
1188 };
1189
1190 #define NELEM(x) (sizeof (x) / sizeof (x[0]))
1191
Java_com_sleepycat_db_internal_db_1javaJNI_initialize(JNIEnv * jenv,jclass clazz)1192 SWIGEXPORT void JNICALL Java_com_sleepycat_db_internal_db_1javaJNI_initialize(
1193 JNIEnv *jenv, jclass clazz)
1194 {
1195 jclass cl;
1196 unsigned int i, j;
1197
1198 COMPQUIET(clazz, NULL);
1199
1200 if ((*jenv)->GetJavaVM(jenv, &javavm) != 0) {
1201 __db_errx(NULL, "Cannot get Java VM");
1202 return;
1203 }
1204
1205 for (i = 0; i < NELEM(all_classes); i++) {
1206 cl = (*jenv)->FindClass(jenv, all_classes[i].name);
1207 if (cl == NULL) {
1208 fprintf(stderr,
1209 "Failed to load class %s - check CLASSPATH\n",
1210 all_classes[i].name);
1211 return;
1212 }
1213
1214 /*
1215 * Wrap classes in GlobalRefs so we keep the reference between
1216 * calls.
1217 */
1218 *all_classes[i].cl = (jclass)(*jenv)->NewGlobalRef(jenv, cl);
1219
1220 if (*all_classes[i].cl == NULL) {
1221 fprintf(stderr,
1222 "Failed to create a global reference for %s\n",
1223 all_classes[i].name);
1224 return;
1225 }
1226 }
1227
1228 /* Get field IDs */
1229 for (i = 0; i < NELEM(all_fields); i++) {
1230 *all_fields[i].fid = (*jenv)->GetFieldID(jenv,
1231 *all_fields[i].cl, all_fields[i].name, all_fields[i].sig);
1232
1233 if (*all_fields[i].fid == NULL) {
1234 fprintf(stderr,
1235 "Failed to look up field %s with sig %s\n",
1236 all_fields[i].name, all_fields[i].sig);
1237 return;
1238 }
1239 }
1240
1241 /* Get method IDs */
1242 for (i = 0; i < NELEM(all_methods); i++) {
1243 *all_methods[i].mid = (*jenv)->GetMethodID(jenv,
1244 *all_methods[i].cl, all_methods[i].name,
1245 all_methods[i].sig);
1246
1247 if (*all_methods[i].mid == NULL) {
1248 for (j = 0; j < NELEM(all_classes); j++)
1249 if (all_methods[i].cl == all_classes[j].cl)
1250 break;
1251 fprintf(stderr,
1252 "Failed to look up method %s.%s with sig %s\n",
1253 all_classes[j].name, all_methods[i].name,
1254 all_methods[i].sig);
1255 return;
1256 }
1257 }
1258 }
1259
__dbj_get_jnienv(int * needDetach)1260 static JNIEnv *__dbj_get_jnienv(int *needDetach)
1261 {
1262 /*
1263 * Note: Different versions of the JNI disagree on the signature for
1264 * AttachCurrentThreadAsDaemon. The most recent documentation seems to
1265 * say that (JNIEnv **) is correct, but newer JNIs seem to use
1266 * (void **), oddly enough.
1267 */
1268 #ifdef JNI_VERSION_1_2
1269 void *jenv = 0;
1270 #else
1271 JNIEnv *jenv = 0;
1272 #endif
1273
1274 *needDetach = 0;
1275 if ((*javavm)->GetEnv(javavm, &jenv, JNI_VERSION_1_2) == JNI_OK)
1276 return ((JNIEnv *)jenv);
1277
1278 /*
1279 * This should always succeed, as we are called via some Java activity.
1280 * I think therefore I am (a thread).
1281 */
1282 if ((*javavm)->AttachCurrentThread(javavm, &jenv, 0) != 0)
1283 return (0);
1284
1285 *needDetach = 1;
1286 return ((JNIEnv *)jenv);
1287 }
1288
__dbj_detach()1289 static void __dbj_detach()
1290 {
1291 (void)(*javavm)->DetachCurrentThread(javavm);
1292 }
1293
__dbj_wrap_DB_LSN(JNIEnv * jenv,DB_LSN * lsn)1294 static jobject __dbj_wrap_DB_LSN(JNIEnv *jenv, DB_LSN *lsn)
1295 {
1296 return (*jenv)->NewObject(jenv, dblsn_class, dblsn_construct,
1297 lsn->file, lsn->offset);
1298 }
1299
1300
1301 /*
1302 * Macros to find the Java DbEnv object for methods in various classes.
1303 * Note that "arg1" is from the code SWIG generates for the "this"/"self".
1304 */
1305 #define JDBENV (arg1 ? (jobject)DB_ENV_INTERNAL(arg1) : NULL)
1306 #define DB2JDBENV ((jobject)DB_ENV_INTERNAL(arg1->dbenv))
1307 #define DBC2JDBENV ((jobject)DB_ENV_INTERNAL(arg1->dbp->dbenv))
1308 #define TXN2JDBENV ((jobject)DB_ENV_INTERNAL(arg1->mgrp->env->dbenv))
1309
1310
__dbj_get_except(JNIEnv * jenv,int ret,const char * msg,jobject obj,jobject jdbenv)1311 static jthrowable __dbj_get_except(JNIEnv *jenv,
1312 int ret, const char *msg, jobject obj, jobject jdbenv) {
1313 jobject jmsg;
1314
1315 if (msg == NULL)
1316 msg = db_strerror(ret);
1317
1318 jmsg = (*jenv)->NewStringUTF(jenv, msg);
1319
1320 /* Retrieve error message logged by DB */
1321 if (jdbenv != NULL) {
1322 jmsg = (jstring) (*jenv)->CallNonvirtualObjectMethod(jenv,
1323 jdbenv, dbenv_class, get_err_msg_method, jmsg);
1324 }
1325
1326 switch (ret) {
1327 case EINVAL:
1328 return (jthrowable)(*jenv)->NewObject(jenv,
1329 illegalargex_class, illegalargex_construct, jmsg);
1330
1331 case ENOENT:
1332 return (jthrowable)(*jenv)->NewObject(jenv,
1333 filenotfoundex_class, filenotfoundex_construct, jmsg);
1334
1335 case ENOMEM:
1336 return (jthrowable)(*jenv)->NewObject(jenv,
1337 outofmemerr_class, outofmemerr_construct, jmsg);
1338
1339 case DB_BUFFER_SMALL:
1340 return (jthrowable)(*jenv)->NewObject(jenv, memex_class,
1341 memex_construct, jmsg, obj, ret, jdbenv);
1342
1343 case DB_HEAP_FULL:
1344 return (jthrowable)(*jenv)->NewObject(jenv, heapfullex_class,
1345 heapfullex_construct, jmsg, ret, jdbenv);
1346
1347 case DB_REP_DUPMASTER:
1348 return (jthrowable)(*jenv)->NewObject(jenv,
1349 repdupmasterex_class, repdupmasterex_construct,
1350 jmsg, ret, jdbenv);
1351
1352 case DB_REP_HANDLE_DEAD:
1353 return (jthrowable)(*jenv)->NewObject(jenv,
1354 rephandledeadex_class, rephandledeadex_construct,
1355 jmsg, ret, jdbenv);
1356
1357 case DB_REP_HOLDELECTION:
1358 return (jthrowable)(*jenv)->NewObject(jenv,
1359 repholdelectionex_class, repholdelectionex_construct,
1360 jmsg, ret, jdbenv);
1361
1362 case DB_REP_JOIN_FAILURE:
1363 return (jthrowable)(*jenv)->NewObject(jenv,
1364 repjoinfailex_class, repjoinfailex_construct,
1365 jmsg, ret, jdbenv);
1366
1367 case DB_REP_LEASE_EXPIRED:
1368 return (jthrowable)(*jenv)->NewObject(jenv,
1369 repleaseexpiredex_class, repleaseexpiredex_construct,
1370 jmsg, ret, jdbenv);
1371
1372 case DB_REP_LOCKOUT:
1373 return (jthrowable)(*jenv)->NewObject(jenv,
1374 replockoutex_class, replockoutex_construct,
1375 jmsg, ret, jdbenv);
1376
1377 case DB_REP_UNAVAIL:
1378 return (jthrowable)(*jenv)->NewObject(jenv,
1379 repunavailex_class, repunavailex_construct,
1380 jmsg, ret, jdbenv);
1381
1382 case DB_RUNRECOVERY:
1383 return (jthrowable)(*jenv)->NewObject(jenv, runrecex_class,
1384 runrecex_construct, jmsg, ret, jdbenv);
1385
1386 case DB_LOCK_DEADLOCK:
1387 return (jthrowable)(*jenv)->NewObject(jenv, deadex_class,
1388 deadex_construct, jmsg, ret, jdbenv);
1389
1390 case DB_LOCK_NOTGRANTED:
1391 return (jthrowable)(*jenv)->NewObject(jenv, lockex_class,
1392 lockex_construct, jmsg, ret, 0, NULL, NULL, 0, jdbenv);
1393
1394 case DB_VERSION_MISMATCH:
1395 return (jthrowable)(*jenv)->NewObject(jenv, versionex_class,
1396 versionex_construct, jmsg, ret, jdbenv);
1397
1398 default:
1399 return (jthrowable)(*jenv)->NewObject(jenv, dbex_class,
1400 dbex_construct, jmsg, ret, jdbenv);
1401 }
1402 }
1403
__dbj_throw(JNIEnv * jenv,int ret,const char * msg,jobject obj,jobject jdbenv)1404 static int __dbj_throw(JNIEnv *jenv,
1405 int ret, const char *msg, jobject obj, jobject jdbenv)
1406 {
1407 jthrowable t;
1408
1409 /* If an exception is pending, ignore requests to throw a new one. */
1410 if ((*jenv)->ExceptionOccurred(jenv) == NULL) {
1411 t = __dbj_get_except(jenv, ret, msg, obj, jdbenv);
1412 if (t == NULL) {
1413 /*
1414 * This is a problem - something went wrong creating an
1415 * exception. We have to assume there is an exception
1416 * created by the JVM that is pending as a result
1417 * (e.g., OutOfMemoryError), but we don't want to lose
1418 * this error, so we just call __db_errx here.
1419 */
1420 if (msg == NULL)
1421 msg = db_strerror(ret);
1422
1423 __db_errx(NULL, "Couldn't create exception for: '%s'",
1424 msg);
1425 } else
1426 (*jenv)->Throw(jenv, t);
1427 }
1428
1429 return (ret);
1430 }
1431
1432
1433 typedef int db_ret_t;
1434 typedef int int_bool;
1435
1436 struct __db_lk_conflicts {
1437 u_int8_t *lk_conflicts;
1438 int lk_modes;
1439 };
1440
1441 struct __db_out_stream {
1442 void *handle;
1443 int (*callback) __P((void *, const void *));
1444 };
1445
1446 struct __db_repmgr_site_address {
1447 const char *host;
1448 u_int port;
1449 };
1450
1451 struct __db_repmgr_sites {
1452 DB_REPMGR_SITE *sites;
1453 u_int32_t nsites;
1454 };
1455
1456 #define Db __db
1457 #define Dbc __dbc
1458 #define Dbt __db_dbt
1459 #define DbChannel __db_channel
1460 #define DbEnv __db_env
1461 #define DbLock __db_lock_u
1462 #define DbLogc __db_log_cursor
1463 #define DbLsn __db_lsn
1464 #define DbMpoolFile __db_mpoolfile
1465 #define DbSequence __db_sequence
1466 #define DbSite __db_site
1467 #define DbTxn __db_txn
1468
1469 /* Suppress a compilation warning for an unused symbol */
1470 void *unused = (void *)SWIG_JavaThrowException;
1471
1472
1473 typedef struct __dbt_locked {
1474 JNIEnv *jenv;
1475 jobject jdbt;
1476 DBT dbt;
1477 jobject jdata_nio;
1478 jbyteArray jarr;
1479 jint offset;
1480 int reuse;
1481 u_int32_t orig_size;
1482 jsize array_len;
1483 } DBT_LOCKED;
1484
__dbj_dbt_memcopy(DBT * dbt,u_int32_t offset,void * buf,u_int32_t size,u_int32_t flags)1485 static int __dbj_dbt_memcopy(DBT *dbt, u_int32_t offset, void *buf, u_int32_t size, u_int32_t flags) {
1486 DBT_LOCKED *ldbt = dbt->app_data;
1487 JNIEnv *jenv = ldbt->jenv;
1488
1489 if (size == 0)
1490 return (0);
1491 else if (!F_ISSET(dbt, DB_DBT_USERCOPY)) {
1492 /*
1493 * For simplicity, the Java API calls this function directly,
1494 * so it needs to work with regular DBTs.
1495 */
1496 switch (flags) {
1497 case DB_USERCOPY_GETDATA:
1498 memcpy(buf, (u_int8_t *)dbt->data + offset, size);
1499 return (0);
1500 case DB_USERCOPY_SETDATA:
1501 memcpy((u_int8_t *)dbt->data + offset, buf, size);
1502 return (0);
1503 default:
1504 return (EINVAL);
1505 }
1506 }
1507
1508 switch (flags) {
1509 case DB_USERCOPY_GETDATA:
1510 (*jenv)->GetByteArrayRegion(jenv, ldbt->jarr, ldbt->offset +
1511 offset, size, buf);
1512 break;
1513 case DB_USERCOPY_SETDATA:
1514 /*
1515 * Check whether this is the first time through the callback by relying
1516 * on the offset being zero.
1517 */
1518 if (offset == 0 && (!ldbt->reuse ||
1519 (jsize)(ldbt->offset + dbt->size) > ldbt->array_len)) {
1520 if (ldbt->jarr != NULL)
1521 (*jenv)->DeleteLocalRef(jenv, ldbt->jarr);
1522 ldbt->jarr = (*jenv)->NewByteArray(jenv, (jsize)dbt->size);
1523 if (ldbt->jarr == NULL)
1524 return (ENOMEM);
1525 (*jenv)->SetObjectField(jenv, ldbt->jdbt, dbt_data_fid, ldbt->jarr);
1526 /* We've allocated a new array, start from the beginning. */
1527 ldbt->offset = 0;
1528 }
1529 (*jenv)->SetByteArrayRegion(jenv, ldbt->jarr, ldbt->offset +
1530 offset, size, buf);
1531 break;
1532 default:
1533 return (EINVAL);
1534 }
1535 return ((*jenv)->ExceptionOccurred(jenv) ? EINVAL : 0);
1536 }
1537
__dbj_dbt_copyout(JNIEnv * jenv,const DBT * dbt,jbyteArray * jarr,jobject jdbt)1538 static void __dbj_dbt_copyout(
1539 JNIEnv *jenv, const DBT *dbt, jbyteArray *jarr, jobject jdbt)
1540 {
1541 jbyteArray newarr = (*jenv)->NewByteArray(jenv, (jsize)dbt->size);
1542 if (newarr == NULL)
1543 return; /* An exception is pending */
1544 (*jenv)->SetByteArrayRegion(jenv, newarr, 0, (jsize)dbt->size,
1545 (jbyte *)dbt->data);
1546 (*jenv)->SetObjectField(jenv, jdbt, dbt_data_fid, newarr);
1547 (*jenv)->SetIntField(jenv, jdbt, dbt_offset_fid, 0);
1548 (*jenv)->SetIntField(jenv, jdbt, dbt_size_fid, (jint)dbt->size);
1549 if (jarr != NULL)
1550 *jarr = newarr;
1551 else
1552 (*jenv)->DeleteLocalRef(jenv, newarr);
1553 }
1554
__dbj_dbt_copyin(JNIEnv * jenv,DBT_LOCKED * ldbt,DBT ** dbtp,jobject jdbt,int allow_null)1555 static int __dbj_dbt_copyin(
1556 JNIEnv *jenv, DBT_LOCKED *ldbt, DBT **dbtp, jobject jdbt, int allow_null)
1557 {
1558 DBT *dbt;
1559 jlong capacity;
1560
1561 memset(ldbt, 0, sizeof (*ldbt));
1562 ldbt->jenv = jenv;
1563 ldbt->jdbt = jdbt;
1564
1565 if (jdbt == NULL) {
1566 if (allow_null) {
1567 *dbtp = NULL;
1568 return (0);
1569 } else {
1570 return (__dbj_throw(jenv, EINVAL,
1571 "DatabaseEntry must not be null", NULL, NULL));
1572 }
1573 }
1574
1575 dbt = &ldbt->dbt;
1576 if (dbtp != NULL)
1577 *dbtp = dbt;
1578
1579 ldbt->jdata_nio = (*jenv)->GetObjectField(jenv, jdbt, dbt_data_nio_fid);
1580 if (ldbt->jdata_nio != NULL)
1581 F_SET(dbt, DB_DBT_USERMEM);
1582 else
1583 ldbt->jarr = (jbyteArray)(*jenv)->GetObjectField(jenv, jdbt, dbt_data_fid);
1584 ldbt->offset = (*jenv)->GetIntField(jenv, jdbt, dbt_offset_fid);
1585 dbt->size = (*jenv)->GetIntField(jenv, jdbt, dbt_size_fid);
1586 ldbt->orig_size = dbt->size;
1587 dbt->flags = (*jenv)->GetIntField(jenv, jdbt, dbt_flags_fid);
1588
1589 if (F_ISSET(dbt, DB_DBT_USERMEM))
1590 dbt->ulen = (*jenv)->GetIntField(jenv, jdbt, dbt_ulen_fid);
1591 if (F_ISSET(dbt, DB_DBT_PARTIAL)) {
1592 dbt->dlen = (*jenv)->GetIntField(jenv, jdbt, dbt_dlen_fid);
1593 dbt->doff = (*jenv)->GetIntField(jenv, jdbt, dbt_doff_fid);
1594
1595 if ((jint)dbt->doff < 0)
1596 return (__dbj_throw(jenv, EINVAL, "DatabaseEntry doff illegal",
1597 NULL, NULL));
1598 }
1599
1600 /*
1601 * We don't support DB_DBT_REALLOC - map anything that's not USERMEM to
1602 * MALLOC.
1603 */
1604 if (!F_ISSET(dbt, DB_DBT_USERMEM)) {
1605 ldbt->reuse = !F_ISSET(dbt, DB_DBT_MALLOC);
1606 F_CLR(dbt, DB_DBT_MALLOC | DB_DBT_REALLOC);
1607 }
1608
1609 /* Verify parameters before allocating or locking data. */
1610 if (ldbt->jdata_nio != NULL) {
1611 capacity = (*jenv)->GetDirectBufferCapacity(jenv,
1612 ldbt->jdata_nio);
1613 if (capacity > (jlong)UINT32_MAX)
1614 return (__dbj_throw(jenv, EINVAL,
1615 "DirectBuffer may not be larger than 4GB",
1616 NULL, NULL));
1617 ldbt->array_len = (u_int32_t)capacity;
1618 } else if (ldbt->jarr == NULL) {
1619 /*
1620 * Some code makes the assumption that if a DBT's size or ulen
1621 * is non-zero, there is data to copy from dbt->data.
1622 *
1623 * Clean up the dbt fields so we don't run into trouble.
1624 * (Note that doff, dlen, and flags all may contain
1625 * meaningful values.)
1626 */
1627 dbt->data = NULL;
1628 ldbt->array_len = ldbt->offset = dbt->size = dbt->ulen = 0;
1629 } else
1630 ldbt->array_len = (*jenv)->GetArrayLength(jenv, ldbt->jarr);
1631
1632 if (F_ISSET(dbt, DB_DBT_USERMEM)) {
1633 if (ldbt->offset < 0)
1634 return (__dbj_throw(jenv, EINVAL,
1635 "offset cannot be negative",
1636 NULL, NULL));
1637 if (dbt->size > dbt->ulen)
1638 return (__dbj_throw(jenv, EINVAL,
1639 "size must be less than or equal to ulen",
1640 NULL, NULL));
1641 if ((jsize)(ldbt->offset + dbt->ulen) > ldbt->array_len)
1642 return (__dbj_throw(jenv, EINVAL,
1643 "offset + ulen greater than array length",
1644 NULL, NULL));
1645 }
1646
1647 if (ldbt->jdata_nio) {
1648 dbt->data = (*jenv)->GetDirectBufferAddress(jenv,
1649 ldbt->jdata_nio);
1650 dbt->data = (u_int8_t *)dbt->data + ldbt->offset;
1651 } else if (F_ISSET(dbt, DB_DBT_USERMEM)) {
1652 if (ldbt->jarr != NULL &&
1653 (dbt->data = (*jenv)->GetByteArrayElements(jenv,
1654 ldbt->jarr, NULL)) == NULL)
1655 return (EINVAL); /* an exception will be pending */
1656 dbt->data = (u_int8_t *)dbt->data + ldbt->offset;
1657 } else
1658 F_SET(dbt, DB_DBT_USERCOPY);
1659 dbt->app_data = ldbt;
1660
1661 return (0);
1662 }
1663
__dbj_dbt_release(JNIEnv * jenv,jobject jdbt,DBT * dbt,DBT_LOCKED * ldbt)1664 static void __dbj_dbt_release(
1665 JNIEnv *jenv, jobject jdbt, DBT *dbt, DBT_LOCKED *ldbt) {
1666 jthrowable t;
1667
1668 if (dbt == NULL)
1669 return;
1670
1671 if (dbt->size != ldbt->orig_size)
1672 (*jenv)->SetIntField(jenv, jdbt, dbt_size_fid, (jint)dbt->size);
1673
1674 if (F_ISSET(dbt, DB_DBT_USERMEM)) {
1675 if (ldbt->jarr != NULL)
1676 (*jenv)->ReleaseByteArrayElements(jenv, ldbt->jarr,
1677 (jbyte *)dbt->data - ldbt->offset, 0);
1678
1679 if (dbt->size > dbt->ulen &&
1680 (t = (*jenv)->ExceptionOccurred(jenv)) != NULL &&
1681 (*jenv)->IsInstanceOf(jenv, t, memex_class)) {
1682 (*jenv)->CallNonvirtualVoidMethod(jenv, t, memex_class,
1683 memex_update_method, jdbt);
1684 /*
1685 * We have to rethrow the exception because calling
1686 * into Java clears it.
1687 */
1688 (*jenv)->Throw(jenv, t);
1689 }
1690 }
1691 }
1692
1693
1694 struct __dbj_verify_data {
1695 JNIEnv *jenv;
1696 jobject streamobj;
1697 jbyteArray bytes;
1698 int nbytes;
1699 };
1700
__dbj_verify_callback(void * handle,const void * str_arg)1701 static int __dbj_verify_callback(void *handle, const void *str_arg) {
1702 char *str;
1703 struct __dbj_verify_data *vd;
1704 int len;
1705 JNIEnv *jenv;
1706
1707 str = (char *)str_arg;
1708 vd = (struct __dbj_verify_data *)handle;
1709 jenv = vd->jenv;
1710 len = (int)strlen(str) + 1;
1711 if (len > vd->nbytes) {
1712 vd->nbytes = len;
1713 if (vd->bytes != NULL)
1714 (*jenv)->DeleteLocalRef(jenv, vd->bytes);
1715 if ((vd->bytes = (*jenv)->NewByteArray(jenv, (jsize)len))
1716 == NULL)
1717 return (ENOMEM);
1718 }
1719
1720 if (vd->bytes != NULL) {
1721 (*jenv)->SetByteArrayRegion(jenv, vd->bytes, 0, (jsize)len,
1722 (jbyte*)str);
1723 (*jenv)->CallVoidMethod(jenv, vd->streamobj,
1724 outputstream_write_method, vd->bytes, 0, len - 1);
1725 }
1726
1727 if ((*jenv)->ExceptionOccurred(jenv) != NULL)
1728 return (EIO);
1729
1730 return (0);
1731 }
1732
1733
1734 SWIGEXPORT void JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1vec(JNIEnv * jenv,jclass jcls,jlong jdbenvp,jobject jdbenv,jint locker,jint flags,jobjectArray list,jint offset,jint count)1735 Java_com_sleepycat_db_internal_db_1javaJNI_DbEnv_1lock_1vec(JNIEnv *jenv,
1736 jclass jcls, jlong jdbenvp, jobject jdbenv, jint locker, jint flags,
1737 jobjectArray list, jint offset, jint count) {
1738 DB_ENV *dbenv;
1739 DB_LOCKREQ *lockreq;
1740 DB_LOCKREQ *prereq; /* preprocessed requests */
1741 DB_LOCKREQ *failedreq;
1742 DB_LOCK *lockp;
1743 DBT_LOCKED *locked_dbts;
1744 DBT *obj;
1745 ENV *env;
1746 int alloc_err, i, ret;
1747 size_t bytesize, ldbtsize;
1748 jobject jlockreq;
1749 db_lockop_t op;
1750 jobject jobj, jlock;
1751 jlong jlockp;
1752 int completed;
1753
1754 /*
1755 * We can't easily #include "dbinc/db_ext.h" because of name
1756 * clashes, so we declare this explicitly.
1757 */
1758 extern int __dbt_usercopy __P((ENV *, DBT *));
1759 extern void __dbt_userfree __P((ENV *, DBT *, DBT *, DBT *));
1760
1761 COMPQUIET(jcls, NULL);
1762 dbenv = *(DB_ENV **)(void *)&jdbenvp;
1763 env = dbenv->env;
1764 locked_dbts = NULL;
1765 lockreq = NULL;
1766
1767 if (dbenv == NULL) {
1768 __dbj_throw(jenv, EINVAL, "null object", NULL, jdbenv);
1769 return;
1770 }
1771
1772 if ((*jenv)->GetArrayLength(jenv, list) < offset + count) {
1773 __dbj_throw(jenv, EINVAL,
1774 "DbEnv.lock_vec array not large enough", NULL, jdbenv);
1775 return;
1776 }
1777
1778 bytesize = sizeof(DB_LOCKREQ) * count;
1779 if ((ret = __os_malloc(env, bytesize, &lockreq)) != 0) {
1780 __dbj_throw(jenv, ret, NULL, NULL, jdbenv);
1781 return;
1782 }
1783 memset(lockreq, 0, bytesize);
1784
1785 ldbtsize = sizeof(DBT_LOCKED) * count;
1786 if ((ret = __os_malloc(env, ldbtsize, &locked_dbts)) != 0) {
1787 __dbj_throw(jenv, ret, NULL, NULL, jdbenv);
1788 goto err;
1789 }
1790 memset(locked_dbts, 0, ldbtsize);
1791 prereq = &lockreq[0];
1792
1793 /* fill in the lockreq array */
1794 for (i = 0, prereq = &lockreq[0]; i < count; i++, prereq++) {
1795 jlockreq = (*jenv)->GetObjectArrayElement(jenv, list,
1796 offset + i);
1797 if (jlockreq == NULL) {
1798 __dbj_throw(jenv, EINVAL,
1799 "DbEnv.lock_vec list entry is null", NULL, jdbenv);
1800 goto err;
1801 }
1802 op = (db_lockop_t)(*jenv)->GetIntField(
1803 jenv, jlockreq, lockreq_op_fid);
1804 prereq->op = op;
1805
1806 switch (op) {
1807 case DB_LOCK_GET_TIMEOUT:
1808 /* Needed: mode, timeout, obj. Returned: lock. */
1809 prereq->op = (db_lockop_t)(*jenv)->GetIntField(
1810 jenv, jlockreq, lockreq_timeout_fid);
1811 /* FALLTHROUGH */
1812 case DB_LOCK_GET:
1813 /* Needed: mode, obj. Returned: lock. */
1814 prereq->mode = (db_lockmode_t)(*jenv)->GetIntField(
1815 jenv, jlockreq, lockreq_modeflag_fid);
1816 jobj = (*jenv)->GetObjectField(jenv, jlockreq,
1817 lockreq_obj_fid);
1818 if ((ret = __dbj_dbt_copyin(jenv,
1819 &locked_dbts[i], &obj, jobj, 0)) != 0 ||
1820 (ret = __dbt_usercopy(env, obj)) != 0)
1821 goto err;
1822 prereq->obj = obj;
1823 break;
1824 case DB_LOCK_PUT:
1825 /* Needed: lock. Ignored: mode, obj. */
1826 jlock = (*jenv)->GetObjectField(jenv, jlockreq,
1827 lockreq_lock_fid);
1828 if (jlock == NULL ||
1829 (jlockp = (*jenv)->GetLongField(jenv, jlock,
1830 lock_cptr_fid)) == 0L) {
1831 __dbj_throw(jenv, EINVAL,
1832 "LockRequest lock field is NULL", NULL,
1833 jdbenv);
1834 goto err;
1835 }
1836 lockp = *(DB_LOCK **)(void *)&jlockp;
1837 prereq->lock = *lockp;
1838 break;
1839 case DB_LOCK_PUT_ALL:
1840 case DB_LOCK_TIMEOUT:
1841 /* Needed: (none). Ignored: lock, mode, obj. */
1842 break;
1843 case DB_LOCK_PUT_OBJ:
1844 /* Needed: obj. Ignored: lock, mode. */
1845 jobj = (*jenv)->GetObjectField(jenv, jlockreq,
1846 lockreq_obj_fid);
1847 if ((ret = __dbj_dbt_copyin(jenv,
1848 &locked_dbts[i], &obj, jobj, 0)) != 0 ||
1849 (ret = __dbt_usercopy(env, obj)) != 0)
1850 goto err;
1851 prereq->obj = obj;
1852 break;
1853 default:
1854 __dbj_throw(jenv, EINVAL,
1855 "DbEnv.lock_vec bad op value", NULL, jdbenv);
1856 goto err;
1857 }
1858 }
1859
1860 ret = dbenv->lock_vec(dbenv, (u_int32_t)locker, (u_int32_t)flags,
1861 lockreq, count, &failedreq);
1862 if (ret == 0)
1863 completed = count;
1864 else
1865 completed = (int)(failedreq - lockreq);
1866
1867 /* do post processing for any and all requests that completed */
1868 for (i = 0; i < completed; i++) {
1869 op = lockreq[i].op;
1870 if (op == DB_LOCK_PUT) {
1871 /*
1872 * After a successful put, the DbLock can no longer be
1873 * used, so we release the storage related to it.
1874 */
1875 jlockreq = (*jenv)->GetObjectArrayElement(jenv,
1876 list, i + offset);
1877 jlock = (*jenv)->GetObjectField(jenv, jlockreq,
1878 lockreq_lock_fid);
1879 jlockp = (*jenv)->GetLongField(jenv, jlock,
1880 lock_cptr_fid);
1881 lockp = *(DB_LOCK **)(void *)&jlockp;
1882 __os_free(NULL, lockp);
1883 (*jenv)->SetLongField(jenv, jlock, lock_cptr_fid,
1884 (jlong)0);
1885 } else if (op == DB_LOCK_GET_TIMEOUT || op == DB_LOCK_GET) {
1886 /*
1887 * Store the lock that was obtained. We need to create
1888 * storage for it since the lockreq array only exists
1889 * during this method call.
1890 */
1891 if ((alloc_err =
1892 __os_malloc(env, sizeof(DB_LOCK), &lockp)) != 0) {
1893 __dbj_throw(jenv, alloc_err, NULL, NULL,
1894 jdbenv);
1895 goto err;
1896 }
1897
1898 *lockp = lockreq[i].lock;
1899 *(DB_LOCK **)(void *)&jlockp = lockp;
1900
1901 jlockreq = (*jenv)->GetObjectArrayElement(jenv,
1902 list, i + offset);
1903 jlock = (*jenv)->NewObject(jenv, lock_class,
1904 lock_construct, jlockp, JNI_TRUE);
1905 if (jlock == NULL)
1906 goto err; /* An exception is pending */
1907 (*jenv)->SetLongField(jenv, jlock, lock_cptr_fid,
1908 jlockp);
1909 (*jenv)->SetObjectField(jenv, jlockreq,
1910 lockreq_lock_fid, jlock);
1911 }
1912 }
1913
1914 /* If one of the locks was not granted, build the exception now. */
1915 if (ret == DB_LOCK_NOTGRANTED && i < count) {
1916 jlockreq = (*jenv)->GetObjectArrayElement(jenv, list,
1917 i + offset);
1918 jobj = (*jenv)->GetObjectField(jenv, jlockreq, lockreq_obj_fid);
1919 jlock = (*jenv)->GetObjectField(jenv, jlockreq,
1920 lockreq_lock_fid);
1921 (*jenv)->Throw(jenv,
1922 (*jenv)->NewObject(jenv, lockex_class, lockex_construct,
1923 (*jenv)->NewStringUTF(jenv, "DbEnv.lock_vec incomplete"),
1924 lockreq[i].op, lockreq[i].mode, jobj, jlock, i, jdbenv));
1925 } else if (ret != 0)
1926 __dbj_throw(jenv, ret, NULL, NULL, jdbenv);
1927
1928 err: for (i = 0, prereq = &lockreq[0]; i < count; i++, prereq++)
1929 if (prereq->op == DB_LOCK_GET_TIMEOUT ||
1930 prereq->op == DB_LOCK_GET ||
1931 prereq->op == DB_LOCK_PUT_OBJ) {
1932 jlockreq = (*jenv)->GetObjectArrayElement(jenv,
1933 list, i + offset);
1934 jobj = (*jenv)->GetObjectField(jenv,
1935 jlockreq, lockreq_obj_fid);
1936 __dbt_userfree(env, prereq->obj, NULL, NULL);
1937 __dbj_dbt_release(jenv, jobj, prereq->obj, &locked_dbts[i]);
1938 }
1939 if (locked_dbts != NULL)
1940 __os_free(env, locked_dbts);
1941 if (lockreq != NULL)
1942 __os_free(env, lockreq);
1943 }
1944
1945
1946 SWIGEXPORT void JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1commit(JNIEnv * jenv,jclass jcls,jlong jarg1,jobject jarg1_,jint jarg2)1947 Java_com_sleepycat_db_internal_db_1javaJNI_DbTxn_1commit(JNIEnv *jenv,
1948 jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) {
1949 struct DbTxn *txn = (struct DbTxn *) 0 ;
1950 ENV *env = (ENV *) 0 ;
1951 u_int32_t flags;
1952 DB_TXN_TOKEN token;
1953 db_ret_t result;
1954 db_ret_t result1;
1955 int is_nested, is_logging_enabled, is_rep_client, commit_token_enabled;
1956
1957 (void)jcls;
1958 txn = *(struct DbTxn **)&jarg1;
1959 flags = (u_int32_t)jarg2;
1960
1961 if (jarg1 == 0) {
1962 __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
1963 return ;
1964 }
1965
1966 /*
1967 * The Java API uses set_commit_token in a different way to the C API.
1968 * In Java a commit token is always generated, unless doing so would
1969 * generate an error from the C API.
1970 * The checks below are based on those in place in the implementation
1971 * of set_commit_token in the C API. It is invalid to set a commit
1972 * token for a subtransaction, or if logging is disabled, or on a rep
1973 * client node.
1974 */
1975 env = txn->mgrp->env;
1976 is_nested = (txn->parent != NULL);
1977 is_logging_enabled = env->lg_handle != NULL;
1978 is_rep_client = (env->rep_handle != NULL &&
1979 env->rep_handle->region != NULL &&
1980 F_ISSET((env->rep_handle->region), REP_F_CLIENT));
1981 commit_token_enabled = (!is_nested && is_logging_enabled && !is_rep_client);
1982
1983 if (commit_token_enabled) {
1984 result1 = (db_ret_t)txn->set_commit_token(txn, &token);
1985 }
1986
1987 result = (db_ret_t)txn->commit(txn, flags);
1988 if (!DB_RETOK_STD(result)) {
1989 __dbj_throw(jenv, result, NULL, NULL, NULL);
1990 }
1991
1992 /*
1993 * Set the commit token in the Java Transaction class object only if
1994 * the Core has generated a valid token for this transaction
1995 */
1996 if (commit_token_enabled && DB_RETOK_STD(result1)) {
1997 jbyteArray newarr = (*jenv)->NewByteArray(jenv, (jsize)DB_TXN_TOKEN_SIZE);
1998 if (newarr == NULL) {
1999 return; /* An exception is pending */
2000 }
2001 (*jenv)->SetByteArrayRegion(jenv, newarr, 0, (jsize)DB_TXN_TOKEN_SIZE,
2002 (jbyte *)&token);
2003 (*jenv)->SetObjectField(jenv, jarg1_, txn_commit_token, newarr);
2004 }
2005 }
2006
2007
2008 /*
2009 * These macros are used by code generated by the s_java script.
2010 */
2011 #define JAVADB_STAT_INT(jenv, jobj, fid, statp, name) \
2012 (*jenv)->SetIntField(jenv, jobj, fid, (jint)statp->name)
2013
2014 #define JAVADB_STAT_STRING(jenv, jobj, fid, statp, name) \
2015 (*jenv)->SetObjectField(jenv, jobj, fid, \
2016 (*jenv)->NewStringUTF(jenv, statp->name))
2017
2018 #define JAVADB_STAT_LSN(jenv, jobj, fid, statp, name) \
2019 (*jenv)->SetObjectField(jenv, jobj, fid, \
2020 __dbj_wrap_DB_LSN(jenv, &statp->name))
2021
2022 #define JAVADB_STAT_LONG(jenv, jobj, fid, statp, name) \
2023 (*jenv)->SetLongField(jenv, jobj, fid, \
2024 (jlong)statp->name)
2025
2026 #define JAVADB_STAT_GID(jenv, jobj, fid, statp, name) { \
2027 jobject jarr = \
2028 (*jenv)->NewByteArray(jenv, (jsize)DB_GID_SIZE); \
2029 (*jenv)->SetByteArrayRegion(jenv, jarr, \
2030 0, (jsize)DB_GID_SIZE, (jbyte *)statp->name); \
2031 (*jenv)->SetObjectField(jenv, jobj, fid, jarr); \
2032 }
2033
2034 /*
2035 * We build the active list separately.
2036 */
2037 #define JAVADB_STAT_ACTIVE(jenv, cl, jobj, statp, name) \
2038 do {} while(0)
2039
2040 #include "java_stat_auto.c"
2041
2042
__dbj_error(const DB_ENV * dbenv,const char * prefix,const char * msg)2043 static void __dbj_error(const DB_ENV *dbenv,
2044 const char *prefix, const char *msg)
2045 {
2046 int detach;
2047 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2048 jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
2049 jobject jmsg;
2050
2051 COMPQUIET(prefix, NULL);
2052
2053 if (jdbenv != NULL){
2054 jmsg = (*jenv)->NewStringUTF(jenv, msg);
2055 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
2056 errcall_method, jmsg);
2057 (*jenv)->DeleteLocalRef(jenv, jmsg);
2058 }
2059
2060 if (detach)
2061 __dbj_detach();
2062 }
2063
__dbj_env_feedback(DB_ENV * dbenv,int opcode,int percent)2064 static void __dbj_env_feedback(DB_ENV *dbenv, int opcode, int percent)
2065 {
2066 int detach;
2067 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2068 jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
2069
2070 if (jdbenv != NULL)
2071 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
2072 env_feedback_method, opcode, percent);
2073
2074 if (detach)
2075 __dbj_detach();
2076 }
2077
__dbj_message(const DB_ENV * dbenv,const char * msg)2078 static void __dbj_message(const DB_ENV *dbenv, const char *msg)
2079 {
2080 int detach;
2081 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2082 jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
2083 jobject jmsg;
2084
2085 if (jdbenv != NULL){
2086 jmsg = (*jenv)->NewStringUTF(jenv, msg);
2087 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
2088 msgcall_method, jmsg);
2089 (*jenv)->DeleteLocalRef(jenv, jmsg);
2090 }
2091
2092 if (detach)
2093 __dbj_detach();
2094 }
2095
__dbj_repmgr_msg_dispatch(DB_ENV * dbenv,DB_CHANNEL * chan,DBT * msgs,u_int32_t nmsgs,u_int32_t flags)2096 static void __dbj_repmgr_msg_dispatch(DB_ENV *dbenv, DB_CHANNEL *chan, DBT *msgs, u_int32_t nmsgs, u_int32_t flags)
2097 {
2098 int detach;
2099 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2100 jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
2101 jobject jdbt;
2102 jobjectArray jmsgs;
2103 jbyteArray jdbtarr;
2104 u_int32_t i;
2105
2106 if (jdbenv == NULL)
2107 return;
2108
2109 jmsgs = (*jenv)->NewObjectArray(jenv, nmsgs, dbt_class, NULL);
2110 if (jmsgs == NULL)
2111 goto err;
2112 for (i = 0; i < nmsgs; i++) {
2113 jdbt = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
2114 __dbj_dbt_copyout(jenv, &(msgs[i]), &jdbtarr, jdbt);
2115 if (jdbt == NULL) {
2116 /* An exception is pending. */
2117 goto err;
2118 }
2119 (*jenv)->SetObjectArrayElement(jenv, jmsgs, i, jdbt);
2120 }
2121
2122 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class, repmgr_msg_dispatch_method, chan, jmsgs, flags);
2123
2124 (*jenv)->DeleteLocalRef(jenv, jdbt);
2125 (*jenv)->DeleteLocalRef(jenv, jdbtarr);
2126 (*jenv)->DeleteLocalRef(jenv, jmsgs);
2127
2128 err: if (detach)
2129 __dbj_detach();
2130 }
2131
__dbj_panic(DB_ENV * dbenv,int ret)2132 static void __dbj_panic(DB_ENV *dbenv, int ret)
2133 {
2134 int detach;
2135 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2136 jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
2137
2138 if (jdbenv != NULL)
2139 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
2140 paniccall_method,
2141 __dbj_get_except(jenv, ret, NULL, NULL, jdbenv));
2142
2143 if (detach)
2144 __dbj_detach();
2145 }
2146
__dbj_app_dispatch(DB_ENV * dbenv,DBT * dbt,DB_LSN * lsn,db_recops recops)2147 static int __dbj_app_dispatch(DB_ENV *dbenv,
2148 DBT *dbt, DB_LSN *lsn, db_recops recops)
2149 {
2150 int detach;
2151 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2152 jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
2153 jobject jdbt, jlsn;
2154 jbyteArray jdbtarr;
2155 int ret;
2156
2157 if (jdbenv == NULL) {
2158 ret = EINVAL;
2159 goto err;
2160 }
2161
2162 jdbt = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
2163 __dbj_dbt_copyout(jenv, dbt, &jdbtarr, jdbt);
2164 if (jdbt == NULL) {
2165 ret = ENOMEM; /* An exception is pending */
2166 goto err;
2167 }
2168
2169 jlsn = (lsn == NULL) ? NULL : __dbj_wrap_DB_LSN(jenv, lsn);
2170
2171 ret = (*jenv)->CallNonvirtualIntMethod(jenv, jdbenv, dbenv_class,
2172 app_dispatch_method, jdbt, jlsn, recops);
2173
2174 if ((*jenv)->ExceptionOccurred(jenv)) {
2175 /* The exception will be thrown, so this could be any error. */
2176 ret = EINVAL;
2177 }
2178
2179 (*jenv)->DeleteLocalRef(jenv, jdbtarr);
2180 (*jenv)->DeleteLocalRef(jenv, jdbt);
2181 if (jlsn != NULL)
2182 (*jenv)->DeleteLocalRef(jenv, jlsn);
2183
2184 err: if (detach)
2185 __dbj_detach();
2186 return (ret);
2187 }
2188
__dbj_event_notify(DB_ENV * dbenv,u_int32_t event_id,void * info)2189 static void __dbj_event_notify(DB_ENV *dbenv, u_int32_t event_id, void * info)
2190 {
2191 int detach;
2192 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2193 jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
2194
2195 if (jdbenv == NULL)
2196 goto done;
2197
2198 switch (event_id) {
2199 case DB_EVENT_PANIC:
2200 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2201 dbenv_class, panic_event_notify_method);
2202 break;
2203 case DB_EVENT_REP_CLIENT:
2204 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2205 dbenv_class, rep_client_event_notify_method);
2206 break;
2207 case DB_EVENT_REP_CONNECT_BROKEN:
2208 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2209 dbenv_class, rep_connect_broken_event_notify_method);
2210 break;
2211 case DB_EVENT_REP_CONNECT_ESTD:
2212 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2213 dbenv_class, rep_connect_established_event_notify_method);
2214 break;
2215 case DB_EVENT_REP_CONNECT_TRY_FAILED:
2216 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2217 dbenv_class, rep_connect_try_failed_event_notify_method);
2218 break;
2219 case DB_EVENT_REP_DUPMASTER:
2220 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2221 dbenv_class, rep_dupmaster_event_notify_method);
2222 break;
2223 case DB_EVENT_REP_ELECTED:
2224 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2225 dbenv_class, rep_elected_event_notify_method);
2226 break;
2227 case DB_EVENT_REP_ELECTION_FAILED:
2228 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2229 dbenv_class, rep_election_failed_event_notify_method);
2230 break;
2231 case DB_EVENT_REP_INIT_DONE:
2232 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2233 dbenv_class, rep_init_done_event_notify_method);
2234 break;
2235 case DB_EVENT_REP_JOIN_FAILURE:
2236 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2237 dbenv_class, rep_join_failure_event_notify_method);
2238 break;
2239 case DB_EVENT_REP_LOCAL_SITE_REMOVED:
2240 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2241 dbenv_class, rep_local_site_removed_notify_method);
2242 break;
2243 case DB_EVENT_REP_MASTER:
2244 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2245 dbenv_class, rep_master_event_notify_method);
2246 break;
2247 case DB_EVENT_REP_MASTER_FAILURE:
2248 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2249 dbenv_class, rep_master_failure_event_notify_method);
2250 break;
2251 case DB_EVENT_REP_NEWMASTER:
2252 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2253 dbenv_class, rep_new_master_event_notify_method,
2254 *(int*)info);
2255 break;
2256 case DB_EVENT_REP_PERM_FAILED:
2257 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2258 dbenv_class, rep_perm_failed_event_notify_method);
2259 break;
2260 case DB_EVENT_REP_SITE_ADDED:
2261 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2262 dbenv_class, rep_site_added_event_notify_method);
2263 break;
2264 case DB_EVENT_REP_SITE_REMOVED:
2265 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2266 dbenv_class, rep_site_removed_event_notify_method);
2267 break;
2268 case DB_EVENT_REP_STARTUPDONE:
2269 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2270 dbenv_class, rep_startup_done_event_notify_method);
2271 break;
2272 case DB_EVENT_WRITE_FAILED:
2273 (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv,
2274 dbenv_class, write_failed_event_notify_method,
2275 *(int*)info);
2276 break;
2277 default:
2278 dbenv->errx(dbenv, "Unhandled event callback in the Java API");
2279 DB_ASSERT(dbenv->env, 0);
2280 }
2281
2282 done: if (detach)
2283 __dbj_detach();
2284 }
2285
__dbj_rep_transport(DB_ENV * dbenv,const DBT * control,const DBT * rec,const DB_LSN * lsn,int envid,u_int32_t flags)2286 static int __dbj_rep_transport(DB_ENV *dbenv,
2287 const DBT *control, const DBT *rec, const DB_LSN *lsn, int envid,
2288 u_int32_t flags)
2289 {
2290 int detach;
2291 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2292 jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
2293 jobject jcontrol, jrec, jlsn;
2294 jbyteArray jcontrolarr, jrecarr;
2295 int ret;
2296
2297 if (jdbenv == NULL) {
2298 ret = EINVAL;
2299 goto err;
2300 }
2301
2302 jcontrol = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
2303 jrec = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
2304 if (jcontrol == NULL || jrec == NULL) {
2305 ret = ENOMEM; /* An exception is pending */
2306 goto err;
2307 }
2308
2309 __dbj_dbt_copyout(jenv, control, &jcontrolarr, jcontrol);
2310 __dbj_dbt_copyout(jenv, rec, &jrecarr, jrec);
2311 jlsn = (lsn == NULL) ? NULL : __dbj_wrap_DB_LSN(jenv, (DB_LSN *)lsn);
2312
2313 if (jcontrolarr == NULL || jrecarr == NULL) {
2314 ret = ENOMEM; /* An exception is pending */
2315 goto err;
2316 }
2317
2318 ret = (*jenv)->CallNonvirtualIntMethod(jenv, jdbenv, dbenv_class,
2319 rep_transport_method, jcontrol, jrec, jlsn, envid, flags);
2320
2321 if ((*jenv)->ExceptionOccurred(jenv)) {
2322 /* The exception will be thrown, so this could be any error. */
2323 ret = EINVAL;
2324 }
2325
2326 (*jenv)->DeleteLocalRef(jenv, jrecarr);
2327 (*jenv)->DeleteLocalRef(jenv, jcontrolarr);
2328 (*jenv)->DeleteLocalRef(jenv, jrec);
2329 (*jenv)->DeleteLocalRef(jenv, jcontrol);
2330 if (jlsn != NULL)
2331 (*jenv)->DeleteLocalRef(jenv, jlsn);
2332
2333 err: if (detach)
2334 __dbj_detach();
2335 return (ret);
2336 }
2337
__dbj_foreignkey_nullify(DB * db,const DBT * key,DBT * data,const DBT * skey,int * changed)2338 static int __dbj_foreignkey_nullify(DB *db,
2339 const DBT *key, DBT *data, const DBT *skey, int *changed)
2340 {
2341 int detach;
2342 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2343 DBT_LOCKED lresult;
2344 jobject jdb = (jobject)DB_INTERNAL(db);
2345 jobject jkey, jdata, jskey;
2346 jbyteArray jkeyarr, jdataarr, jskeyarr;
2347 jboolean jresult;
2348 int ret;
2349
2350 if (jdb == NULL) {
2351 ret = EINVAL;
2352 goto err;
2353 }
2354
2355 jkey = (key->app_data != NULL) ?
2356 ((DBT_LOCKED *)key->app_data)->jdbt :
2357 (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
2358 jdata = (data->app_data != NULL) ?
2359 ((DBT_LOCKED *)data->app_data)->jdbt :
2360 (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
2361 jskey = (skey->app_data != NULL) ?
2362 ((DBT_LOCKED *)skey->app_data)->jdbt :
2363 (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
2364 if (jkey == NULL || jdata == NULL || jskey == NULL) {
2365 ret = ENOMEM; /* An exception is pending */
2366 goto err;
2367 }
2368
2369 if (key->app_data == NULL) {
2370 __dbj_dbt_copyout(jenv, key, &jkeyarr, jkey);
2371 if (jkeyarr == NULL) {
2372 ret = ENOMEM; /* An exception is pending */
2373 goto err;
2374 }
2375 }
2376 if (data->app_data == NULL) {
2377 __dbj_dbt_copyout(jenv, data, &jdataarr, jdata);
2378 if (jdataarr == NULL) {
2379 ret = ENOMEM; /* An exception is pending */
2380 goto err;
2381 }
2382 }
2383 if (skey->app_data == NULL) {
2384 __dbj_dbt_copyout(jenv, skey, &jskeyarr, jskey);
2385 if (jskeyarr == NULL) {
2386 ret = ENOMEM; /* An exception is pending */
2387 goto err;
2388 }
2389 }
2390
2391 jresult = (*jenv)->CallNonvirtualBooleanMethod(jenv, jdb, db_class, foreignkey_nullify_method, jkey, jdata, jskey);
2392
2393 if ((*jenv)->ExceptionOccurred(jenv)) {
2394 /* The exception will be thrown, so this could be any error. */
2395 ret = EINVAL;
2396 goto err;
2397 }
2398
2399 if (jresult == JNI_FALSE)
2400 *changed = ret = 0;
2401 else{
2402 *changed = 1;
2403 /* copy jdata into data */
2404 if ((ret = __dbj_dbt_copyin(jenv, &lresult, NULL, jdata, 0)) != 0)
2405 goto err;
2406 if (lresult.dbt.size != 0){
2407 data->size = lresult.dbt.size;
2408 if ((ret = __os_umalloc(
2409 NULL, data->size, &data->data)) != 0)
2410 goto err;
2411 if ((ret = __dbj_dbt_memcopy(&lresult.dbt, 0,
2412 data->data, data->size, DB_USERCOPY_GETDATA)) != 0)
2413 goto err;
2414 __dbj_dbt_release(jenv, jdata, &lresult.dbt, &lresult);
2415 (*jenv)->DeleteLocalRef(jenv, lresult.jarr);
2416 F_SET(data, DB_DBT_APPMALLOC);
2417 }
2418 }
2419
2420 err: if (key->app_data == NULL) {
2421 (*jenv)->DeleteLocalRef(jenv, jkeyarr);
2422 (*jenv)->DeleteLocalRef(jenv, jkey);
2423 }
2424 if (data->app_data == NULL) {
2425 (*jenv)->DeleteLocalRef(jenv, jdataarr);
2426 (*jenv)->DeleteLocalRef(jenv, jdata);
2427 }
2428
2429 if (detach)
2430 __dbj_detach();
2431 return ret;
2432 }
2433
__dbj_seckey_create(DB * db,const DBT * key,const DBT * data,DBT * result)2434 static int __dbj_seckey_create(DB *db,
2435 const DBT *key, const DBT *data, DBT *result)
2436 {
2437 int detach;
2438 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2439 jobject jdb = (jobject)DB_INTERNAL(db);
2440 jobject jkey, jdata, jresult;
2441 jobjectArray jskeys;
2442 jsize i, num_skeys;
2443 jbyteArray jkeyarr, jdataarr;
2444 DBT_LOCKED lresult;
2445 DBT *tresult;
2446 int ret;
2447
2448 if (jdb == NULL) {
2449 ret = EINVAL;
2450 goto err;
2451 }
2452
2453 jkey = (key->app_data != NULL) ?
2454 ((DBT_LOCKED *)key->app_data)->jdbt :
2455 (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
2456 jdata = (data->app_data != NULL) ?
2457 ((DBT_LOCKED *)data->app_data)->jdbt :
2458 (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
2459 if (jkey == NULL || jdata == NULL) {
2460 ret = ENOMEM; /* An exception is pending */
2461 goto err;
2462 }
2463
2464 if (key->app_data == NULL) {
2465 __dbj_dbt_copyout(jenv, key, &jkeyarr, jkey);
2466 if (jkeyarr == NULL) {
2467 ret = ENOMEM; /* An exception is pending */
2468 goto err;
2469 }
2470 }
2471 if (data->app_data == NULL) {
2472 __dbj_dbt_copyout(jenv, data, &jdataarr, jdata);
2473 if (jdataarr == NULL) {
2474 ret = ENOMEM; /* An exception is pending */
2475 goto err;
2476 }
2477 }
2478
2479 jskeys = (jobjectArray)(*jenv)->CallNonvirtualObjectMethod(jenv,
2480 jdb, db_class, seckey_create_method, jkey, jdata);
2481
2482 if (jskeys == NULL ||
2483 (num_skeys = (*jenv)->GetArrayLength(jenv, jskeys)) == 0) {
2484 ret = DB_DONOTINDEX;
2485 goto err;
2486 } else if (num_skeys == 1) {
2487 memset(result, 0, sizeof (DBT));
2488 tresult = result;
2489 } else {
2490 if ((ret = __os_umalloc(db->env,
2491 num_skeys * sizeof (DBT), &result->data)) != 0)
2492 goto err;
2493 memset(result->data, 0, num_skeys * sizeof (DBT));
2494 result->size = num_skeys;
2495 F_SET(result, DB_DBT_APPMALLOC | DB_DBT_MULTIPLE);
2496 tresult = (DBT *)result->data;
2497 }
2498
2499 if ((*jenv)->ExceptionOccurred(jenv)) {
2500 /* The exception will be thrown, so this could be any error. */
2501 ret = EINVAL;
2502 goto err;
2503 }
2504
2505 for (i = 0; i < num_skeys; i++, tresult++) {
2506 jresult = (*jenv)->GetObjectArrayElement(jenv, jskeys, i);
2507
2508 if ((ret =
2509 __dbj_dbt_copyin(jenv, &lresult, NULL, jresult, 0)) != 0)
2510 goto err;
2511
2512 if (lresult.dbt.size != 0) {
2513 /* If there's data, we need to take a copy of it. */
2514 tresult->size = lresult.dbt.size;
2515 if ((ret = __os_umalloc(NULL,
2516 tresult->size, &tresult->data)) != 0)
2517 goto err;
2518 if ((ret = __dbj_dbt_memcopy(&lresult.dbt, 0,
2519 tresult->data, tresult->size,
2520 DB_USERCOPY_GETDATA)) != 0)
2521 goto err;
2522 __dbj_dbt_release(jenv,
2523 jresult, &lresult.dbt, &lresult);
2524 (*jenv)->DeleteLocalRef(jenv, lresult.jarr);
2525 F_SET(tresult, DB_DBT_APPMALLOC);
2526 }
2527
2528 (*jenv)->DeleteLocalRef(jenv, jresult);
2529 }
2530
2531 err: if (key->app_data == NULL) {
2532 (*jenv)->DeleteLocalRef(jenv, jkeyarr);
2533 (*jenv)->DeleteLocalRef(jenv, jkey);
2534 }
2535 if (data->app_data == NULL) {
2536 (*jenv)->DeleteLocalRef(jenv, jdataarr);
2537 (*jenv)->DeleteLocalRef(jenv, jdata);
2538 }
2539 if (jskeys != NULL) {
2540 (*jenv)->DeleteLocalRef(jenv, jskeys);
2541 }
2542
2543 if (detach)
2544 __dbj_detach();
2545 return (ret);
2546 }
2547
__dbj_append_recno(DB * db,DBT * dbt,db_recno_t recno)2548 static int __dbj_append_recno(DB *db, DBT *dbt, db_recno_t recno)
2549 {
2550 int detach;
2551 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2552 jobject jdb = (jobject)DB_INTERNAL(db);
2553 jobject jdbt;
2554 DBT_LOCKED lresult;
2555 jbyteArray jdbtarr;
2556 int ret;
2557
2558 if (jdb == NULL) {
2559 ret = EINVAL;
2560 goto err;
2561 }
2562
2563 /*
2564 * The dbt we're passed will be from the application, but we can't
2565 * just reuse it, since we will have already taken a copy of the data.
2566 * Make a new DatabaseEntry object here for the callback.
2567 */
2568 jdbt = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
2569 if (jdbt == NULL) {
2570 ret = ENOMEM; /* An exception is pending */
2571 goto err;
2572 }
2573
2574 __dbj_dbt_copyout(jenv, dbt, &jdbtarr, jdbt);
2575 if (jdbtarr == NULL) {
2576 ret = ENOMEM; /* An exception is pending */
2577 goto err;
2578 }
2579
2580 ret = 0;
2581 (*jenv)->CallNonvirtualVoidMethod(jenv, jdb, db_class,
2582 append_recno_method, jdbt, recno);
2583
2584 if ((*jenv)->ExceptionOccurred(jenv)) {
2585 /* The exception will be thrown, so this could be any error. */
2586 ret = EINVAL;
2587 goto err;
2588 }
2589
2590 ret = __dbj_dbt_copyin(jenv, &lresult, NULL, jdbt, 0);
2591 memset(dbt, 0, sizeof (DBT));
2592
2593 if (ret == 0 && lresult.dbt.size != 0) {
2594 /* If there's data, we need to take a copy of it. */
2595 dbt->size = lresult.dbt.size;
2596 if ((ret =
2597 __os_umalloc(NULL, dbt->size, &dbt->data)) != 0)
2598 goto err;
2599 if ((ret = __dbj_dbt_memcopy(&lresult.dbt, 0,
2600 dbt->data, dbt->size,
2601 DB_USERCOPY_GETDATA)) != 0)
2602 goto err;
2603 __dbj_dbt_release(jenv, jdbt, &lresult.dbt, &lresult);
2604 (*jenv)->DeleteLocalRef(jenv, lresult.jarr);
2605 F_SET(dbt, DB_DBT_APPMALLOC);
2606 }
2607
2608 err: (*jenv)->DeleteLocalRef(jenv, jdbtarr);
2609 (*jenv)->DeleteLocalRef(jenv, jdbt);
2610
2611 if (detach)
2612 __dbj_detach();
2613 return (ret);
2614 }
2615
2616 /*
2617 * Shared by __dbj_bt_compare and __dbj_h_compare
2618 */
__dbj_am_compare(DB * db,const DBT * dbt1,const DBT * dbt2,jmethodID compare_method)2619 static int __dbj_am_compare(DB *db, const DBT *dbt1, const DBT *dbt2,
2620 jmethodID compare_method)
2621 {
2622 int detach;
2623 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2624 jobject jdb = (jobject)DB_INTERNAL(db);
2625 jbyteArray jdbtarr1, jdbtarr2;
2626 int ret;
2627
2628 if (jdb == NULL) {
2629 ret = EINVAL;
2630 goto err;
2631 }
2632
2633 if (dbt1->app_data != NULL)
2634 jdbtarr1 = ((DBT_LOCKED *)dbt1->app_data)->jarr;
2635 else {
2636 jdbtarr1 = (*jenv)->NewByteArray(jenv, (jsize)dbt1->size);
2637 if (jdbtarr1 == NULL) {
2638 ret = ENOMEM;
2639 goto err;
2640 }
2641 (*jenv)->SetByteArrayRegion(jenv, jdbtarr1, 0,
2642 (jsize)dbt1->size, (jbyte *)dbt1->data);
2643 }
2644
2645 if (dbt2->app_data != NULL)
2646 jdbtarr2 = ((DBT_LOCKED *)dbt2->app_data)->jarr;
2647 else {
2648 jdbtarr2 = (*jenv)->NewByteArray(jenv, (jsize)dbt2->size);
2649 if (jdbtarr2 == NULL) {
2650 ret = ENOMEM;
2651 goto err;
2652 }
2653 (*jenv)->SetByteArrayRegion(jenv, jdbtarr2, 0,
2654 (jsize)dbt2->size, (jbyte *)dbt2->data);
2655 }
2656
2657 ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
2658 compare_method, jdbtarr1, jdbtarr2);
2659
2660 if ((*jenv)->ExceptionOccurred(jenv)) {
2661 /* The exception will be thrown, so this could be any error. */
2662 ret = EINVAL;
2663 }
2664
2665 err: if (dbt1->app_data == NULL)
2666 (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
2667 if (dbt2->app_data == NULL)
2668 (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
2669
2670 if (detach)
2671 __dbj_detach();
2672 return (ret);
2673 }
2674
__dbj_bt_compare(DB * db,const DBT * dbt1,const DBT * dbt2)2675 static int __dbj_bt_compare(DB *db, const DBT *dbt1, const DBT *dbt2)
2676 {
2677 return __dbj_am_compare(db, dbt1, dbt2, bt_compare_method);
2678 }
2679
2680 #define DBT_COPYOUT(num) do { \
2681 if (dbt##num->app_data != NULL) \
2682 jdbt##num = ((DBT_LOCKED *)dbt##num->app_data)->jdbt; \
2683 else { \
2684 if ((jdbt##num = (*jenv)->NewObject( \
2685 jenv, dbt_class, dbt_construct)) == NULL) { \
2686 ret = ENOMEM; /* An exception is pending */ \
2687 goto err; \
2688 } \
2689 __dbj_dbt_copyout(jenv, dbt##num, &jdbtarr##num, jdbt##num);\
2690 if (jdbtarr##num == NULL) { \
2691 ret = ENOMEM; /* An exception is pending */ \
2692 goto err; \
2693 } \
2694 } \
2695 } while (0)
2696
2697 #define DBT_COPIED_FREE(num) do { \
2698 if (dbt##num->app_data == NULL) { \
2699 (*jenv)->DeleteLocalRef(jenv, jdbtarr##num); \
2700 (*jenv)->DeleteLocalRef(jenv, jdbt##num); \
2701 } \
2702 } while (0)
2703
2704 #define DBT_COPYIN_DATA(num) do { \
2705 ret = __dbj_dbt_copyin(jenv, &lresult, NULL, jdbt##num, 0); \
2706 /* Re-initialize the output DBT. Preserve app_data. */ \
2707 dbt##num->data = NULL; \
2708 dbt##num->size = 0; \
2709 dbt##num->ulen = 0; \
2710 dbt##num->dlen = 0; \
2711 dbt##num->doff = 0; \
2712 dbt##num->flags = 0; \
2713 if (ret == 0 && lresult.dbt.size != 0) { \
2714 /* If there's data, we need to take a copy of it. */ \
2715 dbt##num->size = lresult.dbt.size; \
2716 if ((ret = __os_umalloc( \
2717 NULL, dbt##num->size, &dbt##num->data)) != 0) \
2718 goto err; \
2719 if ((ret = __dbj_dbt_memcopy(&lresult.dbt, 0, \
2720 dbt##num->data, dbt##num->size, \
2721 DB_USERCOPY_GETDATA)) != 0) \
2722 goto err; \
2723 __dbj_dbt_release(jenv, jdbt##num, &lresult.dbt, &lresult);\
2724 (*jenv)->DeleteLocalRef(jenv, lresult.jarr); \
2725 F_SET(dbt##num, DB_DBT_APPMALLOC); \
2726 } \
2727 } while (0)
2728
__dbj_bt_compress(DB * db,const DBT * dbt1,const DBT * dbt2,const DBT * dbt3,const DBT * dbt4,DBT * dbt5)2729 static int __dbj_bt_compress(DB *db, const DBT *dbt1, const DBT *dbt2,
2730 const DBT *dbt3, const DBT *dbt4, DBT *dbt5)
2731 {
2732 int detach;
2733 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2734 jobject jdb = (jobject)DB_INTERNAL(db);
2735 jobject jdbt1, jdbt2, jdbt3, jdbt4, jdbt5;
2736 jbyteArray jdbtarr1, jdbtarr2, jdbtarr3, jdbtarr4, jdbtarr5;
2737 DBT_LOCKED lresult;
2738 int ret;
2739
2740 if (jdb == NULL) {
2741 ret = EINVAL;
2742 goto err;
2743 }
2744
2745 jdbt1 = jdbt2 = jdbt3 = jdbt4 = jdbt5 = NULL;
2746
2747 DBT_COPYOUT(1);
2748 DBT_COPYOUT(2);
2749 DBT_COPYOUT(3);
2750 DBT_COPYOUT(4);
2751 DBT_COPYOUT(5);
2752
2753 ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
2754 bt_compress_method, jdbt1, jdbt2, jdbt3, jdbt4, jdbt5);
2755
2756 if ((*jenv)->ExceptionOccurred(jenv)) {
2757 /* The exception will be thrown, so this could be any error. */
2758 ret = EINVAL;
2759 goto err;
2760 }
2761
2762 DBT_COPYIN_DATA(5);
2763
2764 err: DBT_COPIED_FREE(1);
2765 DBT_COPIED_FREE(2);
2766 DBT_COPIED_FREE(3);
2767 DBT_COPIED_FREE(4);
2768 DBT_COPIED_FREE(5);
2769 if (detach)
2770 __dbj_detach();
2771 return (ret);
2772 }
2773
__dbj_bt_decompress(DB * db,const DBT * dbt1,const DBT * dbt2,DBT * dbt3,DBT * dbt4,DBT * dbt5)2774 static int __dbj_bt_decompress(DB *db, const DBT *dbt1, const DBT *dbt2,
2775 DBT *dbt3, DBT *dbt4, DBT *dbt5)
2776 {
2777 int detach;
2778 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2779 jobject jdb = (jobject)DB_INTERNAL(db);
2780 jobject jdbt1, jdbt2, jdbt3, jdbt4, jdbt5;
2781 jbyteArray jdbtarr1, jdbtarr2, jdbtarr3, jdbtarr4, jdbtarr5;
2782 DBT_LOCKED lresult;
2783 int ret;
2784
2785 jdbt1 = jdbt2 = jdbt3 = jdbt4 = jdbt5 = NULL;
2786
2787 if (jdb == NULL) {
2788 ret = EINVAL;
2789 goto err;
2790 }
2791
2792 DBT_COPYOUT(1);
2793 DBT_COPYOUT(2);
2794 DBT_COPYOUT(3);
2795 DBT_COPYOUT(4);
2796 DBT_COPYOUT(5);
2797
2798 ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
2799 bt_decompress_method, jdbt1, jdbt2, jdbt3, jdbt4, jdbt5);
2800
2801 if ((*jenv)->ExceptionOccurred(jenv)) {
2802 /* The exception will be thrown, so this could be any error. */
2803 ret = EINVAL;
2804 goto err;
2805 }
2806
2807 DBT_COPYIN_DATA(3);
2808 DBT_COPYIN_DATA(4);
2809 DBT_COPYIN_DATA(5);
2810
2811 err: DBT_COPIED_FREE(1);
2812 DBT_COPIED_FREE(2);
2813 DBT_COPIED_FREE(3);
2814 DBT_COPIED_FREE(4);
2815 DBT_COPIED_FREE(5);
2816 if (detach)
2817 __dbj_detach();
2818 return (ret);
2819 }
2820
__dbj_bt_prefix(DB * db,const DBT * dbt1,const DBT * dbt2)2821 static size_t __dbj_bt_prefix(DB *db, const DBT *dbt1, const DBT *dbt2)
2822 {
2823 int detach;
2824 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2825 jobject jdb = (jobject)DB_INTERNAL(db);
2826 jobject jdbt1, jdbt2;
2827 jbyteArray jdbtarr1, jdbtarr2;
2828 int ret;
2829
2830 if (jdb == NULL) {
2831 ret = EINVAL;
2832 goto err;
2833 }
2834
2835 if (dbt1->app_data != NULL)
2836 jdbt1 = ((DBT_LOCKED *)dbt1->app_data)->jdbt;
2837 else {
2838 if ((jdbt1 =
2839 (*jenv)->NewObject(jenv, dbt_class, dbt_construct)) == NULL) {
2840 ret = ENOMEM; /* An exception is pending */
2841 goto err;
2842 }
2843 __dbj_dbt_copyout(jenv, dbt1, &jdbtarr1, jdbt1);
2844 if (jdbtarr1 == NULL) {
2845 ret = ENOMEM; /* An exception is pending */
2846 goto err;
2847 }
2848 }
2849
2850 if (dbt2->app_data != NULL)
2851 jdbt2 = ((DBT_LOCKED *)dbt2->app_data)->jdbt;
2852 else {
2853 if ((jdbt2 =
2854 (*jenv)->NewObject(jenv, dbt_class, dbt_construct)) == NULL) {
2855 ret = ENOMEM; /* An exception is pending */
2856 goto err;
2857 }
2858 __dbj_dbt_copyout(jenv, dbt2, &jdbtarr2, jdbt2);
2859 if (jdbtarr2 == NULL) {
2860 ret = ENOMEM; /* An exception is pending */
2861 goto err;
2862 }
2863 }
2864
2865 ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
2866 bt_prefix_method, jdbt1, jdbt2);
2867
2868 err: if (dbt1->app_data == NULL) {
2869 (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
2870 (*jenv)->DeleteLocalRef(jenv, jdbt1);
2871 }
2872 if (dbt2->app_data == NULL) {
2873 (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
2874 (*jenv)->DeleteLocalRef(jenv, jdbt2);
2875 }
2876
2877 if (detach)
2878 __dbj_detach();
2879 return (ret);
2880 }
2881
__dbj_dup_compare(DB * db,const DBT * dbt1,const DBT * dbt2)2882 static int __dbj_dup_compare(DB *db, const DBT *dbt1, const DBT *dbt2)
2883 {
2884 int detach;
2885 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2886 jobject jdb = (jobject)DB_INTERNAL(db);
2887 jbyteArray jdbtarr1, jdbtarr2;
2888 int ret;
2889
2890 if (jdb == NULL)
2891 return (EINVAL);
2892
2893 jdbtarr1 = (*jenv)->NewByteArray(jenv, (jsize)dbt1->size);
2894 if (jdbtarr1 == NULL)
2895 return (ENOMEM);
2896 (*jenv)->SetByteArrayRegion(jenv, jdbtarr1, 0, (jsize)dbt1->size,
2897 (jbyte *)dbt1->data);
2898
2899 jdbtarr2 = (*jenv)->NewByteArray(jenv, (jsize)dbt2->size);
2900 if (jdbtarr2 == NULL)
2901 return (ENOMEM);
2902 (*jenv)->SetByteArrayRegion(jenv, jdbtarr2, 0, (jsize)dbt2->size,
2903 (jbyte *)dbt2->data);
2904
2905 ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
2906 dup_compare_method, jdbtarr1, jdbtarr2);
2907
2908 if ((*jenv)->ExceptionOccurred(jenv)) {
2909 /* The exception will be thrown, so this could be any error. */
2910 ret = EINVAL;
2911 }
2912
2913 (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
2914 (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
2915
2916 if (detach)
2917 __dbj_detach();
2918 return (ret);
2919 }
2920
__dbj_db_feedback(DB * db,int opcode,int percent)2921 static void __dbj_db_feedback(DB *db, int opcode, int percent)
2922 {
2923 int detach;
2924 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2925 jobject jdb = (jobject)DB_INTERNAL(db);
2926
2927 if (jdb != NULL)
2928 (*jenv)->CallNonvirtualVoidMethod(jenv, jdb, db_class,
2929 db_feedback_method, opcode, percent);
2930
2931 if (detach)
2932 __dbj_detach();
2933 }
2934
__dbj_h_compare(DB * db,const DBT * dbt1,const DBT * dbt2)2935 static int __dbj_h_compare(DB *db, const DBT *dbt1, const DBT *dbt2)
2936 {
2937 return __dbj_am_compare(db, dbt1, dbt2, h_compare_method);
2938 }
2939
__dbj_h_hash(DB * db,const void * data,u_int32_t len)2940 static u_int32_t __dbj_h_hash(DB *db, const void *data, u_int32_t len)
2941 {
2942 int detach;
2943 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2944 jobject jdb = (jobject)DB_INTERNAL(db);
2945 jbyteArray jarr = (*jenv)->NewByteArray(jenv, (jsize)len);
2946 int ret;
2947
2948 if (jdb == NULL)
2949 return (EINVAL);
2950
2951 if ((jarr = (*jenv)->NewByteArray(jenv, (jsize)len)) == NULL)
2952 return (ENOMEM); /* An exception is pending */
2953
2954 (*jenv)->SetByteArrayRegion(jenv, jarr, 0, (jsize)len, (jbyte *)data);
2955
2956 ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
2957 h_hash_method, jarr, len);
2958
2959 (*jenv)->DeleteLocalRef(jenv, jarr);
2960
2961 if (detach)
2962 __dbj_detach();
2963 return (ret);
2964 }
2965
__dbj_partition(DB * db,DBT * dbt1)2966 static u_int32_t __dbj_partition(DB *db, DBT *dbt1)
2967 {
2968 int detach, ret;
2969 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2970 jobject jdb = (jobject)DB_INTERNAL(db);
2971 jobject jdbt1 = NULL;
2972 jbyteArray jdbtarr1;
2973 DBT_LOCKED lresult;
2974
2975 DBT_COPYOUT(1);
2976
2977 ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
2978 partition_method, jdbt1);
2979 if ((*jenv)->ExceptionOccurred(jenv)) {
2980 /* The exception will be thrown, so this could be any error. */
2981 ret = EINVAL;
2982 goto err;
2983 }
2984
2985 DBT_COPYIN_DATA(1);
2986 err: DBT_COPIED_FREE(1);
2987
2988 if (detach)
2989 __dbj_detach();
2990 return (ret);
2991 }
2992
__dbj_backup_close(DB_ENV * dbenv,const char * dbname,void * handle)2993 static int __dbj_backup_close(DB_ENV *dbenv, const char *dbname, void *handle) {
2994 int detach;
2995 JNIEnv *jenv = __dbj_get_jnienv(&detach);
2996 jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
2997 jobject jdbname;
2998 int ret;
2999
3000 COMPQUIET(handle, NULL);
3001
3002 if (jdbenv == NULL) {
3003 ret = EINVAL;
3004 goto err;
3005 }
3006
3007 jdbname = (*jenv)->NewStringUTF(jenv, dbname);
3008 ret = (*jenv)->CallNonvirtualIntMethod(jenv, jdbenv, dbenv_class, backup_close_method, jdbname);
3009
3010 if ((*jenv)->ExceptionOccurred(jenv)) {
3011 /* The exception will be thrown, so this could be any error. */
3012 ret = EINVAL;
3013 }
3014
3015 err: if (detach)
3016 __dbj_detach();
3017 return (ret);
3018 }
3019
__dbj_backup_open(DB_ENV * dbenv,const char * target,const char * dbname,void ** handle)3020 static int __dbj_backup_open(DB_ENV *dbenv, const char *target, const char *dbname, void **handle) {
3021 int detach;
3022 JNIEnv *jenv = __dbj_get_jnienv(&detach);
3023 jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
3024 jobject jtarget, jdbname;
3025 int ret;
3026
3027 COMPQUIET(handle, NULL);
3028
3029 if (jdbenv == NULL) {
3030 ret = EINVAL;
3031 goto err;
3032 }
3033
3034 jtarget = (*jenv)->NewStringUTF(jenv, target);
3035 jdbname = (*jenv)->NewStringUTF(jenv, dbname);
3036 ret = (*jenv)->CallNonvirtualIntMethod(jenv, jdbenv, dbenv_class, backup_open_method, jtarget, jdbname);
3037
3038 if ((*jenv)->ExceptionOccurred(jenv)) {
3039 /* The exception will be thrown, so this could be any error. */
3040 ret = EINVAL;
3041 }
3042
3043 err: if (detach)
3044 __dbj_detach();
3045 return (ret);
3046 }
3047
__dbj_backup_write(DB_ENV * dbenv,u_int32_t file_pos_gbytes,u_int32_t file_pos_bytes,u_int32_t size,u_int8_t * buf,void * handle)3048 static int __dbj_backup_write(DB_ENV *dbenv, u_int32_t file_pos_gbytes, u_int32_t file_pos_bytes, u_int32_t size, u_int8_t *buf, void *handle) {
3049 int detach;
3050 JNIEnv *jenv = __dbj_get_jnienv(&detach);
3051 jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
3052 jbyteArray jarr;
3053 int ret;
3054
3055 COMPQUIET(handle, NULL);
3056
3057 if (jdbenv == NULL) {
3058 ret = EINVAL;
3059 goto err;
3060 }
3061
3062 if ((jarr = (*jenv)->NewByteArray(jenv, (jsize)size)) == NULL) {
3063 /* An exception is pending. */
3064 ret = ENOMEM;
3065 goto err;
3066 }
3067 (*jenv)->SetByteArrayRegion(jenv, jarr, 0, (jsize)size, (jbyte *)buf);
3068
3069 ret = (*jenv)->CallNonvirtualIntMethod(jenv, jdbenv, dbenv_class, backup_write_method, file_pos_gbytes, file_pos_bytes, size, jarr);
3070 (*jenv)->DeleteLocalRef(jenv, jarr);
3071 if ((*jenv)->ExceptionOccurred(jenv)) {
3072 /* The exception will be thrown, so this could be any error. */
3073 ret = EINVAL;
3074 }
3075
3076 err: if (detach)
3077 __dbj_detach();
3078 return (ret);
3079 }
3080
3081
3082 SWIGEXPORT jlong JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_initDbEnvRef0(JNIEnv * jenv,jclass jcls,jlong jarg1,jobject jarg1_,jobject jarg2)3083 Java_com_sleepycat_db_internal_db_1javaJNI_initDbEnvRef0(
3084 JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jobject jarg2) {
3085 DB_ENV *self = *(DB_ENV **)(void *)&jarg1;
3086 jlong ret;
3087 COMPQUIET(jcls, NULL);
3088 COMPQUIET(jarg1_, NULL);
3089
3090 DB_ENV_INTERNAL(self) = (void *)(*jenv)->NewGlobalRef(jenv, jarg2);
3091 *(jobject *)(void *)&ret = (jobject)DB_ENV_INTERNAL(self);
3092 return (ret);
3093 }
3094
3095 SWIGEXPORT jlong JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_initDbRef0(JNIEnv * jenv,jclass jcls,jlong jarg1,jobject jarg1_,jobject jarg2)3096 Java_com_sleepycat_db_internal_db_1javaJNI_initDbRef0(
3097 JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jobject jarg2) {
3098 DB *self = *(DB **)(void *)&jarg1;
3099 jlong ret;
3100 COMPQUIET(jcls, NULL);
3101 COMPQUIET(jarg1_, NULL);
3102
3103 DB_INTERNAL(self) = (void *)(*jenv)->NewGlobalRef(jenv, jarg2);
3104 *(jobject *)(void *)&ret = (jobject)DB_INTERNAL(self);
3105 return (ret);
3106 }
3107
3108 SWIGEXPORT void JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_deleteRef0(JNIEnv * jenv,jclass jcls,jlong jarg1)3109 Java_com_sleepycat_db_internal_db_1javaJNI_deleteRef0(
3110 JNIEnv *jenv, jclass jcls, jlong jarg1) {
3111 jobject jref = *(jobject *)(void *)&jarg1;
3112 COMPQUIET(jcls, NULL);
3113
3114 if (jref != 0L)
3115 (*jenv)->DeleteGlobalRef(jenv, jref);
3116 }
3117
3118 SWIGEXPORT jlong JNICALL
Java_com_sleepycat_db_internal_db_1javaJNI_getDbEnv0(JNIEnv * jenv,jclass jcls,jlong jarg1,jobject jarg1_)3119 Java_com_sleepycat_db_internal_db_1javaJNI_getDbEnv0(
3120 JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
3121 DB *self = *(DB **)(void *)&jarg1;
3122 jlong ret;
3123
3124 COMPQUIET(jenv, NULL);
3125 COMPQUIET(jcls, NULL);
3126 COMPQUIET(jarg1_, NULL);
3127
3128 *(DB_ENV **)(void *)&ret = self->dbenv;
3129 return (ret);
3130 }
3131
3132 SWIGEXPORT jboolean JNICALL
Java_com_sleepycat_db_internal_DbUtil_is_1big_1endian(JNIEnv * jenv,jclass clazz)3133 Java_com_sleepycat_db_internal_DbUtil_is_1big_1endian(
3134 JNIEnv *jenv, jclass clazz)
3135 {
3136 COMPQUIET(jenv, NULL);
3137 COMPQUIET(clazz, NULL);
3138
3139 return (__db_isbigendian() ? JNI_TRUE : JNI_FALSE);
3140 }
3141
new_Db(DB_ENV * dbenv,u_int32_t flags)3142 SWIGINTERN struct Db *new_Db(DB_ENV *dbenv,u_int32_t flags){
3143 DB *self = NULL;
3144 errno = db_create(&self, dbenv, flags);
3145 if (errno == 0 && dbenv == NULL)
3146 self->env->dbt_usercopy = __dbj_dbt_memcopy;
3147 return self;
3148 }
Db_associate(struct Db * self,DB_TXN * txnid,DB * secondary,int (* callback)(DB *,DBT const *,DBT const *,DBT *),u_int32_t flags)3149 SWIGINTERN db_ret_t Db_associate(struct Db *self,DB_TXN *txnid,DB *secondary,int (*callback)(DB *,DBT const *,DBT const *,DBT *),u_int32_t flags){
3150 return self->associate(self, txnid, secondary, callback, flags);
3151 }
Db_associate_foreign(struct Db * self,DB * primary,int (* callback)(DB *,DBT const *,DBT *,DBT const *,int *),u_int32_t flags)3152 SWIGINTERN db_ret_t Db_associate_foreign(struct Db *self,DB *primary,int (*callback)(DB *,DBT const *,DBT *,DBT const *,int *),u_int32_t flags){
3153 return self->associate_foreign(self, primary, callback, flags);
3154 }
Db_compact(struct Db * self,DB_TXN * txnid,DBT * start,DBT * stop,DB_COMPACT * c_data,u_int32_t flags,DBT * end)3155 SWIGINTERN db_ret_t Db_compact(struct Db *self,DB_TXN *txnid,DBT *start,DBT *stop,DB_COMPACT *c_data,u_int32_t flags,DBT *end){
3156 return self->compact(self, txnid, start, stop, c_data, flags,
3157 end);
3158 }
Db_close(struct Db * self,u_int32_t flags)3159 SWIGINTERN int Db_close(struct Db *self,u_int32_t flags){
3160 errno = self->close(self, flags);
3161 return errno;
3162 }
Db_cursor(struct Db * self,DB_TXN * txnid,u_int32_t flags)3163 SWIGINTERN DBC *Db_cursor(struct Db *self,DB_TXN *txnid,u_int32_t flags){
3164 DBC *cursorp = NULL;
3165 errno = self->cursor(self, txnid, &cursorp, flags);
3166 return cursorp;
3167 }
Db_del(struct Db * self,DB_TXN * txnid,DBT * key,u_int32_t flags)3168 SWIGINTERN int Db_del(struct Db *self,DB_TXN *txnid,DBT *key,u_int32_t flags){
3169 return self->del(self, txnid, key, flags);
3170 }
Db_err(struct Db * self,int ret,char const * message)3171 SWIGINTERN void Db_err(struct Db *self,int ret,char const *message){
3172 self->err(self, ret, message);
3173 }
Db_errx(struct Db * self,char const * message)3174 SWIGINTERN void Db_errx(struct Db *self,char const *message){
3175 self->errx(self, message);
3176 }
Db_exists(struct Db * self,DB_TXN * txnid,DBT * key,u_int32_t flags)3177 SWIGINTERN int Db_exists(struct Db *self,DB_TXN *txnid,DBT *key,u_int32_t flags){
3178 return self->exists(self, txnid, key, flags);
3179 }
Db_get(struct Db * self,DB_TXN * txnid,DBT * key,DBT * data,u_int32_t flags)3180 SWIGINTERN int Db_get(struct Db *self,DB_TXN *txnid,DBT *key,DBT *data,u_int32_t flags){
3181 return self->get(self, txnid, key, data, flags);
3182 }
Db_get_assoc_flags(struct Db * self)3183 SWIGINTERN u_int32_t Db_get_assoc_flags(struct Db *self){
3184 u_int32_t ret = 0;
3185 errno = self->get_assoc_flags(self, &ret);
3186 return ret;
3187 }
Db_get_byteswapped(struct Db * self)3188 SWIGINTERN int_bool Db_get_byteswapped(struct Db *self){
3189 int ret = 0;
3190 errno = self->get_byteswapped(self, &ret);
3191 return ret;
3192 }
Db_get_cachesize(struct Db * self)3193 SWIGINTERN jlong Db_get_cachesize(struct Db *self){
3194 u_int32_t gbytes = 0, bytes = 0;
3195 errno = self->get_cachesize(self, &gbytes, &bytes, NULL);
3196 return (jlong)gbytes * GIGABYTE + bytes;
3197 }
Db_get_cachesize_ncache(struct Db * self)3198 SWIGINTERN u_int32_t Db_get_cachesize_ncache(struct Db *self){
3199 int ret = 0;
3200 errno = self->get_cachesize(self, NULL, NULL, &ret);
3201 return ret;
3202 }
Db_get_create_dir(struct Db * self)3203 SWIGINTERN char const *Db_get_create_dir(struct Db *self){
3204 const char *ret;
3205 errno = self->get_create_dir(self, &ret);
3206 return ret;
3207 }
Db_get_filename(struct Db * self)3208 SWIGINTERN char const *Db_get_filename(struct Db *self){
3209 const char *ret = NULL;
3210 errno = self->get_dbname(self, &ret, NULL);
3211 return ret;
3212 }
Db_get_dbname(struct Db * self)3213 SWIGINTERN char const *Db_get_dbname(struct Db *self){
3214 const char *ret = NULL;
3215 errno = self->get_dbname(self, NULL, &ret);
3216 return ret;
3217 }
Db_get_encrypt_flags(struct Db * self)3218 SWIGINTERN u_int32_t Db_get_encrypt_flags(struct Db *self){
3219 u_int32_t ret = 0;
3220 CRYPTO_ONLY(errno = self->get_encrypt_flags(self, &ret))
3221 return ret;
3222 }
Db_get_flags(struct Db * self)3223 SWIGINTERN u_int32_t Db_get_flags(struct Db *self){
3224 u_int32_t ret = 0;
3225 errno = self->get_flags(self, &ret);
3226 return ret;
3227 }
Db_get_lk_exclusive(struct Db * self)3228 SWIGINTERN int Db_get_lk_exclusive(struct Db *self){
3229 int onoff = 0, nowait = 0;
3230 errno = self->get_lk_exclusive(self, &onoff, &nowait);
3231 return onoff ? nowait + 1 : 0;
3232 }
Db_get_lorder(struct Db * self)3233 SWIGINTERN int Db_get_lorder(struct Db *self){
3234 int ret = 0;
3235 errno = self->get_lorder(self, &ret);
3236 return ret;
3237 }
Db_get_mpf(struct Db * self)3238 SWIGINTERN DB_MPOOLFILE *Db_get_mpf(struct Db *self){
3239 errno = 0;
3240 return self->get_mpf(self);
3241 }
Db_get_open_flags(struct Db * self)3242 SWIGINTERN u_int32_t Db_get_open_flags(struct Db *self){
3243 u_int32_t ret = 0;
3244 errno = self->get_open_flags(self, &ret);
3245 return ret;
3246 }
Db_get_pagesize(struct Db * self)3247 SWIGINTERN u_int32_t Db_get_pagesize(struct Db *self){
3248 u_int32_t ret = 0;
3249 errno = self->get_pagesize(self, &ret);
3250 return ret;
3251 }
Db_get_bt_minkey(struct Db * self)3252 SWIGINTERN u_int32_t Db_get_bt_minkey(struct Db *self){
3253 u_int32_t ret = 0;
3254 errno = self->get_bt_minkey(self, &ret);
3255 return ret;
3256 }
Db_get_heapsize(struct Db * self)3257 SWIGINTERN jlong Db_get_heapsize(struct Db *self){
3258 u_int32_t gbytes = 0, bytes = 0;
3259 errno = self->get_heapsize(self, &gbytes, &bytes);
3260 return (jlong)gbytes * GIGABYTE + bytes;
3261 }
Db_get_heap_regionsize(struct Db * self)3262 SWIGINTERN u_int32_t Db_get_heap_regionsize(struct Db *self){
3263 u_int32_t ret = 0;
3264 errno = self->get_heap_regionsize(self, &ret);
3265 return ret;
3266 }
Db_get_h_ffactor(struct Db * self)3267 SWIGINTERN u_int32_t Db_get_h_ffactor(struct Db *self){
3268 u_int32_t ret = 0;
3269 errno = self->get_h_ffactor(self, &ret);
3270 return ret;
3271 }
Db_get_h_nelem(struct Db * self)3272 SWIGINTERN u_int32_t Db_get_h_nelem(struct Db *self){
3273 u_int32_t ret = 0;
3274 errno = self->get_h_nelem(self, &ret);
3275 return ret;
3276 }
Db_get_re_delim(struct Db * self)3277 SWIGINTERN int Db_get_re_delim(struct Db *self){
3278 int ret = 0;
3279 errno = self->get_re_delim(self, &ret);
3280 return ret;
3281 }
Db_get_priority(struct Db * self)3282 SWIGINTERN DB_CACHE_PRIORITY Db_get_priority(struct Db *self){
3283 DB_CACHE_PRIORITY ret;
3284 errno = self->get_priority(self, &ret);
3285 return ret;
3286 }
Db_get_partition_dirs(struct Db * self)3287 SWIGINTERN char const **Db_get_partition_dirs(struct Db *self){
3288 const char **ret;
3289 errno = self->get_partition_dirs(self, &ret);
3290 return ret;
3291 }
Db_get_partition_keys(struct Db * self)3292 SWIGINTERN DBT *Db_get_partition_keys(struct Db *self){
3293 DBT *ret = NULL;
3294 errno = self->get_partition_keys(self, NULL, &ret);
3295 return ret;
3296 }
Db_get_partition_parts(struct Db * self)3297 SWIGINTERN int Db_get_partition_parts(struct Db *self){
3298 u_int32_t ret = 0;
3299 errno = self->get_partition_keys(self, &ret, NULL);
3300 /* If not partitioned by range, check by callback. */
3301 if (ret == 0)
3302 errno = self->get_partition_callback(self, &ret, NULL);
3303 return ret;
3304 }
Db_get_re_len(struct Db * self)3305 SWIGINTERN u_int32_t Db_get_re_len(struct Db *self){
3306 u_int32_t ret = 0;
3307 errno = self->get_re_len(self, &ret);
3308 return ret;
3309 }
Db_get_re_pad(struct Db * self)3310 SWIGINTERN int Db_get_re_pad(struct Db *self){
3311 int ret = 0;
3312 errno = self->get_re_pad(self, &ret);
3313 return ret;
3314 }
Db_get_re_source(struct Db * self)3315 SWIGINTERN char const *Db_get_re_source(struct Db *self){
3316 const char *ret = NULL;
3317 errno = self->get_re_source(self, &ret);
3318 return ret;
3319 }
Db_get_q_extentsize(struct Db * self)3320 SWIGINTERN u_int32_t Db_get_q_extentsize(struct Db *self){
3321 u_int32_t ret = 0;
3322 errno = self->get_q_extentsize(self, &ret);
3323 return ret;
3324 }
Db_get_multiple(struct Db * self)3325 SWIGINTERN int_bool Db_get_multiple(struct Db *self){
3326 return self->get_multiple(self);
3327 }
Db_get_transactional(struct Db * self)3328 SWIGINTERN int_bool Db_get_transactional(struct Db *self){
3329 return self->get_transactional(self);
3330 }
Db_get_type(struct Db * self)3331 SWIGINTERN DBTYPE Db_get_type(struct Db *self){
3332 DBTYPE type = (DBTYPE)0;
3333 errno = self->get_type(self, &type);
3334 return type;
3335 }
Db_join(struct Db * self,DBC ** curslist,u_int32_t flags)3336 SWIGINTERN DBC *Db_join(struct Db *self,DBC **curslist,u_int32_t flags){
3337 DBC *dbcp = NULL;
3338 errno = self->join(self, curslist, &dbcp, flags);
3339 return dbcp;
3340 }
Db_key_range(struct Db * self,DB_TXN * txnid,DBT * key,DB_KEY_RANGE * key_range,u_int32_t flags)3341 SWIGINTERN db_ret_t Db_key_range(struct Db *self,DB_TXN *txnid,DBT *key,DB_KEY_RANGE *key_range,u_int32_t flags){
3342 return self->key_range(self, txnid, key, key_range, flags);
3343 }
Db_open(struct Db * self,DB_TXN * txnid,char const * file,char const * database,DBTYPE type,u_int32_t flags,int mode)3344 SWIGINTERN db_ret_t Db_open(struct Db *self,DB_TXN *txnid,char const *file,char const *database,DBTYPE type,u_int32_t flags,int mode){
3345 return self->open(self, txnid, file, database,
3346 type, flags, mode);
3347 }
Db_pget(struct Db * self,DB_TXN * txnid,DBT * key,DBT * pkey,DBT * data,u_int32_t flags)3348 SWIGINTERN int Db_pget(struct Db *self,DB_TXN *txnid,DBT *key,DBT *pkey,DBT *data,u_int32_t flags){
3349 return self->pget(self, txnid, key, pkey, data, flags);
3350 }
Db_put(struct Db * self,DB_TXN * txnid,DBT * key,DBT * db_put_data,u_int32_t flags)3351 SWIGINTERN int Db_put(struct Db *self,DB_TXN *txnid,DBT *key,DBT *db_put_data,u_int32_t flags){
3352 return self->put(self, txnid, key, db_put_data, flags);
3353 }
Db_remove(struct Db * self,char const * file,char const * database,u_int32_t flags)3354 SWIGINTERN db_ret_t Db_remove(struct Db *self,char const *file,char const *database,u_int32_t flags){
3355 return self->remove(self, file, database, flags);
3356 }
Db_rename(struct Db * self,char const * file,char const * database,char const * newname,u_int32_t flags)3357 SWIGINTERN db_ret_t Db_rename(struct Db *self,char const *file,char const *database,char const *newname,u_int32_t flags){
3358 return self->rename(self, file, database, newname, flags);
3359 }
Db_set_append_recno(struct Db * self,int (* db_append_recno_fcn)(DB *,DBT *,db_recno_t))3360 SWIGINTERN db_ret_t Db_set_append_recno(struct Db *self,int (*db_append_recno_fcn)(DB *,DBT *,db_recno_t)){
3361 return self->set_append_recno(self, db_append_recno_fcn);
3362 }
Db_set_bt_compare(struct Db * self,int (* bt_compare_fcn)(DB *,DBT const *,DBT const *))3363 SWIGINTERN db_ret_t Db_set_bt_compare(struct Db *self,int (*bt_compare_fcn)(DB *,DBT const *,DBT const *)){
3364 return self->set_bt_compare(self, bt_compare_fcn);
3365 }
Db_set_bt_minkey(struct Db * self,u_int32_t bt_minkey)3366 SWIGINTERN db_ret_t Db_set_bt_minkey(struct Db *self,u_int32_t bt_minkey){
3367 return self->set_bt_minkey(self, bt_minkey);
3368 }
Db_set_bt_compress(struct Db * self,int (* bt_compress_fcn)(DB *,DBT const *,DBT const *,DBT const *,DBT const *,DBT *),int (* bt_decompress_fcn)(DB *,DBT const *,DBT const *,DBT *,DBT *,DBT *))3369 SWIGINTERN db_ret_t Db_set_bt_compress(struct Db *self,int (*bt_compress_fcn)(DB *,DBT const *,DBT const *,DBT const *,DBT const *,DBT *),int (*bt_decompress_fcn)(DB *,DBT const *,DBT const *,DBT *,DBT *,DBT *)){
3370 return self->set_bt_compress(
3371 self, bt_compress_fcn, bt_decompress_fcn);
3372 }
Db_set_bt_prefix(struct Db * self,size_t (* bt_prefix_fcn)(DB *,DBT const *,DBT const *))3373 SWIGINTERN db_ret_t Db_set_bt_prefix(struct Db *self,size_t (*bt_prefix_fcn)(DB *,DBT const *,DBT const *)){
3374 return self->set_bt_prefix(self, bt_prefix_fcn);
3375 }
Db_set_cachesize(struct Db * self,jlong bytes,int ncache)3376 SWIGINTERN db_ret_t Db_set_cachesize(struct Db *self,jlong bytes,int ncache){
3377 return self->set_cachesize(self,
3378 (u_int32_t)(bytes / GIGABYTE),
3379 (u_int32_t)(bytes % GIGABYTE), ncache);
3380 }
Db_set_create_dir(struct Db * self,char const * dir)3381 SWIGINTERN db_ret_t Db_set_create_dir(struct Db *self,char const *dir){
3382 return self->set_create_dir(self, dir);
3383 }
Db_set_dup_compare(struct Db * self,int (* dup_compare_fcn)(DB *,DBT const *,DBT const *))3384 SWIGINTERN db_ret_t Db_set_dup_compare(struct Db *self,int (*dup_compare_fcn)(DB *,DBT const *,DBT const *)){
3385 return self->set_dup_compare(self, dup_compare_fcn);
3386 }
Db_set_encrypt(struct Db * self,char const * passwd,u_int32_t flags)3387 SWIGINTERN db_ret_t Db_set_encrypt(struct Db *self,char const *passwd,u_int32_t flags){
3388 return self->set_encrypt(self, passwd, flags);
3389 }
Db_set_feedback(struct Db * self,void (* db_feedback_fcn)(DB *,int,int))3390 SWIGINTERN db_ret_t Db_set_feedback(struct Db *self,void (*db_feedback_fcn)(DB *,int,int)){
3391 return self->set_feedback(self, db_feedback_fcn);
3392 }
Db_set_flags(struct Db * self,u_int32_t flags)3393 SWIGINTERN db_ret_t Db_set_flags(struct Db *self,u_int32_t flags){
3394 return self->set_flags(self, flags);
3395 }
Db_set_heapsize(struct Db * self,jlong bytes)3396 SWIGINTERN db_ret_t Db_set_heapsize(struct Db *self,jlong bytes){
3397 return self->set_heapsize(self,
3398 (u_int32_t)(bytes / GIGABYTE),
3399 (u_int32_t)(bytes % GIGABYTE), 0);
3400 }
Db_set_heap_regionsize(struct Db * self,u_int32_t npages)3401 SWIGINTERN db_ret_t Db_set_heap_regionsize(struct Db *self,u_int32_t npages){
3402 return self->set_heap_regionsize(self, npages);
3403 }
Db_set_h_compare(struct Db * self,int (* h_compare_fcn)(DB *,DBT const *,DBT const *))3404 SWIGINTERN db_ret_t Db_set_h_compare(struct Db *self,int (*h_compare_fcn)(DB *,DBT const *,DBT const *)){
3405 return self->set_h_compare(self, h_compare_fcn);
3406 }
Db_set_h_ffactor(struct Db * self,u_int32_t h_ffactor)3407 SWIGINTERN db_ret_t Db_set_h_ffactor(struct Db *self,u_int32_t h_ffactor){
3408 return self->set_h_ffactor(self, h_ffactor);
3409 }
Db_set_h_hash(struct Db * self,u_int32_t (* h_hash_fcn)(DB *,void const *,u_int32_t))3410 SWIGINTERN db_ret_t Db_set_h_hash(struct Db *self,u_int32_t (*h_hash_fcn)(DB *,void const *,u_int32_t)){
3411 return self->set_h_hash(self, h_hash_fcn);
3412 }
Db_set_h_nelem(struct Db * self,u_int32_t h_nelem)3413 SWIGINTERN db_ret_t Db_set_h_nelem(struct Db *self,u_int32_t h_nelem){
3414 return self->set_h_nelem(self, h_nelem);
3415 }
Db_set_lk_exclusive(struct Db * self,int nowait)3416 SWIGINTERN db_ret_t Db_set_lk_exclusive(struct Db *self,int nowait){
3417 return self->set_lk_exclusive(self, nowait);
3418 }
Db_set_lorder(struct Db * self,int lorder)3419 SWIGINTERN db_ret_t Db_set_lorder(struct Db *self,int lorder){
3420 return self->set_lorder(self, lorder);
3421 }
Db_set_pagesize(struct Db * self,u_int32_t pagesize)3422 SWIGINTERN db_ret_t Db_set_pagesize(struct Db *self,u_int32_t pagesize){
3423 return self->set_pagesize(self, pagesize);
3424 }
Db_set_partition(struct Db * self,u_int32_t parts,DBT * keys,u_int32_t (* db_partition_fcn)(DB *,DBT *))3425 SWIGINTERN db_ret_t Db_set_partition(struct Db *self,u_int32_t parts,DBT *keys,u_int32_t (*db_partition_fcn)(DB *,DBT *)){
3426 return self->set_partition(self, parts, keys, db_partition_fcn);
3427 }
Db_set_partition_dirs(struct Db * self,char const ** dirp)3428 SWIGINTERN db_ret_t Db_set_partition_dirs(struct Db *self,char const **dirp){
3429 return self->set_partition_dirs(self, dirp);
3430 }
Db_set_priority(struct Db * self,DB_CACHE_PRIORITY priority)3431 SWIGINTERN db_ret_t Db_set_priority(struct Db *self,DB_CACHE_PRIORITY priority){
3432 return self->set_priority(self, priority);
3433 }
Db_set_re_delim(struct Db * self,int re_delim)3434 SWIGINTERN db_ret_t Db_set_re_delim(struct Db *self,int re_delim){
3435 return self->set_re_delim(self, re_delim);
3436 }
Db_set_re_len(struct Db * self,u_int32_t re_len)3437 SWIGINTERN db_ret_t Db_set_re_len(struct Db *self,u_int32_t re_len){
3438 return self->set_re_len(self, re_len);
3439 }
Db_set_re_pad(struct Db * self,int re_pad)3440 SWIGINTERN db_ret_t Db_set_re_pad(struct Db *self,int re_pad){
3441 return self->set_re_pad(self, re_pad);
3442 }
Db_set_re_source(struct Db * self,char * source)3443 SWIGINTERN db_ret_t Db_set_re_source(struct Db *self,char *source){
3444 return self->set_re_source(self, source);
3445 }
Db_set_q_extentsize(struct Db * self,u_int32_t extentsize)3446 SWIGINTERN db_ret_t Db_set_q_extentsize(struct Db *self,u_int32_t extentsize){
3447 return self->set_q_extentsize(self, extentsize);
3448 }
Db_sort_multiple(struct Db * self,DBT * key,DBT * data)3449 SWIGINTERN db_ret_t Db_sort_multiple(struct Db *self,DBT *key,DBT *data){
3450 return self->sort_multiple(self, key, data, 0);
3451 }
Db_stat(struct Db * self,DB_TXN * txnid,u_int32_t flags)3452 SWIGINTERN void *Db_stat(struct Db *self,DB_TXN *txnid,u_int32_t flags){
3453 void *statp = NULL;
3454 errno = self->stat(self, txnid, &statp, flags);
3455 return statp;
3456 }
Db_sync(struct Db * self,u_int32_t flags)3457 SWIGINTERN db_ret_t Db_sync(struct Db *self,u_int32_t flags){
3458 return self->sync(self, flags);
3459 }
Db_truncate(struct Db * self,DB_TXN * txnid,u_int32_t flags)3460 SWIGINTERN int Db_truncate(struct Db *self,DB_TXN *txnid,u_int32_t flags){
3461 u_int32_t count = 0;
3462 errno = self->truncate(self, txnid, &count, flags);
3463 return count;
3464 }
Db_upgrade(struct Db * self,char const * file,u_int32_t flags)3465 SWIGINTERN db_ret_t Db_upgrade(struct Db *self,char const *file,u_int32_t flags){
3466 return self->upgrade(self, file, flags);
3467 }
Db_verify(struct Db * self,char const * file,char const * database,struct __db_out_stream outfile,u_int32_t flags)3468 SWIGINTERN int_bool Db_verify(struct Db *self,char const *file,char const *database,struct __db_out_stream outfile,u_int32_t flags){
3469 /*
3470 * We can't easily #include "dbinc/db_ext.h" because of name
3471 * clashes, so we declare this explicitly.
3472 */
3473 extern int __db_verify_internal __P((DB *, const char *, const
3474 char *, void *, int (*)(void *, const void *), u_int32_t));
3475 errno = __db_verify_internal(self, file, database,
3476 outfile.handle, outfile.callback, flags);
3477 if (errno == DB_VERIFY_BAD) {
3478 errno = 0;
3479 return 0;
3480 } else
3481 return 1;
3482 }
Dbc_close(struct Dbc * self)3483 SWIGINTERN db_ret_t Dbc_close(struct Dbc *self){
3484 return self->close(self);
3485 }
Dbc_cmp(struct Dbc * self,DBC * odbc,u_int32_t flags)3486 SWIGINTERN int Dbc_cmp(struct Dbc *self,DBC *odbc,u_int32_t flags){
3487 int result = 0;
3488 errno = self->cmp(self, odbc, &result, flags);
3489 return result;
3490 }
Dbc_count(struct Dbc * self,u_int32_t flags)3491 SWIGINTERN db_recno_t Dbc_count(struct Dbc *self,u_int32_t flags){
3492 db_recno_t count = 0;
3493 errno = self->count(self, &count, flags);
3494 return count;
3495 }
Dbc_del(struct Dbc * self,u_int32_t flags)3496 SWIGINTERN int Dbc_del(struct Dbc *self,u_int32_t flags){
3497 return self->del(self, flags);
3498 }
Dbc_dup(struct Dbc * self,u_int32_t flags)3499 SWIGINTERN DBC *Dbc_dup(struct Dbc *self,u_int32_t flags){
3500 DBC *newcurs = NULL;
3501 errno = self->dup(self, &newcurs, flags);
3502 return newcurs;
3503 }
Dbc_get(struct Dbc * self,DBT * key,DBT * data,u_int32_t flags)3504 SWIGINTERN int Dbc_get(struct Dbc *self,DBT *key,DBT *data,u_int32_t flags){
3505 return self->get(self, key, data, flags);
3506 }
Dbc_get_priority(struct Dbc * self)3507 SWIGINTERN DB_CACHE_PRIORITY Dbc_get_priority(struct Dbc *self){
3508 DB_CACHE_PRIORITY ret;
3509 errno = self->get_priority(self, &ret);
3510 return ret;
3511 }
Dbc_pget(struct Dbc * self,DBT * key,DBT * pkey,DBT * data,u_int32_t flags)3512 SWIGINTERN int Dbc_pget(struct Dbc *self,DBT *key,DBT *pkey,DBT *data,u_int32_t flags){
3513 return self->pget(self, key, pkey, data, flags);
3514 }
Dbc_put(struct Dbc * self,DBT * key,DBT * db_put_data,u_int32_t flags)3515 SWIGINTERN int Dbc_put(struct Dbc *self,DBT *key,DBT *db_put_data,u_int32_t flags){
3516 return self->put(self, key, db_put_data, flags);
3517 }
Dbc_set_priority(struct Dbc * self,DB_CACHE_PRIORITY priority)3518 SWIGINTERN db_ret_t Dbc_set_priority(struct Dbc *self,DB_CACHE_PRIORITY priority){
3519 return self->set_priority(self, priority);
3520 }
new_DbEnv(u_int32_t flags)3521 SWIGINTERN struct DbEnv *new_DbEnv(u_int32_t flags){
3522 DB_ENV *self = NULL;
3523 errno = db_env_create(&self, flags);
3524 if (errno == 0)
3525 self->env->dbt_usercopy = __dbj_dbt_memcopy;
3526 return self;
3527 }
DbEnv_close(struct DbEnv * self,u_int32_t flags)3528 SWIGINTERN db_ret_t DbEnv_close(struct DbEnv *self,u_int32_t flags){
3529 return self->close(self, flags);
3530 }
DbEnv_dbremove(struct DbEnv * self,DB_TXN * txnid,char const * file,char const * database,u_int32_t flags)3531 SWIGINTERN db_ret_t DbEnv_dbremove(struct DbEnv *self,DB_TXN *txnid,char const *file,char const *database,u_int32_t flags){
3532 return self->dbremove(self, txnid, file, database, flags);
3533 }
DbEnv_dbrename(struct DbEnv * self,DB_TXN * txnid,char const * file,char const * database,char const * newname,u_int32_t flags)3534 SWIGINTERN db_ret_t DbEnv_dbrename(struct DbEnv *self,DB_TXN *txnid,char const *file,char const *database,char const *newname,u_int32_t flags){
3535 return self->dbrename(self,
3536 txnid, file, database, newname, flags);
3537 }
DbEnv_err(struct DbEnv * self,int ret,char const * message)3538 SWIGINTERN void DbEnv_err(struct DbEnv *self,int ret,char const *message){
3539 self->err(self, ret, message);
3540 }
DbEnv_errx(struct DbEnv * self,char const * message)3541 SWIGINTERN void DbEnv_errx(struct DbEnv *self,char const *message){
3542 self->errx(self, message);
3543 }
DbEnv_cdsgroup_begin(struct DbEnv * self)3544 SWIGINTERN DB_TXN *DbEnv_cdsgroup_begin(struct DbEnv *self){
3545 DB_TXN *tid = NULL;
3546 errno = self->cdsgroup_begin(self, &tid);
3547 return tid;
3548 }
DbEnv_fileid_reset(struct DbEnv * self,char const * file,u_int32_t flags)3549 SWIGINTERN db_ret_t DbEnv_fileid_reset(struct DbEnv *self,char const *file,u_int32_t flags){
3550 return self->fileid_reset(self, file, flags);
3551 }
DbEnv_get_data_dirs(struct DbEnv * self)3552 SWIGINTERN char const **DbEnv_get_data_dirs(struct DbEnv *self){
3553 const char **ret;
3554 errno = self->get_data_dirs(self, &ret);
3555 return ret;
3556 }
DbEnv_get_encrypt_flags(struct DbEnv * self)3557 SWIGINTERN u_int32_t DbEnv_get_encrypt_flags(struct DbEnv *self){
3558 u_int32_t ret = 0;
3559 CRYPTO_ONLY(errno = self->get_encrypt_flags(self, &ret))
3560 return ret;
3561 }
DbEnv_get_flags(struct DbEnv * self)3562 SWIGINTERN u_int32_t DbEnv_get_flags(struct DbEnv *self){
3563 u_int32_t ret;
3564 errno = self->get_flags(self, &ret);
3565 return ret;
3566 }
DbEnv_get_home(struct DbEnv * self)3567 SWIGINTERN char const *DbEnv_get_home(struct DbEnv *self){
3568 const char *ret;
3569 errno = self->get_home(self, &ret);
3570 return ret;
3571 }
DbEnv_get_intermediate_dir_mode(struct DbEnv * self)3572 SWIGINTERN char const *DbEnv_get_intermediate_dir_mode(struct DbEnv *self){
3573 const char *ret;
3574 errno = self->get_intermediate_dir_mode(self, &ret);
3575 return ret;
3576 }
DbEnv_get_open_flags(struct DbEnv * self)3577 SWIGINTERN u_int32_t DbEnv_get_open_flags(struct DbEnv *self){
3578 u_int32_t ret;
3579 errno = self->get_open_flags(self, &ret);
3580 return ret;
3581 }
DbEnv_get_metadata_dir(struct DbEnv * self)3582 SWIGINTERN char const *DbEnv_get_metadata_dir(struct DbEnv *self){
3583 const char *ret;
3584 errno = self->get_metadata_dir(self, &ret);
3585 return ret;
3586
3587 }
DbEnv_get_shm_key(struct DbEnv * self)3588 SWIGINTERN long DbEnv_get_shm_key(struct DbEnv *self){
3589 long ret;
3590 errno = self->get_shm_key(self, &ret);
3591 return ret;
3592 }
DbEnv_get_tmp_dir(struct DbEnv * self)3593 SWIGINTERN char const *DbEnv_get_tmp_dir(struct DbEnv *self){
3594 const char *ret;
3595 errno = self->get_tmp_dir(self, &ret);
3596 return ret;
3597 }
DbEnv_get_verbose(struct DbEnv * self,u_int32_t which)3598 SWIGINTERN int_bool DbEnv_get_verbose(struct DbEnv *self,u_int32_t which){
3599 int ret;
3600 errno = self->get_verbose(self, which, &ret);
3601 return ret;
3602 }
DbEnv_is_bigendian(struct DbEnv * self)3603 SWIGINTERN int_bool DbEnv_is_bigendian(struct DbEnv *self){
3604 return self->is_bigendian();
3605 }
DbEnv_lsn_reset(struct DbEnv * self,char const * file,u_int32_t flags)3606 SWIGINTERN db_ret_t DbEnv_lsn_reset(struct DbEnv *self,char const *file,u_int32_t flags){
3607 return self->lsn_reset(self, file, flags);
3608 }
DbEnv_open(struct DbEnv * self,char const * db_home,u_int32_t flags,int mode)3609 SWIGINTERN db_ret_t DbEnv_open(struct DbEnv *self,char const *db_home,u_int32_t flags,int mode){
3610 return self->open(self, db_home, flags, mode);
3611 }
DbEnv_remove(struct DbEnv * self,char const * db_home,u_int32_t flags)3612 SWIGINTERN db_ret_t DbEnv_remove(struct DbEnv *self,char const *db_home,u_int32_t flags){
3613 return self->remove(self, db_home, flags);
3614 }
DbEnv_set_cachesize(struct DbEnv * self,jlong bytes,int ncache)3615 SWIGINTERN db_ret_t DbEnv_set_cachesize(struct DbEnv *self,jlong bytes,int ncache){
3616 return self->set_cachesize(self,
3617 (u_int32_t)(bytes / GIGABYTE),
3618 (u_int32_t)(bytes % GIGABYTE), ncache);
3619 }
DbEnv_set_cache_max(struct DbEnv * self,jlong bytes)3620 SWIGINTERN db_ret_t DbEnv_set_cache_max(struct DbEnv *self,jlong bytes){
3621 return self->set_cache_max(self,
3622 (u_int32_t)(bytes / GIGABYTE),
3623 (u_int32_t)(bytes % GIGABYTE));
3624 }
DbEnv_set_create_dir(struct DbEnv * self,char const * dir)3625 SWIGINTERN db_ret_t DbEnv_set_create_dir(struct DbEnv *self,char const *dir){
3626 return self->set_create_dir(self, dir);
3627 }
DbEnv_add_data_dir(struct DbEnv * self,char const * dir)3628 SWIGINTERN db_ret_t DbEnv_add_data_dir(struct DbEnv *self,char const *dir){
3629 return self->add_data_dir(self, dir);
3630 }
DbEnv_set_intermediate_dir_mode(struct DbEnv * self,char const * mode)3631 SWIGINTERN db_ret_t DbEnv_set_intermediate_dir_mode(struct DbEnv *self,char const *mode){
3632 return self->set_intermediate_dir_mode(self, mode);
3633 }
DbEnv_set_encrypt(struct DbEnv * self,char const * passwd,u_int32_t flags)3634 SWIGINTERN db_ret_t DbEnv_set_encrypt(struct DbEnv *self,char const *passwd,u_int32_t flags){
3635 return self->set_encrypt(self, passwd, flags);
3636 }
DbEnv_set_errcall(struct DbEnv * self,void (* db_errcall_fcn)(DB_ENV const *,char const *,char const *))3637 SWIGINTERN void DbEnv_set_errcall(struct DbEnv *self,void (*db_errcall_fcn)(DB_ENV const *,char const *,char const *)){
3638 self->set_errcall(self, db_errcall_fcn);
3639 }
DbEnv_set_flags(struct DbEnv * self,u_int32_t flags,int_bool onoff)3640 SWIGINTERN db_ret_t DbEnv_set_flags(struct DbEnv *self,u_int32_t flags,int_bool onoff){
3641 return self->set_flags(self, flags, onoff);
3642 }
DbEnv_set_feedback(struct DbEnv * self,void (* env_feedback_fcn)(DB_ENV *,int,int))3643 SWIGINTERN db_ret_t DbEnv_set_feedback(struct DbEnv *self,void (*env_feedback_fcn)(DB_ENV *,int,int)){
3644 return self->set_feedback(self, env_feedback_fcn);
3645 }
DbEnv_set_metadata_dir(struct DbEnv * self,char const * dir)3646 SWIGINTERN db_ret_t DbEnv_set_metadata_dir(struct DbEnv *self,char const *dir){
3647 return self->set_metadata_dir(self, dir);
3648 }
DbEnv_set_mp_max_openfd(struct DbEnv * self,int maxopenfd)3649 SWIGINTERN db_ret_t DbEnv_set_mp_max_openfd(struct DbEnv *self,int maxopenfd){
3650 return self->set_mp_max_openfd(self, maxopenfd);
3651 }
DbEnv_set_mp_max_write(struct DbEnv * self,int maxwrite,db_timeout_t maxwrite_sleep)3652 SWIGINTERN db_ret_t DbEnv_set_mp_max_write(struct DbEnv *self,int maxwrite,db_timeout_t maxwrite_sleep){
3653 return self->set_mp_max_write(self, maxwrite, maxwrite_sleep);
3654 }
DbEnv_set_mp_mmapsize(struct DbEnv * self,size_t mp_mmapsize)3655 SWIGINTERN db_ret_t DbEnv_set_mp_mmapsize(struct DbEnv *self,size_t mp_mmapsize){
3656 return self->set_mp_mmapsize(self, mp_mmapsize);
3657 }
DbEnv_set_mp_pagesize(struct DbEnv * self,u_int32_t mp_pagesize)3658 SWIGINTERN db_ret_t DbEnv_set_mp_pagesize(struct DbEnv *self,u_int32_t mp_pagesize){
3659 return self->set_mp_pagesize(self, mp_pagesize);
3660 }
DbEnv_set_mp_tablesize(struct DbEnv * self,u_int32_t mp_tablesize)3661 SWIGINTERN db_ret_t DbEnv_set_mp_tablesize(struct DbEnv *self,u_int32_t mp_tablesize){
3662 return self->set_mp_tablesize(self, mp_tablesize);
3663 }
DbEnv_set_msgcall(struct DbEnv * self,void (* db_msgcall_fcn)(DB_ENV const *,char const *))3664 SWIGINTERN void DbEnv_set_msgcall(struct DbEnv *self,void (*db_msgcall_fcn)(DB_ENV const *,char const *)){
3665 self->set_msgcall(self, db_msgcall_fcn);
3666 }
DbEnv_set_paniccall(struct DbEnv * self,void (* db_panic_fcn)(DB_ENV *,int))3667 SWIGINTERN db_ret_t DbEnv_set_paniccall(struct DbEnv *self,void (*db_panic_fcn)(DB_ENV *,int)){
3668 return self->set_paniccall(self, db_panic_fcn);
3669 }
DbEnv_set_shm_key(struct DbEnv * self,long shm_key)3670 SWIGINTERN db_ret_t DbEnv_set_shm_key(struct DbEnv *self,long shm_key){
3671 return self->set_shm_key(self, shm_key);
3672 }
DbEnv_set_timeout(struct DbEnv * self,db_timeout_t timeout,u_int32_t flags)3673 SWIGINTERN db_ret_t DbEnv_set_timeout(struct DbEnv *self,db_timeout_t timeout,u_int32_t flags){
3674 return self->set_timeout(self, timeout, flags);
3675 }
DbEnv_set_tmp_dir(struct DbEnv * self,char const * dir)3676 SWIGINTERN db_ret_t DbEnv_set_tmp_dir(struct DbEnv *self,char const *dir){
3677 return self->set_tmp_dir(self, dir);
3678 }
DbEnv_set_tx_max(struct DbEnv * self,u_int32_t max)3679 SWIGINTERN db_ret_t DbEnv_set_tx_max(struct DbEnv *self,u_int32_t max){
3680 return self->set_tx_max(self, max);
3681 }
DbEnv_set_app_dispatch(struct DbEnv * self,int (* tx_recover)(DB_ENV *,DBT *,DB_LSN *,db_recops))3682 SWIGINTERN db_ret_t DbEnv_set_app_dispatch(struct DbEnv *self,int (*tx_recover)(DB_ENV *,DBT *,DB_LSN *,db_recops)){
3683 return self->set_app_dispatch(self, tx_recover);
3684 }
DbEnv_set_event_notify(struct DbEnv * self,void (* event_notify)(DB_ENV *,u_int32_t,void *))3685 SWIGINTERN db_ret_t DbEnv_set_event_notify(struct DbEnv *self,void (*event_notify)(DB_ENV *,u_int32_t,void *)){
3686 return self->set_event_notify(self, event_notify);
3687 }
DbEnv_set_tx_timestamp(struct DbEnv * self,time_t * timestamp)3688 SWIGINTERN db_ret_t DbEnv_set_tx_timestamp(struct DbEnv *self,time_t *timestamp){
3689 return self->set_tx_timestamp(self, timestamp);
3690 }
DbEnv_set_verbose(struct DbEnv * self,u_int32_t which,int_bool onoff)3691 SWIGINTERN db_ret_t DbEnv_set_verbose(struct DbEnv *self,u_int32_t which,int_bool onoff){
3692 return self->set_verbose(self, which, onoff);
3693 }
DbEnv_get_lk_conflicts(struct DbEnv * self)3694 SWIGINTERN struct __db_lk_conflicts DbEnv_get_lk_conflicts(struct DbEnv *self){
3695 struct __db_lk_conflicts ret;
3696 errno = self->get_lk_conflicts(self,
3697 (const u_int8_t **)&ret.lk_conflicts, &ret.lk_modes);
3698 return ret;
3699 }
DbEnv_get_lk_detect(struct DbEnv * self)3700 SWIGINTERN u_int32_t DbEnv_get_lk_detect(struct DbEnv *self){
3701 u_int32_t ret;
3702 errno = self->get_lk_detect(self, &ret);
3703 return ret;
3704 }
DbEnv_get_lk_max_locks(struct DbEnv * self)3705 SWIGINTERN u_int32_t DbEnv_get_lk_max_locks(struct DbEnv *self){
3706 u_int32_t ret;
3707 errno = self->get_lk_max_locks(self, &ret);
3708 return ret;
3709 }
DbEnv_get_lk_max_lockers(struct DbEnv * self)3710 SWIGINTERN u_int32_t DbEnv_get_lk_max_lockers(struct DbEnv *self){
3711 u_int32_t ret;
3712 errno = self->get_lk_max_lockers(self, &ret);
3713 return ret;
3714 }
DbEnv_get_lk_max_objects(struct DbEnv * self)3715 SWIGINTERN u_int32_t DbEnv_get_lk_max_objects(struct DbEnv *self){
3716 u_int32_t ret;
3717 errno = self->get_lk_max_objects(self, &ret);
3718 return ret;
3719 }
DbEnv_get_lk_partitions(struct DbEnv * self)3720 SWIGINTERN u_int32_t DbEnv_get_lk_partitions(struct DbEnv *self){
3721 u_int32_t ret;
3722 errno = self->get_lk_partitions(self, &ret);
3723 return ret;
3724 }
DbEnv_get_lk_priority(struct DbEnv * self,u_int32_t lockerid)3725 SWIGINTERN u_int32_t DbEnv_get_lk_priority(struct DbEnv *self,u_int32_t lockerid){
3726 u_int32_t ret;
3727 errno = self->get_lk_priority(self, lockerid, &ret);
3728 return ret;
3729 }
DbEnv_get_lk_tablesize(struct DbEnv * self)3730 SWIGINTERN u_int32_t DbEnv_get_lk_tablesize(struct DbEnv *self){
3731 u_int32_t ret;
3732 errno = self->get_lk_tablesize(self, &ret);
3733 return ret;
3734 }
DbEnv_get_memory_init(struct DbEnv * self,u_int32_t config_type)3735 SWIGINTERN u_int32_t DbEnv_get_memory_init(struct DbEnv *self,u_int32_t config_type){
3736 u_int32_t ret;
3737 errno = self->get_memory_init(self, (DB_MEM_CONFIG)config_type, &ret);
3738 return ret;
3739 }
DbEnv_get_memory_max(struct DbEnv * self)3740 SWIGINTERN jlong DbEnv_get_memory_max(struct DbEnv *self){
3741 u_int32_t gbytes, bytes;
3742 errno = self->get_memory_max(self, &gbytes, &bytes);
3743 return (jlong)gbytes * GIGABYTE + bytes;
3744 }
DbEnv_lock_detect(struct DbEnv * self,u_int32_t flags,u_int32_t atype)3745 SWIGINTERN int DbEnv_lock_detect(struct DbEnv *self,u_int32_t flags,u_int32_t atype){
3746 int aborted;
3747 errno = self->lock_detect(self, flags, atype, &aborted);
3748 return aborted;
3749 }
DbEnv_lock_get(struct DbEnv * self,u_int32_t locker,u_int32_t flags,DBT * object,db_lockmode_t lock_mode)3750 SWIGINTERN DB_LOCK *DbEnv_lock_get(struct DbEnv *self,u_int32_t locker,u_int32_t flags,DBT *object,db_lockmode_t lock_mode){
3751 DB_LOCK *lock = NULL;
3752 if ((errno = __os_malloc(self->env, sizeof (DB_LOCK), &lock)) == 0)
3753 errno = self->lock_get(self, locker, flags, object,
3754 lock_mode, lock);
3755 return lock;
3756 }
DbEnv_lock_id(struct DbEnv * self)3757 SWIGINTERN u_int32_t DbEnv_lock_id(struct DbEnv *self){
3758 u_int32_t id;
3759 errno = self->lock_id(self, &id);
3760 return id;
3761 }
DbEnv_lock_id_free(struct DbEnv * self,u_int32_t id)3762 SWIGINTERN db_ret_t DbEnv_lock_id_free(struct DbEnv *self,u_int32_t id){
3763 return self->lock_id_free(self, id);
3764 }
DbEnv_lock_put(struct DbEnv * self,DB_LOCK * lock)3765 SWIGINTERN db_ret_t DbEnv_lock_put(struct DbEnv *self,DB_LOCK *lock){
3766 return self->lock_put(self, lock);
3767 }
DbEnv_lock_stat(struct DbEnv * self,u_int32_t flags)3768 SWIGINTERN DB_LOCK_STAT *DbEnv_lock_stat(struct DbEnv *self,u_int32_t flags){
3769 DB_LOCK_STAT *statp = NULL;
3770 errno = self->lock_stat(self, &statp, flags);
3771 return statp;
3772 }
DbEnv_set_lk_conflicts(struct DbEnv * self,struct __db_lk_conflicts conflicts)3773 SWIGINTERN db_ret_t DbEnv_set_lk_conflicts(struct DbEnv *self,struct __db_lk_conflicts conflicts){
3774 return self->set_lk_conflicts(self,
3775 conflicts.lk_conflicts, conflicts.lk_modes);
3776 }
DbEnv_set_lk_detect(struct DbEnv * self,u_int32_t detect)3777 SWIGINTERN db_ret_t DbEnv_set_lk_detect(struct DbEnv *self,u_int32_t detect){
3778 return self->set_lk_detect(self, detect);
3779 }
DbEnv_set_lk_max_lockers(struct DbEnv * self,u_int32_t max)3780 SWIGINTERN db_ret_t DbEnv_set_lk_max_lockers(struct DbEnv *self,u_int32_t max){
3781 return self->set_lk_max_lockers(self, max);
3782 }
DbEnv_set_lk_max_locks(struct DbEnv * self,u_int32_t max)3783 SWIGINTERN db_ret_t DbEnv_set_lk_max_locks(struct DbEnv *self,u_int32_t max){
3784 return self->set_lk_max_locks(self, max);
3785 }
DbEnv_set_lk_max_objects(struct DbEnv * self,u_int32_t max)3786 SWIGINTERN db_ret_t DbEnv_set_lk_max_objects(struct DbEnv *self,u_int32_t max){
3787 return self->set_lk_max_objects(self, max);
3788 }
DbEnv_set_lk_partitions(struct DbEnv * self,u_int32_t partitions)3789 SWIGINTERN db_ret_t DbEnv_set_lk_partitions(struct DbEnv *self,u_int32_t partitions){
3790 return self->set_lk_partitions(self, partitions);
3791 }
DbEnv_set_lk_priority(struct DbEnv * self,u_int32_t lockerid,u_int32_t priority)3792 SWIGINTERN db_ret_t DbEnv_set_lk_priority(struct DbEnv *self,u_int32_t lockerid,u_int32_t priority){
3793 return self->set_lk_priority(self, lockerid, priority);
3794 }
DbEnv_set_lk_tablesize(struct DbEnv * self,u_int32_t size)3795 SWIGINTERN db_ret_t DbEnv_set_lk_tablesize(struct DbEnv *self,u_int32_t size){
3796 return self->set_lk_tablesize(self, size);
3797 }
DbEnv_set_memory_init(struct DbEnv * self,u_int32_t config_type,u_int32_t value)3798 SWIGINTERN db_ret_t DbEnv_set_memory_init(struct DbEnv *self,u_int32_t config_type,u_int32_t value){
3799 return self->set_memory_init(self, (DB_MEM_CONFIG)config_type, value);
3800 }
DbEnv_set_memory_max(struct DbEnv * self,jlong bytes)3801 SWIGINTERN db_ret_t DbEnv_set_memory_max(struct DbEnv *self,jlong bytes){
3802 return self->set_memory_max(self,
3803 (u_int32_t)(bytes / GIGABYTE),
3804 (u_int32_t)(bytes % GIGABYTE));
3805 }
DbEnv_get_lg_bsize(struct DbEnv * self)3806 SWIGINTERN u_int32_t DbEnv_get_lg_bsize(struct DbEnv *self){
3807 u_int32_t ret;
3808 errno = self->get_lg_bsize(self, &ret);
3809 return ret;
3810 }
DbEnv_get_lg_dir(struct DbEnv * self)3811 SWIGINTERN char const *DbEnv_get_lg_dir(struct DbEnv *self){
3812 const char *ret;
3813 errno = self->get_lg_dir(self, &ret);
3814 return ret;
3815 }
DbEnv_get_lg_filemode(struct DbEnv * self)3816 SWIGINTERN int DbEnv_get_lg_filemode(struct DbEnv *self){
3817 int ret;
3818 errno = self->get_lg_filemode(self, &ret);
3819 return ret;
3820 }
DbEnv_get_lg_max(struct DbEnv * self)3821 SWIGINTERN u_int32_t DbEnv_get_lg_max(struct DbEnv *self){
3822 u_int32_t ret;
3823 errno = self->get_lg_max(self, &ret);
3824 return ret;
3825 }
DbEnv_get_lg_regionmax(struct DbEnv * self)3826 SWIGINTERN u_int32_t DbEnv_get_lg_regionmax(struct DbEnv *self){
3827 u_int32_t ret;
3828 errno = self->get_lg_regionmax(self, &ret);
3829 return ret;
3830 }
DbEnv_log_archive(struct DbEnv * self,u_int32_t flags)3831 SWIGINTERN char **DbEnv_log_archive(struct DbEnv *self,u_int32_t flags){
3832 char **list = NULL;
3833 errno = self->log_archive(self, &list, flags);
3834 return list;
3835 }
DbEnv_log_compare(DB_LSN const * lsn0,DB_LSN const * lsn1)3836 SWIGINTERN int DbEnv_log_compare(DB_LSN const *lsn0,DB_LSN const *lsn1){
3837 return log_compare(lsn0, lsn1);
3838 }
DbEnv_log_cursor(struct DbEnv * self,u_int32_t flags)3839 SWIGINTERN DB_LOGC *DbEnv_log_cursor(struct DbEnv *self,u_int32_t flags){
3840 DB_LOGC *cursor = NULL;
3841 errno = self->log_cursor(self, &cursor, flags);
3842 return cursor;
3843 }
DbEnv_log_file(struct DbEnv * self,DB_LSN * lsn)3844 SWIGINTERN char *DbEnv_log_file(struct DbEnv *self,DB_LSN *lsn){
3845 char namebuf[DB_MAXPATHLEN];
3846 errno = self->log_file(self, lsn, namebuf, sizeof namebuf);
3847 return (errno == 0) ? strdup(namebuf) : NULL;
3848 }
DbEnv_log_flush(struct DbEnv * self,DB_LSN const * lsn_or_null)3849 SWIGINTERN db_ret_t DbEnv_log_flush(struct DbEnv *self,DB_LSN const *lsn_or_null){
3850 return self->log_flush(self, lsn_or_null);
3851 }
DbEnv_log_get_config(struct DbEnv * self,u_int32_t which)3852 SWIGINTERN int_bool DbEnv_log_get_config(struct DbEnv *self,u_int32_t which){
3853 int ret;
3854 errno = self->log_get_config(self, which, &ret);
3855 return ret;
3856 }
DbEnv_log_put(struct DbEnv * self,DB_LSN * lsn,DBT const * data,u_int32_t flags)3857 SWIGINTERN db_ret_t DbEnv_log_put(struct DbEnv *self,DB_LSN *lsn,DBT const *data,u_int32_t flags){
3858 return self->log_put(self, lsn, data, flags);
3859 }
DbEnv_log_print(struct DbEnv * self,DB_TXN * txn,char const * msg)3860 SWIGINTERN db_ret_t DbEnv_log_print(struct DbEnv *self,DB_TXN *txn,char const *msg){
3861 return self->log_printf(self, txn, "%s", msg);
3862 }
DbEnv_log_set_config(struct DbEnv * self,u_int32_t which,int_bool onoff)3863 SWIGINTERN db_ret_t DbEnv_log_set_config(struct DbEnv *self,u_int32_t which,int_bool onoff){
3864 return self->log_set_config(self, which, onoff);
3865 }
DbEnv_log_stat(struct DbEnv * self,u_int32_t flags)3866 SWIGINTERN DB_LOG_STAT *DbEnv_log_stat(struct DbEnv *self,u_int32_t flags){
3867 DB_LOG_STAT *sp = NULL;
3868 errno = self->log_stat(self, &sp, flags);
3869 return sp;
3870 }
DbEnv_log_verify(struct DbEnv * self,char const * envhome,u_int32_t cachesz,char const * dbfile,char const * dbname,time_t stime,time_t etime,u_int32_t stfile,u_int32_t stoffset,u_int32_t efile,u_int32_t eoffset,int caf,int verbose)3871 SWIGINTERN int DbEnv_log_verify(struct DbEnv *self,char const *envhome,u_int32_t cachesz,char const *dbfile,char const *dbname,time_t stime,time_t etime,u_int32_t stfile,u_int32_t stoffset,u_int32_t efile,u_int32_t eoffset,int caf,int verbose){
3872 return self->env->log_verify_wrap(self->env, envhome, cachesz,
3873 dbfile, dbname, stime, etime, stfile, stoffset, efile,
3874 eoffset, caf, verbose);
3875 }
DbEnv_set_lg_bsize(struct DbEnv * self,u_int32_t lg_bsize)3876 SWIGINTERN db_ret_t DbEnv_set_lg_bsize(struct DbEnv *self,u_int32_t lg_bsize){
3877 return self->set_lg_bsize(self, lg_bsize);
3878 }
DbEnv_set_lg_dir(struct DbEnv * self,char const * dir)3879 SWIGINTERN db_ret_t DbEnv_set_lg_dir(struct DbEnv *self,char const *dir){
3880 return self->set_lg_dir(self, dir);
3881 }
DbEnv_set_lg_filemode(struct DbEnv * self,int mode)3882 SWIGINTERN db_ret_t DbEnv_set_lg_filemode(struct DbEnv *self,int mode){
3883 return self->set_lg_filemode(self, mode);
3884 }
DbEnv_set_lg_max(struct DbEnv * self,u_int32_t lg_max)3885 SWIGINTERN db_ret_t DbEnv_set_lg_max(struct DbEnv *self,u_int32_t lg_max){
3886 return self->set_lg_max(self, lg_max);
3887 }
DbEnv_set_lg_regionmax(struct DbEnv * self,u_int32_t lg_regionmax)3888 SWIGINTERN db_ret_t DbEnv_set_lg_regionmax(struct DbEnv *self,u_int32_t lg_regionmax){
3889 return self->set_lg_regionmax(self, lg_regionmax);
3890 }
DbEnv_get_cachesize(struct DbEnv * self)3891 SWIGINTERN jlong DbEnv_get_cachesize(struct DbEnv *self){
3892 u_int32_t gbytes, bytes;
3893 errno = self->get_cachesize(self, &gbytes, &bytes, NULL);
3894 return (jlong)gbytes * GIGABYTE + bytes;
3895 }
DbEnv_get_cachesize_ncache(struct DbEnv * self)3896 SWIGINTERN int DbEnv_get_cachesize_ncache(struct DbEnv *self){
3897 int ret;
3898 errno = self->get_cachesize(self, NULL, NULL, &ret);
3899 return ret;
3900 }
DbEnv_get_cache_max(struct DbEnv * self)3901 SWIGINTERN jlong DbEnv_get_cache_max(struct DbEnv *self){
3902 u_int32_t gbytes, bytes;
3903 errno = self->get_cache_max(self, &gbytes, &bytes);
3904 return (jlong)gbytes * GIGABYTE + bytes;
3905 }
DbEnv_get_create_dir(struct DbEnv * self)3906 SWIGINTERN char const *DbEnv_get_create_dir(struct DbEnv *self){
3907 const char *ret;
3908 errno = self->get_create_dir(self, &ret);
3909 return ret;
3910 }
DbEnv_get_mp_max_openfd(struct DbEnv * self)3911 SWIGINTERN int DbEnv_get_mp_max_openfd(struct DbEnv *self){
3912 int ret;
3913 errno = self->get_mp_max_openfd(self, &ret);
3914 return ret;
3915 }
DbEnv_get_mp_max_write(struct DbEnv * self)3916 SWIGINTERN int DbEnv_get_mp_max_write(struct DbEnv *self){
3917 int maxwrite;
3918 db_timeout_t sleep;
3919 errno = self->get_mp_max_write(self, &maxwrite, &sleep);
3920 return maxwrite;
3921 }
DbEnv_get_mp_max_write_sleep(struct DbEnv * self)3922 SWIGINTERN db_timeout_t DbEnv_get_mp_max_write_sleep(struct DbEnv *self){
3923 int maxwrite;
3924 db_timeout_t sleep;
3925 errno = self->get_mp_max_write(self, &maxwrite, &sleep);
3926 return sleep;
3927 }
DbEnv_get_mp_mmapsize(struct DbEnv * self)3928 SWIGINTERN size_t DbEnv_get_mp_mmapsize(struct DbEnv *self){
3929 size_t ret;
3930 errno = self->get_mp_mmapsize(self, &ret);
3931 return ret;
3932 }
DbEnv_get_mp_pagesize(struct DbEnv * self)3933 SWIGINTERN int DbEnv_get_mp_pagesize(struct DbEnv *self){
3934 u_int32_t ret;
3935 errno = self->get_mp_pagesize(self, &ret);
3936 return ret;
3937 }
DbEnv_get_mp_tablesize(struct DbEnv * self)3938 SWIGINTERN int DbEnv_get_mp_tablesize(struct DbEnv *self){
3939 u_int32_t ret;
3940 errno = self->get_mp_tablesize(self, &ret);
3941 return ret;
3942 }
DbEnv_memp_stat(struct DbEnv * self,u_int32_t flags)3943 SWIGINTERN DB_MPOOL_STAT *DbEnv_memp_stat(struct DbEnv *self,u_int32_t flags){
3944 DB_MPOOL_STAT *mp_stat = NULL;
3945 errno = self->memp_stat(self, &mp_stat, NULL, flags);
3946 return mp_stat;
3947 }
DbEnv_memp_fstat(struct DbEnv * self,u_int32_t flags)3948 SWIGINTERN DB_MPOOL_FSTAT **DbEnv_memp_fstat(struct DbEnv *self,u_int32_t flags){
3949 DB_MPOOL_FSTAT **mp_fstat = NULL;
3950 errno = self->memp_stat(self, NULL, &mp_fstat, flags);
3951 return mp_fstat;
3952 }
DbEnv_memp_sync(struct DbEnv * self,DB_LSN * lsn_or_null)3953 SWIGINTERN db_ret_t DbEnv_memp_sync(struct DbEnv *self,DB_LSN *lsn_or_null){
3954 return self->memp_sync(self, lsn_or_null);
3955 }
DbEnv_memp_trickle(struct DbEnv * self,int percent)3956 SWIGINTERN int DbEnv_memp_trickle(struct DbEnv *self,int percent){
3957 int ret;
3958 errno = self->memp_trickle(self, percent, &ret);
3959 return ret;
3960 }
DbEnv_mutex_get_align(struct DbEnv * self)3961 SWIGINTERN u_int32_t DbEnv_mutex_get_align(struct DbEnv *self){
3962 u_int32_t ret;
3963 errno = self->mutex_get_align(self, &ret);
3964 return ret;
3965 }
DbEnv_mutex_get_increment(struct DbEnv * self)3966 SWIGINTERN u_int32_t DbEnv_mutex_get_increment(struct DbEnv *self){
3967 u_int32_t ret;
3968 errno = self->mutex_get_increment(self, &ret);
3969 return ret;
3970 }
DbEnv_mutex_get_init(struct DbEnv * self)3971 SWIGINTERN u_int32_t DbEnv_mutex_get_init(struct DbEnv *self){
3972 u_int32_t ret;
3973 errno = self->mutex_get_init(self, &ret);
3974 return ret;
3975 }
DbEnv_mutex_get_max(struct DbEnv * self)3976 SWIGINTERN u_int32_t DbEnv_mutex_get_max(struct DbEnv *self){
3977 u_int32_t ret;
3978 errno = self->mutex_get_max(self, &ret);
3979 return ret;
3980 }
DbEnv_mutex_get_tas_spins(struct DbEnv * self)3981 SWIGINTERN u_int32_t DbEnv_mutex_get_tas_spins(struct DbEnv *self){
3982 u_int32_t ret;
3983 errno = self->mutex_get_tas_spins(self, &ret);
3984 return ret;
3985 }
DbEnv_mutex_set_align(struct DbEnv * self,u_int32_t align)3986 SWIGINTERN db_ret_t DbEnv_mutex_set_align(struct DbEnv *self,u_int32_t align){
3987 return self->mutex_set_align(self, align);
3988 }
DbEnv_mutex_set_increment(struct DbEnv * self,u_int32_t increment)3989 SWIGINTERN db_ret_t DbEnv_mutex_set_increment(struct DbEnv *self,u_int32_t increment){
3990 return self->mutex_set_increment(self, increment);
3991 }
DbEnv_mutex_set_init(struct DbEnv * self,u_int32_t mutex_init)3992 SWIGINTERN db_ret_t DbEnv_mutex_set_init(struct DbEnv *self,u_int32_t mutex_init){
3993 return self->mutex_set_init(self, mutex_init);
3994 }
DbEnv_mutex_set_max(struct DbEnv * self,u_int32_t mutex_max)3995 SWIGINTERN db_ret_t DbEnv_mutex_set_max(struct DbEnv *self,u_int32_t mutex_max){
3996 return self->mutex_set_max(self, mutex_max);
3997 }
DbEnv_mutex_set_tas_spins(struct DbEnv * self,u_int32_t tas_spins)3998 SWIGINTERN db_ret_t DbEnv_mutex_set_tas_spins(struct DbEnv *self,u_int32_t tas_spins){
3999 return self->mutex_set_tas_spins(self, tas_spins);
4000 }
DbEnv_mutex_stat(struct DbEnv * self,u_int32_t flags)4001 SWIGINTERN DB_MUTEX_STAT *DbEnv_mutex_stat(struct DbEnv *self,u_int32_t flags){
4002 DB_MUTEX_STAT *statp = NULL;
4003 errno = self->mutex_stat(self, &statp, flags);
4004 return statp;
4005 }
DbEnv_get_tx_max(struct DbEnv * self)4006 SWIGINTERN u_int32_t DbEnv_get_tx_max(struct DbEnv *self){
4007 u_int32_t ret;
4008 errno = self->get_tx_max(self, &ret);
4009 return ret;
4010 }
DbEnv_get_tx_timestamp(struct DbEnv * self)4011 SWIGINTERN time_t DbEnv_get_tx_timestamp(struct DbEnv *self){
4012 time_t ret;
4013 errno = self->get_tx_timestamp(self, &ret);
4014 return ret;
4015 }
DbEnv_get_timeout(struct DbEnv * self,u_int32_t flag)4016 SWIGINTERN db_timeout_t DbEnv_get_timeout(struct DbEnv *self,u_int32_t flag){
4017 db_timeout_t ret;
4018 errno = self->get_timeout(self, &ret, flag);
4019 return ret;
4020 }
DbEnv_txn_applied(struct DbEnv * self,DB_TXN_TOKEN * token,u_int32_t maxwait,u_int32_t flags)4021 SWIGINTERN int DbEnv_txn_applied(struct DbEnv *self,DB_TXN_TOKEN *token,u_int32_t maxwait,u_int32_t flags){
4022 return self->txn_applied(self, token, maxwait, flags);
4023 }
DbEnv_txn_begin(struct DbEnv * self,DB_TXN * parent,u_int32_t flags)4024 SWIGINTERN DB_TXN *DbEnv_txn_begin(struct DbEnv *self,DB_TXN *parent,u_int32_t flags){
4025 DB_TXN *tid = NULL;
4026 errno = self->txn_begin(self, parent, &tid, flags);
4027 return tid;
4028 }
DbEnv_txn_checkpoint(struct DbEnv * self,u_int32_t kbyte,u_int32_t min,u_int32_t flags)4029 SWIGINTERN db_ret_t DbEnv_txn_checkpoint(struct DbEnv *self,u_int32_t kbyte,u_int32_t min,u_int32_t flags){
4030 return self->txn_checkpoint(self, kbyte, min, flags);
4031 }
DbEnv_txn_recover(struct DbEnv * self,long count,long flags)4032 SWIGINTERN DB_PREPLIST *DbEnv_txn_recover(struct DbEnv *self,long count,long flags){
4033 DB_PREPLIST *preplist;
4034 long retcount;
4035
4036 /* Add a NULL element to terminate the array. */
4037 if ((errno = __os_malloc(self->env,
4038 (count + 1) * sizeof(DB_PREPLIST), &preplist)) != 0)
4039 return NULL;
4040
4041 if ((errno = self->txn_recover(self, preplist, count,
4042 &retcount, flags)) != 0) {
4043 __os_free(self->env, preplist);
4044 return NULL;
4045 }
4046
4047 preplist[retcount].txn = NULL;
4048 return preplist;
4049 }
DbEnv_txn_stat(struct DbEnv * self,u_int32_t flags)4050 SWIGINTERN DB_TXN_STAT *DbEnv_txn_stat(struct DbEnv *self,u_int32_t flags){
4051 DB_TXN_STAT *statp = NULL;
4052 errno = self->txn_stat(self, &statp, flags);
4053 return statp;
4054 }
DbEnv_rep_get_limit(struct DbEnv * self)4055 SWIGINTERN jlong DbEnv_rep_get_limit(struct DbEnv *self){
4056 u_int32_t gbytes, bytes;
4057 errno = self->rep_get_limit(self, &gbytes, &bytes);
4058 return (jlong)gbytes * GIGABYTE + bytes;
4059 }
DbEnv_rep_elect(struct DbEnv * self,u_int32_t nsites,int nvotes,u_int32_t flags)4060 SWIGINTERN db_ret_t DbEnv_rep_elect(struct DbEnv *self,u_int32_t nsites,int nvotes,u_int32_t flags){
4061 return self->rep_elect(self, nsites, nvotes, flags);
4062 }
DbEnv_rep_process_message(struct DbEnv * self,DBT * control,DBT * rec,int envid,DB_LSN * ret_lsn)4063 SWIGINTERN int DbEnv_rep_process_message(struct DbEnv *self,DBT *control,DBT *rec,int envid,DB_LSN *ret_lsn){
4064 return self->rep_process_message(self, control, rec, envid,
4065 ret_lsn);
4066 }
DbEnv_rep_flush(struct DbEnv * self)4067 SWIGINTERN db_ret_t DbEnv_rep_flush(struct DbEnv *self){
4068 return self->rep_flush(self);
4069 }
DbEnv_rep_set_config(struct DbEnv * self,u_int32_t which,int_bool onoff)4070 SWIGINTERN db_ret_t DbEnv_rep_set_config(struct DbEnv *self,u_int32_t which,int_bool onoff){
4071 return self->rep_set_config(self, which, onoff);
4072 }
DbEnv_rep_set_clockskew(struct DbEnv * self,u_int32_t fast_clock,u_int32_t slow_clock)4073 SWIGINTERN db_ret_t DbEnv_rep_set_clockskew(struct DbEnv *self,u_int32_t fast_clock,u_int32_t slow_clock){
4074 return self->rep_set_clockskew(self, fast_clock, slow_clock);
4075 }
DbEnv_rep_get_clockskew_fast(struct DbEnv * self)4076 SWIGINTERN u_int32_t DbEnv_rep_get_clockskew_fast(struct DbEnv *self){
4077 u_int32_t fast_clock, slow_clock;
4078 errno = self->rep_get_clockskew(self, &fast_clock, &slow_clock);
4079 return fast_clock;
4080 }
DbEnv_rep_get_clockskew_slow(struct DbEnv * self)4081 SWIGINTERN u_int32_t DbEnv_rep_get_clockskew_slow(struct DbEnv *self){
4082 u_int32_t fast_clock, slow_clock;
4083 errno = self->rep_get_clockskew(self, &fast_clock, &slow_clock);
4084 return slow_clock;
4085 }
DbEnv_rep_start(struct DbEnv * self,DBT * cdata,u_int32_t flags)4086 SWIGINTERN db_ret_t DbEnv_rep_start(struct DbEnv *self,DBT *cdata,u_int32_t flags){
4087 return self->rep_start(self, cdata, flags);
4088 }
DbEnv_rep_sync(struct DbEnv * self,u_int32_t flags)4089 SWIGINTERN db_ret_t DbEnv_rep_sync(struct DbEnv *self,u_int32_t flags){
4090 return self->rep_sync(self, flags);
4091 }
DbEnv_rep_get_config(struct DbEnv * self,u_int32_t which)4092 SWIGINTERN int_bool DbEnv_rep_get_config(struct DbEnv *self,u_int32_t which){
4093 int ret;
4094 errno = self->rep_get_config(self, which, &ret);
4095 return ret;
4096 }
DbEnv_rep_stat(struct DbEnv * self,u_int32_t flags)4097 SWIGINTERN DB_REP_STAT *DbEnv_rep_stat(struct DbEnv *self,u_int32_t flags){
4098 DB_REP_STAT *statp = NULL;
4099 errno = self->rep_stat(self, &statp, flags);
4100 return statp;
4101 }
DbEnv_rep_set_limit(struct DbEnv * self,jlong bytes)4102 SWIGINTERN db_ret_t DbEnv_rep_set_limit(struct DbEnv *self,jlong bytes){
4103 return self->rep_set_limit(self,
4104 (u_int32_t)(bytes / GIGABYTE),
4105 (u_int32_t)(bytes % GIGABYTE));
4106 }
DbEnv_rep_get_request_min(struct DbEnv * self)4107 SWIGINTERN u_int32_t DbEnv_rep_get_request_min(struct DbEnv *self){
4108 u_int32_t min, max;
4109 errno = self->rep_get_request(self, &min, &max);
4110 return min;
4111 }
DbEnv_rep_get_request_max(struct DbEnv * self)4112 SWIGINTERN u_int32_t DbEnv_rep_get_request_max(struct DbEnv *self){
4113 u_int32_t min, max;
4114 errno = self->rep_get_request(self, &min, &max);
4115 return max;
4116 }
DbEnv_repmgr_channel(struct DbEnv * self,int eid,u_int32_t flags)4117 SWIGINTERN DB_CHANNEL *DbEnv_repmgr_channel(struct DbEnv *self,int eid,u_int32_t flags){
4118 DB_CHANNEL *channel = NULL;
4119 errno = self->repmgr_channel(self, eid, &channel, flags);
4120 return channel;
4121 }
DbEnv_rep_set_request(struct DbEnv * self,u_int32_t min,u_int32_t max)4122 SWIGINTERN db_ret_t DbEnv_rep_set_request(struct DbEnv *self,u_int32_t min,u_int32_t max){
4123 return self->rep_set_request(self, min, max);
4124 }
DbEnv_rep_set_transport(struct DbEnv * self,int envid,int (* send)(DB_ENV *,DBT const *,DBT const *,DB_LSN const *,int,u_int32_t))4125 SWIGINTERN db_ret_t DbEnv_rep_set_transport(struct DbEnv *self,int envid,int (*send)(DB_ENV *,DBT const *,DBT const *,DB_LSN const *,int,u_int32_t)){
4126 return self->rep_set_transport(self, envid, send);
4127 }
DbEnv_rep_get_nsites(struct DbEnv * self)4128 SWIGINTERN u_int32_t DbEnv_rep_get_nsites(struct DbEnv *self){
4129 u_int32_t ret;
4130 errno = self->rep_get_nsites(self, &ret);
4131 return ret;
4132 }
DbEnv_rep_get_priority(struct DbEnv * self)4133 SWIGINTERN u_int32_t DbEnv_rep_get_priority(struct DbEnv *self){
4134 u_int32_t ret;
4135 errno = self->rep_get_priority(self, &ret);
4136 return ret;
4137 }
DbEnv_rep_get_timeout(struct DbEnv * self,int which)4138 SWIGINTERN u_int32_t DbEnv_rep_get_timeout(struct DbEnv *self,int which){
4139 u_int32_t ret;
4140 errno = self->rep_get_timeout(self, which, &ret);
4141 return ret;
4142 }
DbEnv_rep_set_nsites(struct DbEnv * self,u_int32_t number)4143 SWIGINTERN db_ret_t DbEnv_rep_set_nsites(struct DbEnv *self,u_int32_t number){
4144 return self->rep_set_nsites(self, number);
4145 }
DbEnv_rep_set_priority(struct DbEnv * self,u_int32_t priority)4146 SWIGINTERN db_ret_t DbEnv_rep_set_priority(struct DbEnv *self,u_int32_t priority){
4147 return self->rep_set_priority(self, priority);
4148 }
DbEnv_rep_set_timeout(struct DbEnv * self,int which,db_timeout_t timeout)4149 SWIGINTERN db_ret_t DbEnv_rep_set_timeout(struct DbEnv *self,int which,db_timeout_t timeout){
4150 return self->rep_set_timeout(self, which, timeout);
4151 }
DbEnv_repmgr_get_ack_policy(struct DbEnv * self)4152 SWIGINTERN int DbEnv_repmgr_get_ack_policy(struct DbEnv *self){
4153 int ret;
4154 errno = self->repmgr_get_ack_policy(self, &ret);
4155 return ret;
4156 }
DbEnv_repmgr_local_site(struct DbEnv * self)4157 SWIGINTERN DB_SITE *DbEnv_repmgr_local_site(struct DbEnv *self){
4158 DB_SITE *site = NULL;
4159 errno = self->repmgr_local_site(self, &site);
4160 return site;
4161 }
DbEnv_repmgr_set_ack_policy(struct DbEnv * self,int policy)4162 SWIGINTERN db_ret_t DbEnv_repmgr_set_ack_policy(struct DbEnv *self,int policy){
4163 return self->repmgr_set_ack_policy(self, policy);
4164 }
DbEnv_repmgr_site(struct DbEnv * self,char const * host,u_int port)4165 SWIGINTERN DB_SITE *DbEnv_repmgr_site(struct DbEnv *self,char const *host,u_int port){
4166 DB_SITE *site = NULL;
4167 errno = self->repmgr_site(self, host, port, &site, 0);
4168 return site;
4169 }
DbEnv_repmgr_site_by_eid(struct DbEnv * self,int eid)4170 SWIGINTERN DB_SITE *DbEnv_repmgr_site_by_eid(struct DbEnv *self,int eid){
4171 DB_SITE *site = NULL;
4172 errno = self->repmgr_site_by_eid(self, eid, &site);
4173 return site;
4174 }
DbEnv_repmgr_set_dispatch(struct DbEnv * self,void (* dispatch)(DB_ENV *,DB_CHANNEL *,DBT *,u_int32_t,u_int32_t),u_int32_t flags)4175