Skip to content

Commit

Permalink
Show supported SQL dialects for ogr layers, linked to doc pages
Browse files Browse the repository at this point in the history
  • Loading branch information
kannes committed Sep 14, 2024
1 parent 28732d9 commit 50b4474
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions src/gui/qgsquerybuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
#include <QPushButton>
#include <QTextStream>

#include <gdal.h>


// constructor used when the query builder must make its own
// connection to the database
Expand Down Expand Up @@ -95,11 +97,45 @@ QgsQueryBuilder::QgsQueryBuilder( QgsVectorLayer *layer,

lblDataUri->setText( tr( "Set provider filter on %1" ).arg( layer->name() ) );

lblProviderStorageType->setOpenExternalLinks(true);

//TODO what to put there for other providers, e.g. postgis?
QStringList supportedSqlDialectsText = QStringList();
if ( layer->dataProvider()->name() == "ogr" ) {

GDALDriverH driver = GDALGetDriverByName( layer->dataProvider()->storageType().toLocal8Bit().constData() );
const char* supportedSqlDialects = GDALGetMetadataItem( driver, GDAL_DMD_SUPPORTED_SQL_DIALECTS, nullptr );

QStringList supportedSqlDialectsList = QString(supportedSqlDialects).split(" ");
int count = supportedSqlDialectsList.count();
for( int i=0; i<count; i++ )
{
QString supportedSqlDialect = supportedSqlDialectsList.at(i);
QString link = QString();
QString title = supportedSqlDialect;
if ( supportedSqlDialect == "NATIVE" ) {
const QString gdalDriverHelpTopic = GDALGetMetadataItem( driver, GDAL_DMD_HELPTOPIC, nullptr ); // e.g. "drivers/vector/ili.html"
link = "https://gdal.org/en/latest/" + gdalDriverHelpTopic;
title = layer->dataProvider()->storageType();
} else if ( supportedSqlDialect == "OGRSQL" ) {
link = "https://gdal.org/user/ogr_sql_dialect.html";
} else if ( supportedSqlDialect == "SQLITE" ) {
link = "https://gdal.org/user/sql_sqlite_dialect.html";
}
const QString supportedSqlDialectText = "<a href='" + link +"'>" + title + "</a>";
supportedSqlDialectsText.append(supportedSqlDialectText);
}
}

if ( layer->dataProvider()->name() == QStringLiteral( "virtual" ) )
// virtual data provider has a long storage type description that isn't useful for the user
lblProviderStorageType->setText( tr( "Provider: <b>%1</b>" ).arg( layer->dataProvider()->name() ) );
else
lblProviderStorageType->setText( tr( "Provider: <b>%1</b>, Storage Type: <b>%2</b>" ).arg( layer->dataProvider()->name() ).arg( layer->dataProvider()->storageType() ) );

if ( !supportedSqlDialectsText.isEmpty() )
lblProviderStorageType->setText ( lblProviderStorageType->text() + ", Supported SQL Dialects: " + supportedSqlDialectsText.join(", ") );

lblProviderStorageType->setToolTip( tr( "The available options are depending on the layer's provider and storage type." ) );

mTxtSql->setText( mOrigSubsetString );
Expand Down

0 comments on commit 50b4474

Please sign in to comment.