基本的にデータソースとして機能する、インターフェイスする必要のあるライブラリがあります。データを取得するときに、特別な「フィルター式」をそのライブラリに渡すことができます。このライブラリは、後でSQLWHERE部分に変換されます。これらの表現はかなり制限されています。それらは連言標準形でなければなりません。好き:
(A or B or C) and (D or E or F) and ...
もちろん、これはプログラミングにとってあまり快適ではありません。そこで、任意の式を解析してこの正規形に変換できる小さなラッパーを作成したいと思います。好き:
(A and (B or C) and D) or E
次のようなものに翻訳されます:
(A or E) and (B or C or E) and (D or E)
Ironyライブラリを使用して、式をツリーに解析できます。今、私はそれを正規化する必要があります、しかし私は方法がわかりません...ああ、また、ここにひねりがあります:
- 最終的な式には、NOT演算子を含めることはできません。ただし、演算子を逆演算子に置き換えることで、個々の項を逆にすることができます。だから、これはOKです:
(not A or not B) AND (not C or not D)
しかし、これはそうではありません:
not (A or B) and not (C or D)
- 式は実質的に同一のSQLWHEREステートメントに変換されるため、式をできるだけ単純にしたいので、複雑なステートメントは実行速度を低下させる可能性があります。