Add SQL Server database backend support #1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
修正内容
DatabaseConfig.scala
にBlockingSQLDriver
対応を追加build.sbt
にmssql-jdbc
への依存関係を追加https://github.com/Microsoft/mssql-jdbc
IssuesService.scala
FOR UPDATE
を使っている箇所をSlick記法(forUpdate)に変更※既存のH2/MySQL/PostgreSQLで動作確認を行い、正常に動作することを確認済み
→ 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
側の制約で連鎖更新/連鎖削除が行われ同一動作となるため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
のリリース待ち