SPOPS::DBI::SQLite - SQLite-specific code for DBI collections


SPOPS documentation Contained in the SPOPS distribution.

Index


Code Index:

NAME

Top

SPOPS::DBI::SQLite -- SQLite-specific code for DBI collections

SYNOPSIS

Top

 myobject => {
   isa             => [ qw( SPOPS::DBI::SQLite SPOPS::DBI ) ],
   increment_field => 1,
   id_field        => 'id',
   no_insert       => [ 'id' ],
 };

DESCRIPTION

Top

This just implements some SQLite-specific routines so we can abstract them out.

One of these items is to auto-generate keys. SQLite supports auto-generated keys in one instance only -- when you specify the first column as an integer field (not int, for some reason SQLite is sensitive to this) and as the primary key. For the value to be generated, you should not insert a value for it.

So to use auto-generated keys, just define your table:



 CREATE TABLE my_table (
   id integer not null primary key,
   ...
 )

or

 CREATE TABLE my_table (
   id integer not null,
   ...
   primary key ( id )
 )

And tell SPOPS you are using an auto-increment field:

 myobject => {
   isa             => [ qw( SPOPS::DBI::SQLite SPOPS::DBI ) ],
   increment_field => 1,
   id_field        => 'id',
   no_insert       => [ 'id' ],
 };

NOTE: Since SQLite is typeless, we assume for quoting purposes that everything is a SQL_VARCHAR type of field, overriding db_discover_types from SPOPS::SQLInterface with our own version.

BUGS

Top

None known.

TO DO

Top

Nothing known.

SEE ALSO

Top

DBD::SQLite

DBI

COPYRIGHT

Top

AUTHORS

Top

Chris Winters <chris@cwinters.com>


SPOPS documentation Contained in the SPOPS distribution.

package SPOPS::DBI::SQLite;

# $Id: SQLite.pm,v 3.5 2004/06/02 00:48:22 lachoy Exp $

use strict;
use Log::Log4perl qw( get_logger );

use DBI qw( SQL_VARCHAR );
use SPOPS;
use SPOPS::DBI::TypeInfo;
use SPOPS::Utility;

my $log = get_logger();

$SPOPS::DBI::SQLite::VERSION = sprintf("%d.%02d", q$Revision: 3.5 $ =~ /(\d+)\.(\d+)/);

sub sql_current_date  { return SPOPS::Utility->now }


########################################
# KEY GENERATION

sub pre_fetch_id  { return undef }

sub post_fetch_id {
    my ( $class, $p ) = @_;
    return undef unless ( $class->CONFIG->{increment_field} );
    return $p->{db}->func( 'last_insert_rowid' );
}


########################################
# TYPE MAPPING

# Since SQLite is typeless, just assume everything is a text field

my %TYPE_INFO = ();

sub db_discover_types {
    my ( $class, $table, $p ) = @_;
    my $db       = $p->{db} || $class->global_datasource_handle;
    my $type_idx = join( '-', lc $db->{Name}, lc $table );
    unless ( $TYPE_INFO{ $type_idx } ) {
        my $fields = $class->field_list;
        my $type_info = SPOPS::DBI::TypeInfo->new({ database => $db->{Name},
                                                    table    => $table });
        foreach my $field ( @{ $fields } ) {
            $type_info->add_type( $field, SQL_VARCHAR );
        }
        $TYPE_INFO{ $type_idx } = $type_info;
    }
    return $TYPE_INFO{ $type_idx }
}

1;

__END__