RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  [email protected]
  Module: rpm                              Date:   24-Sep-2009 04:59:05
  Branch: HEAD                             Handle: 2009092402590400

  Modified files:
    rpm/js                  rpmdbe-js.c tjs.c
    rpm/js/tscripts         Db.js Dbe.js

  Log:
    - js: open db's within a dbenv.

  Summary:
    Revision    Changes     Path
    1.5         +47 -35     rpm/js/rpmdbe-js.c
    1.56        +2  -2      rpm/js/tjs.c
    1.15        +24 -10     rpm/js/tscripts/Db.js
    1.4         +86 -52     rpm/js/tscripts/Dbe.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/js/rpmdbe-js.c
  ============================================================================
  $ cvs diff -u -r1.4 -r1.5 rpmdbe-js.c
  --- rpm/js/rpmdbe-js.c        24 Sep 2009 00:18:20 -0000      1.4
  +++ rpm/js/rpmdbe-js.c        24 Sep 2009 02:59:04 -0000      1.5
  @@ -39,34 +39,6 @@
   #define rpmdbe_wrappedobject NULL
   
   /* --- helpers */
  -static const char _home[] = "./rpmdb";
  -static int _eflags = DB_CREATE | DB_INIT_LOCK | DB_INIT_MPOOL | DB_INIT_REP 
| DB_INIT_TXN;
  -
  -static uint64_t _cachesize = 1024 * 1024;
  -static int _ncaches = 1;
  -
  -static int rpmdbe_create(DB_ENV ** dbenvp, uint32_t flags)
  -{
  -    FILE * _errfile = stderr;
  -    int _mode = 0;
  -    int ret;
  -
  -    if ((ret = db_env_create(dbenvp, flags)) != 0) {
  -     fprintf(stderr, "db_env_create: %s", db_strerror(ret));
  -     ret = 1;
  -     goto exit;
  -    }
  -
  -    (*dbenvp)->set_errfile(*dbenvp, _errfile);
  -
  -    (*dbenvp)->set_errpfx(*dbenvp, _home);   /* XXX FIXME */
  -
  -    (*dbenvp)->set_cachesize(*dbenvp,
  -     (_cachesize >> 32), (_cachesize & 0xffffffff), _ncaches);
  -
  -exit:
  -    return ret;
  -}
   
   /* --- Object methods */
   
  @@ -220,7 +192,41 @@
   
       if (dbenv->app_private == NULL) {
        int ret = dbenv->remove(dbenv, _home, _flags);
  -     *rval = JSVAL_TRUE;
  +     if (ret) {
  +         dbenv->err(dbenv, ret, "DB_ENV->remove: %s", _home);
  +         goto exit;
  +     } else
  +         *rval = JSVAL_TRUE;
  +    }
  +
  +    ok = JS_TRUE;
  +
  +exit:
  +    return ok;
  +}
  +
  +static JSBool
  +rpmdbe_StatPrint(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, 
jsval *rval)
  +{
  +    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmdbeClass, NULL);
  +    DB_ENV * dbenv = ptr;
  +    uint32_t _flags = DB_STAT_ALL;
  +    JSBool ok = JS_FALSE;
  +
  +_METHOD_DEBUG_ENTRY(_debug);
  +
  +    if (dbenv == NULL) goto exit;
  +    *rval = JSVAL_FALSE;
  +
  +    if (!(ok = JS_ConvertArguments(cx, argc, argv, "/u", &_flags)))
  +     goto exit;
  +
  +    if (dbenv->app_private != NULL) {
  +     int ret = dbenv->stat_print(dbenv, _flags);
  +     if (ret)
  +         dbenv->err(dbenv, ret, "DB_ENV->stat_print");
  +     else
  +         *rval = JSVAL_TRUE;
       }
   
       ok = JS_TRUE;
  @@ -235,6 +241,7 @@
       JS_FS("dbrename",        rpmdbe_Dbrename,        0,0,0),
       JS_FS("open",    rpmdbe_Open,            0,0,0),
       JS_FS("remove",  rpmdbe_Remove,          0,0,0),
  +    JS_FS("stat_print",      rpmdbe_StatPrint,       0,0,0),
       JS_FS_END
   };
   
  @@ -453,8 +460,14 @@
        if (!dbenv->get_data_dirs(dbenv, &_av)
         && (_ac = argvCount(_av)) > 0)
        {
  -         _s = _av[0];        /* XXX FIXME: return array */
  -         *vp = _RET_S(_s);
  +         JSObject * o = JS_NewArrayObject(cx, 0, NULL);
  +         int i;
  +
  +         *vp = OBJECT_TO_JSVAL(o);
  +         for (i = 0; i < _ac; i++) {
  +             jsval v = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, _av[i]));
  +             (void) JS_SetElement(cx, o, i, &v);
  +         }
        } else
            *vp = JSVAL_VOID;
        break;
  @@ -625,7 +638,7 @@
            break;
        break;
       /* dbenv->add_data_dir() */
  -    case _DATADIRS:  break;  /* XXX FIXME */
  +    case _DATADIRS:  *vp = _PUT_S(dbenv->add_data_dir(dbenv, _s));   break;
       case _CREATE_DIR:        *vp = _PUT_S(dbenv->set_create_dir(dbenv, _s)); 
