XMLDBの予備知識 (Dev docs)

提供:MoodleDocs
移動先:案内検索

XMLDB ドキュメンテーション > 導入 > XMLDBの予備知識


このメモは、プロジェクトの初期段階で、新しいものをどう扱うかについて、テストにより多くの情報が得られる限り、集められたものです。 XMLDB ドキュメントの最終的な場所に移動すると、移動 タグでマークされます。

  1. XMLDB DML関数の変更 (Dev docs) へ移動LIMIT offset, num 句のすべての使用を、クロスデータベース互換の SelectLimit() 関数に変更する必要があります。2つの選択肢が考えられます:
    1. get_records_limit() (および get_recordset_limit() ?) 関数の新しいセットを作成し、offset と num パラメータを指定できるようにする。
    2. 現在の get_records() (および get_recordset() ) 関数を、さらに2つのオプションのパラメータ (offset, num) を指定できるように変更する。
  2. XMLDBの問題 (Dev docs) へ移動。SQL*Server、Oracle... これらの DB では ADOdb によって エミュレート されるため、LIMIT 句をサポートしていないため、そのような SelectLimit() コールの影響を分析します。offset パラメータが大きくなると、ADOdb は望ましい ウィンドウ を得るためにより多くのレコードを繰り返し処理しなければならず、長いレコードセットの下では問題になるかもしれません!
  3. XMLDBの問題 (Dev docs) へ移動。以前に作成したDBオブジェクト(インデックス、ユニークインデックス、シーケンス...)の命名スキーマが ADOdb によって実装されたものと一致しない場合、それらをどうすればよいでしょうか。すべて削除/再作成しますか?変更しないままですか?
  4. XMLDBの問題 (Dev docs) へ移動。 現在、MySQL と PostgreSQL の両方で、ADODB_FETCH_BOTH (デフォルト) が使用されているので、すべての情報は、実質的に、重複しています。一方、SQL*Server は、デフォルトで ADODB_FETCH_NUM を使用します (ADODB_FETCH_ASSOC に変更することも可能です) 。提案ですが、接続後、ALWAYS を ADODB_FETCH_ASSOC に変更します。これは全ての DB でサポートされており (ADODB_FETCH_BOTH はサポートされていません!) 、レコード配列のメモリ (と速度?) を50%近く節約できるでしょう!もし、Moodle 内部で ADODB_FETCH_NUM 構造を使用している場所があれば (本当に使われていないと思いますが) 、それらを更新しなければなりません。 更新: ADODB_FETCH_ASSOC への変換で id フィールドが失われるようなので、おそらくこのモードを強制するのは良いアイデアではないでしょう! :-( 更新: また、getAssoc() の呼び出しをハックして、id フィールドを追加し直すことも可能です。メモリゲインは本当に大きいです!そして、FETCH_NUM を必要とする場所は、本当に膨大であってはなりません...うーん...。
  5. 完了!: ADODB_ASSOC_CASE を 0 (小文字) に強制変更します。DB によってはこれを破る可能性があり、今までは mysql も postgresql も小文字のフィールド名で問題なく動作していました。
  6. XMLDBの問題 (Dev docs)#Moodle DB の予約語に移動。予約語。どうすればよいでしょうか?ここで恐ろしい例をひとつ: "USER": http://www.petefreitag.com/tools/sql_reserved_words_checker/?word=user
    1. 引用してみてください。
    2. Moodleの下で完全に変更します。
  7. XMLDB XML構造の定義 (Dev docs) に移動。XML データベーススキーマをパースして、すべてのテーブル/インデックス/制約にプレフィックスを追加してからパースして実行する必要があります!
  8. XMLDB 新しいDDL関数の作成 (Dev docs) に移動。アップグレードがどのように成功するか分析します。すべて1つのユニークな upgrade.php ファイル内にあります、さて、DML は php であるべきですが、DDL は、どのようにそれを処理するのでしょうか?すべてを作り、変え、落とす機能を大量に作ることを提案します!特殊な DB をカスタマイズして処理します。(これにより、より読みやすいアップグレードスクリプトを作成できます) 。
  9. XMLDB DML関数の変更 (Dev docs) に移動。MSSQLでは、標準の adslashses の代わりに、引用符にもう1つ引用符を追加することで引用符をエスケープしています。これは qstr() を使うか (従って多くの addslashes() 呼び出しを修正する必要があります) 、 SQL*server に対して実行する際に magic_quotes_sybase を設定することで解決できます (addslashes() は引用文字だけをエスケープします) 。解決策とは関係なく、$CFG->dbtype に基づいて正しい文字をストリップするように stripslashes_safe() を修正しなければなりません (magic_quotes_sybase 設定が magic_quotes_gpc によって引用されたものも修正するため) 。
  10. XMLDB DML関数の変更 (Dev docs) に移動。Oracle では、postgresql の insert_record() と同様のメカニズムが必要かもしれません: シーケンスの nextval を取得し、id が必要なときにレコードを挿入します。簡単ですね。
  11. XMLDB DML関数の変更 (Dev docs) に移動。CLOB/BLOB データを挿入する際のOracleの重要な問題。Oracle では、2つのステップ (INSERT empty_b/clob() と UPDATE が必要です) があります。 これは、現在の MEDIUMTEXT、TEXT、BYTEA カラムに対して、2ステップのアプローチを使用するために、すべての更新をレビューすることを強制するものです: http://phplens.com/adodb/reference.functions.updateblob.html および http://phplens.com/adodb/reference.functions.updateclob.html. SQL*Server に対するテストが必要 (明示的にサポートされていないため) です。これを透過的にサポートするために、中央の挿入/更新 datalib 関数にいくつかのラッパーの修正を実装し、何らかのパラメータを追加するか、動的に検出することができます (列のメタデータを取得し、db 型を検出します...) 。しかし、すべてのハードコードされた INSERT と UPDATE 文は、Moodle のコードから消え、常に datalib 関数を使用するようにすべきです。
  12. XMLDB datalib.phpの分割 (Dev docs) に移動。datalib.php を、"wrapper-over-adodb" の目的ではないいくつかの関数から緩和し、それらを独自のライブラリ (モジュール、コース...) に移動させます。これで、より小さく、より明確に定義された (そして文書化された) 1つの datalib を完成させることができるはずです。
  13. XMLDBの問題 (Dev docs) に移動。NOT NULL フィールドを持つユーザ Oracle (および SQL*Server) で、'' 値を挿入しようとすると問題が発生します。許されません!DB 全体のこれらのフィールドを再調査し、そのステータスを NULLABLE に変更する必要があります。最近 MySQL でたくさん変更された理由を分析しましょう!http://moodle.org/bugs/bug.php?op=show&bugid=6218 バグ 6218] も参照してください。
  14. XMLDBの問題 (Dev docs) に移動。正規表現。Oracle (10g まで使用不可)、MSSQL (使用不可) での問題点。Oracle 10g では直接実装されており、古くから (Oracle 8i?) あるパッケージで処理されています (owa_pattern) 。MSSQL は、いくつかの ストアドプロシージャ をインストールすることで、それらを実行することができます。あ、あ、一部の (いくつかの) クエリに問題が...。
  15. XMLDB DML関数の変更 (Dev docs) に移動。文字列の連結に関する非互換性: MySQL は CONCAT() 関数を使用しますが、Oracle および PostgreSQL は '||' 連結演算子を使用し、MSSQL は '+' 演算子を使用します。これは、Moodle のインストールおよびいくつかのクエリに影響します。インストール時に、何かを定義し (よく定義された構文/命名法) 、ステートメントを正しいものに変換することは、非常に簡単です。しかし、通常の実行時にその場で修正するのは悪夢なので、何らかの dmllib 関数が正しい sql 部分を返すべきです。
  16. 完了!-- 実際にサポートされています。RDBMS 間で OUTER 結合構文の互換性を確認します。最近、MSSQL が (SQL 標準構文を) サポートしていないことを読みました。
  17. XMLDB DML関数の変更 (Dev docs) に移動。新しい RDBMS で何が起こるか、$CFG->dbtype を使用しているすべての場所を探してみてください。
  18. 完了!: インデックスの重複を避けるため、既存の名前でインデックスを適切に削除/作成するよう、utf8 移行スクリプトを修正しました。また、NULL 可能なカラムを優先するように移行スクリプトを作成します。