委任規則: WHERE 句
WHERE 句は、SQL クエリにおいて、データ ソース プロバイダに委任できるかどうかが最初に評価される句です。WHERE 句が委任できなければ、クエリの残りの部分も委任できません。
Spectrum Spatial は空間演算子に重点を置いて、データ ソース プロバイダがサポートする演算子をできるだけ多くデータ ソース プロバイダに委任します。データ ソース プロバイダに何を委任できるか判断する際に、以下の規則が WHERE 句に適用されます。
- Boolean 演算子のみがデータ ソース プロバイダに委任できます。Boolean 関数は委任できません。
- Boolean 演算子は、
<column> operator <constant>
という形式になっている必要があります。入力クエリが<constant> operator <column>
と記述されている場合、演算子に逆演算子があれば、クエリを<column> <inverse operator> <constant>
と書き換えることにより、この規則を満たすことができます。 - WHERE 句に AND 演算子が含まれており、データ プロバイダが AND をサポートし、加えて空間演算子と非空間演算子の混合もサポートする場合、すべての演算子がデータ プロバイダに委任されます。データ ソース プロバイダがサポートしない部分はすべて、Spectrum Spatial によって処理されます。
- WHERE 句に AND 演算子が含まれており、データ プロバイダが AND をサポートするが、空間演算子と非空間演算子の混合はサポートしない場合、データ プロバイダがサポートする空間演算子のみが委任されます。残りは Spectrum Spatial で評価されます。
- WHERE 句に AND 演算子が含まれており、データ プロバイダが AND をサポートし、WHERE 句に非空間演算子しか含まれない場合、データ プロバイダがサポートする演算子が委任されます。
- WHERE 句に AND 演算子が含まれており、データ プロバイダが AND をサポートしない場合、すべての演算子のスコアが計算され、最もスコアの高い演算子が委任されます。空間演算子のスコアは非空間演算子よりも高くなります。AND 操作のスコアリング を参照してください。
- WHERE 句に OR または NOT が含まれており、データ プロバイダが OR および NOT とすべての演算子をサポートする場合、クエリ全体がデータ ソース プロバイダに委任されます。AND 演算子の場合のような、部分的な委任は行われません。