Redgate SQL Searchの改善:開発ポイント



SQL Server Management Studioで作業する場合、無料のRedgate SQL Searchを含むRedgateのユーティリティが大好きです。

すべては問題ありませんが、オブジェクトツリーに独自のフォルダーを作成し、そこにサイン/プロシージャを配置できるようにする正気のツールを夢見ていました。

ある時点で、SQLTreeOが表示されましたが、その後、問題に遭遇しました-SQLSearchは、作成したフォルダーを検索していません。







実際には、これがアドインの小さなアドイン-SQLSearch Extenderの始まりです。 さらに、Redgateはユーザー要望を急いで実装していないため、このような酒がなくなったので、機能を最大限に追加してみませんか。

SQLSearch機能に追加されるもの([ツール]-> [SQL Search Extender]メニューの設定):





実際、開発ノート。

SSMSのAPI Microsoftは広告を出しません。最初は、次の記事が大いに役立ちました-

SQL Server Management Studio 2005のアドインSQL 2008r2 を書くブラックアートが ssmsアドインを破壊



幸福のために必要なほとんどすべてがこれらの記事に記載されています、私はいくつかの点に注意します



瞬間1. SQLSearchウィンドウをキャッチします。



最初はほとんど情報がないため、Connect.OnCmdUIContextChangedのハンドラーを切断し、WinAPI EnumChildWindowsを呼び出します。 深い内的満足で、UserControlからの相続人が目的のウィンドウ内にあることがわかり、タイプと名前(必要に応じてHawkeye )で必要な要素を見つけます。 次に、インターフェイスで必要なことを行います。



瞬間2. SQLTreeOフォルダーを検索する



アイデアは簡単です-SQLSearchが検索を完了した後、オブジェクトエクスプローラーで選択された要素を見て、その名前が目的の要素と一致しない場合、サーバーノードレベルに移動してフォルダーを検索します。



瞬間3.構文の強調表示。



SQLSearchスクリプトは、標準のRichEditに出力されます。 上からスタジオ自体のエディター(キーワードのランダムリンク )でそれをカバーしたかったのですが、実際にはうまくいきましたが、あらゆる種類の小さなトラブルを調査して排除する忍耐がありませんでした。

その結果、彼は最も抵抗の少ない道を歩み、RichEditの背後に隠し、Microsoft.SqlServer.SqlParser.Parserの存在を覚え、スピードのためにRTFハンドルを形成しました。



瞬間4. [ツール]メニューに美しいアイコンが欲しい!



どんなにばかげても、ポップアップコンテキストメニューで問題なくこれを行うと、この場合は情報を見つけることができなかったので、それをいじる必要がありました。



瞬間5.検索regexp'amiが欲しい!



SQLSearch自体を変更せずにこれを行う方法が見つからなかったため、最初は悲しくなりましたが、解決策が見つかりました。

SQLSearchはSQLiteとその.NETラッパーを使用してSystem.Data.SQLiteをキャッシュし、データをキャッシュします。ライブラリは実際に検索を開始した時点でロードされます。 しかし、私たちは同じドメインにいて、検索を開始する前にウィンドウをキャッチするため、SQLiteライブラリをすばやく読み込むことができます。 System.Data.SQLiteソースコードをダウンロードし、バージョン番号とキーがSQLSearchが使用するものと一致することを確認し、System.Data.SQLite.SQLiteCommandを変更して、SQLクエリをキャッチし、必要なものを変更します。

正規表現による検索自体の実装は簡単であることが判明しました-SQLiteFunction属性でマークすることでライブラリにクラスを実装するだけで十分です-SQLite REGEXP関数 、その後、 select * from table where text REGEXP '.*GOOD\Z'







同じハックは、検索結果の最大数の制限を取り除くのに役立ちました-SQLSearchは出力を150件に制限します。



瞬間6.オブジェクトのスクリプトを取得します。



すべてが簡単です-Microsoft.SqlServer.Management.Smoが役立ちます



計画、just4fun、関連する.NET Reflectorを使用してCLR UDFソースを逆コンパイルして表示したいのですが、今のところ、





MS Visual Studio 2010、.NET framework 3.5で作成され、Microsoft SQL Server Management Studio 10.0.1600.22(SQL Server 2008R2)でテストされました。



私はまだソースをアップロードしていませんが、ライブラリは何にも閉じられていません。コードの量は少なく、リフレクターがあれば実装を確認したい人は誰でも見ることができます。



参照:



ダウンロードする

FacebookのSQLSearchExtenderページ

SQLTreeOフォーラムに関する議論



2012.06.27更新

SSMS v.10.50でのクラッシュを修正しました。



それまでの間、本質と要点であるSQLSearchはRedgateのWebサイトでバージョン1.1.4.3から1.1.6.1に更新されており、SQLiteスプーフィングによる [修正済み] ハックはすぐに機能しません。

x:\ Program Files(x86)\ SQLSearch2SQLTreeO \ SQLite.Interop.dllおよびx:\ Program Files(x86)\ SQLSearch2SQLTreeO \ System.Data.SQLite.dllを「x:\ ProgramData \ Red Gate \ SQL Search \」にコピーするのに役立ちますアクティブな「and」x:\ ProgramData \ Red Gate \ SQL Search \ Source "。 ここにそのような不幸があります、私は理解します。



All Articles