Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 8979

Show
Ignore:
Timestamp:
03/03/08 06:56:31 (5 months ago)
Author:
nzkoz
Message:

Make the schema dumper respect the schema settings in database.yml. References #8659 [sveiss]

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb

    r8922 r8979  
    487487      # Returns the list of all indexes for a table. 
    488488      def indexes(table_name, name = nil) 
    489         result = query(<<-SQL, name) 
    490           SELECT i.relname, d.indisunique, a.attname 
    491             FROM pg_class t, pg_class i, pg_index d, pg_attribute a 
     489         schemas = schema_search_path.split(/,/).map { |p| quote(p) }.join(',') 
     490         result = query(<<-SQL, name) 
     491           SELECT distinct i.relname, d.indisunique, a.attname 
     492             FROM pg_class t, pg_class i, pg_index d, pg_attribute a 
    492493           WHERE i.relkind = 'i' 
    493494             AND d.indexrelid = i.oid 
     
    495496             AND t.oid = d.indrelid 
    496497             AND t.relname = '#{table_name}' 
     498             AND i.relnamespace IN (SELECT oid FROM pg_namespace WHERE nspname IN (#{schemas}) ) 
    497499             AND a.attrelid = t.oid 
    498500             AND ( d.indkey[0]=a.attnum OR d.indkey[1]=a.attnum 
  • trunk/activerecord/test/cases/schema_test_postgresql.rb

    r8681 r8979  
    55 
    66  SCHEMA_NAME = 'test_schema' 
     7  SCHEMA2_NAME = 'test_schema2' 
    78  TABLE_NAME = 'things' 
     9  INDEX_A_NAME = 'a_index_things_on_name' 
     10  INDEX_B_NAME = 'b_index_things_on_different_columns_in_each_schema' 
     11  INDEX_A_COLUMN = 'name' 
     12  INDEX_B_COLUMN_S1 = 'email' 
     13  INDEX_B_COLUMN_S2 = 'moment' 
    814  COLUMNS = [ 
    915    'id integer', 
    1016    'name character varying(50)', 
     17    'email character varying(50)', 
    1118    'moment timestamp without time zone default now()' 
    1219  ] 
     
    1522    @connection = ActiveRecord::Base.connection 
    1623    @connection.execute "CREATE SCHEMA #{SCHEMA_NAME} CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})" 
     24    @connection.execute "CREATE SCHEMA #{SCHEMA2_NAME} CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})" 
     25    @connection.execute "CREATE INDEX #{INDEX_A_NAME} ON #{SCHEMA_NAME}.#{TABLE_NAME}  USING btree (#{INDEX_A_COLUMN});" 
     26    @connection.execute "CREATE INDEX #{INDEX_A_NAME} ON #{SCHEMA2_NAME}.#{TABLE_NAME}  USING btree (#{INDEX_A_COLUMN});" 
     27    @connection.execute "CREATE INDEX #{INDEX_B_NAME} ON #{SCHEMA_NAME}.#{TABLE_NAME}  USING btree (#{INDEX_B_COLUMN_S1});" 
     28    @connection.execute "CREATE INDEX #{INDEX_B_NAME} ON #{SCHEMA2_NAME}.#{TABLE_NAME}  USING btree (#{INDEX_B_COLUMN_S2});" 
    1729  end 
    1830 
    1931  def teardown 
     32    @connection.execute "DROP SCHEMA #{SCHEMA2_NAME} CASCADE" 
    2033    @connection.execute "DROP SCHEMA #{SCHEMA_NAME} CASCADE" 
    2134  end 
     
    4962  end 
    5063 
     64  def test_dump_indexes_for_schema_one 
     65    do_dump_index_tests_for_schema(SCHEMA_NAME, INDEX_A_COLUMN, INDEX_B_COLUMN_S1) 
     66  end 
     67 
     68  def test_dump_indexes_for_schema_two 
     69    do_dump_index_tests_for_schema(SCHEMA2_NAME, INDEX_A_COLUMN, INDEX_B_COLUMN_S2) 
     70  end 
     71 
    5172  private 
    5273    def columns(table_name) 
     
    6283      @connection.schema_search_path = "'$user', public" 
    6384    end 
     85 
     86    def do_dump_index_tests_for_schema(this_schema_name, first_index_column_name, second_index_column_name) 
     87      with_schema_search_path(this_schema_name) do 
     88        indexes = @connection.indexes(TABLE_NAME).sort_by {|i| i.name} 
     89        assert_equal 2,indexes.size 
     90 
     91        do_dump_index_assertions_for_one_index(indexes[0], INDEX_A_NAME, first_index_column_name) 
     92        do_dump_index_assertions_for_one_index(indexes[1], INDEX_B_NAME, second_index_column_name) 
     93      end 
     94    end 
     95 
     96    def do_dump_index_assertions_for_one_index(this_index, this_index_name, this_index_column) 
     97      assert_equal TABLE_NAME, this_index.table 
     98      assert_equal 1, this_index.columns.size 
     99      assert_equal this_index_column, this_index.columns[0] 
     100      assert_equal this_index_name, this_index.name 
     101    end 
    64102end