Firebird のシステムテーブルを解析してメタデータを生成する際、
TBL_A, TBL_B と JOIN されているとして、Version 1 では A にのみ FLD_HOGE というのが存在していれば、
SELECT FLD_HOGE FROM TBL_A A LEFT JOIN TBL_B B ON (B.KEY = A.KEY)
このような SQL は問題ありません。ところが Version 2 で TBL_B にも FLD_HOGE が定義されたとすると、上記 SQL は Firebird 2.x 以降では曖昧エラーになってしまいます。
SELECT A.FLD_HOGE FROM TBL_A A LEFT JOIN TBL_B B ON (B.KEY = A.KEY)
このようにキッチリ修飾してあげなくてはなりません。
…が。この修飾が厄介で、普通は定義されているテーブルの並び順 (上位順) に試せば OK なのですが、
TBL_A, TBL_B, TBL_C と JOIN されているとして、
新しいバージョンでは TBL_B と TBL_C に FLD_HOGE が定義されていて、古いバージョンでは TBL_C にのみ FLD_HOGE が定義されている可能性があります。この時 B.FLD_HOGE と記述したとすると、新しいバージョンで確認すると正常ですが、古いバージョンで確認するとエラーになってしまいます。
IBX は Interbase 用に作られており、これらの問題には対処してくれません…恐らく Interbase では正しく動作するのでしょう (わざと曖昧さを利用しているフシがあります)。そして Firebird のすべての ODS バージョンを把握している訳ではないので、どうしても場当たり的な対応になってしまいます。
# IBX.IBExtract は Delphi から使う事はまずないので、
# IBX で Firebird を使う際にこの問題を意識する必要はないハズです。
|