このアプリケーションでは、ユーザーはSQLコードを入力して、NexusDBデータベースからデータを取得できます。実際にクエリを実行せずに、そのようなクエリの結果のメタデータを決定したいと思います。メタデータを使用して、フィールドの数と結果の各フィールドのデータ型を決定します。
[追加]この機能は、ユーザー定義の変換プロセスの一部として使用します。実際の変換は後でバッチのようなプロセスで行われますが、事前にメタデータが必要なので、ユーザーは変換で追加のフィールド特性やプラグインの適用、親子関係の作成などの変更を指定できます。[/ addition ]
これまでは、基本的WHERE FALSE
にSQLクエリに追加するか、既存のすべてのWHERE
ステートメントを。に置き換えることでこれを実行していましたWHERE FALSE AND
。ただし、もちろん、SQL全体を解析して、コメント、ネストされたSELECTS、JOIN、およびその他の句を考慮に入れて、調整する正しいwhere句の正確な場所を決定する必要があります。このようにかなり複雑になります:-(
また、これのもう1つの欠点は、結果セットが空になることを事前に知っていても、ほとんどの場合、クエリの実行に長い時間がかかる可能性があることです。
これを達成する別の方法があるかどうか疑問に思いました。
つまり、TQueryオブジェクトには独自のパーサーが必要であり、SQLステートメントをさまざまな句に分割します。実行の直前にwhere句を変更できれば、自分で解析を行う必要はありません。しかし、TQueryオブジェクトの内部に飛び込むのは少し心配です。ただ、私たちが望むようにそれを使用する方法がないことを知るためです。
誰かがこれについて何かアドバイスがありますか?