Fix RT49301
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / PostgreSQL.pm
index c5e54b7..b89c0d0 100644 (file)
@@ -299,22 +299,22 @@ sub unreserve {
 
 # -------------------------------------------------------------------
 sub next_unused_name {
-    my $name = shift || '';
-    if ( !defined( $used_names{$name} ) ) {
-        $used_names{$name} = $name;
-        return $name;
-    }
+    my $orig_name = shift or return;
+    my $name      = $orig_name;
+
+    my $suffix_gen = sub {
+        my $suffix = 0;
+        return ++$suffix ? '' : $suffix;
+    };
 
-    my $i = 2;
-    while ( defined( $used_names{ $name . $i } ) ) {
-        ++$i;
+    for (;;) {
+        $name = $orig_name . $suffix_gen->();
+        last if $used_names{ $name }++;
     }
-    $name .= $i;
-    $used_names{$name} = $name;
+
     return $name;
 }
 
-
 sub create_table 
 {
     my ($table, $options) = @_;
@@ -702,7 +702,7 @@ sub convert_datatype
 
     my $type_with_size = join('|',
         'bit', 'varbit', 'character', 'bit varying', 'character varying',
-        'time', 'timestamp', 'interval'
+        'time', 'timestamp', 'interval', 'numeric'
     );
 
     if ( $data_type !~ /$type_with_size/ ) {