Hello!
The simple regexp function example:
select value from t1 where user_regexp_multi(value,'\d{1}','\s+')=1;
The function user_regexp_multi(value,regexp1,...,regexpN) will recompile the
regexp by every call becouse auxdata API cleaning the
function-context auxdata too often. And thus we use application-defained
user_regexp becouse SQLite auxdata-based user function
has no the promised performance improvement. In this example the regexp
expressions may be compiled only once.
And similar example has this problem:
select value from t1 where user_regexp(value,(select pattern from t where
name='postalcode-russia'))=1;
By this patch the problem will be resolved:
--- vdbe.c.orig 2009-12-20 13:28:43.000000000 +0300
+++ vdbe.c 2009-12-20 13:28:53.000000000 +0300
@@ -1417,7 +1417,7 @@
** immediately call the destructor for any non-static values.
*/
if( ctx.pVdbeFunc ){
- sqlite3VdbeDeleteAuxData(ctx.pVdbeFunc, pOp->p1);
pOp->p4.pVdbeFunc = ctx.pVdbeFunc;
pOp->p4type = P4_VDBEFUNC;
}
It's not a problem to manual clean auxdata when these are not needed by now.
The auto clean is really helpful only when the query
did finalize.
Best regards, Alexey Pechnikov.
http://pechnikov.tel/
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users