RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm-5_3: rpm/rpmio/ rpmsql.c

From: Jeff Johnson <jbj@rpm5.org>
Date: Tue 21 Sep 2010 - 18:18:01 CEST
Message-Id: <20100921161801.7F675D0F0B@rpm5.org>
  RPM Package Manager, CVS Repository
  /cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  jbj@rpm5.org
  Module: rpm                              Date:   21-Sep-2010 18:18:01
  Branch: rpm-5_3                          Handle: 2010092116180100

  Modified files:           (Branch: rpm-5_3)
    rpm/rpmio               rpmsql.c

  Log:
    - rpmsql: backport embedded sqlite code from head.

  Summary:
    Revision    Changes     Path
    2.55.2.5    +38 -69     rpm/rpmio/rpmsql.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmsql.c
  ============================================================================
  $ cvs diff -u -r2.55.2.4 -r2.55.2.5 rpmsql.c
  --- rpm/rpmio/rpmsql.c	27 Aug 2010 13:04:10 -0000	2.55.2.4
  +++ rpm/rpmio/rpmsql.c	21 Sep 2010 16:18:01 -0000	2.55.2.5
  @@ -41,7 +41,7 @@
   int _rpmsql_debug = 0;
   
   /*@unchecked@*/
  -int _rpmvt_debug = 1;
  +int _rpmvt_debug = 0;
   
   /*@unchecked@*/
   int _rpmvc_debug = 0;
  @@ -378,17 +378,7 @@
       return rpmvtLoadArgv(rpmvtNew(_db, pAux, argv, &_argVD), vtp);
   }
   
  -static const char * dumpOp(unsigned char op)
  -{
  -    if (op & SQLITE_INDEX_CONSTRAINT_EQ)	return "EQ";
  -    if (op & SQLITE_INDEX_CONSTRAINT_GT)	return "GT";
  -    if (op & SQLITE_INDEX_CONSTRAINT_LE)	return "LE";
  -    if (op & SQLITE_INDEX_CONSTRAINT_LT)	return "LT";
  -    if (op & SQLITE_INDEX_CONSTRAINT_GE)	return "GE";
  -    if (op & SQLITE_INDEX_CONSTRAINT_MATCH)	return "MATCH";
  -    return "?OP?";
  -}
  -
  +#ifdef	NOTYET
   static void dumpInfo(const char * msg, const struct sqlite3_index_info * s)
   {
   fprintf(stderr, "--------------------- %s\n", (msg ? msg : ""));
  @@ -401,20 +391,24 @@
           _PRT(%g, estimatedCost);
   #undef  _PRT
   }
  +#endif
   
   int rpmvtBestIndex(rpmvt vt, void * _pInfo)
   {
       sqlite3_index_info * pInfo = (sqlite3_index_info *) _pInfo;
       int rc = SQLITE_OK;
  +#ifdef	NOTYET
       int i;
  +#endif
   
   VTDBG(vt, (stderr, "--> %s(%p,%p)\n", __FUNCTION__, vt, pInfo));
   
  +#ifdef	NOTYET
       if (pInfo->aConstraint)
       for (i = 0; i < pInfo->nConstraint; i++) {
   	const struct sqlite3_index_constraint * p = pInfo->aConstraint + i;
  -	fprintf(stderr, "\tcol %s(%d) %s%s\n", vt->cols[p->iColumn], p->iColumn,
  -		dumpOp(p->op), (p->usable ? "" : " USELESS"));
  +	fprintf(stderr, "\tcol %s(%d) 0x%02x 0x%02x\n", vt->cols[p->iColumn], p->iColumn,
  +		p->op, p->usable);
       }
       if (pInfo->aOrderBy)
       for (i = 0; i < pInfo->nOrderBy; i++) {
  @@ -423,6 +417,7 @@
   		(p->desc ? "DESC" : "ASC"));
       }
       dumpInfo(__FUNCTION__, pInfo);
  +#endif
   
   VTDBG(vt, (stderr, "<-- %s(%p,%p) rc %d\n", __FUNCTION__, vt, pInfo, rc));
   
  @@ -499,82 +494,31 @@
   {
       sqlite3_value ** argv = (sqlite3_value **) _argv;
       int rc = SQLITE_OK;
  -    int xx;
   
   VTDBG(vt, (stderr, "--> %s(%p,%p[%u],%p)\n", __FUNCTION__, vt, argv, (unsigned)argc, pRowid));
   
       if (argc == 0 || argv == NULL) {
  -
   if (vt->debug)
   dumpArgv("ERROR", argc, _argv);
   	rc = SQLITE_NOTFOUND;	/* XXX */
  -
       } else
       if (argc == 1) {
  -
   VTDBG(vt, (stderr, "\tDELETE ROW 0x%llx\n", *(unsigned long long *)argv[0]));
  -
  -#ifdef	REFERENCE
  -DELETE FROM env WHERE key = 'FOO';
  ---> vt 0xa0261b0 ++ 2 rpmvcNew at rpmsql.c:638
  ---> vt 0xa0261b0 -- 2 rpmvcClose at rpmsql.c:665
  ---> rpmvtUpdate(0xa0261b8,0xa025d30[1],0xbfe5bbdc)
  -	DELETE ROW 0x1d
  -<-- rpmvtUpdate(0xa0261b8,0xa025d30[1],0xbfe5bbdc) rc 0
  -#endif
  -
  -	if (!strcasecmp(vt->argv[0], "Env")) {
  -	    int ix = *(unsigned long long *)argv[0];
  -	    const char * t = ((ix > 0 && ix < vt->ac) ? vt->av[ix] : "XXX");
  -fprintf(stderr, "*** vt->av[%d] %p \"%s\"\n", ix, t, t);
  -	    if (ix > 0 && ix < vt->ac)
  -		vt->av[ix] = _free(vt->av[ix]);
  -	    vt->ac--;
  -	}
  -
       } else
       if (argv[0] == NULL) {
  -
   VTDBG(vt, (stderr, "\tADD ROW 0x%llx\n", *(unsigned long long *)argv[1]));
   if (vt->debug)
   dumpArgv("ADD ROW", argc, _argv);
  -
       } else
       if (argv[0] == argv[1]) {
  -
   VTDBG(vt, (stderr, "\tUPDATE ROW 0x%llx\n", *(unsigned long long *)argv[1]));
   if (vt->debug)
   dumpArgv("UPDATE argv", argc-2, _argv+2);
  -
       } else {
  -
   VTDBG(vt, (stderr, "\tREPLACE ROW 0x%llx from 0x%llx\n",
   		*(unsigned long long *)argv[0], *(unsigned long long *)argv[1]));
   if (vt->debug)
   dumpArgv("REPLACE argv", argc-2, _argv+2);
  -
  -#ifdef	REFERENCE
  -INSERT INTO env(key,val) VALUES('FOO','BAR');
  ---> rpmvtUpdate(0xa0261b8,0xa025c40[6],0xbfe5bbdc)
  -	REPLACE ROW 0x0 from 0x0
  ---------------------- REPLACE argv
  -	argv[0] 0x91c8ba0(5) NULL
  -	argv[1] 0x91c8bc8(5) NULL
  -	argv[2] 0x91c8bf0(3) TEXT "FOO"
  -	argv[3] 0x91c8c18(3) TEXT "BAR"
  -<-- rpmvtUpdate(0xa0261b8,0xa025c40[6],0xbfe5bbdc) rc 0
  -#endif
  -
  -	if (!strcasecmp(vt->argv[0], "Env")) {
  -	    const char * k = (const char *) sqlite3_value_text(_argv[2+2]);
  -	    const char * v = (const char *) sqlite3_value_text(_argv[2+3]);
  -	    char * t = rpmExpand(k, "=", v, NULL);
  -	    xx = argvAdd(&vt->av, t);
  -fprintf(stderr, "*** vt->av[%d] %p \"%s\"\n", vt->ac, vt->av[vt->ac], vt->av[vt->ac]);
  -	    vt->ac++;
  -	    t = _free(t);
  -	}
  -
       }
   
   VTDBG(vt, (stderr, "<-- %s(%p,%p[%u],%p) rc %d\n", __FUNCTION__, vt, argv, (unsigned)argc, pRowid, rc));
  @@ -584,28 +528,28 @@
   int rpmvtBegin(rpmvt vt)
   {
       int rc = SQLITE_OK;
  -VTDBGNOISY(vt, (stderr, "<-- %s(%p) rc %d\n", __FUNCTION__, vt, rc));
  +VTDBG(vt, (stderr, "<-- %s(%p) rc %d\n", __FUNCTION__, vt, rc));
       return rc;
   }
   
   int rpmvtSync(rpmvt vt)
   {
       int rc = SQLITE_OK;
  -VTDBGNOISY(vt, (stderr, "<-- %s(%p) rc %d\n", __FUNCTION__, vt, rc));
  +VTDBG(vt, (stderr, "<-- %s(%p) rc %d\n", __FUNCTION__, vt, rc));
       return rc;
   }
   
   int rpmvtCommit(rpmvt vt)
   {
       int rc = SQLITE_OK;
  -VTDBGNOISY(vt, (stderr, "<-- %s(%p) rc %d\n", __FUNCTION__, vt, rc));
  +VTDBG(vt, (stderr, "<-- %s(%p) rc %d\n", __FUNCTION__, vt, rc));
       return rc;
   }
   
   int rpmvtRollback(rpmvt vt)
   {
       int rc = SQLITE_OK;
  -VTDBGNOISY(vt, (stderr, "<-- %s(%p) rc %d\n", __FUNCTION__, vt, rc));
  +VTDBG(vt, (stderr, "<-- %s(%p) rc %d\n", __FUNCTION__, vt, rc));
       return rc;
   }
   
  @@ -2374,6 +2318,30 @@
       	rpmExpand((const char *)sqlite3_value_text(argv[0]), NULL), -1, free);
   }
   
  +/**
  + * REGEXP for sqlite3 using miRE patterns.
  + */
  +static void regexpFunc(sqlite3_context* context,
  +		int argc, sqlite3_value** argv)
  +{
  +    const char * value = (const char *) sqlite3_value_text(argv[0]);
  +    const char * pattern = (const char *) sqlite3_value_text(argv[1]);
  +    miRE mire = mireNew(RPMMIRE_REGEX, 0);
  +    int rc = mireRegcomp(mire, pattern);
  +
  +    rc = mireRegexec(mire, value, strlen(value));
  +    switch (rc) {
  +    case 0:
  +    case 1:
  +	sqlite3_result_int(context, rc);
  +	break;
  +    default:
  +	sqlite3_result_error(context, "invalid pattern", -1);
  +	break;
  +    }
  +    mire = mireFree(mire);
  +}
  +
   typedef struct rpmsqlCF_s * rpmsqlCF;
   struct rpmsqlCF_s {
       const char * zName;
  @@ -2457,6 +2425,7 @@
   
       /* RPM extensions. */
     { "expand",		1, 0, SQLITE_UTF8,	0, expandFunc, NULL, NULL },
  +  { "regexp",		2, 0, SQLITE_UTF8,	0, regexpFunc, NULL, NULL },
     { NULL,		0, 0, 0,		0, NULL, NULL, NULL }
   };
   static rpmsqlCF _CF = __CF;
  @@ .
Received on Tue Sep 21 18:18:01 2010
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.