| DBIx-DBSchema documentation | Contained in the DBIx-DBSchema distribution. |
DBIx::DBSchema::DBD::SQLite - SQLite native driver for DBIx::DBSchema
use DBI; use DBIx::DBSchema;
$dbh = DBI->connect('dbi:SQLite:tns_service_name', 'user','pass'); $schema = new_native DBIx::DBSchema $dbh;
This module implements a SQLite-native driver for DBIx::DBSchema.
Jesse Vincent <jesse@bestpractical.com>
Given an active DBI database handle, return a listref of listrefs (see perllol), each containing six elements: column name, column type, nullability, column length, column default, and a field reserved for driver-specific use (which for sqlite is whether this col is a primary key)
Given an active DBI database handle, return the primary key for the specified table.
Given an active DBI database handle, return a hashref of unique indices. The keys of the hashref are index names, and the values are arrayrefs which point a list of column names for each. See "HASHES OF LISTS" in perldsc and DBIx::DBSchema::ColGroup.
Given an active DBI database handle, return a hashref of (non-unique) indices. The keys of the hashref are index names, and the values are arrayrefs which point a list of column names for each. See "HASHES OF LISTS" in perldsc and DBIx::DBSchema::ColGroup.
| DBIx-DBSchema documentation | Contained in the DBIx-DBSchema distribution. |
package DBIx::DBSchema::DBD::SQLite; use strict; use vars qw($VERSION @ISA %typemap); use DBIx::DBSchema::DBD; $VERSION = '0.02'; @ISA = qw(DBIx::DBSchema::DBD); %typemap = ( 'SERIAL' => 'INTEGER PRIMARY KEY AUTOINCREMENT', );
sub columns { my ( $proto, $dbh, $table ) = @_; my $sth = $dbh->prepare('PRAGMA table_info($table)'); $sth->execute(); my $rows = []; while ( my $row = $sth->fetchrow_hashref ) { # notnull # pk # name # type # cid # dflt_value push @$rows, [ $row->{'name'}, $row->{'type'}, ( $row->{'notnull'} ? 0 : 1 ), undef, $row->{'dflt_value'}, $row->{'pk'} ]; } return $rows; }
sub primary_key { my ($proto, $dbh, $table) = @_; my $cols = $proto->columns($dbh,$table); foreach my $col (@$cols) { return ($col->[1]) if ($col->[5]); } return undef; }
sub unique { my ($proto, $dbh, $table) = @_; my @names; my $indexes = $proto->_index_info($dbh, $table); foreach my $row (@$indexes) { push @names, $row->{'name'} if ($row->{'unique'}); } my $info = {}; foreach my $name (@names) { $info->{'name'} = $proto->_index_cols($dbh, $name); } return $info; }
sub index { my ($proto, $dbh, $table) = @_; my @names; my $indexes = $proto->_index_info($dbh, $table); foreach my $row (@$indexes) { push @names, $row->{'name'} if not ($row->{'unique'}); } my $info = {}; foreach my $name (@names) { $info->{'name'} = $proto->_index_cols($dbh, $name); } return $info; } sub _index_list { my $proto = shift; my $dbh = shift; my $table = shift; my $sth = $dbh->prepare('PRAGMA index_list($table)'); $sth->execute(); my $rows = []; while ( my $row = $sth->fetchrow_hashref ) { # Keys are "name" and "unique" push @$rows, $row; } return $rows; } sub _index_cols { my $proto = shift; my $dbh = shift; my $index = shift; my $sth = $dbh->prepare('PRAGMA index_info($index)'); $sth->execute(); my $data = {}; while ( my $row = $sth->fetchrow_hashref ) { # Keys are "name" and "seqno" $data->{$row->{'seqno'}} = $data->{'name'}; } my @results; foreach my $key (sort keys %$data) { push @results, $data->{$key}; } return \@results; }
1;