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:   18-Apr-2010 21:21:27
  Branch: HEAD                             Handle: 2010041819212600

  Modified files:
    rpm/rpmio               rpmsql.c

  Log:
    - rpmsql: WIP.

  Summary:
    Revision    Changes     Path
    2.48        +35 -52     rpm/rpmio/rpmsql.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmsql.c
  ============================================================================
  $ cvs diff -u -r2.47 -r2.48 rpmsql.c
  --- rpm/rpmio/rpmsql.c        18 Apr 2010 17:51:13 -0000      2.47
  +++ rpm/rpmio/rpmsql.c        18 Apr 2010 19:21:26 -0000      2.48
  @@ -245,12 +245,12 @@
   _rpmio_debug = -1;
       if (fn[0] == '/') {
   fprintf(stderr, "*** uri %s fn %s\n", uri, fn);
  -     if (Glob_pattern_p(fn, 0)) {    /* XXX uri */
  +     if (Glob_pattern_p(uri, 0)) {   /* XXX uri */
            const char ** av = NULL;
            int ac = 0;
                
  -         xx = rpmGlob(fn, &ac, &av); /* XXX uri */
  -fprintf(stderr, "GLOB: %d = Glob(%s) av %p[%d]\n", xx, fn, av, ac);
  +         xx = rpmGlob(uri, &ac, &av);        /* XXX uri */
  +fprintf(stderr, "GLOB: %d = Glob(%s) av %p[%d]\n", xx, uri, av, ac);
            if (xx)
                rc = SQLITE_NOTFOUND;           /* XXX */
            else
  @@ -2484,7 +2484,7 @@
   static struct rpmvd_s _grdbVD = {
        .prefix = "%{?_etc_group}%{!?_etc_group:/etc/group}",
        .split  = ":",
  -     .parse  = "group:pw:gid:groups",
  +     .parse  = "group:passwd:gid:groups",
        .nrows  = -1
   };
   
  @@ -2527,11 +2527,12 @@
   
   /*==============================================================*/
   
  -static int _procdb_debug = 0;
  -
   static struct rpmvd_s _procdbVD = {
        .prefix = "%{?_procdb}%{!?_procdb:/proc/[0-9]}",
  -     .parse  = "id",
  +     .split  = "/-",
  +     .parse  = "dir/pid/*",
  +     .regex  = "^(.+/)([0-9]+)$",
  +     .idx    = 2,
        .nrows  = -1
   };
   
  @@ -2542,54 +2543,10 @@
       return rpmvtLoadArgv(rpmvtNew(_db, pAux, argv, &_procdbVD), vtp);
   }
   
  -static int procdbColumn(rpmvc vc, void * _pContext, int colx)
  -{
  -    sqlite3_context * pContext = (sqlite3_context *) _pContext;
  -    rpmvt vt = vc->vt;
  -    const char * path = vt->av[vc->ix];
  -    const char * col = vt->cols[colx];
  -    const char * t;
  -    const char * te;
  -    int rc = SQLITE_OK;
  -
  -if (_procdb_debug < 0)
  -fprintf(stderr, "--> %s(%p,%p,%d)\n", __FUNCTION__, vc, pContext, colx);
  -
  -    /* Split out {id,name} pointers. */
  -    if ((t = strrchr(path, '/')) == NULL)
  -     t = path;
  -    else
  -     t++;
  -    te = t + strlen(t);
  -
  -    if (!strcmp(col, "path"))
  -     sqlite3_result_text(pContext, path, -1, SQLITE_STATIC);
  -    else if (!strcmp(col, "id"))
  -     sqlite3_result_text(pContext, t, (te-t), SQLITE_STATIC);
  -    else if (!strcmp(col, "pid"))
  -     sqlite3_result_text(pContext, t, (te-t), SQLITE_STATIC);
  -    else {
  -     const char * fn = rpmGetPath(path, "/", col, NULL);
  -     if (!Access(fn, R_OK)) {
  -         rpmiob iob = NULL;
  -         int xx = rpmiobSlurp(fn, &iob);
  -         sqlite3_result_text(pContext, rpmiobStr(iob), rpmiobLen(iob), 
SQLITE_TRANSIENT);
  -         iob = rpmiobFree(iob);
  -     } else
  -         sqlite3_result_null(pContext);
  -     fn = _free(fn);
  -    }
  -
  -if (_procdb_debug < 0)
  -fprintf(stderr, "<-- %s(%p,%p,%d) rc %d\n", __FUNCTION__, vc, pContext, 
colx, rc);
  -
  -    return rc;
  -}
  -
   struct sqlite3_module procdbModule = {
       .xCreate = (void *) procdbCreateConnect,
       .xConnect        = (void *) procdbCreateConnect,
  -    .xColumn = (void *) procdbColumn,
  +    .xColumn = (void *) npydbColumn,
   };
   
   /*==============================================================*/
  @@ -2615,6 +2572,31 @@
   
   /*==============================================================*/
   
  +static struct rpmvd_s _repodbVD = {
  +     /* XXX where to map the default? */
  +     .prefix = "%{?_repodb}%{!?_repodb:http://rpm5.org/files/popt/}";,
  +     .split  = "/-.",
  +     .parse  = "dir/file-NVRA-N-V-R.A",
  +     .regex  = "^(.+/)(((.*)-([^-]+)-([^-]+)\\.([^.]+))\\.rpm)$",
  +     .idx    = 2,
  +     .nrows  = -1
  +};
  +
  +static int repodbCreateConnect(void * _db, void * pAux,
  +             int argc, const char *const * argv,
  +             rpmvt * vtp, char ** pzErr)
  +{
  +    return rpmvtLoadArgv(rpmvtNew(_db, pAux, argv, &_repodbVD), vtp);
  +}
  +
  +struct sqlite3_module repodbModule = {
  +    .xCreate = (void *) repodbCreateConnect,
  +    .xConnect        = (void *) repodbCreateConnect,
  +    .xColumn = (void *) npydbColumn,
  +};
  +
  +/*==============================================================*/
  +
   static int _stat_debug = 0;
   
   static struct rpmvd_s _statVD = {
  @@ -2743,6 +2725,7 @@
     { "Nixdb",         &nixdbModule, NULL },
     { "Procdb",                &procdbModule, NULL },
     { "Pwdb",          &pwdbModule, NULL },
  +  { "Repodb",                &repodbModule, NULL },
     { "Stat",          &statModule, NULL },
     { "Yumdb",         &yumdbModule, NULL },
     { NULL,            NULL, NULL }
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to