mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-13 00:03:09 -04:00
Merge pull request #5694 from elpaso/bugfix-17518-pg-import--without-schema
[bugfix][postgres] Browser panel D&D a layer onto a postgresql connection tree …
This commit is contained in:
commit
9d8a39fac0
@ -3696,6 +3696,7 @@ QgsVectorLayerExporter::ExportError QgsPostgresProvider::createEmptyLayer( const
|
||||
{
|
||||
// populate members from the uri structure
|
||||
QgsDataSourceUri dsUri( uri );
|
||||
|
||||
QString schemaName = dsUri.schema();
|
||||
QString tableName = dsUri.table();
|
||||
|
||||
@ -3791,6 +3792,20 @@ QgsVectorLayerExporter::ExportError QgsPostgresProvider::createEmptyLayer( const
|
||||
{
|
||||
conn->PQexecNR( QStringLiteral( "BEGIN" ) );
|
||||
|
||||
// We want a valid schema name ...
|
||||
if ( schemaName.isEmpty() )
|
||||
{
|
||||
QString sql = QString( "SELECT current_schema" );
|
||||
QgsPostgresResult result( conn->PQexec( sql ) );
|
||||
if ( result.PQresultStatus() != PGRES_TUPLES_OK )
|
||||
throw PGException( result );
|
||||
schemaName = result.PQgetvalue( 0, 0 );
|
||||
if ( schemaName.isEmpty() )
|
||||
{
|
||||
schemaName = QStringLiteral( "public" );
|
||||
}
|
||||
}
|
||||
|
||||
QString sql = QString( "SELECT 1"
|
||||
" FROM pg_class AS cls JOIN pg_namespace AS nsp"
|
||||
" ON nsp.oid=cls.relnamespace "
|
||||
|
@ -1,10 +1,14 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""QGIS Unit tests for the postgres provider.
|
||||
|
||||
Note: to prepare the DB, you need to run the sql files specified in
|
||||
tests/testdata/provider/testdata_pg.sh
|
||||
|
||||
.. note:: This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
"""
|
||||
from builtins import next
|
||||
__author__ = 'Matthias Kuhn'
|
||||
@ -765,6 +769,39 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
|
||||
testKey(lyr, '"f1","F2","f3"', ['f1', 'F2', 'f3'])
|
||||
testKey(lyr, None, ['id'])
|
||||
|
||||
# See https://issues.qgis.org/issues/17518
|
||||
def testImportWithoutSchema(self):
|
||||
|
||||
def _test(table, schema=None):
|
||||
self.execSQLCommand('DROP TABLE IF EXISTS %s CASCADE' % table)
|
||||
uri = 'point?field=f1:int'
|
||||
uri += '&field=F2:double(6,4)'
|
||||
uri += '&field=f3:string(20)'
|
||||
lyr = QgsVectorLayer(uri, "x", "memory")
|
||||
self.assertTrue(lyr.isValid())
|
||||
|
||||
table = ("%s" % table) if schema is None else ("\"%s\".\"%s\"" % (schema, table))
|
||||
dest_uri = "%s sslmode=disable table=%s (geom) sql" % (self.dbconn, table)
|
||||
err = QgsVectorLayerExporter.exportLayer(lyr, dest_uri, "postgres", lyr.crs())
|
||||
olyr = QgsVectorLayer(dest_uri, "y", "postgres")
|
||||
self.assertTrue(olyr.isValid(), "Failed URI: %s" % dest_uri)
|
||||
|
||||
# Test bug 17518
|
||||
_test('b17518')
|
||||
|
||||
# Test fully qualified table (with schema)
|
||||
_test("b17518", "qgis_test")
|
||||
|
||||
# Test empty schema
|
||||
_test("b17518", "")
|
||||
|
||||
# Test public schema
|
||||
_test("b17518", "public")
|
||||
|
||||
# Test fully qualified table (with wrong schema)
|
||||
with self.assertRaises(AssertionError):
|
||||
_test("b17518", "qgis_test_wrong")
|
||||
|
||||
def testStyle(self):
|
||||
self.execSQLCommand('DROP TABLE IF EXISTS layer_styles CASCADE')
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user