(57)【要約】【課題】  プログラムに埋込まれたＳＱＬ文などに代表されるデータアクセスコードを、業務ロジックから機械的に分割することを目的とする。同時に、業務ロジックからデータにアクセスする手段を隠蔽することを目的とする。【解決手段】  まず、データアクセスコード抽出部３１は、ソースコードからデータアクセスコードを抽出する。次に、データアクセス情報生成部３３は、抽出したデータアクセスコードを分析し、データアクセスコードの種別、パラメータ、条件などを有するデータアクセス情報を生成する。コード生成部３５は、データアクセスコード抽出部３１により抽出分解されたソースコード及びデータアクセスコードと、データアクセス情報生成部３３により生成されたデータアクセス情報とに基づき、機械的にデータアクセスコードと業務ロジックとを分割する。また、同時に、コード生成部３５は、データアクセスコードに対してＤＡＯパターンを適用する。【選択図】        図２
2007004503.tif 000002
【特許請求の範囲】
【請求項１】
データソースを操作するデータアクセスコードを有するソースコードを記憶装置に記憶するソースコード記憶部と、
上記ソースコード記憶部が記憶装置に記憶したソースコードを読込むソースコード読込部と、
上記ソースコード読込部が読込んだソースコードに基づいて、
データアクセスコードを実行するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を呼出すメソッドを有するＤＡＯ（Ｄａｔａ  Ａｃｃｅｓｓ  Ｏｂｊｅｃｔ）コードと、
データアクセスコードの代わりに、上記ＤＡＯコードのメソッドを呼出すことによりデータソースを操作するコードを実行するソースコードであるロジックコードと、
上記ＤＡＯコードと上記ロジックコードとの間のインターフェースに使用する変数を有するＤＴＯ（Ｄａｔａ  Ｔｒａｎｓｆｅｒ  Ｏｂｊｅｃｔ）コードと
を処理装置を用いて生成するプログラム生成部と、
上記プログラム生成部が生成したＤＡＯコードとロジックコードとＤＴＯコードとを記憶装置に記憶する生成コード記憶部と
を備えることを特徴とするプログラム変換方式。
【請求項２】
上記プログラム生成部は、
処理装置を用いて、データアクセスコードを識別し、ソースコードからデータアクセスコードを抽出するデータアクセスコード抽出部と、
上記データアクセスコード抽出部が抽出したデータアクセスコードを記憶装置に記憶するデータアクセスコード記憶部と、
処理装置を用いて、上記データアクセスコード記憶部が記憶装置に記憶したデータアクセスコードを読込み、上記データアクセスコードを解析することによりデータアクセスコードを構成する情報であるデータアクセス情報を生成するデータアクセス情報生成部と、
上記データアクセス情報生成部が生成したデータアクセス情報を記憶装置に記憶するデータアクセス情報記憶部と、
処理装置を用いて、上記データアクセス情報記憶部が記憶装置に記憶したデータアクセス情報を読込み、データアクセス情報に基づいてＤＡＯコードとＤＴＯコードとを生成するオブジェクト生成部と、
処理装置を用いて、ソースコードにおけるデータアクセスコードを、上記オブジェクト生成部が生成したＤＡＯコードが有する、上記データアクセスコードを実行するメソッドを呼出す呼出しコードと、上記オブジェクト生成部が生成したＤＴＯコードの変数と上記データアクセスコードが使用するホスト変数とのインターフェースとに置換することによりロジックコードを生成するロジックコード生成部と
を備えることを特徴とする請求項１記載のプログラム変換方式。
【請求項３】
上記プログラム生成部は、上記ＤＡＯコードとして、操作するデータソースの単位が同じデータアクセスコードを実行するＡＰＩの呼出し文を出力するメソッドを同じクラスに有するＤＡＯコードを生成する
ことを特徴とする請求項１記載のプログラム変換方式。
【請求項４】
上記ソースコード記憶部は、データソースとしてＲＤＢ（Ｒｅｌａｔｉｏｎａｌ  ＤａｔａＢａｓｅ）を操作するデータアクセスコードを有するソースコードを記憶装置に記憶し、
上記プログラム生成部は、上記ＤＡＯコードとして、操作する表の組が同じデータアクセスコードを実行するＡＰＩの呼出し文を出力するメソッドを同じクラスに有するＤＡＯコードを生成する
ことを特徴とする請求項１記載のプログラム変換方式。
【請求項５】
上記プログラム生成部は、ソースコードに同じデータアクセスコードが存在した場合、上記データアクセスコードを実行するＡＰＩの呼出し文を出力するメソッドを１つのみ有するＤＡＯコードを生成する
ことを特徴とする請求項１記載のプログラム変換方式。
【請求項６】
上記プログラム生成部は、さらに、
ソースコードを記述するプログラム言語を、処理装置を用いて他のプログラム言語へ変換するプログラム言語変換部
を備えることを特徴とする請求項１記載のプログラム変換方式。
【請求項７】
上記ソースコード記憶部は、データアクセスコードとしてＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）で記述されたデータアクセスコードを有するソースコードを記憶することを特徴とする請求項１記載のプログラム変換方式。
【請求項８】
データソースを操作するデータアクセスコードを有するソースコードを記憶装置に記憶するソースコード記憶部と、
上記ソースコード記憶部が記憶装置に記憶したソースコードを読込むソースコード読込部と、
上記ソースコード読込部が読込んだソースコードに基づいて、
データアクセスコードを実行する処理を呼出すコードを有するアクセス実行コードと、
データアクセスコードの代わりに、上記アクセス実行コードを呼出すことによりデータソースを操作するコード実行するソースコードであるロジックコードと、
上記アクセス実行コードと上記ロジックコードとの間のインターフェースに使用する変数を有するインターフェースコードと
を処理装置を用いて生成するプログラム生成部と、
上記プログラム生成部が生成したアクセス実行コードとロジックコードとインターフェースコードとを記憶装置に記憶する生成コード記憶部と
を備えることを特徴とするプログラム変換方式。
【請求項９】
データソースを操作するデータアクセスコードを有するソースコードを記憶装置に記憶するソースコード記憶ステップと、
上記ソースコード記憶ステップで記憶装置に記憶したソースコードを読込むソースコード読込ステップと、
上記ソースコード読込ステップで読込んだソースコードに基づいて、
データアクセスコードを実行するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を呼出すメソッドを有するＤＡＯ（Ｄａｔａ  Ａｃｃｅｓｓ  Ｏｂｊｅｃｔ）コードと、
データアクセスコードの代わりに、上記ＤＡＯコードのメソッドを呼出すことによりデータソースを操作するコード実行するソースコードであるロジックコードと、
上記ＤＡＯコードと上記ロジックコードとの間のインターフェースに使用する変数を有するＤＴＯ（Ｄａｔａ  Ｔｒａｎｓｆｅｒ  Ｏｂｊｅｃｔ）コードと
を処理装置を用いて生成するプログラム生成ステップと、
上記プログラム生成ステップで生成したＤＡＯコードとロジックコードとＤＴＯコードとを記憶装置に記憶する生成コード記憶ステップと
をコンピュータに実行させることを特徴とするコード変換プログラム。
【請求項１０】
データソースを操作するデータアクセスコードを有するソースコードを記憶装置に記憶するソースコード記憶ステップと、
上記ソースコード記憶ステップで記憶装置に記憶したソースコードを読込むソースコード読込ステップと、
上記ソースコード読込ステップで読込んだソースコードに基づいて、
データアクセスコードを実行するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を呼出すメソッドを有するＤＡＯ（Ｄａｔａ  Ａｃｃｅｓｓ  Ｏｂｊｅｃｔ）コードと、
データアクセスコードの代わりに、上記ＤＡＯコードのメソッドを呼出すことによりデータソースを操作するコード実行するソースコードであるロジックコードと、
上記ＤＡＯコードと上記ロジックコードとの間のインターフェースに使用する変数を有するＤＴＯ（Ｄａｔａ  Ｔｒａｎｓｆｅｒ  Ｏｂｊｅｃｔ）コードと
を処理装置を用いて生成するプログラム生成ステップと、
上記プログラム生成ステップで生成したＤＡＯコードとロジックコードとＤＴＯコードとを記憶装置に記憶する生成コード記憶ステップと
を備えることを特徴とするプログラム変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースなどが記憶するデータにアクセスするデータアクセスコードを有するプログラムコードの変換に関するものである。
【背景技術】
【０００２】
従来は、まず、プリプロセッサによって、プログラムに埋込まれたＳＱＬ（ｓｔｒｕｃｔｕｒｅｄ  ｑｕｅｒｙ  ｌａｎｇｕａｇｅ）文を対応するプログラム言語のＳＱＬを実行するＡＰＩの呼出し文に変換する。次に、従来は、埋め込みＳＱＬ文以外のロジックが記述された業務ロジックと、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）の呼出し文とをマージしたソースプログラムに変換する。そして、従来は、マージしたソースプログラムを使用して処理していた。
一方、特開２０００−３４７９１０号公報では、業務ロジックを実行するプログラムからＳＱＬ文を分離して管理することにより、データベースシステムが変更された場合のＳＱＬ文の修正をしやすくする方法が開示されている。
また、非特許文献１では、データベースが記憶するデータにアクセスする手段を、業務ロジックを実行するプログラムから隠蔽するためのプログラム構成が開示されている。非特許文献１において、上記のプログラム構成をＤＡＯ（Ｄａｔａ  Ａｃｃｅｓｓ  Ｏｂｊｅｃｔ）パターンという呼び名で提案されている。
【特許文献１】特開２０００−３４７９１０号公報
【非特許文献１】ディーパック・アラー、ジョン・クルーピ、ダン・マークス著，「Ｊ２ＥＥパターン」，ピアソン・エデュケーション，２００２年８月，３７３−３９０頁
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来のＳＱＬ文などで記述されたデータアクセスコードが埋込まれたプログラムによるデータベースアクセス方式では、データベースシステムが変更されることによってＳＱＬ文の変更が必要になる場合などに、手作業によってプログラムからＳＱＬ文を探し出し修正および変更をしなければならないという課題があった。
また、特開２０００−３４７９１０号公報では、業務ロジックを実行するプログラムからＳＱＬ文を分離して管理するが、ＳＱＬ文が埋め込まれたプログラムからＳＱＬ文を分離するには、手作業によらなければならないという課題があった。
本発明は、上記のような課題を解決するためになされたもので、プログラムに埋込まれたＳＱＬ文などに代表されるデータアクセスコードを、業務ロジックから機械的に分割することを目的とする。本発明は、特に上記ＤＡＯパターンなどを適用した形に機械的に変換することにより、業務ロジックからデータにアクセスする手段を隠蔽することを目的とする。
【課題を解決するための手段】
【０００４】
本発明にかかるプログラム変換方式は、データソースを操作するデータアクセスコードを有するソースコードを記憶装置に記憶するソースコード記憶部と、上記ソースコード記憶部が記憶装置に記憶したソースコードを読込むソースコード読込部と、上記ソースコード読込部が読込んだソースコードに基づいて、データアクセスコードを実行するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を呼出すメソッドを有するＤＡＯ（Ｄａｔａ  Ａｃｃｅｓｓ  Ｏｂｊｅｃｔ）コードと、データアクセスコードの代わりに、上記ＤＡＯコードのメソッドを呼出すことによりデータソースを操作するコードを実行するソースコードであるロジックコードと、上記ＤＡＯコードと上記ロジックコードとの間のインターフェースに使用する変数を有するＤＴＯ（Ｄａｔａ  Ｔｒａｎｓｆｅｒ  Ｏｂｊｅｃｔ）コードとを処理装置を用いて生成するプログラム生成部と、上記プログラム生成部が生成したＤＡＯコードとロジックコードとＤＴＯコードとを記憶装置に記憶する生成コード記憶部とを備えることを特徴とする。
【発明の効果】
【０００５】
本発明にかかるプログラム変換方式によれば、ソースコードからＤＡＯコードとロジックコードとＤＴＯコードとを生成するプログラム生成部を備えるため、機械的にデータアクセスコードと業務ロジックとを分割することが可能である。したがって、データアクセスコードを有するソースコードをデータアクセスコードと業務ロジックとに分割して管理することが可能である。
【発明を実施するための最良の形態】
【０００６】
以下、本発明を図面に示す実施の形態に基づいて説明する。
【０００７】
図１は、実施の形態１におけるプログラム変換方式１００のハードウェア構成の一例を示す図である。
図１において、プログラム変換方式１００は、プログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９１１を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、通信ボード９１５、ＣＲＴ表示装置９０１、Ｋ／Ｂ（キーボード）９０２、マウス９０３、ＦＤＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）９０４、磁気ディスク装置９２０、ＣＤＤ９０５と接続されている。
ＣＰＵ９１１は、処理装置の一例である。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
通信ボード９１５は、ＬＡＮ、無線アンテナ等に接続されている。
例えば、通信ボード９１５、Ｋ／Ｂ９０２、ＦＤＤ９０４、ＣＤＤ９０５などは、入力装置の一例である。
また、例えば、通信ボード９１５、ＣＲＴ表示装置９０１などは、出力装置の一例である。
【０００８】
ここで、通信ボード９１５は、ＬＡＮに限らず、直接、インターネット、或いはＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）に接続されていても構わない。
磁気ディスク装置９２０には、オペレーティングシステム（ＯＳ）９２１、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３は、ＣＰＵ９１１、ＯＳ９２１、ウィンドウシステム９２２により実行される。
【０００９】
上記プログラム群９２３には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、以下に述べる実施の形態の説明において、「〜の判定」として説明するものが、「〜ファイル」として記憶されている。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータの入出力を示し、そのデータの入出力のためにデータは、磁気ディスク装置９２０、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）、光ディスク、ＣＤ（コンパクトディスク）、ＭＤ（ミニディスク）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のその他の記録媒体に記録される。あるいは、信号線やその他の伝送媒体により伝送される。
【００１０】
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、ハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
【００１１】
また、以下に述べる実施の形態を実施するプログラムは、また、磁気ディスク装置９２０、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）、光ディスク、ＣＤ（コンパクトディスク）、ＭＤ（ミニディスク）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のその他の記録媒体による記録装置を用いて記憶されても構わない。
【００１２】
実施の形態１．
実施の形態１では、ＳＱＬなどで記述されたデータアクセスコードを有するソースコードを、データアクセスコードと業務ロジックとに分割する方法について説明する。特に、上記ＤＡＯパターンなどを適用した形のコードを生成する方法について説明する。
【００１３】
図２は、実施の形態１におけるプログラム変換方式１００の機能を示す機能ブロック図である。図２に基づき、実施の形態１におけるプログラム変換方式１００の機能について説明する。
プログラム変換方式１００は、ソースコード記憶部１０、ソースコード読込部２０、プログラム生成部３０、生成コード記憶部４０、アクセスコード識別情報記憶部５０を備える。
ソースコード記憶部１０は、図１に示す入力装置などが入力したＳＱＬなどで記述されたデータアクセスコードを有するソースコードを記憶装置に記憶する。ここでは、データアクセスコードは、ＳＱＬで記述されているものとする。しかし、データアクセスコードは、ＳＱＬで記述されていることに限定されず、データベースへアクセスするためのプログラムであれば他のものでも構わない。
ソースコード読込部２０は、ソースコード記憶部１０が記憶装置に記憶したソースコードを読込む。また、ソースコード読込部２０は、読込んだソースコードをプログラム生成部３０へ入力する。
プログラム生成部３０は、ソースコード読込部２０が入力したソースコードに基づいて、アクセス実行コードとロジックコードとインターフェースコードとを処理装置によって生成する。ここでは、アクセス実行コードは、ＤＡＯコードであるとする。また、インターフェースコードは、ＤＴＯコードであるとする。アクセス実行コードとロジックコードとインターフェースコード、およびＤＡＯコードとＤＴＯコードとについては後述する。プログラム生成部３０は、データアクセスコード抽出部３１、データアクセスコード記憶部３２、データアクセス情報生成部３３、データアクセス情報記憶部３４、コード生成部３５を備える。データアクセスコード抽出部３１は、データアクセスコードを処理装置によって識別する。そして、データアクセスコード抽出部３１は、ソースコード読込部２０が入力したソースコードが有するデータアクセスコードを識別して、抽出する。つまり、ここでは、データアクセスコード抽出部３１は、ソースコードからデータアクセスコードとしてＳＱＬ文を抽出する。データアクセスコード記憶部３２は、データアクセスコード抽出部３１が抽出したデータアクセスコードを記憶装置に記憶する。データアクセス情報生成部３３は、データアクセスコード記憶部３２が記憶装置に記憶したデータアクセスコードを解析し、データアクセス情報２００を生成する。データアクセス情報生成部３３は、データアクセス情報２００を生成する場合に、アクセスコード識別情報記憶部５０が記憶する情報を参照する。データアクセス情報２００の構成を図３に示す。データアクセス情報２００については後述する。データアクセス情報記憶部３４は、データアクセス情報生成部３３が生成したデータアクセス情報２００を記憶装置に記憶する。コード生成部３５は、データアクセスコード記憶部３２が記憶装置に記憶したデータアクセスコードとデータアクセス情報記憶部３４が記憶装置に記憶したデータアクセス情報２００とに基づいて、アクセス実行コードとロジックコードとインターフェースコードとを処理装置によって生成する。つまり、ここでは、コード生成部３５は、ＤＡＯコードとロジックコードとＤＴＯコードとを生成する。コード生成部３５は、オブジェクト生成部３６、ロジックコード生成部３７を備える。オブジェクト生成部３６は、データアクセス情報記憶部３４が記憶装置に記憶したデータアクセス情報２００に基づいて、ソースコード読込部２０が入力したソースコードからアクセス実行コードとインターフェースコードと生成する。つまり、ここでは、オブジェクト生成部３６は、ＤＡＯコードとＤＴＯコードとを生成する。ロジックコード生成部３７は、データアクセス情報記憶部３４が記憶装置に記憶したデータアクセス情報２００に基づいて、ソースコード読込部２０が入力したソースコードから、ロジックコードを生成する。
生成コード記憶部４０は、プログラム生成部３０が生成したＤＡＯコードとロジックコードとＤＴＯコードと記憶装置に記憶する。
アクセスコード識別情報記憶部５０は、データアクセス情報生成部３３においてデータアクセス情報２００の生成に使用するデータアクセスコードの情報を記憶装置に記憶する。
【００１４】
次に、アクセス実行コードとロジックコードとインターフェースコード、およびＤＡＯコードとＤＴＯコードとについて説明する。
アクセス実行コードは、データアクセスコードを実行する処理を呼出すコードを有する。つまり、他のプログラムなどからアクセス実行コードが呼出されることにより、データアクセスコードが実行される。
ロジックコードは、データアクセスコードの代わりに、上記アクセス実行コードを呼出すことによりデータソースを操作するコードを有するソースコードである。つまり、ロジックコードは、業務ロジックが記述されており、データアクセスの処理に関しては、アクセス実行コードを呼出すことにより実現する。つまり、ロジックコードは、ソースコードが有するデータアクセスコードが記述されていた部分を、アクセス実行コードと、インターフェースコードとソースコードが備える変数とのインターフェースに置換したプログラムである。
インターフェースコードは、アクセス実行コードとロジックコードとの間のインターフェースに使用する変数を有する。
ＤＡＯコードは、アクセス実行コードの一例である。ＤＡＯコードは、非特許文献１にて開示されているデータベースが記憶するデータにアクセスする手段を、業務ロジックを実行するプログラムから隠蔽するためのプログラム構成なども持ったプログラムである。ＤＡＯコードは、データアクセスコードを実行するＡＰＩを呼出すメソッドを有するプログラムである。つまり、ここでは、ＤＡＯコードは、ＳＱＬ文を実行するＡＰＩを呼出すメソッドを有するプログラムである。
ＤＴＯコードは、インターフェースコードの一例である。ＤＴＯコードは、ＤＡＯコードとロジックコードとの間のインターフェースに使用する変数を有するプログラムである。つまり、ロジックコードは、ＤＡＯコードへ値を渡す場合、またはＤＡＯコードから値を受取る場合に、ＤＴＯコードを経由する。
【００１５】
以下、アクセス実行コードはＤＡＯコード、インターフェースコードはＤＴＯコード、データアクセスコードはＳＱＬ文であるものとして説明する。また、アクセスするデータベースはＲＤＢ（Ｒｅｌａｔｉｏｎａｌ  ＤａｔａＢａｓｅ）であるものとする。
【００１６】
次に、データアクセス情報２００について説明する。図３は、データアクセス情報２００の構成の示す。
データアクセス情報２００は、ＳＱＬ文認識情報２１０、ＤＡＯ生成情報２２０、ＤＴＯ生成情報２３０を備える。
【００１７】
ＳＱＬ文認識情報２１０は、ソース識別子２１１、表名組２１２、操作種別２１３、カーソル名２１４、付帯条件２１５、パラメータ２１６、メソッド名２１７を備える。
ソース識別子２１１は、プログラムソースを一意に識別する。ソースコードの名前と変換が実行された日時となどから生成する。ソース識別子２１１に日時を含める理由は、同じプログラムを２度以上変換した場合、変換後の各プログラムを別のものとして扱うためである。同じ名称のソースコードを入力されたとしても、プログラムの内容が異なる可能性があるのためである。また１つのソースコードが有するＳＱＬ文の中で宣言される変数名の名前空間が異なる場合は、それぞれ異なるソース識別子２１１を生成する。ここで、ＳＱＬ文の中で宣言される変数名とは、例えば、カーソル名である。
表名組２１２は、ＳＱＬ文が操作する表の名前である。データアクセス情報生成部３３は、ＳＱＬの構文にしたがって表名を認識する。図４は、ＳＱＬの構文の一例を示す。表名組２１２は、例えば、図４に示すＳＥＬＥＣＴ文３１０などで表名が複数指定されたときは、表名の組を区切り文字、例えば「，」で区切ったものをＳＱＬ文認識情報２１０の表名組２１２とする。この場合に表名は、文字順序の大小順で、あるいは変換するプログラムにおいて設定された順序などで並び替える。このように並び替えることで、ＳＱＬ文認識情報２１０の表名の比較を行うときに、元のＳＱＬ文で表名の指定順序が違っている場合にも、含んでいる表名が一致するものは同一であるとみなすことが可能となる。
操作種別２１３は、ＳＥＬＥＣＴ、ＩＮＳＥＲＴ、ＵＰＤＡＴＥ、ＤＥＬＥＴＥなどのＳＱＬ文の種別である。
カーソル名２１４は、ＳＱＬ文のＤＥＣＬＡＲＥ  ＣＵＲＳＯＲ文３５０やＦＥＴＣＨ文３７０などで使用するカーソル名である。カーソルを使用しない文では空欄とする。
付帯条件２１５は、ＳＱＬ文の操作条件を示すものである。図４に示すＳＱＬの構文を例にして説明する。付帯条件２１５は、例えば、ＳＥＬＥＣＴ文３１０、ＤＥＬＥＴＥ文３４０ではＷＨＥＲＥ句以降に示す内容である。ＩＮＳＥＲＴ文３２０では列名以降に示す内容である。ＵＰＤＡＴＥ文３３０ではＳＥＴ句およびＷＨＥＲＥ句以降に示す内容である。ＤＥＣＬＡＲＥ  ＣＵＲＳＯＲ文３５０ではそれに含まれるＳＥＬＥＣＴ文３１０の付帯条件２１５である。ＦＥＴＣＨ文３７０の付帯条件２１５は空欄とする。ただし、付帯条件２１５の中に、ホスト変数または定数が指定されたときは、それを代替文字に置き換える。代替文字とは、例えば、「？」などである。
パラメータ２１６は、付帯条件２１５の中で置き換えられたホスト変数または定数を、付帯条件２１５の中に現れた順序で区切り文字で区切って並べたものである。区切り文字とは、例えば、「，」などである。
メソッド名２１７は、ＳＱＬ文を実行するＤＡＯコードのメソッドを呼出すときのメソッド名である。メソッド名２１７は、操作種別２１３、ＷＨＥＲＥ句に現れる列名、ＳＱＬ文の認識を行ったときの出現順序などを組み合わせて生成される。メソッド名２１７は、ＳＱＬ文認識情報２１０の中の、表名組２１２、操作種別２１３、付帯条件２１５の組に対して一意になるようにデータアクセス情報生成部３３によって生成される。
【００１８】
ＤＡＯ生成情報２２０は、表名組２２１、ＤＡＯ名２２２、メソッド名２２３、パラメータ宣言２２４、戻り値宣言２２５、ＳＱＬ文２２６、ＤＴＯ名２２７、生成フラグ２２８を備える。
表名組２２１は、ＳＱＬ文認識情報２１０が備える表名組２１２と同様である。
ＤＡＯ名２２２は、表名組２２１に対して生成するＤＡＯコードのクラスの名前である。ＤＡＯ名２２２は、表名組２２１より生成する。表名組２２１が複数の表名からなるときは、出力するプログラム言語のクラス名に許される区切り文字、例えば「＿」などで表名を区切って生成する。出力するプログラム言語がクラス名の大文字小文字を許す場合、表名の先頭を大文字、それ以外を小文字にして並べてもよい。またＤＡＯコードであることを表す接尾語、例えば「ＤＡＯ」をつけてもよい。つまり、ＤＡＯコードのクラスは、表名組２２１ごとに生成される。
メソッド名２２３は、ＳＱＬ文認識情報２１０が備えるメソッド名２１７と同様である。
パラメータ宣言２２４は、ＤＡＯコードのメソッド毎に指定するパラメータのデータ型と変数名との組である。パラメータ宣言２２４は、ＤＡＯコードが有するメソッド毎に、ＤＴＯコードのクラスの変数、または付帯条件２１５の中で置き換えられるホスト変数または定数の値を受け取る変数、またはその両方などのうちのどれかとする。変数名は、付帯条件２１５の中で置き換えられるホスト変数または定数と比較または転記の対象となる列名から生成する。あるいはパラメータ２１６の中の出現順序を使用してデータアクセス情報生成部３３が任意に生成しても構わない。
戻り値宣言２２５は、ＤＡＯコードが有するメソッドの戻り値のデータ型である。戻り値宣言２２５は、例えば、ＳＥＬＥＣＴ文３１０の場合はＤＴＯコードのクラス、ＯＰＥＮ  ＣＵＲＳＯＲ文３６０の場合は、ＤＴＯコードのクラスのリストまたは配列、ＩＮＳＥＲＴ文３２０、ＵＰＤＡＴＥ文３３０、ＤＥＬＥＴＥ文３４０の場合は整数型または戻り値なしとする。
ＳＱＬ文２２６は、ＤＡＯコードが有するメソッドを呼出すことにより実行されるＳＱＬ文全体である。ＳＱＬ文２２６は、ソースコードが有するＳＱＬ文から生成する。ただし、付帯条件２１５の中のホスト変数または定数は、代替文字で置き換えられたものである。また、ＳＱＬ文２２６は、ＳＥＬＥＣＴ文３１０のＩＮＴＯ句などの埋め込みＳＱＬに特有の部分は取り除かれている。また、ＳＱＬ文２２６は、例えば、ＤＥＣＬＡＲＥ  ＣＵＲＳＯＲ文３５０の場合、ＳＥＬＥＣＴ文３１０以降からＳＱＬ文を生成などとする。つまり、ＳＱＬ文２２６は、ＤＡＯパターンを適用しやすい形に変換されたＳＱＬ文である。ＳＱＬ文２２６の変換については、上述したものに限定されるわけではなく、システムの仕様などによって変更しても構わない。
ＤＴＯ名２２７は、ＤＡＯコードが有するメソッドが使用するＤＴＯコードのクラス名である。ＤＴＯ名２２７は、ＤＡＯ名２２２にＤＴＯコードであることを表す接尾語、例えば「ＤＴＯ」を付ける。または、ＤＴＯ名２２７は、ＤＡＯ名２２２の接尾語を「ＤＴＯ」に置き換えたものとする。ＤＴＯ名２２７は、例えば、ＤＥＬＥＴＥ文３４０のように、ＤＴＯコードを使用しないメソッドでは空欄とする。
生成フラグ２２８は、メソッドをＤＡＯコードにすでに生成したかどうかを示す真偽値である。
【００１９】
ＤＴＯ生成情報２３０は、ＤＴＯ名２３１、変数名２３２、データ型２３３、生成フラグ２３４を備える。
ＤＴＯ名２３１は、ＤＡＯ生成情報２２０のＤＴＯ名２２７と同様である。
変数名２３２は、ＤＴＯコードに格納される変数の名前である。変数名２３２は、ＳＱＬ文に現れる列名やホスト変数名から生成する。変数名２３２は、例えば、ＳＥＬＥＣＴ文３１０の場合、「＜選択＞」部分に記載される列名である。変数名２３２は、例えば、「＜選択＞」が「＊」であった場合、ＩＮＴＯ句に指定されたホスト変数名とする。変数名２３２は、「＜選択＞」部分に記載される列が列名ではなくＳＱＬ関数であった場合、ＳＱＬ文に列の別名が指定されていればその名前とし、別名がなければＩＮＴＯ句に指定されたホスト変数名とする。変数名２３２は、列名によらずホスト変数名や別名などから生成した場合は、変数名にホスト変数などを表す接頭語または接尾語をつける。変数名２３２は、ＩＮＳＥＲＴ文３２０の文の場合、列名が指定されていればその名前とする。また、変数名２３２は、ＩＮＳＥＲＴ文３２０の場合、列名が指定されていなければ、変数名の生成を行わない。変数名２３２は、ＵＰＤＡＴＥ文３３０では、ＳＥＴ句の更新式に現れる列名を変数名として生成する。また、変数名２３２は、ＤＥＬＥＴＥ文３４０ではＤＴＯコードを使用しないので変数名の生成も行わない。変数名の生成については、上述した方法に限定されるわけではなく、プログラムやシステムの仕様によって変更しても構わない。
データ型２３３は、変数のデータ型である。データ型２３３は、例えば、整数、浮動小数点数、文字列、日時などの種別を表す。データ型２３３は、ＳＱＬ文に現れるホスト変数や定数の型より生成される。
生成フラグ２３４は、ＤＴＯコードのクラスの変数をすでに生成したかどうかを示す真偽値である。
【００２０】
次に、プログラム変換方式１００の動作について説明する。図５は、プログラム変換方式１００の動作を示すフローチャートである。図５に基づきプログラム変換方式１００の動作について説明する。
【００２１】
ソースコード入力ステップＳ１０では、入力装置は、ソースコードを入力する。入力装置がソースコードを入力するとは、例えば、図１に示す、ＦＤＤ９０４やＣＤＤ９０５などからソースコードを読込むことなどを意味する。
【００２２】
ソースコード記憶ステップＳ２０では、ソースコード記憶部１０は、入力装置が入力したソースコードを記憶装置に記憶する。
【００２３】
ソースコード読込ステップＳ３０では、ソースコード読込部２０は、記憶装置からソースコードを読込む。
【００２４】
ソースコード取込ステップＳ４０では、ソースコード読込部２０は、読込んだソースコードをプログラム生成部３０へ入力する。
【００２５】
プログラム生成ステップＳ５０では、プログラム生成部３０は、ＤＡＯコード、ロジックコード、ＤＴＯコードを生成する。
【００２６】
生成コード記憶部ステップＳ６０では、生成コード記憶部４０は、生成されたＤＡＯコード、ロジックコード、ＤＴＯコードを記憶装置に記憶する。
【００２７】
次に、プログラム生成ステップＳ５０について詳細に説明する。プログラム生成ステップＳ５０の動作は、大きくデータアクセスコード抽出部３１の動作と、データアクセス情報生成部３３の動作と、コード生成部３５の動作とを備える。
まず、データアクセスコード抽出部３１の動作について説明する。図６は、データアクセスコード抽出部３１の動作であるデータアクセスコード抽出処理を示すフローチャートである。図６に基づいて、データアクセスコード抽出処理について説明する。データアクセスコード抽出処理では、データアクセスコード抽出部３１は、ソースコードからデータアクセスコードを抽出する。
【００２８】
ステップＳ１０１では、データアクセスコード抽出部３１は、プログラム生成部３０に入力されたソースコードから１つずつ語句を取り出す。
ステップＳ１０２では、データアクセスコード抽出部３１は、ソースコードの終わりを認識したら、データアクセスコード抽出処理を終了し、ソースコードが終わりでないならステップＳ１０３へ進む。
ステップＳ１０３では、データアクセスコード抽出部３１は、ＳＱＬ文の始まりかどうかを判定する。データアクセスコード抽出部３１は、ＳＱＬ文の始まりであると判定した場合、ステップＳ１０４へ進み、ＳＱＬ文の始まりでないと判定した場合、ステップＳ１０７へ進む。ＳＱＬ文の始まりであるかどうかの判定方法については後述する。
ステップＳ１０４では、データアクセスコード抽出部３１は、ソースコードから１つずつ語句を取り出す。
ステップＳ１０５では、データアクセスコード抽出部３１は、ＳＱＬ文の終わりかどうかを判定する。データアクセスコード抽出部３１は、ＳＱＬ文が終わりである場合、ステップＳ１０６へ進み、ＳＱＬ文が終わりでない場合、ステップＳ１０４へ進む。つまり、ステップＳ１０４とステップＳ１０５とでは、ＳＱＬ文の終わりまでを読み取る。ＳＱＬ文の終わりかどうかの判定方法については後述する。
ステップＳ１０６では、データアクセスコード抽出部３１は、読み取ったＳＱＬ文をデータアクセスコード記憶部３２に渡す。データアクセスコード記憶部３２は、ＳＱＬ文を記憶する。データアクセスコード抽出部３１は、ＳＱＬ文をデータアクセスコード記憶部３２に記憶させることなくデータアクセス情報生成部３３とコード生成部３５とへ渡しても構わない。
ステップＳ１０７では、データアクセスコード抽出部３１は、取込んだ語句がＳＱＬ文でなかった場合、語句をＳＱＬ文と区別してデータアクセスコード記憶部３２に渡す。データアクセスコード記憶部３２は、受け取った語句をＳＱＬ文と区別して記憶する。または、データアクセスコード抽出部３１は、取込んだ語句がＳＱＬ文でなかった場合、語句をコード生成部３５へ渡しても構わない。
【００２９】
ここで、データアクセスコード抽出部３１がＳＱＬ文の始まりかどうか、終わりかどうかを判定する方法の一例について説明する。データアクセスコード抽出部３１がＳＱＬ文の始まりかどうかを判定する方法は、ＳＱＬ言語の仕様によって異なる。データアクセスコード抽出部３１は、例えば、「ＥＸＥＣ  ＳＱＬ」のようなＳＱＬ文の始まりを表す語句であるかを判定する。他にも、データアクセスコード抽出部３１は、ＳＥＬＥＣＴ、ＩＮＳＥＲＴ、ＵＰＤＡＴＥ、ＤＥＬＥＴＥのような特定の語句をＳＱＬ文の始まりとする。同様に、データアクセスコード抽出部３１は、ＳＱＬ文の終わりを、例えば、「ＥＮＤ  ＥＸＥＣ」のようなＳＱＬ文の終わりを表す語句であるかによって判定する。また、同様に、データアクセスコード抽出部３１は、ＳＥＬＥＣＴ、ＩＮＳＥＲＴ、ＵＰＤＡＴＥ、ＤＥＬＥＴＥのような特定の語句で始まるＳＱＬ文に対して文法が許す終わりの語句によって認識する。
【００３０】
次に、データアクセス情報生成部３３の動作について説明する。図７は、データアクセス情報生成部３３の動作であるデータアクセス情報生成処理を示すフローチャートである。図７に基づいて、データアクセス情報生成処理について説明する。データアクセス情報生成処理では、データアクセス情報生成部３３は、データアクセス情報２００を生成する。
【００３１】
ステップＳ２０１では、データアクセス情報生成部３３は、データアクセスコード記憶部３２が記憶したＳＱＬ文を取込む。または、データアクセスコード抽出部３１が抽出したＳＱＬ文を直接受け取っても構わない。
ステップＳ２０２とステップＳ２０３とでは、ＳＱＬ文認識情報２１０を生成する。
ステップＳ２０２では、データアクセス情報生成部３３は、取込んだＳＱＬ文からＳＱＬ文認識情報２１０の、表名組２１２、操作種別２１３、カーソル名２１４、付帯条件２１５、パラメータ２１６を生成する。データアクセス情報生成部３３は、例えば、アクセスコード識別情報記憶部５０が記憶したデータアクセスコードの情報を参照しても構わない。
ステップＳ２０３では、データアクセス情報生成部３３は、生成した表名組２１２、操作種別２１３、付帯条件２１５の組をデータアクセス情報記憶部３４が記憶する表名組２１２、操作種別２１３、付帯条件２１５の組と比較する。
ステップＳ２０４では、データアクセス情報生成部３３は、表名組２１２、操作種別２１３、付帯条件２１５の組が一致するＳＱＬ文認識情報２１０をデータアクセス情報記憶部３４が記憶している場合、ステップＳ２０５へ進み、記憶していない場合、ステップＳ２０６へ進む。
ステップＳ２０５では、データアクセス情報生成部３３は、生成したＳＱＬ文認識情報２１０をデータアクセス情報記憶部３４へ渡す。データアクセス情報記憶部３４は、ＳＱＬ文認識情報２１０を記憶する。データアクセス情報生成部３３は、コード生成部３５へＳＱＬ文認識情報２１０を渡しても構わない。
【００３２】
ステップＳ２０６からステップＳ２０８まででは、データアクセス情報生成部３３は、ＤＡＯ生成情報２２０を生成する。
ステップＳ２０６では、データアクセス情報生成部３３は、メソッド名２１７を生成する。そして、データアクセス情報生成部３３は、ＳＱＬ文認識情報２１０をデータアクセス情報記憶部３４へ渡す。データアクセス情報記憶部３４は、ＳＱＬ文認識情報２１０を記憶する。
ステップＳ２０７では、データアクセス情報生成部３３は、ＤＡＯ生成情報２２０を生成する。そして、データアクセス情報生成部３３は、ＤＡＯ生成情報２２０をデータアクセス情報記憶部３４へ渡す。データアクセス情報記憶部３４は、ＤＡＯ生成情報２２０を記憶する。
ステップＳ２０８では、データアクセス情報生成部３３は、生成したメソッド名２１７とＤＡＯ生成情報２２０とを追加したＳＱＬ文認識情報２１０をデータアクセス情報記憶部３４へ渡す。データアクセス情報記憶部３４は、ＳＱＬ文認識情報２１０を記憶する。データアクセス情報生成部３３は、コード生成部３５へＳＱＬ文認識情報２１０を渡しても構わない。
データアクセス情報生成部３３は、ステップＳ２０４の場合分けを行うことで、同じＳＱＬ文を実行するメソッドの情報を複数生成しない。このことにより、後述するオブジェクトコード、ロジックコード生成処理において、同じＳＱＬ文を実行するＤＡＯコードのメソッドを複数生成しない。
【００３３】
ここで、ステップＳ２０２からステップＳ２０８まででは、データアクセス情報生成部３３は、例えば、図４に示すＯＰＥＮ  ＣＵＲＳＯＲ文３６０、ＦＥＴＣＨ文３７０、ＣＬＯＳＥ  ＣＵＲＳＯＲ文３８０については、表名組２１２、操作種別２１３、付帯条件２１５の組の比較を行わない。データアクセス情報生成部３３は、図４に示すＯＰＥＮ  ＣＵＲＳＯＲ文３６０、ＦＥＴＣＨ文３７０、ＣＬＯＳＥ  ＣＵＲＳＯＲ文３８０については、ソース識別子２１１とカーソル名２１４とをキーとしてＤＥＣＬＡＲＥ  ＣＵＲＳＯＲ文３５０を検索する。そして、データアクセス情報生成部３３は、検索したＤＥＣＬＡＲＥ  ＣＵＲＳＯＲ文３５０に対応するＳＱＬ文認識情報２１０をデータアクセス情報記憶部３４へ渡す。データアクセス情報記憶部３４は、ＤＥＣＬＡＲＥ  ＣＵＲＳＯＲ文３５０を記憶する。または、データアクセス情報生成部３３は、コード生成部３５へ検索したＤＥＣＬＡＲＥ  ＣＵＲＳＯＲ文３５０を渡しても構わない。
【００３４】
ステップＳ２０９からステップＳ２１４まででは、データアクセス情報生成部３３は、ＤＴＯ生成情報２３０を生成する。
ステップＳ２０９では、データアクセス情報生成部３３は、ＳＱＬ文に現れる０個以上のＤＴＯ生成情報２３０の変数名２３２を生成する。
ステップＳ２１０では、データアクセス情報生成部３３は、生成したＤＴＯ生成情報２３０の変数名２３２のそれぞれに注目する。
ステップＳ２１１では、データアクセス情報生成部３３は、生成したＤＴＯ生成情報２３０の変数でステップＳ２１２以降の処理していないものがないかどうかを判定する。データアクセス情報生成部３３は、処理していないものがある場合、ステップＳ２１２へ進み、処理していないものがない場合、処理を終了する。
ステップＳ２１２では、データアクセス情報生成部３３は、生成した変数とデータアクセス情報記憶部３４が記憶するＤＴＯ生成情報２３０とを比較する。
ステップＳ２１３では、データアクセス情報生成部３３は、生成した変数と一致するＤＴＯ生成情報２３０をデータアクセス情報記憶部３４が記憶しているかを判定する。データアクセス情報生成部３３は、記憶していると判定した場合、ステップＳ２１０へ進み、記憶していないと判定した場合、ステップＳ２１４へ進む。
ステップＳ２１４では、データアクセス情報生成部３３は、ＤＴＯ生成情報２３０を生成する。そして、データアクセス情報生成部３３は、ＤＴＯ生成情報２３０をデータアクセス情報記憶部３４へ渡す。データアクセス情報記憶部３４は、ＤＴＯ生成情報２３０を記憶する。
【００３５】
次に、コード生成部３５の動作について説明する。図８は、コード生成部３５の動作であるオブジェクトコード、ロジックコード生成処理を示すフローチャートである。図８に基づいて、オブジェクトコード、ロジックコード生成処理について説明する。オブジェクトコード、ロジックコード生成処理では、コード生成部３５は、データアクセスコード抽出部３１がデータアクセスコード記憶部３２に記憶したソースコードの語句とデータアクセス情報生成部３３がデータアクセス情報記憶部３４に記憶したデータアクセス情報２００とに基づいて、ＤＡＯコード、ロジックコード、ＤＴＯコードを生成する。
【００３６】
ステップＳ３０１では、コード生成部３５は、データアクセスコード抽出部３１がデータアクセスコード記憶部３２に記憶した語句を取り出す。または、データアクセスコード抽出部３１は、データアクセスコード抽出部３１から受け取った語句を取り出す。
【００３７】
ステップＳ３０２では、コード生成部３５は、ソースコードの終わりを認識したら、ステップＳ３２０へ進み、ソースコードが終わりでないならステップＳ３０３へ進む。
【００３８】
ステップＳ３０３では、コード生成部３５は、ＳＱＬ文かどうかを判定する。コード生成部３５は、ＳＱＬ文でないと判定した場合、ステップＳ３０４へ進み、ＳＱＬ文であると判定した場合、ステップＳ３０５へ進む。コード生成部３５は、図６に示すデータアクセスコード抽出処理において、ＳＱＬ文かどうかを区別してデータアクセスコード記憶部３２へコードを記憶しているため、その情報に基づきＳＱＬ文かどうかを判定することが可能である。
【００３９】
ステップＳ３０４では、ロジックコード生成部３７は、ロジックコードを記憶するファイルなどへＳＱＬ文以外の語句を出力する。
【００４０】
ステップＳ３０５では、ロジックコード生成部３７は、ＳＱＬ文に基づきＳＱＬ文認識情報２１０を取得する。そして、ロジックコード生成部３７は、ＳＱＬ文認識情報２１０の表名組２１２とメソッド名２１７とをキーとしてＤＡＯ生成情報を取得する。
【００４１】
ステップＳ３０６では、ロジックコード生成部３７は、ＤＡＯコードの変数の宣言がロジックコードへ未出力かどうかを判定する。ロジックコード生成部３７は、未出力であると判定した場合、ステップＳ３０７へ進み、出力済であると判定した場合、ステップＳ３０８へ進む。
【００４２】
ステップＳ３０７では、ロジックコード生成部３７は、ロジックコードの変数宣言部に、ＤＡＯコードのクラスの変数を宣言するコードと、ＤＡＯコードのクラスの変数にオブジェクトを割り当てるコードを出力する。ここで、ＤＡＯコードのクラス名は、例えば、ＤＡＯ生成情報２２０のＤＡＯ名２２２とする。また、ロジックコード生成部３７は、ＤＡＯコードのクラスの変数名は、例えば、ＤＡＯコードのクラス名に適当な接頭語または接尾語をつけたものとする。ＤＡＯコードのクラスの変数名は、例えば、変数名の大文字小文字を区別するプログラム言語であれば、クラス名の先頭を大文字とし、それを小文字にしたものを変数名としてもよい。
【００４３】
ステップＳ３０８では、ロジックコード生成部３７は、ソースコードのＳＱＬ文が書かれていた箇所を、ＤＡＯコードのメソッドの呼出しと、ホスト変数とＤＴＯコードとの間の値を転記するコードとに置き換えてロジックコードへ出力する。
【００４４】
ステップＳ３０７とステップＳ３０８との処理について、各ＳＱＬ文での動作の一例を説明する。
ＳＥＬＥＣＴ文３１０の場合、まず、ロジックコード生成部３７は、例えば、ロジックコードにはＤＡＯコードのメソッドを呼出すコードを出力する。ここで、ＤＡＯコードのメソッドのパラメータは、ＳＱＬ文認識情報２１０のパラメータ２１６である。また、メソッドの戻り値は、ＤＡＯ生成情報２２０で指定されたＤＴＯコードのクラスである。戻り値を格納する変数名は、変数名を一意にするため、例えば、ＤＴＯ名２２７にソースコードでの出現順序などを付加したものとする。次に、ロジックコード生成部３７は、戻り値のＤＴＯクラスから、ＩＮＴＯ句のホスト変数に値を転記するコードを出力する。
ＩＮＳＥＲＴ文３２０およびＵＰＤＡＴＥ文３３０の場合、まず、ロジックコード生成部３７は、ロジックコードに、ＤＴＯコードのクラスの変数を宣言するコードと、ＤＡＯコードのクラスの変数にオブジェクトを割り当てるコードを出力する。次に、ロジックコード生成部３７は、付帯条件２１５の中で指定されたホスト変数および定数の値をＤＴＯコードのクラスの変数に転記するコードを生成し、次にＤＡＯメソッドを呼出すコードを出力する。ＤＡＯコードのメソッドのパラメータは、ＤＴＯクラスの変数と、ＳＱＬ文認識情報２１０のパラメータの両方である。
ＤＥＬＥＴＥ文３４０の場合、ロジックコード生成部３７は、ロジックコードに、ＤＡＯメソッドを呼出すコードを出力する。メソッドのパラメータは、ＳＱＬ文認識情報２１０のパラメータである。
ＤＥＣＬＡＲＥ  ＣＵＲＳＯＲ文３５０の場合、ロジックコード生成部３７は、ロジックコードにコードの出力は行わない。
ＯＰＥＮ  ＣＵＲＳＯＲ文３６０の場合、ロジックコード生成部３７は、ロジックコードにＤＡＯコードのメソッドを呼出すコードを出力する。メソッドのパラメータは、ＳＱＬ文認識情報２１０のパラメータ２１６である。メソッドの戻り値はＤＡＯ生成情報２２０で指定されたＤＡＯクラスのオブジェクトのリストまたは配列である。戻り値を格納する変数名は、カーソル名から生成する。
ＦＥＴＣＨ文３７０の場合、ロジックコード生成部３７は、ＯＰＥＮ  ＣＵＲＳＯＲ文３６０に対応して生成したメソッドの戻り値から、１つのＤＴＯオブジェクトを取り出すコードと、ＩＮＴＯ句のホスト変数に値を転記するコードと、次にＦＥＴＣＨ文３７０が実行された場合にリストまたは配列から取り出されるＤＴＯオブジェクトの位置指示子を１つ進めるコードを出力する。
ＣＬＯＳＥ  ＣＵＲＳＯＲ文３８０の場合、ロジックコード生成部３７は、ＯＰＥＮ  ＣＵＲＳＯＲ文に対応して生成した戻り値を格納する変数を無効化するコードを生成する。ロジックコード生成部３７は、例えば、変数を無効化するコードとして空オブジェクトを代入するコードを生成する。
【００４５】
次に、ステップＳ３０９からステップＳ３１２では、オブジェクト生成部３６は、ＤＡＯ生成情報２２０にしたがってＤＡＯクラスのコードを出力する。
ステップＳ３０９では、オブジェクト生成部３６は、ＤＡＯ生成情報２２０の生成フラグ２２８が未生成を示すかどうかを判定する。オブジェクト生成部３６は、生成フラグ２２８が未生成を示す場合、ステップＳ３１０へ進み、生成フラグ２２８が未生成を示さない場合、ステップＳ３１３へ進む。
【００４６】
ステップＳ３１０では、オブジェクト生成部３６は、ＤＡＯ名２２２で指定されたＤＡＯコードのクラスが未生成であるかどうかを判定する。オブジェクト生成部３６は、ＤＡＯコードが未生成である場合、ステップＳ３１１へ進み、ＤＡＯコードが未生成でない場合、ステップＳ３１２へ進む。
【００４７】
ステップＳ３１１では、オブジェクト生成部３６は、ＤＡＯコードのクラスを宣言するコードを、ＤＡＯコードを記憶するファイルなどへ出力する。
ここで、ステップＳ３１０での判定の対象となったＤＡＯ名２２２は、表名組２２１に基づき付けられている。また、表名組２２１は、ＳＱＬ文が操作する表の組に基づき生成されている。つまり、ステップＳ３１０とステップＳ３１１とでは、ＳＱＬ文が操作する表の組に対して、ＤＡＯコードのクラスが未生成である場合はＤＡＯコードのクラスを宣言するコードを生成し、ＤＡＯコードのクラスが未生成でない場合はＤＡＯコードのクラスを宣言するコードを生成しない。従って、ＤＡＯコードのクラスは、ＳＱＬ文が操作する表の組ごとに生成され、同じ表の組に対して重複して生成されることはない。
【００４８】
ステップＳ３１２では、オブジェクト生成部３６は、ＤＡＯコードを記憶するファイルなどに新規に生成するＤＡＯコード、または生成済みのＤＡＯコードの中に、メソッドのコードを追加出力する。そして、オブジェクト生成部３６は、ＤＡＯ生成情報２２０の生成フラグ２２８を生成済に変更する。ここで、メソッドの名前、パラメータ、戻り値は、ＤＡＯ生成情報２２０のメソッド名２２３、パラメータ宣言２２４、戻り値宣言２２５に従う。
オブジェクト生成部３６は、ステップＳ３０９とステップＳ３１０との場合分けを行うことで、同じＳＱＬ文を実行するメソッドを複数生成することを防ぐ。つまり、オブジェクト生成部３６は、同じデータアクセスコードを実行するメソッドを複数生成することを防ぐ。
【００４９】
次に、ステップＳ３１３からステップＳ３１９では、オブジェクト生成部３６は、ＤＴＯ生成情報２３０に従って、ＤＴＯコードのクラスのコードを出力する。
ステップＳ３１３では、オブジェクト生成部３６は、ＤＡＯ生成情報２２０の中のＤＴＯ名２２７をキーにしてＤＴＯ生成情報２３０を取得する。
【００５０】
ステップＳ３１４では、オブジェクト生成部３６は、取得したＤＴＯ生成情報２３０の変数名２３２のそれぞれに注目する。
【００５１】
ステップＳ３１５では、オブジェクト生成部３６は、取得したＤＴＯ生成情報２３０の変数でステップＳ３１６以降の処理していないものがないかどうかを判定する。オブジェクト生成部３６は、処理していないものがある場合、ステップＳ３１６へ進み、処理していないものがない場合、ステップＳ３０１へ進む。
【００５２】
ステップＳ３１６では、オブジェクト生成部３６は、ＤＴＯ生成情報２３０の生成フラグ２３４が未生成を示すかどうかを判定する。オブジェクト生成部３６は、生成フラグ２３４が未生成を示す場合、ステップＳ３１７へ進み、生成フラグ２３４が未生成を示さない場合、ステップＳ３１４へ進む。
【００５３】
ステップＳ３１７では、オブジェクト生成部３６は、ＤＴＯコードが未生成であるかどうかを判定する。オブジェクト生成部３６は、ＤＴＯコードが未生成である場合、ステップＳ３１８へ進み、ＤＴＯコードが未生成でない場合、ステップＳ３１９へ進む。
【００５４】
ステップＳ３１８では、オブジェクト生成部３６は、ＤＴＯコードのクラスを宣言するコードを、ＤＴＯコードを記憶するファイルなどへ出力する。
【００５５】
ステップＳ３１９では、オブジェクト生成部３６は、ＤＴＯコードを記憶するファイルなどに新規に生成するＤＴＯコード、または生成済みのＤＴＯコードの中に、変数を宣言するコードと、変数の値を取得するメソッドのコードと、変数の値を設定するメソッドのコードとを追加出力する。そして、オブジェクト生成部３６は、ＤＴＯ生成情報２３０の生成フラグ２３４を生成済に変更する。
【００５６】
ステップＳ３２０では、コード生成部３５は、処理を終了する。コード生成部３５は、生成したロジックコード、ＤＡＯコード、ＤＴＯコードを出力したファイルファイルを閉じ、処理を終了する。
【００５７】
なお、図８において、ステップＳ３０４とステップＳ３０６からステップＳ３０８までとは、ロジックコード生成ステップである。また、ステップＳ３０９からステップＳ３１２までは、ＤＡＯコード生成ステップである。また、ステップＳ３１３からステップＳ３１９までは、ＤＴＯコード生成ステップである。図８では、ロジックコード生成ステップのステップＳ３０６からステップＳ３０８まで、ＤＡＯコード生成ステップ、ＤＴＯコード生成ステップの順に実行するように示した。しかし、実行順序はこれに限られず、ロジックコード生成ステップのステップＳ３０６からステップＳ３０８まで、ＤＡＯコード生成ステップ、ＤＴＯコード生成ステップの実行順序を入れ替えてもよいし、並行に実行してもよい。
また、上記のＤＡＯコード生成ステップとＤＴＯコード生成ステップとを合わせたものがオブジェクト生成ステップである。
【００５８】
以上のように、実施の形態１では、ＳＱＬ文を含んだソースコードを、コード生成部３５が分割変換し、業務ロジックを実行するプログラムからＳＱＬ文を実行するプログラムを分離させている。実施の形態１では、コード生成部３５が機械的に上述した処理を行うため、作業時間を短くし、人為的な誤りを排除することができる。
また、変換されたソースコードは、ＤＡＯパターンが適用されているので、データベースの実装が変更されても、業務ロジックへの影響を及ぼさないようにすることも可能である。したがって、実施の形態１によれば、プログラムの移植性および保守性が向上する。
また、実施の形態１では、同じ表、または表の組を操作するメソッドを１つのＤＡＯコードのクラスにまとめることによって、１クラス１メソッドとする場合と比較して生成するＤＡＯコードのクラスの数を減らすことができる。そのため、実施の形態１では、ソース管理が容易になる。また、実施の形態１では、データベースの１つの表について変更があった場合、影響がおよぶＤＡＯコードのクラスの数が少なくなる。従って、実施の形態１では、保守作業が容易になる。
また、実施の形態１では、ＳＱＬ文認識情報２１０の比較を行うことによって、同じＳＱＬ文を実行するメソッドの重複生成を防ぐ。従って、実施の形態１では、変換後のソースのコード量を少なくすることができる。さらに、実施の形態１では、１つのＳＱＬ文について変更があった場合、影響がおよぶメソッドの数が１つで済む。従って、実施の形態１では、保守作業が容易となる。
【００５９】
実施の形態１をまとめると次のようになる。
【００６０】
実施の形態１に示すプログラム変換方式１００は、ソースコード中の埋め込みＳＱＬ文を、ＳＱＬ実行ＡＰＩの呼出し文に変換する方法において、業務ロジックと、ＳＱＬ実行ＡＰＩ呼出し文を出力するＤＡＯコードと、業務ロジックとＤＡＯコードの間で受け渡す変数の集合を格納するＤＴＯコードに分割することを特徴とする。
【００６１】
また、実施の形態１に示すプログラム変換方式１００は、ＳＱＬ文が操作する表の組が同じメソッドを、１つのＤＡＯコードの中に出力することを特徴とする。
【００６２】
さらに、実施の形態１に示すプログラム変換方式１００は、ＳＥＬＥＣＴ文３１０で表の組を選択するときに、表の指定順序が違っていても組合せが同じであれば、同じ表の組とみなすことを特徴とする。
【００６３】
また、さらに、実施の形態１に示すプログラム変換方式１００は、実行するＳＱＬが同じメソッドがあっても、ＤＡＯコードに重複して出力しないことを特徴とする。
【００６４】
実施の形態２．
次に、実施の形態２について説明する。実施の形態２では、ソースコードにおいて、ＳＱＬ文以外のコードを記述するプログラム言語を変更する機能を実施の形態１に示すプログラム変換方式１００に追加する。
【００６５】
図９は、実施の形態１におけるプログラム変換方式１００の機能を示す機能ブロック図である。図９に基づき、実施の形態２におけるプログラム変換方式１００の機能について説明する。
【００６６】
図９に示すプログラム変換方式１００は、図２に示すプログラム変換方式１００にプログラム言語変換部３８が追加されている。図９に示すプログラム変換方式１００は、その他の機能については、図２に示すプログラム変換方式１００と同様である。プログラム言語変換部３８は、ロジックコードを生成する場合、目的のプログラム言語にソースコードを処理装置によって変換する。また、プログラム言語変換部３８は、ＤＡＯコードやＤＴＯコードの宣言、変数宣言、メソッドのパラメータや戻り値に現れるデータ型の宣言も、目的言語のソースコードに変換してから出力する。
つまり、プログラム言語変換部３８は、図８に示すフローチャートのステップＳ３０４、ステップＳ３０７、ステップＳ３０８において、目的のプログラム言語にソースコードなどを変換する。
【００６７】
プログラム言語の変換は、上述した処理で行うことに限定するわけではない。例えば、データアクセス情報生成部３３は、ＤＡＯ生成情報２２０のパラメータ宣言２２４と戻り値宣言２２５、およびＤＴＯ生成情報２３０のデータ型２３３に書き込むデータの型は、ＤＡＯクラスソースとＤＴＯクラスソースの出力する場合に、プログラム言語変換部３８が変換しても構わない。他にも、プログラム言語の変換は、データアクセス情報生成部３３がＤＡＯ生成情報２２０やＤＴＯ生成情報２３０を書き込む場合に、プログラム言語変換部３８を通すことにより、変換して書き込んでも構わない。
【００６８】
以上により、実施の形態２では、レガシーなＳＱＬ文を有するプログラムが、新規に導入されるシステムのソフトウェア開発環境に対応していない場合に、新しいソフトウェア開発環境に対応するプログラムのソースに機械的に変換することができる。従って、実施の形態２では、システムの環境の仕様を変更する場合などにも、移行が容易である。
【００６９】
つまり、実施の形態２に示すプログラム変換方式１００は、変換前の埋め込みＳＱＬ文以外のコードを記述するプログラム言語と、変換後のプログラム言語が異なることを特徴とする。
【図面の簡単な説明】
【００７０】
【図１】実施の形態１におけるプログラム変換方式１００のハードウェア構成の一例を示す図である。
【図２】実施の形態１におけるプログラム変換方式１００の機能を示す機能ブロック図である。
【図３】データアクセス情報２００の構成の示す。
【図４】ＳＱＬの構文の一例を示す。
【図５】プログラム変換方式１００の動作を示すフローチャートである。
【図６】データアクセスコード抽出部３１の動作であるデータアクセスコード抽出処理を示すフローチャートである。
【図７】データアクセス情報生成部３３の動作であるデータアクセス情報生成処理を示すフローチャートである。
【図８】コード生成部３５の動作であるオブジェクトコード、ロジックコード生成処理を示すフローチャートである。
【図９】実施の形態２におけるプログラム変換方式１００の機能を示す機能ブロック図である。
【符号の説明】
【００７１】
１０  ソースコード記憶部、２０  ソースコード読込部、３０  プログラム生成部、３１  データアクセスコード抽出部、３２  データアクセスコード記憶部、３３  データアクセス情報生成部、３４  データアクセス情報記憶部、３５  コード生成部、３６  オブジェクト生成部、３７  ロジックコード生成部、３８  プログラム言語変換部、４０  生成コード記憶部、５０  アクセスコード識別情報記憶部、１００  プログラム変換方式、２００  データアクセス情報、２１１  ソース識別子、２１２  表名組、２１３  操作種別、２１４  カーソル名、２１５  付帯条件、２１６  パラメータ、２１７  メソッド名、２２０  ＤＡＯ生成情報、２２１  表名組、２２２  ＤＡＯ名、２２３  メソッド名、２２４  パラメータ宣言、２２５  戻り値宣言、２２６  ＳＱＬ文、２２７  ＤＴＯ名、２２８  生成フラグ、２３０  ＤＴＯ生成情報、２３１  ＤＴＯ名、２３２  変数名、２３３  データ型、２３４  生成フラグ、３００  ＳＱＬ文の構文、３１０  ＳＥＬＥＣＴ文、３２０  ＩＮＳＥＲＴ文、３３０  ＵＰＤＡＴＥ文、３４０  ＤＥＬＥＴＥ文、３５０  ＤＥＣＬＡＲＥ  ＣＵＲＳＯＲ文、３６０  ＯＰＥＮ  ＣＵＲＳＯＲ文、３７０  ＦＥＴＣＨ文、３８０  ＣＬＯＳＥ  ＣＵＲＳＯＲ文、９０１  ＣＲＴ表示装置、９０２  Ｋ／Ｂ、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、９４０  インターネット、９４１  ゲートウェイ、９４２  ＬＡＮ。
【図１】
2007004503.tif 000003
【図２】
2007004503.tif 000004
【図３】
2007004503.tif 000005
【図４】
2007004503.tif 000006
【図５】
2007004503.tif 000007
【図６】
2007004503.tif 000008
【図７】
2007004503.tif 000009
【図８】
2007004503.tif 000010
【図９】
2007004503.tif 000011