break;
       case _ENCRYPT:   *vp = _PUT_S(dbenv->set_encrypt(dbenv, _s, 
DB_ENCRYPT_AES));    break;
       case _ERRFILE:
  @@ -817,10 +830,9 @@
   {
       DB_ENV * dbenv = NULL;
       uint32_t _flags = 0;
  +    int ret = db_env_create(&dbenv, _flags);
   
  -    if (rpmdbe_create(&dbenv, _flags) || dbenv == NULL
  -     || !JS_SetPrivate(cx, obj, (void *)dbenv))
  -    {
  +    if (ret || dbenv == NULL || !JS_SetPrivate(cx, obj, (void *)dbenv)) {
        if (dbenv)
            (void) dbenv->close(dbenv, _flags);
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/js/tjs.c
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 tjs.c
  --- rpm/js/tjs.c      24 Sep 2009 00:18:20 -0000      1.55
  +++ rpm/js/tjs.c      24 Sep 2009 02:59:04 -0000      1.56
  @@ -76,8 +76,8 @@
       { "Bc",          rpmjs_InitBcClass,       -40 }, /* todo++ */
       { "Bf",          rpmjs_InitBfClass,       -26 },
   
  -    { "Db",          rpmjs_InitDbClass,       -45 },
  -    { "Dbc",         rpmjs_InitDbcClass,      -46 },
  +    { "Db",          rpmjs_InitDbClass,       45 },
  +    { "Dbc",         rpmjs_InitDbcClass,      46 },
       { "Dbe",         rpmjs_InitDbeClass,      44 },
       { "Txn",         rpmjs_InitTxnClass,      -47 },
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/js/tscripts/Db.js
  ============================================================================
  $ cvs diff -u -r1.14 -r1.15 Db.js
  --- rpm/js/tscripts/Db.js     23 Sep 2009 22:33:54 -0000      1.14
  +++ rpm/js/tscripts/Db.js     24 Sep 2009 02:59:04 -0000      1.15
  @@ -232,17 +232,29 @@
   // -------------------------
   
   // -----
  -var dbenv = null;
  -var eoflags = 0;
  +var home = "./rpmdb";
  +var eflags = DB_CREATE | DB_INIT_LOCK | DB_INIT_MPOOL | DB_INIT_REP | 
DB_INIT_TXN;
  +var emode = 0;
  +
  +// var dbenv = null;
  +var dbenv = new Dbe();
  +ack("typeof dbenv;", "object");
  +ack("dbenv instanceof Dbe;", true);
  +ack('dbenv.open(home, eflags, emode)', true);
  +ack('dbenv.home', home);
  +ack('dbenv.open_flags', eflags);
   
  -var errfile = "stdout";
  +var eoflags = 0;
  +var errfile = "stderr";
   var errpfx = "Stuff";
   var pagesize = 1024;
   var cachesize = 1024 * 1024;
   var little_endian = 1234;
   var big_endian = 4321;
   
  -var dbfile = "./rpmdb/Stuff";
  +// var dbfile = home + "/Stuff";
  +var dbfile = "Stuff";
  +
   var dbname = null;
   var oflags = DB_CREATE;
   var dbtype = DB_HASH;
  @@ -259,7 +271,7 @@
   // ack("db.debug = 1;", 1);
   // ack("db.debug = 0;", 0);
   
  -ack('db.errfile', 'stderr');
  +ack('db.errfile', null);
   ack('db.errfile = errfile', true);
   ack('db.errfile', errfile);
   
  @@ -269,7 +281,7 @@
   
   ack('db.lorder', little_endian);
   ack('db.lorder = big_endian', true);
  -ack('db.lorder', big_endian);
  +// ack('db.lorder', big_endian);
   ack('db.lorder = little_endian', true);
   ack('db.lorder', little_endian);
   
  @@ -277,9 +289,10 @@
   ack('db.pagesize = pagesize', true);
   ack('db.pagesize', pagesize);
   
  -ack('db.cachesize', 265564);
  -ack('db.cachesize = cachesize', true);
  -ack('db.cachesize >= cachesize', true);
  +// --- not permitted with dbenv
  +// ack('db.cachesize', 265564);
  +// ack('db.cachesize = cachesize', true);
  +// ack('db.cachesize >= cachesize', true);
   
   h_ffactor = 50;                      // todo: figger the units
   ack('db.h_ffactor', 0);
  @@ -305,7 +318,8 @@
   ack('db.create_dir', null);
   // ack('db.create_dir = "."', true);
   
  -ack('db.encrypt', 0);
  +// --- not permitted with dbenv
  +// ack('db.encrypt', 0);
   // ack('db.encrypt = "xyzzy"', true);
   
   ack('db.flags', 0);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/js/tscripts/Dbe.js
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Dbe.js
  --- rpm/js/tscripts/Dbe.js    24 Sep 2009 00:18:20 -0000      1.3
  +++ rpm/js/tscripts/Dbe.js    24 Sep 2009 02:59:04 -0000      1.4
  @@ -67,54 +67,104 @@
   ack('dbenv.minor', 8);
   ack('dbenv.patch', 24);
   
  -ack('dbenv.open(home, eflags, emode)', true);
  -ack('dbenv.home', home);
  -ack('dbenv.open_flags', eflags);
  +ack('dbenv.errpfx', null);
  +ack('dbenv.errpfx = home', true);
  +ack('dbenv.errpfx', home);
  +
  +ack('dbenv.errfile', null);
  +ack('dbenv.errfile = "stderr"', true);
  +ack('dbenv.errfile', 'stderr');
  +
  +ack('dbenv.cachemax', 265564);
  +ack('dbenv.cachesize', 265564);
  +ack('dbenv.ncaches', 1);
  +
  +ack('dbenv.cachemax = 1318912', true);
  +ack('dbenv.cachesize = 1312348', true);
  +ack('dbenv.ncaches = 2', true);
  +
  +ack('dbenv.cachemax', 1318912);
  +ack('dbenv.cachesize', 2054206);
  +ack('dbenv.ncaches', 2);
  +
  +ack('dbenv.mmapsize', 0);
  +ack('dbenv.mmapsize = 16*1024*1024', true);
  +ack('dbenv.mmapsize', 16*1024*1024);
  +
  +ack('dbenv.thread_count', 0);
  +ack('dbenv.thread_count = 64', true);
  +ack('dbenv.thread_count', 64);
  +
  +ack('dbenv.max_openfd', 0);
  +// ack('dbenv.max_openfd = 100', true);
  +// ack('dbenv.max_openfd', 100);
  +
  +ack('dbenv.shm_key', -1);
  +ack('dbenv.shm_key = 0x1234', true);
  +// ack('dbenv.shm_key', 0x1234);
   
  -ack('dbenv.data_dirs', './data');
  +ack('dbenv.data_dirs', undefined);
   // ack('dbenv.data_dirs = "./data"', true);  // todo++
  +// ack('dbenv.data_dirs', './data');
   
  -ack('dbenv.create_dir', '.');
  +ack('dbenv.create_dir', null);
   // ack('dbenv.create_dir = "."', true);
  +// ack('dbenv.create_dir', '.');
   
  -ack('dbenv.encrypt', 0);
  -// ack('dbenv.encrypt = "xyzzy"', true);
  +ack('dbenv.idirmode', null);
  +ack('dbenv.idirmode = "rwxr-xr-x"', true);
  +ack('dbenv.idirmode', 'rwxr-xr-x');
   
  -ack('dbenv.errfile', 'stderr');
  -// ack('dbenv.errfile = "stdout"', true);
  +ack('dbenv.tmp_dir', null);
  +ack('dbenv.tmp_dir = "./tmp"', true);
  +ack('dbenv.tmp_dir', './tmp');
   
  -ack('dbenv.errpfx', home);
  -// ack('dbenv.errpfx = "foo"', true);
  +ack('dbenv.lg_bsize', 0);
  +ack('dbenv.lg_bsize = 65536', true);
  +ack('dbenv.lg_bsize', 65536);
   
  -ack('dbenv.flags', DB_REGION_INIT);
  -// ack('dbenv.flags = DB_REGION_INIT', true);
  +ack('dbenv.lg_dir', null);
  +ack('dbenv.lg_dir = "./log"', true);
  +ack('dbenv.lg_dir', './log');
   
  -ack('dbenv.idirmode', 'rwxr-xr-x');
  -// ack('dbenv.idirmode = "rwxrwxrwx"', true);
  +ack('dbenv.lg_filemode', 0);
  +ack('dbenv.lg_filemode = 0644', true);
  +ack('dbenv.lg_filemode', 0644);
   
  -ack('dbenv.msgfile', null);
  -// ack('dbenv.msgfile = "stdout"', true);
  +ack('dbenv.lg_max', 0);
  +ack('dbenv.lg_max = 10485760', true);
  +ack('dbenv.lg_max', 10485760);
   
  -ack('dbenv.shm_key', -1);
  -// ack('dbenv.shm_key = 0x1234', true);
  +ack('dbenv.lg_regionmax', 130000);
   
  -ack('dbenv.thread_count', 64);
  -// ack('dbenv.thread_count = 2 * 64', true);
  +ack('dbenv.tx_max', 100);
  +// ack('dbenv.tx_max = 100', true);
   
  -ack('dbenv.cachemax', 1318912);
  -// ack('dbenv.cachemax = 2 * 1318912', true);
  +ack('dbenv.tx_timestamp', 0);
  +ack('dbenv.tx_timestamp = 0x12345678', true);
  +ack('dbenv.tx_timestamp', 0x12345678);
   
  -ack('dbenv.cachesize', 1312348);
  -// ack('dbenv.cachesize = 2 * 1312348', true);
  +ack('dbenv.encrypt', 0);
  +// ack('dbenv.encrypt = "xyzzy"', true);
  +// ack('dbenv.encrypt', 1);
   
  -ack('dbenv.ncaches', 1);
  -// ack('dbenv.ncaches = 2 * 1', true);
  +// -----
  +ack('dbenv.open(home, eflags, emode)', true);
  +ack('dbenv.home', home);
  +ack('dbenv.open_flags', eflags);
   
  -ack('dbenv.max_openfd', 100);
  -// ack('dbenv.max_openfd = 100', true);
  +ack('dbenv.data_dirs', './data,.');
  +ack('dbenv.create_dir', '.');
  +
  +ack('dbenv.flags', DB_REGION_INIT);
  +// ack('dbenv.flags = DB_REGION_INIT', true);
  +
  +ack('dbenv.msgfile', null);
  +// ack('dbenv.msgfile = "stdout"', true);
   
   ack('dbenv.mmapsize', 16*1024*1024);
  -// ack('dbenv.mmapsize = 32*1024*1024', true);
  +ack('dbenv.mmapsize = 32*1024*1024', true);
  +ack('dbenv.mmapsize', 32*1024*1024);
   
   ack('dbenv.mutex_align', 4);
   // ack('dbenv.mutex_align = 4', true);
  @@ -135,11 +185,9 @@
   // ack('dbenv.txn_timeout = 0', true);
   
   ack('dbenv.tmp_dir', './tmp');
  -// ack('dbenv.tmp_dir = "/var/tmp"', true);
   
  -ack('dbenv.verbose', false); // todo++
  -
  -ack('dbenv.lk_conflicts', false);    // todo++
  +ack('dbenv.verbose', undefined);     // todo++
  +ack('dbenv.lk_conflicts', undefined);        // todo++
   
   ack('dbenv.lk_detect', DB_LOCK_DEFAULT);
   // ack('dbenv.lk_detect = DB_LOCK_DEFAULT', true);
  @@ -172,24 +220,10 @@
   // ack('dbenv.log_zero = 0', true);
   
   ack('dbenv.lg_bsize', 65536);
  -// ack('dbenv.lg_bsize = 2 * 32000', true);
  -
   ack('dbenv.lg_dir', './log');
  -// ack('dbenv.lg_dir = "/var/tmp/log"', true);
  -
   ack('dbenv.lg_filemode', 0644);      // todo++
  -
   ack('dbenv.lg_max', 10485760);
  -// ack('dbenv.lg_max = 2 * 10485760', true);
  -
   ack('dbenv.lg_regionmax', 130000);
  -// ack('dbenv.lg_regionmax = 2 * 130000', true);
  -
  -ack('dbenv.tx_max', 100);
  -// ack('dbenv.tx_max = 2 * 100', true);
  -
  -ack('dbenv.tx_timestamp', 0);
  -// ack('dbenv.tx_timestamp = 0x1234', true);
   
   ack('dbenv.DB_REP_CONF_BULK', 0);
   ack('dbenv.DB_REP_CONF_DELAYCLIENT', 0);
  @@ -199,9 +233,9 @@
   ack('dbenv.DB_REP_CONF_NOWAIT', 0);
   ack('dbenv.DB_REPMGR_CONF_2SITE_STRICT', 0);
   
  -ack('dbenv.rep_limit', 0);
  -ack('dbenv.rep_nsites', 0);
  -ack('dbenv.rep_priority', 0);
  +ack('dbenv.rep_limit', undefined);
  +ack('dbenv.rep_nsites', undefined);
  +ack('dbenv.rep_priority', undefined);
   
   ack('dbenv.DB_REP_ACK_TIMEOUT', 1000000);
   ack('dbenv.DB_REP_CHECKPOINT_DELAY', 30000000);
  @@ -213,6 +247,6 @@
   ack('dbenv.DB_REP_HEARTBEAT_SEND', 0);
   ack('dbenv.DB_REP_LEASE_TIMEOUT', 0);
   
  -dbenv.close(0);
  +ack('dbenv.close(0)', true);
   
   if (loglvl) print("<-- Dbe.js");
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to