SQLite-VirtualTable

 view release on metacpan or  search on metacpan

perlvtab.c  view on Meta::CPAN

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 )