GitBucket + MariaDBの構築でハマった件

言うほどハマっていないです。

前提条件

  • Ubuntu 16.04
  • GitBucket 4.15.0
  • MariaDB 10.2.7

ISSUE_OUTLINE_VIEWがおかしいだの何だの怒られる

MySQLのバグ(というか仕様)で、ビューのFROM句でサブクエリを使えない、というのが原因。普段、仕事でもビューを使うことがないのでそんなこと全く知りませんでした(情弱

どうしましょうと思いググってみると、本家GitBucketのissueに解決法が載っていました。

github.com

4.14.0でビューを作成するSQLが変更になっているので、上記に書いてあるSQLでは対応できません。といっても、サブクエリ部分を別のビューに切り出しているだけなので、ソースと見比べながら作業すれば修正自体は数秒で終わります。

ということで、最新の4.15.0対応版が以下のSQL。

CREATE OR REPLACE VIEW ISSUE_OUTLINE_VIEW_SUB1 AS
  SELECT
    USER_NAME
    , REPOSITORY_NAME
    , ISSUE_ID
    , COUNT(COMMENT_ID) AS COMMENT_COUNT
  FROM
    ISSUE_COMMENT
  WHERE
    ACTION IN ('comment', 'close_comment', 'reopen_comment')
  GROUP BY
    USER_NAME
    , REPOSITORY_NAME
    , ISSUE_ID;

CREATE OR REPLACE VIEW ISSUE_OUTLINE_VIEW_SUB2 AS
  SELECT
    USER_NAME
    , REPOSITORY_NAME
    , ISSUE_ID
    , COUNT(COMMENT_ID) AS COMMENT_COUNT
  FROM
    COMMIT_COMMENT
  GROUP BY
    USER_NAME
    , REPOSITORY_NAME
    , ISSUE_ID;

CREATE OR REPLACE VIEW ISSUE_OUTLINE_VIEW AS
  SELECT
    A.USER_NAME
    , A.REPOSITORY_NAME
    , A.ISSUE_ID
    , COALESCE(B.COMMENT_COUNT, 0) + COALESCE(C.COMMENT_COUNT, 0) AS COMMENT_COUNT
    , COALESCE(D.ORDERING, 9999) AS PRIORITY
  FROM ISSUE A
  LEFT OUTER JOIN ISSUE_OUTLINE_VIEW_SUB1 B
  ON (A.USER_NAME = B.USER_NAME AND A.REPOSITORY_NAME = B.REPOSITORY_NAME AND A.ISSUE_ID = B.ISSUE_ID)
  LEFT OUTER JOIN ISSUE_OUTLINE_VIEW_SUB2 C
  ON (A.USER_NAME = C.USER_NAME AND A.REPOSITORY_NAME = C.REPOSITORY_NAME AND A.ISSUE_ID = C.ISSUE_ID)
  LEFT OUTER JOIN PRIORITY D
  ON (A.PRIORITY_ID = D.PRIORITY_ID);

マリア様がみてない

PostgreSQLに移行したいです。