ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/BDB/BDB.xs
(Generate patch)

Comparing BDB/BDB.xs (file contents):
Revision 1.3 by root, Mon Feb 5 22:19:07 2007 UTC vs.
Revision 1.7 by root, Thu Feb 8 22:14:01 2007 UTC

40# else 40# else
41# define WORDACCESS_UNSAFE 1 41# define WORDACCESS_UNSAFE 1
42# endif 42# endif
43#endif 43#endif
44 44
45typedef DB_ENV DB_ENV_ornull;
46typedef DB_TXN DB_TXN_ornull;
47typedef DBC DBC_ornull;
48typedef DB DB_ornull;
49
45typedef SV SV8; /* byte-sv, used for argument-checking */ 50typedef SV SV8; /* byte-sv, used for argument-checking */
46typedef char *octetstring; 51typedef char *octetstring;
47 52
48static SV *prepare_cb; 53static SV *prepare_cb;
49 54
51strdup_ornull (const char *s) 56strdup_ornull (const char *s)
52{ 57{
53 return s ? strdup (s) : 0; 58 return s ? strdup (s) : 0;
54} 59}
55 60
61static inline void
62sv_to_dbt (DBT *dbt, SV *sv)
63{
64 STRLEN len;
65 char *data = SvPVbyte (sv, len);
66
67 dbt->data = malloc (len);
68 memcpy (dbt->data, data, len);
69 dbt->size = len;
70 dbt->flags = DB_DBT_REALLOC;
71}
72
73static inline void
74dbt_to_sv (SV *sv, DBT *dbt)
75{
76 if (sv)
77 {
78 SvREADONLY_off (sv);
79 sv_setpvn_mg (sv, dbt->data, dbt->size);
80 SvREFCNT_dec (sv);
81 }
82
83 free (dbt->data);
84}
85
56enum { 86enum {
57 REQ_QUIT, 87 REQ_QUIT,
58 REQ_ENV_OPEN, REQ_ENV_CLOSE, 88 REQ_ENV_OPEN, REQ_ENV_CLOSE,
59 REQ_DB_OPEN, REQ_DB_CLOSE, REQ_DB_COMPACT, REQ_DB_SYNC, REQ_DB_PUT, 89 REQ_DB_OPEN, REQ_DB_CLOSE, REQ_DB_COMPACT, REQ_DB_SYNC, REQ_DB_PUT, REQ_DB_GET, REQ_DB_PGET, REQ_DB_DEL,
90 REQ_TXN_COMMIT, REQ_TXN_ABORT,
91 REQ_C_CLOSE, REQ_C_COUNT, REQ_C_PUT, REQ_C_GET, REQ_C_PGET, REQ_C_DEL,
60}; 92};
61 93
62typedef struct aio_cb 94typedef struct aio_cb
63{ 95{
64 struct aio_cb *volatile next; 96 struct aio_cb *volatile next;
66 int type, pri, result; 98 int type, pri, result;
67 99
68 DB_ENV *env; 100 DB_ENV *env;
69 DB *db; 101 DB *db;
70 DB_TXN *txn; 102 DB_TXN *txn;
71 DBC *cursor; 103 DBC *dbc;
104
105 UV uv1;
72 int int1, int2; 106 int int1, int2;
73 U32 uint1, uint2; 107 U32 uint1, uint2;
74 char *buf1, *buf2; 108 char *buf1, *buf2;
109 SV *sv1, *sv2, *sv3;
75 110
76 DBT dbt1, dbt2, dbt3; 111 DBT dbt1, dbt2, dbt3;
77} aio_cb; 112} aio_cb;
78 113
79typedef aio_cb *aio_req; 114typedef aio_cb *aio_req;
262 PUSHMARK (SP); 297 PUSHMARK (SP);
263 EXTEND (SP, 1); 298 EXTEND (SP, 1);
264 299
265 switch (req->type) 300 switch (req->type)
266 { 301 {
302 case REQ_DB_CLOSE:
303 SvREFCNT_dec (req->sv1);
304 break;
305
306 case REQ_DB_GET:
307 case REQ_DB_PGET:
308 dbt_to_sv (req->sv3, &req->dbt3);
309 break;
310
311 case REQ_C_GET:
312 case REQ_C_PGET:
313 dbt_to_sv (req->sv1, &req->dbt1);
314 dbt_to_sv (req->sv2, &req->dbt2);
315 dbt_to_sv (req->sv3, &req->dbt3);
316 break;
267 } 317 }
268 318
269 errno = req->result; 319 errno = req->result;
270 320
271 PUTBACK; 321 PUTBACK;
608 req->result = req->db->sync (req->db, req->uint1); 658 req->result = req->db->sync (req->db, req->uint1);
609 break; 659 break;
610 660
611 case REQ_DB_PUT: 661 case REQ_DB_PUT:
612 req->result = req->db->put (req->db, req->txn, &req->dbt1, &req->dbt2, req->uint1); 662 req->result = req->db->put (req->db, req->txn, &req->dbt1, &req->dbt2, req->uint1);
663 break;
664
665 case REQ_DB_GET:
666 req->result = req->db->get (req->db, req->txn, &req->dbt1, &req->dbt3, req->uint1);
667 break;
668
669 case REQ_DB_PGET:
670 req->result = req->db->pget (req->db, req->txn, &req->dbt1, &req->dbt2, &req->dbt3, req->uint1);
671 break;
672
673 case REQ_DB_DEL:
674 req->result = req->db->del (req->db, req->txn, &req->dbt1, req->uint1);
675 break;
676
677 case REQ_TXN_COMMIT:
678 req->result = req->txn->commit (req->txn, req->uint1);
679 break;
680
681 case REQ_TXN_ABORT:
682 req->result = req->txn->abort (req->txn);
683 break;
684
685 case REQ_C_CLOSE:
686 req->result = req->dbc->c_close (req->dbc);
687 break;
688
689 case REQ_C_COUNT:
690 {
691 db_recno_t recno;
692 req->result = req->dbc->c_count (req->dbc, &recno, req->uint1);
693 req->uv1 = recno;
694 }
695 break;
696
697 case REQ_C_PUT:
698 req->result = req->dbc->c_put (req->dbc, &req->dbt1, &req->dbt2, req->uint1);
699 break;
700
701 case REQ_C_GET:
702 req->result = req->dbc->c_get (req->dbc, &req->dbt1, &req->dbt3, req->uint1);
703 break;
704
705 case REQ_C_PGET:
706 req->result = req->dbc->c_pget (req->dbc, &req->dbt1, &req->dbt2, &req->dbt3, req->uint1);
707 break;
708
709 case REQ_C_DEL:
710 req->result = req->dbc->c_del (req->dbc, req->uint1);
613 break; 711 break;
614 712
615 default: 713 default:
616 req->result = ENOSYS; 714 req->result = ENOSYS;
617 break; 715 break;
706 req->pri = req_pri 804 req->pri = req_pri
707 805
708#define REQ_SEND \ 806#define REQ_SEND \
709 req_send (req) 807 req_send (req)
710 808
711#define SvPTR(var, arg, type, class) \ 809#define SvPTR(var, arg, type, class, nullok) \
712 if (!SvOK (arg)) \ 810 if (!SvOK (arg)) \
811 { \
812 if (!nullok) \
813 croak (# var " must be a " # class " object, not undef"); \
814 \
713 (var) = 0; \ 815 (var) = 0; \
816 } \
714 else if (sv_derived_from ((arg), # class)) \ 817 else if (sv_derived_from ((arg), # class)) \
715 { \ 818 { \
716 IV tmp = SvIV ((SV*) SvRV (arg)); \ 819 IV tmp = SvIV ((SV*) SvRV (arg)); \
717 (var) = INT2PTR (type, tmp); \ 820 (var) = INT2PTR (type, tmp); \
821 if (!var) \
822 croak (# var " is not a valid " # class " object anymore"); \
718 } \ 823 } \
719 else \ 824 else \
720 Perl_croak (# var " is not of type " # class) 825 croak (# var " is not of type " # class); \
826 \
721 827
722inline void 828static void
723set_dbt (DBT *dbt, SV *sv) 829ptr_nuke (SV *sv)
724{ 830{
725 STRLEN len; 831 assert (SvROK (sv));
726 char *data = SvPVbyte (sv, len); 832 sv_setiv (SvRV (sv), 0);
727
728 dbt->data = malloc (len);
729 memcpy (dbt->data, data, len);
730 dbt->size = len;
731} 833}
732 834
733MODULE = BDB PACKAGE = BDB 835MODULE = BDB PACKAGE = BDB
734 836
735PROTOTYPES: ENABLE 837PROTOTYPES: ENABLE
736 838
737BOOT: 839BOOT:
777 const_iv (REGION_INIT) 879 const_iv (REGION_INIT)
778 const_iv (TIME_NOTGRANTED) 880 const_iv (TIME_NOTGRANTED)
779 const_iv (TXN_NOSYNC) 881 const_iv (TXN_NOSYNC)
780 const_iv (TXN_SNAPSHOT) 882 const_iv (TXN_SNAPSHOT)
781 const_iv (TXN_WRITE_NOSYNC) 883 const_iv (TXN_WRITE_NOSYNC)
884 const_iv (WRITECURSOR)
782 const_iv (YIELDCPU) 885 const_iv (YIELDCPU)
783 const_iv (ENCRYPT_AES) 886 const_iv (ENCRYPT_AES)
784 const_iv (XA_CREATE) 887 const_iv (XA_CREATE)
785 const_iv (BTREE) 888 const_iv (BTREE)
786 const_iv (HASH) 889 const_iv (HASH)
787 const_iv (QUEUE) 890 const_iv (QUEUE)
788 const_iv (RECNO) 891 const_iv (RECNO)
789 const_iv (UNKNOWN) 892 const_iv (UNKNOWN)
790 const_iv (EXCL) 893 const_iv (EXCL)
894 const_iv (READ_COMMITTED)
791 const_iv (READ_UNCOMMITTED) 895 const_iv (READ_UNCOMMITTED)
792 const_iv (TRUNCATE) 896 const_iv (TRUNCATE)
793 const_iv (NOSYNC) 897 const_iv (NOSYNC)
794 const_iv (CHKSUM) 898 const_iv (CHKSUM)
795 const_iv (ENCRYPT) 899 const_iv (ENCRYPT)
800 const_iv (RENUMBER) 904 const_iv (RENUMBER)
801 const_iv (REVSPLITOFF) 905 const_iv (REVSPLITOFF)
802 const_iv (INORDER) 906 const_iv (INORDER)
803 const_iv (CONSUME) 907 const_iv (CONSUME)
804 const_iv (CONSUME_WAIT) 908 const_iv (CONSUME_WAIT)
909 const_iv (GET_BOTH)
910 const_iv (GET_BOTH_RANGE)
911 //const_iv (SET_RECNO)
912 //const_iv (MULTIPLE)
805 const_iv (SNAPSHOT) 913 const_iv (SNAPSHOT)
806 const_iv (JOIN_ITEM) 914 const_iv (JOIN_ITEM)
807 const_iv (RMW) 915 const_iv (RMW)
808 916
809 const_iv (NOTFOUND) 917 const_iv (NOTFOUND)
812 const_iv (LOCK_NOTGRANTED) 920 const_iv (LOCK_NOTGRANTED)
813 const_iv (RUNRECOVERY) 921 const_iv (RUNRECOVERY)
814 const_iv (OLD_VERSION) 922 const_iv (OLD_VERSION)
815 const_iv (REP_HANDLE_DEAD) 923 const_iv (REP_HANDLE_DEAD)
816 const_iv (REP_LOCKOUT) 924 const_iv (REP_LOCKOUT)
925 const_iv (SECONDARY_BAD)
817 926
818 const_iv (FREE_SPACE) 927 const_iv (FREE_SPACE)
819 const_iv (FREELIST_ONLY) 928 const_iv (FREELIST_ONLY)
820 929
821 const_iv (APPEND) 930 const_iv (APPEND)
822 const_iv (NODUPDATA) 931 const_iv (NODUPDATA)
823 const_iv (NOOVERWRITE) 932 const_iv (NOOVERWRITE)
824 933
934 const_iv (TXN_NOWAIT)
935 const_iv (TXN_SNAPSHOT)
936 const_iv (TXN_SYNC)
937
825 const_iv (SET_LOCK_TIMEOUT) 938 const_iv (SET_LOCK_TIMEOUT)
826 const_iv (SET_TXN_TIMEOUT) 939 const_iv (SET_TXN_TIMEOUT)
940
941 const_iv (JOIN_ITEM)
942 const_iv (FIRST)
943 const_iv (NEXT)
944 const_iv (NEXT_DUP)
945 const_iv (NEXT_NODUP)
946 const_iv (PREV)
947 const_iv (PREV_NODUP)
948 const_iv (SET)
949 const_iv (SET_RANGE)
950 const_iv (LAST)
951 const_iv (BEFORE)
952 const_iv (AFTER)
953 const_iv (CURRENT)
954 const_iv (KEYFIRST)
955 const_iv (KEYLAST)
956 const_iv (NODUPDATA)
827 }; 957 };
828 958
829 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) 959 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; )
830 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); 960 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
831 961
1001{ 1131{
1002 dREQ (REQ_ENV_CLOSE); 1132 dREQ (REQ_ENV_CLOSE);
1003 req->env = env; 1133 req->env = env;
1004 req->uint1 = flags; 1134 req->uint1 = flags;
1005 REQ_SEND; 1135 REQ_SEND;
1136 ptr_nuke (ST (0));
1006} 1137}
1007 1138
1008DB * 1139DB *
1009db_create (DB_ENV *env = 0, U32 flags = 0) 1140db_create (DB_ENV *env = 0, U32 flags = 0)
1010 CODE: 1141 CODE:
1011{ 1142{
1012 errno = db_create (&RETVAL, env, flags); 1143 errno = db_create (&RETVAL, env, flags);
1013 if (errno) 1144 if (errno)
1014 croak ("db_env_create: %s", db_strerror (errno)); 1145 croak ("db_create: %s", db_strerror (errno));
1146
1147 if (RETVAL)
1148 RETVAL->app_private = (void *)newSVsv (ST (0));
1015} 1149}
1016 OUTPUT: 1150 OUTPUT:
1017 RETVAL 1151 RETVAL
1018 1152
1019void 1153void
1020db_open (DB *db, DB_TXN *txnid, octetstring file, octetstring database, int type, U32 flags, int mode, SV *callback = &PL_sv_undef) 1154db_open (DB *db, DB_TXN_ornull *txnid, octetstring file, octetstring database, int type, U32 flags, int mode, SV *callback = &PL_sv_undef)
1021 CODE: 1155 CODE:
1022{ 1156{
1023 dREQ (REQ_DB_OPEN); 1157 dREQ (REQ_DB_OPEN);
1024 req->db = db; 1158 req->db = db;
1025 req->txn = txnid; 1159 req->txn = txnid;
1036 CODE: 1170 CODE:
1037{ 1171{
1038 dREQ (REQ_DB_CLOSE); 1172 dREQ (REQ_DB_CLOSE);
1039 req->db = db; 1173 req->db = db;
1040 req->uint1 = flags; 1174 req->uint1 = flags;
1175 req->sv1 = (SV *)db->app_private;
1041 REQ_SEND; 1176 REQ_SEND;
1177 ptr_nuke (ST (0));
1042} 1178}
1043 1179
1044void 1180void
1045db_compact (DB *db, DB_TXN *txn = 0, SV *start = 0, SV *stop = 0, SV *unused1 = 0, U32 flags = DB_FREE_SPACE, SV *unused2 = 0, SV *callback = &PL_sv_undef) 1181db_compact (DB *db, DB_TXN_ornull *txn = 0, SV *start = 0, SV *stop = 0, SV *unused1 = 0, U32 flags = DB_FREE_SPACE, SV *unused2 = 0, SV *callback = &PL_sv_undef)
1046 CODE: 1182 CODE:
1047{ 1183{
1048 dREQ (REQ_DB_COMPACT); 1184 dREQ (REQ_DB_COMPACT);
1049 req->db = db; 1185 req->db = db;
1050 req->txn = txn; 1186 req->txn = txn;
1051 set_dbt (&req->dbt1, start); 1187 sv_to_dbt (&req->dbt1, start);
1052 set_dbt (&req->dbt2, stop); 1188 sv_to_dbt (&req->dbt2, stop);
1053 req->uint1 = flags; 1189 req->uint1 = flags;
1054 REQ_SEND; 1190 REQ_SEND;
1055} 1191}
1056 1192
1057void 1193void
1063 req->uint1 = flags; 1199 req->uint1 = flags;
1064 REQ_SEND; 1200 REQ_SEND;
1065} 1201}
1066 1202
1067void 1203void
1068db_put (DB *db, DB_TXN *txn, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef) 1204db_put (DB *db, DB_TXN_ornull *txn, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
1069 CODE: 1205 CODE:
1070{ 1206{
1071 dREQ (REQ_DB_PUT); 1207 dREQ (REQ_DB_PUT);
1072 req->db = db; 1208 req->db = db;
1073 req->txn = 0; 1209 req->txn = txn;
1074 set_dbt (&req->dbt1, key); 1210 sv_to_dbt (&req->dbt1, key);
1075 set_dbt (&req->dbt2, data); 1211 sv_to_dbt (&req->dbt2, data);
1076 req->uint1 = flags; 1212 req->uint1 = flags;
1077 REQ_SEND; 1213 REQ_SEND;
1078} 1214}
1079 1215
1216void
1217db_get (DB *db, DB_TXN_ornull *txn, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
1218 CODE:
1219{
1220 dREQ (REQ_DB_GET);
1221 req->db = db;
1222 req->txn = txn;
1223 req->uint1 = flags;
1224 sv_to_dbt (&req->dbt1, key);
1225 req->dbt3.flags = DB_DBT_MALLOC;
1226 req->sv3 = SvREFCNT_inc (data); SvREADONLY_on (data);
1227 REQ_SEND;
1228}
1229
1230void
1231db_pget (DB *db, DB_TXN_ornull *txn, SV *key, SV *pkey, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
1232 CODE:
1233{
1234 dREQ (REQ_DB_PGET);
1235 req->db = db;
1236 req->txn = txn;
1237 req->uint1 = flags;
1238 sv_to_dbt (&req->dbt1, key);
1239 sv_to_dbt (&req->dbt2, pkey);
1240 req->dbt3.flags = DB_DBT_MALLOC;
1241 req->sv3 = SvREFCNT_inc (data); SvREADONLY_on (data);
1242 REQ_SEND;
1243}
1244
1245void
1246db_del (DB *db, DB_TXN_ornull *txn, SV *key, U32 flags = 0, SV *callback = &PL_sv_undef)
1247 CODE:
1248{
1249 dREQ (REQ_DB_DEL);
1250 req->db = db;
1251 req->txn = txn;
1252 req->uint1 = flags;
1253 sv_to_dbt (&req->dbt1, key);
1254 REQ_SEND;
1255}
1256
1257void
1258db_txn_commit (DB_TXN *txn, U32 flags = 0, SV *callback = &PL_sv_undef)
1259 CODE:
1260{
1261 dREQ (REQ_TXN_COMMIT);
1262 req->txn = txn;
1263 req->uint1 = flags;
1264 REQ_SEND;
1265 ptr_nuke (ST (0));
1266}
1267
1268void
1269db_txn_abort (DB_TXN *txn, SV *callback = &PL_sv_undef)
1270 CODE:
1271{
1272 dREQ (REQ_TXN_ABORT);
1273 req->txn = txn;
1274 REQ_SEND;
1275 ptr_nuke (ST (0));
1276}
1277
1278void
1279db_c_close (DBC *dbc, SV *callback = &PL_sv_undef)
1280 CODE:
1281{
1282 dREQ (REQ_C_CLOSE);
1283 req->dbc = dbc;
1284 REQ_SEND;
1285 ptr_nuke (ST (0));
1286}
1287
1288void
1289db_c_count (DBC *dbc, SV *count, U32 flags = 0, SV *callback = &PL_sv_undef)
1290 CODE:
1291{
1292 dREQ (REQ_C_COUNT);
1293 req->dbc = dbc;
1294 req->sv1 = SvREFCNT_inc (count);
1295 REQ_SEND;
1296}
1297
1298void
1299db_c_put (DBC *dbc, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
1300 CODE:
1301{
1302 dREQ (REQ_C_PUT);
1303 req->dbc = dbc;
1304 sv_to_dbt (&req->dbt1, key);
1305 sv_to_dbt (&req->dbt2, data);
1306 req->uint1 = flags;
1307 REQ_SEND;
1308}
1309
1310void
1311db_c_get (DBC *dbc, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
1312 CODE:
1313{
1314 dREQ (REQ_C_GET);
1315 req->dbc = dbc;
1316 req->uint1 = flags;
1317 if ((flags & DB_SET) == DB_SET
1318 || (flags & DB_SET_RANGE) == DB_SET_RANGE)
1319 sv_to_dbt (&req->dbt1, key);
1320 else
1321 req->dbt1.flags = DB_DBT_MALLOC;
1322
1323 req->sv1 = SvREFCNT_inc (key); SvREADONLY_on (key);
1324
1325 if ((flags & DB_GET_BOTH) == DB_GET_BOTH
1326 || (flags & DB_GET_BOTH_RANGE) == DB_GET_BOTH_RANGE)
1327 sv_to_dbt (&req->dbt3, data);
1328 else
1329 req->dbt3.flags = DB_DBT_MALLOC;
1330
1331 req->sv3 = SvREFCNT_inc (data); SvREADONLY_on (data);
1332 REQ_SEND;
1333}
1334
1335void
1336db_c_pget (DBC *dbc, SV *key, SV *pkey, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
1337 CODE:
1338{
1339 dREQ (REQ_C_PGET);
1340 req->dbc = dbc;
1341 req->uint1 = flags;
1342 if ((flags & DB_SET) == DB_SET
1343 || (flags & DB_SET_RANGE) == DB_SET_RANGE)
1344 sv_to_dbt (&req->dbt1, key);
1345 else
1346 req->dbt1.flags = DB_DBT_MALLOC;
1347
1348 req->sv1 = SvREFCNT_inc (key); SvREADONLY_on (key);
1349
1350 req->dbt2.flags = DB_DBT_MALLOC;
1351 req->sv2 = SvREFCNT_inc (pkey); SvREADONLY_on (pkey);
1352
1353 if ((flags & DB_GET_BOTH) == DB_GET_BOTH
1354 || (flags & DB_GET_BOTH_RANGE) == DB_GET_BOTH_RANGE)
1355 sv_to_dbt (&req->dbt3, data);
1356 else
1357 req->dbt3.flags = DB_DBT_MALLOC;
1358
1359 req->sv3 = SvREFCNT_inc (data); SvREADONLY_on (data);
1360 REQ_SEND;
1361}
1362
1363void
1364db_c_del (DBC *dbc, U32 flags = 0, SV *callback = &PL_sv_undef)
1365 CODE:
1366{
1367 dREQ (REQ_C_DEL);
1368 req->dbc = dbc;
1369 req->uint1 = flags;
1370 REQ_SEND;
1371}
1372
1080 1373
1081MODULE = BDB PACKAGE = BDB::Env 1374MODULE = BDB PACKAGE = BDB::Env
1082 1375
1376void
1377DESTROY (DB_ENV_ornull *env)
1378 CODE:
1379 if (env)
1380 env->close (env, 0);
1381
1083int set_cachesize (DB_ENV *env, U32 gbytes, U32 bytes, int ncache = 0) 1382int set_cachesize (DB_ENV *env, U32 gbytes, U32 bytes, int ncache = 0)
1084 CODE: 1383 CODE:
1085 RETVAL = env->set_cachesize (env, gbytes, bytes, ncache); 1384 RETVAL = env->set_cachesize (env, gbytes, bytes, ncache);
1086 OUTPUT: 1385 OUTPUT:
1087 RETVAL 1386 RETVAL
1102 CODE: 1401 CODE:
1103 RETVAL = env->set_timeout (env, timeout * 1000000, flags); 1402 RETVAL = env->set_timeout (env, timeout * 1000000, flags);
1104 OUTPUT: 1403 OUTPUT:
1105 RETVAL 1404 RETVAL
1106 1405
1406DB_TXN *
1407txn_begin (DB_ENV *env, DB_TXN_ornull *parent = 0, U32 flags = 0)
1408 CODE:
1409 errno = env->txn_begin (env, parent, &RETVAL, flags);
1410 if (errno)
1411 croak ("DB_ENV->txn_begin: %s", db_strerror (errno));
1412 OUTPUT:
1413 RETVAL
1107 1414
1108MODULE = BDB PACKAGE = BDB::Db 1415MODULE = BDB PACKAGE = BDB::Db
1109 1416
1417void
1418DESTROY (DB_ornull *db)
1419 CODE:
1420 if (db)
1421 {
1422 SV *env = (SV *)db->app_private;
1423 db->close (db, 0);
1424 SvREFCNT_dec (env);
1425 }
1426
1110int set_cachesize (DB *db, U32 gbytes, U32 bytes, int ncache = 0) 1427int set_cachesize (DB *db, U32 gbytes, U32 bytes, int ncache = 0)
1111 CODE: 1428 CODE:
1112 RETVAL = db->set_cachesize (db, gbytes, bytes, ncache); 1429 RETVAL = db->set_cachesize (db, gbytes, bytes, ncache);
1113 OUTPUT: 1430 OUTPUT:
1114 RETVAL 1431 RETVAL
1178 CODE: 1495 CODE:
1179 RETVAL = db->set_q_extentsize (db, extentsize); 1496 RETVAL = db->set_q_extentsize (db, extentsize);
1180 OUTPUT: 1497 OUTPUT:
1181 RETVAL 1498 RETVAL
1182 1499
1500DBC *
1501cursor (DB *db, DB_TXN_ornull *txn = 0, U32 flags = 0)
1502 CODE:
1503 errno = db->cursor (db, txn, &RETVAL, flags);
1504 if (errno)
1505 croak ("DB->cursor: %s", db_strerror (errno));
1506 OUTPUT:
1507 RETVAL
1183 1508
1509
1510MODULE = BDB PACKAGE = BDB::Txn
1511
1512void
1513DESTROY (DB_TXN_ornull *txn)
1514 CODE:
1515 if (txn)
1516 txn->abort (txn);
1517
1518int set_timeout (DB_TXN *txn, NV timeout, U32 flags)
1519 CODE:
1520 RETVAL = txn->set_timeout (txn, timeout * 1000000, flags);
1521 OUTPUT:
1522 RETVAL
1523
1524
1525MODULE = BDB PACKAGE = BDB::Cursor
1526
1527void
1528DESTROY (DBC_ornull *dbc)
1529 CODE:
1530 if (dbc)
1531 dbc->c_close (dbc);
1532

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines