SQLite-VirtualTable
view release on metacpan or search on metacpan
perlRename(sqlite3_vtab *vtab, const char *name) {
my_dTHX(((perl_vtab*)vtab)->perl);
dSP;
I32 ax;
SV *vtabsv = ((perl_vtab*)vtab)->sv;
int count;
int rc = SQLITE_OK;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(vtabsv);
XPUSHs(sv_2mortal(newSVpv(name, 0)));
PUTBACK;
count = call_method("RENAME", G_SCALAR|G_EVAL);
SPAGAIN;
SP -= count;
ax = (SP - PL_stack_base) + 1;
PUTBACK;
if (!count || SvTRUE(ERRSV)) {
Perl_warn(aTHX_ "%s::RENAME method failed: %s\n",
sv_reftype(SvRV(vtabsv), 1),
SvPV_nolen(ERRSV));
rc = SQLITE_ERROR;
goto cleanup;
}
rc = (SvTRUE(ST(0)) ? SQLITE_OK : SQLITE_ERROR);
cleanup:
FREETMPS;
LEAVE;
return rc;
}
sqlite3_module vtab_perl_module = {
1,
perlCreate,
perlConnect,
perlBestIndex,
perlDisconnect,
perlDestroy,
perlOpen,
perlClose,
perlFilter,
perlNext,
perlEof,
perlColumn,
perlRowid,
perlUpdate,
perlBegin,
perlSync,
perlCommit,
perlRollback,
NULL, /* perlFindFunction - not implemented yet! */
perlRename,
};
static char *argv[] = { "perlvtab",
"-e",
"$SQLite::VirtualTable::EMBEDED=1;"
"require SQLite::VirtualTable",
NULL };
int sqlite3_extension_init(sqlite3 *db, char **pzErrMsg,
const sqlite3_api_routines *pApi) {
PerlInterpreter *my_perl = perl_alloc();
int ac = 3;
char **av = argv;
char **env = environ;
PERL_SYS_INIT3(&ac, &av, &env);
perl_construct(my_perl);
perl_parse(my_perl, xs_init, ac, av, env);
perl_run(my_perl);
SQLITE_EXTENSION_INIT2(pApi)
sqlite3_create_module(db, "perl", &vtab_perl_module, my_perl);
return SQLITE_OK;
}
int dbd_sqlite_init_vtab_extension(sqlite3 *db, char **pzErrMsg,
const sqlite3_api_routines *pApi) {
SQLITE_EXTENSION_INIT2(pApi)
sqlite3_create_module(db, "perl", &vtab_perl_module, NULL);
return SQLITE_OK;
}
( run in 1.576 second using v1.01-cache-2.11-cpan-71847e10f99 )