なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2017/02/10)

2017/02/10分のコミットです。

CHANGELOGへの追加はありませんでした。


Add note about breakage in file uploads in controller tests to upgrading

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

Upgrading from Rails 4.2 to Rails 5.0New behavior when uploading filesの項を追加し、テストでActionDispatch::Http::UploadedFileを使用していた場合は、Rack::Test::UploadedFileに変更する必要がある旨説明を追加しています。


Simplify and speed up Postgres query for primary_keys

activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rbの修正です。

PostgreSQLでprimary keyを取得する為のqueryのリファクタリングを行なっています。

        def primary_keys(table_name) # :nodoc:
           select_values(<<-SQL.strip_heredoc, "SCHEMA")
-            WITH pk_constraint AS (
-              SELECT conrelid, unnest(conkey) AS connum FROM pg_constraint
-              WHERE contype = 'p'
-                AND conrelid = #{quote(quote_table_name(table_name))}::regclass
-            ), cons AS (
-              SELECT conrelid, connum, row_number() OVER() AS rownum FROM pk_constraint
-            )
-            SELECT attr.attname FROM pg_attribute attr
-            INNER JOIN cons ON attr.attrelid = cons.conrelid AND attr.attnum = cons.connum
-            ORDER BY cons.rownum
+                SELECT a.attname
+                  FROM pg_index i
+            CROSS JOIN unnest(i.indkey) as k
+                  JOIN pg_attribute a
+                    ON a.attrelid = i.indrelid
+                   AND a.attnum = k
+                 WHERE i.indrelid = #{quote(quote_table_name(table_name))}::regclass
+                   AND i.indisprimary
           SQL
         end

元々はpg_constraint + pg_attributeから取得していたのを、pg_index + pg_attributeから取得するようにしています。処理が重いWITH問い合わせやWindows関数を使用せずに済む為との事です。

が、この対応によりcolumn orderが維持されなくなってしまった為、後ほどrevertされています。


Update configuration guide about ActiveRecord’s config option.

rails guideのConfiguring Rails Applicationsの修正です。

config.active_record.use_schema_cache_dumpオプションについての説明を追加しています。


Fix test_composite_primary_key_out_of_order

activerecord/test/cases/primary_keys_test.rbの修正です。

composite primary keyのテストで、テストに使用するテーブル名が誤っていたのを修正しています。


Revert “Simplify and speed up Postgres query for primary_keys”

PostgreSQLでprimary keyを取得する為のqueryのリファクタリングを行った、Simplify and speed up Postgres query for primary_keys をrevertしています。理由は先に書いたとおり。


Fix rubocop violations

rubocopのルールに違反していた箇所をまとめて修正しています。


Use released resque

Gemfileの修正です。

resqueGitHubリポジトリを指定していたのを、リリース済みのgemを使用するよう修正しています。 resque 1.2.6にバグがあった為GitHubリポジトリを指定していたのですが、バグfixが含まれたgemがリリースされ、GitHubリポジトリを指定する必要は無くなった為修正しています。