Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add SQL Server database backend support #1

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

altrive
Copy link
Owner

@altrive altrive commented Apr 18, 2017

修正内容

  1. DatabaseConfig.scalaBlockingSQLDriver 対応を追加
  2. build.sbtmssql-jdbc への依存関係を追加
    https://github.com/Microsoft/mssql-jdbc
  3. IssuesService.scala FOR UPDATE を使っている箇所をSlick記法(forUpdate)に変更
    ※既存のH2/MySQL/PostgreSQLで動作確認を行い、正常に動作することを確認済み
  4. DBMS依存の構文でSlick側では対応できない箇所について、DB定義ファイルを分離
    → SQL差分288c614

SQL文法差異によりに修正が必要となった箇所の説明

1. CREATE OR REPLACE VIEW に非対応の問題

SQL Server側で非対応のため CREATE OR ALTER VIEW に変更。

2. Boolean型(SQL99?)に対応していない問題

Where句内については、Slick側でDB間の差異を吸収してくれないようなので
True/Falseを文字列で指定する方式に変更。(文字列指定した場合、bit型への自動キャストが行われる)

3. 制約 IDX_COMMIT_STATUS_FK2 が作れない問題

SQL Serverでは制約で連鎖更新/削除を指定する場合の条件が厳しく
連鎖参照動作の影響を複数回受けるテーブルがあると即エラーになる。(実質的に問題がない場合でも)

https://technet.microsoft.com/en-us/library/ms186973.aspx

ACCOUNTテーブルのユーザー名を変更した際、以下のFOR UPDATE CASCADEが走るが、
COMMIT_STATUSのユーザー名を更新するパスが2つ存在することが原因でエラーとなる。

  • IDX_COMMIT_STATUS_FK1: ACCOUNT -> REPOSITORY -> COMMIT_STATUS
  • IDX_COMMIT_STATUS_FK2: ACCOUNT -> COMMIT_STATUS

IDX_COMMIT_STATUS_FK1 側の制約で連鎖更新/連鎖削除が行われ同一動作となるため
IDX_COMMIT_STATUS_FK2 側の制約については NO ACTION に変更。

4. 参照制約の制限

ISSUEテーブルの主キー(ISSUE_ID, USER_NAME, REPOSITORY_NAME)の順で定義されているが
他の参照制約側は(USER_NAME, REPOSITORY_NAME, ISSUE_ID) の順で参照している。

SQL Serverでは、外部キーの対象列に UNIQUE制約 or UNIQUEインデックスが必須のためエラーとなるためISSUEテーブルに 対応するユニークな非クラスタ化インデックスを追加

5. DBカラムドロップ時の制限

DBカラムをドロップする際、該当カラムにDEFAULT制約が存在するとエラーとなるため修正。

TODO

  • blocking-slick-32 の次期バージョン 0.0.9 のリリース待ち

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant