« 2007年8月 | トップページ | 2007年10月 »

2007年9月

2007年9月30日 (日)

正式リリースの準備

2週間間が空いてしまったが、DBXInspectorの正式リリースを今週末か、来週の始めになるよう作業を進めています。前回のバージョンと比較して機能差はありませんが、リファクタリングを行っていました。

2007年9月14日 (金)

ふぅ。

V0.9.0.16をリリースしました。主な変更はV0.9.0.15の列やパッケージのファンクション・プロシージャが2重にリストアップされる問題を修正しました。Oracleはパブリックシノニムと同名のオブジェクトが自スキーマ内にあると、自スキーマのオブジェクトを優先するので、そうハンドリングしただけですが・・これは、どのデータベースでもそうだと思います。Oracleでは、SYS.STANDARDパッケージのOracle標準関数は例外的な扱いになってるようです。後、シノニムに絡んで、シノニムのネストに対応しました。Oracleはシノニムに対してシノニムを付けられるのですが、それに対応しました。

09016_1

上のイメージでSYNONYM_5は4、4は3、・・・・2は1、1はEMPテーブルに対するシノニムなんですが、

09016_2

のように、ネストしても補完されます。まぁ、普通はこんな事しないと思うが。もちろん、データベースリンクは見ません。

とどうでもいいような機能ですが、しばらくこの様に、安定性?重視でいきます。それと、ホームページの方で、過去の古いバージョンのダウンロードを停止したいと思います。直近の5バージョンぐらいはダウンロードできるようにしときますが。

2007年9月11日 (火)

V0.9.0.15リリース

V0.9.0.15をリリースしました。前回書いたように、他スキーマのオブジェクトのコード補完に対応しました。詳しい内容は前回の記事「V0.9.0.15プレビュー」を参照してください(って、昨日の記事ですが・・)。前回も書いたように、ログイン後、エディタ上で初めてCtrl+Spaceキーなどによるコード補完とパラメータ表示を行うとオブジェクトの一覧など最低限必要な情報を取得しに行くので、ちょっとまたされます。一度読み込むとキャッシュされるので次回は高速です。で、速くなるかは謎ですが、「エディタオプション」ウィンドウの「支援機能」タブに「パブリックシノニムを補完する」や「補完するオブジェクト」オプションを追加しました。

09015_1

「スキーマを補完する」をチェックしないと全く補完が働かなくなるので注意を(このオプション必要ないかもしれません)。また、前回書いたように、definition.xmlを廃止し、キーワードだけを定義するkeywords.txtファイルを追加しました(ついでに、キーワードも増やしておきました。計140個ぐらい)。

09015_2

以上、こんな感じです。最後にパブリックシノニムとその参照先を見るようになったので、例えば、SYSユーザーで接続し、DBMS_OUTPUTパッケージのサブプログラムを補完させると、

09015_3 

のようにサブプログラムが2重にリストアップされます(テーブルに対して列も同様、また、パラメータ表示も同様)が、これは、SYSユーザーがDBMS_OUPUTパッケージを所有して、また同名のパブリックシノニムが存在するからなのですが、このハンドリングはだいたいまとまったので、次回以降のリリースで対応します(一度にテストするのは大変なので・・)。もちらん、他のユーザーで接続すれば、発生しません。また、SYS.DBMS_OUTPUTとスキーマ名を指定して限定すれば、発生しません。

で、正式リリースの準備をするためしばらく大きな機能追加は行わずに、バグ修正や細かい改良を行うメンテナンスモードに入ります。以前書いた「ファイルエクスプローラ」ウィンドウの追加や「データベースエクスプローラ」ウィンドウの非スキーマオブジェクトの対応は仮にバグっても影響が小さいと思うので準備でき次第追加します。ははは。

というか、この3ヶ月飛ばしすぎた・・

2007年9月10日 (月)

V0.9.0.15プレビュー

V0.9.0.15は他スキーマのオブジェクトも補完できるようになる予定です。ということで、開発中のスクリーンショットを。

09015_preview1_2 

ウィンドウのタイトルを見ればわかるように、SCOTTユーザーで接続し、他スキーマのSYSユーザーのUSER_TABLESビューを補完しようとしてる画面です。USER_TABLESビューはユーザーが所有するテーブルの一覧を返すOracleカタログビューです。通常は、このビューを参照するのに、スキーマ名を付けなくていいように、このビューの同名のパブリックシノニムUSER_TABLESがありますので、次のように直接シノニムを参照してみます。

09015_preview2_2

で、このまま、更にCtrl+Spaceキーを押すと、次のように、列名がリストアップされます。

09015_preview3_2

シノニムの参照先もしっかり見るようになります。で、V0.9.0.15では従来のOracle標準関数を定義したdefinition.xmlを廃止し、すべて実行時に情報を取得するようになります。Oracle標準関数(TO_CHARなど)の実態はSYS.STANDARDパッケージの関数なのですが、これらは、スキーマ名やパッケージ名で修飾しなくても参照できるので、従来通り、次のように直接参照できます。

09015_preview4

もちろん、これも従来通りですが、次のようにスキーマ名・パッケージ名を指定しても問題ありません。(普通はしないと思うが・・)

09015_preview5

また、パラメータ表示も従来同様、行えますが、新たにストアドプロシージャストアドファンクションにも対応します(従来はパッケージのプロシージャ・ファンクションのみ)。試しに、ユーザーをTEST_USERに変えて、下の画面のTEST_FUNCTION1のパラメータ表示をしてみます。

09015_preview6

補完した後、Ctrl+Shift+Spaceキーを押します。

09015_preview7_2 

引数1つだけですが・・

とまぁ、こんな感じです。だいたい実装は終わり、後はテストと細かい修正です。動作はこれで問題ないはずです。それと、実行時に情報を取りにいくので、最初の補完(接続後、はじめてエディタ上で補完する時)の時はちょっと時間かかります。自分の環境では3秒くらいかな。パブリックシノニムが結構あって、その一覧の取得に時間かかってるようです。一度取ると、キャッシュされるので、2回目以降は全く問題ありませんので、大丈夫だと思います。リリースは実装はだいたい終わってますが、補完時に表示する属性(列ならデータ型とか)など細かいことをもうちょいのろのろ考えようと思うので、今週末までにはリリースできればいいかなと思ってます。

2007年9月 9日 (日)

ユーザーオブジェクトのコード補完

昨日のお題

  1. 接続時に全スキーマの情報を取得
  2. Ctrl+Spaceなどのコード補完時に毎回最新の情報を取得して表示
  3. 初回補完時に情報をキャッシュ、次回補完時はキャッシュした情報を表示

を煮詰めてみました。

1は前回書いたように、ログイン時に使わないかもしれないオブジェクトの情報まで、ログイン直後に長時間かけて取得するの問題あると思うので却下します。で、2か3なのですが、2を想定してテストプログラムを書いてみたのですが、やはり、負荷がかかり、コード補完時に毎回少し待たされると思うので、3の案で行こうと思います。3の案のバリエーションとして、古くなった情報は破棄するなど考えたのですが、どういう条件を満たしたら破棄すればいいのか?などファジー(インテリジェント?)な事をしたくないので、一度キャッシュされたら、再ログインするまでキャッシュすることにします。(もしくは、「エディタオプション」ウィンドウにキャッシュをクリアするボタンを設ける)。3の案のデメリットはキャッシュ後にそのオブジェクトの構造(テーブルで言えば列の追加など)を変えると、リセットするまで古い情報が表示されることですが、まぁ、DBAというより一般のDBアプリケーションの開発者や運用の人を想定しているので、この案で問題ないと思います。

ということで、実装に取りかかってみます。

ところで、今回は「ツール」機能の説明を。この機能は外部ツールを登録して、DBXInspectorから起動できるようにする機能です。まず、登録は「ツール」メニュー->「オプション」メニューで表示される「オプション」ウィンドウの下の「ツール」タブで行います。

Userobjects_1

登録は「追加」ボタンを押します。すると、下の「ツールの設定」ウィンドウが現れます。

Userobjects_2

試しに、以下のように、OracleのSQL*Plusを登録してみます。

Userobjects_3

「タイトル」には見やすい名前を付けて下さい。「プログラム」には起動するプログラムの実行可能ファイル名を指定して下さい。V0.9.0.13で修正されましたが、環境変数PATHに実行するプログラムのパスが設定されていれば、フルパスを指定する必要はありません。SQL*Plusの場合、Oracleをインストールすると、自動的に環境変数PATHに追加されるので、ファイル名だけで問題ないと思います。上の例では「実行時引数」に/nologが設定されていますが、これはSQL*Plusのオプション引数です。

次に「OK」ボタンを押すと登録されます。これで、「ツール」メニューから起動できるようになります。

Userobjects_4_2 

「ドキュメント」機能も同じような機能ですが、予め、拡張子とプログラムの関連付けが行われている必要があります。

2007年9月 8日 (土)

V0.9.0.14リリース

V0.9.0.14をリリースしました。V0.9.0.14からユーザーのスキーマオブジェクトのコード補完への対応を開始しました。下のイメージのように、Ctrl+Spaceキーなどでのコード補完時に、接続スキーマのユーザーオブジェクトが候補としてリストアップされるようになりました。

09014_1_2

テーブル、インデックス、ビューなどのスキーマオブジェクトの名前がリストアップされます。合わせて、「エディタオプション」ウィンドウに「支援機能・色」タブを追加しました。

09014_2

ここらへんの、画面構成は後で微妙に変わるかもしれません。デフォルトの配色とかも。

ところで、今リリースのユーザーオブジェクトの補完機能は微妙です。*スキーマオブジェクト名*しか補完できないので、例えば、テーブルの列やパッケージのメソッドを補完できません。とりあえず、この段階でリリースしました(従来のOracle標準パッケージや関数は今まで通り補完できます)。というのも、自スキーマのオブジェクトを補完すると、他スキーマのオブジェクトも補完したくるのが人情?で、そこらへんを考えてみようと思ったからです。で、実装の話ですが、他スキーマのオブジェクトを補完する場合、考えられる選択肢として、

  1. 接続時に全スキーマの情報を取得
  2. Ctrl+Spaceなどのコード補完時に毎回最新の情報を取得して表示
  3. 初回補完時に情報を取得してキャッシュ、次回補完時はキャッシュした情報を表示

と、まず、分類してみたのですが、1は明らかに、パフォーマンスの問題が発生するので却下で。2と3のどっちにしようかなと。2にすると、今現在、コード補完時に標準関数などは、関数名だけでなく、引数のリストも表示されるようになってるが、カタログビューALL_ARGUMENTSを使ってリストアップするすべての関数のパラメータを毎回解析するのは、おそらく、負荷がかかりすぎなので、関数名だけ表示して、パラメータのリストはCtrl+Shift+Spaceキーなどによるパラメータ表示時にだけ表示するとか。

他にも、情報を動的に取得しにいくと、現在、ローカルのdefinition.xmlに定義されているOracle標準関数やパッケージを動的に取りにいって、このファイルを廃止??後、パブリックシノニムの問題への対応の問題(他スキーマのオブジェクトにアクセスするのに、一々、スキーマ名を付加させるのを強制させるのもあれだし・・)。

とか、ちょっと煮詰めます。

2007年9月 5日 (水)

ちょっと雑談

まぁ、ブログの記事すべてが雑談なのかも知れないが・・

世の中色々なデータベースがあるが、数日前、IBMのデータベースDB2を久しぶりに触ってみた(ちなみに、DB2もOracleと同様、利用制限付きの無償版がある。DB2 Express C)。DBXInspectorが使用しているOracleのOCI(Oracle Call Interface)と同様にDB2にネイティブ接続するAPIとして、DB2 CLI(Call Level Interface)というものがある。Windows環境では、DLL(db2cli.dll)として用意され、APIがエクスポーズされているが、そのDLLの中身を開発環境付属のツールを使って表示してみた。

