PSSdev/DBのアップデート手順
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[PSSdev]]
#contents
* 概要 [#id0a06f5]
Ver.7.0 の DB は Ver.6.x 以前の DB と比べて大きく変化して...
ここでは,Ver.6.x 以前の DB ファイルを Ver.7.0 形式に変換...
* PSS の各バージョンと DB/Log,レジストリエントリの関係 [...
** 調査結果表 [#naf10e0b]
| 本体 | 既定のインストール先 | データフォルダ || DB | フ...
| Ver.2.0 | PSS2 | Datas || pdb | DBv3.pss | Pss/DBv3/fil...
| Ver.3.0 | Pss2 | Datas || pdb | DBv3.pss | Pss/DBv3/fil...
| Ver.4.0 | Pss2 | Datas || pdb | DBv3.pss | Pss/DBv3/fil...
| Ver.4.1 | Pss2 | Datas || pdb | DBv3.pss | Pss/DBv3/fil...
| Ver.4.2 | Pss2 | Datas || pdb | DBv3.pss | Pss/DBv3/fil...
| Ver.4.3 | Pss2 | Datas || pdb | database.pssdb4 | Pss/D...
| Ver.5.x | Pss5 | data || pdb2 | database.pssdb5 | Pss5/...
| Ver.6.x | Pss5 | data || pdb2 | database.pssdb6 | Pss5/...
| Ver.7.0 | PSS7 | data || pdb3 | database.pssdb7 | PSS7/...
DB と Log は 2004.03.22 現在における,DB/Log 操作ライブラ...
** 結果の考察 [#cb0f8255]
上記の表を見る限り,Ver.4.1 以前の DB/Log は pdb/pdblog0 ...
Ver.4.2〜Ver.4.3 は,Log が pdblog1 に変更されている.
ただし,Ver.4.3 以前はレジストリエントリが統一されている...
Ver.5.0 からは DB/Log ともに UNICODE 対応のために大幅な変...
Ver.5/6 の違いは DB の形式が異なることであるが,ライブラ...
** アップデートに関する所見 [#qe7a565e]
いずれにせよ,Log については Ver.6 用に pdblog0 -> pdblog...
DB の変換についても同様であるが,変換ライブラリについては...
つまり,レジストリエントリや拡張子に応じて適切な読み込み...
* アップデート手順 [#x6a10e4d]
DB のアップデートと Log のアップデートに分けて実行する.
** DB のアップデート手順 [#fd78113d]
- Ver.6.x 用 DB があれば,Ver.7.0 形式に変換する.
-- Ver.6.x 用レジストリエントリを検索し,存在すれば pdb2:...
- Ver.5.x 用 DB があれば,Ver.6.x 形式を経由して Ver.7.0 ...
-- Ver.5.x 用レジストリエントリを検索し,存在すれば pdb2:...
- Ver.4.x 用 DB があれば,Ver.6.x 形式を経由して Ver.7.0 ...
-- Ver.4.x 用レジストリエントリを検索し,存在すれば pdb2:...
- 全く異なるアプローチとして,レジストリエントリの検索と...
-- まず 各レジストリエントリを検索して,ファイル名を取得...
-- 取得できたらファイル名の拡張子に応じて pdb2::Tree::loa...
- pdb2 オブジェクトを pdb3_converter.h 内のコンバータで変...
** Log のアップデート手順 [#t54025fa]
- Pss5/Options/LogPath を検索し,存在すれば Ver.5/6 用 Lo...
-- pdblog2 オブジェクトを得る.
- Pss/Options/LogPath を検索し,存在すれば Ver.4.x 以前用...
-- 拡張子が .psslog であれば pdblog1 で読み込み,pdblog_t...
-- 拡張子が .txt であれば pdblog0 で読み込み,pdblog_tran...
- 得られた pdblog2 オブジェクトを pdb3_converter を用いて...
* pdb2 + pdblog2 -> pdb3 の変換方法 [#q754157c]
pdb2 や pdblog2 オブジェクトが取得できれば,次は pdb3 オ...
(以下略)
* DB7 同士のアップデート [#ac8a8d9f]
PSS7 の新バージョンがリリースされたときなどには,DB7 同士...
これは pdb3 レイヤーではなく,SQLiteDB を直接操作すること...
** 考察 [#t3b9e0cc]
アップデートすべきテーブルは下記の4テーブルである.
- question
- section
- element_info
- folder
ここで,問題データそのものである question と,それを含む ...
ユーザの欲求としては,
- (A) 新しく追加された問題集が欲しい
- (B) 既存の問題集のうち更新された部分を差し替えたい
が考えられる.
A は従来の DB6 同士のアップデートで実現できていた部分であ...
今回のDB構成では,一定以下の qid に対しては同期が保証され...
A に対しては eid の制約がないため,完全な形でのアップデー...
B が「比較的」であるのは,「既存の問題集の更新」が「問題...
「問題の追加」であった場合には,section-table を更新する...
A, B それぞれを''個別に''実現するための手法を述べる.
- udb : アップデート用DB,main : 本DB とする.
A の実現手法:
- udb のフォルダツリーを走査し,main に含まれていないフォ...
-- この部分では pdb3 を用いる.
- そのフォルダ・問題集を追加するかどうかユーザに確認する.
- mian にフォルダ・問題集を追加する.
-- element_info, section, folder, question の更新が必要.
-- この部分では SQLite の ATTACH を用いて,SQL クエリーレ...
B の実現手法:
- udb 内の問題で,既に main に含まれている問題のうち,uti...
-- これにより既存の問題集の更新における「問題の修正」がな...
-- これは SQL 文の発行で OK.
- udb 内の問題で,main に含まれていない問題のうち,udb で...
-- section への追加と,question への問題データの追加が必...
-- こちらは pdb3 レイヤーでの実行が必要(問題集パスでの比...
以上をふまえ,question テーブルに対しては無条件にアップデ...
** 手順 [#p1dbe1b7]
PSS 本体において,起動時に下記の手順で行われる
PSS 起動シーケンス:
- レジストリ読み込み
-- データフォルダ未設定なら選択させて設定
-- 各ファイルの格納先確定
-- その際,各ファイルが存在しないならオリジナルからコピー...
- DB 読み込み
- DB アップデート
DB アップデート手順:
- question-table :
-- udb の qid のうち,main に存在しない qid があれば,そ...
-- udb の qid のうち,main に存在する qid について,main ...
- section-table, folder-table, element_info-table
-- 追加した qid を含む udb の section を「対象section」と...
-- 対象section のうち,同じパスの section が main にあれ...
-- 同じパスの section が main になければ,
--- その対象section の element_info を main の element_in...
--- その対象section の qid を main の section に追加.sid...
--- フォルダ構造を再現するため,対象sectionの上のフォルダ...
以下検討中.
終了行:
[[PSSdev]]
#contents
* 概要 [#id0a06f5]
Ver.7.0 の DB は Ver.6.x 以前の DB と比べて大きく変化して...
ここでは,Ver.6.x 以前の DB ファイルを Ver.7.0 形式に変換...
* PSS の各バージョンと DB/Log,レジストリエントリの関係 [...
** 調査結果表 [#naf10e0b]
| 本体 | 既定のインストール先 | データフォルダ || DB | フ...
| Ver.2.0 | PSS2 | Datas || pdb | DBv3.pss | Pss/DBv3/fil...
| Ver.3.0 | Pss2 | Datas || pdb | DBv3.pss | Pss/DBv3/fil...
| Ver.4.0 | Pss2 | Datas || pdb | DBv3.pss | Pss/DBv3/fil...
| Ver.4.1 | Pss2 | Datas || pdb | DBv3.pss | Pss/DBv3/fil...
| Ver.4.2 | Pss2 | Datas || pdb | DBv3.pss | Pss/DBv3/fil...
| Ver.4.3 | Pss2 | Datas || pdb | database.pssdb4 | Pss/D...
| Ver.5.x | Pss5 | data || pdb2 | database.pssdb5 | Pss5/...
| Ver.6.x | Pss5 | data || pdb2 | database.pssdb6 | Pss5/...
| Ver.7.0 | PSS7 | data || pdb3 | database.pssdb7 | PSS7/...
DB と Log は 2004.03.22 現在における,DB/Log 操作ライブラ...
** 結果の考察 [#cb0f8255]
上記の表を見る限り,Ver.4.1 以前の DB/Log は pdb/pdblog0 ...
Ver.4.2〜Ver.4.3 は,Log が pdblog1 に変更されている.
ただし,Ver.4.3 以前はレジストリエントリが統一されている...
Ver.5.0 からは DB/Log ともに UNICODE 対応のために大幅な変...
Ver.5/6 の違いは DB の形式が異なることであるが,ライブラ...
** アップデートに関する所見 [#qe7a565e]
いずれにせよ,Log については Ver.6 用に pdblog0 -> pdblog...
DB の変換についても同様であるが,変換ライブラリについては...
つまり,レジストリエントリや拡張子に応じて適切な読み込み...
* アップデート手順 [#x6a10e4d]
DB のアップデートと Log のアップデートに分けて実行する.
** DB のアップデート手順 [#fd78113d]
- Ver.6.x 用 DB があれば,Ver.7.0 形式に変換する.
-- Ver.6.x 用レジストリエントリを検索し,存在すれば pdb2:...
- Ver.5.x 用 DB があれば,Ver.6.x 形式を経由して Ver.7.0 ...
-- Ver.5.x 用レジストリエントリを検索し,存在すれば pdb2:...
- Ver.4.x 用 DB があれば,Ver.6.x 形式を経由して Ver.7.0 ...
-- Ver.4.x 用レジストリエントリを検索し,存在すれば pdb2:...
- 全く異なるアプローチとして,レジストリエントリの検索と...
-- まず 各レジストリエントリを検索して,ファイル名を取得...
-- 取得できたらファイル名の拡張子に応じて pdb2::Tree::loa...
- pdb2 オブジェクトを pdb3_converter.h 内のコンバータで変...
** Log のアップデート手順 [#t54025fa]
- Pss5/Options/LogPath を検索し,存在すれば Ver.5/6 用 Lo...
-- pdblog2 オブジェクトを得る.
- Pss/Options/LogPath を検索し,存在すれば Ver.4.x 以前用...
-- 拡張子が .psslog であれば pdblog1 で読み込み,pdblog_t...
-- 拡張子が .txt であれば pdblog0 で読み込み,pdblog_tran...
- 得られた pdblog2 オブジェクトを pdb3_converter を用いて...
* pdb2 + pdblog2 -> pdb3 の変換方法 [#q754157c]
pdb2 や pdblog2 オブジェクトが取得できれば,次は pdb3 オ...
(以下略)
* DB7 同士のアップデート [#ac8a8d9f]
PSS7 の新バージョンがリリースされたときなどには,DB7 同士...
これは pdb3 レイヤーではなく,SQLiteDB を直接操作すること...
** 考察 [#t3b9e0cc]
アップデートすべきテーブルは下記の4テーブルである.
- question
- section
- element_info
- folder
ここで,問題データそのものである question と,それを含む ...
ユーザの欲求としては,
- (A) 新しく追加された問題集が欲しい
- (B) 既存の問題集のうち更新された部分を差し替えたい
が考えられる.
A は従来の DB6 同士のアップデートで実現できていた部分であ...
今回のDB構成では,一定以下の qid に対しては同期が保証され...
A に対しては eid の制約がないため,完全な形でのアップデー...
B が「比較的」であるのは,「既存の問題集の更新」が「問題...
「問題の追加」であった場合には,section-table を更新する...
A, B それぞれを''個別に''実現するための手法を述べる.
- udb : アップデート用DB,main : 本DB とする.
A の実現手法:
- udb のフォルダツリーを走査し,main に含まれていないフォ...
-- この部分では pdb3 を用いる.
- そのフォルダ・問題集を追加するかどうかユーザに確認する.
- mian にフォルダ・問題集を追加する.
-- element_info, section, folder, question の更新が必要.
-- この部分では SQLite の ATTACH を用いて,SQL クエリーレ...
B の実現手法:
- udb 内の問題で,既に main に含まれている問題のうち,uti...
-- これにより既存の問題集の更新における「問題の修正」がな...
-- これは SQL 文の発行で OK.
- udb 内の問題で,main に含まれていない問題のうち,udb で...
-- section への追加と,question への問題データの追加が必...
-- こちらは pdb3 レイヤーでの実行が必要(問題集パスでの比...
以上をふまえ,question テーブルに対しては無条件にアップデ...
** 手順 [#p1dbe1b7]
PSS 本体において,起動時に下記の手順で行われる
PSS 起動シーケンス:
- レジストリ読み込み
-- データフォルダ未設定なら選択させて設定
-- 各ファイルの格納先確定
-- その際,各ファイルが存在しないならオリジナルからコピー...
- DB 読み込み
- DB アップデート
DB アップデート手順:
- question-table :
-- udb の qid のうち,main に存在しない qid があれば,そ...
-- udb の qid のうち,main に存在する qid について,main ...
- section-table, folder-table, element_info-table
-- 追加した qid を含む udb の section を「対象section」と...
-- 対象section のうち,同じパスの section が main にあれ...
-- 同じパスの section が main になければ,
--- その対象section の element_info を main の element_in...
--- その対象section の qid を main の section に追加.sid...
--- フォルダ構造を再現するため,対象sectionの上のフォルダ...
以下検討中.
ページ名: