Skip to content

Commit f68af8c

Browse files
committedAug 23, 2013
Fix subset in ogr provider for ODBC driver
1 parent 8aa7795 commit f68af8c

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed
 

‎src/providers/ogr/qgsogrfeatureiterator.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,18 @@ QgsOgrFeatureIterator::QgsOgrFeatureIterator( QgsOgrProvider* p, const QgsFeatur
5454

5555
if ( !P->subsetString().isEmpty() )
5656
{
57-
QByteArray sql = "SELECT * FROM " + P->quotedIdentifier( OGR_FD_GetName( OGR_L_GetLayerDefn( ogrLayer ) ) );
57+
QByteArray layerName = OGR_FD_GetName( OGR_L_GetLayerDefn( ogrLayer ) );
58+
if ( P->ogrDriverName == "ODBC" ) //the odbc driver does not like schema names for subset
59+
{
60+
QString layerNameString = P->mEncoding->toUnicode( layerName );
61+
int dotIndex = layerNameString.indexOf( "." );
62+
if ( dotIndex > 1 )
63+
{
64+
QString modifiedLayerName = layerNameString.right( layerNameString.size() - dotIndex - 1 );
65+
layerName = P->mEncoding->fromUnicode( modifiedLayerName );
66+
}
67+
}
68+
QByteArray sql = "SELECT * FROM " + P->quotedIdentifier( layerName );
5869
sql += " WHERE " + P->textEncoding()->fromUnicode( P->subsetString() );
5970
QgsDebugMsg( QString( "SQL: %1" ).arg( P->textEncoding()->toUnicode( sql ) ) );
6071
ogrLayer = OGR_DS_ExecuteSQL( ogrDataSource, sql.constData(), NULL, NULL );

‎src/providers/ogr/qgsogrprovider.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,18 @@ bool QgsOgrProvider::setSubsetString( QString theSQL, bool updateFeatureCount )
398398

399399
if ( !mSubsetString.isEmpty() )
400400
{
401-
QByteArray sql = "SELECT * FROM " + quotedIdentifier( OGR_FD_GetName( OGR_L_GetLayerDefn( ogrOrigLayer ) ) );
401+
QByteArray layerName = OGR_FD_GetName( OGR_L_GetLayerDefn( ogrOrigLayer ) );
402+
if ( ogrDriverName == "ODBC" ) //the odbc driver does not like schema names for subset
403+
{
404+
QString layerNameString = mEncoding->toUnicode( layerName );
405+
int dotIndex = layerNameString.indexOf( "." );
406+
if ( dotIndex > 1 )
407+
{
408+
QString modifiedLayerName = layerNameString.right( layerNameString.size() - dotIndex - 1 );
409+
layerName = mEncoding->fromUnicode( modifiedLayerName );
410+
}
411+
}
412+
QByteArray sql = "SELECT * FROM " + quotedIdentifier( layerName );
402413
sql += " WHERE " + mEncoding->fromUnicode( mSubsetString );
403414

404415
QgsDebugMsg( QString( "SQL: %1" ).arg( mEncoding->toUnicode( sql ) ) );

0 commit comments

Comments
 (0)
Please sign in to comment.