Merge 'trunk' into 'replication_dedux'
John Napiorkowski [Fri, 30 May 2008 13:55:35 +0000 (13:55 +0000)]
r13471@dev (orig r4428):  matthewt | 2008-05-30 07:36:19 -0500
fix SQL::Translator parser to add $table_idx_ on the front of index names to prevent clashes
r13472@dev (orig r4429):  castaway | 2008-05-30 08:20:26 -0500
Started doc standards doc in Manual::Reading.
Fixed up belongs_to example to put more emphasis on the "column" part of "foreign_key_column" and corrected first paragraph.

r13473@dev (orig r4430):  ash | 2008-05-30 08:29:32 -0500
Make ingore_{constraint,index}_names default
r13474@dev (orig r4431):  ash | 2008-05-30 08:34:39 -0500
Update docs (and code changes that were missed from last commit, oops):
Set ignore_contraint_names to default on

1  2 
lib/DBIx/Class/Storage/DBI.pm
lib/SQL/Translator/Parser/DBIx/Class.pm
t/86sqlt.t

@@@ -1063,7 -1063,6 +1063,7 @@@ sub _query_start 
  
      if ( $self->debug ) {
          @bind = $self->_fix_bind_params(@bind);
 +        
          $self->debugobj->query_start( $sql, @bind );
      }
  }
@@@ -1296,16 -1295,6 +1296,16 @@@ sub select_single 
    return @row;
  }
  
 +sub reload_row {
 +      my ($self, $row) = @_;
 +      
 +    my $reload = $row->result_source->resultset->find(
 +        map { $row->$_ } $row->primary_columns
 +    );
 +    
 +    return $reload;
 +}
 +
  =head2 sth
  
  =over 4
@@@ -1443,13 -1432,22 +1443,22 @@@ sub bind_attribute_by_data_type 
  
  =over 4
  
- =item Arguments: $schema \@databases, $version, $directory, $preversion, $sqlt_args
+ =item Arguments: $schema \@databases, $version, $directory, $preversion, \%sqlt_args
  
  =back
  
  Creates a SQL file based on the Schema, for each of the specified
  database types, in the given directory.
  
