XMLWordPrintable

    • Type: Improvement
    • Resolution: Fixed
    • Priority: Major
    • Component/s: None
    • None

      [Overview]
      もともとは、ALTER文を生成したいという話から発祥。

      ベースにあるポリシーとしては、DBFluteは「Entity --> DB」スタイルの開発は提供しない。
      よって、基本的にCreate文を出力したりAlter文を出力したりという機能は保持しない。
      また、本番DBに対してDBFluteが直接テーブル定義を修正するような機能は保持しない。
      本番DBに対して直接処理するプログラムはよほど信頼性が高くなくてはならない。
      ツールでやるよりもALTER文やUPDATE文を作って、しっかりアプリで制御する方が良い。

      よって、ALTER文というよりも、"差分ドキュメント" という位置づけで、
      ALTER文作成のための支援となる情報を出力する、というスタイルが
      良いと考えられる。そうすることで、同時にディベロッパーへの
      "DB変更の通知ドキュメント" としても利用できる。

      [Specification]
      JDBCタスクで、差分解析結果を出力する。
      (schema配下に、schema-diff-0.map)

      Docタスクで、差分解析結果をHTMLにする。
      (output/doc配下に、schema-[name]-history.html)

      以下、差分解析結果の定義:

      map:{
          ; diffDate = 2010/12/12 12:34:56
          ; tableCount = map:{ next = 123 ; previous = 145}
          ; tableDiff = map:{
              ; [table-name] = map:{
                  ; diffType = [ADD or CHANGE or DELETE]
                  ; unifiedSchemaDiff = map:{ next = [schema] ; previous = [schema] }
                  ; objectTypeDiff = map:{ next = [type] ; previous = [type] }
                  ; columnDiff = map:{
                      [column-name] = map:{
                          ; diffType = [ADD or CHANGE or DELETE]
                          ; dbTypeDiff = map:{next = [db-type-name]; previous = [db-type-name]}
                          ; columnSizeDiff = map:{next = [column-size&digit]; previous = [column-size&digit]}
                          ; defaultValueDiff = map:{next = [default-value]; previous = [default-value]}
                          ; notNullDiff = map:{next = [true or false] ; previous = [true or false]}
                          ; autoIncrementDiff = map:{next = [true or false] ; previous = [true or false]}
                      }
                  }
                  ; primaryKeyDiff = map:{
                      ; [pk-name] = map:{
                          ; diffType = [ADD or CHANGE or DELETE]
                          ; columnDiff = map:{
                              ; next = [column-name, ...]
                              ; previous = [column-name, ...]
                          }
                      }
                  }
                  ; foreingkKeyDiff = map:{
                      ; [fk-name] = map:{
                          ; diffType = [ADD or CHANGE or DELETE]
                          ; columnDiff = map:{
                              ; next = [column-name, ...]
                              ; previous = [column-name, ...]
                          }
                          ; foreignTableDiff = map:{
                              ; next = [table-name]
                              ; previous = [table-name]
                          }
                      }
                  }
                  ; uniqueKeyDiff = map:{
                      ; [uq-name] = map:{
                          ; diffType = [ADD or CHANGE or DELETE]
                          ; columnDiff = map:{
                              ; next = [column-name, ...]
                              ; previous = [column-name, ...]
                          }
                      }
                  }
                  ; indexDiff = map:{
                      ; [index-name] = map:{
                          ; diffType = [ADD or CHANGE or DELETE]
                          ; columnDiff = map:{
                              ; next = [column-name, ...]
                              ; previous = [column-name, ...]
                          }
                      }
                  }
              }
          }
      }
      

      [Related Task]
      o ALTER文のDBごとの文法をまとめる (DBFLUTE-590)
      o EMechaでプリミティブなインターフェースを意識せずに利用出来るようにする。

            Assignee:
            jflute
            Reporter:
            jflute
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: