2020年2月9日日曜日

[Go] sql_calc_found_rowsでハマる

sql_calc_found_rowsを使って件数を取る処理を書いてハマった件について。
localで動かしてる分には問題なく動いてるように見えたんだけど、
server上で動かすとちゃんと返したり、0件になったりする。

原因としては別のconnectionが使われて、 select found_rows() が0を返していた。
同じconnectionが使わないといけないので、Connを使う必要があった。
 ctx := context.Background()
 conn, _ := db.Conn(ctx)
 defer conn.Close()

 rows, _ := conn.QueryContext(ctx, "select sql_calc_found_rows * from users")
 defer rows.Close()

 var rows uint32
 _ := conn.QueryRowContext(ctx, "select found_rows()").Scan(&rows)
エラー処理は省略してるけど、だいたいこんな感じにすることで、問題は解決。