参照番号のハッシュ化とリンク移動の自由は相反する

昨日の修正では,基準ソートでRenumberを実行し,その代わりにUNDOをリセットするという作りになっているが,基準ソート時にlookupを保全しておけば,UNDOできるのではないだろうか?仕様的にはまるごと廃止という方向に向かっているところだが,試しておいてもよいのではないか?⇒lookupでは復元できない.lookupにはリンクテーブルのレコード番号しか入っていないから,参照番号を保全したことにはならない.もし,やるのであればやはり,CardNumListを生成・保全するしかない.

仕様的には参照番号のリナンバーというのは廃止で決定なのではないか?もし,なんらかの理由でリナンバーする必要が出てきたら,その場合には,内部処理として独立に再構築する以外ないと思う.ただし,アプリとのインタフェース上参照番号は不可欠であり,一覧表のテーブルにその情報が記載されていなければそもそも動作しない.ただし,それを公開情報として表に出さないというだけだ.あと腐れのないように実装しておこう.⇒いや,CardNumListを復活させて,基準ソートでもUNDOできることを確認しておくべきだ.

仕様がぐらついているが,CardNumListの操作を復活させた.これで一応基準ソートを実施してもUNDOできるようになったが,エラーが発生している.カード削除とテーブルソートを複数回実行→ Undo→…でRestoreShadowのエラーが起きた.CARDTABLE::InsertLinkで例外が発生している.再現できるだろうか?

カードをブロック削除→ 基準ソート→ 氏名でソート→ 肩書でソート→ Undo→ Undo→ Undo→ Undo→ で再現した.カード削除の復元に失敗している.リンクを戻そうとした位置に先住者がいたためだ.recn=243.RestoreShadowではshadowの親番からレコード番号を割り出している.この操作は(元の状態を完全に復元するのだとすれば)正しいと思われるのだが… ブロック削除→ 基準ソート→ Undo→ Undoで再現できる.基準ソートの動作自体おかしいところがある.ソートしただけで,系図画面に表示されているカードが減ってしまう.設定は「親族図:直系血族図」で一覧画面はすべてのカードだ.

全カード数=307のうち,親族図には278点が含まれる.このうち58点を選択して削除すると,画面には37/249点のカードが残る.選択したカードはすべて親族図に含まれるものだから,278-58=220点が残りそうに思われるが,37点まで減ってしまうというのは,「直系血族図」であるためと考えられので,間違ってはいないはずだ.これを並び替えても表示カード数は変化しないが,Undoで7点にまで減ってしまう.これはかなりおかしい.基準ソートのUndoでやり損なっているのだろう.

これは,おそらく基準カードが変化してしまったためと思われる.⇒全体図ではこの事象は起きない.ただし,InsertLinkのエラー(先住者の存在)は発生する.レコード番号は246.⇒Renumberの中でリンクを移動(前詰め)していた.⇒Renumberではリンクの移動は行わないように修正した.これで一応解決したはずだが,エラーはまだ続く.

▲ブロック削除→ 基準ソート→ Undodeで,TopologicalSort→ MakeActiveListを実行して,(treeview->validcard != ActiveList->count)のエラーになった.validcard=249に対し,countは198のままだ.フェーズはDECOMPOSITIONなので,すでにフィルタリングは完了しているはずだ.⇒PDBのlookupのカウントが198しかない.これはかなりまずい.いや,こちらの数字の方が正しいのではないか?PDBのrecordcountは249になっている.なぜだろう?

元々のカード数は307点だ.それから58点削除しているので,249点でなくてはならない.198というのはどこで起きているのか?基準ソートの入口では249になっている.⇒RebuildCardListで変化しているようだ.UNDOSYSTEM::CommandEnd→ RebuildCardListで変化している.RebuildCardListの中でもう一度NameSortが呼び出され,その中でcountの変化が起こっている.ソートは_MAXITEMモードで実行されている.⇒確かにlookupを前詰めする@20230113という処理が入っている.これはカード削除などでできた空欄を前詰めするための処理だが,誤動作しているようだ.

どうも,かなりまずい設計になっているような気がする.というか,元々はそういう設計になっていたのだろう.参照番号=レコード番号という設計だ.確かに,リンクを移動しないで参照番号の付け替えだけを実施すれば,参照番号〰レコード番号という前提が崩れてしまうのは当然だ.やはり,参照番号のリナンバーというのはバッドアイディアというしかないような気がする.現行では,参照番号というより,ハッシュ値というべきものに変化してきているので,それに対応して変化するしかないのではないだろうか?

参照番号をハッシュ値として扱うというのはそれ自体は悪い発想ではないが,逆にNシステムの本来の思想である,リンクがどこに移動しても問題なくアクセスできるという理念からはかなり大きな後退であるような気もする.この2つを両立させることは不可能なのだろうか?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA