[DBD-SQLite] Re: load_extension("perlvtab.so")
Salvador Fandino
sfandino at yahoo.com
Mon Nov 2 17:42:36 GMT 2009
Dami Laurent (PJ) wrote:
>> Also, currently DBD::SQLite doesn't fully expose the subset of
>> sqlite3 C API required by SQLite::VirtualTable. I have been
>> playing with DynaLoader::dl_find_symbol_anywhere() to get
>> direct access to it but this approach doesn't seem to be
>> portable... probably the easiest way would be to just
>> integrate SQLite::VirtualTable into DBD::SQLite and maintain a
>> different version for usage outside of perl.
>>
>> Any thoughts?
>>
>> Cheers,
>>
>> - Salva
>
> That's exactly the way to go. So this means exposing the
> sqlite3_create_module() function in DBD::SQlite API, and creating a
> wrapper layer that can sit as a (struct sqlite3_module*) and will call
> Perl methods for every callback defined in that structure. Apparently
> part of that work is already implemented in SQLite::VirtualTable (which
> I didn't know so far) and can be copied from there.
>
> Extending DBD::SQLite in that way could probably trigger many
> interesting new applications.
I have been able to integrate the vtab perl backend from
SQLite::VirtualTable into DBD::SQLite.
Some bugs remain and occasionally it SIGSEVS, but otherwise, it mostly
works ;-)
The DBD::SQLite module with virtual table support is available from the
vtab branch of this git repository:
http://github.com/salva/my-p5-DBD-SQLite/
And this is a sample session with the debugger:
DB<1> use DBI
DB<2> x $dbh = DBI->connect('dbi:SQLite:dbname=/tmp/db.sqlite', '', '');
0 DBI::db=HASH(0x1116c98)
empty hash
DB<3> $dbh->sqlite_enable_vtab_extension
DB<4> x $dbh->do(q|create virtual table maa using perl
('SQLite::VirtualTable::CSV',
'/home/salva/g/perl/p5-SQLite-VirtualTable/t/data.csv', 'columns=a,b,c')|)
0 '0E0'
DB<5> x $dbh->selectall_arrayref('select * from maa');
0 ARRAY(0x1173198)
0 ARRAY(0x1380600)
0 1
1 2
2 3
1 ARRAY(0x1380660)
0 4
1 5
2 'hello'
2 ARRAY(0x13806d8)
0 6
1 'by'
2 'hello'
DB<6>
Bye,
- Salva
More information about the DBD-SQLite
mailing list