Ticket #8659: index_dump_in_postgresql_adapter_and_matching_test_case.patch
| File index_dump_in_postgresql_adapter_and_matching_test_case.patch, 3.0 kB (added by jean.helou, 1 year ago) |
|---|
-
test/schema_test_postgresql.rb
old new 4 4 self.use_transactional_fixtures = false 5 5 6 6 SCHEMA_NAME = 'test_schema' 7 SCHEMA2_NAME = 'test_schema2' 7 8 TABLE_NAME = 'things' 9 INDEX_NAME = 'index_things_on_name' 10 INDEX_COLUMN = 'name' 8 11 COLUMNS = [ 9 12 'id integer', 10 13 'name character varying(50)', … … 14 17 def setup 15 18 @connection = ActiveRecord::Base.connection 16 19 @connection.execute "CREATE SCHEMA #{SCHEMA_NAME} CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})" 20 @connection.execute "CREATE SCHEMA #{SCHEMA2_NAME} CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})" 21 @connection.execute "CREATE INDEX #{INDEX_NAME} ON #{SCHEMA_NAME}.#{TABLE_NAME} USING btree (#{INDEX_COLUMN});" 22 @connection.execute "CREATE INDEX #{INDEX_NAME} ON #{SCHEMA2_NAME}.#{TABLE_NAME} USING btree (#{INDEX_COLUMN});" 17 23 end 18 24 19 25 def teardown 26 @connection.execute "DROP INDEX #{SCHEMA2_NAME}.#{INDEX_NAME}" 27 @connection.execute "DROP INDEX #{SCHEMA_NAME}.#{INDEX_NAME}" 28 @connection.execute "DROP SCHEMA #{SCHEMA2_NAME} CASCADE" 20 29 @connection.execute "DROP SCHEMA #{SCHEMA_NAME} CASCADE" 21 30 end 22 31 … … 48 57 assert_nothing_raised { with_schema_search_path nil } 49 58 end 50 59 60 def test_dump_indexes 61 indexes = @connection.indexes(TABLE_NAME) 62 assert_equal 1,indexes.size 63 idx = indexes[0] 64 assert_equal TABLE_NAME, idx.table 65 assert_equal 1, idx.columns.size 66 assert_equal INDEX_COLUMN, idx.columns[0] 67 assert_equal INDEX_NAME, idx.table.inspect 68 69 end 51 70 private 52 71 def columns(table_name) 53 72 @connection.send(:column_definitions, table_name).map do |name, type, default| -
lib/active_record/connection_adapters/postgresql_adapter.rb
old new 195 195 end 196 196 197 197 def indexes(table_name, name = nil) #:nodoc: 198 result = query(<<-SQL, name) 199 SELECT i.relname, d.indisunique, a.attname 200 FROM pg_class t, pg_class i, pg_index d, pg_attribute a 198 schemas = schema_search_path.split(/,/).map { |p| quote(p) }.join(',') 199 result = query(<<-SQL, name) 200 SELECT distinct i.relname, d.indisunique, a.attname, s.schemaname 201 FROM pg_class t, pg_class i, pg_index d, pg_attribute a, pg_tables s 201 202 WHERE i.relkind = 'i' 202 203 AND d.indexrelid = i.oid 203 204 AND d.indisprimary = 'f' 204 205 AND t.oid = d.indrelid 205 206 AND t.relname = '#{table_name}' 207 AND t.relname = s.tablename 208 AND s.schemaname in (#{schemas}) 206 209 AND a.attrelid = t.oid 207 210 AND ( d.indkey[0]=a.attnum OR d.indkey[1]=a.attnum 208 211 OR d.indkey[2]=a.attnum OR d.indkey[3]=a.attnum