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

Comparing BDB/BDB.xs (file contents):
Revision 1.6 by root, Tue Feb 6 01:09:04 2007 UTC vs.
Revision 1.10 by root, Mon Mar 5 19:47:01 2007 UTC

24#include <limits.h> 24#include <limits.h>
25#include <unistd.h> 25#include <unistd.h>
26#include <fcntl.h> 26#include <fcntl.h>
27 27
28#include <db.h> 28#include <db.h>
29
30#if DB_VERSION_MAJOR < 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 5)
31# error you need Berkeley DB 4.5 or newer installed
32#endif
29 33
30/* number of seconds after which idle threads exit */ 34/* number of seconds after which idle threads exit */
31#define IDLE_TIMEOUT 10 35#define IDLE_TIMEOUT 10
32 36
33/* wether word reads are potentially non-atomic. 37/* wether word reads are potentially non-atomic.
40# else 44# else
41# define WORDACCESS_UNSAFE 1 45# define WORDACCESS_UNSAFE 1
42# endif 46# endif
43#endif 47#endif
44 48
45typedef DB_ENV DB_ENV_ornull; 49typedef DB_ENV DB_ENV_ornull;
46typedef DB_TXN DB_TXN_ornull; 50typedef DB_TXN DB_TXN_ornull;
47typedef DBC DBC_ornull; 51typedef DBC DBC_ornull;
48typedef DB DB_ornull; 52typedef DB DB_ornull;
53typedef DB_SEQUENCE DB_SEQUENCE_ornull;
49 54
50typedef SV SV8; /* byte-sv, used for argument-checking */ 55typedef SV SV8; /* byte-sv, used for argument-checking */
51typedef char *octetstring; 56typedef char *octetstring;
52 57
53static SV *prepare_cb; 58static SV *prepare_cb;
83 free (dbt->data); 88 free (dbt->data);
84} 89}
85 90
86enum { 91enum {
87 REQ_QUIT, 92 REQ_QUIT,
88 REQ_ENV_OPEN, REQ_ENV_CLOSE, 93 REQ_ENV_OPEN, REQ_ENV_CLOSE, REQ_ENV_TXN_CHECKPOINT, REQ_ENV_LOCK_DETECT,
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, 94 REQ_ENV_MEMP_SYNC, REQ_ENV_MEMP_TRICKLE,
95 REQ_DB_OPEN, REQ_DB_CLOSE, REQ_DB_COMPACT, REQ_DB_SYNC,
96 REQ_DB_PUT, REQ_DB_GET, REQ_DB_PGET, REQ_DB_DEL, REQ_DB_KEY_RANGE,
90 REQ_TXN_COMMIT, REQ_TXN_ABORT, 97 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, 98 REQ_C_CLOSE, REQ_C_COUNT, REQ_C_PUT, REQ_C_GET, REQ_C_PGET, REQ_C_DEL,
99 REQ_SEQ_OPEN, REQ_SEQ_CLOSE, REQ_SEQ_GET, REQ_SEQ_REMOVE,
92}; 100};
93 101
94typedef struct aio_cb 102typedef struct aio_cb
95{ 103{
96 struct aio_cb *volatile next; 104 struct aio_cb *volatile next;
107 U32 uint1, uint2; 115 U32 uint1, uint2;
108 char *buf1, *buf2; 116 char *buf1, *buf2;
109 SV *sv1, *sv2, *sv3; 117 SV *sv1, *sv2, *sv3;
110 118
111 DBT dbt1, dbt2, dbt3; 119 DBT dbt1, dbt2, dbt3;
120 DB_KEY_RANGE key_range;
121 DB_SEQUENCE *seq;
122 db_seq_t seq_t;
112} aio_cb; 123} aio_cb;
113 124
114typedef aio_cb *aio_req; 125typedef aio_cb *aio_req;
115 126
116enum { 127enum {
293 if (SvOK (req->callback)) 304 if (SvOK (req->callback))
294 { 305 {
295 ENTER; 306 ENTER;
296 SAVETMPS; 307 SAVETMPS;
297 PUSHMARK (SP); 308 PUSHMARK (SP);
298 EXTEND (SP, 1);
299 309
300 switch (req->type) 310 switch (req->type)
301 { 311 {
302 case REQ_DB_CLOSE: 312 case REQ_DB_CLOSE:
303 SvREFCNT_dec (req->sv1); 313 SvREFCNT_dec (req->sv1);
311 case REQ_C_GET: 321 case REQ_C_GET:
312 case REQ_C_PGET: 322 case REQ_C_PGET:
313 dbt_to_sv (req->sv1, &req->dbt1); 323 dbt_to_sv (req->sv1, &req->dbt1);
314 dbt_to_sv (req->sv2, &req->dbt2); 324 dbt_to_sv (req->sv2, &req->dbt2);
315 dbt_to_sv (req->sv3, &req->dbt3); 325 dbt_to_sv (req->sv3, &req->dbt3);
326 break;
327
328 case REQ_DB_KEY_RANGE:
329 {
330 AV *av = newAV ();
331
332 av_push (av, newSVnv (req->key_range.less));
333 av_push (av, newSVnv (req->key_range.equal));
334 av_push (av, newSVnv (req->key_range.greater));
335
336 SvREADONLY_off (req->sv1);
337 sv_setsv_mg (req->sv1, newRV_noinc ((SV *)av));
338 SvREFCNT_dec (req->sv1);
339 }
340 break;
341
342 case REQ_SEQ_GET:
343 SvREADONLY_off (req->sv1);
344
345 if (sizeof (IV) > 4)
346 sv_setiv_mg (req->sv1, req->seq_t);
347 else
348 sv_setnv_mg (req->sv1, req->seq_t);
349
350 SvREFCNT_dec (req->sv1);
316 break; 351 break;
317 } 352 }
318 353
319 errno = req->result; 354 errno = req->result;
320 355
640 675
641 case REQ_ENV_CLOSE: 676 case REQ_ENV_CLOSE:
642 req->result = req->env->close (req->env, req->uint1); 677 req->result = req->env->close (req->env, req->uint1);
643 break; 678 break;
644 679
680 case REQ_ENV_TXN_CHECKPOINT:
681 req->result = req->env->txn_checkpoint (req->env, req->uint1, req->int1, req->uint2);
682 break;
683
684 case REQ_ENV_LOCK_DETECT:
685 req->result = req->env->lock_detect (req->env, req->uint1, req->uint2, &req->int1);
686 break;
687
688 case REQ_ENV_MEMP_SYNC:
689 req->result = req->env->memp_sync (req->env, 0);
690 break;
691
692 case REQ_ENV_MEMP_TRICKLE:
693 req->result = req->env->memp_trickle (req->env, req->int1, &req->int2);
694 break;
695
645 case REQ_DB_OPEN: 696 case REQ_DB_OPEN:
646 req->result = req->db->open (req->db, req->txn, req->buf1, req->buf2, req->int1, req->uint1, req->int2); 697 req->result = req->db->open (req->db, req->txn, req->buf1, req->buf2, req->int1, req->uint1, req->int2);
647 break; 698 break;
648 699
649 case REQ_DB_CLOSE: 700 case REQ_DB_CLOSE:
670 req->result = req->db->pget (req->db, req->txn, &req->dbt1, &req->dbt2, &req->dbt3, req->uint1); 721 req->result = req->db->pget (req->db, req->txn, &req->dbt1, &req->dbt2, &req->dbt3, req->uint1);
671 break; 722 break;
672 723
673 case REQ_DB_DEL: 724 case REQ_DB_DEL:
674 req->result = req->db->del (req->db, req->txn, &req->dbt1, req->uint1); 725 req->result = req->db->del (req->db, req->txn, &req->dbt1, req->uint1);
726 break;
727
728 case REQ_DB_KEY_RANGE:
729 req->result = req->db->key_range (req->db, req->txn, &req->dbt1, &req->key_range, req->uint1);
675 break; 730 break;
676 731
677 case REQ_TXN_COMMIT: 732 case REQ_TXN_COMMIT:
678 req->result = req->txn->commit (req->txn, req->uint1); 733 req->result = req->txn->commit (req->txn, req->uint1);
679 break; 734 break;
706 req->result = req->dbc->c_pget (req->dbc, &req->dbt1, &req->dbt2, &req->dbt3, req->uint1); 761 req->result = req->dbc->c_pget (req->dbc, &req->dbt1, &req->dbt2, &req->dbt3, req->uint1);
707 break; 762 break;
708 763
709 case REQ_C_DEL: 764 case REQ_C_DEL:
710 req->result = req->dbc->c_del (req->dbc, req->uint1); 765 req->result = req->dbc->c_del (req->dbc, req->uint1);
766 break;
767
768 case REQ_SEQ_OPEN:
769 req->result = req->seq->open (req->seq, req->txn, &req->dbt1, req->uint1);
770 break;
771
772 case REQ_SEQ_CLOSE:
773 req->result = req->seq->close (req->seq, req->uint1);
774 break;
775
776 case REQ_SEQ_GET:
777 req->result = req->seq->get (req->seq, req->txn, req->int1, &req->seq_t, req->uint1);
778 break;
779
780 case REQ_SEQ_REMOVE:
781 req->result = req->seq->remove (req->seq, req->txn, req->uint1);
711 break; 782 break;
712 783
713 default: 784 default:
714 req->result = ENOSYS; 785 req->result = ENOSYS;
715 break; 786 break;
808 879
809#define SvPTR(var, arg, type, class, nullok) \ 880#define SvPTR(var, arg, type, class, nullok) \
810 if (!SvOK (arg)) \ 881 if (!SvOK (arg)) \
811 { \ 882 { \
812 if (!nullok) \ 883 if (!nullok) \
813 Perl_croak (# var " must be a " # class " object, not undef"); \ 884 croak (# var " must be a " # class " object, not undef"); \
814 \ 885 \
815 (var) = 0; \ 886 (var) = 0; \
816 } \ 887 } \
817 else if (sv_derived_from ((arg), # class)) \ 888 else if (sv_derived_from ((arg), # class)) \
818 { \ 889 { \
819 IV tmp = SvIV ((SV*) SvRV (arg)); \ 890 IV tmp = SvIV ((SV*) SvRV (arg)); \
820 (var) = INT2PTR (type, tmp); \ 891 (var) = INT2PTR (type, tmp); \
821 if (!var) \ 892 if (!var) \
822 Perl_croak (# var " is not a valid " # class " object anymore"); \ 893 croak (# var " is not a valid " # class " object anymore"); \
823 } \ 894 } \
824 else \ 895 else \
825 Perl_croak (# var " is not of type " # class); \ 896 croak (# var " is not of type " # class); \
826 \ 897 \
827 898
828static void 899static void
829ptr_nuke (SV *sv) 900ptr_nuke (SV *sv)
830{ 901{
952 const_iv (AFTER) 1023 const_iv (AFTER)
953 const_iv (CURRENT) 1024 const_iv (CURRENT)
954 const_iv (KEYFIRST) 1025 const_iv (KEYFIRST)
955 const_iv (KEYLAST) 1026 const_iv (KEYLAST)
956 const_iv (NODUPDATA) 1027 const_iv (NODUPDATA)
1028
1029 const_iv (FORCE)
1030
1031 const_iv (LOCK_DEFAULT)
1032 const_iv (LOCK_EXPIRE)
1033 const_iv (LOCK_MAXLOCKS)
1034 const_iv (LOCK_MAXWRITE)
1035 const_iv (LOCK_MINLOCKS)
1036 const_iv (LOCK_MINWRITE)
1037 const_iv (LOCK_OLDEST)
1038 const_iv (LOCK_RANDOM)
1039 const_iv (LOCK_YOUNGEST)
1040
1041 const_iv (SEQ_DEC)
1042 const_iv (SEQ_INC)
1043 const_iv (SEQ_WRAP)
957 }; 1044 };
958 1045
959 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) 1046 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; )
960 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); 1047 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
961 1048
1100 PROTOTYPE: & 1187 PROTOTYPE: &
1101 CODE: 1188 CODE:
1102 SvREFCNT_dec (prepare_cb); 1189 SvREFCNT_dec (prepare_cb);
1103 prepare_cb = newSVsv (cb); 1190 prepare_cb = newSVsv (cb);
1104 1191
1192
1105DB_ENV * 1193DB_ENV *
1106db_env_create (U32 env_flags = 0) 1194db_env_create (U32 env_flags = 0)
1107 CODE: 1195 CODE:
1108{ 1196{
1109 errno = db_env_create (&RETVAL, env_flags); 1197 errno = db_env_create (&RETVAL, env_flags);
1115 1203
1116void 1204void
1117db_env_open (DB_ENV *env, octetstring db_home, U32 open_flags, int mode, SV *callback = &PL_sv_undef) 1205db_env_open (DB_ENV *env, octetstring db_home, U32 open_flags, int mode, SV *callback = &PL_sv_undef)
1118 CODE: 1206 CODE:
1119{ 1207{
1208 env->set_thread_count (env, get_nthreads ());
1209
1120 dREQ (REQ_ENV_OPEN); 1210 dREQ (REQ_ENV_OPEN);
1121 req->env = env; 1211 req->env = env;
1122 req->uint1 = open_flags | DB_THREAD; 1212 req->uint1 = open_flags | DB_THREAD;
1123 req->int1 = mode; 1213 req->int1 = mode;
1124 req->buf1 = strdup_ornull (db_home); 1214 req->buf1 = strdup_ornull (db_home);
1133 req->env = env; 1223 req->env = env;
1134 req->uint1 = flags; 1224 req->uint1 = flags;
1135 REQ_SEND; 1225 REQ_SEND;
1136 ptr_nuke (ST (0)); 1226 ptr_nuke (ST (0));
1137} 1227}
1228
1229void
1230db_env_txn_checkpoint (DB_ENV *env, U32 kbyte = 0, U32 min = 0, U32 flags = 0, SV *callback = &PL_sv_undef)
1231 CODE:
1232{
1233 dREQ (REQ_ENV_TXN_CHECKPOINT);
1234 req->env = env;
1235 req->uint1 = kbyte;
1236 req->int1 = min;
1237 req->uint2 = flags;
1238 REQ_SEND;
1239}
1240
1241void
1242db_env_lock_detect (DB_ENV *env, U32 flags = 0, U32 atype = DB_LOCK_DEFAULT, SV *dummy = 0, SV *callback = &PL_sv_undef)
1243 CODE:
1244{
1245 dREQ (REQ_ENV_LOCK_DETECT);
1246 req->env = env;
1247 req->uint1 = flags;
1248 req->uint2 = atype;
1249 REQ_SEND;
1250}
1251
1252void
1253db_env_memp_sync (DB_ENV *env, SV *dummy = 0, SV *callback = &PL_sv_undef)
1254 CODE:
1255{
1256 dREQ (REQ_ENV_MEMP_SYNC);
1257 req->env = env;
1258 REQ_SEND;
1259}
1260
1261void
1262db_env_memp_trickle (DB_ENV *env, int percent, SV *dummy = 0, SV *callback = &PL_sv_undef)
1263 CODE:
1264{
1265 dREQ (REQ_ENV_MEMP_TRICKLE);
1266 req->env = env;
1267 req->int1 = percent;
1268 REQ_SEND;
1269}
1270
1138 1271
1139DB * 1272DB *
1140db_create (DB_ENV *env = 0, U32 flags = 0) 1273db_create (DB_ENV *env = 0, U32 flags = 0)
1141 CODE: 1274 CODE:
1142{ 1275{
1199 req->uint1 = flags; 1332 req->uint1 = flags;
1200 REQ_SEND; 1333 REQ_SEND;
1201} 1334}
1202 1335
1203void 1336void
1337db_key_range (DB *db, DB_TXN_ornull *txn, SV *key, SV *key_range, U32 flags = 0, SV *callback = &PL_sv_undef)
1338 CODE:
1339{
1340 dREQ (REQ_DB_KEY_RANGE);
1341 req->db = db;
1342 req->txn = txn;
1343 sv_to_dbt (&req->dbt1, key);
1344 req->uint1 = flags;
1345 req->sv1 = SvREFCNT_inc (key_range); SvREADONLY_on (key_range);
1346 REQ_SEND;
1347}
1348
1349void
1204db_put (DB *db, DB_TXN_ornull *txn, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef) 1350db_put (DB *db, DB_TXN_ornull *txn, SV *key, SV *data, U32 flags = 0, SV *callback = &PL_sv_undef)
1205 CODE: 1351 CODE:
1206{ 1352{
1207 dREQ (REQ_DB_PUT); 1353 dREQ (REQ_DB_PUT);
1208 req->db = db; 1354 req->db = db;
1369 req->uint1 = flags; 1515 req->uint1 = flags;
1370 REQ_SEND; 1516 REQ_SEND;
1371} 1517}
1372 1518
1373 1519
1520void
1521db_sequence_open (DB_SEQUENCE *seq, DB_TXN_ornull *txnid, SV *key, U32 flags = 0, SV *callback = &PL_sv_undef)
1522 CODE:
1523{
1524 dREQ (REQ_SEQ_OPEN);
1525 req->seq = seq;
1526 req->txn = txnid;
1527 req->uint1 = flags | DB_THREAD;
1528 sv_to_dbt (&req->dbt1, key);
1529 REQ_SEND;
1530}
1531
1532void
1533db_sequence_close (DB_SEQUENCE *seq, U32 flags = 0, SV *callback = &PL_sv_undef)
1534 CODE:
1535{
1536 dREQ (REQ_SEQ_CLOSE);
1537 req->seq = seq;
1538 req->uint1 = flags;
1539 REQ_SEND;
1540 ptr_nuke (ST (0));
1541}
1542
1543void
1544db_sequence_get (DB_SEQUENCE *seq, DB_TXN_ornull *txnid, int delta, SV *seq_value, U32 flags = DB_TXN_NOSYNC, SV *callback = &PL_sv_undef)
1545 CODE:
1546{
1547 dREQ (REQ_SEQ_GET);
1548 req->seq = seq;
1549 req->txn = txnid;
1550 req->int1 = delta;
1551 req->uint1 = flags;
1552 req->sv1 = SvREFCNT_inc (seq_value); SvREADONLY_on (seq_value);
1553 REQ_SEND;
1554}
1555
1556void
1557db_sequence_remove (DB_SEQUENCE *seq, DB_TXN_ornull *txnid = 0, U32 flags = 0, SV *callback = &PL_sv_undef)
1558 CODE:
1559{
1560 dREQ (REQ_SEQ_REMOVE);
1561 req->seq = seq;
1562 req->txn = txnid;
1563 req->uint1 = flags;
1564 REQ_SEND;
1565}
1566
1567
1374MODULE = BDB PACKAGE = BDB::Env 1568MODULE = BDB PACKAGE = BDB::Env
1375 1569
1376void 1570void
1377DESTROY (DB_ENV_ornull *env) 1571DESTROY (DB_ENV_ornull *env)
1378 CODE: 1572 CODE:
1379 if (env) 1573 if (env)
1380 env->close (env, 0); 1574 env->close (env, 0);
1381 1575
1576int set_data_dir (DB_ENV *env, const char *dir)
1577 CODE:
1578 RETVAL = env->set_data_dir (env, dir);
1579 OUTPUT:
1580 RETVAL
1581
1582int set_tmp_dir (DB_ENV *env, const char *dir)
1583 CODE:
1584 RETVAL = env->set_tmp_dir (env, dir);
1585 OUTPUT:
1586 RETVAL
1587
1588int set_lg_dir (DB_ENV *env, const char *dir)
1589 CODE:
1590 RETVAL = env->set_lg_dir (env, dir);
1591 OUTPUT:
1592 RETVAL
1593
1594int set_shm_key (DB_ENV *env, long shm_key)
1595 CODE:
1596 RETVAL = env->set_shm_key (env, shm_key);
1597 OUTPUT:
1598 RETVAL
1599
1382int set_cachesize (DB_ENV *env, U32 gbytes, U32 bytes, int ncache = 0) 1600int set_cachesize (DB_ENV *env, U32 gbytes, U32 bytes, int ncache = 0)
1383 CODE: 1601 CODE:
1384 RETVAL = env->set_cachesize (env, gbytes, bytes, ncache); 1602 RETVAL = env->set_cachesize (env, gbytes, bytes, ncache);
1385 OUTPUT: 1603 OUTPUT:
1386 RETVAL 1604 RETVAL
1398 RETVAL 1616 RETVAL
1399 1617
1400int set_timeout (DB_ENV *env, NV timeout, U32 flags) 1618int set_timeout (DB_ENV *env, NV timeout, U32 flags)
1401 CODE: 1619 CODE:
1402 RETVAL = env->set_timeout (env, timeout * 1000000, flags); 1620 RETVAL = env->set_timeout (env, timeout * 1000000, flags);
1621 OUTPUT:
1622 RETVAL
1623
1624int set_mp_max_openfd (DB_ENV *env, int maxopenfd);
1625 CODE:
1626 RETVAL = env->set_mp_max_openfd (env, maxopenfd);
1627 OUTPUT:
1628 RETVAL
1629
1630int set_mp_max_write (DB_ENV *env, int maxwrite, int maxwrite_sleep);
1631 CODE:
1632 RETVAL = env->set_mp_max_write (env, maxwrite, maxwrite_sleep);
1633 OUTPUT:
1634 RETVAL
1635
1636int set_mp_mmapsize (DB_ENV *env, int mmapsize_mb)
1637 CODE:
1638 RETVAL = env->set_mp_mmapsize (env, ((size_t)mmapsize_mb) << 20);
1639 OUTPUT:
1640 RETVAL
1641
1642int set_lk_detect (DB_ENV *env, U32 detect = DB_LOCK_DEFAULT)
1643 CODE:
1644 RETVAL = env->set_lk_detect (env, detect);
1645 OUTPUT:
1646 RETVAL
1647
1648int set_lk_max_lockers (DB_ENV *env, U32 max)
1649 CODE:
1650 RETVAL = env->set_lk_max_lockers (env, max);
1651 OUTPUT:
1652 RETVAL
1653
1654int set_lk_max_locks (DB_ENV *env, U32 max)
1655 CODE:
1656 RETVAL = env->set_lk_max_locks (env, max);
1657 OUTPUT:
1658 RETVAL
1659
1660int set_lk_max_objects (DB_ENV *env, U32 max)
1661 CODE:
1662 RETVAL = env->set_lk_max_objects (env, max);
1663 OUTPUT:
1664 RETVAL
1665
1666int set_lg_bsize (DB_ENV *env, U32 max)
1667 CODE:
1668 RETVAL = env->set_lg_bsize (env, max);
1669 OUTPUT:
1670 RETVAL
1671
1672int set_lg_max (DB_ENV *env, U32 max)
1673 CODE:
1674 RETVAL = env->set_lg_max (env, max);
1403 OUTPUT: 1675 OUTPUT:
1404 RETVAL 1676 RETVAL
1405 1677
1406DB_TXN * 1678DB_TXN *
1407txn_begin (DB_ENV *env, DB_TXN_ornull *parent = 0, U32 flags = 0) 1679txn_begin (DB_ENV *env, DB_TXN_ornull *parent = 0, U32 flags = 0)
1446 CODE: 1718 CODE:
1447 RETVAL = db->set_lorder (db, lorder); 1719 RETVAL = db->set_lorder (db, lorder);
1448 OUTPUT: 1720 OUTPUT:
1449 RETVAL 1721 RETVAL
1450 1722
1451
1452int set_bt_minkey (DB *db, U32 minkey) 1723int set_bt_minkey (DB *db, U32 minkey)
1453 CODE: 1724 CODE:
1454 RETVAL = db->set_bt_minkey (db, minkey); 1725 RETVAL = db->set_bt_minkey (db, minkey);
1455 OUTPUT: 1726 OUTPUT:
1456 RETVAL 1727 RETVAL
1504 if (errno) 1775 if (errno)
1505 croak ("DB->cursor: %s", db_strerror (errno)); 1776 croak ("DB->cursor: %s", db_strerror (errno));
1506 OUTPUT: 1777 OUTPUT:
1507 RETVAL 1778 RETVAL
1508 1779
1780DB_SEQUENCE *
1781sequence (DB *db, U32 flags = 0)
1782 CODE:
1783{
1784 errno = db_sequence_create (&RETVAL, db, flags);
1785 if (errno)
1786 croak ("db_sequence_create: %s", db_strerror (errno));
1787}
1788 OUTPUT:
1789 RETVAL
1790
1509 1791
1510MODULE = BDB PACKAGE = BDB::Txn 1792MODULE = BDB PACKAGE = BDB::Txn
1511 1793
1512void 1794void
1513DESTROY (DB_TXN_ornull *txn) 1795DESTROY (DB_TXN_ornull *txn)
1528DESTROY (DBC_ornull *dbc) 1810DESTROY (DBC_ornull *dbc)
1529 CODE: 1811 CODE:
1530 if (dbc) 1812 if (dbc)
1531 dbc->c_close (dbc); 1813 dbc->c_close (dbc);
1532 1814
1815MODULE = BDB PACKAGE = BDB::Sequence
1816
1817void
1818DESTROY (DB_SEQUENCE_ornull *seq)
1819 CODE:
1820 if (seq)
1821 seq->close (seq, 0);
1822
1823int initial_value (DB_SEQUENCE *seq, db_seq_t value)
1824 CODE:
1825 RETVAL = seq->initial_value (seq, value);
1826 OUTPUT:
1827 RETVAL
1828
1829int set_cachesize (DB_SEQUENCE *seq, U32 size)
1830 CODE:
1831 RETVAL = seq->set_cachesize (seq, size);
1832 OUTPUT:
1833 RETVAL
1834
1835int set_flags (DB_SEQUENCE *seq, U32 flags)
1836 CODE:
1837 RETVAL = seq->set_flags (seq, flags);
1838 OUTPUT:
1839 RETVAL
1840
1841int set_range (DB_SEQUENCE *seq, db_seq_t min, db_seq_t max)
1842 CODE:
1843 RETVAL = seq->set_range (seq, min, max);
1844 OUTPUT:
1845 RETVAL
1846

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines