SPOPS::Export::SQL - Export SPOPS objects as a series of SQL statements


SPOPS documentation Contained in the SPOPS distribution.

Index


Code Index:

NAME

Top

SPOPS::Export::SQL - Export SPOPS objects as a series of SQL statements

SYNOPSIS

Top

 # See SPOPS::Export

DESCRIPTION

Top

Implement SQL output for SPOPS::Export.

PROPERTIES

Top

table_name

The name of the table to use in the export. If not set we use the table used by the object class. If we cannot find a table name in the object class (via a method table_name()) then we die.

record_delimiter

The string to use to delimit SQL statements. Default is ';', but you might want to use '\g' or other string depeneding on your database.

METHODS

Top

create_record( $object, $fields )

Return a SQL statement suitable for importing into a database to create a record using an 'INSERT'.

serialize_field_data( $data )

Return a quoted, escaped string suitable for putting into a runnable SQL statement. For example:

 my $value = $exporter->serialize_field_data( "O'Reilly and Associates" );

Returns by default:

 'O\'Reilly and Associates'

Just subclass this class and override the method of your database uses different quoting schemes.

BUGS

Top

None known.

TO DO

Top

Nothing known.

SEE ALSO

Top

COPYRIGHT

Top

AUTHORS

Top

Chris Winters <chris@cwinters.com>


SPOPS documentation Contained in the SPOPS distribution.

package SPOPS::Export::SQL;

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

use strict;
use base qw( SPOPS::Export );

$SPOPS::Export::SQL::VERSION  = sprintf("%d.%02d", q$Revision: 3.3 $ =~ /(\d+)\.(\d+)/);

use constant DEFAULT_RECORD_DELIMETER => ';';

my @FIELDS = qw( table_name record_delimiter );
SPOPS::Export::SQL->mk_accessors( @FIELDS );

sub initialize {
    my ( $self, $params ) = @_;
    $self->record_delimiter || $self->record_delimiter( DEFAULT_RECORD_DELIMETER );
    return $self;
}

sub get_fields { return ( $_[0]->SUPER::get_fields, @FIELDS ) }

sub create_record {
    my ( $self, $object, $fields ) = @_;
    my $object_class = $self->object_class;
    my $table = $self->table_name ||
                $self->table_name( $object_class->table_name );
    unless ( $table ) {
        SPOPS::Exception->throw(
                    "No table name set (via \$exporter->table_name( \$table ))\n" .
                    " and your object class ($object_class) does not have a\n" .
                    "table name associated with it. No records exported" );
    }
    my @values = map { $self->serialize_field_data( $object->{ $_ } ) } @{ $fields };
    my $field_text = join( ', ', @{ $fields } );
    my $value_text = join( ', ', @values );
    my $delimiter  = $self->record_delimiter;
    return <<SQL;
INSERT INTO $table ( $field_text )
VALUES ( $value_text ) $delimiter
SQL
}


sub serialize_field_data {
    my ( $self, $data ) = @_;
    $data =~ s/\'/\\\'/g;
    return "'$data'";
}

1;

__END__