Db2cli

一番右側の列がエクスポーズされている関数名なのだが、ODBCに詳しい人ならピンとくると思うが、そう、ODBCの関数名と同じなのである。というより、DB2 CLIはODBC規格に準拠したインターフェースなのである。つまり、DB2 CLIをアプリケーション側から単独で利用してもいいし、ODBC Driver Managerを経由して利用もできる。

と、DB2の話になったが、色々妄想しているのである。何をかと言うと、DBXInspectorの開発が一通りすんだら、次は、DB2版DBXInspectorかなと。MySQLやPostgreSQL向けのソフトは見ると既に結構あるので、あまり見かけないDB2版がいいかなと。DB2版は妄想ではあるが、DBXInspectorの新リリース毎にこっそり?リファクタリングを行っているのはそのためでもあったりする。例えば、データベース毎に中身が異なる「データベースエクスプローラ」ウィンドウは、現在、共通のインターフェイスや動作を定義した700行くらいのTDBMetaDataクラスを継承した500行くらいのTOracleDBMetaDataクラスにどの種類のスキーマオブジェクトがサポートされているかなどを問い合わせて、ツリーを構築するように既に実装されているので、後は、DB2固有の部分を実装したTDB2MetaDataを用意して切り替えてやればいいだけ・・みたいなように既になっている。後、エディタの入力支援の部分を似たような作りにこっそり変える予定。

まぁ、そもそもDB2版の需要があるのか・・。GoogleでDB2の情報検索してもあんまhitしないし・・妄想なんだけど、今現在のOracle版のDBXInspectorの開発の合間に、DB2への接続テストのプログラムを作って実験したりはしていたり。

DBXInspectorスクリーンショット:

Main

2007年9月 4日 (火)

V0.9.0.13リリース

DBXInspector V0.9.0.13をリリースしました。前回、書いたように「DDLソースの取得」機能で、DBMS_METADATAパッケージを用いたオブジェクトのDDL文が取得できるようになりました。もちろん、DBMS_METADATAパッケージがインストールされている必要があります。

09013_1

また、Oracle10gでリサイクルビンが導入され、テーブルなどをドロップすると、BIN$で始まるオブジェクトが作成されますが、それらをフィルタして表示しないようにする「BIN$で始まるオブジェクトをフィルタする」オプションが追加されました。

09013_2

デフォルトではオンになっています。他の変更はhistory.txtを見て下さい。ちなみに、今回のリリースで「SQL履歴」機能の内部アルゴリズムを変更したので、以前のバージョンを上書きして起動する場合は、SQLHistory.datファイルを削除してから起動して下さい。

というか、今回のリリースで非スキーマオブジェクトを「データベースエクスプローラ」に表示できるようにすると書きましたが、ちょっと間に合いませんというか、次回以降に含めることにしました。で、何をやっていたかというと、「ファイルエクスプローラ」ウィンドウというウィンドウを追加しようとしてました。前回のリリースでWindowsのエクスプローラから、「SQLエディタ」にファイルをドラッグ&ドロップして開けるようにしたのですが、Windowsのエクスプローラからだけではなく、独自のエクスプローラからも開ける方が便利かなと思いまして。こんな感じにです。

09013_3

画面の右側のウィンドウです。で、簡単にウィンドウを追加してあれこれいじってみると、色々ハンドリングしなければいけないことがあり、V0.9.0.13のリリースに含めようと思ったのですが、手間取りとりあえず、この機能を含めないでリリースすることにしました。拡張子でフィルタしたり、登録したお気に入りフォルダにメニューから一発で移動できる機能があればいいかなと思ってます。

« 2007年8月 | トップページ | 2007年10月 »

自作ソフトウェア

無料ブログはココログ

メモ