Skip to content

Commit aac0c92

Browse files
committedMar 2, 2020
Connectios API fix Postgres char conversion in execSQL
Fixes #34806
1 parent dfa5cb6 commit aac0c92

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed
 

‎src/providers/postgres/qgspostgresproviderconnection.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ QList<QVariantList> QgsPostgresProviderConnection::executeSqlPrivate( const QStr
228228
if ( typeRes.size() > 0 && typeRes.first().size() > 0 )
229229
{
230230
static const QStringList intTypes = { QStringLiteral( "oid" ),
231-
QStringLiteral( "char" ),
232231
QStringLiteral( "int2" ),
233232
QStringLiteral( "int4" ),
234233
QStringLiteral( "int8" )
@@ -263,6 +262,10 @@ QList<QVariantList> QgsPostgresProviderConnection::executeSqlPrivate( const QStr
263262
{
264263
vType = QVariant::Bool;
265264
}
265+
else if ( typName == QStringLiteral( "char" ) )
266+
{
267+
vType = QVariant::Char;
268+
}
266269
else
267270
{
268271
QgsDebugMsg( QStringLiteral( "Unhandled PostgreSQL type %1" ).arg( typName ) );

‎tests/src/python/test_qgsproviderconnection_postgres.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class TestPyQgsProviderConnectionPostgres(unittest.TestCase, TestPyQgsProviderCo
3838
@classmethod
3939
def setUpClass(cls):
4040
"""Run before all tests"""
41+
4142
TestPyQgsProviderConnectionBase.setUpClass()
4243
cls.postgres_conn = "service='qgis_test'"
4344
if 'QGIS_PGTEST_DB' in os.environ:
@@ -219,6 +220,7 @@ def test_nulls(self):
219220
self.assertEqual(conn.executeSql('SELECT NULL::bool'), [[None]])
220221
self.assertEqual(conn.executeSql('SELECT NULL::text'), [[None]])
221222
self.assertEqual(conn.executeSql('SELECT NULL::bytea'), [[None]])
223+
self.assertEqual(conn.executeSql('SELECT NULL::char'), [[None]])
222224

223225
def test_pk_cols_order(self):
224226
"""Test that PKs are returned in consistent order: see GH #34167"""
@@ -228,6 +230,13 @@ def test_pk_cols_order(self):
228230
self.assertEqual(conn.table('qgis_test', 'bikes_view').primaryKeyColumns(), ['pk', 'name'])
229231
self.assertEqual(conn.table('qgis_test', 'some_poly_data_view').primaryKeyColumns(), ['pk', 'geom'])
230232

233+
def test_char_type_conversion(self):
234+
"""Test char types: see GH #34806"""
235+
236+
md = QgsProviderRegistry.instance().providerMetadata(self.providerKey)
237+
conn = md.createConnection(self.uri, {})
238+
self.assertEqual(conn.executeSql("SELECT relname, relkind FROM pg_class c, pg_namespace n WHERE n.oid = c.relnamespace AND relname = 'bikes_view' AND c.relkind IN ('t', 'v', 'm')"), [['bikes_view', 'v']])
239+
231240

232241
if __name__ == '__main__':
233242
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.