OGR SQL方言とSQLITE SQL方言

GDALDatasetは, GDALDataset::ExecuteSQL() メソッドを介してデータソースに対してコマンドを実行することをサポートしています. このようなコマンドがどのように評価されるかはデータセットに依存します.

  • ほとんどのファイル形式(例: Shapefiles, GeoJSON, MapInfoファイル)では, デフォルトで組み込みの OGR SQL 方言 方言が使用されます. また, GDALデータセット上でコマンドを評価するためにSQLiteエンジンを使用する SQL SQLite方言 代替方言を使用することも可能です.

  • データベースシステム用のすべてのOGRドライバ: MySQL, PostgreSQL / PostGIS, Oracle Spatial, SQLite / Spatialite RDBMS, GPKG -- GeoPackage vector, ODBC RDBMS, ESRI Personal GeoDatabase, SAP HANA および MSSQLSpatial - Microsoft SQL Server Spatial Database は, GDALDataset::ExecuteSQL() 関数を専用の実装でオーバーライドし, デフォルトでSQLステートメントを基になるRDBMSに直接渡します. これらの場合, SQL構文はOGR SQLといくつかの点で異なります. また, これらの特定のデータベースに対してSQLで可能なことはすべて実行できます. 一般的には, SELECTステートメントの結果のみレイヤーとして返されます. これらのドライバに対しては, 明示的に OGRSQL および SQLITE 方言を要求することも可能ですが, これらのデータベースシステムのネイティブSQLエンジンよりも一般的にパフォーマンスが低くなります.

方言

ExecuteSQL()

SQLはGDALDatasetに対して実行されます. 特定のレイヤーに対して実行されるわけではありません. 呼び出しは次のようになります:

OGRLayer * GDALDataset::ExecuteSQL( const char *pszSQLCommand,
                                    OGRGeometry *poSpatialFilter,
                                    const char *pszDialect );

pszDialect 引数は, 理論的にはプロバイダに対して異なるコマンド言語をサポートするために意図されていますが, 現時点では, デフォルトの方言を取得するためにアプリケーションは常に空の(NULLではない)文字列を渡すべきです.

poSpatialFilter 引数は, OGRLayer::SetSpatialFilter() メソッドと同様の方法で返される地物の境界矩形を選択するために使用されるジオメトリです. 特別な空間制限がない場合はNULLにすることができます.

ExecuteSQL()呼び出しの結果は通常, ステートメントからの結果セットを表す一時的なOGRLayerです. たとえば, SELECTステートメントの場合です. 返された一時的なレイヤーは, もはや必要ない場合には, GDALDataset::ReleaseResultsSet() メソッドで解放する必要があります. データソースが破棄される前に解放しないと, クラッシュする可能性があります.