package SQL::Translator::Producer::SQLite;
# -------------------------------------------------------------------
-# $Id: SQLite.pm,v 1.15 2006-08-26 11:35:31 schiffbruechige Exp $
+# $Id$
# -------------------------------------------------------------------
# Copyright (C) 2002-4 SQLFairy Authors
#
use vars qw[ $VERSION $DEBUG $WARN ];
-$VERSION = sprintf "%d.%02d", q$Revision: 1.15 $ =~ /(\d+)\.(\d+)/;
+$VERSION = sprintf "%d.%02d", q$Revision$ =~ /(\d+)\.(\d+)/;
$DEBUG = 0 unless defined $DEBUG;
$WARN = 0 unless defined $WARN;
my $no_comments = $translator->no_comments;
my $add_drop_table = $translator->add_drop_table;
my $schema = $translator->schema;
+ my $producer_args = $translator->producer_args;
+ my $sqlite_version = $producer_args->{sqlite_version} || 0;
debug("PKG: Beginning production\n");
for my $table ( $schema->get_tables ) {
push @create, create_table($table, { no_comments => $no_comments,
+ sqlite_version => $sqlite_version,
add_drop_table => $add_drop_table,});
}
my $table_name = $table->name;
my $no_comments = $options->{no_comments};
my $add_drop_table = $options->{add_drop_table};
+ my $sqlite_version = $options->{sqlite_version} || 0;
debug("PKG: Looking at table '$table_name'\n");
#
# Header.
#
+ my $exists = ($sqlite_version >= 3.3) ? ' IF EXISTS' : '';
my @create;
push @create, "--\n-- Table: $table_name\n--\n" unless $no_comments;
- push @create, qq[DROP TABLE $table_name] if $add_drop_table;
+ push @create, qq[DROP TABLE$exists $table_name] if $add_drop_table;
my $create_table = "CREATE ${temp}TABLE $table_name (\n";
#
# Default? XXX Need better quoting!
my $default = $field->default_value;
- if ( defined $default ) {
- if ( uc $default eq 'NULL') {
- $field_def .= ' DEFAULT NULL';
- } elsif ( $default eq 'now()' ||
- $default eq 'CURRENT_TIMESTAMP' ) {
- $field_def .= ' DEFAULT CURRENT_TIMESTAMP';
- } elsif ( $default =~ /val\(/ ) {
- next;
- } else {
- $field_def .= " DEFAULT '$default'";
- }
+ if (defined $default) {
+ SQL::Translator::Producer->_apply_default_value(
+ \$field_def,
+ $default,
+ [
+ 'NULL' => \'NULL',
+ 'now()' => 'now()',
+ 'CURRENT_TIMESTAMP' => 'CURRENT_TIMESTAMP',
+ ],
+ );
}
return $field_def;