/usr/share/perl5/Class/DBI/SQLite.pm is in libclass-dbi-sqlite-perl 0.11-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | package Class::DBI::SQLite;
use strict;
use vars qw($VERSION);
$VERSION = "0.11";
require Class::DBI;
use base qw(Class::DBI);
sub _auto_increment_value {
my $self = shift;
return $self->db_Main->func("last_insert_rowid");
}
sub set_up_table {
my($class, $table) = @_;
# find all columns.
my $sth = $class->db_Main->prepare("PRAGMA table_info('$table')");
$sth->execute();
my @columns;
while (my $row = $sth->fetchrow_hashref) {
push @columns, $row->{name};
}
$sth->finish;
# find primary key. so complex ;-(
$sth = $class->db_Main->prepare(<<'SQL');
SELECT sql FROM sqlite_master WHERE tbl_name = ?
SQL
$sth->execute($table);
my($sql) = $sth->fetchrow_array;
$sth->finish;
my ($primary) = $sql =~ m/
(?:\(|\,) # either a ( to start the definition or a , for next
\s* # maybe some whitespace
(\w+) # the col name
[^,]* # anything but the end or a ',' for next column
PRIMARY\sKEY/sxi;
my @pks;
if ($primary) {
@pks = ($primary);
} else {
my ($pks)= $sql =~ m/PRIMARY\s+KEY\s*\(\s*([^)]+)\s*\)/;
@pks = split(m/\s*\,\s*/, $pks) if $pks;
}
$class->table($table);
$class->columns(Primary => @pks);
$class->columns(All => @columns);
}
1;
__END__
=head1 NAME
Class::DBI::SQLite - Extension to Class::DBI for sqlite
=head1 SYNOPSIS
package Film;
use base qw(Class::DBI::SQLite);
__PACKAGE__->set_db('Main', 'dbi:SQLite:dbname=dbfile', '', '');
__PACKAGE__->set_up_table('Movies');
package main;
my $film = Film->create({
name => 'Bad Taste',
title => 'Peter Jackson',
});
my $id = $film->id; # auto-incremented
=head1 DESCRIPTION
Class::DBI::SQLite is an extension to Class::DBI for DBD::SQLite.
It allows you to populate an auto-incremented row id after insert.
The C<set_up_table> method automates the setup of columns and
primary key(s) via the SQLite PRAGMA statement.
=head1 AUTHOR
Tatsuhiko Miyagawa E<lt>miyagawa@bulknews.netE<gt>
C<set_up_table> implementation by Tomohiro Ikebe E<lt>ikebe@cpan.orgE<gt>
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 SEE ALSO
L<Class::DBI>, L<DBD::SQLite>
=cut
|