Skip to content

Commit 5e4bb00

Browse files
committedNov 1, 2016
Fix import of shapefiles to postgres - regression introduced in 5abdfcb (#3652)
(cherry picked from commit a965a13)
1 parent 629ca8b commit 5e4bb00

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed
 

‎src/providers/postgres/qgspostgresprovider.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3526,6 +3526,9 @@ QgsVectorLayerImport::ImportError QgsPostgresProvider::createEmptyLayer( const Q
35263526
fldIdx = -1; // it is incremented in the for loop, i.e. restarts at 0
35273527
}
35283528
}
3529+
3530+
pkList = QStringList( primaryKey );
3531+
pkType = QStringList( "serial" );
35293532
}
35303533
else
35313534
{

‎tests/src/python/test_provider_postgres.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -471,17 +471,27 @@ def testImportKey(self):
471471

472472
def testKey(lyr, key, kfnames):
473473
self.execSQLCommand('DROP TABLE IF EXISTS qgis_test.import_test')
474-
uri = '%s table="qgis_test"."import_test" (g) key=\'%s\'' % (self.dbconn, key)
474+
uri = '%s table="qgis_test"."import_test" (g)' % self.dbconn
475+
if key is not None:
476+
uri += ' key=\'%s\'' % key
475477
err = QgsVectorLayerImport.importLayer(lyr, uri, "postgres", lyr.crs())
476478
self.assertEqual(err[0], QgsVectorLayerImport.NoError,
477479
'unexpected import error {0}'.format(err))
478480
olyr = QgsVectorLayer(uri, "y", "postgres")
479481
self.assertTrue(olyr.isValid())
480482
flds = lyr.fields()
481483
oflds = olyr.fields()
482-
self.assertEquals(oflds.size(), flds.size())
483-
for i in range(0, oflds.size()):
484-
self.assertEqual(oflds[i].name(), flds[i].name())
484+
if key is None:
485+
# if the pkey was not given, it will create a pkey
486+
self.assertEquals(oflds.size(), flds.size() + 1)
487+
self.assertEquals(oflds[0].name(), kfnames[0])
488+
for i in range(flds.size()):
489+
self.assertEqual(oflds[i + 1].name(), flds[i].name())
490+
else:
491+
# pkey was given, no extra field generated
492+
self.assertEquals(oflds.size(), flds.size())
493+
for i in range(oflds.size()):
494+
self.assertEqual(oflds[i].name(), flds[i].name())
485495
pks = olyr.pkAttributeList()
486496
self.assertEquals(len(pks), len(kfnames))
487497
for i in range(0, len(kfnames)):
@@ -491,6 +501,7 @@ def testKey(lyr, key, kfnames):
491501
testKey(lyr, '"f1"', ['f1'])
492502
testKey(lyr, '"f1","F2"', ['f1', 'F2'])
493503
testKey(lyr, '"f1","F2","f3"', ['f1', 'F2', 'f3'])
504+
testKey(lyr, None, ['id'])
494505

495506

496507
class TestPyQgsPostgresProviderCompoundKey(unittest.TestCase, ProviderTestCase):

0 commit comments

Comments
 (0)
Please sign in to comment.