+ By default, C<\%sqlt_args> will have
+  { add_drop_table => 1, ignore_constraint_names => 1, ignore_index_names => 1 }
+ merged with the hash passed in. To disable any of those features, pass in a 
+ hashref like the following
+  { ignore_constraint_names => 0, # ... other options }
  =cut
  
  sub create_ddl_dir
    $databases ||= ['MySQL', 'SQLite', 'PostgreSQL'];
    $databases = [ $databases ] if(ref($databases) ne 'ARRAY');
    $version ||= $schema->VERSION || '1.x';
-   $sqltargs = { ( add_drop_table => 1 ), %{$sqltargs || {}} };
+   $sqltargs = {
+     add_drop_table => 1, 
+     ignore_constraint_names => 1,
+     ignore_index_names => 1,
+     %{$sqltargs || {}}
+   };
  
    $self->throw_exception(q{Can't create a ddl file without SQL::Translator 0.09: '}
        . $self->_check_sqlt_message . q{'})
            unless $dest_schema->name;
        }
  
-       $DB::single = 1;
        my $diff = SQL::Translator::Diff::schema_diff($source_schema, $db,
                                                      $dest_schema,   $db,
                                                      $sqltargs
@@@ -1718,31 -1720,6 +1731,31 @@@ sub build_datetime_parser 
      }
  }
  
 +=head2 is_replicating
 +
 +A boolean that reports if a particular L<DBIx::Class::Storage::DBI> is set to
 +replicate from a master database.  Default is undef, which is the result
 +returned by databases that don't support replication.
 +
 +=cut
 +
 +sub is_replicating {
 +    return;
 +    
 +}
 +
 +=head2 lag_behind_master
 +
 +Returns a number that represents a certain amount of lag behind a master db
 +when a given storage is replicating.  The number is database dependent, but
 +starts at zero and increases with the amount of lag. Default in undef
 +
 +=cut
 +
 +sub lag_behind_master {
 +    return;
 +}
 +
  sub DESTROY {
    my $self = shift;
    return if !$self->_dbh;
@@@ -121,12 -121,8 +121,12 @@@ sub parse 
              my $othertable = $source->related_source($rel);
              my $rel_table = $othertable->name;
  
 +            # Force the order of @cond to match the order of ->add_columns
 +            my $idx;
 +            my %other_columns_idx = map {'foreign.'.$_ => ++$idx } $othertable->columns;            
 +            my @cond = sort { $other_columns_idx{$a} cmp $other_columns_idx{$b} } keys(%{$rel_info->{cond}}); 
 +      
              # Get the key information, mapping off the foreign/self markers
 -            my @cond = keys(%{$rel_info->{cond}});
              my @refkeys = map {/^\w+\.(\w+)$/} @cond;
              my @keys = map {$rel_info->{cond}->{$_} =~ /^\w+\.(\w+)$/} @cond;
  
                    );
                      
                    my $index = $table->add_index(
-                                     name   => _create_unique_symbol(join('_', @keys)),
+                                     name   => _create_unique_symbol(join('_', $table->name, 'idx', @keys)),
                                      fields => \@keys,
                                      type   => 'NORMAL',
                    );
diff --combined t/86sqlt.t
@@@ -40,14 -40,14 +40,14 @@@ my %fk_constraints = 
    twokeys => [
      {
        'display' => 'twokeys->cd',
-       'name' => 'twokeys_fk_cd', 'index_name' => 'cd',
+       'name' => 'twokeys_fk_cd', 'index_name' => 'twokeys_idx_cd',
        'selftable' => 'twokeys', 'foreigntable' => 'cd', 
        'selfcols'  => ['cd'], 'foreigncols' => ['cdid'], 
        on_delete => '', on_update => '', deferrable => 0,
      },
      {
        'display' => 'twokeys->artist',
-       'name' => 'twokeys_fk_artist', 'index_name' => 'artist',
+       'name' => 'twokeys_fk_artist', 'index_name' => 'twokeys_idx_artist',
        'selftable' => 'twokeys', 'foreigntable' => 'artist', 
        'selfcols'  => ['artist'], 'foreigncols' => ['artistid'],
        on_delete => 'CASCADE', on_update => 'CASCADE', deferrable => 1,
    fourkeys_to_twokeys => [
      {
        'display' => 'fourkeys_to_twokeys->twokeys',
 -      'name' => 'fourkeys_to_twokeys_fk_t_cd_t_artist', 'index_name' => 'fourkeys_to_twokeys_idx_t_cd_t_artist',
 +      'name' => 'fourkeys_to_twokeys_fk_t_artist_t_cd', 'index_name' => 't_artist_t_cd',
        'selftable' => 'fourkeys_to_twokeys', 'foreigntable' => 'twokeys', 
        'selfcols'  => ['t_artist', 't_cd'], 'foreigncols' => ['artist', 'cd'], 
        on_delete => 'CASCADE', on_update => 'CASCADE', deferrable => 1,
      },
      {
 -      'display' => 'fourkeys_to_twokeys->fourkeys', 'index_name' => 'fourkeys_to_twokeys_idx_f_foo_f_goodbye_f_hello_f_bar',
 -      'name' => 'fourkeys_to_twokeys_fk_f_foo_f_goodbye_f_hello_f_bar',
 +      'display' => 'fourkeys_to_twokeys->fourkeys', 'index_name' => 'f_foo_f_bar_f_hello_f_goodbye',
 +      'name' => 'fourkeys_to_twokeys_fk_f_foo_f_bar_f_hello_f_goodbye',
        'selftable' => 'fourkeys_to_twokeys', 'foreigntable' => 'fourkeys', 
        'selfcols'  => [qw(f_foo f_bar f_hello f_goodbye)],
        'foreigncols' => [qw(foo bar hello goodbye)], 
    cd_to_producer => [
      {
        'display' => 'cd_to_producer->cd',
-       'name' => 'cd_to_producer_fk_cd', 'index_name' => 'cd',
+       'name' => 'cd_to_producer_fk_cd', 'index_name' => 'cd_to_producer_idx_cd',
        'selftable' => 'cd_to_producer', 'foreigntable' => 'cd', 
        'selfcols'  => ['cd'], 'foreigncols' => ['cdid'],
        on_delete => 'CASCADE', on_update => 'CASCADE', deferrable => 1,
      },
      {
        'display' => 'cd_to_producer->producer',
-       'name' => 'cd_to_producer_fk_producer', 'index_name' => 'producer',
+       'name' => 'cd_to_producer_fk_producer', 'index_name' => 'cd_to_producer_idx_producer',
        'selftable' => 'cd_to_producer', 'foreigntable' => 'producer', 
        'selfcols'  => ['producer'], 'foreigncols' => ['producerid'],
        on_delete => '', on_update => '', deferrable => 1,
    self_ref_alias => [
      {
        'display' => 'self_ref_alias->self_ref for self_ref',
-       'name' => 'self_ref_alias_fk_self_ref', 'index_name' => 'self_ref',
+       'name' => 'self_ref_alias_fk_self_ref', 'index_name' => 'self_ref_alias_idx_self_ref',
        'selftable' => 'self_ref_alias', 'foreigntable' => 'self_ref', 
        'selfcols'  => ['self_ref'], 'foreigncols' => ['id'],
        on_delete => 'CASCADE', on_update => 'CASCADE', deferrable => 1,
      },
      {
        'display' => 'self_ref_alias->self_ref for alias',
-       'name' => 'self_ref_alias_fk_alias', 'index_name' => 'alias',
+       'name' => 'self_ref_alias_fk_alias', 'index_name' => 'self_ref_alias_idx_alias',
        'selftable' => 'self_ref_alias', 'foreigntable' => 'self_ref', 
        'selfcols'  => ['alias'], 'foreigncols' => ['id'],
        on_delete => '', on_update => '', deferrable => 1,
    cd => [
      {
        'display' => 'cd->artist',
-       'name' => 'cd_fk_artist', 'index_name' => 'artist',
+       'name' => 'cd_fk_artist', 'index_name' => 'cd_idx_artist',
        'selftable' => 'cd', 'foreigntable' => 'artist', 
        'selfcols'  => ['artist'], 'foreigncols' => ['artistid'],
        on_delete => 'CASCADE', on_update => 'CASCADE', deferrable => 1,
    artist_undirected_map => [
      {
        'display' => 'artist_undirected_map->artist for id1',
-       'name' => 'artist_undirected_map_fk_id1', 'index_name' => 'id1',
+       'name' => 'artist_undirected_map_fk_id1', 'index_name' => 'artist_undirected_map_idx_id1',
        'selftable' => 'artist_undirected_map', 'foreigntable' => 'artist', 
        'selfcols'  => ['id1'], 'foreigncols' => ['artistid'],
        on_delete => 'CASCADE', on_update => '', deferrable => 1,
      },
      {
        'display' => 'artist_undirected_map->artist for id2',
-       'name' => 'artist_undirected_map_fk_id2', 'index_name' => 'id2',
+       'name' => 'artist_undirected_map_fk_id2', 'index_name' => 'artist_undirected_map_idx_id2',
        'selftable' => 'artist_undirected_map', 'foreigntable' => 'artist', 
        'selfcols'  => ['id2'], 'foreigncols' => ['artistid'],
        on_delete => 'CASCADE', on_update => '', deferrable => 1,
    track => [
      {
        'display' => 'track->cd',
-       'name' => 'track_fk_cd', 'index_name' => 'cd',
+       'name' => 'track_fk_cd', 'index_name' => 'track_idx_cd',
        'selftable' => 'track', 'foreigntable' => 'cd', 
        'selfcols'  => ['cd'], 'foreigncols' => ['cdid'],
        on_delete => 'CASCADE', on_update => 'CASCADE', deferrable => 1,
    treelike => [
      {
        'display' => 'treelike->treelike for parent',
 -      'name' => 'treelike_fk_parent', 'index_name' => 'treelike_idx_parent',
 +      'name' => 'treelike_fk_parent_fk', 'index_name' => 'parent_fk',
        'selftable' => 'treelike', 'foreigntable' => 'treelike', 
 -      'selfcols'  => ['parent'], 'foreigncols' => ['id'],
 +      'selfcols'  => ['parent_fk'], 'foreigncols' => ['id'],
        on_delete => 'CASCADE', on_update => 'CASCADE', deferrable => 1,
      },
    ],
    twokeytreelike => [
      {
        'display' => 'twokeytreelike->twokeytreelike for parent1,parent2',
-       'name' => 'twokeytreelike_fk_parent1_parent2', 'index_name' => 'parent1_parent2',
+       'name' => 'twokeytreelike_fk_parent1_parent2', 'index_name' => 'twokeytreelike_idx_parent1_parent2',
        'selftable' => 'twokeytreelike', 'foreigntable' => 'twokeytreelike', 
        'selfcols'  => ['parent1', 'parent2'], 'foreigncols' => ['id1','id2'],
        on_delete => '', on_update => '', deferrable => 1,
    tags => [
      {
        'display' => 'tags->cd',
-       'name' => 'tags_fk_cd', 'index_name' => 'cd',
+       'name' => 'tags_fk_cd', 'index_name' => 'tags_idx_cd',
        'selftable' => 'tags', 'foreigntable' => 'cd', 
        'selfcols'  => ['cd'], 'foreigncols' => ['cdid'],
        on_delete => 'CASCADE', on_update => 'CASCADE', deferrable => 1,
    bookmark => [
      {
        'display' => 'bookmark->link',
-       'name' => 'bookmark_fk_link', 'index_name' => 'link',
+       'name' => 'bookmark_fk_link', 'index_name' => 'bookmark_idx_link',
        'selftable' => 'bookmark', 'foreigntable' => 'link', 
        'selfcols'  => ['link'], 'foreigncols' => ['id'],
        on_delete => '', on_update => '', deferrable => 1,
    forceforeign => [
      {
        'display' => 'forceforeign->artist',
-       'name' => 'forceforeign_fk_artist', 'index_name' => 'artist',
+       'name' => 'forceforeign_fk_artist', 'index_name' => 'forceforeign_idx_artist',
        'selftable' => 'forceforeign', 'foreigntable' => 'artist', 
 -      'selfcols'  => ['artist'], 'foreigncols' => ['artist_id'], 
 +      'selfcols'  => ['artist'], 'foreigncols' => ['artistid'], 
        on_delete => '', on_update => '', deferrable => 1,
      },
    ],
      {
        'display' => 'long_columns->owner',
        'name' => 'long_columns_fk__64_character_column_aaaaaaaaaaaaaaaaaa_cfc8d5b0',
-       'index_name' => '_64_character_column_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
+       'index_name' => 'long_columns_idx__64_character_column_aaaaaaaaaaaaaaaaa_5050aa42',
        'selftable' => 'long_columns', 'foreigntable' => 'long_columns',
        'selfcols' => ['_64_character_column_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'],
        'foreigncols' => ['lcid'],
      },
      {
        'display' => 'long_columns->owner2',
 -      'name' => 'long_columns_fk__32_character_column_aaaaaaaaaaa__32_ch_12bdb9cf',
 -      'index_name' => 'long_columns_idx__32_character_column_aaaaaaaaaaa__32_c_18636e21',
 +      'name' => 'long_columns_fk__32_character_column_bbbbbbbbbbb__32_ch_b7ee284e',
 +      'index_name' => '_32_character_column_bbbbbbbbbbb__32_character_column_a_76863ce2',
        'selftable' => 'long_columns', 'foreigntable' => 'long_columns',
        'selfcols' => ['_32_character_column_bbbbbbbbbbb', '_32_character_column_aaaaaaaaaaa'],
        'foreigncols' => ['_32_character_column_aaaaaaaaaaa', '_32_character_column_bbbbbbbbbbb'],
      {
        'display' => 'long_columns->owner3',
        'name' => 'long_columns_fk__16_chars_column',
-       'index_name' => '_16_chars_column',
+       'index_name' => 'long_columns_idx__16_chars_column',
        'selftable' => 'long_columns', 'foreigntable' => 'long_columns',
        'selfcols' => ['_16_chars_column'], 'foreigncols' => ['_8_chr_c'],
        on_delete => '', on_update => '', deferrable => 1,