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



_______________________________________________
DBD-SQLite mailing list
DBD-SQLite@lists.scsys.co.uk
http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbd-sqlite

Reply via email to