Skip to content

Commit a965a13

Browse files
authoredOct 21, 2016
Fix import of shapefiles to postgres - regression introduced in 5abdfcb (#3652)
1 parent 70a4ee7 commit a965a13

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
@@ -3546,6 +3546,9 @@ QgsVectorLayerImport::ImportError QgsPostgresProvider::createEmptyLayer(
35463546
fldIdx = -1; // it is incremented in the for loop, i.e. restarts at 0
35473547
}
35483548
}
3549+
3550+
pkList = QStringList( primaryKey );
3551+
pkType = QStringList( "serial" );
35493552
}
35503553
else
35513554
{

‎tests/src/python/test_provider_postgres.py

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

360360
def testKey(lyr, key, kfnames):
361361
self.execSQLCommand('DROP TABLE IF EXISTS qgis_test.import_test')
362-
uri = '%s table="qgis_test"."import_test" (g) key=\'%s\'' % (self.dbconn, key)
362+
uri = '%s table="qgis_test"."import_test" (g)' % self.dbconn
363+
if key is not None:
364+
uri += ' key=\'%s\'' % key
363365
err = QgsVectorLayerImport.importLayer(lyr, uri, "postgres", lyr.crs())
364366
self.assertEqual(err[0], QgsVectorLayerImport.NoError,
365367
'unexpected import error {0}'.format(err))
366368
olyr = QgsVectorLayer(uri, "y", "postgres")
367369
self.assertTrue(olyr.isValid())
368370
flds = lyr.fields()
369371
oflds = olyr.fields()
370-
self.assertEquals(oflds.size(), flds.size())
371-
for i in range(0, oflds.size()):
372-
self.assertEqual(oflds[i].name(), flds[i].name())
372+
if key is None:
373+
# if the pkey was not given, it will create a pkey
374+
self.assertEquals(oflds.size(), flds.size() + 1)
375+
self.assertEquals(oflds[0].name(), kfnames[0])
376+
for i in range(flds.size()):
377+
self.assertEqual(oflds[i + 1].name(), flds[i].name())
378+
else:
379+
# pkey was given, no extra field generated
380+
self.assertEquals(oflds.size(), flds.size())
381+
for i in range(oflds.size()):
382+
self.assertEqual(oflds[i].name(), flds[i].name())
373383
pks = olyr.pkAttributeList()
374384
self.assertEquals(len(pks), len(kfnames))
375385
for i in range(0, len(kfnames)):
@@ -379,6 +389,7 @@ def testKey(lyr, key, kfnames):
379389
testKey(lyr, '"f1"', ['f1'])
380390
testKey(lyr, '"f1","F2"', ['f1', 'F2'])
381391
testKey(lyr, '"f1","F2","f3"', ['f1', 'F2', 'f3'])
392+
testKey(lyr, None, ['id'])
382393

383394

384395
if __name__ == '__main__':

0 commit comments

Comments
 (0)
Please sign in to comment.