From 8d9565099ad565cdb492a35c61a63319c9561457 Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Thu, 28 Nov 2019 18:58:07 +0100 Subject: [PATCH] PG provider connection API: convert to bools Fixes #33130 --- src/providers/postgres/qgspostgresproviderconnection.cpp | 7 ++++++- tests/src/python/test_qgsproviderconnection_postgres.py | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/providers/postgres/qgspostgresproviderconnection.cpp b/src/providers/postgres/qgspostgresproviderconnection.cpp index ec7f3911cc5..f5c2117fd27 100644 --- a/src/providers/postgres/qgspostgresproviderconnection.cpp +++ b/src/providers/postgres/qgspostgresproviderconnection.cpp @@ -294,7 +294,12 @@ QList QgsPostgresProviderConnection::executeSqlPrivate( const QStr { const QVariant::Type vType { typeMap.value( colIdx, QVariant::Type::String ) }; QVariant val { res.PQgetvalue( rowIdx, colIdx ) }; - if ( val.canConvert( static_cast( vType ) ) ) + // Special case for bools: 'f' and 't' + if ( vType == QVariant::Bool ) + { + val = val.toString() == 't'; + } + else if ( val.canConvert( static_cast( vType ) ) ) { val.convert( static_cast( vType ) ); } diff --git a/tests/src/python/test_qgsproviderconnection_postgres.py b/tests/src/python/test_qgsproviderconnection_postgres.py index d1e638e4064..64ea27f05c8 100644 --- a/tests/src/python/test_qgsproviderconnection_postgres.py +++ b/tests/src/python/test_qgsproviderconnection_postgres.py @@ -177,6 +177,14 @@ class TestPyQgsProviderConnectionPostgres(unittest.TestCase, TestPyQgsProviderCo self.assertFalse('Raster2' in table_names) self.assertTrue('Raster1' in table_names) + def test_true_false(self): + """Test returned values from BOOL queries""" + + md = QgsProviderRegistry.instance().providerMetadata(self.providerKey) + conn = md.createConnection(self.uri, {}) + self.assertEqual(conn.executeSql('SELECT FALSE'), [[False]]) + self.assertEqual(conn.executeSql('SELECT TRUE'), [[True]]) + if __name__ == '__main__': unittest.main()