5113
5127
/* --------------------------------------------------------------------- */
5114
5128
/* REPLICATION METHODS: Base Replication */
5132
DBEnv_rep_process_message(DBEnvObject* self, PyObject* args)
5135
PyObject *control_py, *rec_py;
5142
if (!PyArg_ParseTuple(args, "OOi:rep_process_message", &control_py,
5145
CHECK_ENV_NOT_CLOSED(self);
5147
if (!make_dbt(control_py, &control))
5149
if (!make_dbt(rec_py, &rec))
5152
MYDB_BEGIN_ALLOW_THREADS;
5154
err = self->db_env->rep_process_message(self->db_env, &control, &rec,
5158
err = self->db_env->rep_process_message(self->db_env, &control, &rec,
5161
err = self->db_env->rep_process_message(self->db_env, &control, &rec,
5165
MYDB_END_ALLOW_THREADS;
5167
case DB_REP_NEWMASTER :
5168
return Py_BuildValue("(iO)", envid, Py_None);
5171
case DB_REP_DUPMASTER :
5172
case DB_REP_HOLDELECTION :
5174
case DB_REP_IGNORE :
5175
case DB_REP_JOIN_FAILURE :
5177
return Py_BuildValue("(iO)", err, Py_None);
5179
case DB_REP_NEWSITE :
5183
if (!(tmp = PyBytes_FromStringAndSize(rec.data, rec.size))) {
5187
r = Py_BuildValue("(iO)", err, tmp);
5193
case DB_REP_NOTPERM :
5194
case DB_REP_ISPERM :
5195
return Py_BuildValue("(i(ll))", err, lsn.file, lsn.offset);
5200
return Py_BuildValue("(OO)", Py_None, Py_None);
5204
_DBEnv_rep_transportCallback(DB_ENV* db_env, const DBT* control, const DBT* rec,
5205
const DB_LSN *lsn, int envid, u_int32_t flags)
5208
PyObject* rep_transport;
5211
PyObject* result = NULL;
5214
MYDB_BEGIN_BLOCK_THREADS;
5215
dbenv = (DBEnvObject *)db_env->app_private;
5216
rep_transport = dbenv->rep_transport;
5219
** The errors in 'a' or 'b' are detected in "Py_BuildValue".
5221
a = PyBytes_FromStringAndSize(control->data, control->size);
5222
b = PyBytes_FromStringAndSize(rec->data, rec->size);
5224
args = Py_BuildValue(
5225
#if (PY_VERSION_HEX >= 0x02040000)
5232
lsn->file, lsn->offset, envid, flags);
5234
result = PyEval_CallObject(rep_transport, args);
5237
if ((!args) || (!result)) {
5245
MYDB_END_BLOCK_THREADS;
5251
_DBEnv_rep_transportCallbackOLD(DB_ENV* db_env, const DBT* control, const DBT* rec,
5252
int envid, u_int32_t flags)
5256
lsn.file = -1; /* Dummy values */
5258
return _DBEnv_rep_transportCallback(db_env, control, rec, &lsn, envid,
5264
DBEnv_rep_set_transport(DBEnvObject* self, PyObject* args)
5268
PyObject *rep_transport;
5270
if (!PyArg_ParseTuple(args, "iO:rep_set_transport", &envid, &rep_transport))
5272
CHECK_ENV_NOT_CLOSED(self);
5273
if (!PyCallable_Check(rep_transport)) {
5274
makeTypeError("Callable", rep_transport);
5278
MYDB_BEGIN_ALLOW_THREADS;
5280
err = self->db_env->rep_set_transport(self->db_env, envid,
5281
&_DBEnv_rep_transportCallback);
5284
err = self->db_env->set_rep_transport(self->db_env, envid,
5285
&_DBEnv_rep_transportCallback);
5287
err = self->db_env->set_rep_transport(self->db_env, envid,
5288
&_DBEnv_rep_transportCallbackOLD);
5291
MYDB_END_ALLOW_THREADS;
5294
Py_DECREF(self->rep_transport);
5295
Py_INCREF(rep_transport);
5296
self->rep_transport = rep_transport;
5302
DBEnv_rep_set_request(DBEnvObject* self, PyObject* args)
5305
unsigned int minimum, maximum;
5307
if (!PyArg_ParseTuple(args,"II:rep_set_request", &minimum, &maximum))
5309
CHECK_ENV_NOT_CLOSED(self);
5311
MYDB_BEGIN_ALLOW_THREADS;
5312
err = self->db_env->rep_set_request(self->db_env, minimum, maximum);
5313
MYDB_END_ALLOW_THREADS;
5319
DBEnv_rep_get_request(DBEnvObject* self)
5322
u_int32_t minimum, maximum;
5324
CHECK_ENV_NOT_CLOSED(self);
5325
MYDB_BEGIN_ALLOW_THREADS;
5326
err = self->db_env->rep_get_request(self->db_env, &minimum, &maximum);
5327
MYDB_END_ALLOW_THREADS;
5329
#if (PY_VERSION_HEX >= 0x02040000)
5330
return Py_BuildValue("II", minimum, maximum);
5332
return Py_BuildValue("ii", minimum, maximum);
5339
DBEnv_rep_set_limit(DBEnvObject* self, PyObject* args)
5344
if (!PyArg_ParseTuple(args,"i:rep_set_limit", &limit))
5346
CHECK_ENV_NOT_CLOSED(self);
5348
MYDB_BEGIN_ALLOW_THREADS;
5349
err = self->db_env->rep_set_limit(self->db_env, 0, limit);
5350
MYDB_END_ALLOW_THREADS;
5356
DBEnv_rep_get_limit(DBEnvObject* self)
5359
u_int32_t gbytes, bytes;
5361
CHECK_ENV_NOT_CLOSED(self);
5362
MYDB_BEGIN_ALLOW_THREADS;
5363
err = self->db_env->rep_get_limit(self->db_env, &gbytes, &bytes);
5364
MYDB_END_ALLOW_THREADS;
5366
return NUMBER_FromLong(bytes);
5372
DBEnv_rep_set_config(DBEnvObject* self, PyObject* args)
5378
if (!PyArg_ParseTuple(args,"ii:rep_set_config", &which, &onoff))
5380
CHECK_ENV_NOT_CLOSED(self);
5382
MYDB_BEGIN_ALLOW_THREADS;
5383
err = self->db_env->rep_set_config(self->db_env, which, onoff);
5384
MYDB_END_ALLOW_THREADS;
5390
DBEnv_rep_get_config(DBEnvObject* self, PyObject* args)
5396
if (!PyArg_ParseTuple(args, "i:rep_get_config", &which)) {
5399
CHECK_ENV_NOT_CLOSED(self);
5400
MYDB_BEGIN_ALLOW_THREADS;
5401
err = self->db_env->rep_get_config(self->db_env, which, &onoff);
5402
MYDB_END_ALLOW_THREADS;
5404
return PyBool_FromLong(onoff);
5410
DBEnv_rep_elect(DBEnvObject* self, PyObject* args)
5413
u_int32_t nsites, nvotes;
5415
if (!PyArg_ParseTuple(args, "II:rep_elect", &nsites, &nvotes)) {
5418
CHECK_ENV_NOT_CLOSED(self);
5419
MYDB_BEGIN_ALLOW_THREADS;
5420
err = self->db_env->rep_elect(self->db_env, nvotes, nvotes, 0);
5421
MYDB_END_ALLOW_THREADS;
5428
DBEnv_rep_start(DBEnvObject* self, PyObject* args, PyObject* kwargs)
5431
PyObject *cdata_py = Py_None;
5434
static char* kwnames[] = {"flags","cdata", NULL};
5436
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
5437
"i|O:rep_start", kwnames, &flags, &cdata_py))
5441
CHECK_ENV_NOT_CLOSED(self);
5443
if (!make_dbt(cdata_py, &cdata))
5446
MYDB_BEGIN_ALLOW_THREADS;
5447
err = self->db_env->rep_start(self->db_env, cdata.size ? &cdata : NULL,
5449
MYDB_END_ALLOW_THREADS;
5456
DBEnv_rep_sync(DBEnvObject* self)
5460
CHECK_ENV_NOT_CLOSED(self);
5461
MYDB_BEGIN_ALLOW_THREADS;
5462
err = self->db_env->rep_sync(self->db_env, 0);
5463
MYDB_END_ALLOW_THREADS;
5116
5470
#if (DBVER >= 45)
5117
5471
static PyObject*
5118
5472
DBEnv_rep_set_nsites(DBEnvObject* self, PyObject* args)
6049
6339
/* Method definition tables and type objects */
6051
6341
static PyMethodDef DB_methods[] = {
6052
{"append", (PyCFunction)DB_append, METH_VARARGS},
6342
{"append", (PyCFunction)DB_append, METH_VARARGS|METH_KEYWORDS},
6054
6343
{"associate", (PyCFunction)DB_associate, METH_VARARGS|METH_KEYWORDS},
6056
6344
{"close", (PyCFunction)DB_close, METH_VARARGS},
6057
6345
{"consume", (PyCFunction)DB_consume, METH_VARARGS|METH_KEYWORDS},
6058
6346
{"consume_wait", (PyCFunction)DB_consume_wait, METH_VARARGS|METH_KEYWORDS},
6059
6347
{"cursor", (PyCFunction)DB_cursor, METH_VARARGS|METH_KEYWORDS},
6060
6348
{"delete", (PyCFunction)DB_delete, METH_VARARGS|METH_KEYWORDS},
6061
{"fd", (PyCFunction)DB_fd, METH_VARARGS},
6349
{"fd", (PyCFunction)DB_fd, METH_NOARGS},
6062
6350
{"get", (PyCFunction)DB_get, METH_VARARGS|METH_KEYWORDS},
6064
6351
{"pget", (PyCFunction)DB_pget, METH_VARARGS|METH_KEYWORDS},
6066
6352
{"get_both", (PyCFunction)DB_get_both, METH_VARARGS|METH_KEYWORDS},
6067
{"get_byteswapped", (PyCFunction)DB_get_byteswapped,METH_VARARGS},
6353
{"get_byteswapped", (PyCFunction)DB_get_byteswapped,METH_NOARGS},
6068
6354
{"get_size", (PyCFunction)DB_get_size, METH_VARARGS|METH_KEYWORDS},
6069
{"get_type", (PyCFunction)DB_get_type, METH_VARARGS},
6355
{"get_type", (PyCFunction)DB_get_type, METH_NOARGS},
6070
6356
{"join", (PyCFunction)DB_join, METH_VARARGS},
6071
6357
{"key_range", (PyCFunction)DB_key_range, METH_VARARGS|METH_KEYWORDS},
6072
{"has_key", (PyCFunction)DB_has_key, METH_VARARGS},
6358
{"has_key", (PyCFunction)DB_has_key, METH_VARARGS|METH_KEYWORDS},
6073
6359
{"items", (PyCFunction)DB_items, METH_VARARGS},
6074
6360
{"keys", (PyCFunction)DB_keys, METH_VARARGS},
6075
6361
{"open", (PyCFunction)DB_open, METH_VARARGS|METH_KEYWORDS},
6093
6377
{"set_re_len", (PyCFunction)DB_set_re_len, METH_VARARGS},
6094
6378
{"set_re_pad", (PyCFunction)DB_set_re_pad, METH_VARARGS},
6095
6379
{"set_re_source", (PyCFunction)DB_set_re_source, METH_VARARGS},
6096
{"set_q_extentsize",(PyCFunction)DB_set_q_extentsize,METH_VARARGS},
6380
{"set_q_extentsize",(PyCFunction)DB_set_q_extentsize, METH_VARARGS},
6381
{"set_private", (PyCFunction)DB_set_private, METH_O},
6382
{"get_private", (PyCFunction)DB_get_private, METH_NOARGS},
6097
6383
{"stat", (PyCFunction)DB_stat, METH_VARARGS|METH_KEYWORDS},
6098
6384
{"sync", (PyCFunction)DB_sync, METH_VARARGS},
6100
6385
{"truncate", (PyCFunction)DB_truncate, METH_VARARGS|METH_KEYWORDS},
6102
{"type", (PyCFunction)DB_get_type, METH_VARARGS},
6386
{"type", (PyCFunction)DB_get_type, METH_NOARGS},
6103
6387
{"upgrade", (PyCFunction)DB_upgrade, METH_VARARGS},
6104
6388
{"values", (PyCFunction)DB_values, METH_VARARGS},
6105
6389
{"verify", (PyCFunction)DB_verify, METH_VARARGS|METH_KEYWORDS},
6118
6402
static PyMethodDef DBCursor_methods[] = {
6119
{"close", (PyCFunction)DBC_close, METH_VARARGS},
6403
{"close", (PyCFunction)DBC_close, METH_NOARGS},
6120
6404
{"count", (PyCFunction)DBC_count, METH_VARARGS},
6121
6405
{"current", (PyCFunction)DBC_current, METH_VARARGS|METH_KEYWORDS},
6122
6406
{"delete", (PyCFunction)DBC_delete, METH_VARARGS},
6123
6407
{"dup", (PyCFunction)DBC_dup, METH_VARARGS},
6124
6408
{"first", (PyCFunction)DBC_first, METH_VARARGS|METH_KEYWORDS},
6125
6409
{"get", (PyCFunction)DBC_get, METH_VARARGS|METH_KEYWORDS},
6127
6410
{"pget", (PyCFunction)DBC_pget, METH_VARARGS|METH_KEYWORDS},
6129
{"get_recno", (PyCFunction)DBC_get_recno, METH_VARARGS},
6411
{"get_recno", (PyCFunction)DBC_get_recno, METH_NOARGS},
6130
6412
{"last", (PyCFunction)DBC_last, METH_VARARGS|METH_KEYWORDS},
6131
6413
{"next", (PyCFunction)DBC_next, METH_VARARGS|METH_KEYWORDS},
6132
6414
{"prev", (PyCFunction)DBC_prev, METH_VARARGS|METH_KEYWORDS},
6190
6468
{"set_tx_timestamp", (PyCFunction)DBEnv_set_tx_timestamp, METH_VARARGS},
6191
6469
{"lock_detect", (PyCFunction)DBEnv_lock_detect, METH_VARARGS},
6192
6470
{"lock_get", (PyCFunction)DBEnv_lock_get, METH_VARARGS},
6193
{"lock_id", (PyCFunction)DBEnv_lock_id, METH_VARARGS},
6471
{"lock_id", (PyCFunction)DBEnv_lock_id, METH_NOARGS},
6195
6472
{"lock_id_free", (PyCFunction)DBEnv_lock_id_free, METH_VARARGS},
6197
6473
{"lock_put", (PyCFunction)DBEnv_lock_put, METH_VARARGS},
6198
6474
{"lock_stat", (PyCFunction)DBEnv_lock_stat, METH_VARARGS},
6199
6475
{"log_archive", (PyCFunction)DBEnv_log_archive, METH_VARARGS},
6201
{"log_flush", (PyCFunction)DBEnv_log_flush, METH_VARARGS},
6476
{"log_flush", (PyCFunction)DBEnv_log_flush, METH_NOARGS},
6204
6477
{"log_stat", (PyCFunction)DBEnv_log_stat, METH_VARARGS},
6206
6478
#if (DBVER >= 44)
6207
6479
{"lsn_reset", (PyCFunction)DBEnv_lsn_reset, METH_VARARGS|METH_KEYWORDS},
6209
6481
{"set_get_returns_none",(PyCFunction)DBEnv_set_get_returns_none, METH_VARARGS},
6211
{"txn_recover", (PyCFunction)DBEnv_txn_recover, METH_VARARGS},
6482
{"txn_recover", (PyCFunction)DBEnv_txn_recover, METH_NOARGS},
6214
6483
{"set_rpc_server", (PyCFunction)DBEnv_set_rpc_server,
6215
6484
METH_VARARGS||METH_KEYWORDS},
6218
6485
{"set_verbose", (PyCFunction)DBEnv_set_verbose, METH_VARARGS},
6219
6486
#if (DBVER >= 42)
6220
6487
{"get_verbose", (PyCFunction)DBEnv_get_verbose, METH_VARARGS},
6224
{"set_event_notify", (PyCFunction)DBEnv_set_event_notify, METH_VARARGS},
6489
{"set_private", (PyCFunction)DBEnv_set_private, METH_O},
6490
{"get_private", (PyCFunction)DBEnv_get_private, METH_NOARGS},
6491
{"rep_start", (PyCFunction)DBEnv_rep_start,
6492
METH_VARARGS|METH_KEYWORDS},
6493
{"rep_set_transport", (PyCFunction)DBEnv_rep_set_transport, METH_VARARGS},
6494
{"rep_process_message", (PyCFunction)DBEnv_rep_process_message,
6497
{"rep_elect", (PyCFunction)DBEnv_rep_elect, METH_VARARGS},
6500
{"rep_set_config", (PyCFunction)DBEnv_rep_set_config, METH_VARARGS},
6501
{"rep_get_config", (PyCFunction)DBEnv_rep_get_config, METH_VARARGS},
6502
{"rep_sync", (PyCFunction)DBEnv_rep_sync, METH_NOARGS},
6505
{"rep_set_limit", (PyCFunction)DBEnv_rep_set_limit, METH_VARARGS},
6506
{"rep_get_limit", (PyCFunction)DBEnv_rep_get_limit, METH_NOARGS},
6509
{"rep_set_request", (PyCFunction)DBEnv_rep_set_request, METH_VARARGS},
6510
{"rep_get_request", (PyCFunction)DBEnv_rep_get_request, METH_NOARGS},
6513
{"set_event_notify", (PyCFunction)DBEnv_set_event_notify, METH_O},
6226
6515
#if (DBVER >= 45)
6227
6516
{"rep_set_nsites", (PyCFunction)DBEnv_rep_set_nsites, METH_VARARGS},
6228
{"rep_get_nsites", (PyCFunction)DBEnv_rep_get_nsites, METH_VARARGS},
6517
{"rep_get_nsites", (PyCFunction)DBEnv_rep_get_nsites, METH_NOARGS},
6229
6518
{"rep_set_priority", (PyCFunction)DBEnv_rep_set_priority, METH_VARARGS},
6230
{"rep_get_priority", (PyCFunction)DBEnv_rep_get_priority, METH_VARARGS},
6519
{"rep_get_priority", (PyCFunction)DBEnv_rep_get_priority, METH_NOARGS},
6231
6520
{"rep_set_timeout", (PyCFunction)DBEnv_rep_set_timeout, METH_VARARGS},
6232
6521
{"rep_get_timeout", (PyCFunction)DBEnv_rep_get_timeout, METH_VARARGS},
6269
6558
static PyMethodDef DBSequence_methods[] = {
6270
6559
{"close", (PyCFunction)DBSequence_close, METH_VARARGS},
6271
6560
{"get", (PyCFunction)DBSequence_get, METH_VARARGS|METH_KEYWORDS},
6272
{"get_dbp", (PyCFunction)DBSequence_get_dbp, METH_VARARGS},
6273
{"get_key", (PyCFunction)DBSequence_get_key, METH_VARARGS},
6561
{"get_dbp", (PyCFunction)DBSequence_get_dbp, METH_NOARGS},
6562
{"get_key", (PyCFunction)DBSequence_get_key, METH_NOARGS},
6274
6563
{"init_value", (PyCFunction)DBSequence_init_value, METH_VARARGS},
6275
6564
{"open", (PyCFunction)DBSequence_open, METH_VARARGS|METH_KEYWORDS},
6276
6565
{"remove", (PyCFunction)DBSequence_remove, METH_VARARGS|METH_KEYWORDS},
6277
6566
{"set_cachesize", (PyCFunction)DBSequence_set_cachesize, METH_VARARGS},
6278
{"get_cachesize", (PyCFunction)DBSequence_get_cachesize, METH_VARARGS},
6567
{"get_cachesize", (PyCFunction)DBSequence_get_cachesize, METH_NOARGS},
6279
6568
{"set_flags", (PyCFunction)DBSequence_set_flags, METH_VARARGS},
6280
{"get_flags", (PyCFunction)DBSequence_get_flags, METH_VARARGS},
6569
{"get_flags", (PyCFunction)DBSequence_get_flags, METH_NOARGS},
6281
6570
{"set_range", (PyCFunction)DBSequence_set_range, METH_VARARGS},
6282
{"get_range", (PyCFunction)DBSequence_get_range, METH_VARARGS},
6571
{"get_range", (PyCFunction)DBSequence_get_range, METH_NOARGS},
6283
6572
{"stat", (PyCFunction)DBSequence_stat, METH_VARARGS|METH_KEYWORDS},
6284
6573
{NULL, NULL} /* sentinel */
6289
6578
static PyObject*
6290
DB_getattr(DBObject* self, char *name)
6292
return Py_FindMethod(DB_methods, (PyObject* )self, name);
6297
DBEnv_getattr(DBEnvObject* self, char *name)
6299
if (!strcmp(name, "db_home")) {
6300
const char *home = NULL;
6301
CHECK_ENV_NOT_CLOSED(self);
6579
DBEnv_db_home_get(DBEnvObject* self)
6581
const char *home = NULL;
6583
CHECK_ENV_NOT_CLOSED(self);
6302
6585
#if (DBVER >= 42)
6303
self->db_env->get_home(self->db_env, &home);
6586
self->db_env->get_home(self->db_env, &home);
6305
home=self->db_env->db_home;
6588
home=self->db_env->db_home;
6310
return PyBytes_FromString(home);
6313
return Py_FindMethod(DBEnv_methods, (PyObject* )self, name);
6318
DBCursor_getattr(DBCursorObject* self, char *name)
6320
return Py_FindMethod(DBCursor_methods, (PyObject* )self, name);
6324
DBTxn_getattr(DBTxnObject* self, char *name)
6326
return Py_FindMethod(DBTxn_methods, (PyObject* )self, name);
6330
DBLock_getattr(DBLockObject* self, char *name)
6337
DBSequence_getattr(DBSequenceObject* self, char *name)
6339
return Py_FindMethod(DBSequence_methods, (PyObject* )self, name);
6594
return PyBytes_FromString(home);
6597
static PyGetSetDef DBEnv_getsets[] = {
6598
{"db_home", (getter)DBEnv_db_home_get, NULL,},
6343
6603
statichere PyTypeObject DB_Type = {
6604
#if (PY_VERSION_HEX < 0x03000000)
6344
6605
PyObject_HEAD_INIT(NULL)
6608
PyVarObject_HEAD_INIT(NULL, 0)
6346
6610
"DB", /*tp_name*/
6347
6611
sizeof(DBObject), /*tp_basicsize*/
6348
6612
0, /*tp_itemsize*/
6350
6614
(destructor)DB_dealloc, /*tp_dealloc*/
6352
(getattrfunc)DB_getattr, /*tp_getattr*/
6354
6618
0, /*tp_compare*/
6356
6620
0, /*tp_as_number*/
6360
6624
0, /* tp_call */
6361
6625
0, /* tp_str */
6362
6626
0, /* tp_getattro */
6363
0, /* tp_setattro */
6627
0, /* tp_setattro */
6364
6628
0, /* tp_as_buffer */
6629
#if (PY_VERSION_HEX < 0x03000000)
6365
6630
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_WEAKREFS, /* tp_flags */
6367
0, /* tp_traverse */
6632
Py_TPFLAGS_DEFAULT, /* tp_flags */
6635
0, /* tp_traverse */
6368
6636
0, /* tp_clear */
6369
6637
0, /* tp_richcompare */
6370
6638
offsetof(DBObject, in_weakreflist), /* tp_weaklistoffset */
6641
DB_methods, /*tp_methods*/
6374
6646
statichere PyTypeObject DBCursor_Type = {
6647
#if (PY_VERSION_HEX < 0x03000000)
6375
6648
PyObject_HEAD_INIT(NULL)
6651
PyVarObject_HEAD_INIT(NULL, 0)
6377
6653
"DBCursor", /*tp_name*/
6378
6654
sizeof(DBCursorObject), /*tp_basicsize*/
6381
6657
(destructor)DBCursor_dealloc,/*tp_dealloc*/
6383
(getattrfunc)DBCursor_getattr, /*tp_getattr*/
6388
0, /*tp_as_sequence*/
6389
0, /*tp_as_mapping*/
6393
0, /* tp_getattro */
6394
0, /* tp_setattro */
6395
0, /* tp_as_buffer */
6664
0, /*tp_as_sequence*/
6665
0, /*tp_as_mapping*/
6672
#if (PY_VERSION_HEX < 0x03000000)
6396
6673
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_WEAKREFS, /* tp_flags */
6398
0, /* tp_traverse */
6400
0, /* tp_richcompare */
6675
Py_TPFLAGS_DEFAULT, /* tp_flags */
6678
0, /* tp_traverse */
6680
0, /* tp_richcompare */
6401
6681
offsetof(DBCursorObject, in_weakreflist), /* tp_weaklistoffset */
6684
DBCursor_methods, /*tp_methods*/
6405
6689
statichere PyTypeObject DBEnv_Type = {
6690
#if (PY_VERSION_HEX < 0x03000000)
6406
6691
PyObject_HEAD_INIT(NULL)
6694
PyVarObject_HEAD_INIT(NULL, 0)
6408
6696
"DBEnv", /*tp_name*/
6409
6697
sizeof(DBEnvObject), /*tp_basicsize*/
6410
6698
0, /*tp_itemsize*/
6412
6700
(destructor)DBEnv_dealloc, /*tp_dealloc*/
6413
6701
0, /*tp_print*/
6414
(getattrfunc)DBEnv_getattr, /*tp_getattr*/
6415
6703
0, /*tp_setattr*/
6416
6704
0, /*tp_compare*/
6580
6909
underlying DB library.";
6582
6911
static PyObject*
6583
bsddb_version(PyObject* self, PyObject* args)
6912
bsddb_version(PyObject* self)
6585
6914
int major, minor, patch;
6587
if (!PyArg_ParseTuple(args, ":version"))
6589
db_version(&major, &minor, &patch);
6590
return Py_BuildValue("(iii)", major, minor, patch);
6916
db_version(&major, &minor, &patch);
6917
return Py_BuildValue("(iii)", major, minor, patch);
6594
6921
/* List of functions defined in the module */
6596
6922
static PyMethodDef bsddb_methods[] = {
6597
6923
{"DB", (PyCFunction)DB_construct, METH_VARARGS | METH_KEYWORDS },
6598
6924
{"DBEnv", (PyCFunction)DBEnv_construct, METH_VARARGS},
6600
6926
{"DBSequence", (PyCFunction)DBSequence_construct, METH_VARARGS | METH_KEYWORDS },
6602
{"version", (PyCFunction)bsddb_version, METH_VARARGS, bsddb_version_doc},
6928
{"version", (PyCFunction)bsddb_version, METH_NOARGS, bsddb_version_doc},
6603
6929
{NULL, NULL} /* sentinel */
6606
6933
/* API structure */
6607
6934
static BSDDB_api bsddb_api;