- Added some stuff to MANIFEST.SKIP
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / SQLite.pm
index 174f6fe..377dab4 100644 (file)
@@ -1,7 +1,7 @@
 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
 #
@@ -44,7 +44,7 @@ use SQL::Translator::Utils qw(debug header_comment);
 
 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;
 
@@ -60,6 +60,8 @@ sub produce {
     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");
 
@@ -69,6 +71,7 @@ sub produce {
 
     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,});
     }
 
@@ -150,6 +153,7 @@ sub create_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");
 
@@ -160,9 +164,10 @@ sub create_table
     #
     # 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";
 
     #
@@ -282,17 +287,16 @@ sub create_field
 
     # 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;