14:35:12 @tateisu@mastodon.juggler.jp
icon

@abcang じゃあ対応しときますか…

14:21:56 @tateisu@mastodon.juggler.jp
icon

@abcang
個人的には普段からkotlinでtextNullable?.isNotEmpty() == true とか textNullable?.isEmpty() != false とかが日常になってるので3値論理を回避する理由は特にないのですが、mastodonの人たちがどうなのかはよく知りません

14:05:07 @tateisu@mastodon.juggler.jp
icon

@abcang まあ今回それを行う積極的な理由はないと思うのですよね…。migrationが重くなるだけ

13:43:19 @tateisu@mastodon.juggler.jp
icon

@abcang change_column_default :mentions, :direct, false してもDBのカラムにはデフォルト値は設定されないですね。alter table mentions alter column direct set default false; みたいのが走るかと思ってたらそんなことはなかった。なので結局クエリを書く時は3値論理の考慮を強いられるみたいです。

13:24:16 @tateisu@mastodon.juggler.jp
icon

@abcang PRを更新してみました。手元の環境でrollbackとmigrateを行って、直後にpsqlで select direct,count(0) from mentions group by direct; してdirectカラムの初期化が行われていることを確認済みです

13:07:01 @tateisu@mastodon.juggler.jp
icon

@abcang 前提が違うみたいなんですが、あのupdateは全件に対して働く訳じゃなくて、visibility=3のstatusesに対応するmentionsだけをupdateするやつですよ

13:00:26 @tateisu@mastodon.juggler.jp
icon

@abcang add_columnのタイミングでnull:falseしたり非nullなデフォルト値を設定したりするとstrong migrationになっちゃいますね。テーブル全体書き換える重い奴です。add_columnした後にデフォルト値を設定する程度なら書き換えずに済むみたい

11:33:26 @tateisu@mastodon.juggler.jp
icon

野菜ジュースとノンアルコールビールのちゃんぽんうまー

11:08:03 @tateisu@mastodon.juggler.jp
icon

github.com/tootsuite/mastodon/ は落ち着いたので査収おねがいします…

Web site image
optimize direct timeline by tateisu · Pull Request #7614 · mastodon/mastodon
10:49:36 @tateisu@mastodon.juggler.jp
icon

arel_tableを使うことで定数のパラメータ化を防止できるようだ

10:24:30 @tateisu@mastodon.juggler.jp
icon

PREPARED_STATEMENTS=false をせずにそのまま使ってるタンスって結構あるのかな。…あるんだろうなあ…

09:42:06 @tateisu@mastodon.juggler.jp
icon

意味的にはズレがあるけど506あたりで返せば誰も困らないんじゃないかな

09:32:16 @tateisu@mastodon.juggler.jp
icon

5xxなのは良いとして、503以外のエラーを返すようにすればいいのでは。あとは監視系で工夫すればよさそう

09:25:48 @tateisu@mastodon.juggler.jp
icon

where() にただの文字列を渡せば定数のまま取り扱ってくれるかというと、そんなことはなかった…。

09:12:45 @tateisu@mastodon.juggler.jp
icon

masterでlightテーマが復活してますが、ミュート確認ダイアログの色がひどいことになってます

09:11:49 @tateisu@mastodon.juggler.jp
icon

というか即値部分まで勝手にbind parameter化するのはRailsの暗黒面だな…

09:09:46 @tateisu@mastodon.juggler.jp
icon

コードから個別にprepared statement を無効化するには to_sql した後で unprepared_statement で囲む必要があるらしいが、今のコード構成だとやりづらい感じあるな…

08:52:11 @tateisu@mastodon.juggler.jp
icon

postgresqlのlog_statementをいじって確認したんですけど、Railsってクエリ中の定数パラメータ(where visiblity=3 みたいなの) を prepared statement のためにbind parameter 化するんですよ。そしてPostgreSQLはbind parameterに関しては部分インデクスの利用を行ってくれないのです。.env.production に PREPARED_STATEMENTS=false って書いとけばこの現象は起きません。pgbouncer導入してる人は既にこうなってるはず。

03:40:39 @tateisu@mastodon.juggler.jp
icon

ぐんにゃり

02:35:40 @tateisu@mastodon.juggler.jp
icon

@abcang migrationのアレのことなら、動くよ。ロック範囲の方は良いやり方があれば教えてください。