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