AND 演算子の例
以下の例では、AND 演算子をクエリで使用して、要素をデータ ソース プロバイダに委任できることを示しています。
例 1:
SELECT Obj FROM table WHERE pop>10000 AND city='Austin' AND hhinc<75000
データ ソース プロバイダが AND、> 、= および < をサポートする場合、クエリ全体がデータ ソース プロバイダに委任されます。
データ ソース プロバイダが AND と他の演算子の一部をサポートする場合は、それらの演算子がデータ ソース プロバイダに委任され、残りが Spectrum Spatial で処理されます。
データ ソース プロバイダが > または < をサポートしない場合、以下の部分がデータ ソース プロバイダに委任されます。
SELECT pop,hhinc FROM table WHERE city='Austin
Spectrum Spatial は、委任されたクエリの結果を使って、元の WHERE 句を評価します。
SELECT obj FROM <results of the delegation> WHERE pop>10000 AND city='Austin AND hholdinc<75000
例 2:
データ ソース プロバイダが AND をサポートしない場合は、規則に従って 1 つの操作のみを委任できます。Spectrum Spatial では、委任する操作を決定するため、演算子のスコアリングを行い、最もスコアの高い操作をデータ ソース プロバイダに送信します。このスコアリングは、データ ソースが操作をサポートすると仮定して実行できるクエリを論理的に書き直すことで行われます。
AND をサポートしないだけでなく、この例のデータ ソースは Contains (含む) もサポートしません。サポートしますが、Envelope_Intersects をサポートします。
SELECT city FROM table WHERE Obj Contains <geom> AND pop > 5000
は次に変換されます:
SELECT city FROM table WHERE Obj Envelope_Intersects <geom> AND pop > 5000
Spectrum Spatial は、Envelope_Intersects に論理演算子 > より高いスコアを与えます。これは、空間操作が非空間演算子を通じて委任されるケースでもあります。したがって、以下の操作はデータ ソースに委任されます。
SELECT city FROM table WHERE Obj Envelope_Intersects <geom>
Spectrum Spatial は、上記のクエリの結果を使って元のクエリを評価します。
SELECT city FROM <results of the delegation> WHERE Obj contains <geom> AND pop > 5000