1/* Statistics classes */ 2%{ 3/* 4 * These macros are used by code generated by the s_java script. 5 */ 6#define JAVADB_STAT_INT(jenv, jobj, fid, statp, name) \ 7 (*jenv)->SetIntField(jenv, jobj, fid, (jint)statp->name) 8 9#define JAVADB_STAT_STRING(jenv, jobj, fid, statp, name) \ 10 (*jenv)->SetObjectField(jenv, jobj, fid, \ 11 (*jenv)->NewStringUTF(jenv, statp->name)) 12 13#define JAVADB_STAT_LSN(jenv, jobj, fid, statp, name) \ 14 (*jenv)->SetObjectField(jenv, jobj, fid, \ 15 __dbj_wrap_DB_LSN(jenv, &statp->name)) 16 17#define JAVADB_STAT_LONG(jenv, jobj, fid, statp, name) \ 18 (*jenv)->SetLongField(jenv, jobj, fid, \ 19 (jlong)statp->name) 20 21#define JAVADB_STAT_XID(jenv, jobj, fid, statp, name) { \ 22 jobject jarr = \ 23 (*jenv)->NewByteArray(jenv, (jsize)DB_XIDDATASIZE); \ 24 (*jenv)->SetByteArrayRegion(jenv, jarr, \ 25 0, (jsize)DB_XIDDATASIZE, (jbyte *)statp->name); \ 26 (*jenv)->SetObjectField(jenv, jobj, fid, jarr); \ 27 } 28 29/* 30 * We build the active list separately. 31 */ 32#define JAVADB_STAT_ACTIVE(jenv, cl, jobj, statp, name) \ 33 do {} while(0) 34 35#include "java_stat_auto.c" 36%} 37 38%define JAVA_STAT_CLASS(_ctype, _jtype, _name) 39JAVA_TYPEMAP(_ctype, _jtype, jobject) 40%typemap(out) _ctype %{ 41 $result = (*jenv)->NewObject(jenv, _name##_class, _name##_construct); 42 if ($result != NULL) 43 __dbj_fill_##_name(jenv, $result, $1); 44 __os_ufree(NULL, $1); 45%} 46%enddef 47 48JAVA_STAT_CLASS(DB_COMPACT *, com.sleepycat.db.CompactStats, compact) 49%typemap(freearg) DB_COMPACT * %{ __dbj_fill_compact(jenv, $input, $1); %} 50%typemap(in) DB_COMPACT * (DB_COMPACT compact) %{ 51 memset(&compact, 0, sizeof (DB_COMPACT)); 52 $1 = &compact; 53 $1->compact_fillpercent = (*jenv)->GetIntField(jenv, $input, 54 compact_compact_fillpercent_fid); 55 $1->compact_timeout = (*jenv)->GetIntField(jenv, $input, 56 compact_compact_timeout_fid); 57 $1->compact_pages = (*jenv)->GetIntField(jenv, $input, 58 compact_compact_pages_fid); 59%} 60 61JAVA_STAT_CLASS(DB_LOCK_STAT *, com.sleepycat.db.LockStats, lock_stat) 62JAVA_STAT_CLASS(DB_LOG_STAT *, com.sleepycat.db.LogStats, log_stat) 63JAVA_STAT_CLASS(DB_MPOOL_STAT *, com.sleepycat.db.CacheStats, mpool_stat) 64 65JAVA_TYPEMAP(DB_MPOOL_FSTAT **, com.sleepycat.db.CacheFileStats[], jobjectArray) 66%typemap(out) DB_MPOOL_FSTAT ** { 67 int i, len; 68 69 len = 0; 70 while ($1[len] != NULL) 71 len++; 72 $result = (*jenv)->NewObjectArray(jenv, (jsize)len, 73 mpool_fstat_class, 0); 74 if ($result == NULL) { 75 __os_ufree(NULL, $1); 76 return $null; 77 } 78 for (i = 0; i < len; i++) { 79 jobject obj = (*jenv)->NewObject(jenv, mpool_fstat_class, 80 mpool_fstat_construct); 81 if (obj == NULL) { 82 __os_ufree(NULL, $1); 83 return $null; /* an exception is pending */ 84 } 85 (*jenv)->SetObjectArrayElement(jenv, $result, i, obj); 86 __dbj_fill_mpool_fstat(jenv, obj, $1[i]); 87 } 88 __os_ufree(NULL, $1); 89} 90 91JAVA_STAT_CLASS(DB_MUTEX_STAT *, com.sleepycat.db.MutexStats, mutex_stat) 92JAVA_STAT_CLASS(DB_REP_STAT *, com.sleepycat.db.ReplicationStats, rep_stat) 93JAVA_STAT_CLASS(DB_REPMGR_STAT *, com.sleepycat.db.ReplicationManagerStats, repmgr_stat) 94JAVA_STAT_CLASS(DB_SEQUENCE_STAT *, com.sleepycat.db.SequenceStats, seq_stat) 95JAVA_TYPEMAP(DB_TXN_STAT *, com.sleepycat.db.TransactionStats, jobject) 96%typemap(out) DB_TXN_STAT * { 97 unsigned int i; 98 jobjectArray actives; 99 $result = (*jenv)->NewObject(jenv, txn_stat_class, txn_stat_construct); 100 if ($result != NULL) 101 __dbj_fill_txn_stat(jenv, $result, $1); 102 103 actives = (*jenv)->NewObjectArray(jenv, (jsize)$1->st_nactive, 104 txn_active_class, 0); 105 if (actives == NULL) { 106 __os_ufree(NULL, $1); 107 return $null; 108 } 109 (*jenv)->SetObjectField(jenv, $result, 110 txn_stat_st_txnarray_fid, actives); 111 for (i = 0; i < $1->st_nactive; i++) { 112 jobject obj = (*jenv)->NewObject(jenv, txn_active_class, 113 txn_active_construct); 114 if (obj == NULL) { 115 __os_ufree(NULL, $1); 116 return $null; /* an exception is pending */ 117 } 118 (*jenv)->SetObjectArrayElement(jenv, actives, (jsize)i, obj); 119 __dbj_fill_txn_active(jenv, obj, &$1->st_txnarray[i]); 120 } 121 __os_ufree(NULL, $1); 122} 123 124/* Db.stat return - special case */ 125%typemap(out) void * %{ 126 if ($1 == NULL) 127 $result = NULL; 128 else { 129 DB *db = (DB *)arg1; 130 DBTYPE dbtype; 131 int err; 132 133 if ((err = db->get_type(db, &dbtype)) != 0) { 134 __dbj_throw(jenv, err, NULL, NULL, DB2JDBENV); 135 return $null; 136 } 137 138 switch (dbtype) { 139 /* Btree and recno share the same stat structure */ 140 case DB_BTREE: 141 case DB_RECNO: 142 $result = (*jenv)->NewObject(jenv, bt_stat_class, 143 bt_stat_construct); 144 if ($result != NULL) 145 __dbj_fill_bt_stat(jenv, $result, 146 (DB_BTREE_STAT *)$1); 147 break; 148 149 /* Hash stat structure */ 150 case DB_HASH: 151 $result = (*jenv)->NewObject(jenv, h_stat_class, 152 h_stat_construct); 153 if ($result != NULL) 154 __dbj_fill_h_stat(jenv, $result, 155 (DB_HASH_STAT *)$1); 156 break; 157 158 case DB_QUEUE: 159 $result = (*jenv)->NewObject(jenv, qam_stat_class, 160 qam_stat_construct); 161 if ($result != NULL) 162 __dbj_fill_qam_stat(jenv, $result, 163 (DB_QUEUE_STAT *)$1); 164 break; 165 166 /* That's all the database types we're aware of! */ 167 default: 168 __dbj_throw(jenv, EINVAL, "Db.stat only implemented for" 169 " BTREE, HASH, QUEUE and RECNO", NULL, DB2JDBENV); 170 break; 171 } 172 173 __os_ufree(db->env, $1); 174 } 175%} 176 177