take out duplicate docs
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / SQLite.pm
index 2e7aa6a..7549462 100644 (file)
@@ -107,7 +107,6 @@ sub produce {
     }
 }
 
-# -------------------------------------------------------------------
 sub mk_name {
     my ($name, $scope, $critical) = @_;
 
@@ -115,7 +114,7 @@ sub mk_name {
     if ( my $prev = $scope->{ $name } ) {
         my $name_orig = $name;
         $name        .= sprintf( "%02d", ++$prev );
-        substr($name, $max_id_length - 3) = "00" 
+        substr($name, $max_id_length - 3) = "00"
             if length( $name ) > $max_id_length;
 
         warn "The name '$name_orig' has been changed to ",
@@ -133,6 +132,8 @@ sub create_view {
     my $add_drop_view = $options->{add_drop_view};
 
     my $view_name = $view->name;
+    $global_names{$view_name} = 1;
+
     debug("PKG: Looking at view '${view_name}'\n");
 
     # Header.  Should this look like what mysqldump produces?
@@ -165,6 +166,8 @@ sub create_table
     my ($table, $options) = @_;
 
     my $table_name = $table->name;
+    $global_names{$table_name} = 1;
+
     my $no_comments = $options->{no_comments};
     my $add_drop_table = $options->{add_drop_table};
     my $sqlite_version = $options->{sqlite_version} || 0;
@@ -213,10 +216,10 @@ sub create_table
         push @field_defs, create_field($field);
     }
 
-    if ( 
-         scalar @pk_fields > 1 
-         || 
-         ( @pk_fields && !grep /INTEGER PRIMARY KEY/, @field_defs ) 
+    if (
+         scalar @pk_fields > 1
+         ||
+         ( @pk_fields && !grep /INTEGER PRIMARY KEY/, @field_defs )
          ) {
         push @field_defs, 'PRIMARY KEY (' . join(', ', @pk_fields ) . ')';
     }
@@ -234,7 +237,10 @@ sub create_table
     #
     my $c_name_default = 'A';
     for my $c ( $table->get_constraints ) {
-        next unless $c->type eq UNIQUE; 
+        if ($c->type eq "FOREIGN KEY") {
+            push @field_defs, create_foreignkey($c);
+        }
+        next unless $c->type eq UNIQUE;
         push @constraint_defs, create_constraint($c);
     }
 
@@ -243,14 +249,23 @@ sub create_table
     return (@create, $create_table, @index_defs, @constraint_defs );
 }
 
+sub create_foreignkey {
+    my $c = shift;
+
+    my $fk_sql = "FOREIGN KEY($c->{fields}[0]) REFERENCES ";
+    $fk_sql .= ( $c->{reference_table} || '' )."(".( $c->{reference_fields}[0] || '' ).")";
+
+    return $fk_sql;
+}
+
 sub create_field
 {
     my ($field, $options) = @_;
 
     my $field_name = $field->name;
     debug("PKG: Looking at field '$field_name'\n");
-    my $field_comments = $field->comments 
-        ? "-- " . $field->comments . "\n  " 
+    my $field_comments = $field->comments
+        ? "-- " . $field->comments . "\n  "
         : '';
 
     my $field_def = $field_comments.$field_name;
@@ -266,7 +281,7 @@ sub create_field
     }
 
 #             if ( $data_type =~ /timestamp/i ) {
-#                 push @trigger_defs, 
+#                 push @trigger_defs,
 #                     "CREATE TRIGGER ts_${table_name} ".
 #                     "after insert on $table_name\n".
 #                     "begin\n".
@@ -285,8 +300,8 @@ sub create_field
     my $pk        = $field->table->primary_key;
     my @pk_fields = $pk ? $pk->fields : ();
 
-    if ( 
-         $field->is_primary_key && 
+    if (
+         $field->is_primary_key &&
          scalar @pk_fields == 1 &&
          (
           $data_type =~ /int(eger)?$/i
@@ -299,7 +314,7 @@ sub create_field
 #        $pk_set    = 1;
     }
 
-    $field_def .= sprintf " %s%s", $data_type, 
+    $field_def .= sprintf " %s%s", $data_type,
     ( !$field->is_auto_increment && $size ) ? "($size)" : '';
 
     # Null?
@@ -327,13 +342,13 @@ sub create_index
     my $name   = $index->name;
     $name      = mk_name($name);
 
-    my $type   = $index->type eq 'UNIQUE' ? "UNIQUE " : ''; 
+    my $type   = $index->type eq 'UNIQUE' ? "UNIQUE " : '';
 
     # strip any field size qualifiers as SQLite doesn't like these
     my @fields = map { s/\(\d+\)$//; $_ } $index->fields;
     (my $index_table_name = $index->table->name) =~ s/^.+?\.//; # table name may not specify schema
     warn "removing schema name from '" . $index->table->name . "' to make '$index_table_name'\n" if $WARN;
-    my $index_def =  
+    my $index_def =
     "CREATE ${type}INDEX $name ON " . $index_table_name .
         ' (' . join( ', ', @fields ) . ')';
 
@@ -350,7 +365,7 @@ sub create_constraint
     (my $index_table_name = $c->table->name) =~ s/^.+?\.//; # table name may not specify schema
     warn "removing schema name from '" . $c->table->name . "' to make '$index_table_name'\n" if $WARN;
 
-    my $c_def =  
+    my $c_def =
     "CREATE UNIQUE INDEX $name ON " . $index_table_name .
         ' (' . join( ', ', @fields ) . ')';
 
@@ -364,6 +379,8 @@ sub create_trigger {
   my @statements;
 
   my $trigger_name = $trigger->name;
+  $global_names{$trigger_name} = 1;
+
   my $events = $trigger->database_events;
   for my $evt ( @$events ) {
 
@@ -472,12 +489,12 @@ sub batch_alter_table {
        @{$diffs->{alter_field}}  == 0 &&
        @{$diffs->{drop_field}}   == 0
        ) {
-#    return join("\n", map { 
-    return map { 
+#    return join("\n", map {
+    return map {
         my $meth = __PACKAGE__->can($_) or die __PACKAGE__ . " cant $_";
         map { my $sql = $meth->(ref $_ eq 'ARRAY' ? @$_ : $_); $sql ?  ("$sql") : () } @{ $diffs->{$_} }
-        
-      } grep { @{$diffs->{$_}} } 
+
+      } grep { @{$diffs->{$_}} }
     qw/rename_table
        alter_drop_constraint
        alter_drop_index
@@ -493,7 +510,7 @@ sub batch_alter_table {
 
   my @sql;
   my $old_table = $renaming ? $diffs->{rename_table}[0][0] : $table;
-  
+
   do {
     local $table->{name} = $table_name . '_temp_alter';
     # We only want the table - dont care about indexes on tmp table